В первой части статьи («САПР и графика» № 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
Для наглядности и удобства навигации поименуем элементы в окне Редактора параметрического объекта. Для этого воспользуемся параметром Имя (рис. 2). Этот параметр имеется у большинства элементов Редактора параметрического объекта.
Рис. 2. Присвоение имени группе
«Ручка» положения группы будет задавать положение группы и входящих в нее BOX 1 и BOX 2. Эта часть параметризации аналогична той, которая была рассмотрена ранее на примере параметризации базовой точки цилиндра. При этом начало координат группы и начало системы координат BOX 1 совпадают.
Добавим в список параметров объекта параметр [DIN_GRIP_POSITION]. Затем назначим этот параметр в качестве параметра назначения у «ручки» положения группы. А в базовую точку Положение группы пропишем соответствующие значения с [DIN_GRIP_POSITION] (рис. 3).
Рис. 3. Задание координат базовой точки группы
Аналогичным образом параметризуем положение BOX 2. Добавим в список параметров объекта параметр [DIN_ GRIP_POSITION_2], а затем назначим его в качестве параметра назначения у «ручки» положения BOX 2 относительно группы. Базовая точка BOX 2 должна брать соответствующие значения из [DIN_GRIP_POSITION_2] (рис. 4).
Рис. 4. Задание координат базовой точки BOX 2
Можно было бы предположить, что выполнены все действия, которые необходимы для параметризации. Однако можно заметить, что «ручка» положения BOX 2 относительно группы находится не там, где ее можно было ожидать. Она смещена относительно базовой точки BOX 2 на некоторое расстояние. Это показано в видео по ссылке: https://disk.yandex.ru/i/rT5qtk9vcf_7Mw.
Связано это с тем, что координаты положения BOX 2 присваиваются относительно положения группы, в то время как «ручка» положения BOX 2 относительно группы передает свои координаты не относительно начала системы координат группы, а относительно локальной системы координат объекта. Отсюда возникает смещение «ручки», равное расстоянию от начала локальной системы координат объекта до начала системы координат группы (рис. 5).
Рис. 5. Смещение «ручки» положения от базовой точки BOX 2
Чтобы скорректировать это смещение, необходимо задать базовую точку у самой «ручки» положения BOX 2 так, чтобы базовая точка «ручки» положения BOX 2 по координатам была равна базовой точке группы, то есть брать координаты из параметра [DIN_GRIP_POSITION] (рис. 6).
Рис. 6. Параметризация базовой точки «ручки» положения
В этом случае «ручка» положения BOX 2 будет передавать координаты в [DIN_GRIP_POSITION_2] относительно системы координат группы, а не относительно локальной системы координат объекта (рис. 7). «Ручка» положения BOX 2 будет перемещаться при перемещении группы, а смещение будет отсутствовать.
Рис. 7. Взаимосвязь значений координат
При этом координаты группы и базовая точка «ручки» BOX 2 равны, эти координаты передает «ручка» положения группы (рис. 8).
Рис. 8. Равенство координат положения группы и базовой точки «ручки» положения
По приведенной в конце этого предложения ссылке можно посмотреть видео с демонстрацией создания описанной параметризации: https://disk.yandex.ru/i/SoKAiUxGE9k_OQ.
Параметризация ориентации примитивов объекта с помощью «ручек» положения
До этого мы рассмотрели случаи параметризации положения объекта в пространстве по базовой точке объекта, однако, кроме размещения объекта в каких-либо координатах, часто возникает необходимость задать ориентацию объекта, то есть задать углы ориентации объекта относительно осей системы координат. Сориентировать весь объект целиком можно при помощи платформенных команд ПОВЕРНИ, 3drotate и т.п. А для параметризации ориентации примитивов объектов необходимо воспользоваться группами параметров Направление и Ориентации (рис. 9).
Рис. 9. Векторы, отвечающие за ориентацию примитива в пространстве
Под направлением понимаются координаты вектора X системы координат примитива (рис. 10).
Рис. 10. Параметризация вектора направления
Под ориентацией понимаются координаты вектора Z системы координат примитива (рис. 11).
Рис. 11. Параметризация вектора ориентации
Координаты задаются относительно локальной системы координат объекта, а если примитив вложен в какую-либо группу, то относительно системы координат группы.
Координаты векторов направления и ориентации задаются относительно системы координат поворачиваемого объекта, но сама система вращается в локальной системе координат группы/объекта. Чтобы посчитать координаты радиус-вектора направления/ориентации относительно локальной системы координат объекта/группы, необходимо сложить координаты базовой точки поворачиваемого объекта и координаты вектора направления/ориентации (рис. 12).
Рис. 12. Пример поворота группы с заданной базовой точкой
Создадим группу и добавим в нее два элемента, например отрезки. Чтобы отрезок создался сразу в группе, контекстное меню необходимо вызывать для группы (рис. 13).
Рис. 13. Создание отрезка в группе
Для второго отрезка зададим смещение по оси Y на 100 (рис. 14).
Рис. 14. Смещение второго отрезка
Также создадим «ручку» положения и соответствующий параметр в списке свойств объекта (рис. 15).
Рис. 15. Создание «ручки» положения и соответствующего параметра
«Ручке» положения в качестве параметра назначения укажем ранее добавленный параметр Координаты ручки позиции. А саму «ручку» разместим в конце первого отрезка (рис. 16).
Рис. 16. Размещение «ручки» положения в конце отрезка
Применим на практике ранее проанализированную тему. В группе для параметров направления пропишем соответствующие координаты «ручки» позиции (рис. 17).
Рис. 17. Параметризация направления группы
Теперь при помощи «ручки» мы можем повернуть группу вокруг собственной оси Z. Можно заметить, что «ручка» отрывается от отрезка, так как длина отрезка равна 100, а «ручку» можно разместить свободно в любой точке пространства (рис. 18).
Рис. 18. Поворот группы при помощи «ручки» положения
О компании «Нанософт» «Нанософт» — российский разработчик инженерного ПО: технологий автоматизированного проектирования (CAD/САПР), информационного моделирования (BIM/ТИМ) и сопровождения объектов промышленного и гражданского строительства (ПГС) на всех этапах жизненного цикла, а также сквозной цифровизации всех процессов в производстве. Флагманский продукт — Платформа nanoCAD — универсальная САПР для создания чертежей и 3D-моделей с прямой поддержкой *.dwg-формата (официальный сайт: nanocad.ru). |
О компании «Макссофт-24» ООО «Макссофт-24» — авторизованный партнер крупнейших российских разработчиков программного обеспечения и поставщиков широкоформатного оборудования. |
Параметризуем длину отрезка в зависимости от положения «ручки». Длина будет равняться корню из суммы квадратов координат X и Y, так как координаты по X и Y представляют собой проекции длины отрезка на координатные оси, а учитывая, что система координат декартова (прямоугольная), то проекции вместе с длиной образуют прямоугольный треугольник (рис. 19).
Рис. 19. Вычисление длины отрезка по проекциям координат «ручки» положения
Соответствующая формула показана на рис. 20.
Рис. 20. Параметризация длины отрезка по проекциям координат «ручки» положения
В предыдущих версиях nanoCAD BIM Конструкции (версия 23.1.23867.143) была небольшая ошибка: квадрат отрицательного числа не является положительным. Это приводило к соответствующим искажениям графики. Поэтому в формуле используется функция abs(), которая берет модуль значения координат X и Y. Эти же формулы пропишем для параметра длины второго отрезка.
Теперь при изменении положения «ручки» меняется ориентация и длина отрезков (рис. 21).
Рис. 21. Демонстрация изменения длины отрезка в соответствии с положением «ручки»
Добавим еще одну возможность для объекта —перемещение группы относительно его локальной системы координат. Для этого необходимы знания, полученные при формировании объекта с сохранением относительного положения примитивов.
Создадим «ручку» положения, которая будет задавать базовую точку группы. Для «ручки» создадим соответствующий параметр [DIN_GPIR_POSITION_2] (рис. 22 и 23).
Рис. 22. Создание «ручки» положения базовой точки группы
Рис. 23. Параметризация базовой точки группы
Теперь можно перемещать группу, однако, как и в предыдущем примере, вторая «ручка» положения поворота остается на месте (рис. 24).
Рис. 24. Работа «ручки» положения базовой точки группы
Чтобы решить эту проблему, необходимо задать базовую точку «ручки» положения поворота отрезков. Координаты базовой точки равняются координатам, которые передает «ручка» положения группы (рис. 25).
Рис. 25. Параметризация базовой точки «ручки» положения поворота
Теперь объект редактируется «ручками», как и планировалось. Ниже размещена ссылка на пример создания такого объекта: https://disk.yandex.ru/i/VBjESI-MkjhzNw.
Чертеж с готовым объектом можно найти по ссылке: https://disk.yandex.ru/d/04KTjQRiTcOfsw.
В следующем номере мы продолжим исследование возможностей графической параметризации в nanoCAD BIM Строительство и более подробно рассмотрим применение векторных функций и ограничений перемещения «ручек» для управления сложными геометрическими формами.
Узнайте подробнее о nanoCAD BIM Строительство: