Нашел время и подготовил описание своих действий по созданию отвода.
Возьмем стандартный отвод(По формуле) и удалим в нем всю геометрию.
Не понятно опять же почему стандартные отводы сделаны из примитивов, к которым у нас нет доступа.
Удалим из него лишние параметры и добавим параметры из моего стандартного списка.
Переходим в редактор параметрического оборудования.
Создаем 3D примитив "Сектор тора прямоугольного сечения" и забиваем параметры.
Первый угол мы не трогаем. Оставляем там ноль.
Угол2
child.[Angle]
Это угол на который поворачивается отвод.
Высота
[PART_PIPE_RECT_DIMB]
Высота отвода. В наименовании отводов четко регламентируется какая сторона является высотой. Высота- та сторона, по которой изгибается отвод.
Радиус
[PART_VENT_RADIUS]
Радиус тора. Тут есть маленькая тонкость. Радиус тора и радиус отвода не совпадают.
Радиус тора считается от внутренней дуги, а радиус отвода по оси отвода.
Поэтому радиус тора мы приравниваем к промежуточному параметру.
Чуть позже свяжем эти два радиуса между собой.
Радиус2
Приравниваем его также к [PART_VENT_RADIUS].
Ширина
[PART_PIPE_RECT_DIMA]
Базовая точка. X координата.
-1*child.[L1]
X координату приравниваем к параметру "L1" объекта "Параметризация".
Долго гадал как системно высчитывается этот параметр и нашел:
L1=R*tg(α/2), Длина катета прямоугольного треугольника равна длине другого катета умноженного на тангенс прилегающего угла.
Зачем нам эта информация? А затем, что именно на эту длину смещается воздуховод от отвода и построение тора идет от этой точки:
Т.е. мы должны сместить свой тор именно на эту высоту.
Базовая точка. Y координата.
И все что написано выше правдиво для угла 90°.
Хочется передать привет человеку, кто писал инструкцию для отвода:
Для координаты Y формула будет такая:
[PART_PIPE_RECT_DIMA]/2+[PART_VENT_RADIUS]
На сколько сместить Тор по оси Y, чтобы центр тора совпал с центром вписанной окружности угла поворота.
Базовая точка. Z координата
-1*[PART_PIPE_RECT_DIMB]/2
Здесь все намного проще. Надо поднять на половину высоты.
Направление копируем с картинки, либо поворачиваем сами.
Первай деталь у нас готова. Теперь копируем этот ТОР и вычитаем из него предыдущий.
Параметры подкорректируем под нашу толщину стенки:
Высота
[PART_PIPE_RECT_DIMB]-[PART_VENT_THICKNESS]*2
Ширина
[PART_PIPE_RECT_DIMA]-[PART_VENT_THICKNESS]*2
Базовая точка. X координата
-1*child.[L1]+[PART_VENT_THICKNESS]/2
Базовая точка. Y координата
[PART_PIPE_RECT_DIMA]/2+[PART_VENT_RADIUS]-[PART_VENT_THICKNESS]
Базовая точка. Z координата
-1*[PART_PIPE_RECT_DIMB]/2+[PART_VENT_THICKNESS]
Все остальные параметры остаются без изменений.
Создаем круговой массив:
Вот этот элемент очень интересный. В круговом массиве отсутствует параметр радиуса. Как он понимает, что надо крутить именно по этой части для меня остается загадкой. И вычитаем его из объекта.
Корректируем параметры:
Угол:
180+child.[Angle]
Все остальные параметры копируем с картинки:
Далее создаем BOX и переносим его во внутрь кругового массива.
Этот бокс нужен, чтобы сделать полости в нашем отводе по краям.
Корректируем его парамметры:
Высота:
[PART_PIPE_RECT_DIMB]-[PART_VENT_THICKNESS]*2
Длина
[PART_VENT_LENGTH]+[PART_VENT_THICKNESS]*2
Ширина
[PART_PIPE_RECT_DIMA]-[PART_VENT_THICKNESS]*2
Базовая точка. X координата
-1*child.[L1]-[PART_VENT_LENGTH]-[PART_VENT_THICKNESS]
Базовая точка. Y координата.
-1*[PART_PIPE_RECT_DIMA]/2+[PART_VENT_THICKNESS]
Базовая точка. Z координата.
-1*[PART_PIPE_RECT_DIMB]/2+[PART_VENT_THICKNESS]
Направление:
Копируем второй такой круговой массив:
И корректируем в нем параметры BOXа, убирая толщину стенки.
Высота:
[PART_PIPE_RECT_DIMB]
Длина
[PART_VENT_LENGTH]
Ширина
[PART_PIPE_RECT_DIMA]
Базовая точка. X координата
-1*child.[L1]-[PART_VENT_LENGTH]
Базовая точка. Y координата.
-1*[PART_PIPE_RECT_DIMA]/2
Базовая точка. Z координата.
-1*[PART_PIPE_RECT_DIMB]/2
Копируем из воздуховода или заглушки наши фланцы и вставляем в круговой массив(второй).
Маленько подкорректируем состав, чтобы он выглядил так:
В группах LOD500 и LOD300 откорректируем параметр
Базовая точка. X координата:
-1*child.[L1]-[PART_VENT_LENGTH]-10.4
10.4 это расстояние для фланцев воздуховода.
На этом отвод у нас по сути закончен.
Проверим его в разных положениях:
Все получилось! Это было наверно одно из самых сложных в понимании семейств.
Теперь отредактируем теплоизоляцию.
Добавим сначало объекты из базы для первого и второго слоя изоляции.
Копируем теплоизоляцию(примитивы) из воздуховода и корректируем внутренности.
Скопируем ТОР и круговой массив из отвода в группу теплоизоляции, должно получиться вот так:
Сразу нажмем "Вычесть объект" и тору и круговому массиву.
Скопируем эти объекты еще раз, уберем с них вычитание, чтобы получилось вот так:
Начнем править параметры с тора(положительного):
Высота:
[PART_PIPE_RECT_DIMB]+[PART_INSULATION_THICKNESS]*2
Радиус и Радиус2
[PART_VENT_RADIUS]-[PART_INSULATION_THICKNESS]
Ширина:
[PART_PIPE_RECT_DIMA]+[PART_INSULATION_THICKNESS]*2
Базовая точка. Z координата
-1*[PART_PIPE_RECT_DIMB]/2-[PART_INSULATION_THICKNESS]
По сути мы добавили информацию о толщине в габариты.
Все остальные параметры не трогаем.
Дальше идем на BOX, который лежит в положительном круговом массиве.
Высота:
[PART_PIPE_RECT_DIMB]+[PART_INSULATION_THICKNESS]*2
Ширина:
[PART_PIPE_RECT_DIMA]+[PART_INSULATION_THICKNESS]*2
Базовая точка. Y координата:
-1*[PART_PIPE_RECT_DIMA]/2-[PART_INSULATION_THICKNESS]
Базовая точка. Z координата:
-1*[PART_PIPE_RECT_DIMB]/2-[PART_INSULATION_THICKNESS]
Все остальные параметры не трогаем. С первым слоем теплоизоляции закончили. Остальные детали трогать не надо. Они уже отлично выполняют свою работу.
Переходим ко второму слою изоляции.
Скопируем всю группу из первого слоя и поправим параметр видимости на второй слой.
Либо скопируем второй слой изоляции из воздуховода, удалим из него все примитивы и вставим из первого слоя.
Должно получиться точно также как и в первом слое:
Аналогично меняем параметры, только теперь добавляем вторую толщину слоя.
Начнем править параметры с тора(положительного):
Высота:
[PART_PIPE_RECT_DIMB]+[PART_INSULATION_THICKNESS]*2+[PART_INSULATION_THIKNESS_2]*2
Радиус и Радиус2
[PART_VENT_RADIUS]-[PART_INSULATION_THICKNESS]-[PART_INSULATION_THIKNESS_2]
Ширина:
[PART_PIPE_RECT_DIMA]+[PART_INSULATION_THICKNESS]*2+[PART_INSULATION_THIKNESS_2]*2
Базовая точка. Z координата
-1*[PART_PIPE_RECT_DIMB]/2-[PART_INSULATION_THICKNESS]-[PART_INSULATION_THIKNESS_2]
Все остальные параметры не трогаем.
Дальше идем на BOX, который лежит в положительном круговом массиве.
Высота:
[PART_PIPE_RECT_DIMB]+[PART_INSULATION_THICKNESS]*2+[PART_INSULATION_THIKNESS_2]*2
Ширина:
[PART_PIPE_RECT_DIMA]+[PART_INSULATION_THICKNESS]*2+[PART_INSULATION_THIKNESS_2]*2
Базовая точка. Y координата:
-1*[PART_PIPE_RECT_DIMA]/2-[PART_INSULATION_THICKNESS]-[PART_INSULATION_THIKNESS_2]
Базовая точка. Z координата:
-1*[PART_PIPE_RECT_DIMB]/2-[PART_INSULATION_THICKNESS]-[PART_INSULATION_THIKNESS_2]
С отрицательными примитивами есть два пути редактирования:
Либо во все параметры добавить толщину изоляции первого слоя
Либо скопировать примитивы из первого слоя. Это положительный тор и положительный круговой массив и сделать "Вычитание объекта". Этот вариант проще.
Копируем и вычитаем. Все просто:
Все готово:
Теперь осталось откорректировать параметры объекта.
Добавляем все параметры из моего списка. В нем я уже добавил несколько параметров, которые появились именно для отводов.
Остановлюсь только на некоторых параметрах.
Угол гиба воздуховода
if(child.[Angle]/15=int(child.[Angle]/15),child.[Angle], "Угол не является нормативным, привидите угол к кратном 15°")
Данный параметр служит для проверки угла и исключает ошибку проектировщика при трассировки на неправильный угол.
Площадь поверхности
var А:=pi*sqrt([PART_VENT_RADIUS]/1000+[PART_PIPE_RECT_DIMA]/1000)*[PART_VENT_ANGLE]/360; /*Площадь сектора круга R+ширина*/
var Б:=pi*sqrt([PART_VENT_RADIUS]/1000)*[PART_VENT_ANGLE]/360; /*Площадь сектора круга R*/
var В:=pi*[PART_VENT_RADIUS]/1000*[PART_VENT_ANGLE]/180; /*Длина малой дуги окружности*/
var Г:=В*[PART_PIPE_RECT_DIMB]/1000; /*Площадь внутренней поверхности отвода*/
var Д:=pi*([PART_VENT_RADIUS]/1000+[PART_PIPE_RECT_DIMA]/1000)*[PART_VENT_ANGLE]/180; /*Длина большой дуги окружности*/
var Е:=Д*[PART_PIPE_RECT_DIMB]/1000; /*Площадь внутренней поверхности отвода*/
var Ж:=([PART_PIPE_RECT_DIMA]/1000+[PART_PIPE_RECT_DIMB]/1000)*2*[PART_VENT_LENGTH]/1000; /*Площадь прямого участков отвода*/
format("%0.2f", ((А-Б)*2+Г+Е+Ж*2)*1.1)
Формула высчитывает все плоскости по отдельности.
Мой косяк с площадями продолжается. Ошибся в названии параметра угла отвода, должно быть PART_VENT_ANGLE, а не PART_PIPE_ELBOWANGLE. Все формулы заменил. Прихожу к мнению, что стандартную базу параметров надо чистить. Слишком много не нужных параметров. В Revit для этого выпустили файлик общих параметров к шаблонам документов и предложили пользователям использовать данные шаблоны.
Тип исполнения отвода
Прямоугольный с R
Обозначение (модель)
"Отвод-1-"&[PART_VENT_ANGLE]&"-"&[PART_PIPE_RECT_DIMA]&"х"&[PART_PIPE_RECT_DIMB]&"-"&[PART_VENT_RADIUS]&"-"&
[PART_VENT_LENGTH]&"-"&[PART_VENT_LENGTH]&"-ОЦ-"&[PART_VENT_THICKNESS]&
if((parent.[PART_PIPE_RECT_DIMA]+parent.[PART_PIPE_RECT_DIMB])>1000 and
((parent.[PART_PIPE_RECT_DIMA]>700) or (parent.[PART_PIPE_RECT_DIMB]>700)), "-Ш20.Ш20", "-Ш30.Ш30")
Я в своей работе использую каталог "Неватом", все обозначения взяты по нему.
Вес
format("%0.2f", (if([PART_VENT_THICKNESS]=0.5, [SURFACE_AREA]*3.94,
if([PART_VENT_THICKNESS]=0.7, [SURFACE_AREA]*5.5,
if([PART_VENT_THICKNESS]=0.9, [SURFACE_AREA]*7.06,
if([PART_VENT_THICKNESS]=1.2, [SURFACE_AREA]*9.4, 0)+0.005))))
)
Вес считается взависимости от материала. Масса материала за м2 меняется вручную.
Наименование
if([FIRST_LAYER_OF_INSULATION]="НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ"
or [SECOND_LAYER_OF_INSULATION]="НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ",
"НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ",
"Отвод прямоугольного сечения (Ширина х Высота) из оцинкованной стали по ГОСТ 14918-80, b="&[PART_VENT_THICKNESS]
&" мм.,угол "&[PART_VENT_ANGLE]&"°, с радиусом гиба "&[PART_VENT_RADIUS]&" мм.,c прямыми участками с обеих сторон l="&
[PART_VENT_LENGTH]&" мм.,с шинореечным соединением")
За время работы понял, что чем больше написано, тем меньше шансов на ошибку.
Наименование по ВР
"Монтаж отвода прямоугольного сечения из оцинкованной стали по ГОСТ 14918-80, b="&[PART_VENT_THICKNESS]
&" мм., сечением(Ширина х Высота) "&[PART_VENT_SECTION_LABEL]&" мм.,угол "&[PART_VENT_ANGLE]&
"°, с радиусом гиба "&[PART_VENT_RADIUS]&" мм.,c прямыми участками с обеих сторон l="&
[PART_VENT_LENGTH]&" мм., на отм. "&[MOUNTING_HEIGHT]&" м. от пола."
Все остальные параметры здесь логически ясные.
Переходим в объект "Параметризация"
H(L3) и Длина, L4(L4)
parent.[PART_VENT_LENGTH]+10.4
10.4 это величина требуемая для фланца. Это расстояние от примитива тора до начала воздуховода.
Начало L4Y
[L1]+parent.[PART_VENT_LENGTH]+10.4
РадиусГиба
[PART_PIPE_RECT_DIMA]/2+[PART_VENT_RADIUS]
Эта формула связывает наш "Радиус гиба отвода" с радиусом гиба системным.
В порт1 и порт2 мы приравниваем системные размеры к высоте и ширине отвода.
Все остальные объекты мы откорректируем по количеству для отвода.
Если копировали фланцы с заглушки, то просто умножаем все на 2 фланца.
Если копировали фланцы с воздуховода, то убираем из формулы расчет количества по длине и снова умножаем на 2 фланца.
Формулы изоляции добавлю в публикацию "Теплоизоляции".
Пришлось сильно все поправить от начального варианта.
Все отвод готов. Файлик складываю к себе в мини каталог на яндекс диске.