Как стать автором
Обновить
83.27
Нанософт разработка
Инженерная экосистема

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

Время на прочтение24 мин
Количество просмотров338

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

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

Базовые навыки по созданию и редактированию параметрической графики объектов можно получить в видеоуроке по ссылке.

Для случаев, когда необходимо:

  • параметризировать положение 3D-/2D-примитивов в Редакторе параметрического объекта;

  • параметризировать точки контура в операции 3D-выдавливания в Редакторе параметрического объекта;

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

Параметризация положения 3D-/2D-примитивов

Начнем с рассмотрения теории вопроса. Положение параметрического объекта в пространстве модели задается относительно мировой системы координат, а положение геометрических примитивов объекта задается относительно локальной системы координат объекта. Начало локальной системы координат объекта соответствует точке его вставки. Эта система представлена на рис. 1.

Рис. 1. Расположение систем координат объекта
Рис. 1. Расположение систем координат объекта

По умолчанию у объектов категории параметрического оборудования есть три «ручки», которые позволяют задавать:

  • поворот объекта относительно оси Z локальной системы координат. В момент активации «ручки» оси мировой системы координат встают туда же, где находится локальная система координат объекта (рис. 2);

Рис. 2. Вращение объекта вокруг оси
Рис. 2. Вращение объекта вокруг оси
  • перемещение вдоль оси Z локальной системы координат объекта. При активации «ручки» ось X мировой системы координат встает вдоль оси Z локальной системы координат объекта (рис. 3);

Рис. 3. Смещение объекта вдоль оси Z
Рис. 3. Смещение объекта вдоль оси Z
  • точку вставки объекта относительно мировой системы координат. При активации этой «ручки» мировая система координат остается на месте (рис. 4).

Рис. 4. Изменение точки вставки
Рис. 4. Изменение точки вставки

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

Начнем с задания точки положения примитива объекта (рис. 5). Большая часть примитивов, которые можно добавить в Редактор параметрического объекта, обладает группой параметров базовой точки. Эта группа параметров позволяет задать положение примитива относительно локальной системы координат объекта либо относительно системы координат группы.

Рис. 5. Задание базовой точки примитива
Рис. 5. Задание базовой точки примитива

Система координат группы также может иметь свои собственные координаты положения относительно локальной системы координат (рис. 6). Группы в Редакторе параметрического объекта позволяют задавать параметризацию некоторых параметров сразу для всех элементов, которые входят в группу. Кроме того, группы позволяют выполнять штриховку замкнутых контуров, объединение геометрии 3D-тел, находящихся внутри группы, назначение параметров по цвету и видимости сразу для всех элементов группы. И это далеко не все возможности этого структурного элемента.

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

Примитивы, которые находятся в группе, определяют свое положение не от начала локальной системы координат объекта, а от начала системы координат группы (рис. 7).

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

Очевидно, что положение примитивов или групп примитивов задается тремя значениями координат XYZ. Все эти значения можно параметризовать. Для этого необходимо навести курсор на поле значения и нажать на троеточие (рис. 8).

Рис. 8. Открытие окна Мастера функций для параметра
Рис. 8. Открытие окна Мастера функций для параметра

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

Рис. 9.
Рис. 9. Получение значения параметра по его имени

Имя параметра подставляет значение последнего. Это значение может участвовать в расчете формулы при использовании различных операций: сложение, вычитание, умножение, деление, округление значения и т.п. На рис. 9 показана формула, которая берет значение параметра [AEC_ELEMENT_POS_X]. Значение параметра задано в окне параметров и равно 250. В формуле Мастера функций из этого значения вычитается 50. Таким образом, значение положения по оси X для примитива BOX становится равным 200. Напротив параметра, для которого задана формула, появляется значок f(x). Этот значок подсказывает пользователю, что значение является не статическим, а рассчитывается с помощью формулы (рис. 10).

