Нам пишут, есть ли в Robot 8 узловые конечные элементы для оболочек? Уважаемая редакция Robot & Хобот отвечает, что такие конечные элементы есть, но не для всех пользователей. Вы не найдете их через пользовательский интерфейс. Увидеть и использовать их можно только через API. Много лет назад разработчики убрали эти конечные элементы из диалоговых окон и оставили только по причине обратной совместимости. Сегодня мы научимся основам работы с API Robot на примере доставания из мрачных глубин 8 узловых конечных элементов и назначения их оболочкам.
Будем использовать встроенный в Microsoft Excel редактор VBA. Вызовем его из открытой книги Excel сочетанием клавиш Alt+F11, зайдем в Tools – References и добавим ссылку на библиотеку Robot Object Model:

Скопируйте текст программы в окно редактора, выберите в Robot оболочки и выполните команду Run.
Sub MeshParams()
Dim robApp As IRobotApplication
Set robApp = New RobotApplication
Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)
Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)
Dim obj As IRobotObjObject
For I = 1 To PanelCol.Count
Set obj = PanelCol.Get(I)
obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY
obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL
obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False
obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 1
obj.Mesh.Generate
Next I
Set objParams = Nothing
Set robApp = Nothing
End Sub
Представленный макрос очень сырой, не содержит проверок, обработчика ошибок и пользовательского интерфейса, но он позволяет очень быстро получить желаемый результат.Давайте разберем, что происходит при исполнении данного макроса.
Получаем все выбранные нами оболочки в Robot:
Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)
Даже если мы в модели размашисто выделим рамкой и зацепим стержни с узлами, все равно выбор сработает корректно, т.к. используется I_OT_PANEL.
Создаем коллекцию из выбранных оболочек:
Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)
Это нам необходимо, чтобы автоматически получить количество выбранных оболочек для запуска цикла перебора:
For I = 1 To PanelCol.Count
В этом цикле макрос обрабатывает каждую выбранную оболочку по очереди. Получаем i-ую оболочку и начинаем назначать ей свойства.
Set obj = PanelCol.Get(I)
Практически все свойства, доступные через пользовательский интерфейс, можно назначить через API:

В этом макросе мы назначаем только необходимые параметры, без которых не получится извлечь из темного угла 8 узловые элементы.
Назначаем метод Делоне. При желании можно использовать и метод Кунса (I_MMT_COONS)
obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY
Выбираем нужный тип конечных элементов:
obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL
Снимаем флажок Регулярная сетка:
obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False
Устанавливаем размер конечного элемента в метрах:
obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 0.5
Создаем сетку:
obj.Mesh.Generate
В принципе эту команду можно и не выполнять и создать сетку для всех оболочек в Robot нажав кнопочку. Для этого перед в начале отроки попробуйте добавить символ ‘ .
Результат макроса:

Как видим, API это не страшно и даже очень полезно.
Будем использовать встроенный в Microsoft Excel редактор VBA. Вызовем его из открытой книги Excel сочетанием клавиш Alt+F11, зайдем в Tools – References и добавим ссылку на библиотеку Robot Object Model:

Скопируйте текст программы в окно редактора, выберите в Robot оболочки и выполните команду Run.
Sub MeshParams()
Dim robApp As IRobotApplication
Set robApp = New RobotApplication
Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)
Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)
Dim obj As IRobotObjObject
For I = 1 To PanelCol.Count
Set obj = PanelCol.Get(I)
obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY
obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL
obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False
obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 1
obj.Mesh.Generate
Next I
Set objParams = Nothing
Set robApp = Nothing
End Sub
Представленный макрос очень сырой, не содержит проверок, обработчика ошибок и пользовательского интерфейса, но он позволяет очень быстро получить желаемый результат.Давайте разберем, что происходит при исполнении данного макроса.
Получаем все выбранные нами оболочки в Robot:
Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)
Даже если мы в модели размашисто выделим рамкой и зацепим стержни с узлами, все равно выбор сработает корректно, т.к. используется I_OT_PANEL.
Создаем коллекцию из выбранных оболочек:
Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)
Это нам необходимо, чтобы автоматически получить количество выбранных оболочек для запуска цикла перебора:
For I = 1 To PanelCol.Count
В этом цикле макрос обрабатывает каждую выбранную оболочку по очереди. Получаем i-ую оболочку и начинаем назначать ей свойства.
Set obj = PanelCol.Get(I)
Практически все свойства, доступные через пользовательский интерфейс, можно назначить через API:

