Разберём создание шаблона стиля армирования — Две арматурные сетки с выпусками.
Техническое задание
Перед созданием шаблона стиля рассмотрим техническое задание, по которому составим файл параметров в формате JSON и напишем скрипт на языке Lua.

| Группа/Параметр | Описание | Тип параметра | Значение по умолчанию | Минимальное | Максимальное |
| ClearCover | Защитный слой | | | | |
| ClearCoverInner | Внутренний | Length | 20 | 0 | 100 |
| ClearCoverOuter | Наружный | Length | 20 | 0 | 100 |
| ClearCoverLeft | Слева | Length | 20 | 0 | 100 |
| ClearCoverRight | Справа | Length | 20 | 0 | 100 |
| ClearCoverTop | Сверху | Length | 20 | 0 | 100 |
| ClearCoverBottom | Снизу | Length | 20 | 0 | 100 |
| ClearCoverOpenings | Для окон и дверей | Length | 25 | 0 | 100 |
| LongitudinalRebar | Продольный стержень | | | | |
| RebarStyleId | Стиль | Id | | | |
| Step | Шаг | Length | 300 | 50 | 500 |
| TransverseRebar | Поперечный стержень | | | | |
| RebarStyleId | Стиль | Id | | | |
| Step | Шаг | Length | 300 | 50 | 500 |
| Overhang | Выпуски | | | | |
| UseHook | Использовать крюк | Boolean | true | | |
| TopOverhang1 | Верхний выпуск 1 | Length | 300 | 0 | 1000 |
| TopOverhang2 | Верхний выпуск 2 | Length | 600 | 0 | 1000 |
| HookLength | Длина крюка | Length | 150 | 0 | 500 |
| CShapedFixator | С-образный хомут | | | | |
| RebarStyleId | Стиль хомута | Id | | | |
| LegLength | Длина ножки | Length | 15 | 0 | 100 |
| HorizontalStep | Шаг по горизонтали (ячейки) | Length | 2 | 1 | 10 |
| VerticalStep | Шаг по вертикали (ячейки) | Length | 2 | 1 | 10 |
| UseChessOrder | Шахматный порядок | Boolean | false | | |
Описание параметров
По техническому заданию составляем файл параметров согласно структуре, описанной в разделе Шаблоны стилей армирования.
Результат смотрите в файле описания параметров.
Скрипт
Настройка отображения параметров в редакторе стилей армирования
Для управления параметрами стиля армирования используем SetStyleParameterStates(). В эту функцию передается экземпляр класса ParameterContainer(), с помощью которого скрываем или показываем параметр HookLength в зависимости от значения параметра UseHook.
function SetStyleParameterStates(parameters)
local values = parameters:GetParameterValues()
-- Показывать или скрывать HookLength в зависимости от значения UseHook.
parameters:GetParameter("Overhang", "HookLength"):SetVisible(values.Overhang.UseHook)
end
Создание армирования
Сетка должна состоять из ряда продольных стержней и ряда поперечных стержней, для каждого из которых пользователь будет задавать стиль армирования и шаг. Создадим функцию, которую будем применять для рядов:
function rebarRowParameters(group)
local rebarStyleId = group.RebarStyleId
end
Раскладка арматурных стержней с защитой граней.
Определения RebarRowEdgeProtectionLayout.h:16
Параметры ряда арматурных стержней.
Определения RebarRowParameters.h:23
Поперечные стержни должны быть с выпусками наверх, с возможностью указания их длины и опцией использования крюка. Создадим функцию для указания правил выпусков с помощью конструктора RebarOverhangParameters:
function createOverhangRules(styleParameters, hookAngle)
local overhangValues = {
styleParameters.Overhang.TopOverhang1,
styleParameters.Overhang.TopOverhang2
}
-- Если пользователь будет использовать крюк
if styleParameters.Overhang.UseHook then
math.pi,
styleParameters.Overhang.HookLength,
hookAngle
)
else
-- Если пользователь не будет создавать крюк
end
end
WallSide
Сторона стены.
Определения ObjectSide.h:21
Выбирает грани объекта, соответствующие указанной стороне.
Определения FaceSelector.h:49
Параметры отгиба арматурного стержня.
Определения RebarHookParameters.h:19
Параметры выпуска арматурного стержня.
Определения RebarOverhangParameters.h:18
С помощью структуры DoubleReinforcingMeshParameters указываем параметры создания двух арматурных сеток:
function meshParameters(styleParameters)
local longitudinalParams = rebarRowParameters(styleParameters.LongitudinalRebar)
-- Передняя сетка (внутренняя, угол поворота крюка вокруг оси стержня 180°)
local transFront = rebarRowParameters(styleParameters.TransverseRebar)
transFront.OverhangRules = createOverhangRules(styleParameters, math.pi)
-- Задняя сетка (наружная, угол поворота крюка вокруг оси стержня 0°)
local transBack = rebarRowParameters(styleParameters.TransverseRebar)
transBack.OverhangRules = createOverhangRules(styleParameters, 0)
-- Сетки
-- C-образный хомут (длина = 1 для авто-подстройки)
styleParameters.CShapedFixator.RebarStyleId,
1,
styleParameters.CShapedFixator.LegLength
)
-- Раскладка фиксаторов арматуры сетки с указанием количества пройденных ячеек между элементами.
styleParameters.CShapedFixator.HorizontalStep,
styleParameters.CShapedFixator.VerticalStep
)
-- Если шахматный порядок включен, то учитывается смещение рядов фиксаторов арматуры.
if styleParameters.CShapedFixator.UseChessOrder then
layout.Displacements = {1, 0}
end
-- Фиксаторы
-- Две сетки с фиксаторами
return doubleMesh
end
Параметры C-образной арматурной детали.
Определения CShapedRebarParameters.h:21
Параметры создания двух арматурных сеток. Передняя и задняя сетки определяются по направлению взгляда...
Определения DoubleReinforcingMeshParameters.h:29
ReinforcingMeshSupportsParameters Supports
Параметры фиксаторов арматуры сетки.
Определения DoubleReinforcingMeshParameters.h:48
Параметры сетки арматурных стержней.
Определения ReinforcingMeshParameters.h:22
Раскладка фиксаторов арматуры сетки с указанием количества пройденных ячеек между элементами.
Определения ReinforcingMeshSupportsCellLayout.h:30
Параметры фиксаторов арматурной сетки. Для фиксации вертикальных сеток между собой используются C-обр...
Определения ReinforcingMeshSupportsParameters.h:29
С помощью функции CreateObjectReinforcement() создаём в объекте армирование с учетом защитных слоёв.
function CreateObjectReinforcement(object, styleParameters)
-- Защитные слои
local clearCoverRules = {
-- Защитные слои для окон и дверей
}
object,
clearCoverRules,
meshParameters(styleParameters)
)
end
ReinforcementContainer CreateDoubleReinforcingMeshInBaseLayer(Entity object, table clearCoverRules, DoubleReinforcingMeshParameters meshParameters, EdgeReinforcementParameters oEdgeReinfParameters)
Создает двойную арматурную сетку в слое основы объекта. На текущий момент поддерживаются Стены и Пере...
ModelObjectType
Типы объектов.
Определения ModelObjectType.h:29
Выбирает грани объекта, которые образованы при пересечении с другим объектом.
Определения FaceSelector.h:21
Полный пример шаблона стиля смотрите по ссылке.