diff --git a/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp b/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp index cf81ad04..c9349035 100644 --- a/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp +++ b/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp @@ -43,6 +43,9 @@ using sofa::simulation::Simulation; #include #include #include +#include +#include +#include namespace py = pybind11; @@ -64,7 +67,27 @@ PYBIND11_MODULE(Simulation, simulation) simulation.def("print", [](Node* n){ sofa::simulation::node::print(n); }, sofapython3::doc::simulation::print); simulation.def("animate", [](Node* n, SReal dt=0.0){ sofa::simulation::node::animate(n, dt); },sofapython3::doc::simulation::animate); simulation.def("init", [](Node* n){ sofa::simulation::node::init(n); }, sofapython3::doc::simulation::init); - simulation.def("initRoot", [](Node* n){ sofa::simulation::node::initRoot(n); }, sofapython3::doc::simulation::initRoot); + simulation.def("initRoot", [](Node* n) + { + auto& pluginManager = sofa::helper::system::PluginManager::getInstance(); + auto res = pluginManager.loadPlugin("SceneChecking"); + if(res == sofa::helper::system::PluginManager::PluginLoadStatus::SUCCESS) + { + sofa::simulation::SceneCheckerVisitor sceneCheckerVisitor; + + for (const auto& sceneCheck : sofa::simulation::SceneCheckMainRegistry::getRegisteredSceneChecks()) + { + sceneCheckerVisitor.addCheck(sceneCheck); + } + + sceneCheckerVisitor.validate(n, nullptr); + } + else + { + msg_warning("Could not load SceneChecking, no scene check will be performed."); + } + sofa::simulation::node::initRoot(n); + }, sofapython3::doc::simulation::initRoot); simulation.def("initVisual", [](Node* n){ n->getVisualLoop()->initStep(sofa::core::visual::VisualParams::defaultInstance()); }, sofapython3::doc::simulation::initVisual); simulation.def("reset", [](Node* n){ sofa::simulation::node::reset(n); }, sofapython3::doc::simulation::reset);