Введение
В 2023 году на Всероссийской инженерной конференции «ТИМ-практика» инженеры ООО «Нормасофт», премьер-партнера и фокус-партнера компании «Нанософт» по направлениям «Конструкции», «Инженерия», «Обработка данных ЛС», рассказали о своем опыте на примере 15 проектов, выполненных ими с применением отечественных ТИМ. Работая с трехмерными проектами с 2016 года, инженеры компании «Нормасофт» неоднократно сталкивались с необходимостью расстановки 3D-элементов ограждений на плане. Из своего опыта помним, как при смене поставщика ограждений по проекту приходилось вручную заменять опоры и блоки ограждений с шагом 3 метра на шаг 2,6 метра.
В 2022 году инженеры компании «Нормасофт» расширили свои возможности в проектировании, приняв участие в пилотных проектах информационного моделирования мостов и гидротехнических сооружений. Именно на таких объектах мы стали получать от многих заказчиков запрос на автоматическую расстановку ограждений по заданной траектории. Это необходимо для создания различных типов ограждений — от сигнальных столбиков и заборов до сварных и шпунтовых ограждений.
Казалось бы, в Платформе nanoCAD компании «Нанософт» уже есть инструмент Массив по траектории, который копирует объекты с заданным шагом вдоль полилинии. Эта команда действительно удобна для применения при 2D-проектировании. Однако сложность расстановки 3D-элементов на плане состоит в неоднородности рельефа. При автоматической расстановке ограждений по заданной траектории должны учитываться изменение координаты Z, возможность задавать шаг между опорами, а также участки на расстояниях, не кратных шагу.
Для решения этой задачи специалисты ООО «Нормасофт», обладающие необходимыми квалификацией и опытом, разработали скрипт автоматичес-кой расстановки ограждения по заданной траектории.
Цель, требования, условия
Перед нашими специалистами стояла непростая задача автоматизации процесса расстановки ограждений по траектории в пространстве с несколькими условиями:
- Ограждение может быть расставлено как на плоскости, так и на неровной поверхности.
- Ограждение может быть замкнутым и разомкнутым.
- Секция ограждения может быть подрезана, если она не помещается на свою траекторию.
Для реализации этих задач было предложено самое логичное и простое решение — использовать и отталкиваться от того, что имеем. Как и в инструменте Массив по траектории, наше автоматическое ограждение будет строиться по полилинии, а впоследствии и по 3D-полилинии.
В теории 3D-полилиния представляет собой последовательность отрезков в трехмерном пространстве, где конец предыдущего отрезка является началом следующего. И сама 3D-полилиния может быть замкнутой или разомкнутой. В свою очередь полилинию можно считать частным случаем 3D-полилинии. На практике 3D-полилиния представляет собой список точек с тремя координатами, полилиния — с двумя.
Исходя из начальных условий и способа реализации, получаем следующее:
- Для построения ограждения пользователь указывает полилинию или 3D-полилинию, которая может быть замкнутой или разомкнутой.
- Для построения ограждения пользователь выбирает исходную секцию ограждения как объект из чертежа или как элемент из базы данных оборудования.
- Если количество секций не кратно длине отрезка полилинии, то устанавливается секция длиной на остаток от деления.
Был выбран итерационный подход к разработке — от простого к сложному. Можно выделить две основные итерации: расстановка ограждения на полилинии и расстановка ограждения по 3D-полилинии.
Подготовка к написанию скриптов nanoCAD
Для написания скрипта будет использоваться AutoLISP. Это популярное расширение языка обработки списков LISP для написания скриптов под CAD-системы. Это расширение языка поддерживается nanoCAD и дает интерфейсы взаимодействия с командной строкой и специфичными vl-some функциями для взаимодействия с CAD-объектами.
Для работы с этим языком, изучения синтаксиса и возможностей предлагаем на выбор использовать доступные учебный и справочные ресурсы:
- Любые доступные онлайн-ресурсы, справочники по операторам и функциям языка AutoLISP (например, https://acad-prog.ru/spravochnik-autolisp-funktsij-po-naznacheniyu/).
- Руководство разработчика с функциями и комментариями. Полещук Н.Н., Лоскутов П.В. «AutoLISP и Visual LISP в среде AutoCAD».
- Про разработку САПР-приложений (опыт, находки, технологии). Зуев С.А., Полещук Н.Н. «САПР на базе AutoCAD — как это делается».
- Русскоязычное сообщество autolisp.ru (https://autolisp.ru/).
- Личный кабинет разработчика nanoCAD (https://developer.nanocad.ru/).
Рис. 1. Редактор скриптов в nanoCAD
Рис. 2. Отображение скрипта в редакторе VSCode
Для более удобного написания скриптов на AutoLISP в качестве среды разработки (IDE) были выбраны Visual Studio Code (VSCode) или его свободная версия VSCodium. Эта среда обладает всеми современными настройками и функциями по работе с кодом различных языков, а также имеет широкое сообщество и магазин плагинов для расширения возможностей текстового редактора до полноценной IDE. При этом, открыв файл в Редакторе скриптов nanoCAD (рис. 1), параллельно можно открыть его и в VSCode (рис. 2). Редактирование открытого скрипта в любом из них ведет к изменениям в другом, то есть для написания скрипта мы используем VSCode, а для запуска редактора — nanoCAD. В отличие от штатного Редактора скриптов nanoCAD эта среда предоставляет следующие возможности:
- Удобную, настраиваемую и интеллектуальную подсветку синтаксиса.
- Автозавершения и дополнения кода (IntelliSense).
- Расширения функционала и удобства (управление версиями кода (Git-системы), встроенная справка по LISP, проверка правописания и прочее). Уже не говоря о более широких возможностях отладки, компиляции на других языках.
Для работы c языком AutoLISP и удобства в VSCode необходимо из вкладки Расширения в VSCode установить:
- AutoCAD AutoLISP Extension — самый полезный и крупный плагин для AutoLISP, добавляющий подсветку синтаксиса, подсказки и прочее, с чем можно ознакомиться на странице плагина.
- Code Spell Checker и Russian — Code Spell Checker опционально обеспечивает проверку правописания.
- Русификацию интерфейса Russian Language Pack for Visual Studio Code. Иногда может мешать, если необходимо найти какую-либо функцию-возможность VSCode.
С остальными настройками VSCode можно ознакомиться самостоятельно в свободных источниках.
Быстрый старт по написанию AutoLISP-скриптов
Как уже ранее говорилось, язык LISP — это язык обработки списков. Поэтому первое «странное», с чем мы столкнемся в синтаксисе, — это засилье парных скобок в текстах скриптов. Открывающие выражение скобки и закрывающие обязательно парные. А также многочисленная вложенность этих блоков. По-этому будьте предельно внимательны. В их отслеживании, выделении и подсветке вам поможет VSCode. Если понадобится, можно найти расширение для их явного цветного выделения или настройку, которая поможет совершать меньше ошибок такого плана.
В примерах LISP-скриптов вы можете найти те, которые содержат довольно громоздкую логику. Казалось бы, там уже напрашивается ООП. Но написанием этих скриптов чаще занимаются инженеры, а не программисты. Заранее неизвестно, насколько большую логику скрипта вам предстоит реализовать. Поэтому старайтесь делать блоки более читабельными, выделяющимися и в своих скриптах.
Не забывайте снабжать скрипт подробными комментариями, так как второе — сложные для восприятия конструкции выражений и мало что говорящие названия системных функций. Может быть, исходя из опыта, это и понятно, но поначалу или открыв скрипт месячной давности, вы можете неприятно удивиться. Для комментария используется точка с запятой.
Для быстрой загрузки скрипта в nanoCAD откройте Редактор скриптов во вкладке Настройки. В открывшейся левой вкладке Редактор скриптов вы будете открывать и запускать скрипт для добавления-обновления команды-функции в окружении nanoCAD (рис. 3).
Рис. 3. Работа со скриптом в nanoCAD
С помощью функции (defun c:super_fencing ( … ) … ) появляется наша основная команда SUPER_FENCING, которая и будет вызываться в nanoCAD. После запуска скрипта эта функция добавляется в окружение и ее можно вызывать вводом в командной строке (рис. 4).
Рис. 4. Вызов добавленной команды через командную строку в nanoCAD
Как и полагается, у функции есть аргументы, внут-ренняя пара скобок и тело функции: все, что далее первого блока. Косая черта в аргументах функции используется для обозначения опциональных аргументов: в этом случае она применяется для документирования.
Далее надо параллельно открыть этот скрипт в VSCode для его редактирования и сохранения. Остальные особенности будут проанализированы по ходу объяснения работы нашего скрипта.
Не надо забывать и общепринятые правила написания хорошего кода: осмысленное именование переменных, функций, общепринятое оформление синтаксиса и прочее. Если LISP вам не нравится, зачем делать его хуже?..
Описание процесса и технических решений по автоматической расстановке ограждения
Для работы с vl-some функциями (Visual LISP) необходимо подгрузить COM-интерфейс объектов с помощью директивы-функции: (vl-load-com).
После этого можно использовать все функции, описанные в справочниках и начинающиеся на префиксы vl, vla, vlax.
Далее следует объявление основной функции super_fencing. В аргументах и входных параметрах указываются основные переменные-объекты, с которыми можно будет работать (рис. 5).
Рис. 5. Блок скрипта Ввод
В основном там можно найти вспомогательные объекты. Допустим, после запуска команды SUPER_FENCING пользователь выбирает следующие из них (здесь можно рассмотреть блок скрипта Ввод):
- polyline — переменная, в которой хранится выбранная полилиния;
- base_fencing_vla — vla-объект, элемент ограждения;
- base_point — базовая точка ограждения, точка вставки (рис. 6);
- length_section — длина секции, ввод данных от пользователя.
Рис. 6. Вызов базовой точки звена ограждения
Начнем с основного элемента — секции ограждения. В nanoCAD BIM Строительство (конфигурация «Конструкции») был разработан параметрический объект Ограждение перильное, состоящее из основного звена и двух стоек. Основной параметр, с которым придется работать, — длина звена-секции ограждения (Шаг). При изменениях этого поля параметрический объект будет перестраиваться, меняя длину звена ограждения (рис. 7). Для этого в параметрическом объекте при создании была заложена зависимость длины и положения элементов внутри звена ограждения от параметра Шаг.
Рис. 7. Свойства параметрического элемента ограждения
О компании «Нормасофт» ООО «Нормасофт» долгое время являлось разработчиком конкурсных заданий в компетенции «Инженерное проектирование» отраслевых чемпионатов, проводимых по методике Worldskills. В штате ООО «Нормасофт» работают действующие эксперты Worldskills. Сегодня накопленный опыт и знания ООО «Нормасофт» применяет как в подготовке к участию команд в подобных чемпионатах, так и в практической работе по внедрению программного обеспечения в частных и государственных компаниях. Основные направления деятельности:
Официальный сайт: www.normasoft.com. |
После ввода основных данных обработки производятся расчеты (рис. 8). В них ведется подготовка данных для этапа построения, а именно их списки с точками, углами поворота и прочими данными. Для этого были подготовлены соответствующие функции.
Рис. 8. Блок скрипта Расчеты
Разберем одну из таких функций — get_list_pt_polyline, которая возвращает список точек полилинии. В 35-й строке скрипта присваивается значение вывода функции переменной list_pt_polyline с помощью специального оператора setq. На вход этой функции в качестве аргумента передается объект полилинии, указанный пользователем. Далее перейдем к определению самой функции.
Вначале определяется тип полилинии согласно параметрам структуры самого объекта — полилинии. Структуры любого примитива можно самостоятельно изучить на соответствующих ресурсах по AutoLISP или практически вывести параметры примитива. Для этого сначала необходимо извлечь информацию через entget (рис. 9) и далее вывести результат в командную строку для анализа структуры и написания соответствующих обращений, как в приведенном нами примере.
Рис. 9. Определение типа полилинии и получение двумерного списка точек функцией get_list_pt_polyline
После получения типа полилинии polyline_type в зависимости от значения AcDbPolyline для полилинии или AcDb3dPolyline для 3D-полилинии формируется список с двумерными или трехмерными координатами для их возврата в конце, в строке 274 (рис. 10).
Рис. 10. Получение трехмерного списка точек с помощью функции get_list_pt_polyline
После осуществления расчетов и преобразований происходит построение ограждения (рис. 11).
Рис. 11. Блок скрипта Построение
После размещения секций ограждения необходимо использовать одну хитрость: следует перестроить и обновить параметрические объекты, так как программное изменение полей параметрического объекта не ведет к обновлению его графики. В отличие от ручного изменения параметров в форме nanoCAD BIM Строительство (конфигурация «Конструкции»), где после нажатия кнопки ОК в окне Параметры объекта происходит принудительное перестроение графики, в этом случае следует вызвать команду urs_remove_sys_params для обновления всей сцены.
Скрипт готов. После этого следует вывести в пространство модели звено ограждения и начертить контур ограждения в плане инструментом Полилиния (рис. 12).
Рис. 12. Звено и контур ограждения в плане в пространстве модели
Далее необходимо запустить команду SUPER_FENCING, указать курсором в пространстве модели полилинию — контур ограждения, звено и его базовую точку. В командной строке следует ввести длину звена. В итоге для ограждения по полилинии в плоскости будет получен результат, как показано на рис. 13. В командной строке отобразятся логи выполнения команды SUPER_FENCING (рис. 14).
Рис. 13. Результат автоматической расстановки ограждений по траектории в плоскости
Рис. 14. Вывод выполнения команды SUPER_FENCING в командную строку
В пространстве модели необходимо отобразить 3D-полилинию по рельефу местности. Контур ограждения по рельефу показан красным цветом на рис. 15.
Рис 15. Контур ограждения по рельефу
Затем следует выполнить команду SUPER_FENCING для 3D-полилинии по рельефу местности. Для этого в пространстве модели надо указать курсором 3D-полилинию — контур ограждения и звено ограждения как объект из чертежа или как элемент из базы данных оборудования, а также его базовую точку. В командной строке необходимо ввести длину звена. В итоге для ограждения по 3D-полилинии будет получен результат, показанный на рис. 16 и 17.
Рис. 16. Результат построения ограждения по 3D-полилинии
Рис. 17. Визуализация результата построения ограждения по 3D-полилинии
Итогом работы становится скрипт, позволяющий автоматизировать процесс расстановки ограждений по траектории в трехмерном пространстве. В зависимости от длины траектории время автоматической расстановки ограждения занимает до двух минут. Благодаря этому скрипту уменьшается время работы проектировщика над моделированием любых ограждающих конструкций, элементы которых созданы как параметрическое оборудование в nanoCAD BIM Строительство (конфигурация «Конструкции») и имеют параметр Шаг..
О компании «Нанософт» «Нанософт» — российский разработчик инженерного ПО: технологий автоматизированного проектирования (CAD/САПР), информационного моделирования (BIM/ТИМ) и сопровождения объектов промышленного и гражданского строительства (ПГС) на всех этапах жизненного цикла, а также сквозной цифровизации всех процессов в производстве. Флагманский продукт — Платформа nanoCAD — универсальная САПР для создания чертежей и 3Dмоделей с прямой поддержкой *.dwgформата (официальный сайт: nanocad.ru). О nanoCAD BIM Строительство nanoCAD BIM Строительство — BIM/ТИМрешение на Платформе nanoCAD для проектирования в *.dwgсреде архитектурного и конструкторского разделов зданий/сооружений. Продукт может использоваться в следующих конфигурациях:
Узнайте подробнее о nanoCAD BIM Строительство |