zoukankan      html  css  js  c++  java
  • wblockCloneObjects从块定义写块到外部文件

    wblockCloneObjects从块定义写块到外部文件简单例子

            AcDbObjectIdArray objIds;
            ads_name ent;
            ads_point pt;
            if (RTNORM != acedEntSel(_T("
    选择一个块参照对象:"),ent,pt))
            {
                acutPrintf(_T("
    未选择有效对象!"));
                return;
            }
            AcDbObjectId objId;
            acdbGetObjectId(objId,ent);
            AcDbObjectPointer<AcDbBlockReference> pBlkRef(objId,AcDb::kForRead);
            if (Acad::eOk != pBlkRef.openStatus())
            {
                acutPrintf(_T("
    未选择块参照对象!"));
                return;
            }
            AcDbObjectId blkId=pBlkRef->blockTableRecord();
            AcDbBlockTableRecordPointer pBlkDef(blkId,AcDb::kForRead);
            if (Acad::eOk != pBlkDef.openStatus())
            {
                acutPrintf(_T("
    打开块定义对象失败!"));
                return;
            }                
            AcDbBlockTableRecordIterator *pNewItor=NULL;
            pBlkDef->newIterator(pNewItor);
            if (pNewItor==NULL)
            {
                acutPrintf(_T("
    创建块定义遍历器失败!"));
                return;
            }        
            for (pNewItor->start();!pNewItor->done();pNewItor->step())
            {
                AcDbObjectId entId;
                pNewItor->getEntityId(entId);
                objIds.append(entId);
                //将扩展字典改为硬拥有,否则写块出去后会丢失
                AcDbEntity *pEnt=NULL;
                Acad::ErrorStatus es = pNewItor->getEntity(pEnt,AcDb::kForWrite);
                if (Acad::eOk == es)
                {            
                    AcDbObjectId dicId= pEnt->extensionDictionary();
                    if (AcDbObjectId::kNull != dicId)
                    {
                        AcDbObjectPointer<AcDbDictionary> pDic(dicId,AcDb::kForWrite);
                        if(Acad::eOk == pDic.openStatus())
                        {
                            pDic->setTreatElementsAsHard(Adesk::kTrue);
                            pDic->close();
                        }
                    }
                    pEnt->close();
                }
            }
            delete pNewItor;
            if (objIds.length()<1)
            {
                acutPrintf(_T("
    块定义中没有实体对象!"));
                return;
            }
            AcDbDatabase *pNewDb=new AcDbDatabase();
            if (pNewDb==NULL)
            {
                acutPrintf(_T("
    创建新数据库对象失败!"));
                return;
            }
            AcDbObjectId msId=pNewDb->currentSpaceId();
            AcDbIdMapping idMap;
            //获取对象id的原始数据库指针
            AcDbDatabase *pOriginalDatabase=objIds.at(0).originalDatabase();
            //恢复到外部参照符号状态
            pOriginalDatabase->restoreOriginalXrefSymbols();
            //写块克隆
            Acad::ErrorStatus es=pOriginalDatabase->wblockCloneObjects(objIds,msId,idMap,AcDb::kDrcIgnore);    
            //恢复外部参照符号之前的状态
            pOriginalDatabase->restoreForwardingXrefSymbols();
            if(Acad::eOk == es)
            {
                acutPrintf(_T("
    克隆成功!"));
            }
            else
            {
                acutPrintf(_T("
    克隆出错,错误码%s"),acadErrorStatusText(es));
            }        
            pNewDb->saveAs(_T("d:\myclone.dwg"));
            delete pNewDb;
            pNewDb=NULL;
  • 相关阅读:
    HDU
    洛谷- P1306 斐波那契公约数
    HDU
    HDU
    POJ3321
    SPOJ
    HDU
    POJ 1236 Network of Schools
    POJ-3169 Layout (差分约束+SPFA)
    POJ-1062 昂贵的聘礼 (最短路)
  • 原文地址:https://www.cnblogs.com/edata/p/13729391.html
Copyright © 2011-2022 走看看