乐筑天下

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

使用ObjectArx将现有dwg文件添加到新图形的正确方法

[复制链接]

7

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
44
发表于 2016-10-11 14:51:27 | 显示全部楼层 |阅读模式
我正在创建一个新的dwg文件,如下所示:
  1. DocumentCollection acDocMgr = acApp.DocumentManager;
  2. Document acDoc = acDocMgr.Add("acad");
  3. acApp.DocumentManager.MdiActiveDocument = acDoc;

我要做的下一件事是将现有的dwg文件导入到这个新图形中。 我的问题是,将现有 dwg 图形导入新图形的正确方法是什么?  主要关注点是新图形不会以任何方式进行修改。 以下是我见过的一些方法,但我想确保我没有修改要导入到新图形中的原始图形:
使用DocumentManager
  1. DocumentCollection acDocMgr = Application.DocumentManager;
  2. acDocMgr.Open(strFileName, false);

方法2的方法1,使用ReadDwgFile
  1. Using db As New Database(False, True)
  2. db.ReadDwgFile(strFileName, FileOpenMode.OpenForReadAndWriteNoShare, True, "")

再次,我所寻找的只是在不修改原始dwg文件的情况下将现有dwg导入到新图形中的正确方法。 谢谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2016-10-11 15:16:19 | 显示全部楼层
Database.Insert(matrixTransform, source ceDb, HRC veSourceDb)将源数据库的Modelspace插入到调用该方法的数据库中。
回复

使用道具 举报

7

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
44
发表于 2016-10-11 15:58:53 | 显示全部楼层
杰夫:谢谢!快速问题:由于新图形当前处于打开状态,我应该将第一个参数(blockName)设置为什么?以下是我到目前为止所做的:
  1. // Get the current document and database
  2. Document doc = acApp.DocumentManager.MdiActiveDocument;
  3. Editor ed = doc.Editor;
  4. Database db = acApp.DocumentManager.MdiActiveDocument.Database;
  5. // Create a temporary database to import an existing file
  6. using (Database tmpDB = new Database(false, false))
  7. {
  8. string strPath = @"C:\a\1.dwg";
  9. // Read the 'strPath' file into the new database              
  10. tmpDB.ReadDwgFile(strPath, System.IO.FileShare.Read, true, "");
  11. // Try to insert our the dwg file as a block and get the return id of
  12. // the new block table record.
  13. ObjectId BlockID = db.Insert(blockName, tmpDB, true);
  14. }

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2016-10-11 16:08:41 | 显示全部楼层
如果使用我展示的方法,第一个参数是用于转换的矩阵3d。你可能希望这是没有转换。您不需要提供名称,也不需要将块定义插入到modelspace中,因为函数会为您这样做
“通过调用insert()函数将数据库指向的数据库模型空间插入数据库的模型空间。在插入过程中,所有插入的对象都将变换矩阵传递到其transformBy()函数中。”
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2016-10-12 07:56:57 | 显示全部楼层
如果第一步是克隆图形并将其打开。那么为什么不先使用File.Copy()呢? 然后只需打开新文件?
回复

使用道具 举报

7

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
44
发表于 2016-10-13 15:37:01 | 显示全部楼层
谢谢Jeff,我最终使用了你的建议并将matrixTransform参数设置为null。这很好。
回复

使用道具 举报

7

主题

16

帖子

1

银币

初来乍到

Rank: 1

铜币
44
发表于 2016-10-21 10:41:25 | 显示全部楼层
杰夫,我认为它是工作的,但我有一个问题。当我创建第一个绘图并使用“db.insert”方法时,它工作正常。但是,如果我让autocad保持打开状态并创建另一个图形,则“db.insert”将不再插入该图形。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 16:38 , Processed in 0.159021 second(s), 66 queries .

© 2020-2025 乐筑天下

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