Skip to content

Commit 488ba54

Browse files
committed
set links
1 parent 31c0c14 commit 488ba54

File tree

1 file changed

+26
-7
lines changed
  • Sofa/Component/Collision/Detection/Algorithm/src/sofa/component/collision/detection/algorithm

1 file changed

+26
-7
lines changed

Sofa/Component/Collision/Detection/Algorithm/src/sofa/component/collision/detection/algorithm/CollisionPipeline.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ CollisionPipeline::CollisionPipeline()
6666
, d_depth(initData(&d_depth, defaultDepthValue, "depth",
6767
("Max depth of bounding trees. (default=" + std::to_string(defaultDepthValue) + ", min=?, max=?)").c_str()))
6868
{
69+
70+
m_subCollisionPipeline = sofa::core::objectmodel::New<SubCollisionPipeline>();
71+
m_subCollisionPipeline->d_depth.setParent(&this->d_depth);
72+
m_subCollisionPipeline->l_broadPhaseDetection.set(this->broadPhaseDetection);
73+
m_subCollisionPipeline->l_narrowPhaseDetection.set(this->narrowPhaseDetection);
74+
m_multiCollisionPipeline = sofa::core::objectmodel::New<MultiCollisionPipeline>();
75+
m_multiCollisionPipeline->l_subCollisionPipelines.add(m_subCollisionPipeline.get());
76+
77+
this->addSlave(m_subCollisionPipeline);
78+
this->addSlave(m_multiCollisionPipeline);
6979
}
7080

7181
void CollisionPipeline::init()
@@ -74,17 +84,26 @@ void CollisionPipeline::init()
7484

7585
msg_info() << "CollisionPipeline is now a wrapper to MultiCollisionPipeline with a single SubCollisionPipeline.";
7686
msg_info() << "If you want more flexibility, use directly the components MultiCollisionPipeline and SubCollisionPipeline, with their respective Data.";
87+
88+
auto context = this->getContext();
89+
// set the whole collision models list to the sub collision pipeline
90+
sofa::type::vector<sofa::core::CollisionModel::SPtr> collisionModels;
91+
context->get<sofa::core::CollisionModel, sofa::type::vector<sofa::core::CollisionModel::SPtr>>(&collisionModels, BaseContext::SearchRoot);
92+
93+
for(auto collisionModel : collisionModels)
94+
{
95+
m_subCollisionPipeline->l_collisionModels.add(collisionModel.get());
96+
}
7797

78-
m_subCollisionPipeline = sofa::core::objectmodel::New<SubCollisionPipeline>();
79-
m_subCollisionPipeline->d_depth.setParent(&this->d_depth);
98+
// set the other component to the sub collision pipeline (which is implcitely searched/set by PipelineImpl)
99+
m_subCollisionPipeline->l_intersectionMethod.set(this->intersectionMethod);
80100
m_subCollisionPipeline->l_broadPhaseDetection.set(this->broadPhaseDetection);
81101
m_subCollisionPipeline->l_narrowPhaseDetection.set(this->narrowPhaseDetection);
82-
m_multiCollisionPipeline = sofa::core::objectmodel::New<MultiCollisionPipeline>();
83-
m_multiCollisionPipeline->l_subCollisionPipelines.add(m_subCollisionPipeline.get());
102+
m_subCollisionPipeline->l_contactManager.set(this->contactManager);
103+
104+
m_subCollisionPipeline->init();
105+
m_multiCollisionPipeline->init();
84106

85-
this->addSlave(m_subCollisionPipeline);
86-
this->addSlave(m_multiCollisionPipeline);
87-
88107
/// Insure that all the value provided by the user are valid and report message if it is not.
89108
checkDataValues() ;
90109
}

0 commit comments

Comments
 (0)