外部块插入解决方案(2000版本)
最近问外部块的人很多, 解决一下..问题: 把已有的DWG文件作为块插入当前图纸中. 假设块不含attribute.
环境: ARX2000, VC++6, ACAD2000.
思路: 将要插入的DWG文件作为一个block table记录加入当前图纸的数据库, 然后在当前图纸的Model Space(已存在的block table记录)里添加对这个DWG文件记录的块参考.
注意: 需加入dbents.h, dbmain.h, dbsymtb.h. 错误检查请各位自己酌情处理.
代码:
AcDbDatabase* pSourceDb = new AcDbDatabase(FALSE, FALSE); //建立空白临时数据库<BR>AcDbDatabase* pCurDb; // 当前图纸数据库
AcDbBlockTable* pBlkTable; // 当前图纸的block table<BR>AcDbBlockTableRecord* pModelSpace; // 当前图纸的model space<BR>AcDbBlockReference* pBlkRef = new AcDbBlockReference;// 预备加入当前图纸的块参考
AcDbObjectId blkRecordId;// 预备加入当前图纸的块记录(从外部DWG文件制作)ID
pCurDb = acdbHostApplicationServices()->workingDatabase(); // 取得当前图纸数据库
pSourceDb->readDwgFile(<filename>); // 读取外部文件<BR>pCurDb->insert(blkRecordId, <block name>, pSourceDb);<BR>// 将外部文件以块记录的方式插入当前图纸数据库, <block name>为自定义块名, 当前数据库将在自己的block table中自动建立新的块记录, 记录名为<block name>, 并将外部文件数据库中的所有实体加入块记录<BR>delete pSourceDb;// 释放无用的指针
//这里前后可以考虑加上文件锁定. 不过我的测试结果是如果保证只对active document进行操作, 不加文件锁定也可以正常运行.
pBlkRef->setBlockTableRecord(blkRecordId);<BR>// 将块参考设为引用刚刚从外部文件加入当前数据库的块记录
// 插入点, base point, scale factor, rotation等等请各位酌情处理..
pCurDb->getSymbolTable(pBlkTable, AcDb::kForRead); // 取得当前块表<BR>pBlkTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForWrite);//取得当前model space块记录<BR>pModelSpace->appendAcDbEntity(pBlkRef);// 将块参考加入model space
pBlkRef->close();<BR>pModelSpace->close();<BR>pBlkTable->close();<BR>// 打扫工作 好详细啊~~
不知道你手上还有没有更好的冬冬啊,发几个我参考参考:)
页:
[1]