diff --git a/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.cpp b/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.cpp index 02c9c71c3b5..f668e98d891 100644 --- a/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.cpp +++ b/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.cpp @@ -80,7 +80,7 @@ bool BaseMouseInteractor::removeInteractionPerformer( InteractionPerformer *i) } } -void BaseMouseInteractor::updatePosition(SReal ) +void BaseMouseInteractor::doUpdatePosition(SReal ) { for (const auto perf : performers) { diff --git a/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.h b/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.h index 0e389f9f050..0396e977f93 100644 --- a/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.h +++ b/Sofa/GUI/Component/src/sofa/gui/component/performer/MouseInteractor.h @@ -66,7 +66,7 @@ class SOFA_GUI_COMPONENT_API BaseMouseInteractor : public core::BehaviorModel void addInteractionPerformer(InteractionPerformer *i); bool removeInteractionPerformer( InteractionPerformer *i); //Called at each time step: launch all the performers - void updatePosition( SReal dt) override; + void doUpdatePosition( SReal dt) override; //Propagate an event in case to all the performers void handleEvent(core::objectmodel::Event *e) override; diff --git a/Sofa/framework/Core/src/sofa/core/BehaviorModel.h b/Sofa/framework/Core/src/sofa/core/BehaviorModel.h index 3cccb91b383..079c2bcfffa 100644 --- a/Sofa/framework/Core/src/sofa/core/BehaviorModel.h +++ b/Sofa/framework/Core/src/sofa/core/BehaviorModel.h @@ -48,17 +48,46 @@ class SOFA_CORE_API BehaviorModel : public virtual sofa::core::objectmodel::Base /// Destructor ~BehaviorModel() override {} + /// Computation of a new simulation step. + virtual void doUpdatePosition(SReal /*dt*/) = 0; + + virtual bool doAddBBox(SReal* /*minBBox*/, SReal* /*maxBBox*/) + { + return false; + } + private: BehaviorModel(const BehaviorModel& n) = delete; BehaviorModel& operator=(const BehaviorModel& n) = delete; public: - /// Computation of a new simulation step. - virtual void updatePosition(SReal dt) = 0; - virtual bool addBBox(SReal* /*minBBox*/, SReal* /*maxBBox*/) + /** + * !!! WARNING since v25.12 !!! + * + * The template method pattern has been applied to this part of the API. + * This method calls the newly introduced method "doUpdatePosition" internally, + * which is the method to override from now on. + * + **/ + virtual void updatePosition(SReal dt) final { - return false; + //TODO (SPRINT SED 2025): Component state mechamism + this->doUpdatePosition(dt); + } + + /** + * !!! WARNING since v25.12 !!! + * + * The template method pattern has been applied to this part of the API. + * This method calls the newly introduced method "doAddBBox" internally, + * which is the method to override from now on. + * + **/ + virtual bool addBBox(SReal* minBBox, SReal* maxBBox) final + { + //TODO (SPRINT SED 2025): Component state mechamism + return this->doAddBBox(minBBox, maxBBox); } bool insertInNode( objectmodel::BaseNode* node ) override; diff --git a/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.cpp b/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.cpp index 7e3cdca0178..fa064b24280 100644 --- a/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.cpp +++ b/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.cpp @@ -54,7 +54,7 @@ void MyBehaviorModel::reinit() { } -void MyBehaviorModel::updatePosition(double /*dt*/) +void MyBehaviorModel::doUpdatePosition(double /*dt*/) { } diff --git a/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.h b/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.h index 696047ef80b..fcfbb914eae 100644 --- a/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.h +++ b/Sofa/framework/Helper/test/system/TestPluginA/ComponentC.h @@ -52,7 +52,7 @@ class MyBehaviorModel : public sofa::core::BehaviorModel public: virtual void init(); virtual void reinit(); - virtual void updatePosition(double dt); + void doUpdatePosition(double dt) override; protected: Data customUnsignedData; ///< Example of unsigned data with custom widget diff --git a/applications/plugins/SofaEulerianFluid/Fluid2D.cpp b/applications/plugins/SofaEulerianFluid/Fluid2D.cpp index 08719220978..aba13fbc4d5 100644 --- a/applications/plugins/SofaEulerianFluid/Fluid2D.cpp +++ b/applications/plugins/SofaEulerianFluid/Fluid2D.cpp @@ -83,7 +83,7 @@ void Fluid2D::reset() init(); } -void Fluid2D::updatePosition(SReal dt) +void Fluid2D::doUpdatePosition(SReal dt) { fnext->step(fluid, ftemp, (real)dt); Grid2D* p = fluid; fluid=fnext; fnext=p; diff --git a/applications/plugins/SofaEulerianFluid/Fluid2D.h b/applications/plugins/SofaEulerianFluid/Fluid2D.h index c3c13645f76..dd4ab9a758d 100644 --- a/applications/plugins/SofaEulerianFluid/Fluid2D.h +++ b/applications/plugins/SofaEulerianFluid/Fluid2D.h @@ -68,7 +68,7 @@ class SOFA_EULERIAN_FLUID_API Fluid2D : public sofa::core::BehaviorModel void reset() override; - void updatePosition(SReal dt) override; + void doUpdatePosition(SReal dt) override; void draw(const sofa::core::visual::VisualParams* vparams) override; diff --git a/applications/plugins/SofaEulerianFluid/Fluid3D.cpp b/applications/plugins/SofaEulerianFluid/Fluid3D.cpp index 0b06ed462cd..3e543dbdfa3 100644 --- a/applications/plugins/SofaEulerianFluid/Fluid3D.cpp +++ b/applications/plugins/SofaEulerianFluid/Fluid3D.cpp @@ -91,7 +91,7 @@ void Fluid3D::reset() init(); } -void Fluid3D::updatePosition(SReal dt) +void Fluid3D::doUpdatePosition(SReal dt) { fnext->gravity = getContext()->getGravity()/f_cellwidth.getValue(); fnext->step(fluid, ftemp, (real)dt); diff --git a/applications/plugins/SofaEulerianFluid/Fluid3D.h b/applications/plugins/SofaEulerianFluid/Fluid3D.h index 95f351b5ec1..ec059846495 100644 --- a/applications/plugins/SofaEulerianFluid/Fluid3D.h +++ b/applications/plugins/SofaEulerianFluid/Fluid3D.h @@ -72,7 +72,7 @@ class SOFA_EULERIAN_FLUID_API Fluid3D : public sofa::core::BehaviorModel void reset() override; - void updatePosition(SReal dt) override; + void doUpdatePosition(SReal dt) override; void draw(const sofa::core::visual::VisualParams* vparams) override;