708x
001807
2020-09-01

[ZH] 常见问题 004688 | 如何通过 COM 接口修改有限元网格设置?

问题:
如何通过 COM 接口修改有限元网格设置?

答案:
在 IFeMeshSettings 接口中可以修改基本的有限元网格设置。 该接口位于 IModel > IModelData > ICalculation 下。 图 01 显示了可以更改/显示的单元。

这是一个有限元单元的目标长度设置为 100 mm 的代码示例。 此外,激活相同单元尺寸的杆件分段,并将最小分段设置为 3 个单元:

子 mesh_params()

Dim iApp As RFEM5.Application

' 获取模型数据接口
Dim iModel As RFEM5.model
Set iModel = GetObject(, "RFEM5.Model")

出错时转到 e

如果不是 iModel 那么

    ' 获取申请和加锁许可证接口
    设置 iApp = iModel.GetApplication()
    iApp.LockLicense

    ' 获取模型数据接口
    Dim iModdata As RFEM5.IModelData2
    设置 iModdata = iModel.GetModelData

    ' 获取计算接口
    Dim iCalc As RFEM5.ICalculation2
    设置 iCalc = iModel.GetCalculation()

    ' 获取网格设置接口
    Dim iMeshSet As RFEM5.IFeMeshSettings
    设置 iMeshSet = iCalc.GetFeMeshSettings

    ' 获取一般网格设置
    Dim meshGen As RFEM5.FeMeshGeneralSettings
    meshGen = iMeshSet.GetGeneral

    meshGen.ElementLength = 0.1

    ' 设置新的网格设置
    iModdata.PrepareModification
    iMeshSet.SetGeneral meshGen
    iModdata.FinishModification

    ' 获取网格杆件设置
    Dim meshMem As RFEM5.FeMeshMembersSettings
    meshMem = iMeshSet.GetMembers

    meshMem.DivideStraightMembers = True
    meshMem.ElementLength = 0.1
    meshMem.MinStraightMemberDivisions = 3

    ' 设置新的网格杆件
    iModdata.PrepareModification
    iMeshSet.SetMembers meshMem
    iModdata.FinishModification

    iApp.UnlockLicense
End If

e:  如果 Err.Number 0 则
    MsgBox Err.description, , Err.Source
    End If
    iApp.UnlockLicense
    设置 iApp = 无
    设置 iModel = 无

末端接头

该子程序还包含一个错误截取程序 (On Error GoTo e),并且与修改其他单元一样,需要 Prepare-/FinishModification 块。 这里块是通过 IFeMeshSettings 接口创建的。