1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/inspirefunction-Pycad

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Pycad

Python Extension for AutoCad

Editor/Debuger

简要说明:

Pycad — это расширение для AutoCAD, которое позволяет использовать Python для программирования в среде CAD.

Мы адаптируем Pycad для работы с основными версиями AutoCAD: Autodesk AutoCAD, ZWCAD и CICAD.

Использование метода:

  1. Программа поддерживает AutoCAD 2013–2020 (для версий ниже 2014 требуется установка .Net 4.5). Загрузите сжатый файл, распакуйте его в любой каталог, а затем используйте команду Netload в AutoCAD для выбора файла NFox.Pycad.Acad.dll из каталога распаковки. Для работы с ZWCAD или CICAD используйте файл NFox.Pycad.Gcad.dll.

  2. В качестве редактора используется vscode. Введите команду pye в AutoCAD, чтобы автоматически открыть vscode. Вам потребуется установить vscode, а также расширения Python от Microsoft и Python версии 3.7+.

  3. После завершения редактирования кода введите команду pyrb в AutoCAD, чтобы скомпилировать скрипт Python.

  4. Проект pytest содержит множество примеров, которые можно использовать в качестве справочного материала.

  5. В правом нижнем углу окна vscode есть окно, где вы можете вводить код или копировать его из редактора для немедленного выполнения и просмотра результатов.

  6. Измените структуру проекта Pycad с пакета на международную структуру. Корневой каталог может быть назван произвольно, но убедитесь, что в нём есть каталог extension. Этот каталог нельзя переименовывать или удалять. Проект data может использоваться для хранения файлов данных, доступ к которым осуществляется через функцию findfile(filename) в коде. Каталог cuix может использоваться для размещения файлов cuix AutoCAD для создания пользовательских меню, панелей инструментов и лент. Мы переработали функцию публикации, которая теперь доступна через команду pyrelease. Вы можете выбрать несколько проектов для одновременной публикации. После публикации в каталоге temp будет создан установочный файл xxx.Setup.exe. Вы можете установить Pycad и проекты разработки на компьютеры без установленной программы. Команда pye была переименована в pyedit.

  7. Отладчик в основном готов. Он предоставляет возможность тестирования и отладки. Чтобы начать отладку, откройте AutoCAD, проект pytest, нажмите F5 и введите команду в AutoCAD. Чтобы выйти из режима отладки, щёлкните кнопку «Разрыв соединения» в vscode.

  8. Исправлена функция публикации, добавлен модуль invokeArx для вызова функций Arx. Примеры использования можно найти в проекте pytest в модуле runtime.

Если при вводе команды pye появляется сообщение об ошибке «Система не может найти указанный файл», найдите файл settings.json в папке Pycad\bin и измените параметр editor.path на путь установки vscode.

Детали:

Настройка автоматического завершения кода в vscode:

В конфигурации vscode внесите изменения в следующие параметры:

Files: Associations
AutoComplete: Paths

Использование:

Базовое использование:

  1. Запуск:

    • Откройте AutoCAD и введите команду netload. Если вы используете AutoCAD, загрузите файл NFox.Pycad.Acad.dll, если ZWCAD — файл NFox.Pycad.Gcad.dll.
    • Введите команду pyedit, чтобы выбрать проект или создать новый. После выбора программа автоматически откроет vscode. Если у вас нет vscode, установите его.
    • Завершив написание команды, введите pyrb для компиляции проекта.
  2. Импорт модулей:

    from pycad.runtime import *
    from pycad.system import *
  3. Первый пример программы: «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

Объекты AutoCAD:

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Python Extension для AutoCAD. Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/inspirefunction-Pycad.git
git@api.gitlife.ru:oschina-mirror/inspirefunction-Pycad.git
oschina-mirror
inspirefunction-Pycad
inspirefunction-Pycad
master