Это продолжение материала Решение нестандартных задач графической параметризации объектов в nanoCAD BIM Строительство (Часть 1), перед тем как продолжить чтение, ознакомьтесь с первой частью:
Параметризация ориентации примитивов объекта с помощью «ручек» положения
До этого мы рассмотрели случаи параметризации положения объекта в пространстве по базовой точке объекта, однако, кроме размещения объекта в каких-либо координатах, часто возникает необходимость задать ориентацию объекта, то есть задать углы ориентации объекта относительно осей системы координат. Сориентировать весь объект целиком можно при помощи платформенных команд ПОВЕРНИ, 3drotate и т.п. А для параметризации ориентации примитивов объектов необходимо воспользоваться группами параметров Направление и Ориентации (рис. 48).
Под направлением понимаются координаты вектора X системы координат примитива (рис. 49).
Под ориентацией понимаются координаты вектора Z системы координат примитива (рис. 50).
Координаты задаются относительно локальной системы координат объекта, а если примитив вложен в какую-либо группу, то относительно системы координат группы.
Координаты векторов направления и ориентации задаются относительно системы координат поворачиваемого объекта, но сама система вращается в локальной системе координат группы/объекта. Чтобы посчитать координаты радиус-вектора направления/ориентации относительно локальной системы координат объекта/группы, необходимо сложить координаты базовой точки поворачиваемого объекта и координаты вектора направления/ориентации (рис. 51).
Создадим группу и добавим в нее два элемента, например, отрезки. Чтобы отрезок создался сразу в группе, контекстное меню необходимо вызывать для группы (рис. 52).
Для второго отрезка зададим смещение по оси Y на 100 (рис. 53).
Также создадим «ручку» положения и соответствующий параметр в списке свойств объекта (рис. 54).
«Ручке» положения в качестве параметра назначения укажем ранее добавленный параметр Координаты ручки позиции. А саму «ручку» разместим в конце первого отрезка (рис. 55).
Применим на практике ранее проанализированную тему. В группе для параметров направления пропишем соответствующие координаты «ручки» позиции (рис. 56).
Теперь при помощи «ручки» мы можем повернуть группу вокруг собственной оси Z. Можно заметить, что «ручка» отрывается от отрезка, так как длина отрезка равна 100, а «ручку» можно разместить свободно в любой точке пространства (рис. 57).
Параметризуем длину отрезка в зависимости от положения «ручки». Длина будет равняться корню из суммы квадратов координат X и Y, так как координаты по X и Y представляют собой проекции длины отрезка на координатные оси, а учитывая, что система координат декартова (прямоугольная), то проекции вместе с длиной образуют прямоугольный треугольник (рис. 58).
Соответствующая формула показана на рис. 59.
В предыдущих версиях nanoCAD BIM Конструкции (версия 23.1.23867.143) была небольшая ошибка: квадрат отрицательного числа не является положительным. Это приводило к соответствующим искажениям графики. Поэтому в формуле используется функция abs(), которая берет модуль значения координат X и Y. Эти же формулы пропишем для параметра длины второго отрезка.
Теперь при изменении положения «ручки» меняется ориентация и длина отрезков (рис. 60).
Добавим еще одну возможность для объекта – перемещение группы относительно его локальной системы координат. Для этого необходимы знания, полученные при формировании объекта с сохранением относительного положения примитивов.
Создадим «ручку» положения, которая будет задавать базовую точку группы. Для «ручки» создадим соответствующий параметр [DIN_GPIR_POSITION_2] (рис. 61-62).
Теперь можно перемещать группу, однако, как и в предыдущем примере, вторая «ручка» положения поворота остается на месте (рис. 63).
Чтобы решить эту проблему, необходимо задать базовую точку «ручки» положения поворота отрезков. Координаты базовой точки равняются координатам, которые передает «ручка» положения группы (рис. 64).
Теперь объект редактируется «ручками», как и планировалось. Посмотреть пример создания такого объекта можно по ссылке.
Чертеж с готовым объектом можно найти по ссылке.
Ограничение перемещения «ручки» положения
Ранее уже был рассмотрен случай ограничения перемещения «ручки» положения на примере задания координаты Z=0 (рис. 38). А сейчас рассмотрим другие варианты ограничений:
- ограничение перемещения в линейном диапазоне;
- ограничение перемещений на фиксированном радиусе от точки вращения.
Ограничение перемещения в линейном диапазоне
Зададим ограничение перемещения в прямоугольной плоскости на примере отверстия в плите перекрытия.
Вставим в модель плиту перекрытия из базы данных, используя панель узлов и готовых решений (рис. 65).
Откроем плиту перекрытия в окне Редактора параметрического объекта и добавим в нее элемент BOX, который будет вычитать свой объем из плиты (рис. 66-67).
Для перемещения вычитающего BOX добавим «ручку» положения (рис. 68).
В BOX пропишем соответствующие координаты «ручки» положения (рис. 69).
Теперь можно перемещать отверстие внутри плиты (рис. 70).
Но в такой параметризации не заданы ограничения перемещения, поэтому отверстие может выйти за габариты плиты. Чтобы избежать подобной ситуации, необходимо прописать соответствующую формулу в «ручке» положения в параметре Выражение (рис. 71),
где:
- /*...*/ – комментарии в окне Мастера функций;
- var `имя переменной`: = `Формула вычисления значения переменной`; – объявление переменной и присвоение ей значения. Использование переменной внутри окна редактора удобно, если выражение получается слишком длинным либо есть участки с повторяющимся кодом.
По ссылке размещено видео, где показано создание объекта.
А по этой ссылке можно посмотреть чертеж с готовым объектом.
Ограничение перемещений на фиксированном радиусе от точки вращения
В приведенном на рис. 57 примере показано, как «ручка» положения отрывается от отрезка. Одним из вариантов решения этой проблемы является фиксация «ручки» поворота на каком-то радиусе от точки вращения. Рассмотрим этот вопрос на примере фиксации «ручки» положения в рамках окружности, то есть в случае, когда параметризация выполняется в плоскости. Использование «ручки» положения для такой параметризации избыточно, лучше использовать «ручку» угла. Но рассмотрение такой параметризации на плоском примере упростит понимание параметризации для случая, если поворот осуществляется в рамках сферы, то есть в трехмерном пространстве.
Выведем формулу, которая рассчитывает координаты точек окружности с радиусом L (рис. 72). Эта окружность описывает возможную траекторию перемещения «ручки».
Учитывая, что косинус острого угла в прямоугольном треугольнике равен отношению прилежащего катета к гипотенузе, можно написать формулу:
Аналогичную формулу можно написать, выразив косинус угла альфа через Xог и L:
Приравняем правые части уравнений:
И выразим из полученного равенства Xог:
Аналогичная формула получится и для Yог с той лишь разницей, что выражать надо будет через синус угла альфа.
Вернемся к предыдущему примеру параметризации ориентации объекта (рис. 64) и воспользуемся выведенными формулами. Пропишем формулы в поле Выражение «ручки» положения, которая задает ориентацию группы с отрезками (рис. 73). Радиус L, на котором зафиксируем «ручку» положения, примем равным 100.
Таким образом, независимо от точки пространства, где будет установлена «ручка», она всегда будет на расстоянии L от точки вращения (рис. 74).
Для наглядности, прикрепляем ссылку на видео, в котором это показано.
А это ссылка на чертеж с объектом.
Формулы для ограничения перемещения «ручки» в рамках сферы выглядят аналогичным образом.
Вывод формулы для косинусов соответствующих углов приведен по ссылке.
Учитывая, что формулы выглядят аналогичным образом, потребуется лишь немного изменить содержание, ранее прописанное в поле Выражение (рис. 75).
Теперь «ручка» положения может перемещаться и по координате Z. Учитывая это, необходимо дополнить имеющуюся параметризацию векторов направления и ориентации. В этом случае группа сможет вращаться по трем осям относительно начала своих координат (рис. 76).
В случае, если координата Z не равна нулю, как показано на скриншоте выше, то при нажатии кнопки ОК в окне Ориентация в пространстве на экране появится сообщение Вектор Direction не перпендикулярен вектору Orientation! (рис. 77).
Связано это с тем, что при таких координатах векторы направления и ориентации не перпендикулярны друг другу. Чтобы обеспечить условие перпендикулярности, необходимо выбрать какую-либо координату вектора, который должен стать перпендикулярным, в данном случае вектора ориентации, и после этого нажать кнопку Перпендикулярно. Новые координаты будут прописаны в векторе. Можно нажать кнопку ОК, ошибка возникать уже не будет (рис. 78).
Теперь с помощью «ручки» положения группу можно вращать по трем осям – XYZ.
Но кое-что еще надо поправить дополнительно. Ранее длина отрезков группы вычислялась для плоского варианта, теперь же необходимо добавить координату Z (рис. 79).
Далее дана ссылка на видео с демонстрацией.
А вот ссылка на чертеж с объектом.
Вычисление точки пересечения прямых на плоскости
При параметризации геометрии может возникнуть потребность в нахождении точки пересечения отрезков или прямых, например, если в точке пересечения необходимо отрисовать какую-либо геометрию. В базе оборудования есть пример такого объекта. Его можно найти на панели узлов в категории Ограждающие конструкции (рис. 80).
В ходе создания этого параметрического объекта для параметризации высоты стены в точке пересечения сегментов необходимо будет найти эту точку. Рассчитанная точка пересечения, в свою очередь, будет необходима для параметризации базовой точки «ручки» длины (рис. 81).
Целиком воспроизводить этот объект здесь нет необходимости. Поэтому разберем теорию вопроса, а практический пример будет обобщенным. В качестве примера создадим объект с двумя отрезками, для которых положение точек начала и конца будет задаваться «ручками» положения. А на пересечении линий отрезков будет отрисовываться цилиндр.
Создадим новый объект и добавим в него два отрезка по двум точкам (рис. 82).
Также создадим четыре «ручки» положения, которые будут задавать начало и конец отрезков (рис. 83).
В свойства объекта добавим четыре новых параметра, которые будут содержать координаты «ручек» положения (рис. 84). Координаты текста не очень подходят по смыслу для этой задачи, но чтобы не добавлять дополнительных параметров в базу воспользуемся ими.
- Координаты «ручки» позиции – начало первого отрезка.
- Координаты текста по оси X – конец первого отрезка.
- Координаты «ручки» позиции 2 – начало второго отрезка.
- Координаты текста по оси Y – конец второго отрезка.
Соответствующие имена параметров назначим в поле параметра назначения «ручек» положения (рис. 85).
Учитывая, что задача решается для плоского варианта, также необходимо ограничить перемещение «ручек» положения по координате Z с помощью поля Выражение, как это было сделано ранее в соответствии с рис. 38.
В свойствах отрезков пропишем соответствующие выражения для базовой и второй точки (рис. 86).
Существует аналитическое решение, которое позволяет найти точку пересечения двух прямых на плоскости. В сущности, необходимо решить систему из двух уравнений прямых. Для прямых существует множество вариантов записи уравнения прямой. В этой статье рассматривается вариант записи уравнения с коэффициентами (общим уравнением), так как систему таких уравнений довольно легко решать методом Крамера.
Классическое уравнение прямой:
где:
- X1, Y1 – точка начала вектора (отрезка), лежащего на прямой;
- X2, Y2 – точка конца вектора (отрезка), лежащего на прямой.
В этом случае координаты X1, X2, Y1, Y2 передают «ручки» положения.
Запишем уравнение в одну строку:
Коэффициенты перед X и Y, а также свободные члены соответственно равняются:
В итоге получается уравнение прямой с коэффициентами (общее уравнение):
Поиск точки пересечения прямых на плоскости подразумевает решение системы уравнений прямых:
Решим эту систему уравнений методом Крамера. Для этого пропишем соответствующие определители.
В соответствии с методом Крамера решение системы уравнений выглядит так:
Учитывая, что коэффициенты A, B, C вычисляются по координатам начала и конца отрезков, в Мастере функций можно написать соответствующие выражения.
Добавим переменную в окне Редактора параметрического объекта, чтобы прописать в ней выражение в соответствии с выведенными формулами (рис. 87).
Переменной присвоим имя Точка_пересечения (рис. 88).
В параметре Значение, воспользовавшись Мастером функций, пропишем выражение в соответствии с ранее выведенными формулами (рис. 89).
Для наглядности добавим в объект какой-нибудь примитив, например, цилиндр (рис. 90).
В свойствах базовой точки цилиндра пропишем координаты точки пересечения. Чтобы воспользоваться ранее созданной переменной, достаточно написать ее имя в Мастере функций (рис. 91).
Теперь при изменении какой-либо точки положения начала или конца отрезков соответственно меняется положение цилиндра (рис. 92).
Демонстрация параметризации представлена в видео по ссылке.
А здесь дана ссылка на чертеж с объектом.
Описанные приемы параметризации позволяют существенно расширить возможности применения параметрических объектов и nanoCAD BIM Строительство (конфигурация «Конструкции»). Обладая знаниями о параметризации точек в пространстве, можно создавать объекты со сложными взаимосвязями геометрических элементов. Описанные в этой статье примеры помогут в полной мере овладеть навыками по созданию такой параметризации.
По всем вопросам:
☎ 8 (800) 201-63-85
✉ cad@maxsoft.ru