В статье 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": "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 и ознакомившись с документацией.
Glabec_P_A
А как же решить проблему с тем что в стенах шаг армирования может быть разный?
Rengabim Автор
Если Вы имеете в виду зоны переменного шага, то функция для их формирования появится в следующих версиях STDL.
Glabec_P_A
То есть если в стене будет 10 участков то это нужно будет создавать 10 параметров с шагом?
Rengabim Автор
Наверное, это уже будет зависеть от ТЗ и автора шаблона, сколько параметров надо будет
equity_fa
Интересное замечание, можно поинтересоваться? В какой программе реализовано удобнее?