得到对象。
C++开发|大少爷|2017-07-27 16:46
-
回答:
void CTestCommands::GetCurve() { // 打开文件。 BOOL isOK = MxDraw::ReadDwg(MxDraw::GetCurOcxHandle(),_T("G:\cad\23.dxf")); if(!isOK) return; // 构造选择集 MrxDbgSelSet ss; // 得到图上所有对象 ss.allSelect(); McDbObjectIdArray aryId; // 得到对象id数组 ss.asArray(aryId); // 编历数组,得到每个对象的数据。 for(int i = 0; i < aryId.length();i++) { // 写方式打开对象. McDbObjectPointer<McDbEntity> spEntity(aryId[i],McDb::kForRead); if(spEntity.openStatus() != Mcad::eOk) continue; // 得到对象的颜色. McCmColor color = spEntity->color(); // 得到对象的类型. McRxClass* pRxClass = spEntity->isA(); if(pRxClass == McDbLine::desc() ) { // 是个直线。 McDbLine* pLine = McDbLine::cast(spEntity.object()); // 得到直线的开始点,结束点 . McGePoint3d sPt,eP; sPt = pLine->startPoint(); eP = pLine->endPoint(); } else if(pRxClass == McDbArc::desc()) { // 是圆弧. McDbArc* pArc = McDbArc::cast(spEntity.object()); // 圆弧中的中心点,半径,开始角,结束角. McGePoint3d cenPt = pArc->center(); double dR = pArc->radius(); double dSAng = pArc->startAngle(); double dEAng = pArc->endAngle(); } else if(pRxClass == McDbPolyline::desc()) { // 是PL线 McDbPolyline* pPL = McDbPolyline::cast(spEntity.object()); int iNum = pPL->numVerts(); for(int j = 0; j < iNum;j++) { // 得到PL线的端点坐标。 McGePoint3d pt; pPL->getPointAt(j,pt); // 得到圆弧的凸度. double dBulge = 0.0; pPL->getBulgeAt(j,dBulge); } } /* 基它对象。 else if(..) { ... } */ } }