Автоматизированная расстановка ограждающих конструкций в nanoCAD BIM Строительство (конфигурация «Конструкции»)

Введение

В 2023 году на Всероссийской инженерной конференции «ТИМ-практика» инженеры компании ООО «Нормасофт» рассказали о своем опыте на примере 15 проектов, выполненных ими с применением отечественных ТИМ. Работая с трехмерными проектами с 2016 года, инженеры компании ООО «Нормасофт» неоднократно сталкивались с необходимостью расстановки 3D-элементов ограждений на плане. Из своего опыта помню, как при смене поставщика ограждений по проекту приходилось вручную заменять опоры и блоки ограждений с шагом 3 метра на шаг 2,6 метра.

В 2022 году инженеры компании ООО «Нормасофт» расширили свои возможности в проектировании, приняв участие в пилотных проектах информационного моделирования мостов и гидротехнических сооружений. Именно на таких объектах мы стали получать от многих заказчиков запрос на автоматическую расстановку ограждений по заданной траектории. Это необходимо для создания различных типов ограждений — от сигнальных столбиков и заборов до сварных и шпунтовых ограждений.

Казалось бы, в Платформе nanoCAD компании «Нанософт» уже есть инструмент Массив по траектории, который копирует объекты с заданным шагом вдоль полилинии. Эта команда действительно удобна для применения при 2D-проектировании. Однако сложность расстановки 3D-элементов на плане состоит в неоднородности рельефа. При автоматической расстановке ограждений по заданной траектории должно учитываться изменение координаты Z, возможность задавать шаг между опорами, а также участки на расстояниях некратных шагу.

Для решения этой задачи специалисты, обладающие необходимыми квалификацией и опытом в компании ООО «Нормасофт», разработали скрипт автоматической расстановки ограждения по заданной траектории.

Цель. Требования. Условия

Перед нашими специалистами стояла непростая задача по автоматизации процесса расстановки ограждений по траектории в пространстве с несколькими условиями:

1.      Ограждение может быть расставлено как на плоскости, так и на неровной поверхности.

2.      Ограждение может быть замкнутым и разомкнутым.

3.      Секция ограждения может быть подрезана, если она не помещается на свою траекторию.

Для реализации этих задач было предложено самое логичное и простое решение — использовать и отталкиваться от того, что имеем. Как и в инструменте Массив по траектории, наше автоматическое ограждение будет строиться по полилинии, а впоследствии и по 3D-полилинии.

В теории, 3D-полилиния представляет собой последовательность отрезков в трехмерном пространстве, где конец предыдущего отрезка является началом следующего. И сама 3D-полилиния может быть замкнутой или разомкнутой. В свою очередь, полилинию можно считать частным случаем 3D-полилинии. На практике, 3D-полилиния представляет собой список точек с тремя координатами, полилиния — с двумя.

Исходя из начальных условий и способа реализации, получаем следующее:

1.      Для построения ограждения пользователь указывает полилинию или 3D-полилинию, которая может быть замкнутой или разомкнутой.

2.      Для построения ограждения пользователь выбирает исходную секцию ограждения как объект из чертежа или как элемент из базы данных оборудования.

3.      Если количество секций не кратно длине отрезка полилинии, то устанавливается секция длиной на остаток от деления.

Был выбран итерационный подход к разработке от простого к сложному. Можно выделить две основные итерации: расстановка ограждения на полилинии и расстановка ограждения по 3D-полилинии.

Подготовка для написания скриптов nanoCAD

Для написания скрипта будет использоваться AutoLISP. Это популярное расширение языка обработки списков LISP для написания скриптов под CAD-системы. Это расширение языка поддерживается nanoCAD и дает интерфейсы взаимодействия с командной строкой и специфичными vl-some функциями для взаимодействия с CAD-объектами.

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

1.      Любые доступные онлайн-ресурсы, справочники по операторам и функциям языка AutoLISP (например).

2.      Руководство разработчика с функциями и комментариями. Полещук Н.Н., Лоскутов П.В. «AutoLISP и Visual LISP в среде AutoCAD».

