GithubHelp home page GithubHelp logo

georggrebenyuk / ncadpythonshell Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 12.8 MB

Расширение к nanoCAD для поддержки скриптов на IronPython 3.4.1 (доступ к NET API)

License: MIT License

C# 88.38% Python 7.77% PowerShell 2.46% C++ 1.01% C 0.37%

ncadpythonshell's Introduction

ncadpythonshell

Расширение к nanoCAD для поддержки скриптов на IronPython 3.4.1 (доступ к NET API)

О надстройке. Отличия от оригинальной версии

Настоящий исходный код является переработкой известного плагина к AutoCAD CadPythonShell от Chuong Ho (https://github.com/chuongmep/CadPythonShell). По сравнению с оригинальной версией:

  • Удалены проекты, относящиеся к MgdDbg (обозреватель классов объектов). Эта функциональность будет распространяться в рамках иного решения от nanosoft;
  • Удален проект инсталлятора (пока будет распространяться без оного);
  • Все библиотеки изменены для поддержки nanoCAD 22 и старше и nanoCAD 23 и новее (2 разные конфигурации), так как до nanoCAD 23 библиотеки были на .NET Framework; позже -- на .NET6 (этим обусловлен и отказ от некоторых пакетов из оригинальной версии);
  • Для возможности запуска скриптов на .NET6 (nc23+) введена дополнительная библиотека CADCommands (см. раздел Проблемы работы на nanoCAD 23+ (.NET 6))

Установка и использование

Из раздела Releases скачайте последнюю версию надстройки и распакуйте в любую папку. В зависимости от использования для nanoCAD 22 и старше - ваша версия будет Nc_22, для 23 и новее -- Nc_23. Поставьте в автозагрузку nanoCAD файл nCADPythonShell.package. Из новой ленты в nanoCAD nCAD Python Shell запустить команду Run NPS

Наиболее стабильно работает на 22 версии nanoCAD (до миграции на .NET6). Здесь любые ошибки будут отображаться в "верхней" форме окна и не приводить к фатальному вылету.

Примеры кода

См. в папке \Script Examples\ironpython3.4\

Начало кода

Строки ниже необходимо добавлять в шапку каждого из скриптов. Если код предполагает обращение к классам вне упомянутых пространств имен, то их также необходимо будет указать через директивы import.

import clr
#Import nanoCAD's libraries
clr.AddReference('hostmgd')
clr.AddReference('hostdbmgd')
#Import auxiliary library (look chapter below, exception for 23+ versions)
clr.AddReference('CADCommands')
#Import namespaces for nanoCAD and CADCommands
from Teigha.Runtime import *
from HostMgd.ApplicationServices import *
from HostMgd.EditorInput import *
from Teigha.DatabaseServices import *
from Teigha.Geometry import *
from CADCommands import *

Проблемы работы на nanoCAD 23+ (.NET 6)

Настоящие проблемы возможно будут решены, как автор надстройки адаптирует её для AutoCAD 2025 (где появился .NET8).

  • Неверная интерпретация enum: например, частая конструкция OpenMode.ForRead и т.д. Может быть решена вводом вспомогательного класса, например, AuxiliaryCommands из CADCommands.То есть вводится следующее соответствие:
OpenMode.ForRead = AuxiliaryCommands.OpenModeRead
OpenMode.ForWrite = AuxiliaryCommands.OpenModeWrite
OpenMode.ForNotify = AuxiliaryCommands.OpenModeNotify
  • Неверная интерпретация наследуемых классов: когда какой-либо метод в API ожидает "базовый" класс, а ему подается наследник. Например, популярная процедура AppendEntity (добавление созданного объекта в чертеж) ожидает тип Entity, а все объекты имеют свои классы: Circle, Polyline и т.д. Решение: пока отсутствует. Принудительная конфертация через библиотеку clr не работает:
centerPt = Point3d(0,0,0)
circle = Circle(centerPt, Vector3d.ZAxis, 2)
circle_as_entity = clr.Convert(circle, Entity)
btr.AppendEntity(circle_as_entity)
#Error: expected Entity, got Circle

TODO:

  • локализация на русский (включая инструкции) и воможность выбора языка локализации;
  • решение проблемы работоспособности на NC23+;
  • добавление примеров;
  • добавление вспомогательных конструкций, позволяющих взаимодействовать с nanoCAD ActiveX API;
  • добавление примеров и описание действий для других Python-пакетов;
  • ...

ncadpythonshell's People

Contributors

georggrebenyuk avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.