113 lines
4.4 KiB
C++
113 lines
4.4 KiB
C++
/***********************************************************************************************************************
|
|
*
|
|
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
|
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
|
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
|
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
|
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
|
* scope and manner of such use.
|
|
*
|
|
***********************************************************************************************************************/
|
|
/**
|
|
\file wrapper/HXWBasicTessellation.cpp
|
|
|
|
***********************************************************************************************************************/
|
|
|
|
#include <A3DSDKIncludes.h>
|
|
#include "HXWBasicTessellation.h"
|
|
|
|
|
|
|
|
//######################################################################################################################
|
|
HXWBasicTessellation::HXWBasicTessellation()
|
|
{
|
|
A3D_INITIALIZE_DATA(A3DTessBaseData, m_coordsdata);
|
|
m_coordsdata.m_pdCoords = NULL;
|
|
m_coordsdata.m_uiCoordSize = m_uiCoordsAllocated = 0;
|
|
}
|
|
|
|
//######################################################################################################################
|
|
HXWBasicTessellation::~HXWBasicTessellation()
|
|
{
|
|
A3D_INITIALIZE_DATA(A3DTessBaseData, m_coordsdata);
|
|
reset();
|
|
}
|
|
|
|
//######################################################################################################################
|
|
void HXWBasicTessellation::reset()
|
|
{
|
|
free(m_coordsdata.m_pdCoords);
|
|
m_coordsdata.m_pdCoords = NULL;
|
|
m_coordsdata.m_uiCoordSize = m_uiCoordsAllocated = 0;
|
|
}
|
|
|
|
//######################################################################################################################
|
|
void HXWBasicTessellation::add_coords(A3DDouble* pdCoords, A3DUns32 uiCoordsSize)
|
|
{
|
|
if(m_uiCoordsAllocated == 0)
|
|
{
|
|
m_uiCoordsAllocated = ALLOCATION_STEP + uiCoordsSize;
|
|
m_coordsdata.m_pdCoords = (A3DDouble*) malloc((size_t) m_uiCoordsAllocated * sizeof(A3DDouble));
|
|
}
|
|
else if(!(uiCoordsSize + m_coordsdata.m_uiCoordSize < m_uiCoordsAllocated))
|
|
{
|
|
m_uiCoordsAllocated = uiCoordsSize + m_coordsdata.m_uiCoordSize + ALLOCATION_STEP;
|
|
A3DDouble* temp = (A3DDouble*) malloc((size_t) m_uiCoordsAllocated * sizeof(A3DDouble));
|
|
memcpy(temp, m_coordsdata.m_pdCoords, (size_t) m_coordsdata.m_uiCoordSize * sizeof(A3DDouble));
|
|
if(m_coordsdata.m_pdCoords != NULL)
|
|
{
|
|
free(m_coordsdata.m_pdCoords);
|
|
m_coordsdata.m_pdCoords = NULL;
|
|
}
|
|
m_coordsdata.m_pdCoords = temp;
|
|
}
|
|
m_coordsdata.m_uiCoordSize += uiCoordsSize;
|
|
for(unsigned i = 0 ; i < uiCoordsSize; ++i)
|
|
m_coordsdata.m_pdCoords[m_coordsdata.m_uiCoordSize-uiCoordsSize+i] = pdCoords[i];
|
|
}
|
|
|
|
//######################################################################################################################
|
|
void HXWBasicTessellation::add_coord(A3DDouble dCoord)
|
|
{
|
|
if(m_uiCoordsAllocated == 0)
|
|
{
|
|
m_coordsdata.m_pdCoords = (A3DDouble*) malloc(ALLOCATION_STEP * sizeof(A3DDouble));
|
|
m_uiCoordsAllocated = ALLOCATION_STEP;
|
|
}
|
|
else if(!(m_coordsdata.m_uiCoordSize + 1< m_uiCoordsAllocated))
|
|
{
|
|
m_uiCoordsAllocated = m_coordsdata.m_uiCoordSize + ALLOCATION_STEP;
|
|
A3DDouble* temp =(A3DDouble*) malloc((size_t) m_uiCoordsAllocated * sizeof(A3DDouble));
|
|
memcpy(temp, m_coordsdata.m_pdCoords, (size_t) m_coordsdata.m_uiCoordSize * sizeof(A3DDouble));
|
|
if(m_coordsdata.m_pdCoords != NULL)
|
|
{
|
|
free(m_coordsdata.m_pdCoords);
|
|
m_coordsdata.m_pdCoords = NULL;
|
|
}
|
|
m_coordsdata.m_pdCoords = temp;
|
|
}
|
|
m_coordsdata.m_pdCoords[m_coordsdata.m_uiCoordSize++] = dCoord;
|
|
}
|
|
|
|
//######################################################################################################################
|
|
void HXWBasicTessellation::free_extra_coords()
|
|
{
|
|
if(m_coordsdata.m_uiCoordSize == m_uiCoordsAllocated)
|
|
return;
|
|
|
|
A3DDouble* pnew = NULL;
|
|
if(m_coordsdata.m_uiCoordSize != 0)
|
|
{
|
|
pnew = (A3DDouble*) malloc((size_t) m_coordsdata.m_uiCoordSize * sizeof(A3DDouble));
|
|
memcpy(pnew, m_coordsdata.m_pdCoords, (size_t) m_coordsdata.m_uiCoordSize * sizeof(A3DDouble));
|
|
}
|
|
if(m_coordsdata.m_pdCoords != NULL)
|
|
{
|
|
free(m_coordsdata.m_pdCoords);
|
|
m_coordsdata.m_pdCoords = NULL;
|
|
}
|
|
|
|
m_coordsdata.m_pdCoords = pnew;
|
|
m_uiCoordsAllocated = m_coordsdata.m_uiCoordSize;
|
|
}
|