Salome HOME
The persistence mechanism of part results modification features support
authormpv <mpv@opencascade.com>
Tue, 11 Aug 2015 06:53:18 +0000 (09:53 +0300)
committermpv <mpv@opencascade.com>
Tue, 11 Aug 2015 06:53:18 +0000 (09:53 +0300)
src/Model/Model_AttributeIntArray.cpp
src/Model/Model_Data.cpp
src/Model/Model_Data.h
src/Model/Model_Document.cpp
src/Model/Model_ResultPart.cpp
src/Model/Model_ResultPart.h
src/ModelAPI/ModelAPI_Data.h
src/ModelAPI/ModelAPI_Object.cpp
src/ModelAPI/ModelAPI_ResultBody.cpp
src/ModelAPI/ModelAPI_ResultPart.h

index a61a9cc0e97c3d373bd9b2731f35c8dcc61e7d10..b9cb85876640992a1a499fd2791519c6fd491087 100644 (file)
@@ -23,7 +23,7 @@ int Model_AttributeIntArray::size()
   if (myArray.IsNull() || !myArray->IsValid()) {
     // this could be on undo and then redo creation of the attribute
     // in result creation it may be uninitialized
-      myIsInitialized = myLab.FindAttribute(TDataStd_IntegerArray::GetID(), myArray);
+    myIsInitialized = myLab.FindAttribute(TDataStd_IntegerArray::GetID(), myArray) == Standard_True;
   }
   // checking the validity because attribute (as a field) may be presented,
   // but without label: it is undoed
index 504936dc1a7eddd9feeddc365c336f8cfebc1b45..bf4661ad2978d34d324e9b73f4dea58f2dce3730 100644 (file)
 
 #include <string>
 
+#ifdef WNT // to avoid too long decorated name warning 
+#pragma warning( disable : 4503 )
+#endif
+
 // myLab contains:
 // TDataStd_Name - name of the object
 // TDataStd_IntegerArray - state of the object execution, transaction ID of update
@@ -583,7 +587,7 @@ std::shared_ptr<ModelAPI_Data> Model_Data::invalidData()
   return kInvalid;
 }
 
-bool Model_Data::isOwner(ModelAPI_Object* theOwner)
+std::shared_ptr<ModelAPI_Object> Model_Data::owner()
 {
-  return theOwner == myObject.get();
+  return myObject;
 }
index 1a502b4b0ca0f295b3f43c25c0aa4de06f2ea3a4..f1d5c59e85d07be60543fa2d2341d11c59da4b3d 100644 (file)
@@ -202,7 +202,7 @@ class Model_Data : public ModelAPI_Data
 
   /// Returns true if the given object is owner of this data (needed for correct erase of object
   /// with duplicated data)
-  MODEL_EXPORT virtual bool isOwner(ModelAPI_Object* theOwner);
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Object> owner();
 
 protected:
   /// Returns true if "is in history" custom behaviors is defined for the feature
index 2ff8141aa7f299036b7229ca609499c63134f257..d123c6b9e0a905aad60fc1898616e0ef8c37f0cc 100644 (file)
@@ -617,8 +617,9 @@ const std::set<std::string> Model_Document::subDocuments(const bool theActivated
   std::list<ResultPtr>::iterator aPartRes = aPartResults.begin();
   for(; aPartRes != aPartResults.end(); aPartRes++) {
     ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(*aPartRes);
-    if (aPart && (!theActivatedOnly || aPart->isActivated()))
-      aResult.insert(aPart->data()->name());
+    if (aPart && (!theActivatedOnly || aPart->isActivated())) {
+      aResult.insert(aPart->original()->data()->name());
+    }
   }
   return aResult;
 }
index 246621acd2b626e2f16b8c40e225a886903fc76b..12361eb33a1054295d3f4c16be76d4c59695ffd5 100644 (file)
@@ -79,6 +79,14 @@ void Model_ResultPart::activate()
   }
 }
 
+std::shared_ptr<ModelAPI_ResultPart> Model_ResultPart::original()
+{
+  if (myTrsf.get()) {
+    return baseRef()->original();
+  }
+  return std::dynamic_pointer_cast<ModelAPI_ResultPart>(data()->owner());
+}
+
 bool Model_ResultPart::isActivated() 
 {
   if (myTrsf.get()) {
index fee8e0ad1e657c8ab37c7867a57d7acc6ebed7d2..b4a147bc97c11a05fd9ca960eaa75a3b7af4a8ee 100644 (file)
@@ -36,6 +36,10 @@ class Model_ResultPart : public ModelAPI_ResultPart
   /// Returns the part-document of this result
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Document> partDoc();
 
+  /// Returns the original part result: for transfomration features results this is 
+  /// the original Part feature result
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultPart> original();
+
   /// Sets this document as current and if it is not loaded yet, loads it
   MODEL_EXPORT virtual void activate();
 
index d06d7c100d99eaf153ad16f2aee7cd0b67754bdb..22293469911764463a6fd86e1183fb1766ccabcd 100644 (file)
@@ -154,9 +154,8 @@ class MODELAPI_EXPORT ModelAPI_Data
   /// This method is called by the updater.
   virtual void setUpdateID(const int theID) = 0;
 
-  /// Returns true if the given object is owner of this data (needed for correct erase of object
-  /// with duplicated data)
-  virtual bool isOwner(ModelAPI_Object* theOwner) = 0;
+  /// Returns the owner of htis data
+  virtual std::shared_ptr<ModelAPI_Object> owner() = 0;
 
  protected:
   /// Objects are created for features automatically
index 9d08a0c3719c3bf8338acdc3b61887ef6c1ee3f5..b3f2671c92592aa359da6a0ebd1c4d756742f803 100644 (file)
@@ -68,7 +68,7 @@ void ModelAPI_Object::setDoc(std::shared_ptr<ModelAPI_Document> theDoc)
 
 void ModelAPI_Object::erase()
 {
-  if (myData->isValid() && myData != myData->invalidPtr() && myData->isOwner(this))
+  if (myData->isValid() && myData != myData->invalidPtr())
     myData->erase();
   setData(myData->invalidPtr());
 }
index 1d5d38824d92622d13d5d6f66deecadde14abe5a..93b9961117164953345d83f5a99902d9d0360a40 100644 (file)
@@ -5,6 +5,7 @@
 // Author:      Mikhail PONIKAROV
 
 #include "ModelAPI_ResultBody.h"
+#include <ModelAPI_BodyBuilder.h>
 
 ModelAPI_ResultBody::ModelAPI_ResultBody()
 : myBuilder(0)
index 46d75e4387401d5c5352206f03471fe50899b178..b06c3f2ac619ef8c1e7e1fd4d1682ad5cadb0ef9 100644 (file)
@@ -52,6 +52,10 @@ class ModelAPI_ResultPart : public ModelAPI_Result
   /// Returns the part-document of this result
   virtual std::shared_ptr<ModelAPI_Document> partDoc() = 0;
 
+  /// Returns the original part result: for transfomration features results this is 
+  /// the original Part feature result
+  virtual std::shared_ptr<ModelAPI_ResultPart> original() = 0;
+
   /// Sets this document as current and if it is not loaded yet, loads it
   virtual void activate() = 0;