diff --git a/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp b/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp index cf81ad04..6f875dfc 100644 --- a/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp +++ b/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp @@ -43,12 +43,40 @@ using sofa::simulation::Simulation; #include #include #include +#include +#include +#include namespace py = pybind11; namespace sofapython3 { +void initRoot(Node* n, bool enableSceneChecking = true) +{ + if (enableSceneChecking) + { + auto& pluginManager = sofa::helper::system::PluginManager::getInstance(); + auto res = pluginManager.loadPlugin("SceneChecking"); + if(res == sofa::helper::system::PluginManager::PluginLoadStatus::SUCCESS || res == sofa::helper::system::PluginManager::PluginLoadStatus::ALREADY_LOADED) + { + 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); +} + PYBIND11_MODULE(Simulation, simulation) { // These are needed to force the dynamic loading of module dependencies (found in CMakeLists.txt) @@ -64,7 +92,9 @@ 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) {initRoot( n, true );}, sofapython3::doc::simulation::initRoot); + simulation.def("initRoot", [](Node* n, bool enableSceneChecking) {initRoot( n, enableSceneChecking );}, 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);