Fast unfolding of a given set of connected shell elements onto a plane.


hm_mapelementstoplane mark_id ?panel_sensitive?


HyperMesh Tcl Query Command


This command performs fast unfolding of a given set of connected shell elements onto a plane, while minimizing deformation for each element. The result is returned as a list with a number of entries equal to the number of nodes in the set of selected elements: { { id1 x1 y1 } { id2 x2 y2} ... }. Each entry in the list consists of the node ID and mapped node u-v coordinates onto the plane.


The ID of the mark containing the shell elements to map. Valid values are 1 and 2.
panel_sensitive (optional)
Can be used when multiple panel levels have been pushed, either using the shortcut function keys, or the hm_pushpanel command. This option determines whether to use the current panel or the previous panel for the operation. This option is relevant only when the mark has been created from a panel entity selector under the above conditions. Valid values are:
0 - Use the previous panel (default).
1 - Use the current panel.


To get the mapping for all elements to a plane, and to translate the nodes to that plane:

*createmark elems 1 all
set node_map2d [ hm_mapelementstoplane 1 ]

# Move each node to its 2D position (flatten the mesh)
foreach node $node_map2d {
# Node id, and calculated u, v on a plane
set node_id [ lindex $node 0 ]
set node_u  [ lindex $node 1 ]
set node_v  [ lindex $node 2 ]

# Current coordinates
set node_x  [ hm_getvalue nodes id=$node_id dataname=globalx]
set node_y  [ hm_getvalue nodes id=$node_id dataname=globaly]
set node_z  [ hm_getvalue nodes id=$node_id dataname=globalz]

# u will be new node's x, v will be new node's y, new z will be 0
set vector_x [ expr $node_u - $node_x ]
set vector_y [ expr $node_v - $node_y ]
set vector_z [ expr - $node_z ]
*createvector 1 $vector_x $vector_y $vector_z

# Calculate translation distance used by 'translatemark' (vector magnitude is ignored there)
set dist [expr sqrt( $vector_x * $vector_x + $vector_y * $vector_y + $vector_z * $vector_z )]

# Select and translate the node
*createmark nodes 1 $node_id
*translatemark nodes 1 1 $dist


Incorrect usage results in a Tcl error. To detect errors, you can use the catch command:
if { [ catch {command_name...} ] } {
   # Handle error