3.      Про разработку САПР-приложений (опыт, находки, технологии). Зуев С.А., Полещук Н.Н. «САПР на базе AutoCAD — как это делается».

4.      Русскоязычное сообщество autolisp.ru.

5.      Личный кабинет разработчика nanoCAD.

Для более удобного написания скриптов на AutoLISP в качестве среды для разработки (IDE) был выбран Visual Studio Code (VSCode) или его свободная версия VSCodium. Эта среда обладает всеми современными настройками и функциями по работе с кодом различных языков, а также имеет широкое сообщество и магазин плагинов для расширения возможностей текстового редактора до полноценной IDE. При этом, открыв файл в Редакторе скриптов nanoCAD (рис. 1), параллельно можно открыть его и в VSCode (рис. 2). Редактирование открытого скрипта в любом из них ведет к изменениям в другом, то есть для написания скрипта мы используем VSCode, а для запуска редактора в nanoCAD. В отличие от штатного Редактора скриптов nanoCAD эта среда предоставляет следующие возможности:

1.      Удобную, настраиваемую и интеллектуальную подсветку синтаксиса.

2.      Автозавершения и дополнения кода (IntelliSense).

3.      Расширения функционала и удобства (управление версиями кода (Git-системы), встроенная справка по LISP, проверка правописания и прочее). Уже не говоря о более широких возможностях отладки, компиляции на других языках.

Рис. 1. Редактор скриптов в nanoCAD

Рис. 1. Редактор скриптов в nanoCAD

Рис. 2. Отображение скрипта в редакторе VSCode

Рис. 2. Отображение скрипта в редакторе VSCode

Для работы c языком AutoLISP и удобства в VSCode необходимо из вкладки Расширения в VSCode установить:

1.      AutoCAD AutoLISP Extension — самый полезный и крупный плагин для AutoLISP, добавляющий подсветку синтаксиса, подсказки и прочее, с чем можно ознакомиться на странице плагина.

2.      Code Spell Checker и Russian — Code Spell Checker опционально обеспечивает проверку правописания.

3.      Русификацию интерфейса Russian Language Pack for Visual Studio Code. Иногда может мешать, если необходимо найти какую-либо функцию-возможность VSCode.

С остальными настройками VSCode можно ознакомиться самостоятельно в свободных источниках.

Быстрый старт по написанию AutoLISP-скриптов

Как ранее уже говорилось, язык LISP — это язык обработки списков. Поэтому первое «странное», с чем мы столкнемся в синтаксисе, — это засилье парных скобок в текстах скриптов. Открывающие выражение скобки и закрывающие обязательно парные. А также многочисленная вложенность этих блоков. Поэтому будьте предельно внимательны. В их отслеживании, выделении и подсветке вам поможет VSCode. Если понадобится, можно найти расширение для их явного цветного выделения или настройку, которая поможет совершать меньше ошибок этого плана.

В примерах lisp-скриптов вы можете найти те, которые содержат довольно громоздкую логику. Казалось бы, там уже напрашивается ООП. Но написанием этих скриптов чаще занимаются инженеры, а не программисты. Заранее неизвестно, насколько большую логику скрипта вам предстоит реализовать. Поэтому старайтесь делать блоки более читабельными, выделяющимися и в своих скриптах.

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

Для быстрой загрузки скрипта в nanoCAD откройте Редактор скриптов во вкладке Настройки. В открывшейся левой вкладке Редактор скриптов вы будете открывать и запускать скрипт для добавления-обновления команды-функции в окружении nanoCAD (рис. 3).

Рис. 3. Работа со скриптом в nanoCAD

Рис. 3. Работа со скриптом в nanoCAD

С помощью функции (defun c: super_fencing (…) …) появляется наша основная команда SUPER_FENCING, которая и будет вызываться в nanoCAD. После запуска скрипта эта функция добавляется в окружение и ее можно вызывать вводом в командной строке (рис. 4).

Рис. 4. Вызов добавленной команды через командную строку в nanoCAD

Рис. 4. Вызов добавленной команды через командную строку в nanoCAD

