Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ void TestCollisionPipeline::checkCollisionPipelineWithNoAttributes()
" <CollisionPipeline name='pipeline'/> \n"
" <BruteForceBroadPhase/> \n"
" <BVHNarrowPhase/> \n"
" <CollisionResponse/> \n"
" <CollisionResponse response='PenalityContactForceField'/> \n"
" <DiscreteIntersection name='interaction'/> \n"
"</Node> \n" ;

Expand All @@ -126,7 +126,7 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingIntersection()
" <CollisionPipeline name='pipeline'/> \n"
" <BruteForceBroadPhase/> \n"
" <BVHNarrowPhase/> \n"
" <CollisionResponse/> \n"
" <CollisionResponse response='PenalityContactForceField'/> \n"
"</Node> \n" ;

root = SceneLoaderXML::loadFromMemory ("testscene", scene.str().c_str());
Expand All @@ -147,7 +147,7 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingBroadPhase()
"<Node name='Root' gravity='0 -9.81 0' time='0' animate='0' > \n"
" <CollisionPipeline name='pipeline'/> \n"
" <BVHNarrowPhase/> \n"
" <CollisionResponse/> \n"
" <CollisionResponse response='PenalityContactForceField'/> \n"
" <DiscreteIntersection name='interaction'/> \n"
"</Node> \n" ;

Expand All @@ -168,7 +168,7 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingNarrowPhase()
"<Node name='Root' gravity='0 -9.81 0' time='0' animate='0' > \n"
" <CollisionPipeline name='pipeline'/> \n"
" <BruteForceBroadPhase/> \n"
" <CollisionResponse/> \n"
" <CollisionResponse response='PenalityContactForceField'/> \n"
" <DiscreteIntersection name='interaction'/> \n"
"</Node> \n" ;

Expand Down Expand Up @@ -210,7 +210,7 @@ int TestCollisionPipeline::checkCollisionPipelineWithMonkeyValueForDepth(int dva
" <CollisionPipeline name='pipeline' depth='"<< dvalue <<"'/> \n"
" <BruteForceBroadPhase/> \n"
" <BVHNarrowPhase/> \n"
" <CollisionResponse/> \n"
" <CollisionResponse response='PenalityContactForceField'/> \n"
" <DiscreteIntersection name='interaction'/> \n"
"</Node> \n" ;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,28 @@ sofa::helper::OptionsGroup CollisionResponse::initializeResponseOptions(sofa::co
}

sofa::helper::OptionsGroup responseOptions(listResponse);
if (listResponse.contains("PenalityContactForceField"))
responseOptions.setSelectedItem("PenalityContactForceField");
Comment thread
hugtalbot marked this conversation as resolved.

return responseOptions;
}

void CollisionResponse::init()
{
Inherit1::init();

if(!d_response.isSet())
{
msg_error() << "No response method has been set";
return;
}

if (d_response.getValue().size() == 0)
{
d_response.setValue(initializeResponseOptions(getContext()));
sofa::helper::OptionsGroup responseOptions = initializeResponseOptions(getContext());
msg_error() << "Response method is wrongly set. Option list is: " << responseOptions.getItemNames();
d_response.setValue(responseOptions);
}
else
{
msg_info() << "Valid response method: " << d_response.getValue().getSelectedItem();
}
}

Expand Down Expand Up @@ -111,7 +121,6 @@ void CollisionResponse::setDefaultResponseType(const std::string &responseT)
}
}


void CollisionResponse::changeInstance(Instance inst)
{
core::collision::ContactManager::changeInstance(inst);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,13 @@ public :
{
context->addObject(obj);
sofa::helper::OptionsGroup options = initializeResponseOptions(context);
obj->d_response.setValue(options);
const std::string responseName = arg->getAttribute("response","");
// Check if the response is valid and not empty, only then set the response
if(options.isInOptionsList(responseName) >= 0 && responseName != "")
{
options.setSelectedItem(responseName);
obj->d_response.setValue(options);
}
}

if (arg)
Expand Down Expand Up @@ -112,7 +118,6 @@ public :
/// The number of contacts corresponds to the number of collision models
/// currently in contact with a collision model.
void setNumberOfContacts() const;

};


