В статье Renga STDL: краткий обзор языка для расширения функциональности программы Renga мы рассказывали, что такое Renga STDL, как и почему разработчики САПР создали свой предметно-ориентированный язык. Там же мы писали о планах расширения применения этого языка для стилей армирования. Сегодня поделимся результатами, которых удалось достичь в этом направлении.
Стили армирования в Renga нужны для автоматизации армирования монолитных конструкций: стен, колонн, перекрытий, фундаментов, а также усиления стен и перекрытий в местах расположения проемов. В стилях армирования пользователь, задавая параметры, получает сетки, каркасы и арматурные стержни, созданные в объекте.

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

Как и инженерное оборудование, о котором шла речь в предыдущей статье, стили армирования изначально были встроены в систему, на состав их параметров пользователь повлиять не мог. И хотя они и закрывали значительную часть задач конструкторов, достичь полной автоматизации с их помощью нельзя. Вариантов армирования такое множество, что предусмотреть их все в поставке системы невозможно.
После выпуска первой версии Renga STDL, мы убедились в том, что можно расширить STDL API так, чтобы пользователи смогли самостоятельно автоматизировать создание арматуры при проектировании монолитных конструкций в Renga.
В Renga STDL 4.0 можно создавать шаблоны стилей армирования для стен, перекрытий и столбчатых фундаментов.
Чтобы добавить в Renga новый шаблон стиля армирования нужно:
описать параметры армирования в JSON-файле;
описать армирования с помощью функций создания армирования Style Template API и создать армирование объекта;
с помощью специального инструмента сборки RST за несколько секунд получить файл шаблона стиля;
импортировать шаблон стиля армирования в Renga Professional.
При проектировании API мы ориентировались на многообразие задач, с которым сталкиваются пользователи Renga, поступившие предложения и наше понимание того, как должно развиваться армирование. Мы постарались найти уровень абстракций одновременно и близкий к предметной области, и обладающий достаточным уровнем гибкости для комбинирования и расширения введенных понятий в будущем.
На данный момент с помощью STDL доступно:
Создание арматурных сеток с различными параметрами раскладки
Армирование конструкций одной или двумя сетками с возможностью настройки параметров
Управление защитными слоями для разных граней объекта
Настройка выпусков и отгибов арматурных стержней
Рассмотрим простой пример. В нем вы найдете настройки для защитного слоя, основной арматуры, усиления торцов (п-шек) и фиксаторов (лягушек) и всего 48 строк кода на Lua, вместе с комментариями.
Описание параметров армирования в JSON:
{
"metadata": {
"defaultName": "Армирование перекрытия из шаблона",
"description": "Армирование перекрытия с лягушками и пэшками",
"version": "1.0.0",
"author": "Renga Software"
},
"styleParameters": [
{
"name": "General",
"text": "Общий",
"params": [
{
"name": "DefaultClearCover",
"text": "Защитный слой",
"type": "Length",
"default": 25,
"min": 0,
"max": 10000
}
]
},
{
"name": "Rebar",
"text": "Арматурные стержни сеток",
"params": [
{
"name": "RebarStyleId",
"text": "Стиль арматурного стержня",
"type": "Id",
"entityTypeId": "608edb78-96f3-40a6-a0ec-71000105581b"
},
{
"name": "Step",
"text": "Шаг раскладки стержней",
"type": "Length",
"default": 300,
"min": 10,
"max": 1000
}
]
},
{
"name": "EdgeReinforcement",
"text": "Усиление торцов",
"params": [
{
"name": "EdgeRebarStyleId",
"text": "Стиль арматурного стержня",
"type": "Id",
"entityTypeId": "608edb78-96f3-40a6-a0ec-71000105581b"
},
{
"name": "LegLength",
"text": "Длина ножки",
"type": "Length",
"default": 200,
"min": 50,
"max": 500
},
{
"name": "EdgeStep",
"text": "Шаг раскладки стержней для усиления торцов",
"type": "Length",
"default": 300,
"min": 100,
"max": 1000
}
]
},
{
"name": "MeshSupports",
"text": "Фиксаторы",
"params": [
{
"name": "SupportsRebarStyleId",
"text": "Стиль арматурного стержня",
"type": "Id",
"entityTypeId": "608edb78-96f3-40a6-a0ec-71000105581b"
},
{
"name": "BaseLength",
"text": "Длина основания",
"type": "Length",
"default": 300,
"min": 50,
"max": 600
},
{
"name": "LegLength",
"text": "Длина ножки",
"type": "Length",
"default": 100,
"min": 20,
"max": 300
},
{
"name": "Step",
"text": "Шаг раскладки фиксаторов",
"type": "Length",
"default": 600,
"min": 200,
"max": 2000
}
]
}
]
}Из этого JSON-а получится вот такой диалог в Renga:

Описываем армирование в Lua-скрипте со структурой, придерживаясь структуры, описанной в справке Renga STDL:
function SetStyleParameterStates(parameters)
local values = parameters:GetParameterValues()
end
function rebarRowParameters(group)
-- Rebar row parameters: rebar style + edge protection layout
local rebarStyleId = group.RebarStyleId
local layout = RebarRowEdgeProtectionLayout(group.Step)
return RebarRowParameters(rebarStyleId, layout)
end
function meshParameters(styleParameters)
-- Две одинаковые сетки
local params = rebarRowParameters(styleParameters.Rebar)
local mesh = ReinforcingMeshParameters(params, params)
return DoubleReinforcingMeshParameters(mesh, mesh)
end
function createSupports(styleParameters)
-- Фиксаторы
local chairParams = RebarChairParameters(styleParameters.MeshSupports.SupportsRebarStyleId,
styleParameters.MeshSupports.BaseLength, styleParameters.MeshSupports.LegLength, 1)
-- Раскладка фиксаторов
local supportsLayout = ReinforcingMeshSupportsDistanceLayout(styleParameters.MeshSupports.Step,
styleParameters.MeshSupports.Step)
return ReinforcingMeshSupportsParameters(chairParams, supportsLayout)
end
function createEdgeReinforcement(styleParameters)
-- Усиление торцов перекрытия
local layout = EdgeReinforcementCenteredLayout(styleParameters.EdgeReinforcement.EdgeStep)
local selectors = {ObjectSideSelector(FloorSide.Side)}
local uShaped = UShapedRebarParameters(styleParameters.EdgeReinforcement.EdgeRebarStyleId, 1,
styleParameters.EdgeReinforcement.LegLength, styleParameters.EdgeReinforcement.LegLength)
return EdgeReinforcementParameters(uShaped, layout, selectors)
end
-- Создание арматурных сеток в объекте
function CreateObjectReinforcement(object, styleParameters)
local meshParams = meshParameters(styleParameters)
meshParams.Supports = createSupports(styleParameters)
return CreateDoubleReinforcingMeshInBaseLayer(object, {}, meshParams, createEdgeReinforcement(styleParameters))
endСобрав шаблон стиля армирования и импортировав его в Renga Professional, создаём стиль перекрытия и получаем армирование в несколько кликов.

Style Template API позволяет создать армирование с гораздо большим количеством настроек, чем показано выше. Это также продемонстрировано в примерах, которые вы найдете в Renga STDL SDK или на GitHub.
Оценить широту возможностей можно, скачав Renga Professional, Renga STDL SDK и ознакомившись с документацией.























