]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for the issue #2640 and issue #2642 : incorrect update of the sketcher naming...
authormpv <mpv@opencascade.com>
Fri, 21 Sep 2018 15:37:17 +0000 (18:37 +0300)
committermpv <mpv@opencascade.com>
Fri, 21 Sep 2018 15:37:17 +0000 (18:37 +0300)
src/Model/Model_Objects.cpp
src/Model/Model_ResultConstruction.cpp
src/Model/Model_ResultConstruction.h
src/ModelAPI/ModelAPI_ResultConstruction.h

index 70183795c0f94329fc2eb74310a998e5d7ed8e98..505a8a81208a6efddda704d65100edbbe8a5c532 100644 (file)
@@ -1882,6 +1882,9 @@ void Model_Objects::updateResults(FeaturePtr theFeature, std::set<FeaturePtr>& t
             theFeature->execute();
         } else if (aGroup->Get() == ModelAPI_ResultConstruction::group().c_str()) {
           theFeature->execute(); // construction shapes are needed for sketch solver
+          if (!theFeature->results().empty()) // to fix #2640 : update sketch, but not naming
+            std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(theFeature->firstResult())
+              ->facesNum(false);
         } else if (aGroup->Get() == ModelAPI_ResultGroup::group().c_str()) {
           aNewBody = createGroup(theFeature->data(), aResIndex);
         } else if (aGroup->Get() == ModelAPI_ResultField::group().c_str()) {
index a0c8a519b703a5ad4640a088b4e23d016fb1bf2e..ad9c9a3070e2f9c060b0a9affef787a4e46d243f 100644 (file)
@@ -68,12 +68,12 @@ void Model_ResultConstruction::setShape(std::shared_ptr<GeomAPI_Shape> theShape)
     if (!theShape.get() || !theShape->isEqual(myShape)) {
         static const Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
         ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent);
+        if (theShape.get()) {
+          myFacesUpToDate = false;
+          myFaces.clear();
+        }
     }
     myShape = theShape;
-    if (theShape.get()) {
-      myFacesUpToDate = false;
-      myFaces.clear();
-    }
   }
 }
 
@@ -94,7 +94,7 @@ void Model_ResultConstruction::setIsInHistory(const bool isInHistory)
   myIsInHistory = isInHistory;
 }
 
-int Model_ResultConstruction::facesNum()
+int Model_ResultConstruction::facesNum(const bool theUpdateNaming)
 {
   if (!myFacesUpToDate) {
     std::shared_ptr<GeomAPI_PlanarEdges> aWirePtr =
@@ -113,17 +113,19 @@ int Model_ResultConstruction::facesNum()
     myFacesUpToDate = true;
 
     // update all the faces and sub-elements in the naming structure
-    DocumentPtr anEmptyExt;
-    bool aNotExt = false;
-    TDF_Label aDataLab = startLabel(anEmptyExt, aNotExt);
-    TDF_ChildIterator aSubsIter(aDataLab, Standard_False);
-    for(; aSubsIter.More(); aSubsIter.Next()) {
-      const TDF_Label aLab = aSubsIter.Value();
-      if (aLab.Tag() == 1) // skip the root shape label
-        continue;
-      Handle(TNaming_NamedShape) aNS;
-      if (aLab.FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
-        update(aLab.Tag() - 1, anEmptyExt, aNotExt);
+    if (theUpdateNaming) {
+      DocumentPtr anEmptyExt;
+      bool aNotExt = false;
+      TDF_Label aDataLab = startLabel(anEmptyExt, aNotExt);
+      TDF_ChildIterator aSubsIter(aDataLab, Standard_False);
+      for(; aSubsIter.More(); aSubsIter.Next()) {
+        const TDF_Label aLab = aSubsIter.Value();
+        if (aLab.Tag() == 1) // skip the root shape label
+          continue;
+        Handle(TNaming_NamedShape) aNS;
+        if (aLab.FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
+          update(aLab.Tag() - 1, anEmptyExt, aNotExt);
+        }
       }
     }
   }
index 7b1cfcd1744a40b9029f0c3f36623c53b4354044..b5ea41cd985bb9589aa74b3c07ceae5ef82d6174 100644 (file)
@@ -64,7 +64,8 @@ class Model_ResultConstruction : public ModelAPI_ResultConstruction
   MODEL_EXPORT virtual void setIsInHistory(const bool myIsInHistory);
 
   /// if the construction result may be used as faces, this method returns not zero number of faces
-  MODEL_EXPORT virtual int facesNum();
+  /// \param theUpdateNaming is false of keeping the naming structure untouched (on load)
+  MODEL_EXPORT virtual int facesNum(const bool theUpdateNaming = true);
   /// if the construction result may be used as faces, this method returns face by zero based index
   MODEL_EXPORT virtual std::shared_ptr<GeomAPI_Face> face(const int theIndex);
 
index d8428f9e10a3e369373dd6ede06ef15c2fbbf850..ff637277d5d1c72940ae44e7714b1c85e0aadb9a 100644 (file)
@@ -67,7 +67,8 @@ class ModelAPI_ResultConstruction : public ModelAPI_Result
   virtual void setIsInHistory(const bool isInHistory) = 0;
 
   /// if the construction result may be used as faces, this method returns not zero number of faces
-  virtual int facesNum() = 0;
+  /// \param theUpdateNaming is false of keeping the naming structure untouched (on load)
+  virtual int facesNum(const bool theUpdateNaming = true) = 0;
   /// if the construction result may be used as faces, this method returns face by zero based index
   virtual std::shared_ptr<GeomAPI_Face> face(const int theIndex) = 0;