Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель:
ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

Рекламодатель:
ООО «Ренга Софтвэа»

ИНН 7801319560 ОГРН 1167847391062

2 - 2025

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

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

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

Введение

В 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 (например, https://acad-prog.ru/spravochnik-autolisp-funktsij-po-naznacheniyu/).
  2. Руководство разработчика с функциями и комментариями. Полещук Н.Н., Лоскутов П.В. «AutoLISP и Visual LISP в среде AutoCAD».
  3. Про разработку САПР-приложений (опыт, находки, технологии). Зуев С.А., Полещук Н.Н. «САПР на базе AutoCAD — как это делается».
  4. Русскоязычное сообщество autolisp.ru (https://autolisp.ru/).
  5. Личный кабинет разработчика nanoCAD (https://developer.nanocad.ru/).

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

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

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

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

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

  1. Удобную, настраиваемую и интеллектуальную подсветку синтаксиса.
  2. Автозавершения и дополнения кода (IntelliSense).
  3. Расширения функционала и удобства (управление версиями кода (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

Рис. 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).

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

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

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

  • polyline — переменная, в которой хранится выбранная полилиния;
  • base_fencing_vla — vla-объект, элемент ограждения;
  • base_point — базовая точка ограждения, точка вставки (рис. 6);
  • length_section — длина секции, ввод данных от пользователя.

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

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

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

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

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

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

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

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

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

  • поставка и внедрение САПР и BIM­решений на Платформе nanoCAD;
  • групповое и индивидуальное обучение работе в ПО nanoCAD, Model Studio CS;
  • услуги по традиционному проектированию и BIM­моделированию.

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

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

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

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

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

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

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

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

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

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

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

После осуществления расчетов и преобразований происходит построение ограждения (рис. 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-полилинии

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

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

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

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

«Нанософт» — российский разработчик инженерного ПО: технологий автоматизированного проектирования (CAD/САПР), информационного моделирования (BIM/ТИМ) и сопровождения объектов промышленного и гражданского строительства (ПГС) на всех этапах жизненного цикла, а также сквозной цифровизации всех процессов в производстве. Флагманский продукт — Платформа nanoCAD — универсальная САПР для создания чертежей и 3D­моделей с прямой поддержкой *.dwg­формата (официальный сайт: nanocad.ru).

О nanoCAD BIM Строительство

nanoCAD BIM Строительство — BIM/ТИМ­решение на Платформе nanoCAD для проектирования в *.dwg­среде архитектурного и конструкторского разделов зданий/сооружений.

Продукт может использоваться в следующих конфигурациях:

  • nanoCAD BIM Строительство — для проектирования разделов КР (КМ, КЖ и КД) и АР;
  • nanoCAD BIM Архитектура — для проектирования раздела АР;
  • nanoCAD BIM Конструкции — для проектирования раздела КР (КМ, КЖ и КД).

Узнайте подробнее о nanoCAD BIM Строительство



Регистрация | Войти

Мы в телеграм:

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: ООО «КЭЛС-центр»

ИНН 7707548179 ОГРН 1057746796436

Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557