Рис. 10.
Рис. 10. Пример простой формулы по расчету координаты X базовой точки

При изменении параметра [AEC_ELEMENT_POS_X] в окне параметров объекта соответственно меняется значение параметра положения базовой точки по координате X для примитива BOX. [AEC_ELEMENT_POS_X] = 430.

[AEC_ELEMENT_POS_X] – 50 = 380 (см. рис. 11.)

Рис. 11.
Рис. 11. Пример результата расчета

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

Рассмотрим параметризацию положения с использованием соответствующих «ручек». В окне Редактора параметрического объекта можно задавать множество «ручек» объекта. Чтобы добавить «ручку», необходимо в контекстном меню выбрать пункт Ручка. А далее указать какую «ручку» вы хотите использовать (рис. 12).

Рис. 12. Перечень «ручек» объектов
Рис. 12. Перечень «ручек» объектов
  • «Ручка» длины задает длину графических примитивов Редактора параметрического объекта. Ручка передает значение расстояния от своей базовой точки до положения «ручки».

  • «Ручка» угла задает угол поворота графических примитивов. «Ручка» передает значение угла.

  • «Ручка» перемещения позволяет задавать положение всего объекта аналогично «ручке» вставки объекта. «Ручка» не передает никаких координат в свойства объекта.

  • «Ручка» переключателя позволяет интерактивно переключать значение параметров объекта.

  • «Ручка» растягивания позволяет задать размер объекта и угол поворота всего объекта. Угол поворота не передается в явном виде в отличие от «ручки» угла поворота.

  • «Ручка» смещения задает длину графических примитивов. «Ручка» передает значение расстояния от своей базовой точки до положения «ручки».

  • «Ручка» положения передает значения своих координат относительно локальной системы координат объекта.

Наиболее универсальная из всех перечисленных «ручек» – «ручка» положения. При соответствующей параметризации она позволяет заменить все прочие «ручки», кроме «ручки» переключения. Универсальность достигается за счет того, что эта «ручка» передает значения координат своего положения. А зная координаты положения точек в пространстве, можно параметризовать всю необходимую геометрию. Также эта «ручка» позволяет задавать множество параметризации геометрии, которую не позволяют сделать другие «ручки».

Теперь применим на практике эти знания. Рассмотрим использование «ручки» для задания положения примитива объекта.

Создадим «ручку» положения (рис. 13).

Рис. 13.
Рис. 13. Добавление «ручки» положения

В свойствах объекта создадим параметр Координаты ручки позиции. Необязательно использовать именно этот параметр, главное, чтобы у параметра был подходящий тип данных, например, строковый. Но в этом случае заголовок параметра точно отображает назначение параметра (рис. 14).

Рис. 14.
Рис. 14. Добавление параметра для координат «ручки» положения

В Редакторе параметрического объекта в параметре Назначение укажем добавленный параметр Координаты ручки положения (рис. 15).

Рис. 15.
Рис. 15. Присвоение параметра назначения

Изначально «ручка» положения создается в начале локальной системы координат объекта и потому «ручка» перекрывается с «ручкой» точки вставки объекта. В этом случае при активации «ручки» активируется именно «ручка» положения. Активируем «ручку» и переместим ее в какое-то другое место (рис. 16).

Рис. 16.
Рис. 16. Перемещение «ручки» положения

После этого в свойствах объекта начнут отображаться координаты «ручки» положения. Значение координат соответствуют положению точки относительно локальной системы координат объекта (рис. 17).

Рис. 17.
Рис. 17. Значение координат «ручки» положения

Значение параметра содержит координаты по трем осям (X, Y, Z). Этих трех значений вполне достаточно для параметризации точки положения примитива объекта. Пропишем эти значения в свойствах базовой точки примитива. Для этого снова воспользуемся Мастером функций (рис. 18).

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

