控件的数据库对象,图形中的所有信息都存放在该对象中,调用MxDraw::GetDatabase()函数得到控件的数据库,调用acdbCurDwg()得到当前活动控件的数据库
class McDbDatabase : public McRxObject;
McDbDatabase.h
例如: 得到图中有扩展数据的所有文字
bool GetTextFormXdata(CString sXdataName,AcDbObjectIdArray& aryId) { aryId.setLogicalLength(0); // 设置文字做为过滤条件 MrxDbgRbList spData = acutBuildList(RTDXF0, _T("TEXT"),0); MrxDbgSelSet ss; // 得所有文字 ss.allSelect(spData.data() ); AcDbObjectIdArray tmpAryId; ss.asArray(tmpAryId); // 遍历每个文字,看有没有扩展数据名sXdataName的扩展数据。 for(int i =0; i < tmpAryId.length();i++) { McDbObjectPointer<McDbEntity> spEnt(tmpAryId[i],McDb::kForRead); if(spEnt.openStatus() != Mcad::eOk) continue; MrxDbgRbList spXdata = spEnt->xData(sXdataName); if(spXdata.isEmpty()) continue; // 找到有扩展数据的文字 aryId.append(tmpAryId[i]); } return !aryId.isEmpty(); }
例如: 得到对象。
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(..) { ... } */ } }