На фоне Западных санкций и личного интереса, открываю серию статей, посвященных разработке под NanoCAD (буду сам постепенно изучать продукт, описывая свои ошибки и проблемы - которые, надеюсь, помогут вам не повторять моих ошибок и познакомят с платформой помимо стандартных ресурсов (которых, к слову, не много)). Тут же допишу, что изучение NanoCAD - это также и изучение библиотек от Open Design Alliance, коими платформа напичкана весьма и весьма конкретно ...
По аналогии с Renga, я буду параллельно реализовывать Dynamo-пакет для NanoCAD на базе Dynamo Core.
1. Установка и первый запуск
Версия у нас будет особая, для некоммерческого пользования (в составе базовой платформы + модулей Механика и СПДС), доступная из личного кабинета разработчика.
Приятная фишка - что команда разработки дает упрощенную процедуру запроса лицензий (онлайн, без подтверждений). Базовая верификация личности проводится единожды - при вступлении в клуб разработчиков.
2. Об API - как устроено и как настроить?
2.1 Об API reference guides
За что отельное спасибо - так это за наличие упакованной локальной справки в формате файлов *.chm.
Ложка дегтя - не документировано никак в части описания модули посвященные NRX и nanoPointClouds и если с облаками точек хотя бы интуитивно понятно, то с NRX ваще **** (в придачу к синтаксическим изыскам C++ с указателями и пр.). По .NET сопровождение есть и хорошее.
Отметим, что интересным представляется MultiCAD .NET API, связывающий ряд САПР - как заявлено, NanoCAD, ZWCAD, AutoCAD и др. Описано, что NRX и MultiCAD .NET API не имеют функциональных различий.
Сперва я собирался погружаться в NRX (Object NRX), но посидев часов пять перед монитором смотря на его "справку" я передумал, и решил писать только на .NET, функции которого хотя бы интуитивно понятны.
Отладка на NRX отдельная история, из-под VS начиналась вечная прогрузка таблиц символов, которая никак не кончалась. потом само прекратилось и заработало
2.2 О структуре NanoCAD SDK
В целом, всё стандартно - отдельно библиотеки под платформы Win32/x64 (я буду "собираться" только под x64).
Серьезную часть разработки я оставлю на потом, а пока попробую пробежаться по базовым сущностям - понятие документа, базы данных, слоев и настроек.
Первое с чего начнем - с идентификации запущенного приложения (сущности Application и далее). Также как и в Renga, у NanoCAD есть COM-api, позволяющее подключаться к активной сессии программы, к документу и далее к его объектам извне.
Сам процесс подключения выполняется стандартным методом C# : System.Runtime.InteropServices.Marshal.GetActiveObject(), в скобках мы указываем наименование процесса AutoCAD и потом неявно приводим его к COM-объекту Application (NanoCAD):
nanoCAD.Application inc_app = System.Runtime.InteropServices.Marshal.GetActiveObject("nanoCAD.Application") as nanoCAD.Application;
После этого мы получаем доступ ко всем объектам и свойствам документа, которые доступны через COM.
Стоит отметить, что в составе NanoCAD SDK идут 2 библиотеки, работающие с приложением через COM -- это базовая библиотека ncauto.dll и вспомогательная (для работы по большей части с геометрией и свойствами) - OdaX.dll. Название намекает (и так и есть), что перед нами составляющая ODA- пакета/фреймворка (хз как правильно) TeighaX для работы с DWG файлами.
Интересно, что сущность базы данных чертежа IAcadDatabase это уже OdaX :-).
Так как политика лицензирования ODA довольно строгая, права на распространение этого приложения у меня нет (в составе доп. библиотеки моего Dynamo-пакета), а вот с базовой ncauto проще - её я включу.
Вообще говоря, работать с COM не очень функционально, но придется потерпеть .. пока по-другому никак.
3. Структура библиотеки и её настройка.
Пока что остановлюсь на проекте из одной динамической библиотеке классов (на .NET Framework 4.8), реализующей взаимодействие с базовым NanoCAD.
Для удобства отладки, из-под этой же библиотеки я буду запускать мой DynamoSandbox.exe, куда эта библиотека была подгружена.
4. Погружение в код
По традиции свое погружение в API я начал с коллекций объектов - а именно, со слоев. Слои у нас в чертеже хранятся как интерфейс IAcadLayers в составе отдельных AcadLayer, при этом все эти интерфейсы уже являются частью библиотеки OdaX.
Например -- так можно редактировать созданный слой. Примечательно что конструктора нового слоя через COM нет.
Более интересно обстоит с блоками - как и в AutoCAD, блоки здесь не только набор объектов но и пространства для моделирования (они, конечно, выделены в отдельные категории типа ModelSpace = OdaX.AcadModelSpace), но также встречаются и в коллекции блоков документа:
От этого следует понимание, что пространства модели/листа также наследуют свойства блоков (хотя они могут быть получены и отдельно, не через перебор общей коллекции блоков, как методы документа).
Начать с этих методов было бы конечно заманчиво -- вот только методы эти уже напрямую завязаны на геометрии, а к ней я подступаться пока не готов -- поэтому давайте делать оперативную паузу и завершать эту небольшую статью на моменте "успешного" подключения к документу, получения коллекции слоев и блоков и подступа к геометрии.
Не пропускайте публикации, подписывайтесь на Telegram-канал с тизерами статей.
#nanocad #oda #nanosoft #dynamo #bim