From ac3d214b5bc7b17defa6c7ccc2e3e82bc676a028 Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Fri, 18 Oct 2019 10:51:11 +0200 Subject: [PATCH 1/2] [SofaKernel] BaseData are set to non persistant by default. This is a long standing issue in Sofa about not being able to save 'usable' scene in runSofa. Several PR had been made a long time ago. There is multiple problems among which: - keywords that are not Data field but parsing hook (eg: src, compatbility hook) needs to be converted into Data - the Data are not persistant or not depending on some object property but depend on their context of "use". Eg: *) a data changed in the GUI should be saved *) a data filled with a script shouldn't etc... To allow to control fine grain the state of a data is now set to non persitant by default and should only be activated specifically (by the GUI, or the script) if it is needed to save it. This is a behavior change...but it is on a totally broken feature :) --- SofaKernel/framework/sofa/core/objectmodel/BaseData.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SofaKernel/framework/sofa/core/objectmodel/BaseData.cpp b/SofaKernel/framework/sofa/core/objectmodel/BaseData.cpp index 668741effbe..8c22e0de85e 100644 --- a/SofaKernel/framework/sofa/core/objectmodel/BaseData.cpp +++ b/SofaKernel/framework/sofa/core/objectmodel/BaseData.cpp @@ -45,6 +45,7 @@ BaseData::BaseData(const char* h, DataFlags dataflags) addLink(&outputs); m_counters.assign(0); m_isSets.assign(false); + setFlag(FLAG_PERSISTENT, false); } BaseData::BaseData( const char* h, bool isDisplayed, bool isReadOnly) @@ -58,6 +59,7 @@ BaseData::BaseData( const char* h, bool isDisplayed, bool isReadOnly) m_isSets.assign(false); setFlag(FLAG_DISPLAYED,isDisplayed); setFlag(FLAG_READONLY,isReadOnly); + setFlag(FLAG_PERSISTENT, false); } BaseData::BaseData( const BaseInitData& init) @@ -70,6 +72,7 @@ BaseData::BaseData( const BaseInitData& init) addLink(&outputs); m_counters.assign(0); m_isSets.assign(false); + if (init.data && init.data != this) { { @@ -82,6 +85,7 @@ BaseData::BaseData( const BaseInitData& init) exit( EXIT_FAILURE ); } if (m_owner) m_owner->addData(this, m_name); + setFlag(FLAG_PERSISTENT, false); } BaseData::~BaseData() From 7762b87ec46aa6c768962e66cdf7c7ced3ae4298 Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Wed, 23 Oct 2019 11:10:25 +0200 Subject: [PATCH 2/2] Update test_BindingData.py --- .../SofaPython/SofaPython_test/python/test_BindingData.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/plugins/SofaPython/SofaPython_test/python/test_BindingData.py b/applications/plugins/SofaPython/SofaPython_test/python/test_BindingData.py index 2aaff21e814..0f6cbfddba5 100644 --- a/applications/plugins/SofaPython/SofaPython_test/python/test_BindingData.py +++ b/applications/plugins/SofaPython/SofaPython_test/python/test_BindingData.py @@ -9,9 +9,9 @@ def createScene(rootNode): ASSERT_NEQ(field, None) ### Check isPersistant/setPersistant - ASSERT_TRUE( field.isPersistant() ) - field.setPersistant(False) ASSERT_FALSE( field.isPersistant() ) + field.setPersistant(True) + ASSERT_TRUE( field.isPersistant() ) ### Check isSet/unset ASSERT_TRUE( field.isSet() )