148 lines
2.5 KiB
C++
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);
|
|
} |