GenerateCylinder
Engine generating a cylindrical tetrahedral mesh.
Vec3d
Templates:
- Vec3d
Target: Sofa.Component.Engine.Generate
namespace: sofa::component::engine::generate
parents:
- DataEngine
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 |
BezierTriangleDegree | order of Bezier triangles | |
BezierTetrahedronDegree | order of Bezier tetrahedra | |
openSurface | if the cylinder is open at its 2 ends | 1 |
Outputs | ||
output_TetrahedraPosition | output array of 3d points of tetrahedra mesh | |
output_TrianglesPosition | output array of 3d points of triangle mesh | |
tetrahedra | output mesh tetrahedra | |
triangles | output triangular mesh | |
BezierTriangleWeights | weights of rational Bezier triangles | |
isBezierTriangleRational | booleans indicating if each Bezier triangle is rational or integral | |
BezierTetrahedronWeights | weights of rational Bezier tetrahedra | |
isBezierTetrahedronRational | booleans indicating if each Bezier tetrahedron is rational or integral | |
Inputs | ||
radius | input cylinder radius | 0.2 |
height | input cylinder height | 1 |
origin | cylinder origin point | 0 0 0 |
resCircumferential | Resolution in the circumferential direction | 6 |
resRadial | Resolution in the radial direction | 3 |
resHeight | Resolution in the height direction | 5 |
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
GenerateCylinder.scn
<?xml version="1.0" ?>
<Node name="root" dt="1" showBoundingTree="0" gravity="0 0 0">
<RequiredPlugin name="Sofa.Component.Constraint.Projective"/> <!-- Needed to use components [FixedPlaneProjectiveConstraint FixedProjectiveConstraint LineProjectiveConstraint] -->
<RequiredPlugin name="Sofa.Component.Engine.Generate"/> <!-- Needed to use components [GenerateCylinder] -->
<RequiredPlugin name="Sofa.Component.Engine.Select"/> <!-- Needed to use components [BoxROI] -->
<RequiredPlugin name="Sofa.Component.LinearSolver.Iterative"/> <!-- Needed to use components [CGLinearSolver] -->
<RequiredPlugin name="Sofa.Component.Mass"/> <!-- Needed to use components [MeshMatrixMass] -->
<RequiredPlugin name="Sofa.Component.MechanicalLoad"/> <!-- Needed to use components [TrianglePressureForceField] -->
<RequiredPlugin name="Sofa.Component.ODESolver.Backward"/> <!-- Needed to use components [EulerImplicitSolver] -->
<RequiredPlugin name="Sofa.Component.SolidMechanics.FEM.Elastic"/> <!-- Needed to use components [FastTetrahedralCorotationalForceField] -->
<RequiredPlugin name="Sofa.Component.StateContainer"/> <!-- Needed to use components [MechanicalObject] -->
<RequiredPlugin name="Sofa.Component.Topology.Container.Dynamic"/> <!-- Needed to use components [TetrahedronSetGeometryAlgorithms TetrahedronSetTopologyContainer] -->
<DefaultAnimationLoop/>
<GenerateCylinder template="Vec3" name="Cylinder" radius="0.2" height="1" resHeight="7" resCircumferential="7" resRadial="3" />
<Node name="Tetra" >
<CGLinearSolver iterations="3000" name="linear solver" tolerance="1.0e-9" threshold="1.0e-9" />
<EulerImplicitSolver name="default12" rayleighStiffness="0.01" rayleighMass="0.1" />
<TetrahedronSetTopologyContainer name="Container" tetrahedra="@../Cylinder.tetrahedra" position="@../Cylinder.output_position" createTriangleArray="1" />
<TetrahedronSetGeometryAlgorithms drawEdges="1"/>
<MechanicalObject name="dofs" showObject="1"/>
<MeshMatrixMass name="mass" lumping="1" printMass="0" massDensity="1" />
<BoxROI box="-0.01 -0.01 -0.01 0.01 0.01 0.01" drawBoxes="1" name="fixedPoint" />
<FixedProjectiveConstraint indices="@fixedPoint.indices" />
<FixedPlaneProjectiveConstraint direction="0 0 1" dmin="-0.01" dmax="0.01" />
<BoxROI box="-0.2 -0.2 0.99 0.2 0.2 1.01" drawBoxes="1" name="pressurePlane" />
<LineProjectiveConstraint direction="1 0 0" origin="0 0 0" indices="15" />
<TrianglePressureForceField showForces="1" triangleList="@pressurePlane.triangleIndices" pressure="0.01 0 -0.04" />
<FastTetrahedralCorotationalForceField poissonRatio="0.45" youngModulus="1" method="polar" />
</Node>
</Node>
def createScene(root_node):
root = root_node.addChild('root', dt="1", showBoundingTree="0", gravity="0 0 0")
root.addObject('RequiredPlugin', name="Sofa.Component.Constraint.Projective")
root.addObject('RequiredPlugin', name="Sofa.Component.Engine.Generate")
root.addObject('RequiredPlugin', name="Sofa.Component.Engine.Select")
root.addObject('RequiredPlugin', name="Sofa.Component.LinearSolver.Iterative")
root.addObject('RequiredPlugin', name="Sofa.Component.Mass")
root.addObject('RequiredPlugin', name="Sofa.Component.MechanicalLoad")
root.addObject('RequiredPlugin', name="Sofa.Component.ODESolver.Backward")
root.addObject('RequiredPlugin', name="Sofa.Component.SolidMechanics.FEM.Elastic")
root.addObject('RequiredPlugin', name="Sofa.Component.StateContainer")
root.addObject('RequiredPlugin', name="Sofa.Component.Topology.Container.Dynamic")
root.addObject('DefaultAnimationLoop', )
root.addObject('GenerateCylinder', template="Vec3", name="Cylinder", radius="0.2", height="1", resHeight="7", resCircumferential="7", resRadial="3")
tetra = root.addChild('Tetra')
tetra.addObject('CGLinearSolver', iterations="3000", name="linear solver", tolerance="1.0e-9", threshold="1.0e-9")
tetra.addObject('EulerImplicitSolver', name="default12", rayleighStiffness="0.01", rayleighMass="0.1")
tetra.addObject('TetrahedronSetTopologyContainer', name="Container", tetrahedra="@../Cylinder.tetrahedra", position="@../Cylinder.output_position", createTriangleArray="1")
tetra.addObject('TetrahedronSetGeometryAlgorithms', drawEdges="1")
tetra.addObject('MechanicalObject', name="dofs", showObject="1")
tetra.addObject('MeshMatrixMass', name="mass", lumping="1", printMass="0", massDensity="1")
tetra.addObject('BoxROI', box="-0.01 -0.01 -0.01 0.01 0.01 0.01", drawBoxes="1", name="fixedPoint")
tetra.addObject('FixedProjectiveConstraint', indices="@fixedPoint.indices")
tetra.addObject('FixedPlaneProjectiveConstraint', direction="0 0 1", dmin="-0.01", dmax="0.01")
tetra.addObject('BoxROI', box="-0.2 -0.2 0.99 0.2 0.2 1.01", drawBoxes="1", name="pressurePlane")
tetra.addObject('LineProjectiveConstraint', direction="1 0 0", origin="0 0 0", indices="15")
tetra.addObject('TrianglePressureForceField', showForces="1", triangleList="@pressurePlane.triangleIndices", pressure="0.01 0 -0.04")
tetra.addObject('FastTetrahedralCorotationalForceField', poissonRatio="0.45", youngModulus="1", method="polar")