Как и полагается, у функции есть аргументы, внутренняя пара скобок и тело функции: все, что далее первого блока. Косая черта в аргументах функции используется для обозначения опциональных аргументов: в этом случае она используется для документирования.

Далее надо параллельно открыть этот скрипт в VSCode для его редактирования и сохранения. Остальные особенности будут проанализированы по ходу объяснения работы нашего скрипта.

Не надо забывать и общепринятые правила написания хорошего кода: осмысленное именование переменных, функций, общепринятое оформление синтаксиса и прочее. Если LISP вам не нравится, зачем делать его хуже.

Описание процесса и технических решений по автоматической расстановке ограждения

Для работы с vl-some функциями (Visual LISP) необходимо подгрузить COM-интерфейс объектов с помощью директивы-функции: (vl-load-com).

После этого можно использовать все функции, описанные в справочниках и начинающиеся на префиксы vl, vla, vlax.

Далее следует объявление основной функции super_fencing. В аргументах и входных параметрах указываются основные переменные-объекты, с которыми можно будет работать (рис. 5). В основном там можно найти вспомогательные объекты. Допустим, после запуска команды SUPER_FENCING пользователь выбирает следующие из них (здесь можно рассмотреть блок скрипта Ввод):

1.      polyline — переменная, в которой хранится выбранная полилиния.

2.      base_fencing_vla — vla-объект, элемент ограждения.

3.      base_point — базовая точка ограждения, точка вставки (рис. 6).

4.      length_section — длина секции, ввод данных от пользователя.

Рис. 5. Блок скрипта Ввод

Рис. 5. Блок скрипта Ввод

Рис. 6. Вызов базовой точки звена ограждения

Рис. 6. Вызов базовой точки звена ограждения

Начнем с основного элемента — секции ограждения. В nanoCAD BIM Строительство (конфигурация «Конструкции») был разработан параметрический объект Ограждение перильное, состоящее из основного звена и двух стоек. Основной параметр, с которым придется работать, — длина звена-секции ограждения (Шаг). При изменениях этого поля параметрический объект будет перестраиваться, меняя длину звена ограждения (рис. 7). Для этого в параметрическом объекте при создании была заложена зависимость длины и положения элементов внутри звена ограждения от параметра Шаг.

Рис. 7. Свойства параметрического элемента ограждения

Рис. 7. Свойства параметрического элемента ограждения

После ввода основных данных обработки производятся расчеты (рис. 8). В них ведется подготовка данных для этапа построения, а именно их списки с точками, углами поворота и прочими данными. Для этого были подготовлены соответствующие функции.

Рис. 8. Блок скрипта Расчеты

Рис. 8. Блок скрипта Расчеты

Разберем одну из таких функций — get_list_pt_polyline, которая возвращает список точек полилинии. В 35-ой строке скрипта присваивается значение вывода функции переменной list_pt_polyline с помощью специального оператора setq. На вход этой функции в качестве аргумента передается объект полилинии, указанный пользователем. Далее перейдем к определению самой функции.

Рис. 9. Определение типа полилинии и получение двумерного списка точек функцией get_list_pt_polyline

Рис. 9. Определение типа полилинии и получение двумерного списка точек функцией get_list_pt_polyline

Рис. 10. Получение трехмерного списка точек с помощью функции get_list_pt_polyline

Рис. 10. Получение трехмерного списка точек с помощью функции get_list_pt_polyline

В начале определяется тип полилинии согласно параметрам структуры самого объекта — полилинии. Структуры любого примитива можно самостоятельно изучить на соответствующих ресурсах по AutoLISP или практически вывести параметры примитива. Для этого сначала необходимо извлечь информацию через entget (рис. 9) и далее вывести результат в командную строку для анализа структуры и написания соответствующих обращений, как в приведенном нами примере.

После получения типа полилинии polyline_type в зависимости от значения AcDbPolyline для полилинии или AcDb3dPolyline для 3D-полилинии формируется список с двумерными или трехмерными координатами для их возврата в конце, в строке 274 (рис. 10).

