Добавить в корзинуПозвонить
Найти в Дзене
Хроники Георга

NanoCAD и ODA. Инструменты разработки. Часть 1 - приложение, документ, слои.

На фоне Западных санкций и личного интереса, открываю серию статей, посвященных разработке под NanoCAD (буду сам постепенно изучать продукт, описывая свои ошибки и проблемы - которые, надеюсь, помогут вам не повторять моих ошибок и познакомят с платформой помимо стандартных ресурсов (которых, к слову, не много)). Тут же допишу, что изучение NanoCAD - это также и изучение библиотек от Open Design Alliance, коими платформа напичкана весьма и весьма конкретно ... По аналогии с Renga, я буду параллельно реализовывать Dynamo-пакет для NanoCAD на базе Dynamo Core. 1. Установка и первый запуск Версия у нас будет особая, для некоммерческого пользования (в составе базовой платформы + модулей Механика и СПДС), доступная из личного кабинета разработчика. Приятная фишка - что команда разработки дает упрощенную процедуру запроса лицензий (онлайн, без подтверждений). Базовая верификация личности проводится единожды - при вступлении в клуб разработчиков. 2. Об API - как устроено и как настроить? 2.1
Оглавление

На фоне Западных санкций и личного интереса, открываю серию статей, посвященных разработке под NanoCAD (буду сам постепенно изучать продукт, описывая свои ошибки и проблемы - которые, надеюсь, помогут вам не повторять моих ошибок и познакомят с платформой помимо стандартных ресурсов (которых, к слову, не много)). Тут же допишу, что изучение NanoCAD - это также и изучение библиотек от Open Design Alliance, коими платформа напичкана весьма и весьма конкретно ...

По аналогии с Renga, я буду параллельно реализовывать Dynamo-пакет для NanoCAD на базе Dynamo Core.

Немного милоты в ленту) Уж что-то, а креатива у них хватает :-)
Немного милоты в ленту) Уж что-то, а креатива у них хватает :-)

1. Установка и первый запуск

Версия у нас будет особая, для некоммерческого пользования (в составе базовой платформы + модулей Механика и СПДС), доступная из личного кабинета разработчика.

