TA的每日心情 | 开心 昨天 15:23 |
---|
签到天数: 69 天 [LV.6]常住居民II
管理员
- 积分
- 2704
|
成功地删除了图形中的块参照。
我的本意是先把块参照中的实体拷贝(我用了深层克隆)出来,再删除它。
程序运行结果是确实删掉了块参照,但我拷贝的实体却不知在哪里?
以下是代码,哪儿错了么?
void EraseBlockRef()
{ Acad::ErrorStatus es;
AcDbBlockTable *pBlockTable;
AcDbBlockTableRecord *pBlockTableRecord;
AcDbBlockTableIterator *pIter;
char *pBTName;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead); //打开 块表 准备读
pBlockTable->newIterator(pIter); //建立 块表 遍历器
for (pIter->start(); !pIter->done(); pIter->step())
{
pIter->getRecord(pBlockTableRecord,AcDb::kForRead);//得到块表记录!
pBlockTableRecord->getName(pBTName);
acutPrintf("\n块表名为:%s",pBTName);
CString name = pBTName;
free(pBTName);
if(name.Find("*", 0) == -1) //如果块记录的名字中不含有"*"
{
AcDbBlockTableRecordIterator *pnewIter;
pBlockTableRecord->newIterator(pnewIter); //建立 块表记录 编历器
AcDbObjectId objId;
AcDbObjectIdArray arrobj,objList; //列表
for (; !pnewIter->done(); pnewIter->step())
{
pnewIter->getEntityId(objId); //得到 块表记录 中的实体Id
acutPrintf("\n块中实体Id%lx",objId);
objList.append(objId); //写进列表
}
delete pnewIter;
//克隆该块参照中的实体到当前模型空间
//
AcDbBlockTable *pBTable;
AcDbObjectId modelSpaceId;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBTable, AcDb::kForRead);
pBTable->getAt(ACDB_MODEL_SPACE, modelSpaceId); //模型空间id
pBTable->close();
AcDbIdMapping idMap; // 创建一个新的 ID 映射关系
acdbHostApplicationServices()->workingDatabase()
->deepCloneObjects(objList, modelSpaceId, idMap);
acutPrintf("\nok2");
//删除块参照中的实体
//////////////////////////////////////////////////////////
pBlockTableRecord->getBlockReferenceIds(arrobj);
acutPrintf("\n块参照的Id%lx",arrobj);
if(arrobj.logicalLength()<1)
continue;
for(int i=0;i<arrobj.logicalLength();i++)
{
AcDbEntity *pEnt;
es = acdbOpenAcDbEntity(pEnt,arrobj,AcDb::kForWrite);
acutPrintf("\n块参照中对象的Id%lx",arrobj);
if(es!=Acad::eOk)
continue;
pEnt->erase();
pEnt->close();
}
arrobj.setLogicalLength(0); //!!
//////////////////////////////////////////////////////////
pBlockTableRecord->close();
}
}
delete pIter;
pBlockTable->close();
} |
|