]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Add Model_AttributeSelection::setId()
authorspo <sergey.pokhodenko@opencascade.com>
Wed, 25 Nov 2015 10:41:24 +0000 (13:41 +0300)
committerspo <sergey.pokhodenko@opencascade.com>
Mon, 20 Jun 2016 12:07:38 +0000 (15:07 +0300)
src/Model/Model_AttributeSelection.cpp
src/Model/Model_AttributeSelection.h

index bf9e187ccdfbfbf1aaec336eb9473c10df6023a3..b741787b9ba58f0e70b7017d45c2c59574184e15 100644 (file)
@@ -948,22 +948,22 @@ void Model_AttributeSelection::selectSubShape(
 
 int Model_AttributeSelection::Id()
 {
-  int anID = 0;
-  std::shared_ptr<GeomAPI_Shape> aSelection = value();
-  std::shared_ptr<GeomAPI_Shape> aContext = context()->shape();
-  // support for compsolids:
-  if (context().get() && ModelAPI_Tools::compSolidOwner(context()).get())
-    aContext = ModelAPI_Tools::compSolidOwner(context())->shape();
+  const ResultPtr& aContext = context();
+  const std::shared_ptr<GeomAPI_Shape>& aSelection = value();
 
+  std::shared_ptr<GeomAPI_Shape> aContextShape = aContext->shape();
+  // support for compsolids:
+  if (aContext.get() && ModelAPI_Tools::compSolidOwner(aContext).get())
+    aContextShape = ModelAPI_Tools::compSolidOwner(aContext)->shape();
 
-  TopoDS_Shape aMainShape = aContext->impl<TopoDS_Shape>();
+  TopoDS_Shape aMainShape = aContextShape->impl<TopoDS_Shape>();
   const TopoDS_Shape& aSubShape = aSelection->impl<TopoDS_Shape>();
   // searching for the latest main shape
   if (aSelection && !aSelection->isNull() &&
-    aContext   && !aContext->isNull())
+      aContextShape && !aContextShape->isNull())
   {
     std::shared_ptr<Model_Document> aDoc =
-      std::dynamic_pointer_cast<Model_Document>(context()->document());
+      std::dynamic_pointer_cast<Model_Document>(aContext->document());
     if (aDoc.get()) {
       Handle(TNaming_NamedShape) aNS = TNaming_Tool::NamedShape(aMainShape, aDoc->generalLabel());
       if (!aNS.IsNull()) {
@@ -973,7 +973,45 @@ int Model_AttributeSelection::Id()
 
     TopTools_IndexedMapOfShape aSubShapesMap;
     TopExp::MapShapes(aMainShape, aSubShapesMap);
-    anID = aSubShapesMap.FindIndex(aSubShape);
+    return aSubShapesMap.FindIndex(aSubShape);
   }
-  return anID;
+  return 0;
 }
+
+void Model_AttributeSelection::setId(int theID)
+{
+  const ResultPtr& aContext = context();
+  std::shared_ptr<GeomAPI_Shape> aSelection;
+
+  std::shared_ptr<GeomAPI_Shape> aContextShape = aContext->shape();
+  // support for compsolids:
+  if (aContext.get() && ModelAPI_Tools::compSolidOwner(aContext).get())
+    aContextShape = ModelAPI_Tools::compSolidOwner(aContext)->shape();
+
+  TopoDS_Shape aMainShape = aContextShape->impl<TopoDS_Shape>();
+  // searching for the latest main shape
+  if (theID > 0 &&
+      aContextShape && !aContextShape->isNull())
+  {
+    std::shared_ptr<Model_Document> aDoc =
+      std::dynamic_pointer_cast<Model_Document>(aContext->document());
+    if (aDoc.get()) {
+      Handle(TNaming_NamedShape) aNS = TNaming_Tool::NamedShape(aMainShape, aDoc->generalLabel());
+      if (!aNS.IsNull()) {
+        aMainShape = TNaming_Tool::CurrentShape(aNS);
+      }
+    }
+
+    TopTools_IndexedMapOfShape aSubShapesMap;
+    TopExp::MapShapes(aMainShape, aSubShapesMap);
+    const TopoDS_Shape& aSelShape = aSubShapesMap.FindKey(theID);
+
+    std::shared_ptr<GeomAPI_Shape> aResult(new GeomAPI_Shape);
+    aResult->setImpl(new TopoDS_Shape(aSelShape));
+
+    aSelection = aResult;
+  }
+
+  setValue(aContext, aSelection);
+}
+
index 4908b5fe03486822349f6c7c636b5885cf1c51b1..ba669e954f069cfb6b86ae456fcadbd865bae990 100644 (file)
@@ -58,6 +58,10 @@ public:
   /// will be possible from SMESH module of SALOME.
   MODEL_EXPORT virtual int Id();
 
+  /// Defines the sub-shape by Id
+  /// NOTE: This method is opposite to Id() method.
+  MODEL_EXPORT virtual void setId(int theID);
+
   /// Selects (i.e. creates Naming data structure) of sub-shape specified by textual name
   MODEL_EXPORT virtual void selectSubShape(const std::string& theType, const std::string& theSubShapeName);