【问题标题】:AutoCAD Handle and HandelToObject contradiction in python and VBA macropython和VBA宏中的AutoCAD Handle和HandelToObject矛盾
【发布时间】:2020-07-08 04:32:13
【问题描述】:

我正在尝试借助 VBA 宏和此 answer 中提供的 python 函数在 python 脚本中获取 XRecords 的数据 [DXF 组代码 + 值]。

在 python 中,我使用Handle 属性获取XRecord 的句柄,但是,并非所有XRecord 都成功返回其数据,并且在@987654324 行抛出Unknown handle 错误@ 在 VBA 宏中。

我已经找到了解释,其中一个是 this one,但我的情况不同,它首先获取 XRecord 的句柄,然后再提供它,因此,没有做出任何假设关于如何在 AutoCAD 绘图中创建句柄。

那么,XRecord 如何返回它的句柄,然后HandleToObject 方法无法从其Handle 属性的值中找到该XRecord?!

编辑:-

我猜问题出在HandleToObject 本身,我让python 预览调用错误的句柄(比如“3E7”)然后我打开绘图并使用@从普通entget 预览中获取XRecord 的数据在AutoCAD的命令行中输入987654329@,结果成功。

((-1 . <Entity name: 7ff649f06e70>) (0 . "XRECORD") (5 . "3E7") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ff649f06e20>) (102 . "}") (330 . <Entity name: 7ff649f06e20>) (100 . "AcDbXrecord") (280 . 1) (1 . "Wall1"))

有没有办法解决这个问题?!!

【问题讨论】:

    标签: python excel vba autocad comtypes


    【解决方案1】:

    注意:这不是解决方案,它是参考 XRECORDS 的另一种方式

    我已经将处理对象的句柄替换为对象的对象ID,然后我复制了vba宏,将复制的宏重命名为 “getfromid”,复制了XRecord_return,将副本重命名为XRecord_return_1,然后进行了如下小改动:-

    在vba宏getfromid

    1- 转到Set myXRecord = mydoc.HandleToObject(handler) 行并将HandleToObject 替换为ObjectIDToObject

    2- 将Dim name2 As String 更改为Dim name2 As String, handler As LongPtr

    在python函数XRecord_return_1

    1- 将行 xl.Application.Run("facilitator.xlsm!mod_facilitate.getxrecord") 更改为 xl.Application.Run("facilitator.xlsm!mod_facilitate.getfromid")


    这应该可以避免未知句柄错误的来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多