Skip to content

Commit 3b231f7

Browse files
bakpaulfredroy
andauthored
Enable scene checking when launching through python (#616)
* Add scene checking before initRoot when scenechekcing is available * Update bindings/Sofa/src/SofaPython3/Sofa/Simulation/Submodule_Simulation.cpp Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com> * fix typo * fix typo again * Add boolean to deactivate scene check --------- Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>
1 parent 6a0e08c commit 3b231f7

1 file changed

Lines changed: 31 additions & 1 deletion

File tree

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,40 @@ 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

4952
namespace sofapython3
5053
{
5154

55+
void initRoot(Node* n, bool enableSceneChecking = true)
56+
{
57+
if (enableSceneChecking)
58+
{
59+
auto& pluginManager = sofa::helper::system::PluginManager::getInstance();
60+
auto res = pluginManager.loadPlugin("SceneChecking");
61+
if(res == sofa::helper::system::PluginManager::PluginLoadStatus::SUCCESS || res == sofa::helper::system::PluginManager::PluginLoadStatus::ALREADY_LOADED)
62+
{
63+
sofa::simulation::SceneCheckerVisitor sceneCheckerVisitor;
64+
65+
for (const auto& sceneCheck : sofa::simulation::SceneCheckMainRegistry::getRegisteredSceneChecks())
66+
{
67+
sceneCheckerVisitor.addCheck(sceneCheck);
68+
}
69+
70+
sceneCheckerVisitor.validate(n, nullptr);
71+
}
72+
else
73+
{
74+
msg_warning("Could not load SceneChecking, no scene check will be performed.");
75+
}
76+
}
77+
sofa::simulation::node::initRoot(n);
78+
}
79+
5280
PYBIND11_MODULE(Simulation, simulation)
5381
{
5482
// These are needed to force the dynamic loading of module dependencies (found in CMakeLists.txt)
@@ -64,7 +92,9 @@ PYBIND11_MODULE(Simulation, simulation)
6492
simulation.def("print", [](Node* n){ sofa::simulation::node::print(n); }, sofapython3::doc::simulation::print);
6593
simulation.def("animate", [](Node* n, SReal dt=0.0){ sofa::simulation::node::animate(n, dt); },sofapython3::doc::simulation::animate);
6694
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);
95+
simulation.def("initRoot", [](Node* n) {initRoot( n, true );}, sofapython3::doc::simulation::initRoot);
96+
simulation.def("initRoot", [](Node* n, bool enableSceneChecking) {initRoot( n, enableSceneChecking );}, sofapython3::doc::simulation::initRoot);
97+
6898
simulation.def("initVisual", [](Node* n){ n->getVisualLoop()->initStep(sofa::core::visual::VisualParams::defaultInstance()); }, sofapython3::doc::simulation::initVisual);
6999
simulation.def("reset", [](Node* n){ sofa::simulation::node::reset(n); }, sofapython3::doc::simulation::reset);
70100

0 commit comments

Comments
 (0)