2025年01月08日
本田2025年01月08日
西门子2025年01月08日
禾赛科技2025年01月08日
特斯拉2025年01月08日
海克斯康2025年01月08日
伏能士
2025年01月07日
Mendix 低代码平台
2025年01月06日
达索
2025年01月06日
海克斯康
2024年12月30日
云计算
2025年01月08日
瓦尔特
2025年01月07日
新思科技
2025年01月07日
欧姆龙
2025年01月06日
德国GMCI
2025年01月03日
海克斯康
应用描述:
在网格划分过程中,很多时候需要检查网格,并对重节点进行合并操作,在Femap虽然已经提供了节点合并工具,但在此,我们来写一个API程序,在不用任何参数提示下自动完成节点合并操作。
操作步骤:
1. 建立一个包含重节点的测试模型
2. 定义变量并赋予默认合并公差
3. 定义变量保存合并节点数量
4. 调用feCheckCoincidentNode 命令合并节点,但隐藏参数对话框
5. 在消息窗口 输出有多少节点被合并
新建一个Femap模型,并创建一个包含重节点的有限元模型。通过Mesh -> Between 命令创建仅用于显示的平面单元。在方向1和2中输入 5, 5建立一个4X4的平面(每边5个节点,点击两次OK 以确定仅生成用于显示的平面单元(如下图)。
在接下来的对话 框中分别输入(0,0,0), (10,0,0), (10,10,0), and (0,10,0)指定模型位置与大小,完成后的模型如下图:
重复以上命令,在输入新的模型位图与大小时分别输入(10,0,0), (20,0,0), (20,10,0), (10,10,0)。完成后的模型检查自由边显示如下图:
打开API Programming窗口开始编写程序。首先来定义feCheckCoincidentNode 命令所需的变量(具体参见Femap API帮助文档章节), 公差变量定义为Double,重节点数量定义为Long,重节点数组定义为Variant,返回值定义为Long,同时还需要定义集来存储要合并的节点集。
Dim tolerance As Double
Dim coinCount As Long
Dim coinNodes As Variant
Dim rc as Long
Dim fs As
注意,用于存储节点数值的变量并未被初始化,并没有被定义为Array。同时对于feCheckCoincidentNode 命令,还定义了变量fs,用于存储节点集,这是必须的。
合并公差设定为0.001,这是提前指定的一个数值 ,当Femap在执行合并命令时无法改变该数值,另一种选择是循环遍历模型中所有节点后计算出一个公差值。
tolerance = 0.001
现在,初始化fs到当前应用,并赋予其模型中所有节点。该值可用于存储所有数据也可用于存储要合并的数据。
Set fs =
(FT_NODE)
调用feCheckCoincidentNode 命令合并模型中所有节点。注意,在此我们只想合并节点,但不希望有弹出窗口提示。调用一个返回值来获取任何错误信息。
r c = kCoincidentNode( , , tolerance, + _
True, False, coinCount, coinNodes)
注意:符号(+ _)允许我们在分开的行中完成同一命令,下同
最后,添加一个状态,以确定合并是否成功。如果合并失败则在消息窗口中输出"Could not merge all nodes",如果合并成功则输出所合并节点的数量信息。
If Not rc = FE_FAIL Then
essage(FCM_NORMAL, "Merged " + Str$(coinCount) + _
" nodes")
Else
essage(FCM_ERROR, "Could not merge all nodes")
End If
运行程序将得到下图结果:
完整代码如下:
通过保存API Programming命令将程序保存,之后在Customize中重新调用,并拖拽到自定义工具栏中
,下次可通过直接点击图标执行自动合并节点操作。