Skip to content

Commit abb0de6

Browse files
committed
Add scene checking before initRoot when scenechekcing is available
1 parent e6fb484 commit abb0de6

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ using sofa::simulation::Simulation;
4343
#include <sofa/simulation/init.h>
4444
#include <sofa/simulation/common/init.h>
4545
#include <sofa/simulation/graph/init.h>
46+
#include <sofa/simulation/SceneCheckerVisitor.h>
47+
#include <sofa/simulation/SceneCheckMainRegistry.h>
48+
#include <sofa/helper/system/PluginManager.h>
4649

4750
namespace py = pybind11;
4851

@@ -64,7 +67,27 @@ PYBIND11_MODULE(Simulation, simulation)
6467
simulation.def("print", [](Node* n){ sofa::simulation::node::print(n); }, sofapython3::doc::simulation::print);
6568
simulation.def("animate", [](Node* n, SReal dt=0.0){ sofa::simulation::node::animate(n, dt); },sofapython3::doc::simulation::animate);
6669
simulation.def("init", [](Node* n){ sofa::simulation::node::init(n); }, sofapython3::doc::simulation::init);
67-
simulation.def("initRoot", [](Node* n){ sofa::simulation::node::initRoot(n); }, sofapython3::doc::simulation::initRoot);
70+
simulation.def("initRoot", [](Node* n)
71+
{
72+
auto& pluginManager = sofa::helper::system::PluginManager::getInstance();
73+
auto res = pluginManager.loadPlugin("SceneChecking");
74+
if(res == sofa::helper::system::PluginManager::PluginLoadStatus::SUCCESS)
75+
{
76+
sofa::simulation::SceneCheckerVisitor sceneCheckerVisitor;
77+
78+
for (const auto& sceneCheck : sofa::simulation::SceneCheckMainRegistry::getRegisteredSceneChecks())
79+
{
80+
sceneCheckerVisitor.addCheck(sceneCheck);
81+
}
82+
83+
sceneCheckerVisitor.validate(n, nullptr);
84+
}
85+
else
86+
{
87+
msg_warning("Could not load SceneChecking, no scene check will be performed.");
88+
}
89+
sofa::simulation::node::initRoot(n);
90+
}, sofapython3::doc::simulation::initRoot);
6891
simulation.def("initVisual", [](Node* n){ n->getVisualLoop()->initStep(sofa::core::visual::VisualParams::defaultInstance()); }, sofapython3::doc::simulation::initVisual);
6992
simulation.def("reset", [](Node* n){ sofa::simulation::node::reset(n); }, sofapython3::doc::simulation::reset);
7093

0 commit comments

Comments
 (0)