Skip to content

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 objet 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
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")