1021x
001571
2020-07-20

[EN] KB 001639 | Трансформация ребра в плоскостную модель с результирующим стержнем посредством VBA

Тема:
Трансформация ребра в плоскостную модель с результирующим стержнем посредством VBA

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

Легенда:
Поскольку моделирование ребра, выступающего в качестве поверхности с результирующим стержнем значительно сложнее, чем обычное создание стержня типа ребро, была для преобразования ребra в модель поверхности с результирующим стержнем создана в EXCEL-VBA следующая программа.

Чтобы преобразовать ребро в поверхностную модель, необходимо выполнить следующие шаги:

1.
Считывание параметров ребра (сечение, ориентация и т.д.)
2.
Создание поверхности ребра
3.
создать результирующую балку
4.
Удаление ребра в виде стержня

Далее мы покажем в качестве примера фрагменты всего исходного кода. Полный код программы можно скачать в конце данной статьи.

Считывание параметров ребра

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

' get interface of active model
Set iMod = iApp.GetActiveModel

' get interface of (structural) model data
Dim iModData As RFEM5.IModelData2
Set iModData = iMod.GetModelData

' get selected member
iModData.EnableSelections True

Dim mems() As RFEM5.Member
Dim selMem As RFEM5.Member
mems = iModData.GetMembers
selMem = mems (0)

iModData.EnableSelections False

Для моделирования ребра требуются следующие параметры:

Сечение ребра, номера поверхностей и полезная ширина
Ориентация ребра
Материал ребра

В программе RFEM ребро является типом стержня. В случае программирования через интерфейс COM это означает, что данные ребра необходимо получить через два различных интерфейса. Во-первых это интерфейс для стержня, а во-вторых - интерфейс для ребра. Интерфейс ребра можно получить через IModelData.GetRib. GetRib ожидает номер ребра, содержащийся в стержне посредством Member.RibNo.

' get parameters of rib
' #####################
Dim iRb As RFEM5.IRib
Set iRb = iModData.GetRib(selMem.RibNo, AtNo)

Dim selRb As RFEM5.Rib
selRb = iRb.GetData

Dim rbCrsc As RFEM5.RibCrossSection
rbCrsc = iRb.GetRibCrossSection

Интерфейс ребра затем предложит два различных элемента: общие данные ребра через структуру Rib и данные сечения ребра через RibCrossSection. Rib содержит номера поверхностей, расположение ребра и полезные ширины. RibCrossSection содержит описание и размеры внутреннего сечения ребра, которое также используется в RF-CONCRETE Members (ITCU).

Кроме того, требуется ориентация, которая определяется местной системой координат стержня. Доступ к системе координат осуществляется через интерфейс стержня. Функция IMemer.GetLocalCoordinateSystem возвращает структуру CoordinateSystem.

Dim cosy As RFEM5.CoordinateSystem
cosy = iModData.GetMember(selMem.no, AtNo).GetLocalCoordinateSystem(0#).GetData

GetLocalCoordinateSystem все еще ожидает ввода x-расположения на стержне, которое было задано на 0,0 или его начало. В дополнение к упомянутым параметрам также требуется материал стержня, который можно получить из поперечного сечения стержня.

Dim selCrsc As RFEM5.CrossSection
selCrsc = iModData.GetCrossSection(selMem.StartCrossSectionNo,AtNo).GetData

Создание поверхности ребра

Вначале программа предназначена только для прямых ребер на положительной стороне z. Поскольку ребро также может быть расположено в наклонной плоскости, необходимо создать поверхность с помощью ориентации стержня. Переменная cosy местной системы координат стержня включает в себя направляющий вектор для местной оси z - cosy.AxisZ, с соответствующими тремя значениями x, y и z. Этот вектор нормализирован таким образом, что при его умножении на высоту ребра показывает расстояние и направление нижней кромки ребра. Для граничных линий поверхности ребра данный вектор умножается на высоту ребра и прибавляется к начальному и конечному узлу. Таким образом мы получим два конечных узла нижней кромки поверхности ребра. Обратите внимание на то, что высота ребра также включает половину толщины поверхности полезной ширины. Для упрощения используется только толщина поверхности на первой стороне (-y в местной системе координат) из сечения ребра (UpperLeftFlangeThickness). После того, как будут доступны узлы, можно создать границы...