使用COM接口进行跨模型更新和调整数据

  • 专题报告

技术文章

This article was translated by Google Translator

View original text

对于某些结构,必须按照不同的配置进行设计。 有可能必须对高空作业平台在地面上的位置,以及在中间和伸出的位置进行分析。 由于这样的工作需要创建多个模型,而这些模型几乎是相同的,因此缓解所有模型的负担。

下面,我们假设您已经熟悉了COM接口。 这些链接提供了关于编程基础的文章。

任务

程序会自动调整结构的任何数据,例如节点,线,杆件等。 例如应该将节点1的坐标从一个主模型传递到各种辅助模型和变量。 但是,不是所有的值都应该被传递,而是用户预先自由定义的那些值只能被传递。

示例

并以一个示例的程序为例,建立了一个高空工作平台。 下面的模型被认为是主模型。

该平台未参数化设置,共有以下三种类型: 全张拉在地面和中间位置 主体模型定义为完全展开类型,中间模型定义为类型1,地面模型定义为类型2。

考虑因素

为了达到上述目的,模型之间可以相互对比,或者可以通过图形用户界面来定义。

为了定义节点的自由或可变坐标,必须使用相应单元的注释功能。 程序在注释中查找特定的字符串,如果找到,将修改或保留相应的坐标。 此外,在所有子模型中都可以自动创建新的单元的情况。 因此结构的设定,就是用户在RFEM中激活所需的模型(在后台编辑),然后程序打开所需的模型,并与主模型进行比较。

图形用户界面

我们选择了下面的图形用户界面进行设计。

用户可以在输入栏中输入路径,也可以通过复制粘贴方式插入。 通过“添加新模型”可以将其添加到要调整的模型列表中。 使用“删除所选模型”按钮可以删除列表中所选的模型。 然后点击“修改模型”,启动程序。

基本程序流程

刚开始时,程序只包含了辅助模型和变量的路径,并且首先需要与RFEM连接。 如果与RFEM的连接建立,则应在辅助模型上进行计算。 因为在程序中还应该创建单元,所以必须遵守该分层。 因此首先要比较节点,然后才是线,材料,截面和杆件。 节点是一种例外,因为这里x,y和z的方向如有必要,可以保留原样。 所有其他单元都将被完全替换,或者保留原状。 但是对于所有创建新单元的单元来说,都是相同的。

程序基本结构

点击按钮“修改模型”时执行的方法具有以下基本结构:

私有无效button_mod_click(对象发送方,EventArgs e)
{
//RFEM
//###########################
Dlubal.RFEM5.IModel3 iModel_org = null;
Dlubal.RFEM5.IApplication iApp = null;
尝试
{
//得到应用程序的接口并打开模型
iApp = Marshal.GetActiveObject(“ RFEM5.Application”)as Dlubal.RFEM5.IApplication;
iApp.LockLicense();
iModel_org = iApp.GetActiveModel()作为Dlubal.RFEM5.IModel3;
  
//遍历找到的模型
Dlubal.RFEM5.IModel iModel_cpy = null;
  
for(int i = 0; i <listBox_models.Items.Count; ++ i)
{
//打开模型
iModel_cpy = iApp.OpenModel(listBox_models.Items [i] .ToString());
   
//得到结构数据
Dlubal.RFEM5.IModelData2 iModData_org
= iModel_org.GetModelData()作为Dlubal.RFEM5.IModelData2;
Dlubal.RFEM5.IModelData2 iModData_cpy
= iModel_cpy.GetModelData()as Dlubal.RFEM5.IModelData2;
   
//比较/更改节点
//比较/更改线
//比较/更改材料
//比较/更改截面
//比较/更改杆件
}
  
}
渔获(特例)
{
MessageBox.Show(例如消息,例如来源);
}
最后
{
if(iApp!= null)
{
iApp.UnlockLicense();
   
//释放COM对象 -不需要
//Marshal.ReleaseComObject(iApp);
iApp = null;
}
  
iModel_org = null;
  
//清理垃圾回收器释放所有COM接口和对象。
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
}
}

