乐筑天下

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

[编程交流] 具有自动的ThisDrawing属性

[复制链接]

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 22:10:23 | 显示全部楼层 |阅读模式
我目前正在重新编译代码以与AutoCAD 2013兼容。
原始代码是使用“魔术宏”创建的,用于将VBA代码转换为VB。NET代码使用COM接口。
我在尝试创建ThisDrawing属性以供其余代码使用时遇到了一个问题。
在AutoCAD 2012中,这种方式效果很好:
 
  1. Public ReadOnly Property ThisDrawing() As AcadDocument
  2. Get
  3. Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.AcadDocument
  4. End Get
  5. End Property

 
但在AutoCAD 2013中,这种方式不再有效。
我得到了一个“无法转换类型的COM对象”系统__ComObject“to interface type”Autodesk。AutoCAD。互操作。“AcadDocument”例外。
 
我尝试了几种不同的方法来实现这一点。许多人在网上举出了例子,但都没有用。
 
一些失败的尝试:
 
  1. Public ReadOnly Property ThisDrawing() As AcadDocument
  2.        Get
  3.            Return DocumentExtension.GetAcadDocument(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument)
  4.        End Get
  5. End Property

 
  1. Public ReadOnly Property ThisDrawing() As AcadDocument
  2.        Get
  3.            Return CType(DocumentExtension.GetAcadDocument(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument), AcadDocument)
  4.        End Get
  5. End Property

 
  1. Public ReadOnly Property ThisDrawing() As Object
  2.        Get
  3.            Dim DotNetDoc As Autodesk.AutoCAD.ApplicationServices.Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  4.            Dim oDoc As Object = DocumentExtension.GetAcadDocument(DotNetDoc)
  5.            Return oDoc
  6.        End Get
  7. End Property

 
  1. Public ReadOnly Property ThisDrawing() As AcadDocument
  2.        Get
  3.            Dim tAcadDoc As Autodesk.AutoCAD.ApplicationServices.Document
  4.            Dim tAcadDocCOM As Autodesk.AutoCAD.Interop.AcadDocument
  5.            tAcadDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  6.            tAcadDocCOM = CType(Autodesk.AutoCAD.ApplicationServices.DocumentExtension.GetAcadDocument(tAcadDoc), Autodesk.AutoCAD.Interop.AcadDocument)
  7.            Return tAcadDocCOM
  8.        End Get
  9. End Property

 
其他人有没有遇到过这个问题,或者已经知道如何使用AutoCAD 2013实现这一点?
非常感谢。
克劳特1976
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 22:25:21 | 显示全部楼层
我知道VBA使用了AcadDocument
 
但是为什么你必须在网络中使用Acaddocument呢。为什么不直接使用文档?
 
  1. Private ThisDrawing As Document = Application.DocumentManager.MdiActiveDocument


  1. Public ReadOnly Property ThisDrawing() As Document
  2. Get
  3. Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  4. End Get
  5. End Property
回复

使用道具 举报

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 22:45:47 | 显示全部楼层
我不得不使用AcadDocument,因为代码是从VBA转换到VB的。NET使用Autodesk的“magic macro”。转换器使用COM接口来方便转换。
我发现了问题所在。这是新手犯的错误。英雄联盟
我未能更改引用以使用新的AutoCAD 2013类型库。
一旦我引用了正确的库,并将所有引用更改为AutoCAD。互操作和AutoCAD。互操作。在新的AxDBLib程序集上,一切都就绪了,现在下面的代码可以正常工作了。
 
  1. Public ReadOnly Property ThisDrawing() As AcadDocument
  2.        Get
  3.            Return DocumentExtension.GetAcadDocument(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument)
  4.        End Get
  5. End Property
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 22:46:35 | 显示全部楼层
你好,克劳特1976,
 
我已经阅读了你的帖子,不知道你是否可以提供更多关于更改对AxDBLib的引用的信息。我还没有找到关于那个图书馆的任何文档
 
谢谢
科林
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:09:05 | 显示全部楼层
我也在为此奋斗。必须从autocad程序文件夹(X:\program files\Autodesk\autocad 2014)中添加引用。查找Autodesk。AutoCAD。互操作。dll和Autodesk。AutoCAD。互操作。常见的dll。之后,神奇地出现在我面前,但看看你是否从ObjectARX2014或2013文件夹中丢失,如果是这样,那么添加以下内容:AcCoreMgd。dll;AcDx。dll。然后您可以使用以下选项:
  1. Public ReadOnly Property ThisDrawing As AcadDocument
  2.        Get
  3.            Return Application.DocumentManager.MdiActiveDocument.GetAcadDocument()
  4.        End Get
  5.    End Property
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:18:54 | 显示全部楼层
谢谢Codeplayer。我所要做的就是交换Autodesk的引用。AutoCAD。互操作。dll和Autodesk。AutoCAD。互操作。常见的从ObjectARX2014中的dll到“X:\Program files\Autodesk\Autocad 2014”。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:34 , Processed in 1.167542 second(s), 64 queries .

© 2020-2025 乐筑天下

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