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

ИНН 7726601967 ОГРН 1087746953557

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

ИНН 7715938849 ОГРН 1127747049209

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

ИНН 7801319560 ОГРН 1167847391062

4 - 2025

Решение нестандартных задач графической параметризации объектов в nanoCAD BIM Строительство

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

В первой части статьи («САПР и графика» № 3’2025) мы рассмотрели способы реализации графической параметризации объектов в nanoCAD BIM Строительство (конфигурация «Конструкции»), уделив особое внимание созданию параметрических библиотечных элементов. Продолжим изучение.

Перемещение 2D-/3D-примитива с сохранением относительного положения

Вернемся к теме параметризации базовой точки примитива с помощью «ручки» положения и разберем случай, когда необходимо, чтобы один примитив перемещался относительно другого с сохранением своего положения. Пример этого можно посмотреть по ссылке: https://disk.yandex.ru/i/zz8w61538mla_A, а файл формата*.dwg с уже сделанным объектом размещен по ссылке: https://disk.yandex.ru/d/_euQPiyQgW3fEw.

Создадим две «ручки» положения, одну группу и два BOX.

BOX можно создавать сразу в группе, вызывая контекстное меню группы, либо его можно перенести в группу с помощью drug&drop (рис. 1).

Рис. 1. Создание BOX и перемещение его в группу 
при помощи drug&drop

Рис. 1. Создание BOX и перемещение его в группу при помощи drug&drop

Для наглядности и удобства навигации поименуем элементы в окне Редактора параметрического объекта. Для этого воспользуемся параметром Имя (рис. 2). Этот параметр имеется у большинства элементов Редактора параметрического объекта.

Рис. 2. Присвоение имени группе

Рис. 2. Присвоение имени группе

«Ручка» положения группы будет задавать положение группы и входящих в нее BOX 1 и BOX 2. Эта часть параметризации аналогична той, которая была рассмотрена ранее на примере параметризации базовой точки цилиндра. При этом начало координат группы и начало системы координат BOX 1 совпадают.

Добавим в список параметров объекта параметр [DIN_GRIP_POSITION]. Затем назначим этот параметр в качестве параметра назначения у «ручки» положения группы. А в базовую точку Положение группы пропишем соответствующие значения с [DIN_GRIP_POSITION] (рис. 3).

Рис. 3. Задание координат базовой точки группы

Рис. 3. Задание координат базовой точки группы

Аналогичным образом параметризуем положение BOX 2. Добавим в список параметров объекта параметр [DIN_ GRIP_POSITION_2], а затем назначим его в качестве параметра назначения у «ручки» положения BOX 2 относительно группы. Базовая точка BOX 2 должна брать соответствующие значения из [DIN_GRIP_POSITION_2] (рис. 4).

Рис. 4. Задание координат базовой точки BOX 2

Рис. 4. Задание координат базовой точки BOX 2

Можно было бы предположить, что выполнены все действия, которые необходимы для параметризации. Однако можно заметить, что «ручка» положения BOX 2 относительно группы находится не там, где ее можно было ожидать. Она смещена относительно базовой точки BOX 2 на некоторое расстояние. Это показано в видео по ссылке: https://disk.yandex.ru/i/rT5qtk9vcf_7Mw.

Связано это с тем, что координаты положения BOX 2 присваиваются относительно положения группы, в то время как «ручка» положения BOX 2 относительно группы передает свои координаты не относительно начала системы координат группы, а относительно локальной системы координат объекта. Отсюда возникает смещение «ручки», равное расстоянию от начала локальной системы координат объекта до начала системы координат группы (рис. 5).

Рис. 5. Смещение «ручки» положения 
от базовой точки BOX 2

Рис. 5. Смещение «ручки» положения от базовой точки BOX 2

Чтобы скорректировать это смещение, необходимо задать базовую точку у самой «ручки» положения BOX 2 так, чтобы базовая точка «ручки» положения BOX 2 по координатам была равна базовой точке группы, то есть брать координаты из параметра [DIN_GRIP_POSITION] (рис. 6).

Рис. 6. Параметризация базовой точки 
«ручки» положения

Рис. 6. Параметризация базовой точки «ручки» положения

В этом случае «ручка» положения BOX 2 будет передавать координаты в [DIN_GRIP_POSITION_2] относительно системы координат группы, а не относительно локальной системы координат объекта (рис. 7). «Ручка» положения BOX 2 будет перемещаться при перемещении группы, а смещение будет отсутствовать.

Рис. 7. Взаимосвязь значений координат

Рис. 7. Взаимосвязь значений координат

При этом координаты группы и базовая точка «ручки» BOX 2 равны, эти координаты передает «ручка» положения группы (рис. 8).

Рис. 8. Равенство координат 
положения группы и базовой точки «ручки» положения

Рис. 8. Равенство координат положения группы и базовой точки «ручки» положения

По приведенной в конце этого предложения ссылке можно посмотреть видео с демонстрацией создания описанной параметризации: https://disk.yandex.ru/i/SoKAiUxGE9k_OQ.

Параметризация ориентации примитивов объекта с помощью «ручек» положения

До этого мы рассмотрели случаи параметризации положения объекта в пространстве по базовой точке объекта, однако, кроме размещения объекта в каких-либо координатах, часто возникает необходимость задать ориентацию объекта, то есть задать углы ориентации объекта относительно осей системы координат. Сориентировать весь объект целиком можно при помощи платформенных команд ПОВЕРНИ, 3drotate и т.п. А для параметризации ориентации примитивов объектов необходимо воспользоваться группами параметров Направление и Ориентации (рис. 9).

Рис. 9. Векторы, отвечающие за ориентацию примитива в пространстве

