]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for the problem of selection of the whole constructions of PartSet document from...
authormpv <mpv@opencascade.com>
Thu, 1 Sep 2016 09:05:29 +0000 (12:05 +0300)
committermpv <mpv@opencascade.com>
Thu, 1 Sep 2016 09:05:29 +0000 (12:05 +0300)
src/Model/Model_AttributeSelection.cpp
src/Model/Model_SelectionNaming.cpp
src/Model/Model_SelectionNaming.h

index ac66944c56b40d3a4f15ece7dcf2ef0bfc89587f..2e2de8e878d827d9bbc660b777225a2041eccb2a 100644 (file)
@@ -877,7 +877,8 @@ std::string Model_AttributeSelection::namingName(const std::string& theDefaultNa
   ResultPtr aCont = context();
 
   Model_SelectionNaming aSelNaming(selectionLabel());
-  return aSelNaming.namingName(aCont, aSubSh, theDefaultName);
+  return aSelNaming.namingName(
+    aCont, aSubSh, theDefaultName, owner()->document() != aCont->document());
 }
 
 // type ::= COMP | COMS | SOLD | SHEL | FACE | WIRE | EDGE | VERT
index 5bf2d58c9f71c9e010ad0bb56de1f4f5e05bd124..a3f9ace283ec807898b03917b39d74b25a49e16d 100644 (file)
@@ -109,13 +109,28 @@ bool isTrivial (const TopTools_ListOfShape& theAncestors, TopTools_IndexedMapOfS
 }
 
 std::string Model_SelectionNaming::namingName(ResultPtr& theContext,
-  std::shared_ptr<GeomAPI_Shape> theSubSh, const std::string& theDefaultName)
+  std::shared_ptr<GeomAPI_Shape> theSubSh, const std::string& theDefaultName,
+  const bool theAnotherDoc)
 {
   std::string aName("Undefined name");
   if(!theContext.get() || theContext->shape()->isNull()) 
     return !theDefaultName.empty() ? theDefaultName : aName;
+  
+  // if it is in result of another part
+  std::shared_ptr<Model_Document> aDoc = 
+    std::dynamic_pointer_cast<Model_Document>(theContext->document());
+  if (theContext->groupName() == ModelAPI_ResultPart::group()) {
+    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(theContext);
+    int anIndex;
+    return aPart->data()->name() + "/" + aPart->nameInPart(theSubSh, anIndex);
+  }
+
   if (!theSubSh.get() || theSubSh->isNull()) { // no subshape, so just the whole feature name
-    return theContext->data()->name();
+    // but if it is in another Part, add this part name
+    std::string aPartName;
+    if (theAnotherDoc)
+      aPartName = theContext->document()->kind() + "/"; // PartSet
+    return aPartName + theContext->data()->name();
   }
   TopoDS_Shape aSubShape = theSubSh->impl<TopoDS_Shape>();
   TopoDS_Shape aContext  = theContext->shape()->impl<TopoDS_Shape>();
@@ -125,13 +140,6 @@ std::string Model_SelectionNaming::namingName(ResultPtr& theContext,
     BRepTools::Write(aContext, "Context.brep");
   }
 #endif
-  std::shared_ptr<Model_Document> aDoc = 
-    std::dynamic_pointer_cast<Model_Document>(theContext->document());
-  if (theContext->groupName() == ModelAPI_ResultPart::group()) {
-    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(theContext);
-    int anIndex;
-    return aPart->data()->name() + "/" + aPart->nameInPart(theSubSh, anIndex);
-  }
 
   // add the result name to the name of the shape (it was in BodyBuilder, but did not work on Result rename)
   bool isNeedContextName = theContext->shape().get() && !theContext->shape()->isEqual(theSubSh);
index 82f1eca7a09c028cbdc8e614aed149fc1005bb7f..ca513fe76b4992ccc8c5a09b7513d1661e3cb9cf 100644 (file)
@@ -30,7 +30,7 @@ public:
 
   /// Produces the string-name for the selected shape
   std::string namingName(ResultPtr& theContext, std::shared_ptr<GeomAPI_Shape> theSubSh,
-    const std::string& theDefaultName);
+    const std::string& theDefaultName, const bool theAnotherDoc);
   
   /// Makes a selection by the string-name
   /// \param theType string of the type of the shape