Направете обект Hatch в AutoCAD с помощта на COM

Работя с чертежи на AutoCAD, използвайки език Python и библиотека comtypes. Това е фрагмент от моя код:

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? Благодаря ти!


person nsedenkov    schedule 09.07.2015    source източник


Отговори (1)


Очакваните видове са:

Тип: Вариант (масив от обекти дъга, кръг, елипса, линия, полилиния, регион, сплайн)

И също така бих препоръчал да проверите отново условието:

Масив от обекти, образуващи затворена граница. Масивът може да се състои от един или повече обекти. Ако се използва повече от един обект, техните крайни точки трябва да съвпадат, за да може цикълът да бъде създаден правилно.

Вижте пълната документация на 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

person Augusto Goncalves    schedule 09.07.2015
comment
Благодаря ти, Аугусто! Разбира се, вече прочетох тази статия в базата знания на Autodesk. Също така видях този и много други примери за VBA и LISP. Но какво да кажем за Python? Native Python поддържа само числови типове масиви, но за AppendOuterLoop имам нужда от вариантен масив от графични обекти на AutoCAD (дъга, линия, кръг и други) - в моя скрипт само 1 кръг (( - person nsedenkov; 09.07.2015
comment
Не съм експерт по Python... но в няколко статии се споменава win32com.client.VARIANT, пробвал ли си го? Съжалявам, че не съм или повече помощ. - person Augusto Goncalves; 09.07.2015