Если просто вставить параметр [DIN_GRIP_POSITION] в Мастер функций, то значение будет приходить в виде тройки значений координат {X, Y, Z}, что не подходит для решения поставленной задачи, так как в этой ситуации параметризуется значение координаты по оси X (рис. 19).

Рис. 19.
Рис. 19. Координаты «ручки» позиции

Поэтому из тройки координат {X, Y, Z} необходимо получить значение первой координаты по оси X. Для этого можно воспользоваться функцией vector(), которая позволяет получить значение координаты по ее индексу (рис. 20). Также эта функция позволяет создать векторный тип данных по значению трех числовых аргументов.

Рис. 20.
Рис. 20. Получение значения координаты по индексу с помощью функции vector()

Индекс равный:

  • 0 соответствует координате X;

  • 1 соответствует координате Y;

  • 2 соответствует координате Z.

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

Рис. 21.
Рис. 21. Пример получения координаты по оси X

Пропишем аналогичные функции для координат базовой точки по Y и Z. Для этого потребуется поменять индексы в квадратных скобках (рис. 22).

Рис. 22.
Рис. 22. Пример получения координат по осям X и Y

Теперь начало системы координат примитива объекта (в данном случае цилиндра) совпадает с координатами «ручки» положения. Активация и перемещение «ручки» положения также будут перемещать и примитив (рис. 23), аналогично тому, как работает «ручка» вставки объекта, с той лишь разницей, что «ручка» вставки объекта перемещает объект относительно мировой системы координат, а «ручка» положения перемещает часть примитива относительно локальной системы координат объекта (точки вставки объекта).

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

Научившись целиком перемещать графические примитивы объекта, разберемся, как редактировать части графических примитивов. Большая часть графических примитивов имеют заранее заданные параметры, редактирование которых с помощью «ручки» положения является избыточным, так как эти параметры зачастую можно редактировать при помощи «ручек» длины или смещения, что в плане параметризации является более лаконичным решением (рис. 24).

Рис. 24.
Рис. 24. Пример параметризации габаритов BOX с помощью «ручек» длины

Также большая часть примитивов имеет ограничения в плане геометрии. Например, для примитива BOX нет возможности редактировать положения вершин объекта таким образом, чтобы из прямой призмы получались другие варианты четырехугольных призм. Однако в Редакторе параметрического объекта есть возможность использовать не только примитивы с заранее заданными контурами оснований, но и инструменты 3D-выдавливания по контуру, аналогично тому, как это делается инструментами 3D-моделирования 3D-модуля Платформы nanoCAD (команды: 3dextrude, 3drevolve, 3dsweep).

Параметризация положения точки контура элемента 3D-выдавливания

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

Рис. 25.
Рис. 25. Добавление тела выдавливания

В дереве построения Редактора параметрического объекта появится соответствующий элемент. Тело выдавливания Extrusion имеет параметры, которые позволяют задавать положение примитива относительно локальной системы координат и высоту выдавливания контура. Если развернуть Extrusion, нажав на значок +, можно увидеть контур, по которому формируется элемент выдавливания. По умолчанию создается цилиндр с контуром выдавливания по дуге. Контур выдавливания, в данном случае дуга, также имеет геометрические параметры, меняя которые, можно менять все тело выдавливания (рис. 26).

Рис. 26.
Рис. 26. Геометрические параметры тела выдавливания

Давайте поменяем контур с окружности на прямоугольник. Для этого необходимо удалить имеющийся контур (рис. 27) и импортировать новый.

Рис. 27.
Рис. 27. Удаление контура в теле выдавливания

Чтобы импортировать контур, его необходимо предварительно отрисовать в пространстве модели, например, отрезками или полилинией. После этого данный контур нужно выделить, а для операции выдавливания вызвать контекстное меню правой кнопкой мыши. В контекстном меню необходимо выбрать пункт Выбрать 2DПрофиль (рис. 28).

Рис. 28.
Рис. 28. Активация команды импорта профиля

