MeshTrianLoader
Specific mesh loader for trian (only triangulations) file format.
Target: Sofa.Component.IO.Mesh
namespace: sofa::component::io::mesh
parents:
- MeshLoader
Data
| Name | Description | Default value |
|---|---|---|
| name | object name | unnamed |
| printLog | if true, emits extra messages at runtime. | 0 |
| tags | list of the subsets the object belongs to | |
| bbox | this object bounding box | |
| componentState | The state of the component among (Dirty, Valid, Undefined, Loading, Invalid). | Undefined |
| listening | if true, handle the events, otherwise ignore the events | 0 |
| filename | Filename of the object | |
| flipNormals | Flip Normals | 0 |
| triangulate | Divide all polygons into triangles | 0 |
| createSubelements | Divide all n-D elements into their (n-1)-D boundary elements (e.g. tetrahedra to triangles) | 0 |
| onlyAttachedPoints | Only keep points attached to elements of the mesh | 0 |
| translation | Translation of the DOFs | 0 0 0 |
| rotation | Rotation of the DOFs | 0 0 0 |
| scale3d | Scale of the DOFs in 3 dimensions | 1 1 1 |
| transformation | 4x4 Homogeneous matrix to transform the DOFs (when present replace any) | [1 0 0 0,0 1 0 0,0 0 1 0,0 0 0 1] |
| trian2 | Set to true if the mesh is a trian2 format. | 0 |
| neighborTable | Table of neighborhood triangle indices for each triangle. | |
| edgesOnBorder | List of edges which are on the border of the mesh loaded. | |
| trianglesOnBorderList | List of triangle indices which are on the border of the mesh loaded. | |
| Vectors | ||
| position | Vertices of the mesh loaded | |
| polylines | Polylines of the mesh loaded | |
| edges | Edges of the mesh loaded | |
| triangles | Triangles of the mesh loaded | |
| quads | Quads of the mesh loaded | |
| polygons | Polygons of the mesh loaded | |
| highOrderEdgePositions | High order edge points of the mesh loaded | |
| highOrderTrianglePositions | High order triangle points of the mesh loaded | |
| highOrderQuadPositions | High order quad points of the mesh loaded | |
| tetrahedra | Tetrahedra of the mesh loaded | |
| hexahedra | Hexahedra of the mesh loaded | |
| pentahedra | Pentahedra of the mesh loaded | |
| highOrderTetrahedronPositions | High order tetrahedron points of the mesh loaded | |
| highOrderHexahedronPositions | High order hexahedron points of the mesh loaded | |
| pyramids | Pyramids of the mesh loaded | |
| normals | Normals of the mesh loaded | |
| Groups | ||
| edgesGroups | Groups of Edges | |
| trianglesGroups | Groups of Triangles | |
| quadsGroups | Groups of Quads | |
| polygonsGroups | Groups of Polygons | |
| tetrahedraGroups | Groups of Tetrahedra | |
| hexahedraGroups | Groups of Hexahedra | |
| pentahedraGroups | Groups of Pentahedra | |
| pyramidsGroups | Groups of Pyramids | |
Links
| Name | Description | Destination type name |
|---|---|---|
| context | Graph Node containing this object (or BaseContext::getDefault() if no graph is used) | BaseContext |
| slaves | Sub-objects used internally by this object | BaseObject |
| master | nullptr for regular objects, or master object for which this object is one sub-objects | BaseObject |
Examples
MeshTrianLoader.scn
<!-- For more details see: https://wiki.sofa-framework.org/tdev/wiki/Notes/NewLoaderArchitecture -->
<Node name="Root" gravity="0 -9.81 0" dt="0.02">
<RequiredPlugin name="Sofa.Component.Collision.Detection.Algorithm"/> <!-- Needed to use components [BVHNarrowPhase BruteForceBroadPhase CollisionPipeline] -->
<RequiredPlugin name="Sofa.Component.Collision.Detection.Intersection"/> <!-- Needed to use components [MinProximityIntersection] -->
<RequiredPlugin name="Sofa.Component.Collision.Response.Contact"/> <!-- Needed to use components [CollisionResponse] -->
<RequiredPlugin name="Sofa.Component.IO.Mesh"/> <!-- Needed to use components [MeshTrianLoader] -->
<RequiredPlugin name="Sofa.Component.LinearSolver.Iterative"/> <!-- Needed to use components [CGLinearSolver] -->
<RequiredPlugin name="Sofa.Component.ODESolver.Backward"/> <!-- Needed to use components [EulerImplicitSolver] -->
<RequiredPlugin name="Sofa.Component.StateContainer"/> <!-- Needed to use components [MechanicalObject] -->
<RequiredPlugin name="Sofa.Component.Topology.Container.Dynamic"/> <!-- Needed to use components [TriangleSetGeometryAlgorithms TriangleSetTopologyContainer TriangleSetTopologyModifier] -->
<RequiredPlugin name="Sofa.Component.Visual"/> <!-- Needed to use components [VisualStyle] -->
<RequiredPlugin name="Sofa.GL.Component.Rendering3D"/> <!-- Needed to use components [OglModel] -->
<DefaultAnimationLoop/>
<VisualStyle displayFlags="showVisual showBehaviorModels showForceFields showCollision showMapping" />
<CollisionPipeline name="DefaultCollisionPipeline" verbose="0" draw="0" depth="6" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.3" contactDistance="0.2" />
<CollisionResponse name="Response" response="PenalityContactForceField" />
<Node name="Trian file">
<EulerImplicitSolver name="cg_odesolver" printLog="false" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="25" name="linear solver" tolerance="1.0e-9" threshold="1.0e-9" />
<MeshTrianLoader name="TrianLoader" filename="mesh/coeur1.trian" />
<!-- <MeshGmshLoader name="loader" filename="mesh/square3.msh" /> -->
<MechanicalObject name="dofs" scale="1" src="@TrianLoader" />
<TriangleSetTopologyContainer name="topo" src="@TrianLoader" />
<TriangleSetTopologyModifier name="modif" />
<TriangleSetGeometryAlgorithms name="triGeo" />
<OglModel name="VisualModel" src="@TrianLoader" color="red" />
</Node>
</Node>
def createScene(root_node):
root = root_node.addChild('Root', gravity="0 -9.81 0", dt="0.02")
root.addObject('RequiredPlugin', name="Sofa.Component.Collision.Detection.Algorithm")
root.addObject('RequiredPlugin', name="Sofa.Component.Collision.Detection.Intersection")
root.addObject('RequiredPlugin', name="Sofa.Component.Collision.Response.Contact")
root.addObject('RequiredPlugin', name="Sofa.Component.IO.Mesh")
root.addObject('RequiredPlugin', name="Sofa.Component.LinearSolver.Iterative")
root.addObject('RequiredPlugin', name="Sofa.Component.ODESolver.Backward")
root.addObject('RequiredPlugin', name="Sofa.Component.StateContainer")
root.addObject('RequiredPlugin', name="Sofa.Component.Topology.Container.Dynamic")
root.addObject('RequiredPlugin', name="Sofa.Component.Visual")
root.addObject('RequiredPlugin', name="Sofa.GL.Component.Rendering3D")
root.addObject('DefaultAnimationLoop', )
root.addObject('VisualStyle', displayFlags="showVisual showBehaviorModels showForceFields showCollision showMapping")
root.addObject('CollisionPipeline', name="DefaultCollisionPipeline", verbose="0", draw="0", depth="6")
root.addObject('BruteForceBroadPhase', )
root.addObject('BVHNarrowPhase', )
root.addObject('MinProximityIntersection', name="Proximity", alarmDistance="0.3", contactDistance="0.2")
root.addObject('CollisionResponse', name="Response", response="PenalityContactForceField")
trian_file = Root.addChild('Trian file')
trian_file.addObject('EulerImplicitSolver', name="cg_odesolver", printLog="false", rayleighStiffness="0.1", rayleighMass="0.1")
trian_file.addObject('CGLinearSolver', iterations="25", name="linear solver", tolerance="1.0e-9", threshold="1.0e-9")
trian_file.addObject('MeshTrianLoader', name="TrianLoader", filename="mesh/coeur1.trian")
trian_file.addObject('MechanicalObject', name="dofs", scale="1", src="@TrianLoader")
trian_file.addObject('TriangleSetTopologyContainer', name="topo", src="@TrianLoader")
trian_file.addObject('TriangleSetTopologyModifier', name="modif")
trian_file.addObject('TriangleSetGeometryAlgorithms', name="triGeo")
trian_file.addObject('OglModel', name="VisualModel", src="@TrianLoader", color="red")