如前所述,与RFEM的连接首先通过GetActiveObject(“ RFEM5.Application”)进行。 然后,通过GetActiveModel()与激活的模型建立连接。 为了进行比较,通过列表框(GetModelData())中的输入项,子模型和它们的结构数据一个接一个的打开。 此时所有的几何数据都可以使用并进行比较。

如果出现问题,例如无法打开模型,由try-catch块捕捉错误,并显示错误,然后程序将被解锁。

节点比较

主模型和次模型模型节点的比较如下。

首先,取入主模型的所有节点,并在这些节点上开始循环。 在这种情况下,系统首先尝试在次模型中得到相同编号的节点的数据。 如果在该节点中失败,则使用另一个try-catch块捕捉错误,并在次模型中使用来自主模型的数据创建节点。

如果该节点存在,那么将读取该注释并使用分隔符“;”将其分解。 如果少于三个部分,则数据将从主模型中获取。 如果大于或等于三部分,将对它们进行评估。 f表示一个不能重写的固定值。 如果它不是“ f”值,那么该值将被为主模型中的值覆盖。

一个简短的例子是节点注释中的字符串“ f ;; f1; kkl”。 分解后将生成字符串“ f”,“”,“ f1”和“ kkl”。 因此,将x的值保留在节点上,将y和z的值覆盖,因为y包含一个空字符串,并且z包含一个“ f1”,

//比较/更改节点
Dlubal.RFEM5.Node [] nodesorg = iModData_org.GetNodes();
for(int j = 0; j <nodes_org.Length; ++ j)
{
尝试
{
Dlubal.RFEM5.INode iNode = iModData_cpy.GetNode(nodes_org [j] .No,Dlubal.RFEM5.ItemAt.AtNo);
Dlubal.RFEM5.Node =新的Dlubal.RFEM5.Node();
node = iNode.GetData();
  
//检查构件是否固定
list <string> defs =(node.Comment).Split(';')。ToList <string>();
  
if(defs.Count> = 3)
{
如果(defs [0]!=“ f”)
node.X = nodes_org [j] .X;
   
如果(defs [1]!=“ f”)
node.Y = nodes_org [j] .Y;
    
如果(defs [2]!=“ f”)
node.Z = nodes_org [j] .Z;
}
否则
{
node.X = nodes_org [j] .X;
node.Y = nodes_org [j] .Y;
node.Z = nodes_org [j] .Z;
}
  
//设置节点
iModData_cpy.PrepareModification();
iNode.SetData(节点);
iModData_cpy.FinishModification();
  
}
渔获(特例)
{
//如果不存在则创建
iModData_cpy.PrepareModification();
iModData_cpy.SetNode(nodes_org [j]);
iModData_cpy.FinishModification();
}
 
}

线,材料和其他比较

与节点比较的其他元素不同,但是彼此相同。

//比较/更改线
Dlubal.RFEM5.Line [] lines_org = iModData_org.GetLines();
for(int j = 0; j <lines_org.Length; ++ j)
{
尝试
{
Dlubal.RFEM5.ILine iLine = iModData_cpy.GetLine(lines_org [j] .No,Dlubal.RFEM5.ItemAt.AtNo);
Dlubal.RFEM5.Line(线性)=新建Dlubal.RFEM5.Line();
line = iLine.GetData();
  
//检查线是否固定
List <字符串>列表defs =(line.Comment).Split(';')。ToList <string>();
  
如果(defs [0]!=“ f”)
{
line = lines_org [j];
}
  
//设置线
iModData_cpy.PrepareModification();
iLine.SetData(线);
iModData_cpy.FinishModification();
  
}
渔获(特例)
{
//如果不存在则创建
iModData_cpy.PrepareModification();
iModData_cpy.SetLine(lines_org [j]);
iModData_cpy.FinishModification();
}
 
}

与节点比较的区别是,如果在拆卸的注释中没有找到“ f”(通过“;”反汇编),则该元素将被完全覆盖。 其他单元的创建和比较完全相同。 请参阅附加的Visual Studio项目中的源代码。