После этого в командной строке появится запрос на указание базовой точки. Укажем в качестве базовой точки одну из вершин полилинии (рис. 29).

Рис. 29.
Рис. 29. Выбор базовой точки импортируемого профиля

Затем необходимо указать направление оси X создаваемой системы координат примитива. Логично направить ее вдоль какой-либо стороны контура (рис. 30).

Рис. 30.
Рис. 30. Выбор направления базовой оси импортируемого профиля

В результате в теле выдавливания появится новый контур, по которому сформируется новое тело выдавливания – прямая призма. Примечательно, что тело выдавливания в этом случае состоит из четырех отрезков, а не цельной полилинии, и у каждого отрезка есть точка положения, причем только одна. Учитывая эту особенность, правильнее будет воспринимать отрезки как вершины контура (рис. 31).

Рис. 31.
Рис. 31. Параметры точек импортированного профиля выдавливания

Очевидно, что точка имеет две координаты по X и Y, которые также можно параметризовать «ручкой» положения. Если параметризация подразумевает, что меняется только одна координата вдоль какой-либо оси, то для параметризации проще будет использовать «ручку» длины или смещения. Но в нашей статье параметризация этих «ручек» не рассматривается, так как по работе с ними уже есть довольно много справочных материалов, ссылка на один из таких материалов дана в начале статьи. А в случае, если необходимо менять положение точки контура по двум координатам, удобно использовать «ручку» положения.

Создадим «ручку» положения и в качестве параметра назначения снова укажем [DIN_GRIP_POSITION], а также передадим координаты «ручки» в соответствующие координаты точки контура (рис. 32).

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

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

Рис. 33.
Рис. 33. Изменение контура с помощью «ручки» положения

Важно отметить, что точки контура подразумевают параметризацию только по осям X и Y, а как можно было видеть ранее, «ручка» положения передает координаты в том числе по оси Z. Поэтому если перемещать «ручку» положения, задавая и значение координаты по оси Z, то «ручка» положения оторвется по оси Z от вершины, которую она параметризует (рис. 34).

Рис. 34.
Рис. 34. Смещение «ручки» по оси Z

Чтобы избежать этого, необходимо ограничить возможность перемещения «ручки» положения по оси Z. Сделать это можно с помощью параметра Выражение. Этот параметр позволяет пересчитать значение, которое «ручка» передает в параметр [DIN_GRIP_POSITION] объекта (рис. 35).

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

Параметр Выражение также можно параметризовать в окне Мастера функций, если нажать на соответствующее троеточие. По умолчанию в параметре Выражение имеется переменная grip, которая хранит значение, передаваемое «ручкой» (рис. 36).

Рис. 36.
Рис. 36. Переменная grip в параметре Выражение

Ограничивая значения, которые передает переменная grip, можно добиться соответствующих ограничений в перемещении «ручек». Очевидно, что для «ручки» положения переменная grip хранит тройку значений координат положения «ручки» {X, Y, Z}. Координаты по X и Y в этом случае нужны для параметризации точки положения контура элемента выдавливания, а вот координата по Z должна быть равной 0, чтобы «ручка» не отрывалась по оси Z.

Функция vector() имеет два варианта применения:

  • один из них уже был рассмотрен. Применение функции vector (X, Y, Z)[i] позволяет получить одно из значений координаты, хранимых внутри тройки координат {X, Y, Z}, где i – индекс считываемой координаты;

  • второй вариант применения функции vector (X, Y, Z) позволяет создать тройку значений координат вектора {X, Y, Z}.

Для ограничения перемещения «ручки» положения по координате Z надо использовать оба варианта.

Необходимо передать в [DIN_GRIP_POSITION] положение «ручки» по координатам X и Y, приняв, что Z=0. Непосредственно переписать значения координат в самой переменной grip нет возможности, но значения с grip можно считать и пересчитать при помощи функции vector(X, Y, Z)[i]. И уже новые значения можно собрать с помощью функции vector (X, Y, Z).

