设为首页收藏本站积分自助充值

3DST技术网

 找回密码
 快速注册

QQ登录

只需一步,快速开始

3DST技术网 专业的3D设计技术学习网站 求助必看 - 论坛公告 - 技术求助

Solid Edge软件下载及安装 Solid Edge最新资源 软件下载-插件中心-模型下载-教程下载

3DST产品与购买 您的支持是我们成长和发展的动力 软件询价 - 月租订购 - 积分充值

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

发布者: 明明白白 | 发布时间: 2015-4-15 07:23| 查看数: 2859| 评论数: 4|帖子模式|复制链接



建议您在求助之前,先使用站内搜索一下对应的关键词


第一时间获取3DST技术网最新资讯以及教程,可以访问我们的官方微博http://weibo.com/solidedge,也可以在微信公众账号中搜索「www3dstcom」,或者通过手机扫描左方二维码,关注3DST技术网官方微信公众号,即可获得3DST技术网精华内容推送,以及参与相关活动。

马上注册3DST技术网,享用更多功能!

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
Femap API 实例一则:自动合并重节点
西门子:徐景礼

应用描述:

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

操作步骤:

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

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

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

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

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

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

1.jpg

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

2.jpg

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

3.jpg

打开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

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

3-2.jpg

完整代码如下:

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中重新调用,并拖拽到自定义工具栏中 ,图片位置



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

最新评论

无用的me 发表于 2015-4-15 08:35
学习了,不错,讲得好!
沁心 发表于 2015-4-26 13:57
小手一抖,积分到手!
qinwufeiyang 发表于 2015-4-27 10:59
好,学习了,受益了
guchengming 发表于 2018-2-22 16:42
太棒了,正需要,感谢楼主!
femap试用申请
快速回复 返回列表 客服中心 搜索 官方QQ群 3DST技术网积分充值
快速回复 返回顶部 返回列表