<Node name="root" dt="0.005">
    <RequiredPlugin name="Sofa.Component.AnimationLoop"/> <!-- Needed to use components [FreeMotionAnimationLoop] -->
    <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 [LocalMinDistance] -->
    <RequiredPlugin name="Sofa.Component.Collision.Geometry"/> <!-- Needed to use components [LineCollisionModel PointCollisionModel TriangleCollisionModel] -->
    <RequiredPlugin name="Sofa.Component.Collision.Response.Contact"/> <!-- Needed to use components [CollisionResponse] -->
    <RequiredPlugin name="Sofa.Component.Constraint.Lagrangian.Correction"/> <!-- Needed to use components [UncoupledConstraintCorrection] -->
    <RequiredPlugin name="Sofa.Component.Constraint.Lagrangian.Solver"/> <!-- Needed to use components [LCPConstraintSolver] -->
    <RequiredPlugin name="Sofa.Component.IO.Mesh"/> <!-- Needed to use components [MeshOBJLoader] -->
    <RequiredPlugin name="Sofa.Component.LinearSolver.Iterative"/> <!-- Needed to use components [CGLinearSolver] -->
    <RequiredPlugin name="Sofa.Component.Mapping.NonLinear"/> <!-- Needed to use components [RigidMapping] -->
    <RequiredPlugin name="Sofa.Component.Mass"/> <!-- Needed to use components [UniformMass] -->
    <RequiredPlugin name="Sofa.Component.ODESolver.Backward"/> <!-- Needed to use components [EulerImplicitSolver] -->
    <RequiredPlugin name="Sofa.Component.Setting"/> <!-- Needed to use components [BackgroundSetting] -->
    <RequiredPlugin name="Sofa.Component.StateContainer"/> <!-- Needed to use components [MechanicalObject] -->
    <RequiredPlugin name="Sofa.Component.Topology.Container.Constant"/> <!-- Needed to use components [MeshTopology] -->
    <RequiredPlugin name="Sofa.GL.Component.Rendering3D"/> <!-- Needed to use components [OglModel] -->
    <RequiredPlugin name="SofaGraphComponent"/> <!-- Needed to use components [Gravity] -->
    
    <BackgroundSetting color="0.901960784 0.925490196 0.964705882" />
    <Gravity name="G" gravity="0 -9.81 0" />
    <CollisionPipeline name="pipeline" depth="6" verbose="0" />
    <BruteForceBroadPhase/>
    <BVHNarrowPhase/>
    <CollisionResponse name="response" response="FrictionContactConstraint" />
    <LocalMinDistance name="proximity" alarmDistance="0.15" contactDistance="0.05" angleCone="0.0" />
    <FreeMotionAnimationLoop mu="0.01" />
    <LCPConstraintSolver tolerance="0.001" maxIt="1000"/>
    <Node name="Head">
        <MeshOBJLoader name="meshLoader_1" filename="data/mesh/head.obj" handleSeams="1" />
        <OglModel name="HeadVisualModel" src="@meshLoader_1" texturename="Tutorials/StepByStep/Dentistry_Haptics/data/pics/head_baseTexBaked.png" />
        <Node name="Tongue">
            <MeshOBJLoader name="meshLoader_3" filename="data/mesh/tongue.obj" handleSeams="1" />
            <OglModel name="TongueVisualModel" src="@meshLoader_3" texturename="Tutorials/StepByStep/Dentistry_Haptics/data/pics/tongue_color.png" />
        </Node>
        <Node name="Teeth">
            <MeshOBJLoader filename="data/mesh/teeth.obj" name="loader" />
            <Node name="CollisionModel">
                <MeshTopology src="@../loader" name="ToothCollisionModel" />
                <MechanicalObject src="@../loader" name="toothState" />
                <TriangleCollisionModel name="tooth_triangle" contactStiffness="5" simulated="0" moving="0" />
                <LineCollisionModel name="tooth_line" contactStiffness="5" simulated="0" moving="0" />
                <PointCollisionModel name="tooth_point" contactStiffness="5" simulated="0" moving="0" />
            </Node>
            <Node name="VisualModel">
                <MeshOBJLoader name="meshLoader_0" filename="data/mesh/teeth.obj" handleSeams="1" />
                <OglModel name="TeethVisualModel" src="@meshLoader_0" texturename="Tutorials/StepByStep/Dentistry_Haptics/data/pics/teeth_color.png" />
            </Node>
        </Node>
    </Node>
    <Node name="Instrument">
        <EulerImplicitSolver name="ODE solver" rayleighStiffness="0.05" rayleighMass="1.0" />
        <CGLinearSolver name="linear solver" iterations="25" tolerance="1e-10" threshold="10e-10" />
        <MechanicalObject name="instrumentState" template="Rigid3" />
        <UniformMass name="mass" filename="BehaviorModels/dental_instrument.rigid" />
        <UncoupledConstraintCorrection />
        <Node name="VisualModel">
            <MeshOBJLoader name="meshLoader_2" filename="data/mesh/dental_instrument.obj" handleSeams="1" />
            <OglModel name="InstrumentVisualModel" src="@meshLoader_2" color="0.8 0.8 0.8 1.0" dz="-10" />
            <RigidMapping name="MM-&gt;VM mapping" input="@instrumentState" output="@InstrumentVisualModel" />
        </Node>
        <Node name="CollisionModel">
            <MeshOBJLoader filename="data/mesh/dental_instrument_centerline.obj" name="loader" />
            <MeshTopology src="@loader" name="InstrumentCollisionModel" />
            <MechanicalObject src="@loader" name="instrumentCollisionState" translation="0 -2 -10" />
            <LineCollisionModel name="instrument_line" contactStiffness="5" />
            <PointCollisionModel name="instrument_point" contactStiffness="5" />
            <RigidMapping name="MM-&gt;CM mapping" input="@instrumentState" output="@instrumentCollisionState" />
        </Node>
    </Node>
</Node>
