想做一个按dfx码属性修改实体的函数,不知道对不对,有没有高手告知 分割线处出了什么问题?还有更好的解决办法吗?请不吝赐教谢谢了!刚学arx 不懂的地方请大家多指点。 |
static void leiArxMFC1_plist(void) { // 判断是否存在名称为“dgx”的图层 AcDbLayerTable *pLayerTbl; acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLayerTbl, AcDb::kForRead); if (!pLayerTbl->has("dgx")) { acutPrintf("\n当前图形中未包含\"dgx\"图层!"); pLayerTbl->close(); return; } AcDbObjectId layerId; // “测试”图层的ID pLayerTbl->getAt("dgx", layerId); pLayerTbl->close(); //AcDbObjectIdArray entIds; //entIds.append(pEnt->objectId()); // 获得当前数据库的块表 AcDbBlockTable *pBlkTbl; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForRead); // 获得模型空间的块表记录 AcDbBlockTableRecord *pBlkTblRcd; pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead); pBlkTbl->close(); // 创建块表记录遍历器 AcDbBlockTableRecordIterator *pItr; // 块表记录遍历器 pBlkTblRcd->newIterator(pItr); AcDbEntity *pEnt; // 遍历的临时实体指针 ads_name entName; for (pItr->start(); !pItr->done(); pItr->step()) { // 利用遍历器获得每一个实体 pItr->getEntity(pEnt, AcDb::kForWrite); AcDbObjectId entId; entId = pEnt->objectId(); ------------------------------------------------------------------ acdbGetAdsName(entName,entId); struct resbuf *rbEnt; // 保存实体数据的结果缓冲区 struct resbuf *rb; // 用于遍历rbEnt的结果缓冲区 // 从entName获得保存实体数据的结果缓冲区 rbEnt = acdbEntGet(entName); rb = rbEnt; ------------------------------------------------------ while (rb != NULL) { switch (rb->restype) { case 8: // 图层 acutPrintf("\n图层:%s", rb->resval.rstring); break; case 39: // 厚度 acutPrintf("\n厚度:%s", rb->resval.rstring); break; case 30: // 高程 if (rb->resval.rreal == 60) { pEnt->setColorIndex(1); } acutPrintf("\n高程:%d", rb->resval.rreal); break; default: break; } // switch rb = rb->rbnext; // 切换到下一个节点 } // while // 注意需要关闭实体 pEnt->close(); } delete pItr; // 遍历器使用完毕之后一定要删除! pBlkTblRcd->close(); } |