Обеспечим передачу в параметр [DIN_GRIP_POSITION] координаты по Z=0. Для этого воспользуемся функцией vector (X, Y, Z). Использование этой функции показано на рис. 37.

Рис. 37.
Рис. 37. Использование функции vector (X, Y, Z) для создания вектора по трем координатам

Пока что функция не передает никаких значений по осям X и Y. Эти значения возьмем из переменной grip c помощью уже знакомой нам функции vector (X, Y, Z)[i]:

  • X – vector(grip)[0];

  • Y – vector(grip)[1].

Таким образом, в параметр [DIN_GRIP_POSITION] передаются координаты по осям X и Y от «ручки» положения, а координата по Z=0. Формула показана на рис. 38.

Рис. 38.
Рис. 38. Итоговая формула для параметра Выражение

Примечательно, что такая параметризация не просто передает в [DIN_GRIP_POSITION] пересчитанное значение координат «ручки» положения, но и влияет на поведение самой «ручки». В этом случае «ручка» больше не имеет возможности перемещаться по координате Z, независимо от того, как она будет перемещаться в пространстве модели: c режимом ОРТО, полярным отслеживанием по Z, вводом относительных или абсолютных координат. Координата «ручки» по Z всегда будет равна 0 относительно локальной системы координат объекта (рис. 39).

Рис. 39.
Рис. 39. Параметризованное Выражение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ограничение перемещения «ручки» положения

Ранее уже был рассмотрен случай ограничения перемещения «ручки» положения на примере задания координаты Z=0 (рис. 38). А сейчас рассмотрим другие варианты ограничений:

  • ограничение перемещения в линейном диапазоне;

  • ограничение перемещений на фиксированном радиусе от точки вращения.

Ограничение перемещения в линейном диапазоне

Зададим ограничение перемещения в прямоугольной плоскости на примере отверстия в плите перекрытия.

Вставим в модель плиту перекрытия из базы данных, используя панель узлов и готовых решений (рис. 65).

Рис. 65.
Рис. 65. Вставка плиты перекрытия из базы данных

Откроем плиту перекрытия в окне Редактора параметрического объекта и добавим в нее элемент BOX, который будет вычитать свой объем из плиты (рис. 66-67).

Рис. 66.
Рис. 66. Добавление BOX в Редакторе параметрического объекта
Рис. 67.
Рис. 67. Вычитание BOX из геометрии плиты

Для перемещения вычитающего BOX добавим «ручку» положения (рис. 68).

Рис. 68.
Рис. 68. Создание «ручки» положения BOX

В BOX пропишем соответствующие координаты «ручки» положения (рис. 69).

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

Теперь можно перемещать отверстие внутри плиты (рис. 70).

Рис. 70.
Рис. 70. Перемещение отверстия с помощью «ручки» положения

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

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

где:

  • /*...*/ – комментарии в окне Мастера функций;

  • var имя переменной: = Формула вычисления значения переменной; – объявление переменной и присвоение ей значения. Использование переменной внутри окна редактора удобно, если выражение получается слишком длинным либо есть участки с повторяющимся кодом.

По указанной в конце этого предложения ссылке размещено видео, где показано создание объекта: https://disk.yandex.ru/i/jdjEMyuevsiAoA.

А по размещенной в конце этого предложения ссылке можно посмотреть чертеж с готовым объектом: https://disk.yandex.ru/d/BGzqe7IyQB3SQA.

Ограничение перемещений на фиксированном радиусе от точки вращения

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

Выведем формулу, которая рассчитывает координаты точек окружности с радиусом L (рис. 72). Эта окружность описывает возможную траекторию перемещения «ручки».

Рис. 72.
Рис. 72. Проекции имеющихся и искомых координат

Учитывая, что косинус острого угла в прямоугольном треугольнике равен отношению прилежащего катета к гипотенузе, можно написать формулу:

