Пособие по COM в Мастере функций nanoCAD BIM Строительство

от автора

Одним из направлений повышения производительности труда проектировщика является подбор наилучшим образом автоматизированного варианта САПР. Как правило, в таких ситуациях прежде всего оценивают функционал, доступный «из коробки», – это вполне оправданный и рациональный подход к решению задачи повышения производительности. Однако далеко не единственный (рис. 1). Нередко программные решения почти не имеют готового функционала и требуют сложного технического внедрения. Такие решения предоставляют универсальную функциональную платформу, а реализация той или иной функции требует ее описания на каком-либо языке программирования в рамках программного интерфейса. Безусловным преимуществом подобных систем является возможность их адаптации под специфические задачи конкретной эксплуатирующей организации, тогда как коробочные решения далеко не всегда обеспечивают аналогичные возможности.

 

Рис. 1. Подходы к автоматизации задач в САПР

Рис. 1. Подходы к автоматизации задач в САПР

Многие САПР из линейки nanoCAD реализуют оба подхода:

  • предоставляют готовый «коробочный» функционал;

  • позволяют автоматизировать при помощи API решение специфических задач.

Эта статья подразделяется на тематические части. В первой мы познакомимся с вариантами доступных API, акцентировав внимание на COM API nanoCAD BIM Строительство. Расскажем об основных элементах и о тех нюансах, с которыми можно столкнуться при работе с данным вариантом API. В следующей части подробнее рассмотрим правила построения выражений при работе с COM в Мастере функций, а также различные пользовательские приемы.

Линейка nanoCAD довольно обширна, в нашем случае мы сконцентрируемся на программе nanoCAD BIM Строительство и использовании COM-интерфейса в Мастере функций. Но сперва определимся с термином.

