【问题标题】:Make Hatch object in AutoCAD by the use of COM在 AutoCAD 中使用 COM 制作 Hatch 对象
【发布时间】:2015-09-27 14:22:17
【问题描述】:

我正在使用 Python 语言和 comtypes 库处理 AutoCAD 绘图。这是我的代码片段:

from comtypes.client import *
from comtypes.automation import *

def connect_acad(self):
    self.acad = GetActiveObject("AutoCAD.Application")
    self.dwg = self.acad.ActiveDocument
    self.mspace = self.dwg.ModelSpace

def mark_point(self, xy, num, lay):

    def point(*args):
        lst = [0.]*3
        if len(args) < 3:
            lst[0:2] = [float(x) for x in args[0:2]]
        else:
            lst = [float(x) for x in args[0:3]]
        return VARIANT(array("d",lst))

    def variant(data):
        return VARIANT(VT_VARIANT, data)

    def vararr(*data):
        if (  len(data) == 1 and 
              isinstance(data, collections.Iterable) ):
            data = data[0]
        return map(variant, data)

    p1 = point(xy[0], xy[1])
    ent = self.mspace.AddCircle(p1, 0.3)
    htch = self.mspace.AddHatch(0, 'SOLID', False)
    htch.AppendOuterLoop(vararr([ent,]))
    htch.Evaluate()

如果有人感兴趣,完整代码在这里:https://github.com/nsedenkov/py_acadcoord/blob/master/acadcoord.py

一切正常,但命令 htch.AppendOuterLoop 引发异常“ComTypeError”。可能有人知道从 AutoCAD 图形实体为 AppendOuterLoop 方法制作变体数组的正确方法吗?谢谢!

【问题讨论】:

    标签: python com autocad comtypes


    【解决方案1】:

    预期的类型是:

    类型:变体(Arc、Circle、Ellipse、Line、Polyline、Region、Spline 对象的数组)

    我还建议仔细检查条件:

    形成封闭边界的对象数组。数组可以由一个或多个对象组成。如果使用了多个对象,它们的端点必须重合才能正确创建循环。

    http://knowledge.autodesk.com/support/autocad-mechanical/getting-started/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-4CA06494-CDFF-46FA-9E1D-A0E8220F69F4-htm.html查看完整文档

    【讨论】:

    • 谢谢你,奥古斯托!当然,我已经在 Autodesk 知识库中阅读了这篇文章。我还看到了这个以及许多其他 VBA 和 LISP 示例。但是 Python 呢?本机 Python 仅支持数字数组类型,但对于 AppendOuterLoop,我需要 AutoCAD 图形实体(弧、线、圆等)的变体数组 - 在我的脚本中只有 1 个圆((
    • 我不是Python专家……但是有几篇文章提到了win32com.client.VARIANT,你试过吗?很抱歉没有提供或更多帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多