明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1954|回复: 1

外部块插入解决方案(2000版本)

[复制链接]
发表于 2005-5-12 10:53:00 | 显示全部楼层 |阅读模式
最近问外部块的人很多, 解决一下.. 问题: 把已有的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); //建立空白临时数据库
AcDbDatabase* pCurDb; // 当前图纸数据库 AcDbBlockTable* pBlkTable; // 当前图纸的block table
AcDbBlockTableRecord* pModelSpace; // 当前图纸的model space
AcDbBlockReference* pBlkRef = new AcDbBlockReference;// 预备加入当前图纸的块参考 AcDbObjectId blkRecordId;// 预备加入当前图纸的块记录(从外部DWG文件制作)ID pCurDb = acdbHostApplicationServices()->workingDatabase(); // 取得当前图纸数据库 pSourceDb->readDwgFile(<filename>); // 读取外部文件
pCurDb->insert(blkRecordId, <block name>, pSourceDb);
// 将外部文件以块记录的方式插入当前图纸数据库, <block name>为自定义块名, 当前数据库将在自己的block table中自动建立新的块记录, 记录名为<block name>, 并将外部文件数据库中的所有实体加入块记录
delete pSourceDb;// 释放无用的指针 //这里前后可以考虑加上文件锁定. 不过我的测试结果是如果保证只对active document进行操作, 不加文件锁定也可以正常运行. pBlkRef->setBlockTableRecord(blkRecordId);
// 将块参考设为引用刚刚从外部文件加入当前数据库的块记录 // 插入点, base point, scale factor, rotation等等请各位酌情处理.. pCurDb->getSymbolTable(pBlkTable, AcDb::kForRead); // 取得当前块表
pBlkTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForWrite);//取得当前model space块记录
pModelSpace->appendAcDbEntity(pBlkRef);// 将块参考加入model space pBlkRef->close();
pModelSpace->close();
pBlkTable->close();
// 打扫工作
发表于 2005-5-25 16:16:00 | 显示全部楼层
好详细啊~~


不知道你手上还有没有更好的冬冬啊,发几个我参考参考:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 05:29 , Processed in 0.171315 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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