2087x
001379
2016-12-20

VBA 中的 COM 接口 | 2.1 创建杆件

Im ersten Teil der Serie ging es um das Öffnen und Erstellen eines Modells in RFEM. Im zweiten Teil soll es am Beispiel eines Stabes um das Anlegen und Verändern von Elementen gehen. Die Elemente aus Teil 1 werden daher nicht erneut angesprochen.

基本

RFEM中的杆件由多个或多或少相互依赖的元素组成。 如果缺少这些元素之一,则无法创建杆件。 必须遵循以下结构。

为了能够创建这种类型的单元,您必须获得结构数据的接口:

'获取模型数据接口。
暗淡 iModelData As iModelData

设置 iModelData = iModel.GetModelData()

该接口允许您最终将数据传输到RFEM。

编辑模式

在RFEM中的数据被修改或创建后,必须切换到编辑模式。 例如,不能在该模式下进行任何计算,并且数据只能在退出该模式后才能使用。 必须使用PrepareModification()方法切换到编辑模式,使用FinishModification()退出编辑模式:

'将元素转移到编辑模式。
iModelData.PrepareModification
'...
iModelData.FinishModification

创建单元

其目的是创建从点P0(0,0,0)到点P1(1,0,0)截面为IPE 100和杆件S235的杆件。 首先,需要创建节点。 在下面的示例中,使用数组,因为它代表了进一步修改程序的最大灵活性:

'创建节点。
暗淡 nodeList(0 收件人 1)As RFEM5.Node
nodeList(0).RefObjectNo = 0
nodeList(0).No = 1
nodeList(0).X = 0#
nodeList(0).Y = 0#
nodeList(0).Z = 0#

nodeList(1).RefObjectNo = 0
nodeList(1).No = 2
nodeList(1).X = 1#
nodeList(1).Y = 0#
nodeList(1).Z = 0#

iModelData.PrepareModification
iModelData.SetNodes nodeList
iModelData.FinishModification

如上所述,包含节点数据的数组是使用 PrepareModification() 和 FinishModification() 方法进行传输的。 对于编号,重要的是: 当要传输的新构件包含参考编号时,现有的构件不被覆盖,但是将其添加到列表的末尾。 如果输入零,该元素将自动设置到下一个自由位置。

设置线的过程是相似的,但是区别是参照节点。 节点列表按照与RFEM中完全相同的形式传输:

'创建线。
暗淡 lineList(0 收件人 0) As RFEM5.Line
lineList(0).nodeList = “ 1,2”
lineList(0).Type = LineType.PolylineType

'将元素转移到编辑模式。
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

修改单元

要创建截面,首先要创建材料。 在新的RFEM模型中,首先使用先前创建的模型中的材料。 为了确保使用相关材料,您必须删除或更改所有现有材料。 最简单的方法是删除现有的材料并创建新的材料。 与创建新的单元不同,在删除或修改时必须激活各个单元的接口。 具体步骤如下:

'获取现有材料的数量。
暗淡 num 作为整数
num = iModelData.GetMaterialCount

'遍历现有材料。
iModelData.PrepareModification
暗淡 i作为整数
对于 i = 0 收件人 num-1
'获取材料的接口。
暗淡 iMat As RFEM5.IMererial
设置 iMat = iModelData.GetMaterial(i,AtIndex)
'删除材料。
iMat.Delete
下一个 i
iModelData.FinishModification

您可以通过相关的材料编号(AtNo)或通过所有材料列表中的索引获取材料的接口。 与物料编号相反,索引从零开始并且没有空隙。

完成杆件

删除所有材料后,您可以创建一个新的材料。 与在RFEM中一样,也可以使用名称直接从材料库中导入材料。 为此,使用TextID属性输入相应的字符串(更多详细信息请参见SDK中的RF-COM 5.chm):

'从材料库创建新材料。
暗淡 垫子(0 收件人 0) As RFEM5.Material
mats(0).TextID = “名称ID | Steel S 235 @ TypeID | STEEL @ StandardID | DIN EN 1993-1-1-10”
mats(0).No = 1

'将元素转移到编辑模式。
iModelData.PrepareModification
iModelData.SetMaterials垫
iModelData.FinishModification
截面的创建方法与材料相同。 此外,还指定了物料编号:
'从库中创建新的截面。
暗淡 crs(0 收件人 0) As RFEM5.CrossSection
crs(0).TextID = “ IPE 100”
crs(0).MaterialNo = 1
crs(0).No = 1

'将元素转移到编辑模式。
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification
由于该杆件的所有元素都已经创建,所以杆件现在可以被转移:
'创建新的杆件。
暗淡 内存(0 收件人 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

'将元素转移到编辑模式。
iModelData.PrepareModification
iModelData.SetMembers内存
iModelData.FinishModification

在杆件始端指定截面就足够了,与RFEM一样。 不需要创建杆端铰,

优化和成本/二氧化碳排放估算

到目前为止,已经针对每个元素分别检索了编辑模式。 为了提高数据处理的速度,可以在一个编辑模式下传送所有元素, 例外情况是删除材料和创建新的材料。 在这种情况下必须使用两个分开的块,因为在一个块中不能删除和创建单元:

'在编辑模式下删除元素。
iModelData.PrepareModification
暗淡 i作为整数
对于 i = 0 收件人 num-1
'获取材料的接口。
暗淡 iMat As RFEM5.IMererial
设置 iMat = iModelData.GetMaterial(i,AtIndex)
'删除材料。
iMat.Delete
下一个 i
iModelData.FinishModification

'将元素转移到编辑模式。
iModelData.PrepareModification

iModelData.SetNodes nodeList
iModelData.SetLines lineList
iModelData.SetMaterials垫
iModelData.SetCrossSections crs
iModelData.SetMembers内存

iModelData.FinishModification

总结和展望

本文介绍的步骤为所有可以通过COM提交的结构构件的基础。 非线性杆件释放或节点支座,包括附加嵌套,是异常情况。 这些元素将在本系列的后续文章中介绍。


作者

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

链接
下载