乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 24|回复: 1

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

[复制链接]

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 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(); // 读取外部文件
pCurDb->insert(blkRecordId, [b], pSourceDb);
// 将外部文件以块记录的方式插入当前图纸数据库, [b]为自定义块名, 当前数据库将在自己的block table中自动建立新的块记录, 记录名为[b], 并将外部文件数据库中的所有实体加入块记录
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();
// 打扫工作
回复

使用道具 举报

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-5-25 16:16:00 | 显示全部楼层
好详细啊~~
不知道你手上还有没有更好的冬冬啊,发几个我参考参考:)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 09:46 , Processed in 0.155086 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表