ObjectARX_AcDb2dPolyline複雜實體

1遍歷:訪問或者編輯複雜實體也須要經過特定的方式。3d

AcDb2dPolyline的頂點信息不能經過AcDb2dPolyline對象直接獲得,須要遍歷AcDb2dPolyline所包含的AcDb2dVertex對象:指針

void IteratePolyline(AcDbObject plineId)
{
//打開polyline對象
AcDb2dPolyline * pPline = NULL;
acdbOpenObject(pPline,plineId,AcDb::kForRead);

//建立頂點遍歷器指針
AcDbObjectIterator *pVertIter = pPline->vertexIterator();
pPline->close();
AcDb2dVertex * pVertex = NULL;
AcGePoint3d location;
AcDbObjectId vertexObjId;

//循環遍歷polyline頂點
for(int i = 0; !pVertIter->done(); i++,pVertIter->step())
{
vertexObjId = pVertIter->objectId();
acdbOpenObject(pVertex ,vertexObjId ,AcDb::kForRead);
location = pVertex ->position();
pVertex->close();
acutPrintf(_T("\頂點#%d位置:")_T(":%0.3f,%0.3f,%0.3f"),vertexNumber,location[X],location[Y],location[Z]);
}
//刪除遍歷器
delete pVertIter;
}

2.刪除:不能只是簡單的刪除複雜實體對象自己,還須要先依次刪除包含的子實體,再刪除複雜實體對象自己,才能刪除完整。code

先依次刪除AcDb2dPolyline所包含的頂點對象,在刪除AcDb2dPolyline對象:對象

void delete2dPolyline(AcDb2dPolyline * pPline)
{
//建立頂點遍歷器
AcDbObjectIterator * pIter = pPline->vertexIterator();
AcDbEntity * pEnt = NULL;
for(;!pIter->done();)
{
//依次刪除頂點
pEnt = pIter->entity();
pIter->step();
delete pEnt;
}
//刪除遍歷器,刪除polyLine
delete pIter;
delete pPline;
}
相關文章
相關標籤/搜索