API (МФА: [ˌeɪ.piˈaɪ]; аббр. от англ. application programming interface, дословно интерфейс программирования приложения – программный интерфейс, то есть описание способов взаимодействия одной компьютерной программы с другими (в противоположность пользовательскому интерфейсу, применяемому для взаимодействия программы и конечного пользователя).

API позволяет взаимодействовать с функционалом программы посредством программирования, при этом у одного приложения может быть множество API – в частности, это справедливо для решений линейки nanoCAD. Разные варианты API могут подразумевать использование разных языков программирования и разные возможности работы с объектами приложения.

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

Поскольку nanoCAD BIM Строительство является вертикально инсталлируемым приложением, мы можем в рамках API работать как с Платформой nanoCAD (рис. 2), так и с nanoCAD BIM Строительство (рис. 3). У обоих приложений варианты API довольно разнообразны.

Рис. 2. Перечень API Платформы nanoCAD

Рис. 2. Перечень API Платформы nanoCAD
Рис. 3. Перечень API nanoCAD BIM Строительство

Рис. 3. Перечень API nanoCAD BIM Строительство

В источнике https://nanocad.ru/developers/#api-nanocad/ COM-интерфейс в списке не приведен, но у объектов nanoCAD BIM Строительство он фактически имеется. При этом важно отметить, что у новых объектов конфигурации архитектуры COM интерфейс содержит меньше методов и свойств в сравнении с объектами конфигурации конструкций.

Использование того или иного варианта API зависит от множества факторов:

  • наличие компетенций по используемому языку программирования (LISP, С#, VB.NET и т.п.);

  • сложность решаемой задачи. Для более простых задач зачастую больше подходит LISP, для сложных – .NET;

  • операционная система. Не все программные интерфейсы работают на разных операционных системах. Например, COM не будет работать на Linux;

  • среда выполнения и отладки. Разные среды разработки имеют разную степень интеграции со средой выполнения кода. Например, LISP можно разрабатывать непосредственно в окне nanoCAD, тогда как разработка на .NET потребует стороннего приложения – например, Visual Studio. При этом будет неодинаковым и удобство отладки кода;

  • функциональность API. Скажем, COM-интерфейс объектов nanoCAD BIM Строительство предоставляет меньшие возможности в сравнении с .NET;

  • кроссплатформенность относительно среды выполнения. Например, решение, написанное с использованием COM-интерфейса, с большой долей вероятности будет работать в nanoCAD BIM Строительство и Model Studio CS Строительные решения.

Для nanoCAD BIM Строительство хорошо задокументирован интерфейс .NET. SDK по нему можно найти на портале разработчиков: https://developer.nanocad.ru.

По COM-интерфейсу, к сожалению, документации и учебных материалов меньше. Причем рядовому пользователю данный вариант интерфейса, доступный в рамках окна Мастера функций, ближе всего. Эта статья написана для восполнения пробела в материалах.

Дадим определение COM-интерфейсу:

COM API (аббр. от англ. Component Object Model Application Programming Interface) – это технология Microsoft для создания взаимодействующих программных компонентов, предоставляющая стандартизированный способ взаимодействия между разными частями ПО, даже написанными на разных языках, через интерфейсы.

Исходя из определения можно заключить, что данный вид интерфейса в первую очередь применяется для обеспечения взаимодействия программных решений между собой. Например, используя данные из Excel, можно автоматизировать создание/редактирование объектов в nanoCAD. По ссылке https://habr.com/ru/articles/238867/ доступен пример такой автоматизации.

Однако использовать COM-интерфейс можно и внутри самой среды проектирования. Причем делать это в рамках инструмента разработки scripted (рис. 4), а для nanoCAD BIM Строительство использовать Мастер функций (рис. 5).

Рис. 4. Получение значения UnitName с помощью AutoLISP в окне редактора скриптов

Рис. 4. Получение значения UnitName с помощью AutoLISP в окне редактора скриптов
Рис. 5. Получение значения UnitName с помощью COM в окне Мастера функций

Рис. 5. Получение значения UnitName с помощью COM в окне Мастера функций

Документацию на COM API можно запросить у разработчика. Также эта документация ранее выкладывалась в телеграм-канале, посвященном программным продуктам линейки Model Studio CS (t.me/ModelStudioCS).

В COM API nanoCAD BIM Строительство есть четыре основных элемента (объект, метод, свойство, коллекция).

  • Объект (оболочка, класс) – сущность, обладающая набором методов и свойств. В рамках Мастера функций она, в частности, является точкой входа при написании выражений. Стандартным обращением к собственному COM-интерфейсу объекта является ключевое слово Object. В зависимости от категории объекта класс также будет различаться (рис. 6).

 

Рис. 6. Различие имен объектов при обращении через Object

Рис. 6. Различие имен объектов при обращении через Object

Объекты имеют структуру наследования, поэтому могут обладать свойствами и методами, которые не описаны в исходной технической документации («Справочник по COM API Model Studio CS»). Например, для объектов nanoCAD BIM Строительство можно вызывать свойство, которое содержит имя слоя Object.layer (рис. 7). Это свойство унаследовано от родительского класса Entity. Учитывая, что доступны не все методы и свойства родительского класса, можно сделать вывод, что наследование частичное.

Рис. 7. Получение имени слоя, на котором размещен объект

Рис. 7. Получение имени слоя, на котором размещен объект

Просмотреть полный перечень свойств, включая унаследованные, можно при помощи LISP-выражения. Вы можете ввести его непосредственно в командную строку (рис. 8):

(progn (vl-load-com) (vlax-dump-Object (vlax-ename->vla-object (car (entsel)))))

 

Рис. 8. Получение перечня COM-свойств

Рис. 8. Получение перечня COM-свойств

Описание COM-интерфейса для свойства layer содержится в документации SDK Платформы nanoCAD (рис. 9). Также эти материалы можно скачать на сайте https://developer.nanocad.ru.

Рис. 9. Пример документации из SDK Платформы nanoCAD

Рис. 9. Пример документации из SDK Платформы nanoCAD
  • Свойство – информационный атрибут объекта (рис. 10). Значения свойств динамически обновляются в зависимости от действий, производимых над объектом. Важно отметить, что в рамках Мастера функций свойства доступны только для чтения.

Рис. 10. Получение свойства объекта в COM

Рис. 10. Получение свойства объекта в COM
  • Метод – операция (функция), позволяющая изменить/прочитать свойства объекта, к которому данный метод применяется. Например, метод Move обеспечивает возможность выполнить относительное перемещение объекта по указанным координатам пространства чертежа – аналогично команде перемещения Платформы nanoCAD (рис. 11).

Рис. 11. Использование метода Move в COM

Рис. 11. Использование метода Move в COM
  • Коллекция – безразмерный перечень (набор, список) каких-либо элементов. Может содержать как список простых типов данных (строки, числа), так и перечень объектов COM. В программировании для обработки списков как правило используют циклы. Мастер функций таких операторов не имеет, однако располагает функциями коллекций, которые позволяют работать с данными внутри коллекции (рис. 12). Существует множество пользовательских приемов применения этих функций, подробнее мы рассмотрим их в следующей части статьи.

Рис. 12. Применение функции коллекций

Рис. 12. Применение функции коллекций

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

Рис. 13. Получение по индексу элемента коллекции через метод Item

Рис. 13. Получение по индексу элемента коллекции через метод Item

В ряде случаев можно получить элемент коллекции без использования COM, то есть извлечь этот элемент, указав значение индекса в квадратных скобках после функции (рис. 14).

Рис. 14. Получение элемента коллекции через индекс в скобках

Рис. 14. Получение элемента коллекции через индекс в скобках

Отдельно стоит отметить, что свойства и методы могут возвращать разные типы данных: строки, числа, логический (булевый) тип, объекты, коллекции. Для примера разберем последовательность получения значения свойства из окна параметров (рис. 15).

Рис. 15. Получение значения параметра в COM

Рис. 15. Получение значения параметра в COM

Object – собственная COM-оболочка объекта. Точка входа. В данном случае класс объекта IMDSParametricEnt.

Element – свойство Object, которое возвращает объект одноименного класса (рис. 16).

Рис. 16. Element, пример технической документации на COM API

Рис. 16. Element, пример технической документации на COM API

Parameters – свойство Element, которое возвращает коллекцию параметров (рис. 17).

Рис. 17. Parameters, пример технической документации на COM API

Рис. 17. Parameters, пример технической документации на COM API

Item – метод коллекции Parameters, который позволяет извлечь параметр по его индексу/имени. В данном случае метод возвращает объект класса Parameter (рис. 18).

Рис. 18. Item, пример технической документации на COM API

Рис. 18. Item, пример технической документации на COM API

Value – свойство класса Parameter, которое возвращает строковое значение параметра (рис. 19).

Рис. 19. Value, пример технической документации на COM API

Рис. 19. Value, пример технической документации на COM API

Общая схема отношений между объектами представлена на рис. 20. В левой верхней части рисунка приведен пример взаимоотношений, по которому ранее было получено значение параметра объекта.

Рис. 20. Отношения объектов COM

Рис. 20. Отношения объектов COM

Можно выделить следующие преимущества использования COM API объектов nanoCAD BIM Строительство:

  • кроссплатформенность. Данный вид интерфейса можно использовать в nanoCAD BIM Строительство и в Model Studio CS, а также в различных средах разработки и языках программирования;

  • простота освоения. Всего четыре основных типа элементов и довольно краткий перечень этих элементов. Посмотреть упомянутый перечень можно в технической. документации;

  • доступность непосредственно в настройках параметризации объектов в рамках Мастера функций. Данный вариант параметризации наиболее близок пользователям – обстоятельство, послужившее основным мотивом к написанию этой статьи;

  • COM API наиболее популярен среди пользователей, поэтому в открытом доступе уже есть довольно много примеров применения данного интерфейса;

  • доступность COM API Платформы nanoCAD в Мастере функций.

К недостаткам следует отнести:

  • наличие индивидуальных особенностей в среде выполнения и разработки. Например, при написании кода в Мастере функций недоступны ссылочные типы данных, поэтому ряд методов в данном Мастере не работает (рис. 21);

Рис. 21. Попытка получить ссылку на данные

Рис. 21. Попытка получить ссылку на данные
  • малую функциональность в сравнении с другими вариантами интерфейсов – например, с .NET;

  • интерфейс относительно старый и не такой быстрый, как альтернативные варианты API;

  • отсутствие подробной технической документации. Этот пункт также послужил стимулом к написанию данной статьи.

Очень здорово иметь под рукой САПР, которая реализует оба подхода автоматизации: для типовых задач – готовые к использованию инструменты, для сложных – инструменты API. Множество программных продуктов линейки nanoCAD реализует оба подхода. Даже в рамках отдельно взятого программного продукта nanoCAD возможностей автоматизации довольно много, а одним из самых популярных вариантов является COM-интерфейс, особенности которого и были рассмотрены. В следующей части статьи мы еще основательнее углубимся в параметризацию и автоматизацию с использованием данного инструмента.

 Олег Ачкасов,
инженер САПР
ООО «Макссофт-24»

ссылка на оригинал статьи https://habr.com/ru/articles/1044838/