Python Extension for AutoCad
Editor/Debuger
Pycad — это расширение для AutoCAD, которое позволяет использовать Python для программирования в среде CAD.
Мы адаптируем Pycad для работы с основными версиями AutoCAD: Autodesk AutoCAD, ZWCAD и CICAD.
Программа поддерживает AutoCAD 2013–2020 (для версий ниже 2014 требуется установка .Net 4.5). Загрузите сжатый файл, распакуйте его в любой каталог, а затем используйте команду Netload в AutoCAD для выбора файла NFox.Pycad.Acad.dll из каталога распаковки. Для работы с ZWCAD или CICAD используйте файл NFox.Pycad.Gcad.dll.
В качестве редактора используется vscode. Введите команду pye в AutoCAD, чтобы автоматически открыть vscode. Вам потребуется установить vscode, а также расширения Python от Microsoft и Python версии 3.7+.
После завершения редактирования кода введите команду pyrb в AutoCAD, чтобы скомпилировать скрипт Python.
Проект pytest содержит множество примеров, которые можно использовать в качестве справочного материала.
В правом нижнем углу окна vscode есть окно, где вы можете вводить код или копировать его из редактора для немедленного выполнения и просмотра результатов.
Измените структуру проекта Pycad с пакета на международную структуру. Корневой каталог может быть назван произвольно, но убедитесь, что в нём есть каталог extension. Этот каталог нельзя переименовывать или удалять. Проект data может использоваться для хранения файлов данных, доступ к которым осуществляется через функцию findfile(filename) в коде. Каталог cuix может использоваться для размещения файлов cuix AutoCAD для создания пользовательских меню, панелей инструментов и лент. Мы переработали функцию публикации, которая теперь доступна через команду pyrelease. Вы можете выбрать несколько проектов для одновременной публикации. После публикации в каталоге temp будет создан установочный файл xxx.Setup.exe. Вы можете установить Pycad и проекты разработки на компьютеры без установленной программы. Команда pye была переименована в pyedit.
Отладчик в основном готов. Он предоставляет возможность тестирования и отладки. Чтобы начать отладку, откройте AutoCAD, проект pytest, нажмите F5 и введите команду в AutoCAD. Чтобы выйти из режима отладки, щёлкните кнопку «Разрыв соединения» в vscode.
Исправлена функция публикации, добавлен модуль invokeArx для вызова функций Arx. Примеры использования можно найти в проекте pytest в модуле runtime.
Если при вводе команды pye появляется сообщение об ошибке «Система не может найти указанный файл», найдите файл settings.json в папке Pycad\bin и измените параметр editor.path на путь установки vscode.
В конфигурации vscode внесите изменения в следующие параметры:
Files: Associations |
AutoComplete: Paths |
Запуск:
Импорт модулей:
from pycad.runtime import *
from pycad.system import *
Первый пример программы: «Hello world!»
@command()
def test(doc):
print("hello world")
Первая строка @command() указывает, что следующая функция является функцией команды. Имя команды — test. Doc — это передаваемый параметр, который представляет текущий основной документ. Если вам непонятно, как это работает, вы можете использовать следующий метод для отладки и просмотра информации:
@command()
def test2(doc):
print "the type is :" , type(doc)
print "the dwg name is :" , doc.Name
args=dir(doc)
for val in args:
print "the doc object has method or propertyname is :", val
Pycad в основном основан на объектной модели ObjectARX .NET и предоставляет вторичную оболочку для следующих объектов:
"acap": "Autodesk.AutoCAD.ApplicationServices",
"acdb": "Autodesk.AutoCAD.DatabaseServices",
"aced": "Autodesk.AutoCAD.EditorInput",
"acge": "Autodesk.AutoCAD.Geometry",
"acrx": "Autodesk.AutoCAD.Runtime",
"acws": "Autodesk.AutoCAD.Windows",
"acgi": "Autodesk.AutoCAD.GraphicsInterface",
"acgs": "Autodesk.AutoCAD.GraphicsSystem",
"acin": "Autodesk.AutoCAD.Internal",
"acps": "Autodesk.AutoCAD.PlottingServices",
"acco": "Autodesk.AutoCAD.Colors",
Процесс написания кода похож на разработку на C#.
@command()
def enttest(doc):
with dbtrans(doc) as tr:
btr=tr.opencurrspace() #这里默认只读打开,.netapi推荐对象打开先以读打开以节省资源,再需要写入时提权
#创建点
point=acdb.DBPoint(acge.Point3d(2,2,0))
tr.addentity(btr,point) #addentity会将btr提权为写打开,并将对象加入数据库
#создание прямой линии Первый параметр: начальная точка Второй параметр: конечная точка
line=acdb.Line(acge.Point3d(2,2,0),acge.Point3d(4,5,1))
tr.addentity(btr,line)
#Создание круга Первый параметр: Начальная точка Второй параметр: Проекционный вектор Третий параметр: Радиус
c1=acdb.Circle(acge.Point3d(10,10,0),acge.Vector3d(0,0,1),1) # z-осевая проекция
c2=acdb.Circle(acge.Point3d(20,20,0),acge.Vector3d(0,1,0),2) # y-осевая проекция
c3=acdb.Circle(acge.Point3d(30,30,0),acge.Vector3d(1,0,0),3) # x-осевая проекция
tr.addentity(btr,c1,c2,c3) #или: tr.addentity(btr, *(c1,c2,c3))
#Создание многосегментной линии
pl=acdb.Polyline()
pl.AddVertexAt(0,acge.Point2d(0,0),0,0,0) #Добавить вершину
pl.AddVertexAt(1,acge.Point2d(0,1),0,0,0)
pl.AddVertexAt(2,acge.Point2d(1,1),0,0,0)
pl.AddVertexAt(3,acge.Point2d(1,0),0,0,0)
pl.Closed=True #Является ли замкнутым
tr.addentity(btr,pl)
#Создать дугу Первый параметр: Центр дуги Второй параметр: Радиус Третий параметр: Начальный угол Четвертый параметр: Конечный угол
arc=acdb.Arc(acge.Point3d(10,0,0),3,math.pi*0.5,math.pi*1.25)
tr.addentity(btr,arc)
``` ```
#### 添加带颜色的图层
```python
@command()
def cl1(doc):
LayerName="MyLayer2"
with dbtrans(doc) as tr:
tr.addlayer(LayerName,acco.Color().FromColorIndex(acco.ColorMethod.ByLayer,2))
print("\nСоздание {0} слоя успешно".format(LayerName))
@command() #модификация свойств слоя
def ModifyLayer(doc):
res=edx.entsel("\nВыберите фигуру для модификации:")
if not res.ok(): return
with dbtrans(doc) as tr:
ent=tr.getobject(res.ObjectId)
ltr=tr.getobject(res.LayerId,acdb.OpenMode.ForWrite) #получение записи таблицы LayerTableRecord
ltr.IsFrozen=True #заморозка слоя
ltr.IsLocked=True #блокировка слоя
print("\nСлой {0} заморожен и заблокирован".format(ent2.Layer))
## Ошибка типа:
### xxx() не принимает аргументов (дан 1 аргумент)
```python
@command()
def cl1(): #здесь отсутствует параметр doc, правильная запись def cl1(doc)
Первый автор этого проекта: xsfhlzh
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )