Тема: Python & AutoCAD через ActiveX

Кто пишет или писал скрипты для автокада на питоне, прошу предоставить тексты своих программ. Не могу понять, какой питоновский тип нужен для перадачи массивов (variant содержащий array of doubles)

Re: Python & AutoCAD через ActiveX

а ты как вааще с питона выходишь на афтокад???

Re: Python & AutoCAD через ActiveX

если кого интересует - я таки осилил сей вопрос... из питона можно управлять автокадом через activeX...

Re: Python & AutoCAD через ActiveX

из питона ... управлять автокадом через activeX...

Звучит несколько провокационно...
А вообще, зачем тебе это?

Re: Python & AutoCAD через ActiveX

в иной раз нада написать внешнее приложение - которое имеет свой интерфэйс, работает с файлами, а иногда вызывает афтокад и в нём отрисовывает графику...

Re: Python & AutoCAD через ActiveX

> todesengel
Я интересуюсь. Сбрось на мыло пример.

Re: Python & AutoCAD через ActiveX

Проблема-то была с тем, что я пользовался ActivePython ActiveState, в состав которого входят пакеты win32, win32com, win32comext и заморока была в том, что не удавалось передать одномерный массив safearray, состоящий из VT_R8, в variant'е в COM-методы. Непонятно, как какому типу Python этот variant соответствует tuple,list? Ничего не получалось у меня.То есть непонятки с соответствием типов COM и  Python
вот текст скрипта:
# -*- coding:UTF-8 -*-
from win32com.client import constants,Dispatch
acad = Dispatch("AutoCAD.Application.17")
dwg = acad.ActiveDocument
print dwg.Name
util = dwg.Utility
pnt1 = util.GetPoint(Prompt = u"1st point:")
print pnt1 #выдает (347635.44121223688, 78276.203674415592, 0.0)
pnt2 = util.GetPoint(Prompt = u"1st point:",Point = pnt1)
#pywintypes.com_error: 'Invalid argument Point in GetPoint'
Есть еще пакет comtypes, также можно скачать в инете бесплатно, но результат тот же:
# -*- coding:UTF-8 -*-
from comtypes.client import *
acad = GetActiveObject("AutoCAD.Application.17")
dwg = acad.ActiveDocument
print dwg.Name
util = dwg.Utility
pnt1 = util.GetPoint(Prompt = u"1st point:")
print pnt1
pnt2 = util.GetPoint(Prompt = u"1st point:",Point = pnt1)
#_ctypes.COMError: Invalid argument Point in GetPoint

Re: Python & AutoCAD через ActiveX

А вот этот вариант наконец-то работает!
Надеюсь, у вас установлен пакеты ctypes (теперь входит в Python 2.5, если у вас версия 2.4, то скачивается и ставиться отдельно) и comtypes:
# -*- coding:UTF-8 -*-
from comtypes.client import *
from comtypes.automation import *
acad = GetActiveObject("AutoCAD.Application.17")
dwg = acad.ActiveDocument
print dwg.Name
util = dwg.Utility
pnt1 = util.GetPoint(Prompt = u"1st point:")
import array
a = array.array("d", (pnt1))
v = VARIANT(a)
pnt2 = util.GetPoint(Prompt = u"2st point:",Point = v)

Re: Python & AutoCAD через ActiveX

в общем надо было создать array (стандартная библиотека Python) обернуть его в variant (comtypes)
Вот еще пример:
# -*- coding:UTF-8 -*-
from comtypes.client import *
from comtypes.automation import *
from array import array
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))
acad = GetActiveObject("AutoCAD.Application")
dwg = acad.ActiveDocument
mspace = dwg.ModelSpace
util = dwg.Utility
GetPoint = util.GetPoint
circle = mspace.AddCircle(point(0,0),100)
circle.Color = 3
acad.ZoomExtents()

Re: Python & AutoCAD через ActiveX

Можно также использовать IronPython
Недавно появился интересный экспериментальный проект, основанный на нем, - PyAcad.NET  http://code.google.com/p/pyacaddotnet/. Он позволяет пользоваться и COM, и NET-привязками к Автокаду. Хотелось бы, чтобы он был доведен до ума и в автокаде появилась встроенная среда разработки на IronPython c визуальным редактором форм.

Re: Python & AutoCAD через ActiveX