Expand Down
5 changes: 5 additions & 0 deletions Sofa/framework/Helper/src/sofa/helper/OptionsGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ void OptionsGroup::setNbItems(const size_type nbofRadioButton )
selectedItem = 0;
}
///////////////////////////////////////
type::vector<std::string> OptionsGroup::getItemNames()
{
return textItems;
}
///////////////////////////////////////
void OptionsGroup::setItemName(const unsigned int id_item, const std::string& name )
{
if(id_item < textItems.size())
Expand Down
3 changes: 3 additions & 0 deletions Sofa/framework/Helper/src/sofa/helper/OptionsGroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ public :
///Set the name of the id-th item
void setItemName( unsigned int id_item, const std::string& name );

///Get the vector of names available
type::vector<std::string> getItemNames();

template <class T>
void setNames(const std::initializer_list<T>& list);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
<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] -->
<DefaultAnimationLoop />
<DefaultVisualManagerLoop />
<CollisionPipeline />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse />
<CollisionPipeline />
<CollisionResponse response="PenalityContactForceField"/>
<MinProximityIntersection alarmDistance="1" contactDistance="0.5"/>
<DefaultAnimationLoop />
<DefaultVisualManagerLoop />
<Node>
<EulerImplicitSolver name="cg odesolver" printLog="false" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="100" name="linear solver" threshold="1e-20" tolerance="1e-20" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<CollisionPipeline verbose="0" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<NewProximityIntersection alarmDistance="0.002" contactDistance="0.001" />
<Node name="Floor">
<RegularGridTopology
Expand Down
2 changes: 1 addition & 1 deletion examples/Component/Mapping/Linear/CenterOfMassMapping.scn
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<VisualStyle displayFlags="showVisual showForceFields showCollisionModels showMechanicalMappings showWireframe" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="default1" />
<CollisionResponse name="default1" response="PenalityContactForceField"/>
<CollisionPipeline name="default2" />
<MinProximityIntersection name="default3" alarmDistance="1" contactDistance="0.5"/>
<DefaultAnimationLoop/>
Expand Down
2 changes: 1 addition & 1 deletion examples/Component/Mapping/Linear/SkinningMapping.scn
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<VisualStyle displayFlags="showBehaviorModels showCollisionModels" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="default1" />
<CollisionResponse name="default1" response="PenalityContactForceField"/>
<CollisionPipeline name="default2" />
<MinProximityIntersection name="default3" alarmDistance="1" contactDistance="0.5"/>
<DefaultAnimationLoop/>
Expand Down
2 changes: 1 addition & 1 deletion examples/Component/Mapping/Linear/SubsetMapping.scn
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<LocalMinDistance name="Proximity" alarmDistance="0.006" contactDistance="0.001" coneFactor="0.3" angleCone="0.01" filterIntersection="true"/>
<CollisionResponse name="Response" response="NeedleContact"/>
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="sutureSoftCubes">
Expand Down
2 changes: 1 addition & 1 deletion examples/Component/MechanicalLoad/EllipsoidForceField.scn
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<CollisionPipeline verbose="0" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<NewProximityIntersection alarmDistance="0.002" contactDistance="0.001" />
<DefaultAnimationLoop/>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<CollisionPipeline verbose="0" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<NewProximityIntersection alarmDistance="0.002" contactDistance="0.001" />
<Node name="RotatingObstacle">
<EulerExplicitSolver name="odesolver" printLog="false" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<CollisionPipeline verbose="0" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>
<NewProximityIntersection alarmDistance="0.002" contactDistance="0.001" />
<Node name="SquareCloth1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<CollisionPipeline verbose="0" />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse name="Response"/>
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DiscreteIntersection/>

<MeshOBJLoader name="loader" filename="mesh/dragon.obj" />
Expand Down
5 changes: 1 addition & 4 deletions examples/Demos/fallingBeamAugmentedLagrangianCollision.scn
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
<RequiredPlugin name="Sofa.Component.Visual"/> <!-- Needed to use components [VisualStyle] -->
<RequiredPlugin name="Sofa.GL.Component.Rendering3D"/> <!-- Needed to use components [OglModel] -->
<RequiredPlugin name="Sofa.GUI.Component"/> <!-- Needed to use components [ConstraintAttachButtonSetting] -->
Container,TriangleSetTopologyModifier] -->
</Node>

<VisualStyle displayFlags="showForceFields"/>
Expand All @@ -32,7 +31,7 @@
<CollisionPipeline name="Pipeline" />
<BruteForceBroadPhase name="BroadPhase" />
<BVHNarrowPhase name="NarrowPhase" />
<CollisionResponse name="ContactManager" response="AugmentedLagrangian" responseParams="mu=0.5&epsilon=10" />
<CollisionResponse name="ContactManager" response="AugmentedLagrangianResponseConstraint" responseParams="mu=0.5&epsilon=10" />
<NewProximityIntersection name="Intersection" alarmDistance="0.02" contactDistance="0.001" />

<Node name="BEAMVOLUME">
Expand Down Expand Up @@ -88,5 +87,3 @@
</Node>

</Node>


Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<CollisionPipeline />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse />
<CollisionResponse response="PenalityContactForceField"/>
<MinProximityIntersection alarmDistance="0.5" contactDistance="0.2" />
<DefaultAnimationLoop/>

Expand Down
2 changes: 1 addition & 1 deletion examples/Tutorials/Collision/ModelizationSphereBased.scn
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<CollisionPipeline />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse />
<CollisionResponse response="PenalityContactForceField"/>
<MinProximityIntersection alarmDistance="1" contactDistance="0.5"/>
<DefaultAnimationLoop/>

Expand Down
2 changes: 1 addition & 1 deletion examples/Tutorials/Collision/ModelizationTriangleBased.scn
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<CollisionPipeline />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse />
<CollisionResponse response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<MinProximityIntersection alarmDistance="1" contactDistance="0.5"/>
Expand Down
2 changes: 1 addition & 1 deletion examples/Tutorials/Collision/MultipleObjectsTwoCubes.scn
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<CollisionPipeline />
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<CollisionResponse />
<CollisionResponse response="PenalityContactForceField"/>
<MinProximityIntersection alarmDistance="1" contactDistance="0.5"/>
<DefaultAnimationLoop/>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Triangles Mesh">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Cube">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Hexa Mesh">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.3" contactDistance="0.2" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Pendulum Static Mesh">
Expand Down
2 changes: 1 addition & 1 deletion examples/Tutorials/Topologies/TopologyLinearMesh.scn
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.3" contactDistance="0.2" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>
<Node name="Pendulum Static Mesh">
<MechanicalObject template="Vec3" name="DOF" position="0 0 4 1 0 4 2 0 4 3 0 4 4 0 4 5 0 4" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Quads Mesh">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Cloth Dynamic Mesh (blue)">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Tetrahedrons Mesh">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Triangles Mesh">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<BruteForceBroadPhase/>
<BVHNarrowPhase/>
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<CollisionResponse name="Response" />
<CollisionResponse name="Response" response="PenalityContactForceField"/>
<DefaultAnimationLoop/>

<Node name="Cylinder Static Mesh">
Expand Down