From abb0de63e13b3729197fe82c2773d462850661e0 Mon Sep 17 00:00:00 2001 From: bakpaul Date: Thu, 11 Jun 2026 15:23:55 +0200 Subject: [PATCH] Add scene checking before initRoot when scenechekcing is available --- .../Sofa/Simulation/Submodule_Simulation.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp b/bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp index cf81ad049..c93490355 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);