Аналогичную формулу можно написать, выразив косинус угла альфа через Xог и L:

Приравняем правые части уравнений:

И выразим из полученного равенства Xог:

Аналогичная формула получится и для Yог с той лишь разницей, что выражать надо будет через синус угла альфа.

Вернемся к предыдущему примеру параметризации ориентации объекта (рис. 64) и воспользуемся выведенными формулами. Пропишем формулы в поле Выражение «ручки» положения, которая задает ориентацию группы с отрезками (рис. 73). Радиус L, на котором зафиксируем «ручку» положения, примем равным 100.

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

Таким образом, независимо от точки пространства, где будет установлена «ручка», она всегда будет на расстоянии L от точки вращения (рис. 74).

Рис. 74.
Рис. 74. Демонстрация ограничений перемещения «ручки» положения

В конце этого предложения размещена ссылка на видео, в котором это показано: https://disk.yandex.ru/i/8FYHa3jaCPyOaw.

А это ссылка на чертеж с объектом: https://disk.yandex.ru/d/UErvrS-MkVZEHw.

Формулы для ограничения перемещения «ручки» в рамках сферы выглядят аналогичным образом.

Вывод формулы для косинусов соответствующих углов приведен по ссылке: https://scask.ru/j_dict_math.php?id=103.

Учитывая, что формулы выглядят аналогичным образом, потребуется лишь немного изменить содержание, ранее прописанное в поле Выражение (рис. 75).

Рис. 75.
Рис. 75. Параметризация ограничения перемещения «ручки» положения в рамках сферы

Теперь «ручка» положения может перемещаться и по координате Z. Учитывая это, необходимо дополнить имеющуюся параметризацию векторов направления и ориентации. В этом случае группа сможет вращаться по трем осям относительно начала своих координат (рис. 76).

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

В случае, если координата Z не равна нулю, как показано на скриншоте выше, то при нажатии кнопки ОК в окне Ориентация в пространстве на экране появится сообщение Вектор Direction не перпендикулярен вектору Orientation! (рис. 77).

Рис. 77.
Рис. 77. Ошибка неперпендикулярности векторов направления и ориентации

Связано это с тем, что при таких координатах векторы направления и ориентации не перпендикулярны друг другу. Чтобы обеспечить условие перпендикулярности, необходимо выбрать какую-либо координату вектора, который должен стать перпендикулярным, в данном случае вектора ориентации, и после этого нажать кнопку Перпендикулярно. Новые координаты будут прописаны в векторе. Можно нажать кнопку ОК, ошибка возникать уже не будет (рис. 78).

Рис. 78.
Рис. 78. Параметризация перпендикулярности второго вектора

Теперь с помощью «ручки» положения группу можно вращать по трем осям – XYZ.

Но кое-что еще надо поправить дополнительно. Ранее длина отрезков группы вычислялась для плоского варианта, теперь же необходимо добавить координату Z (рис. 79).

Рис. 79.
Рис. 79. Параметризация длины отрезков с учетом координаты Z

Далее дана ссылка на видео с демонстрацией: https://disk.yandex.ru/i/mzybvzBwKX-Gjw.

А вот ссылка на чертеж с объектом: https://disk.yandex.ru/d/6HMqqZ4CMgKnYQ.

Вычисление точки пересечения прямых на плоскости

При параметризации геометрии может возникнуть потребность в нахождении точки пересечения отрезков или прямых, например, если в точке пересечения необходимо отрисовать какую-либо геометрию. В базе оборудования есть пример такого объекта. Его можно найти на панели узлов в категории Ограждающие конструкции (рис. 80).

Рис. 80.
Рис. 80. Пример объекта с параметризацией по пересечению прямых

В ходе создания этого параметрического объекта для параметризации высоты стены в точке пересечения сегментов необходимо будет найти эту точку. Рассчитанная точка пересечения, в свою очередь, будет необходима для параметризации базовой точки «ручки» длины (рис. 81).

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

