Salome HOME
Make edition transaction where actually nothing was changed as empty one and do not...
[modules/shaper.git] / src / Model / Model_AttributeSelection.cpp
index 7bc7217dcfca8e0ca54dd9925cdd4771e066e29f..232ff61b558ead55e47049e9d23208513d06c975 100644 (file)
@@ -200,7 +200,6 @@ std::shared_ptr<GeomAPI_Shape> Model_AttributeSelection::value()
         return aResult; // empty result
     }
     if (aSelLab.IsAttribute(kPART_REF_ID)) {
-      /* TODO: implement used text here
       ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(context());
       if (!aPart.get() || !aPart->isActivated())
         return std::shared_ptr<GeomAPI_Shape>(); // postponed naming needed
@@ -208,11 +207,12 @@ std::shared_ptr<GeomAPI_Shape> Model_AttributeSelection::value()
       if (selectionLabel().FindAttribute(TDataStd_Integer::GetID(), anIndex)) {
         return aPart->selectionValue(anIndex->Get());
       }
+      /*
       Handle(TDataStd_Name) aName;
       if (!selectionLabel().FindAttribute(TDataStd_Name::GetID(), aName)) {
         return std::shared_ptr<GeomAPI_Shape>(); // something is wrong
       }
-      return aPart->shapeInPart(TCollection_AsciiString(aName).ToCString());
+      return aPart->shapeInPart(TCollection_AsciiString(aName->Get()).ToCString());
       */
     }
 
@@ -873,6 +873,24 @@ void Model_AttributeSelection::selectSubShape(
 {
   if(theSubShapeName.empty() || theType.empty()) return;
 
+  // check this is Part-name: 2 delimiters in the name
+  std::size_t aPartEnd = theSubShapeName.find('/');
+  if (aPartEnd != string::npos && aPartEnd != theSubShapeName.rfind('/')) {
+    std::string aPartName = theSubShapeName.substr(0, aPartEnd);
+    ObjectPtr aFound = owner()->document()->objectByName(ModelAPI_ResultPart::group(), aPartName);
+    if (aFound.get()) { // found such part, so asking it for the name
+      ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aFound);
+      string aNameInPart = theSubShapeName.substr(aPartEnd + 1);
+      int anIndex;
+      std::shared_ptr<GeomAPI_Shape> aSelected = aPart->shapeInPart(aNameInPart, theType, anIndex);
+      if (aSelected.get()) {
+        setValue(aPart, aSelected);
+        TDataStd_Integer::Set(selectionLabel(), anIndex);
+        return;
+      }
+    }
+  }
+
   Model_SelectionNaming aSelNaming(selectionLabel());
   std::shared_ptr<Model_Document> aDoc = 
     std::dynamic_pointer_cast<Model_Document>(owner()->document());