Hypermesh二次开发:获取三点所确定平面的单位法向量
在进行Hypermesh的二次开发时经常需要获取平面的单位法向量,很多情况下是通过三个节点确定参考平面,然后获取此参考平面的单位法向量。编程思路为:将三个节点编号为1、2、3,通过1、2节点创建第一个向量,通过1、3或2、3节点创建第二个向量,将这两个向量叉乘即可得到平面的法向量,然后对法向量进行单位化即可。向量的操作需要用到Hyperworks math工具箱里面的相关函数,向量的创建采用GetVector函数,向量的叉乘使用VectorCrossProduct函数,单位化向量使用VectorNormalize函数。
下面通过一个获取平面圆弧曲线的单位法向量的实力详细介绍程序的编制方法。首先在圆弧上创建三个临时节点,然后使用上述方法进行单位法向量的创建。由于使用了Hyperworks math工具箱里面的向量处理函数,需要在程序头部导入hwat工具包。完整程序如下所示:
package require hwat
*createmarkpanel lines 1 "Pleaseselect a arcs"
set line_id [hm_getmark lines 1]
hm_entityrecorder nodes on
*createdoublearray 3 0 0.3 0.6
*nodecreateatlineparams $line_id 1 3
hm_entityrecorder nodes off
set node_ids [hm_entityrecorder nodes ids]
lassign $node_ids n1 n2 n3
set line_vec1 [::hwat::math::GetVector \
[lindex [hm_nodevalue $n1] 0] \
[lindex[hm_nodevalue $n2] 0]]
set line_vec2 [::hwat::math::GetVector \
[lindex [hm_nodevalue $n1] 0] \
[lindex[hm_nodevalue $n3] 0]]
set cross_vec[::hwat::math::VectorCrossProduct $line_vec1 $line_vec2]
set cross_vec [::hwat::math::VectorNormalize$cross_vec]
lassign $cross_vec normalx normaly normalz
*createmark nodes 1 $n1 $n2 $n3
*nodemarkcleartempmark 1