Деформационные швы
VetCAD

IronPython 1.1 для AutoCAD 2006-2009

    0 оценок

Лоббист Python

размещено: 09 Сентября 2008
обновлено: 13 Сентября 2008
IronPython для AutoCAD 2006-2009
Запуск скриптов (макросов) на Python для управления AutoCAD через COM и через ARX.NET.
Возможная будущая альтернатива VBA и Visual Lisp

1. Запускаете команду _.netload
2. В этой папке выбираете файл PyAcadDotNet0X.dll, где X – год, соответствующий вашему AutoCAD.
3. Запускаете команду pyfile
4. В диалоге выбираете файл скрипта из папки «примеры»
5. Наслаждаетесь результатом
примечание: если у вас автокад 2007-2009 скрипт можно запускать через Lisp следующим образом (runpyfile "полный путь к файлу скрипта")

Файлы скриптов можно редактировать в бесплатном редакторе Notepad++, который обеспечивает подцветку синтаксиса. Обязательно поставьте опцию отображения пробельных символов, так как отступы в Python отделяют друг от друга блоки кода.

LISP
Можно получать передавать и получать значения от IronPython следующим образом:
(runpyfile "полный путь к файлу скрипта" аргумент1 аргумент2 ...)
Примеры таких скриптов лежат в папке «примеры» (lisptest.py, lisptest2.py)

COM
Тем, кто программировал Автокад через COM, используя VBA или Delphi, могут делать то же самое и на IronPython:
У NET.api класса Application есть свойство AcadApplication, которое является корнем COM-модел Автокада.
from Autodesk.AutoCAD.ApplicationServices import Application
app = Application.AcadApplication
doc = app.ActiveDocument
print doc.FullName

ссылку на объект AcadDocument можно получить и следующим образом:
doc = Application.DocumentManager.MdiActiveDocument.AcadDocument

Сборки для взаимодействия с COM : AutoCAD.COM.R16.dll (для 2006) AutoCAD.COM.R17.dll (для 2007-2009)
Прямо ссылаться на них не нужно, но их наличие необходимо. Для применения COM модели нужно знать содержимое сборки.
Содержимое сборок можно посмотреть с помощью NetReflector, который бесплатен и доступен для скачивания в интернете. Можно ориентироваться на VBA-справку в справочной системе Автокада.

ObjectARX.NET API
Чтобы разобраться как программировать,скачивайте справку и примеры в составе ObjectARX SDK c сайта Autodesk для своей версии Автокада. Там есть примеры для NET.

Ограничения:
Оператор print выдает вместо киррилицы кракозябры ???? ??? . Приходится пользоваться Editor.WriteMessage
Файлы скриптов должны быть в формате UTF8 для корректного отображения киррилицы в командной строке при использовании
оператора print. (Так как исходный файл PyAcadDotNet прилагается, может кто-нибудь это исправит)
Нельзя работать с реакторами ни через COM, ни через NET.
Нельзя наследовать от arx.net классов.
Пока не существует нормального редактора форм для IronPython. Можно попробовать SharpDevelop + PythonBindings, но эта вещь пока сырая
(также смотри http://code.google.com/p/pyacaddotnet/)

Комментарии

Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Комментарии 1-7 из 7
Лоббист Python , 11 сентября 2008 в 15:07
#1
11.09 - теперь при запуске команды pyfile выделение не сбрасывается и можно использовать PickfirstSelectionSet
Красин , 11 сентября 2008 в 15:58
#2
обновление от 11 09 - теперь при запуске команды pyfile выделение не сбрасывается и можно использовать PickfirstSelectionSet
f4nt0m , 25 июня 2010 в 17:06
#3
Понемногу стараюсь осваивать Python и хотелось с его помощью программировать в ACADe, подскажите пожалуйста какие книги нужно прочитать или с помощью чего можно этому научиться.
Красин , 19 августа 2013 в 02:49
#4
f4nt0m, я для себя сделал вывод, что надо избегать нераспространенных средств разработки, и для Автокада лучше использовать "мейнстримные" языки: С++, C# и, может быть, F#, которые входят в Visual Studio.
kubanych , 15 февраля 2016 в 12:57
#5
Цитата:
Сообщение #1 от Лоббист Python
COM
Тем, кто программировал Автокад через COM, используя VBA или Delphi, могут делать то же самое и на IronPython:


как получить доступ через ModelSpace.Item(x) к конкретным line, point, 3dfacе и т.д.?
[code]
ac3dFace = 1
acLine = 19
acPoint = 22


doc.Utility.Prompt("\n объектов "+str(doc.ModelSpace.Count))

points=0
lines=0
faces=0

i=0
while i
kubanych , 15 февраля 2016 в 12:59
#6
i=0
while i
kubanych , 15 февраля 2016 в 13:01
#7
не вставляется код
ent=doc.ModelSpace.Item(i)
if ent.EntityType==acLine:
как от ent перейти к line со всеми его методами и полями?
zip

1.23 МБ