После осуществления расчетов и преобразований происходит построение ограждения (рис. 11).

Рис. 11. Блок скрипта Построение

Рис. 11. Блок скрипта Построение

После размещения секций ограждения необходимо использовать одну хитрость: следует перестроить и обновить параметрические объекты, так как программное изменение полей параметрического объекта не ведет к обновлению его графики. В отличие от ручного изменения параметров в форме nanoCAD BIM Строительство (конфигурация Конструкции), где после нажатия кнопки ОК в окне Параметры объекта происходит принудительное перестроение графики, в этом случае следует вызвать команду urs_remove_sys_params для обновления всей сцены.

Скрипт готов. После этого следует вывести в пространство модели звено ограждения и начертить контур ограждения в плане инструментом Полилиния (рис. 12).

Рис. 12. Звено и контур ограждения в плане в пространстве модели

Рис. 12. Звено и контур ограждения в плане в пространстве модели

После этого необходимо запустить команду SUPER_FENCING, указать курсором в пространстве модели полилинию — контур ограждения, звено и его базовую точку. В командной строке следует ввести длину звена. В итоге для ограждения по полилинии в плоскости будет получен результат, как показано на рис. 13. В командной строке отобразятся логи выполнения команды SUPER_FENCING (рис. 14).

Рис. 13. Результат автоматической расстановки ограждений по траектории в плоскости

Рис. 13. Результат автоматической расстановки ограждений по траектории в плоскости

Рис. 14. Вывод выполнения команды SUPER_FENCING в командную строку

Рис. 14. Вывод выполнения команды SUPER_FENCING в командную строку

В пространстве модели необходимо отобразить 3D-полилинию по рельефу местности. Контур ограждения по рельефу показан красным цветом на рис. 15.

Рис 15. Контур ограждения по рельефу

Рис 15. Контур ограждения по рельефу

Затем следует выполнить команду SUPER_FENCING для 3D-полилинии по рельефу местности. Для этого в пространстве модели надо указать курсором 3D-полилинию — контур ограждения и звено ограждения как объект из чертежа или как элемент из базы данных оборудования, а также его базовую точку. В командной строке необходимо ввести длину звена. В итоге для ограждения по 3D-полилинии будет получен результат, показанный на рис. 16–17.

Рис. 16. Результат построения ограждения по 3D-полилинии

Рис. 16. Результат построения ограждения по 3D-полилинии

Итогом работы становится скрипт, позволяющий автоматизировать процесс расстановки ограждений по траектории в трехмерном пространстве. В зависимости от длины траектории время автоматической расстановки ограждения занимает до двух минут. Благодаря этому скрипту уменьшается время работы проектировщика по моделированию любых ограждающих конструкций, элементы которых созданы как параметрическое оборудование в nanoCAD BIM Строительство (конфигурация «Конструкции») и имеют параметр Шаг.

Рис. 17. Визуализация результата построения ограждения по 3D-полилинии

Рис. 17. Визуализация результата построения ограждения по 3D-полилинии

Авторы

Ливанов Иннокентий Алексеевич,  инженер-программист, руководитель IT-отдела компании «Нормасофт»

Ливанова Екатерина Александровна,  инженер-строитель, руководитель отдела 3D-моделирования и лазерного сканирования компании «Нормасофт»

О компании «Нормасофт»

ООО «Нормасофт» — Компания долгое время являлась разработчиком конкурсных заданий в компетенции «Инженерное проектирование» отраслевых чемпионатов, проводимых по методике Worldskills. В штате ООО «Нормасофт» работают действующие эксперты Worldskills.

Сегодня, накопленный опыт и знания ООО «Нормасофт» применяет как в подготовке к участию команд в подобных чемпионатах, так и в практической работе по внедрению программного обеспечения в частные и государственные компании.

Основные направления деятельности:

— Поставка и внедрение САПР и BIM — решений на платформе nanoCAD

— Групповое и индивидуальное обучение работе в ПО nanoCAD, Model Studio CS

— Услуги по традиционному проектированию и BIM-моделированию.

Официальный сайт: normasoft.com

© Habrahabr.ru