@@ -72,12 +72,14 @@ class TestCollisionPipeline : public BaseSimulationTest {
7272 void checkCollisionPipelineWithMissingBroadPhase ();
7373 void checkCollisionPipelineWithMissingNarrowPhase ();
7474 void checkCollisionPipelineWithMissingContactManager ();
75+ void checkCollisionPipelineWithMissingCollisionModel ();
7576 int checkCollisionPipelineWithMonkeyValueForDepth (int value);
7677
7778 void doSetUp () override
7879 {
7980 this ->loadPlugins ({
8081 Sofa.Component .StateContainer ,
82+ Sofa.Component .Collision .Geometry ,
8183 Sofa.Component .Collision .Detection .Algorithm ,
8284 Sofa.Component .Collision .Detection .Intersection ,
8385 Sofa.Component .Collision .Response .Contact
@@ -104,6 +106,10 @@ void TestCollisionPipeline::checkCollisionPipelineWithNoAttributes()
104106 " <BVHNarrowPhase/> \n "
105107 " <CollisionResponse response='PenalityContactForceField'/> \n "
106108 " <DiscreteIntersection name='interaction'/> \n "
109+ " <Node name='Model'/> \n "
110+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
111+ " <SphereCollisionModel name='SphereModel'/> \n "
112+ " </Node> \n "
107113 " </Node> \n " ;
108114
109115 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
@@ -127,6 +133,10 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingIntersection()
127133 " <BruteForceBroadPhase/> \n "
128134 " <BVHNarrowPhase/> \n "
129135 " <CollisionResponse response='PenalityContactForceField'/> \n "
136+ " <Node name='Model'/> \n "
137+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
138+ " <SphereCollisionModel name='SphereModel'/> \n "
139+ " </Node> \n "
130140 " </Node> \n " ;
131141
132142 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
@@ -149,6 +159,10 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingBroadPhase()
149159 " <BVHNarrowPhase/> \n "
150160 " <CollisionResponse response='PenalityContactForceField'/> \n "
151161 " <DiscreteIntersection name='interaction'/> \n "
162+ " <Node name='Model'/> \n "
163+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
164+ " <SphereCollisionModel name='SphereModel'/> \n "
165+ " </Node> \n "
152166 " </Node> \n " ;
153167
154168 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
@@ -170,8 +184,12 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingNarrowPhase()
170184 " <BruteForceBroadPhase/> \n "
171185 " <CollisionResponse response='PenalityContactForceField'/> \n "
172186 " <DiscreteIntersection name='interaction'/> \n "
187+ " <Node name='Model'/> \n "
188+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
189+ " <SphereCollisionModel name='SphereModel'/> \n "
190+ " </Node> \n "
173191 " </Node> \n " ;
174-
192+
175193 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
176194 ASSERT_NE (root.get (), nullptr ) ;
177195 root->init (sofa::core::execparams::defaultInstance ()) ;
@@ -191,6 +209,34 @@ void TestCollisionPipeline::checkCollisionPipelineWithMissingContactManager()
191209 " <BruteForceBroadPhase/> \n "
192210 " <BVHNarrowPhase/> \n "
193211 " <DiscreteIntersection name='interaction'/> \n "
212+ " <Node name='Model'/> \n "
213+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
214+ " <SphereCollisionModel name='SphereModel'/> \n "
215+ " </Node> \n "
216+ " </Node> \n " ;
217+
218+ root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
219+ ASSERT_NE (root.get (), nullptr ) ;
220+ root->init (sofa::core::execparams::defaultInstance ()) ;
221+
222+ BaseObject* clp = root->getObject (" pipeline" ) ;
223+ ASSERT_NE (clp, nullptr ) ;
224+
225+ }
226+
227+ void TestCollisionPipeline::checkCollisionPipelineWithMissingCollisionModel ()
228+ {
229+ EXPECT_MSG_EMIT (Warning) ;
230+ EXPECT_MSG_NOEMIT (Error) ;
231+
232+ std::stringstream scene ;
233+ scene << " <?xml version='1.0'?> \n "
234+ " <Node name='Root' gravity='0 -9.81 0' time='0' animate='0' > \n "
235+ " <CollisionPipeline name='pipeline'/> \n "
236+ " <BruteForceBroadPhase/> \n "
237+ " <BVHNarrowPhase/> \n "
238+ " <CollisionResponse response='PenalityContactForceField'/> \n "
239+ " <DiscreteIntersection name='interaction'/> \n "
194240 " </Node> \n " ;
195241
196242 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
@@ -212,6 +258,10 @@ int TestCollisionPipeline::checkCollisionPipelineWithMonkeyValueForDepth(int dva
212258 " <BVHNarrowPhase/> \n "
213259 " <CollisionResponse response='PenalityContactForceField'/> \n "
214260 " <DiscreteIntersection name='interaction'/> \n "
261+ " <Node name='Model'/> \n "
262+ " <MechanicalObject template='Vec3' name='Container' position='0 0 0'/> \n "
263+ " <SphereCollisionModel name='SphereModel'/> \n "
264+ " </Node> \n "
215265 " </Node> \n " ;
216266
217267 root = SceneLoaderXML::loadFromMemory (" testscene" , scene.str ().c_str ());
@@ -252,6 +302,12 @@ TEST_F(TestCollisionPipeline, checkCollisionPipelineWithMissingContactManager)
252302 this ->checkCollisionPipelineWithMissingContactManager ();
253303}
254304
305+ TEST_F (TestCollisionPipeline, checkCollisionPipelineWithMissingCollisionModel)
306+ {
307+ this ->checkCollisionPipelineWithMissingCollisionModel ();
308+ }
309+
310+
255311TEST_F (TestCollisionPipeline, checkCollisionPipelineWithMonkeyValueForDepth_OpenIssue)
256312{
257313 const std::vector<std::pair<int , bool >> testvalues = {
0 commit comments