From 4cfe972a31598eb60b2ba4ccd6eafd3b37d16b6d Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Thu, 30 Oct 2025 22:54:38 +0100 Subject: [PATCH 1/4] [Sofa.Core] Add a getPathName() method in BaseData There was no method to get the PathName() to a BaseData only a linkpath (so with the "@" prefix indicating a link). I add the missing feature and make some minor cleaning --- .../Core/src/sofa/core/objectmodel/Base.h | 1 + .../src/sofa/core/objectmodel/BaseData.cpp | 9 +++++- .../Core/src/sofa/core/objectmodel/BaseData.h | 1 + .../src/sofa/core/objectmodel/BaseObject.cpp | 29 +++++++++---------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/Base.h b/Sofa/framework/Core/src/sofa/core/objectmodel/Base.h index c554389c032..597c97148ac 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/Base.h +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/Base.h @@ -97,6 +97,7 @@ class SOFA_CORE_API Base : public IntrusiveObject void addOutputsToCallback(const std::string& name, std::initializer_list outputs); + /// Returns the path to the Base. it is possible to use different character as separator. virtual std::string getPathName() const { return ""; } /// Accessor to the object name diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp index d449b0b7a7e..3dee5f991d8 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp @@ -140,10 +140,17 @@ bool BaseData::setParent(BaseData* parent, const std::string& path) return true; } +std::string BaseData::getPathName() const +{ + if(m_owner) + return m_owner->getPathName()+"."+getName(); + return ""; +} + std::string BaseData::getLinkPath() const { if(m_owner) - return "@"+m_owner->getPathName()+"."+getName(); + return "@"+getPathName(); return ""; } diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.h b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.h index 3c45a0d52dd..eafe21c81ca 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.h +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.h @@ -194,6 +194,7 @@ class SOFA_CORE_API BaseData : public DDGNode /// If we use the Data as a link and not as value directly virtual std::string getLinkPath() const; + std::string getPathName()const; /// Return whether this %Data can be used as a linkPath. /// diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp index 390116d17ef..da7c23524dc 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp @@ -342,22 +342,19 @@ SReal BaseObject::getTime() const return getContext()->getTime(); } -std::string BaseObject::getPathName() const { - - const BaseContext* context = this->getContext(); - std::string result = ""; - if( context ) - { - const BaseNode* node = context->toBaseNode(); - if( node ) { - result += node->getPathName(); - if (node->getPathName() != "/") - result += "/"; - } - - } - result += getName(); - return result; +std::string BaseObject::getPathName() const +{ + auto node = sofa::core::castTo(getContext()); + if(!node) + return ""; + + std::stringstream tmp; + auto pathname = node->getPathName(); + tmp << pathname; + if (pathname != "/") + tmp << "/"; + tmp << getName(); + return tmp.str(); } } // namespace sofa::core::objectmodel From 1fa71ef94b23df9298d16964315968534bae8b58 Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Thu, 30 Oct 2025 23:03:50 +0100 Subject: [PATCH 2/4] FIXUP --- Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp index da7c23524dc..0ce4cc0a4ee 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp @@ -344,12 +344,12 @@ SReal BaseObject::getTime() const std::string BaseObject::getPathName() const { - auto node = sofa::core::castTo(getContext()); + auto node = dynamic_cast(getContext()); if(!node) return ""; - std::stringstream tmp; auto pathname = node->getPathName(); + std::stringstream tmp; tmp << pathname; if (pathname != "/") tmp << "/"; From 0efde36f81124ab5de0f3d1c626259102cb5d26b Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Tue, 4 Nov 2025 09:13:19 +0100 Subject: [PATCH 3/4] Update Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp Co-authored-by: Alex Bilger --- Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp index 3dee5f991d8..d556cb41417 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseData.cpp @@ -144,7 +144,7 @@ std::string BaseData::getPathName() const { if(m_owner) return m_owner->getPathName()+"."+getName(); - return ""; + return getName(); } std::string BaseData::getLinkPath() const From 2024d24a092f85b7dd34dff79624a51d8b15c463 Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Tue, 4 Nov 2025 09:14:03 +0100 Subject: [PATCH 4/4] Update Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp --- Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp index 0ce4cc0a4ee..6e7394fdbb9 100644 --- a/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp +++ b/Sofa/framework/Core/src/sofa/core/objectmodel/BaseObject.cpp @@ -346,7 +346,7 @@ std::string BaseObject::getPathName() const { auto node = dynamic_cast(getContext()); if(!node) - return ""; + return getName(); auto pathname = node->getPathName(); std::stringstream tmp;