天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 6|回复: 0

删除了图形中的块参照

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    成功地删除了图形中的块参照。
    我的本意是先把块参照中的实体拷贝(我用了深层克隆)出来,再删除它。
    程序运行结果是确实删掉了块参照,但我拷贝的实体却不知在哪里?
    以下是代码,哪儿错了么?
    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();
    }

     

     

     

     

    删除了图形中的块参照
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:22 , Processed in 0.060901 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表