Provides various modes/operators to edit midmeshes.
Syntax
*midmesh_repair
mode string_array number_of_strings
Type
HyperMesh Tcl Modify Command
Description
This command provides various modes/operators to edit midmeshes. This command assumes the
midmesh will be in single component, and the topology is well defined by 1d elements which
are also in single component other than the midmesh component.
Inputs
-
mode
- The midmesh mode/operator to use.
- Each mode has a different set of required and/or optional string inputs as listed
below.
-
-
AlignEdgeByLines
- Used to align a list of nodes in order with respect to a given list of lines. It
will also create 1D elements between the given list of nodes if doesn’t
exist.
- Valid strings are:
-
LineList1=<list_id>
- The ID of the list of upper lines to align to, created by
*createlist. Valid values are 1 and 2.
-
LineList2=<list_id>
- The ID of the list of lower lines to align to, created by
*createlist. Valid values are 1 and 2.
-
NodeList=<list_id>
- The ID of the list of nodes to be aligned, created by
*createlist. Valid values are 1 and 2.
-
AlignEdgeToMidOfLines
- Used to align nodes/edges to the middle of two lines. This mode can also take
disconnected lines as input provided they are in close proximity.
- Valid strings are:
-
LineList=<list_id>
- The ID of the list of lines to align to, created by
*createlist. Valid values are 1 and 2.
-
NodeList=<list_id>
- The ID of the list of nodes to be aligned, created by
*createlist. Valid values are 1 and 2.
-
AlignFace
- Used to align elements to given surfaces.
- Valid strings are:
-
Elemmark=<mark_id>
- The ID of the mark of elements to align. Valid values are 1 and 2.
-
Surfmark=<mark_id>
- The ID of the mark of surfaces to align to. Valid values are 1 and
2.
-
?lockBoundaryNodes=<mode>?
- 0 - Do not lock/anchor boundary nodes (default)
- 1 - Lock/anchor boundary nodes
-
?useOffset=<value>?
- Selected elements will be aligned to this value from the surfaces (default
is off).
-
AlignTEdge
- Used to align T-connections to the selected surfaces while attempting to
maintain the tangency of the faces which are attached to the T-edge but not facing
the selected surface.
- Valid strings are:
-
a1DElemmark=<mark_id>
- The ID of the mark of 1D elements corresponding to the T-edges. Valid
values are 1 and 2.
-
Surfmark=<mark_id>
- The ID of the mark of the surfaces to align to. Valid values are 1 and
2.
-
AlignToMid
- Used to align elements to the middle of two surfaces.
- Valid strings are:
-
Elemmark=<mark_id>
- The ID of the mark of elements to align. Valid values are 1 and 2.
-
Surf1mark=<mark_id>
- The ID of the mark of the upper surfaces to align to. Valid values are 1
and 2.
-
Surf2mark=<mark_id>
- The ID of the mark of the lower surfaces to align to. Valid values are 1
and 2.
-
?lockBoundaryNodes=<mode>?
- 0 - Do not lock/anchor boundary nodes (default)
- 1 - Lock/anchor boundary nodes
-
CreateMidEdge
- Used to create 1D elements linearly interpolated between the selected
nodes.
- Valid strings are:
-
Node1=<id>
- The ID of the first node to connect by 1D elements.
-
Node2=<id>
- The ID of the first node to connect by 1D elements.
-
?ElementSize=<value>?
- The size of 1D element to be created.
-
?OutputCompId=<id>?
- The ID of the compoent where 1D elements are to be created.
-
CreateMidEdgeByLines
- Used to create 1D elements in the middle of the pair of input guiding surface
edges.
- If no set of guide edges is selected, 1D elements are created by linearly
interpolating between the selected nodes.
- If one set of guide edges is selected (either Lines1Mark or
Lines2Mark can be used), 1D elements created at an offset
distance of the selected nodes from the selected set of guide line(s).
- If both sets of guide edges are selected, 1D elements are created in the middle
of the pair of guide line(s).
- Valid strings are:
-
Node1=<id>
- The ID of the first node to connect by 1D elements.
-
Node2=<id>
- The ID of the first node to connect by 1D elements.
-
Lines1Mark=<mark_id>
- Optional.
- The ID of the mark of the first set of surface edge guiding pairs. Valid
values are 1 and 2.
-
Lines2Mark=<mark_id>
- Optional.
- The ID of the mark of the second set of surface edge guiding pairs. Valid
values are 1 and 2.
-
?ElementSize=<value>?
- The size of 1D elements to be created.
-
?OutputCompId=<id>?
- The ID of the compoent where 1D elements are to be created.
-
DetectIntersections
- Detects intersections/overlaps and free edges (gaps) in the provided input
elements and groups them into element clusters. The clusters are added as element
sets in the model.
- Valid strings are:
-
ElementMark=<mark_id>
- The ID of the mark of elements for which intersections/overlaps/free edges
(gaps) are to be detected. Valid values are 1 and 2.
-
?ShowIntersectionLines=<value>?
- 0 - Do not show intersection lines (default)
- 1 - Show intersection lines
-
FillLoop
- Used to fill a loop of 1D elements and free edges. Free edges are considered in
order to form the desired loop. If unable to detect the loop, it will create
temporary 1Ds in sets for the traversed path so as to lay a platform to complete
the loop in the subsequent selection.
- Valid strings are:
-
ElemMark=<mark_id>
- The ID of the mark of elements on the edges of the desired loop. Valid
values are 1 and 2.
-
delete1D=<value>
- Option whether to delete 1Ds which will become internal after fill. 1D
elements which will become non-manifold and boundary after fill will not be
deleted.
- 0 - Do not delete
- 1 - Delete
-
RepairFace
- Used to repair minor problems in the midmesh output automatically, such as
intersections, element overlaps, sliver elements and holes, provided the mesh
topology is close to the required topology. Set entities with the prefix
^Midmesh_IntxnCluster- , as created by the DetectIntersections
mode, are reevaluated for newly generated elements for intersection and gaps.
- Valid strings are:
-
ElementMark=<mark_id>
- The ID of the mark of elements to repair. Valid values are 1 and 2.
-
?ElementSize=<value>?
- The size of 1D and 2D elements to be created.
-
?OutputComp1Id=<id>?
- The ID of the compoent where 1D elements are to be created.
-
?OutputComp2Id=<id>?
- The ID of the compoent where 2D elements are to be created.
-
SplitByNodeEdge
- Used to trim the mesh from node-to edge, creating 1D elements in the path.
- Valid strings are:
-
NodeId=<id>
- The ID of the node to use to trim.
-
a1DElemmark=<mark_id>
- The ID of the mark of 1D elements that define the edge. Valid values are 1
and 2.
-
mode=<value>
- The mesh will be trimmed from the given node to the given set of 1D
elements by:
- 1 - Shortest path, using the shortest distance from the given node to the
set of given 1D elements
- 2 - Tangential path, using the tangential direction of the scratch edge
connected to the node
- 3 - Mixed path, similar to tangential path except when the angle of
intersection with the selected 1D elements is < 30 degree, it recedes
back to an appropriate point from where it uses shortest path to the
selected 1D elements
- 4 - Point on line, split from a source node to a selected location on a 1D
element. Requires SplitPoint to be defined.
-
?SplitPoint=<id>?
- A space separated list of coordinates for the point on the 1D element when
mode=4.
-
?OutputCompId=<id>?
- The ID of the compoent where 1D elements are to be created.
-
SplitByNodes
- Used to trim the mesh from node-to-node, creating 1D elements in the path.
- Valid strings are:
-
SourceNode=<id>
- The ID of the first trim node.
-
TargetNode=<id>
- The ID of the second trim node.
-
?OutputCompId=<id>?
- The ID of the compoent where 1D elements are to be created.
-
string_array
- The ID of the string array that contains the additional optional input parameters. The
string array is created using the *createstringarray command. This
should always be set to 1.
- Valid parameters and their syntax are given above along with their corresponding
mode.
-
number_of_strings
- Integer indicating the size (number of strings) in
string_array.
Examples
AlignEdgeByLines:
*createlist nodes 1 296091 308312 308313 308314 122319
*createlist lines 2 13433 13711
*createstringarray 2 "NodeList = 1" "LineList = 2"
*midmesh_repair AlignEdgeByLines 1 2
AlignEdgeToMidOfLines:
*createlist nodes 1 104348 104350
*createlist lines 1 3770
*createlist lines 2 3098
*createstringarray 3 "NodeList = 1" "LineList1 = 1" "LineList2 = 2"
*midmesh_repair AlignEdgeToMidOfLines 1 3
AlignFace:
*createmark elements 1 775184-775196 775198-775221
*createmark surfaces 1 4458
*createstringarray 4 "Elemmark = 1" "Surfmark = 1" "UseOffset = 2" "lockBoundaryNodes = 1"
*midmesh_repair AlignFace 1 4
AlignTEdge:
*createmark elements 2 641791 641801 641812 641819 641828 641839 641853
*createmark surfaces 1 4458
*createstringarray 2 "a1DElemmark = 2" "Surfmark = 1"
*midmesh_repair AlignTEdge 1 2
AlignToMid:
*createmark elements 1 641791 641801 641812 641819 641828 641839 641853
*createmark surfaces 1 6945 6940
*createmark surfaces 2 4746 4731
*createstringarray 3 "ElemMark = 1" "Surf1Mark = 1" "Surf2Mark = 2"
*midmesh_repair AlignToMid 1 3
CreateMidEdge:
*createstringarray 3 "Node1 = 393803" "Node2 = 397834" "ElementSize = 2"
*midmesh_repair CreateMidEdge 1 3
CreateMidEdgeByLines:
*createmark lines 1 6825
*createmark lines 2 8525
*createstringarray 6 "Node1 = 327644" "Node2 = 327650" "Lines1Mark = 1" "Lines2Mark = 2" "ElementSize = 2"
*midmesh_repair CreateMidEdgeByLines 1 6
DetectIntersections:
*createmark elements 1 723914 781519
*createstringarray 2 "ElementMark = 1"
*midmesh_repair DetectIntersections 1 2
FillLoop:
*createmark elements 2 946766 946784 946816-946821
*createstringarray 2 "ElemMark = 2""delete1D = 0"
*midmesh_repair FillLoop 1 2
RepairFace:
*createmark elements 1 723914 781519
*createstringarray 2 "ElementMark = 1" "ElementSize = 2"
*midmesh_repair RepairFace 1 2
SplitByNodeEdge (mode 2):
*createmark elements 1 644746 765688-765716
*createstringarray 3 "NodeId = 375350" "a1DElemMark = 1" "Mode = 2"
*midmesh_repair SplitByNodeEdge 1 3
SplitByNodeEdge (mode 4):
*createmark elements 1 644746
*createstringarray 3 "NodeId = 375350" "a1DElemMark = 1" "Mode = 4" "SplitPoint = 368.227914 -3524.695550 703.658554"
*midmesh_repair SplitByNodeEdge 1 4
SplitByNodes:
*createstringarray 2 "SourceNode=363142" "TargetNode=363179"
*midmesh_repair SplitByNodes 1 2
Errors
Incorrect usage results in a
Tcl error. To detect
errors, you can use the
catch
command:
if { [ catch {command_name...} ] } {
# Handle error
}
Version History
2019
2019.1 - CreateMidEdge now linearly interpolates
between the selected nodes. The CreateMidEdgeWithLines
Lines1Mark and Lines2Mark selections are now optional.
The behaivor now depends on which, if any, lines marks are populated.
2020.1 - Added new mode values
AlignToMid and AlignToMidOfLines.
RepairFace now reevaluates created sets for changes. Added new
SplitByNodeEdge
mode value 4 and new option SplitPoint.