Целиком воспроизводить этот объект здесь нет необходимости. Поэтому разберем теорию вопроса, а практический пример будет обобщенным. В качестве примера создадим объект с двумя отрезками, для которых положение точек начала и конца будет задаваться «ручками» положения. А на пересечении линий отрезков будет отрисовываться цилиндр.

Создадим новый объект и добавим в него два отрезка по двум точкам (рис. 82).

Рис. 82.
Рис. 82. Добавление отрезков по двум точкам

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

Рис. 83.
Рис. 83. Добавление четырех «ручек» положения

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

Рис. 84.
Рис. 84. Добавление параметров с координатами положения «ручек»
  1. Координаты «ручки» позиции – начало первого отрезка.

  2. Координаты текста по оси X – конец первого отрезка.

  3. Координаты «ручки» позиции 2 – начало второго отрезка.

  4. Координаты текста по оси Y – конец второго отрезка.

Соответствующие имена параметров назначим в поле параметра назначения «ручек» положения (рис. 85).

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

Учитывая, что задача решается для плоского варианта, также необходимо ограничить перемещение «ручек» положения по координате Z с помощью поля Выражение, как это было сделано ранее в соответствии с рис. 38.

В свойствах отрезков пропишем соответствующие выражения для базовой и второй точки (рис. 86).

Рис. 86.
Рис. 86. Параметризация базовой и второй точек отрезков

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

Классическое уравнение прямой:

где:

  • X1, Y1 – точка начала вектора (отрезка), лежащего на прямой;

  • X2, Y2 – точка конца вектора (отрезка), лежащего на прямой.

В этом случае координаты X1, X2, Y1, Y2 передают «ручки» положения.

Запишем уравнение в одну строку:

Коэффициенты перед X и Y, а также свободные члены соответственно равняются:

В итоге получается уравнение прямой с коэффициентами (общее уравнение):

Поиск точки пересечения прямых на плоскости подразумевает решение системы уравнений прямых:

Решим эту систему уравнений методом Крамера. Для этого пропишем соответствующие определители.

В соответствии с методом Крамера решение системы уравнений выглядит так:

Учитывая, что коэффициенты A, B, C вычисляются по координатам начала и конца отрезков, в Мастере функций можно написать соответствующие выражения.

Добавим переменную в окне Редактора параметрического объекта, чтобы прописать в ней выражение в соответствии с выведенными формулами (рис. 87).

Рис. 87.
Рис. 87. Добавление переменной в окне Редактора параметрического объекта

Переменной присвоим имя Точка_пересечения (рис. 88).

Рис. 88.
Рис. 88. Присвоение имени переменной

В параметре Значение, воспользовавшись Мастером функций, пропишем выражение в соответствии с ранее выведенными формулами (рис. 89).

Рис. 89.
Рис. 89. Выражение, высчитывающее значение точки пересечения отрезков

Для наглядности добавим в объект какой-нибудь примитив, например, цилиндр (рис. 90).

Рис. 90.
Рис. 90. Добавление цилиндра

В свойствах базовой точки цилиндра пропишем координаты точки пересечения. Чтобы воспользоваться ранее созданной переменной, достаточно написать ее имя в Мастере функций (рис. 91).

Рис. 91.
Рис. 91. Использование переменной точки пересечения для параметризации базовой точки цилиндра

Теперь при изменении какой-либо точки положения начала или конца отрезков соответственно меняется положение цилиндра (рис. 92).

Рис. 92.
Рис. 92. Параметризация точки пересечения

Демонстрация параметризации представлена в видео по ссылке: https://disk.yandex.ru/i/65vTkiNatBYWbQ.

А здесь дана ссылка на чертеж с объектом: https://disk.yandex.ru/d/SH2icMkux-X3Lg.

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

Теги:
Хабы:
+2
Комментарии1

Публикации

Информация

Сайт
www.nanocad.ru
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
Россия

Истории