Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2015 12:34:32

SirJorah
Зарегистрирован: 2015-04-21
Сообщения: 41
Репутация: +  2  -
Профиль   Отправить e-mail  

Штриховка в AutoCAD

Уважаемые коллеги! В наличии следующий код:

    from comtypes.client import *
    from comtypes.automation import *
    def connect_acad(self):
        errcode = 0
        try:
            self.acad = GetActiveObject("AutoCAD.Application")
        except:
            errcode = 1
        if errcode == 0:
            try:
                self.dwg = self.acad.ActiveDocument
            except:
                errcode = 2
        if errcode == 0:
            self.mspace = self.dwg.ModelSpace
        return errcode
    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))
        
        txthght = 1.0
        txtshft = 0.3
        crclrd = 0.3
        p1 = point(xy[0], xy[1])
        ent = self.mspace.AddCircle(p1, crclrd)
        ent.Layer = lay
        #htch = self.mspace.AddHatch(0, 'SOLID', False)
        #htch.AppendOuterLoop(array("i", [ent,]))
        #htch.Evaluate()
        #htch.Layer = lay
        p1 = point(xy[0]+txtshft, xy[1]+txtshft)
        sh = len(num)
        if (len(self.nprefix) > 0) and (len(num.replace(self.nprefix, '')) > 3):
            sh = sh // 2
        th = string.Template('\H'+str(txthght)+';$n')
        ent = self.mspace.AddMText(p1, sh, th.substitute(n=num))
        ent.LineSpacingFactor = 0.7
        ent.Layer = lay
(Привожу сильно в сокращении - только то, что касается вопроса. Если вдруг кому интересно - полный код здесь: https://github.com/nsedenkov/py_acadcoord/blob/master/acadcoord.py) Вопрос в следующем: закоментаренные строки в функции mark_point - это попытка заштриховать окружность, создаваемую выше методом AddCircle. Сам объект “штриховка” (Hatch) создается, однако чтобы его отобразить, нужно задать внешнюю границу методом AppendOuterLoop, аргументом которого должен быть массив графических примитивов AutoCAD в обертке VARIANT (подобно тому, который возвращает функция point - с той лишь разницей, что point возвращает массив из 2 или 3 чисел float). Вот собственно и вопрос: может кто знает, как передать в метод com-интерфейса массив графических примитивов (собственно, примитив будет один - та самая окружность, которая на данном этапе висит в переменной ent)? Заранее признателен за любой совет.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version