Рис. 9. Векторы, отвечающие за ориентацию примитива в пространстве

Под направлением понимаются координаты вектора X системы координат примитива (рис. 10).

Рис. 10. Параметризация вектора направления

Рис. 10. Параметризация вектора направления

Под ориентацией понимаются координаты вектора Z системы координат примитива (рис. 11).

Рис. 11. Параметризация вектора ориентации

Рис. 11. Параметризация вектора ориентации

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

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

Рис. 12. Пример поворота группы с заданной базовой точкой

Рис. 12. Пример поворота группы с заданной базовой точкой

Создадим группу и добавим в нее два элемента, например отрезки. Чтобы отрезок создался сразу в группе, контекстное меню необходимо вызывать для группы (рис. 13).

Рис. 13. Создание отрезка в группе

Рис. 13. Создание отрезка в группе

Для второго отрезка зададим смещение по оси Y на 100 (рис. 14).

Рис. 14. Смещение второго отрезка

Рис. 14. Смещение второго отрезка

Также создадим «ручку» положения и соответствующий параметр в списке свойств объекта (рис. 15).

Рис. 15. Создание «ручки» положения и соответствующего параметра

Рис. 15. Создание «ручки» положения и соответствующего параметра

«Ручке» положения в качестве параметра назначения укажем ранее добавленный параметр Координаты ручки позиции. А саму «ручку» разместим в конце первого отрезка (рис. 16).

Рис. 16. Размещение «ручки» положения в конце отрезка

Рис. 16. Размещение «ручки» положения в конце отрезка

Применим на практике ранее проанализированную тему. В группе для параметров направления пропишем соответствующие координаты «ручки» позиции (рис. 17).

Рис. 17. Параметризация направления группы

Рис. 17. Параметризация направления группы

Теперь при помощи «ручки» мы можем повернуть группу вокруг собственной оси Z. Можно заметить, что «ручка» отрывается от отрезка, так как длина отрезка равна 100, а «ручку» можно разместить свободно в любой точке пространства (рис. 18).

Рис. 18. Поворот группы при помощи «ручки» положения

Рис. 18. Поворот группы при помощи «ручки» положения

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

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


О компании «Макссофт-24»

ООО «Макссофт-24» — авторизованный партнер крупнейших российских разработчиков программного обеспечения и поставщиков широкоформатного оборудования.
Мы являемся Премьер- и Фокус-партнером компании «Нанософт разработка», что подтверждает высокий уровень экспертизы по линейке решений nanoCAD. Мы всегда находимся с разработчиком в прямом контакте для оперативного и компетентного решения ваших задач.
Более 30 лет мы занимаемся комплексной интег-рацией в инфраструктуру организаций различного масштаба ИТ-решений широкого функционального назначения: общесистемный софт, САПР и ТИМ, информационная безопасность, прикладное ПО, электронный документооборот, ЭЦП (официальный сайт: maxsoft.ru).

Параметризуем длину отрезка в зависимости от положения «ручки». Длина будет равняться корню из суммы квадратов координат X и Y, так как координаты по X и Y представляют собой проекции длины отрезка на координатные оси, а учитывая, что система координат декартова (прямоугольная), то проекции вместе с длиной образуют прямоугольный треугольник (рис. 19).

Рис. 19. Вычисление длины отрезка по проекциям координат «ручки» положения

Рис. 19. Вычисление длины отрезка по проекциям координат «ручки» положения

Соответствующая формула показана на рис. 20.

Рис. 20. Параметризация длины отрезка по проекциям координат «ручки» положения

Рис. 20. Параметризация длины отрезка по проекциям координат «ручки» положения

В предыдущих версиях nanoCAD BIM Конструкции (версия 23.1.23867.143) была небольшая ошибка: квадрат отрицательного числа не является положительным. Это приводило к соответствующим искажениям графики. Поэтому в формуле используется функция abs(), которая берет модуль значения координат X и Y. Эти же формулы пропишем для параметра длины второго отрезка.

Теперь при изменении положения «ручки» меняется ориентация и длина отрезков (рис. 21).

Рис. 21. Демонстрация изменения длины отрезка в соответствии с положением «ручки»

Рис. 21. Демонстрация изменения длины отрезка в соответствии с положением «ручки»

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

Создадим «ручку» положения, которая будет задавать базовую точку группы. Для «ручки» создадим соответствующий параметр [DIN_GPIR_POSITION_2] (рис. 22 и 23).

Рис. 22. Создание «ручки» положения 
базовой точки группы

Рис. 22. Создание «ручки» положения базовой точки группы

Рис. 23. Параметризация базовой точки группы

Рис. 23. Параметризация базовой точки группы

Теперь можно перемещать группу, однако, как и в предыдущем примере, вторая «ручка» положения поворота остается на месте (рис. 24).

Рис. 24. Работа «ручки» положения базовой точки группы

Рис. 24. Работа «ручки» положения базовой точки группы

Чтобы решить эту проблему, необходимо задать базовую точку «ручки» положения поворота отрезков. Координаты базовой точки равняются координатам, которые передает «ручка» положения группы (рис. 25).

Рис. 25. Параметризация базовой точки «ручки» положения поворота

Рис. 25. Параметризация базовой точки «ручки» положения поворота

Теперь объект редактируется «ручками», как и планировалось. Ниже размещена ссылка на пример создания такого объекта: https://disk.yandex.ru/i/VBjESI-MkjhzNw.

Чертеж с готовым объектом можно найти по ссылке: https://disk.yandex.ru/d/04KTjQRiTcOfsw.

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

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



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

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

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

ИНН 7751031421 ОГРН 5167746333838

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

ИНН 7707548179 ОГРН 1057746796436

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

ИНН 7726601967 ОГРН 1087746953557