1547x
001459
2017-06-29

VBA中的COM接口| 4.1框架优化

本系列文章的第 4.1 和 4.2 节介绍了使用附加模块 RF-/STEEL EC3 对框架进行优化。 Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Auf die Elemente, welche in vorangegangenen Teilen bereits erläutert wurden, wird nicht nochmal eingegangen.

筛选相关杆件

目的是将特定截面的杆件传递到 RF-/STEEL EC3 设计中。 在下面的示例中,应筛选所有截面为 IPE 300 的杆件。 为此,必须首先从主程序中获取所有截面:


'   创建所需截面的串
变暗 crsc_desc作为字符串

crsc_desc =“IPE 300”

' 从 RFEM 获取所有截面
变暗 crscs()As RFEM5. 截面
crscs = iModelData.GetCrossSections

' 循环所有截面
变暗 crsc_no只要
crsc_no = -1
变暗 i只要
关于技术提问和解答: i = 0收件人 UBound(crscs, 1)
' 如果截面描述正确,保存截面编号
If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0然后
crsc_no = crscs(i).No
退出
End If
更多 i

' 如果没有找到,则退出程序
If crsc_no = -1然后
第513话 "获取截面编号","没有截面 "" " & crsc_desc &” 在其描述中找到了“ ”!
End If

截面描述应尽可能同步。 为此,首先通过 "LCase" 将截面描述和要搜索的字符串设置为小写字母,然后在截面描述中搜索该字符串。 如果没有找到合适的截面,截面编号保持在 -1,然后可以通过中止请求和确认。

在这一步之后截面编号就已知了,并且可以搜索具有该截面编号的杆件。 只应采用杆件始端和末端具有该截面的杆件:

' 为成员列表创建字符串并将其设置为零
变暗 mems_str作为字符串
mems_str = vbanullstr

' 从 RFEM 获取所有杆件
变暗 内存()As RFEM5.Member
mems = iModelData.GetMembers

' 循环所有杆件
关于技术提问和解答: i = 0收件人 UBound(mems, 1)
' 如果杆件的始端和末端都有这个截面编号,
' 然后在字符串中输入这个数字
If mems(i).EndCrossSectionNo = crsc_no然后
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNo然后
mems_str = mems_str & mems(i).No & ","
End If
End If
更多 i

' 如果没有找到成员,则退出程序
If mems_str = vbanullstr然后
第514话 “获取成员”,没有截面为“”的杆件 & crsc_desc &” ”找到了!
End If

获取附加模块接口

到模块的链接与到 RFEM 或 RSTAB 的链接完全相同。 唯一的区别是打开一个已经打开的实例和打开一个新的实例没有区别,因为总是有一个已经打开的实例:

' 获取模块接口
变暗 iStec3As STEEL_EC3.Module
iStec3 = iModel.GetModule("STEEL_EC3")

接下来,删除所有现有的模块案例:

' 获取现有模块案例的数目
变暗 数数只要
计数 = iStec3.moGetCaseCount

' 如果有的话,删除表格中的第一个
If 计数 > 0然后
关于技术提问和解答: i = 0收件人 数 - 1
iStec3.moDeleteCase i,AT_INDEX
更多 i
End If

现在,您可以创建所需的工况,并使用之前创建的字符串输入要设计的杆件。

' 创建'优化'模块案例
变暗 iStec3CaseAs STEEL_EC3.ICase
iStec3Case = iStec3.moSetCase(1,“优化”)

' 设计用集杆件
iStec3Case.moSetMemberList mems_str

最后,您可以输入所需的荷载组合:

' 设置荷载组合
变暗 iStec3_uls_loads(0)收件人 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads(0).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(0).No = 1
iStec3_uls_loads(0).Type = ILOAD_GROUP

iStec3_uls_loads(1).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(1).No = 2
iStec3_uls_loads(1).Type = ILOAD_GROUP

iStec3_uls_loads(2).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(2).No = 3
iStec3_uls_loads(2).Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

总结和展望

所有COM 可以控制的模块都可以使用本文中介绍的方法进行介绍。 提供的源代码和 Excel 文件可以帮助您更好地理解该主题。 在我的下一篇文章中,我想更深入地讨论这个问题,并解释模块中和主程序中的元素之间的联系。


作者

Günthel 先生为Dlubal 软件客户提供技术支持。

链接
下载