//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : XAsdkShellData.cpp // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: 类的定义 // = Maintainers: // //-----------------------------------------------------------------------------+ #include "StdAfx.h" #include "XAsdkShellData.h" #include "XExplodeStream.h" XAsdkShellData::XAsdkShellData() : mpVertexList(NULL), mpEdgeData(NULL), mpFaceData(NULL), mpFaceList(NULL), mpVertexData(NULL), mpEdgeVisArray(NULL) { } XAsdkShellData::~XAsdkShellData() { 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 XAsdkShellData::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 XAsdkShellData::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* XAsdkShellData::getEdgeVisible() { if (!mpEdgeData) { return NULL; } return mpEdgeData->visibility(); } void XAsdkShellData::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 XAsdkShellData::ConvertTo3DFace(AcDbVoidPtrArray &entSet) const { XExplodeStream dc(entSet); mpEdgeData->setVisibility(mpEdgeVisArray); dc.DrawShell(mNumVertices, mpVertexList, mFaceListSize, mpFaceList, mpEdgeData); }