info
西门子 Simcenter STAR-CCM+ 应用案例分享
行业动态
MORE...
PTC
应用案例
MORE...
技术前沿
MORE...
当前位置:首页 数字化制造 正文
Femap API 实例一则——自动合并重节点
:  zaoche168.com   2015年10月20日

  应用描述:

  在网格划分过程中,很多时候需要检查网格,并对重节点进行合并操作,在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中重新调用,并拖拽到自定义工具栏中

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

品牌社区
—— 造车工艺 ——
—— 数字化制造 ——
—— 智能驾驶 ——
—— 新能源技术 ——
—— 机器人技术 ——
Baidu
map