From 00a763a002ff118300f736ea64ea6c6646f6bc00 Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Tue, 12 Aug 2025 22:08:37 +0200 Subject: [PATCH 1/6] [src][algorithm] Apply new factory registration mechanism --- .../Find2DClosestProximityAlgorithm.cpp | 18 +++++++++--------- .../FindClosestProximityAlgorithm.cpp | 18 +++++++++--------- .../algorithm/InsertionAlgorithm.cpp | 17 ++++++++--------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/sofa/collisionAlgorithm/algorithm/Find2DClosestProximityAlgorithm.cpp b/src/sofa/collisionAlgorithm/algorithm/Find2DClosestProximityAlgorithm.cpp index cbfb6b55..7d56c241 100644 --- a/src/sofa/collisionAlgorithm/algorithm/Find2DClosestProximityAlgorithm.cpp +++ b/src/sofa/collisionAlgorithm/algorithm/Find2DClosestProximityAlgorithm.cpp @@ -1,13 +1,13 @@ #include #include -namespace sofa::collisionAlgorithm { - -int Find2DClosestProximityAlgorithmClass = core::RegisterObject("Find2DClosestProximityAlgorithm") -.add< Find2DClosestProximityAlgorithm >(); - - +namespace sofa::collisionAlgorithm +{ +void registerFind2DClosestProximityAlgorithm(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "An algorithm to find the closest proximity between two BaseGeometry types in 2D") + .add()); } - - - +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/algorithm/FindClosestProximityAlgorithm.cpp b/src/sofa/collisionAlgorithm/algorithm/FindClosestProximityAlgorithm.cpp index 1c9b898c..397d6aee 100644 --- a/src/sofa/collisionAlgorithm/algorithm/FindClosestProximityAlgorithm.cpp +++ b/src/sofa/collisionAlgorithm/algorithm/FindClosestProximityAlgorithm.cpp @@ -1,13 +1,13 @@ #include #include -namespace sofa::collisionAlgorithm { - -int FindClosestProximityAlgorithmClass = core::RegisterObject("FindClosestProximityAlgorithm") -.add< FindClosestProximityAlgorithm >(); - - +namespace sofa::collisionAlgorithm +{ +void registerFindClosestProximityAlgorithm(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "An algorithm to find the closest proximity between two BaseGeometry types") + .add()); } - - - +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/algorithm/InsertionAlgorithm.cpp b/src/sofa/collisionAlgorithm/algorithm/InsertionAlgorithm.cpp index b9b1e602..6bce8091 100644 --- a/src/sofa/collisionAlgorithm/algorithm/InsertionAlgorithm.cpp +++ b/src/sofa/collisionAlgorithm/algorithm/InsertionAlgorithm.cpp @@ -1,13 +1,12 @@ #include #include -namespace sofa::collisionAlgorithm { - -int InsertionAlgorithmClass = core::RegisterObject("InsertionAlgorithm") -.add< InsertionAlgorithm >(); - - +namespace sofa::collisionAlgorithm +{ +void registerInsertionAlgorithm(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData( + "A class implementing a customized needle insertion algorithm") + .add()); } - - - +} // namespace sofa::collisionAlgorithm From 15a4d31ca8195d83c67cafb2c78e171c6e3d8756 Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Tue, 12 Aug 2025 22:17:58 +0200 Subject: [PATCH 2/6] [src][broadphase] Apply new factory registration mechanism --- .../broadphase/AABBBroadPhase.cpp | 21 ++++++++++++------- .../broadphase/FullAABBBroadPhase.cpp | 11 +++++----- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/sofa/collisionAlgorithm/broadphase/AABBBroadPhase.cpp b/src/sofa/collisionAlgorithm/broadphase/AABBBroadPhase.cpp index 7dc68256..5eb097bf 100644 --- a/src/sofa/collisionAlgorithm/broadphase/AABBBroadPhase.cpp +++ b/src/sofa/collisionAlgorithm/broadphase/AABBBroadPhase.cpp @@ -1,13 +1,18 @@ #include #include -namespace sofa::collisionAlgorithm { - -int AABBBroadPhaseClass = core::RegisterObject(R"( -**AABBBroadPhase** is a real-time collision detection component that uses the Axis-Aligned Bounding Box (AABB) approach for broad-phase collision handling. - -It organizes elements into a 3D spatial grid, efficiently indexing and retrieving them to identify potential collisions, optimizing the process of narrowing down collision checks for more precise detection in 3D simulations. -)") -.add< AABBBroadPhase >(); +namespace sofa::collisionAlgorithm +{ +void registerAABBBroadPhase(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData(R"( + **AABBBroadPhase** is a real-time collision detection component that uses the + Axis-Aligned Bounding Box (AABB) approach for broad-phase collision handling. + It organizes elements into a 3D spatial grid, efficiently indexing and retrieving them + to identify potential collisions, optimizing the process of narrowing down collision + checks for more precise detection in 3D simulations. + )") + .add()); } +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/broadphase/FullAABBBroadPhase.cpp b/src/sofa/collisionAlgorithm/broadphase/FullAABBBroadPhase.cpp index 03faaba8..e19aef85 100644 --- a/src/sofa/collisionAlgorithm/broadphase/FullAABBBroadPhase.cpp +++ b/src/sofa/collisionAlgorithm/broadphase/FullAABBBroadPhase.cpp @@ -1,9 +1,10 @@ #include #include -namespace sofa::collisionAlgorithm { - -int FullAABBBroadPhaseClass = core::RegisterObject("FullAABBBroadPhase") -.add< FullAABBBroadPhase >(); - +namespace sofa::collisionAlgorithm +{ +void registerFullAABBBroadPhase(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData("").add()); } +} // namespace sofa::collisionAlgorithm From 87f2dc0ca31d74a37c2f6687aacfd9343dbf8603 Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Tue, 12 Aug 2025 22:27:59 +0200 Subject: [PATCH 3/6] [src][CollisionPipeline] Apply new factory registration mechanism --- src/sofa/collisionAlgorithm/CollisionPipeline.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sofa/collisionAlgorithm/CollisionPipeline.cpp b/src/sofa/collisionAlgorithm/CollisionPipeline.cpp index 8f2120f7..a7f0603d 100644 --- a/src/sofa/collisionAlgorithm/CollisionPipeline.cpp +++ b/src/sofa/collisionAlgorithm/CollisionPipeline.cpp @@ -1,9 +1,13 @@ #include #include -namespace sofa::collisionAlgorithm { - -int CollisionLoopClass = core::RegisterObject("CollisionLoop") -.add< CollisionLoop >(); - +namespace sofa::collisionAlgorithm +{ +void registerCollisionLoop(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "A collision pipeline customized for proximity detection during needle insertion") + .add()); } +} // namespace sofa::collisionAlgorithm From 2ae269b5dc11f18d87c7e92ee6961d494d935a70 Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Tue, 12 Aug 2025 22:31:25 +0200 Subject: [PATCH 4/6] [src][filters] Apply new factory registration mechanism --- .../collisionAlgorithm/filters/DistanceFilter.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sofa/collisionAlgorithm/filters/DistanceFilter.cpp b/src/sofa/collisionAlgorithm/filters/DistanceFilter.cpp index 2f683704..57043729 100644 --- a/src/sofa/collisionAlgorithm/filters/DistanceFilter.cpp +++ b/src/sofa/collisionAlgorithm/filters/DistanceFilter.cpp @@ -1,9 +1,13 @@ #include #include -namespace sofa::collisionAlgorithm { - -int DistanceFilterClass = core::RegisterObject("DistanceFilter") -.add< DistanceFilter >(); - +namespace sofa::collisionAlgorithm +{ +void registerDistanceFilter(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "This class filters detected proximities based on their distance from source") + .add()); } +} // namespace sofa::collisionAlgorithm From b44def5d6cc5aedbc15849f35fd91c559504ef8c Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Tue, 12 Aug 2025 22:36:32 +0200 Subject: [PATCH 5/6] [src][geometry] Apply new factory registration mechanism --- .../geometry/EdgeGeometry.cpp | 18 ++++++++--------- .../geometry/PointGeometry.cpp | 20 +++++++++---------- .../geometry/SubsetGeometry.cpp | 19 ++++++++---------- .../geometry/TetrahedronGeometry.cpp | 18 ++++++++--------- .../geometry/TriangleGeometry.cpp | 14 ++++++++----- 5 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/sofa/collisionAlgorithm/geometry/EdgeGeometry.cpp b/src/sofa/collisionAlgorithm/geometry/EdgeGeometry.cpp index d7ac98e2..a4ec0755 100644 --- a/src/sofa/collisionAlgorithm/geometry/EdgeGeometry.cpp +++ b/src/sofa/collisionAlgorithm/geometry/EdgeGeometry.cpp @@ -1,13 +1,13 @@ #include #include -namespace sofa { - -namespace collisionAlgorithm { - -int EdgeGeometryClass = core::RegisterObject("EdgeGeometry") -.add< EdgeGeometry >(); - -} - +namespace sofa::collisionAlgorithm +{ +void registerEdgeGeometry(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "A class bridging edge topological information with the proximity detection algorithm") + .add >()); } +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/geometry/PointGeometry.cpp b/src/sofa/collisionAlgorithm/geometry/PointGeometry.cpp index 95e8042e..24b54f66 100644 --- a/src/sofa/collisionAlgorithm/geometry/PointGeometry.cpp +++ b/src/sofa/collisionAlgorithm/geometry/PointGeometry.cpp @@ -1,15 +1,13 @@ #include #include -namespace sofa { - -namespace collisionAlgorithm { - -int PointGeometryClass = core::RegisterObject("PointGeometry") -.add< PointGeometry >(); - +namespace sofa::collisionAlgorithm +{ +void registerPointGeometry(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData( + "A class bridging point topological information with the proximity detection algorithm") + .add >()); } - -} - - +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/geometry/SubsetGeometry.cpp b/src/sofa/collisionAlgorithm/geometry/SubsetGeometry.cpp index 121802da..90143a4f 100644 --- a/src/sofa/collisionAlgorithm/geometry/SubsetGeometry.cpp +++ b/src/sofa/collisionAlgorithm/geometry/SubsetGeometry.cpp @@ -1,15 +1,12 @@ #include #include -namespace sofa { - -namespace collisionAlgorithm { - -int SubsetGeometryClass = core::RegisterObject("SubsetGeometry") -.add< SubsetGeometry >(); - +namespace sofa::collisionAlgorithm +{ +void registerSubsetGeometry(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData("") + .add >()); } - -} - - +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/geometry/TetrahedronGeometry.cpp b/src/sofa/collisionAlgorithm/geometry/TetrahedronGeometry.cpp index 0e3afa07..aac4b8d5 100644 --- a/src/sofa/collisionAlgorithm/geometry/TetrahedronGeometry.cpp +++ b/src/sofa/collisionAlgorithm/geometry/TetrahedronGeometry.cpp @@ -1,13 +1,13 @@ #include #include -namespace sofa { - -namespace collisionAlgorithm { - -int TetrahedronGeometryClass = core::RegisterObject("TetrahedronGeometry") -.add< TetrahedronGeometry >(); - -} - +namespace sofa::collisionAlgorithm +{ +void registerTetrahedronGeometry(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData( + "A class bridging tetrahedron topological information with " + "the proximity detection algorithm") + .add >()); } +} // namespace sofa::collisionAlgorithm diff --git a/src/sofa/collisionAlgorithm/geometry/TriangleGeometry.cpp b/src/sofa/collisionAlgorithm/geometry/TriangleGeometry.cpp index 007a1605..7790b145 100644 --- a/src/sofa/collisionAlgorithm/geometry/TriangleGeometry.cpp +++ b/src/sofa/collisionAlgorithm/geometry/TriangleGeometry.cpp @@ -1,9 +1,13 @@ #include #include -namespace sofa::collisionAlgorithm { - -int TriangleGeometryClass = core::RegisterObject("TriangleGeometry") -.add< TriangleGeometry >(); - +namespace sofa::collisionAlgorithm +{ +void registerTriangleGeometry(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects( + sofa::core::ObjectRegistrationData("A class bridging triangle topological information with " + "the proximity detection algorithm") + .add >()); } +} // namespace sofa::collisionAlgorithm From c1b7a1bf52c8db722d754fed190674d0ef9d5108 Mon Sep 17 00:00:00 2001 From: Themis Skamagkis Date: Wed, 13 Aug 2025 00:04:07 +0200 Subject: [PATCH 6/6] [src] Wrap up new factory registration mechanism in initPlugin.cpp --- src/sofa/collisionAlgorithm/initPlugin.cpp | 142 +++++++++++++-------- 1 file changed, 91 insertions(+), 51 deletions(-) diff --git a/src/sofa/collisionAlgorithm/initPlugin.cpp b/src/sofa/collisionAlgorithm/initPlugin.cpp index 644c4c6e..94288219 100644 --- a/src/sofa/collisionAlgorithm/initPlugin.cpp +++ b/src/sofa/collisionAlgorithm/initPlugin.cpp @@ -1,70 +1,110 @@ -#include -#include +#include #include +#include #include -#include #include #include +#include + #define Q(x) #x #define QUOTE(x) Q(x) -namespace sofa { - -namespace collisionAlgorithm { - - //Here are just several convenient functions to help user to know what contains the plugin - - extern "C" { - void initExternalModule(); - const char* getModuleName(); - const char* getModuleVersion(); - const char* getModuleLicense(); - const char* getModuleDescription(); - const char* getModuleComponentList(); - } - - void initExternalModule() - { - static bool first = true; - if (first) - { - first = false; +namespace sofa::collisionAlgorithm +{ + +// CollisionPipeline +extern void registerCollisionLoop(sofa::core::ObjectFactory* factory); + +// Algorithms +extern void registerFind2DClosestProximityAlgorithm(sofa::core::ObjectFactory* factory); +extern void registerFindClosestProximityAlgorithm(sofa::core::ObjectFactory* factory); +extern void registerInsertionAlgorithm(sofa::core::ObjectFactory* factory); + +// BroadPhase +extern void registerAABBBroadPhase(sofa::core::ObjectFactory* factory); +extern void registerFullAABBBroadPhase(sofa::core::ObjectFactory* factory); + +// Distance Filters +extern void registerDistanceFilter(sofa::core::ObjectFactory* factory); + +// Geometry +extern void registerSubsetGeometry(sofa::core::ObjectFactory* factory); +extern void registerPointGeometry(sofa::core::ObjectFactory* factory); +extern void registerEdgeGeometry(sofa::core::ObjectFactory* factory); +extern void registerTriangleGeometry(sofa::core::ObjectFactory* factory); +extern void registerTetrahedronGeometry(sofa::core::ObjectFactory* factory); +} // namespace sofa::collisionAlgorithm + +namespace sofa::component +{ + +// Here are just several convenient functions to help user to know what contains the plugin + +extern "C" +{ + void initExternalModule(); + const char* getModuleName(); + const char* getModuleVersion(); + const char* getModuleLicense(); + const char* getModuleDescription(); + void registerObjects(sofa::core::ObjectFactory* factory); +} + +void initCollisionAlgorithm() +{ + static bool first = true; + if (first) + { + first = false; #ifdef PLUGIN_DATA_DIR - sofa::helper::system::DataRepository.addLastPath(std::string(QUOTE(PLUGIN_DATA_DIR))); + sofa::helper::system::DataRepository.addLastPath(std::string(QUOTE(PLUGIN_DATA_DIR))); #endif - sofa::helper::system::DataRepository.addLastPath(sofa::helper::system::SetDirectory::GetCurrentDir()); - } - } + sofa::helper::system::DataRepository.addLastPath( + sofa::helper::system::SetDirectory::GetCurrentDir()); + } +} + +void initExternalModule() +{ + initCollisionAlgorithm(); +} - const char* getModuleName() - { - return "CollisionAlgorithm"; - } +const char* getModuleName() { return "CollisionAlgorithm"; } - const char* getModuleVersion() - { +const char* getModuleVersion() +{ #ifdef PLUGIN_GIT_INFO - return QUOTE(PLUGIN_GIT_INFO); + return QUOTE(PLUGIN_GIT_INFO); #else - return "??? to get the last git hash you must active the setupGit macro in CMakeLists"; + return "??? to get the last git hash you must active the setupGit macro in CMakeLists"; #endif - } +} - const char* getModuleLicense() - { - return "LGPL"; - } - - const char* getModuleDescription() { - return "Plugin for collision detection"; - } +const char* getModuleLicense() { return "LGPL"; } - const char* getModuleComponentList() - { - return ""; - } +const char* getModuleDescription() { return "Plugin for collision detection"; } -} +void registerObjects(sofa::core::ObjectFactory* factory) +{ + using namespace sofa::collisionAlgorithm; + // Register CollisionPipeline + registerCollisionLoop(factory); + // Register Algorithms + registerFind2DClosestProximityAlgorithm(factory); + registerFindClosestProximityAlgorithm(factory); + registerInsertionAlgorithm(factory); + // Register BroadPhase + registerAABBBroadPhase(factory); + registerFullAABBBroadPhase(factory); + // Register Distance Filters + registerDistanceFilter(factory); + // Register Geometry + registerSubsetGeometry(factory); + registerPointGeometry(factory); + registerEdgeGeometry(factory); + registerTriangleGeometry(factory); + registerTetrahedronGeometry(factory); +} -} +} // namespace sofa::component