Установщик (первое окно) выглядит так
Установщик (первое окно) выглядит так
Один из компонентов программы - база данных PostrgeSQL (с которой я кстати активно работал и работаю в рамках другого коммерческого ГИС-проекта, через шину Npgsql на C#)
Один из компонентов программы - база данных PostrgeSQL (с которой я кстати активно работал и работаю в рамках другого коммерческого ГИС-проекта, через шину Npgsql на C#)
Стандартная процедура установки далее, не буду показывать
Стандартная процедура установки далее, не буду показывать

Приятная фишка - что команда разработки дает упрощенную процедуру запроса лицензий (онлайн, без подтверждений). Базовая верификация личности проводится единожды - при вступлении в клуб разработчиков.

При первом запуске программы будет запущен анализ текущего hardware с целью подбора конфигов программы под них для лучшего быстродействия
При первом запуске программы будет запущен анализ текущего hardware с целью подбора конфигов программы под них для лучшего быстродействия
Обратим кстати внимание на особый пункт в Настройках программы - посвященный отладке при работе с API программы; к слову - он доступен и в базовых версиях.
Обратим кстати внимание на особый пункт в Настройках программы - посвященный отладке при работе с API программы; к слову - он доступен и в базовых версиях.

2. Об API - как устроено и как настроить?

2.1 Об API reference guides

За что отельное спасибо - так это за наличие упакованной локальной справки в формате файлов *.chm.

Ложка дегтя - не документировано никак в части описания модули посвященные NRX и nanoPointClouds и если с облаками точек хотя бы интуитивно понятно, то с NRX ваще **** (в придачу к синтаксическим изыскам C++ с указателями и пр.). По .NET сопровождение есть и хорошее.

Это я так понимаю, корневой файл справки, ссылающийся на все остальные.
Это я так понимаю, корневой файл справки, ссылающийся на все остальные.

Отметим, что интересным представляется MultiCAD .NET API, связывающий ряд САПР - как заявлено, NanoCAD, ZWCAD, AutoCAD и др. Описано, что NRX и MultiCAD .NET API не имеют функциональных различий.

Крайне режет глаза русский перевод непереводимых сущностей - struct, Enumerable и пр. Ну что ж, если Renga API была полностью на англ, то тут наоборот слишком "русифицированно"
Крайне режет глаза русский перевод непереводимых сущностей - struct, Enumerable и пр. Ну что ж, если Renga API была полностью на англ, то тут наоборот слишком "русифицированно"

Сперва я собирался погружаться в NRX (Object NRX), но посидев часов пять перед монитором смотря на его "справку" я передумал, и решил писать только на .NET, функции которого хотя бы интуитивно понятны.

Справка функций. Ну вы поняли ... 0 *** пояснений, ЧТО делает конкретная функция, один говно-перевод
Справка функций. Ну вы поняли ... 0 *** пояснений, ЧТО делает конкретная функция, один говно-перевод

Отладка на NRX отдельная история, из-под VS начиналась вечная прогрузка таблиц символов, которая никак не кончалась. потом само прекратилось и заработало

2.2 О структуре NanoCAD SDK

Тут у нас примерно такая логика: папка с guide's (docs). примеры на разных языках (samples) и подключаемые библиотеки
Тут у нас примерно такая логика: папка с guide's (docs). примеры на разных языках (samples) и подключаемые библиотеки

В целом, всё стандартно - отдельно библиотеки под платформы 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 не очень функционально, но придется потерпеть .. пока по-другому никак.

Забегая вперед "мдаааа", odax сильно поганит вид
Забегая вперед "мдаааа", odax сильно поганит вид

3. Структура библиотеки и её настройка.

Пока что остановлюсь на проекте из одной динамической библиотеке классов (на .NET Framework 4.8), реализующей взаимодействие с базовым NanoCAD.

Для удобства отладки, из-под этой же библиотеки я буду запускать мой DynamoSandbox.exe, куда эта библиотека была подгружена.

Так выглядит версия библиотеки на момент "только что"
Так выглядит версия библиотеки на момент "только что"

4. Погружение в код

По традиции свое погружение в API я начал с коллекций объектов - а именно, со слоев. Слои у нас в чертеже хранятся как интерфейс IAcadLayers в составе отдельных AcadLayer, при этом все эти интерфейсы уже являются частью библиотеки OdaX.

У объекта слоя есть ряд читаемых и назначаемых параметров (назначаемых, конечно, меньше, но всё то, что делается руками -- можно назначить и программно.
У объекта слоя есть ряд читаемых и назначаемых параметров (назначаемых, конечно, меньше, но всё то, что делается руками -- можно назначить и программно.

Например -- так можно редактировать созданный слой. Примечательно что конструктора нового слоя через COM нет.

Создание нового слоя
Создание нового слоя

Более интересно обстоит с блоками - как и в AutoCAD, блоки здесь не только набор объектов но и пространства для моделирования (они, конечно, выделены в отдельные категории типа ModelSpace = OdaX.AcadModelSpace), но также встречаются и в коллекции блоков документа:

Вот, пожалуйста - получаем набор блоков документа, и там наше пространство модели и пространства листов
Вот, пожалуйста - получаем набор блоков документа, и там наше пространство модели и пространства листов

От этого следует понимание, что пространства модели/листа также наследуют свойства блоков (хотя они могут быть получены и отдельно, не через перебор общей коллекции блоков, как методы документа).

Вот то же наследование - только в явном виде
Вот то же наследование - только в явном виде
Вот часть методов, относящихся к блокам -- которые отвечают за создание новых объектов в пространстве модели либо в составе блока (последнее мне пока не интересно)
Вот часть методов, относящихся к блокам -- которые отвечают за создание новых объектов в пространстве модели либо в составе блока (последнее мне пока не интересно)

Начать с этих методов было бы конечно заманчиво -- вот только методы эти уже напрямую завязаны на геометрии, а к ней я подступаться пока не готов -- поэтому давайте делать оперативную паузу и завершать эту небольшую статью на моменте "успешного" подключения к документу, получения коллекции слоев и блоков и подступа к геометрии.

Не пропускайте публикации, подписывайтесь на Telegram-канал с тизерами статей.

#nanocad #oda #nanosoft #dynamo #bim