评估

该程序可以在辅助模型中实现所需的更改。 该文章的视频中介绍了如何使用它。 最大的问题是,当前错别字被截断或被截断的可能性很小。

总结和展望

这里展示的软件可以在主模型的基础上更新主模型。 对节点和其他单元上的更改的正确传递。

现在缺少了拦截错误条目的例程,这些例程现在可以继续添加。 进一步的优化例如是关闭辅助模型,这可能会导致在后台处理。 添加更多的结构数据,荷载和组合也将是有用的。

Dipl.-Ing. Thomas Günthel

Dipl.-Ing. Thomas Günthel

客户支持

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

关键词

COM 超级组合 结构组 跨模型 更新 高空作业平台 剪叉式提升机

下载

更多信息

写评论...

写评论...

  • 浏览 553x
  • 更新 2021年01月5日

联系我们

您有任何疑问或需要建议吗? 通过免费的电子邮件,聊天或论坛支持与我们联系,或者全天候使用我们的常见问题解答。

+49 9673 9203 0

(可要求接中文热线)

info@dlubal.com

RFEM | 基本

在线培训 2021年01月29日 8:30 - 12:30 CET

Online-Schulungen | 英语

RFEM für Studenten | USA

在线培训 2021年02月3日 13:00 - 16:00 EST

最常见的用户错误:RFEM和RSTAB

最常见的用户错误:RFEM和RSTAB

Webinar 2021年02月4日 14:00 - 15:00 CET

Online-Schulungen | 英语

RFEM | 钢结构 | USA

在线培训 2021年02月16日 9:00 - 12:00 EST

Online-Schulungen | 英语

欧洲规范2 | 混凝土结构按照DIN EN 1992-1-1

在线培训 2021年02月19日 8:30 - 12:30 CET

Online-Schulungen | 英语

RFEM | 结构动力学和抗震验算按照欧洲规范8

在线培训 2021年02月24日 8:30 - 12:30 CET

Online-Schulungen | 英语

欧洲规范 5 | 木结构设计规范EN 1995-1-1

在线培训 2021年03月17日 8:30 - 12:30 CET

Online-Schulungen | 英语

欧洲规范 3 | 按照DIN EN 1993-1-1进行钢结构设计

在线培训 2021年03月18日 8:30 - 12:30 CET

Online-Schulungen | 英语

RFEM | 动力学 | USA

在线培训 2021年03月23日 13:00 - 16:00 EST

Online-Schulungen | 英语

RFEM | 基本

在线培训 2021年04月23日 8:30 - 12:30

Online-Schulungen | 英语

欧洲规范 3 | 按照DIN EN 1993-1-1进行钢结构设计

在线培训 2021年05月6日 8:30 - 12:30

Online-Schulungen | 英语

欧洲规范2 | 混凝土结构按照DIN EN 1992-1-1

在线培训 2021年05月11日 8:30 - 12:30

Online-Schulungen | 英语

欧洲规范 5 | 木结构规范按照DIN EN 1995-1-1

在线培训 2021年05月20日 8:30 - 12:30

RFEM | 结构动力学和抗震验算按照欧洲规范8

在线培训 2021年06月2日 8:30 - 12:30

RFEM中的ADM 2020杆件设计

RFEM中的ADM 2020杆件设计

Webinar 2021年01月19日 14:00 - 15:00 EST

Dlubal信息日

Dlubal在线信息日 | 2020年12月15日

Webinar 2020年12月15日 9:00 - 16:00 CET

RFEM 主程序 RFEM
RFEM 5.xx

主程序

结构设计与有限元­分析软件(FEA)可以用于建立 平面与空间结构模型,适用于由杆件、面、 板、墙、折板、膜、壳、实体以及接触单元等的建模与分析计算。

首个许可价格
3,540.00 USD
RFEM 其他附加模块
RF-COM 5.xx

附加模块

RFEM 可编程序的 COM 接口

首个许可价格
580.00 USD