Оказалось, что comtypes - сырой проект и некоторые вещи в нем недоступны. На сегодня, на мой взгляд, самый лучший выбор - использование IronPython: http://dwg.ru/dnl/4419.
Правда, придется восплользоваться NetReflector, потому что редакторы для IronPython с автозавершением кода мне не попадались.http://www.red-gate.com/products/reflector/
Сам я пользуюсь редактором Notepad++ (http://notepad-plus.sourceforge.net/ru/site.htm)и надеюсь на выход SharpDeveloper 3 c нормальным IronPython-bindig http://www.icsharpcode.net/OpenSource/S … op30.(Было бы здорово, если бы для IronPython существовал редактор уровня PyDev для Eclipse)
Для тех, кто не в курсе: IronPython -это реализация языка Python для платформы .NET. Благодаря этому существует доступ ко всем библиотекам, которые пишутся для CLR на таких языках как C#, VB.NET,Delpi.NET и т.д., ко всей библиотеке NET Framework (а NET Framework предоставляет доступ ко всей Windows) и можно программировать Автокад как использованием COM (COM - NET interop), так и с использованием ObjectARX NET.(причем даже в одной и той же программе). Также очень легко можно использовать процедуры в exe и dll-файлах,написанных на С,С++,Delphi, через P-Invoke. Это дает огромные возможности по сравнению с VBA (ужасный язык) и по сравнению с Visual Lisp (сложный язык и нет библиотек)
В IronPython встроены некоторые стандартные модули CPython (sys, os, regex и др.), доступ к другим модулям CPython имеется, если это чисто пайтоновские библиотеки, а не dll-ки.
Единственная серьезная проблема с IronPython - это отсутствие интегрированной в Автокад среды разработки с современный редактором, дизайнером форм и т.д. Если бы такая среда сегодня имелась, то VBA для AutoCAD можно было бы выбросить на свалку истории. Есть, конечно и другие проблемы - как, например, невозможность использовать реакторы. Но все эти проблемы решаемы.
Кстати, PyAcad.NET (наверное, первый и единственный проект по внедрению IronPython в Автокад) может принимать результаты от Lisp и возвращать значения Lisp функции, что абсолютно, насколько я знаю, недостижимо с VBA.
Так как программирование AutoCAD через VBA - это есть не что иное как прогаммирование через СОМ, то знатоки VBA for AutoCAD могут спокойно применять накопленные знания в IronPython в то же самое время пользуясь той инфраструктурой, которая предоставляется самим языком, а также NET framework.
Python - это язык общего назначения и применяется он во многих областях (например в науке и в web-программировании), имеет реализацию даже для платформы Java (Jython http://jython.org/Project/) и он востребован, у него есть будущее, поэтому опыт программирование в Python пригодится в любом случае.

Re: Python & AutoCAD через ActiveX

Python - как много в этом звуке...
Мне, напрмер, он известен как язык WEB-программирования. Зачем его использовать под AutoCAD? - я не проникся. Все что о нем здесь было сказано - сказано "взагали".

Re: Python & AutoCAD через ActiveX

То, что сказано про VBA и Visual LISP, показывает только то, что автор не имеет ни малейшего представления об этих языках и тонкостях работы с ними.

Re: Python & AutoCAD через ActiveX

Предыдущие ораторы просто консерваторы.
О том, где применяется Python, вы можете прочесть на официальном сайте http://www.python.org/about/success/).Помимо WEB, есть еще компьютерное моделирование, научные вычисления и еще много чего.
Про Visual Lisp ничего плохого не могу сказать, но это сложный язык, притом что VLisp IDE до сих пор не имеет визульного редактора форм, поэтому визаульного в VLisp не так уж и много.
VBA - халтура от Microsoft - просто ущербный язык по сравнению с Python. Я не буду это доказывать, это очевидно.
Спорить пока не о чем, т.к. пока Python не внедрен Autodeskом с свои продукты. Если бы это было сделано, инженеры перешли бы с Lisp & VBA на Python

Re: Python & AutoCAD через ActiveX

Krasyn пишет:

Спорить пока не о чем, т.к. пока Python не внедрен Autodeskом с свои продукты

Спорить пока не о чем, т.к.  Python никогда не будет внедрен Autodeskом с свои продукты.
Как никогда не будет внедрен такой замечательный язык как Эсперанто для межнационального общения. Хоть энтузиасты раньше орали, что все остальные "просто консерваторы".
Вы руководите Autodesk? Подозреваю, что нет. Хотя никто не запрещает Вам купить фирму и "внедрить". Только вряд ли после этого рынок останется. Фирма сделала главное - дала возможность разрабатывать на любом языке, в любой среде, поддерживающей COM и .NET. Хоть на Python. Хоть на Anaconda.
Python, достоинства которого как языка никто не отрицает, просто займет свою нишу, как заняли их многие языки программирования. Некоторые заняли нишу на свалке.

Re: Python & AutoCAD через ActiveX

По подсказке todesengel только что зашел на сайт usa.autodesk.com на станичку Autodesk Maya. И вот что я прочитал:

Autodesk Maya has three Application Programming Interfaces you can use:
1)MEL(Maya Embedded Language) is a powerful and easy to learn ...
2)[b]Python™ API[/b] — Python is a powerful and easy to learn scripting language. There is Python support for calling the Maya commands. In addition, we support the Maya Python API which allows developers to write Maya plug-ins and stand-alones without having to learn C++.
3)OpenMaya API (C++)— Is the highest performance and most powerful Maya API. ...

Что теперь скажут наши уважаемы консерваторы?
ссылка http://www.autodesk.com/us/maya/docs/Ma … n_API.html

Re: Python & AutoCAD через ActiveX

Спорить пока не о чем, т.к. Python никогда не будет внедрен Autodeskом с свои продукты.

НИКОГДА НЕ ГОВОРИ НИКОГДА

Re: Python & AutoCAD через ActiveX

Кому интересно:
Редактор форм для IronPython и не только, генерируемый код вполне работоспособен в PyAcad
ссылка http://farpy.holev.com/#download
IDE для IronPython - IronPython Studio
ссылка http://www.codeplex.com/IronPythonStudio
Чтобы установить IronPython Studio сперва необходимо скачать и установить это http://download.microsoft.com/download/ … Client.exe
и это http://download.microsoft.com/download/ … Redist.exe

Re: Python & AutoCAD через ActiveX

Krasyn, продолжаете заниматься этой темой? ищу людей, с кем можно советоваться