注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Solid Edge Center

最佳的二三维一体化设计分析平台

 
 
 

日志

 
 
关于我

1998年 Solid Edge V4 2000年 Solid Edge V9 2004年 Solid Edge V16 2007年 Solid Edge V20 2008年 Solid Edge ST 2012年 Solid Edge ST5

网易考拉推荐

Femap API 实例一则:自动合并重节点  

2015-03-17 14:55:52|  分类: 技术共享 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

                                                                         西门子 徐景礼 

应用描述:

在网格划分过程中,很多时候需要检查网格,并对重节点进行合并操作,在Femap虽然已经提供了节点合并工具,但在此,我们来写一个API程序,在不用任何参数提示下自动完成节点合并操作。

操作步骤:

1.       建立一个包含重节点的测试模型

2.       定义变量并赋予默认合并公差

3.       定义变量保存合并节点数量

4.       调用feCheckCoincidentNode 命令合并节点,但隐藏参数对话框

5.       在消息窗口 输出有多少节点被合并

新建一个Femap模型,并创建一个包含重节点的有限元模型。通过Mesh -> Between 命令创建仅用于显示的平面单元。在方向1和2中输入 5, 5建立一个4X4的平面(每边5个节点,点击两次OK 以确定仅生成用于显示的平面单元(如下图)。

Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

 在接下来的对话 框中分别输入(0,0,0), (10,0,0), (10,10,0), and (0,10,0)指定模型位置与大小,完成后的模型如下图:

Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

 重复以上命令,在输入新的模型位图与大小时分别输入(10,0,0), (20,0,0), (20,10,0), (10,10,0)。完成后的模型检查自由边显示如下图:

Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

 打开API Programming窗口开始编写程序。首先来定义feCheckCoincidentNode 命令所需的变量(具体参见Femap API帮助文档3.5.6.1章节), 公差变量定义为Double,重节点数量定义为Long,重节点数组定义为Variant,返回值定义为Long,同时还需要定义femap.Set集来存储要合并的节点集。

Dim tolerance As Double
        Dim coinCount As Long
        Dim coinNodes As Variant
        Dim rc as Long
        Dim fs As femap.Set

注意,用于存储节点数值的变量并未被初始化,并没有被定义为Array。同时对于feCheckCoincidentNode 命令,还定义了变量fs,用于存储节点集,这是必须的。

合并公差设定为0.001,这是提前指定的一个数值 ,当Femap在执行合并命令时无法改变该数值,另一种选择是循环遍历模型中所有节点后计算出一个公差值。

tolerance = 0.001

现在,初始化fs到当前应用,并赋予其模型中所有节点。该值可用于存储所有数据也可用于存储要合并的数据。

Set fs = App.feSet
fs.AddAll(FT_NODE)

调用feCheckCoincidentNode 命令合并模型中所有节点。注意,在此我们只想合并节点,但不希望有弹出窗口提示。调用一个返回值来获取任何错误信息。

         rc = App.feCheckCoincidentNode( fs.ID, fs.ID, tolerance, + _
       True, False, coinCount, coinNodes)
注意:符号(+ _)允许我们在分开的行中完成同一命令,下同

最后,添加一个状态,以确定合并是否成功。如果合并失败则在消息窗口中输出"Could not merge all nodes",如果合并成功则输出所合并节点的数量信息。

         If Not rc = FE_FAIL Then
       App.feAppMessage(FCM_NORMAL, "Merged " + Str$(coinCount) + _
           " nodes")
    Else
       App.feAppMessage(FCM_ERROR, "Could not merge all nodes")
    End If

运行程序将得到下图结果:

Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

 完整代码如下:

Sub Main

Dim App As femap.model
              Set App = feFemap()

Dim tolerance As Double
        Dim coinCount As Long
        Dim coinNodes As Variant
        Dim rc As Long
        Dim fs As femap.Set

    tolerance = 0.001

    Set fs = App.feSet
                  fs.AddAll(FT_NODE)

    rc = App.feCheckCoincidentNode( fs.ID, fs.ID, tolerance, + _
       True, False, coinCount, coinNodes)

    If Not rc = FE_FAIL Then
       App.feAppMessage(FCM_NORMAL, "Merged " + Str$(coinCount) + _
           " nodes")
    Else
       App.feAppMessage(FCM_ERROR, "Could not merge all nodes")
    End If

End Sub

通过保存API Programming命令将程序保存,之后在Customize中重新调用,并拖拽到自定义工具栏中 ,Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

 

      下次可通过直接点击图标执行自动合并节点操作。

Femap API  实例一则:自动合并重节点 - Solid Edge Center - Solid Edge Center

  评论这张
 
阅读(214)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017