Найти в Дзене

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

Это продолжение материала Решение нестандартных задач графической параметризации объектов в nanoCAD BIM Строительство (Часть 1), перед тем как продолжить чтение, ознакомьтесь с первой частью: Параметризация ориентации примитивов объекта с помощью «ручек» положения До этого мы рассмотрели случаи параметризации положения объекта в пространстве по базовой точке объекта, однако, кроме размещения объекта в каких-либо координатах, часто возникает необходимость задать ориентацию объекта, то есть задать углы ориентации объекта относительно осей системы координат. Сориентировать весь объект целиком можно при помощи платформенных команд ПОВЕРНИ, 3drotate и т.п. А для параметризации ориентации примитивов объектов необходимо воспользоваться группами параметров Направление и Ориентации (рис. 48). Под направлением понимаются координаты вектора X системы координат примитива (рис. 49). Под ориентацией понимаются координаты вектора Z системы координат примитива (рис. 50). Координаты задаются относител

Это продолжение материала Решение нестандартных задач графической параметризации объектов в nanoCAD BIM Строительство (Часть 1), перед тем как продолжить чтение, ознакомьтесь с первой частью:

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

До этого мы рассмотрели случаи параметризации положения объекта в пространстве по базовой точке объекта, однако, кроме размещения объекта в каких-либо координатах, часто возникает необходимость задать ориентацию объекта, то есть задать углы ориентации объекта относительно осей системы координат. Сориентировать весь объект целиком можно при помощи платформенных команд ПОВЕРНИ, 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. Параметризация базовой точки «ручки» положения поворота

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

Чертеж с готовым объектом можно найти по ссылке.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

где:

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

По ссылке размещено видео, где показано создание объекта.

А по этой ссылке можно посмотреть чертеж с готовым объектом.

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

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

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

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

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

-27

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

-28

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

-29

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

-30

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

-31

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

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

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

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

Для наглядности, прикрепляем ссылку на видео, в котором это показано.

А это ссылка на чертеж с объектом.

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

Вывод формулы для косинусов соответствующих углов приведен по ссылке.

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

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

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

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

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

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

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

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

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

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

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

Далее дана ссылка на видео с демонстрацией.

А вот ссылка на чертеж с объектом.

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

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

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

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

-46

где:

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

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

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

-47

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

-48

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

-49

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

-50

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

-51

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

-52

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А здесь дана ссылка на чертеж с объектом.

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

По всем вопросам:

☎ 8 (800) 201-63-85
cad@maxsoft.ru