В этом макросе мы назначаем только необходимые параметры, без которых не получится извлечь из темного угла 8 узловые элементы.
Назначаем метод Делоне. При желании можно использовать и метод Кунса (I_MMT_COONS)
obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY
Выбираем нужный тип конечных элементов:
obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL
Снимаем флажок Регулярная сетка:
obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False
Устанавливаем размер конечного элемента в метрах:
obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 0.5
Создаем сетку:
obj.Mesh.Generate
В принципе эту команду можно и не выполнять и создать сетку для всех оболочек в Robot нажав кнопочку. Для этого перед в начале отроки попробуйте добавить символ ‘ .
Результат макроса:

Как видим, API это не страшно и даже очень полезно.
Уважаемая редакция Robot & Хобот! Большое спасибо за полезную информацию. Осталось разобраться, что же такое API? С чего нужно начать, с VBA?
ОтветитьУдалитьRomanich, а с помощью API можно упростить/оптимизировать/ускорить армирование балок и колонн?
Мне кажется, что использование VBA самый легкий и быстрый путь. Если знаете C#, C++ и т.д. можно их использовать. А что именно вы хотите с армированием балок и колонн сделать?
УдалитьRomanich, хотелось бы быстро менять настройки, например, количество вертикальных рядов араматуры, горизонтальных рядов, упростить расстановку поперечной арматуры - иногда приходится вручную копировать в эксель, что бы правильно посчитать расстановку. В роботе, примерно 80 процентов настроек по армированию балок не трогаю, а вот к 20 процентам хотелось бы иметь быстрый доступ. Работаю по нормам BAEL.
УдалитьНасколько я помню, нет возможности залезть через API в фактическое армирование.
УдалитьРоманыч, я наверное путаю красное с горячим. Я хотел бы иметь более быстрый доступ к настройкам, в виде, возможно, панели инструментов, с возможностью галками быстро выбрать нужную комбинацию.
УдалитьДля тех у кого от слов VBA, C#, C++ и т.д. волосы на голове дыбом встают, так же как у меня, есть штатный инструмент Revit который позволяет перегнать подобранную арматуру для балок и колонн из ROBOT.
ОтветитьУдалитьОстанется только проставить выноски, образмерить и закомпоновать все на лист.
P.S. ну разве это не круто ???
Зачем нам 8 узловой конечный элемент?
ОтветитьУдалитьНам он совершенно не нужен :)
УдалитьЕсли следовать теории МКЭ, то в 4х узловом пластинчато-оболочечном конечном элементе, перемещения меняются линейно от узла к узлу в рамках элемента, а напряжения (суть - первая производная от перемещений помноженная на модуль упругости) являются константными. Узловые значения напряжений получаются путем осреднения значений элементов которым принадлежит узел.
УдалитьПри 8 узловом элементе перемещения меняются по квадратичному закону по элементу, а напряжения, соответственно, по линейному. Что приводит к более точному (в теории) распределению напряженно деформированного состояния.
Кроме того 8 узловые элементы более точно описывают криволинейные поверхности. Если эти поверхности сферические, конические или цилиндрические - то вообще без искажений. Для сложных сплайновых поверхностей - искажения описания формы существенно меньше (особенно при мелких сетках) чем для обычного линейного (4х узлового).
А вот нужно ли строителям-проектировщикам это не в теории, а на практике. Тут уже ответил Romanich
Давеча пробовал узнать через API расчетную длину стального элемента - так и не нашел способ.
ОтветитьУдалитьP.S. Есть еще проблема с автоматической расчетной длинной - если рама стоит на фундаменте (оболочки), а не на опоре, то длина считается неправильно. Добавление пружинной опоры малой жесткости помогает, но только не для норм СНиП.
Киньте тестовую модельку.
Удалитьhttps://www.dropbox.com/s/99slu9qrdoiz2oj/ABL_diff_supports.rtd?dl=0
УдалитьПри переключении на нормы еврокода расчетные длины считаються корректно.
Пару лет назад писал в ветке по Robot на Autodesk Discussion об этом. По Eurocode тоже пишет об ошибке: Ошибка при расчете расчетной длины (ось Y) для элементов ' 5 7 21 22 '. Принимается значение 1.0
УдалитьПо СНиП принимается 100 )))
Напишите о работе в UAE. Простому нашему инженеру реально там работать? Какие стоят задачи перед инженерами? Как выдают задания? Большое спасибо. Очень интересно.
ОтветитьУдалитьThermoplastics like styrene and polycarbonate can withstand warm or even hot conditions—but at sure temperatures they'll eventually soften once more, and thus are in a position to} be recycled. The world COVID-19 pandemic has led to a sudden pause to manufacturing activities across the globe, affecting the demand for plastics and in addition manufacturing & processing Bluetooth Motorcycle Headset of them. The most critically impacted end-use segments of the plastics trade include automotive & transportation, shopper items, industrial equipment, construction, and electronics. The world injection molded plastics market is expected to grow at a compound annual progress rate of four.2% from 2022 to 2030 to succeed in USD 423.7 billion by 2030.
ОтветитьУдалить