2015-07-09 7 views
2

Я работаю с чертежом AutoCAD, используя библиотеку языков и языков программирования Python. Это фрагмент моего кода:Создайте объект Hatch в AutoCAD с помощью COM

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? Спасибо!

ответ

0

Ожидаемые типы:

Тип: Variant (массив Arc, Circle, Line, полилинии, область, сплайн объекты)

И я также рекомендовал бы дважды проверить состояние:

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

Смотрите полную документацию на 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

+0

Спасибо, Augusto! Разумеется, я уже прочитал эту статью в базе знаний Autodesk. Я также видел это и многие другие примеры VBA и LISP. Но как насчет Python? Native Python поддерживает только числовые типы массивов, но для AppendOuterLoop мне нужен вариантный массив графических объектов AutoCAD (Arc, Line, Circle и др.) - в моем скрипте только 1 круг (( – nsedenkov

+0

Я не эксперт по Python ... но несколько статей, в которых упоминается win32com.client.VARIANT, вы пробовали? Извините, что не помогли. –