今天我们来学习如何通过二次开发来实现组件创建和单元移动:
本次我们需要创建一个脚本来实现以下目标:
为了实现上述目标,我们先介绍几个hypermesh二次开发命令:
该指令属于HyperMesh Tcl GUI 命令,功能为使用HyperMesh面板获取字符串值,此命令通过向用户提供HyperMesh面板来返回字符串值;
使用语法为 hm_getstring ?caption? ?message? ?default_value?
?caption? 进入面板时显示的可选标题。
?message? 进入面板时在状态栏中显示的可选字符串,必须指定才能使用此选项。
?default_value?进入面板时要设置的可选默认字符串,必须指定才能使用此选项。
例如:
set label1 [hm_getstring "Label=" "Please specify the label"]
set comp_name [hm_getstring "comp name=" "please specify the comp name"]
该指令属于HyperMesh Tcl 修改命令,功能为使用指定数据创建新实体,只允许设置数据名称,不支持属性,不支持 STATUS;
使用语法为 entity_type ?modelname=<name_of_model>? ?name1=value1? ?name2=value2? ... ?name3=valueN?
entity_type 要创建的实体类型
modelname=<name_of_model> 是当数据库有多个模型时要更新的可选模型名称;如果未指定,则使用当前模型。
<name>=<value>定义实体的相关数据
例如:
创建具有默认集合类型和名称的集合。
*createentity sets
创建一组类型节点和节点 ID 1-4:
*createentity sets type=nodes ids={1 2 3 4}
创建名称为 set1 的集合cardimage GRNOD:
*createentity sets name=set1 cardimage=GRNOD
eg:*createentity comps name=$comp_name
该指令属于HyperMesh Tcl 修改命令,功能为提供用于向标记添加实体的面板;
使用语法为 entity_type mark_id message ?face_edge_mode? ?filter?
entity_type 要添加的实体的类型
mark_id 标记的 ID。有效值为 1 和 2
message 进入面板时在消息栏中显示的字符串
?face_edge_mode? 进入面板时使用的默认面/边缘选择模式。这是有效的仅适用于节点和元素。无效值默认为 0,或者被忽略不支持的实体类型
例如:
在面板上创建一个标记单元
*createmarkpanel elems 1 "Please select the elements"
hm_getmark elems 1
使用 2D 面作为默认选择在面板中创建元素标记 模式:
*createmarkpanel elems 1 "Please select the elements" 1
hm_getmark elems 1
使用 2D 面作为默认选择模式在面板中创建元素标记,仅限允许2D面和2D自由边ext模式:
*createmarkpanel elems 1 "Please select the elements" 1 6
hm_getmark elems 1
eg:*createmarkpanel elements 1 "please select elements to translate"
该指令属于HyperMesh Tcl 修改命令,功能为将实体组织到收集器中,将实体从一个收集器移动到另一个收集器;
使用语法为 entity_type mark_id name
entity_type 要移动的实体的类型
mark_id 包含要移动的实体的标记的 ID。有效值为 1 和 2
name 要将实体移动到的收集器的名称
例如:
将所有元素从comp1移到comp2
*createmark elems 1 "by collector name" comp1
*movemark elems 1 comp2
eg:*movemark elements 1 $comp_name
该指令属于HyperMesh Tcl 修改命令,功能为定义要在后续命令中使用的向量;
使用语法为 vector id x component y component z component
vector id 正在定义的向量的 ID(1 或 2)
x component 向量法线的 x 分量
y component 向量法线的 y 分量
z component 向量法线的 z 分量
例如:
要沿 y 轴定义向量:
createvector(1,0,1,0)
eg:*createvector 1 0 0 1
该指令属于HyperMesh Tcl 修改命令,功能为沿向量平移所选实体;
使用语法为 entity_type mark_id vector_id distance
entity_type 要平移的实体类型
mark_id 包含实体的标记的 ID 有效值为 1 和 2
vector_id 要用于平移的向量的 ID 这是使用*createvector命令定义的
distance 要平移的距离
例如:
要沿 y 轴平移节点1 5 个单位:
*createvector 1 0 1 0
*createmark nodes 1 1
*translatemark nodes 1 1 5
eg:
*createmark components 1 $comp_name
*createvector 1 0 0 1
set dist [hm_getfloat "distance=" "please input the translate distance"]
*translatemark components 1 1 $dist
以上几个命令介绍完毕,下面展示实现最初目标的完整代码:
set comp_name [hm_getstring "comp name=" "please specify the comp name"]
*createentity comps name=$comp_name
*createmarkpanel elements 1 "please select elements to translate"
*movemark elements 1 $comp_name
*createmark components 1 $comp_name
*createvector 1 0 0 1
set dist [hm_getfloat "distance=" "please input the translate distance"]
*translatemark components 1 1 $dist