Files
envi-code/SourceCode/Code2026/tg_shs/shs_geLib/TGGiShellData.cpp
T
2026-09-28 15:28:50 +08:00

148 lines
2.5 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGGiShellData.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: ÀàµÄ¶¨Òå
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGGiShellData.h"
#include "TGGiExplodeDraw.h"
TGGiShellData::TGGiShellData()
: mpVertexList(NULL), mpEdgeData(NULL), mpFaceData(NULL),
mpFaceList(NULL), mpVertexData(NULL), mpEdgeVisArray(NULL)
{
}
TGGiShellData::~TGGiShellData()
{
if (mpVertexList)
{
delete [] mpVertexList;
}
if (mpEdgeData)
{
delete mpEdgeData;
}
if (mpFaceData)
{
delete mpFaceData;
}
if (mpFaceList)
{
delete [] mpFaceList;
}
if (mpVertexData)
{
delete mpVertexData;
}
if (mpEdgeVisArray)
{
delete mpEdgeVisArray;
}
}
unsigned int TGGiShellData::numberOfFaces()
{
if (!mpFaceList)
{
return 0;
}
unsigned int numFaces = 0;
Adesk::Int32* pTempFaceList = mpFaceList;
for (unsigned int i = 0; i < mFaceListSize; )
{
++numFaces;
unsigned int facePoints = *pTempFaceList;
pTempFaceList += (facePoints + 1);
i += (facePoints + 1);
}
return numFaces;
}
unsigned int TGGiShellData::numberOfEdges()
{
if (!mpFaceList)
{
return 0;
}
int numEdges = 0;
for (unsigned int i = 0; i < mFaceListSize; )
{
unsigned nEdge = abs(mpFaceList[i]);
numEdges += nEdge;
i += nEdge + 1;
}
return numEdges;
}
Adesk::UInt8* TGGiShellData::getEdgeVisible()
{
if (!mpEdgeData)
{
return NULL;
}
return mpEdgeData->visibility();
}
void TGGiShellData::setEdgeData(const AcGiEdgeData *pEdgeData)
{
if (mpEdgeData)
{
delete mpEdgeData;
}
if (mpEdgeVisArray)
{
delete mpEdgeVisArray;
}
mpEdgeData = NULL;
mpEdgeVisArray = NULL;
if (!pEdgeData)
{
return;
}
mpEdgeData = new AcGiEdgeData();
int numEdges = numberOfEdges();
const Adesk::UInt8 *pEdgeVisArray1 = pEdgeData->visibility();
if (pEdgeVisArray1)
{
mpEdgeVisArray = new Adesk::UInt8[numEdges];
for (int p = 0; p < numEdges; p++)
{
mpEdgeVisArray[p] = pEdgeVisArray1[p];
}
mpEdgeData->setVisibility(mpEdgeVisArray);
}
}
void TGGiShellData::ConvertTo3DFace(AcDbVoidPtrArray &entSet) const
{
TGGiExplodeDraw dc(entSet);
mpEdgeData->setVisibility(mpEdgeVisArray);
dc.DrawShell(mNumVertices, mpVertexList, mFaceListSize, mpFaceList, mpEdgeData);
}