/** * @brief Create the physical model * * @param m Mass of the particle * @param s Stiffness of the spring * @param d Damping ratio of the spring * @param xx0 initial position * @param vv0 initial velocity */ void setup( SReal m, SReal s, SReal d, SReal xx0, SReal vv0 ) { mass = m; stiffness = s; damping = d; x0=xx0; v0=vv0; node = clearScene(); node->setGravity( Vec3(0,0,0) ); // The oscillator simulation::Node::SPtr oscillator = node->createChild("oscillator"); DOF = addNew<MechanicalObject1>(oscillator,"DOF"); DOF->resize(1); DOF->writePositions()[0] = Vec1(x0); DOF->writeVelocities()[0] = Vec1(v0); UniformMass1::SPtr Mass = addNew<UniformMass1>(oscillator,"mass"); Mass->mass.setValue( mass ); compliance = addNew<UniformCompliance1>(oscillator,"compliance"); compliance->isCompliance.setValue(false); compliance->compliance.setValue(1.0/stiffness); compliance->damping.setValue(damping); }
// Load the scene BezierTetrahedronTopology.sc from the Scenes directory void createScene() { // GenerateCylinder object typename sofa::component::engine::GenerateCylinder<DataTypes>::SPtr eng= sofa::modeling::addNew<sofa::component::engine::GenerateCylinder<DataTypes> >(root,"cylinder"); eng->f_radius=0.2; eng->f_height=1.0; // TetrahedronSetTopologyContainer object sofa::component::topology::TetrahedronSetTopologyContainer::SPtr container1= sofa::modeling::addNew<sofa::component::topology::TetrahedronSetTopologyContainer>(root,"Container1"); sofa::modeling::setDataLink(&eng->f_tetrahedra,&container1->d_tetrahedron); sofa::modeling::setDataLink(&eng->f_outputTetrahedraPositions,&container1->d_initPoints); // TetrahedronSetGeometryAlgorithms object typename sofa::component::topology::TetrahedronSetGeometryAlgorithms<DataTypes>::SPtr geo1= sofa::modeling::addNew<sofa::component::topology::TetrahedronSetGeometryAlgorithms<DataTypes> >(root); // mechanicalObject object typename MechanicalObject::SPtr meca1= sofa::modeling::addNew<MechanicalObject>(root); sofa::modeling::setDataLink(&eng->f_outputTetrahedraPositions,&meca1->x); // subnode simulation::Node::SPtr bezierNode = root->createChild("BezierTetrahedronTopology"); // BezierTetrahedronSetTopologyContainer sofa::component::topology::BezierTetrahedronSetTopologyContainer::SPtr container2= sofa::modeling::addNew<sofa::component::topology::BezierTetrahedronSetTopologyContainer>(bezierNode,"Container2"); // Mesh2BezierTopologicalMapping sofa::component::topology::Mesh2BezierTopologicalMapping::SPtr mapping= sofa::modeling::addNew<sofa::component::topology::Mesh2BezierTopologicalMapping>(bezierNode,"Mapping"); mapping->setTopologies(container1.get(),container2.get()); mapping->bezierTetrahedronDegree=3; // mechanicalObject object typename MechanicalObject::SPtr meca2= sofa::modeling::addNew<MechanicalObject>(bezierNode,"BezierMechanicalObject"); // BezierTetrahedronSetGeometryAlgorithms typename sofa::component::topology::BezierTetrahedronSetGeometryAlgorithms<DataTypes>::SPtr geo2= sofa::modeling::addNew<sofa::component::topology::BezierTetrahedronSetGeometryAlgorithms<DataTypes> >(bezierNode); // MeshMatrixMass typename MeshMatrixMass::SPtr mass= sofa::modeling::addNew<MeshMatrixMass >(bezierNode,"BezierMass"); mass->m_massDensity=1.0; mass->d_integrationMethod.setValue(std::string("analytical")); }