]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Redesign of Sketcher selection
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 14 Oct 2014 07:47:19 +0000 (11:47 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 14 Oct 2014 07:47:19 +0000 (11:47 +0400)
src/PartSet/CMakeLists.txt
src/PartSet/PartSet_Listener.cpp
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h

index 1ce2ab944f748f710a1747c6c72673796dcdd296..de011a1b944183dfcef70933a90d699c903aa0f3 100644 (file)
@@ -14,7 +14,6 @@ SET(PROJECT_HEADERS
        PartSet_OperationSketchBase.h
        PartSet_OperationSketch.h
        PartSet_OperationFeatureBase.h
-       PartSet_TestOCC.h
        PartSet_Tools.h
        PartSet_WidgetSketchLabel.h
        PartSet_Validators.h
@@ -30,7 +29,6 @@ SET(PROJECT_SOURCES
        PartSet_OperationSketchBase.cpp
        PartSet_OperationSketch.cpp
        PartSet_OperationFeatureBase.cpp
-       PartSet_TestOCC.cpp
        PartSet_Tools.cpp
        PartSet_WidgetSketchLabel.cpp
        PartSet_Validators.cpp
index 8dd90a84528be2dcc1766afbe94caa9f9267b92c..989b668802843242a03dcc237fb8abd102a69f54 100644 (file)
@@ -69,7 +69,7 @@ void PartSet_Listener::processEvent(const boost::shared_ptr<Events_Message>& the
           // Very possible it is not displayed
           aDisplayer->display(aObj, false);
           std::list<int> aModes = aSketchOp->getSelectionModes(aObj);
-          aDisplayer->activateInLocalContext(aObj, aModes, false);
+          myModule->activateInLocalContext(aObj, aModes, false);
       }
     }
 
index 3ada0450be9e24064d97904d6dde6157ea05cdca..fcfc9e903a50d50437d352a4f7ce4d9c05e47763 100644 (file)
@@ -356,7 +356,7 @@ void PartSet_Module::onFeatureConstructed(ObjectPtr theFeature, int theMode)
       std::list<ResultPtr>::iterator aIt;
       for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
         if (isDisplay)
-          aDisplayer->activateInLocalContext((*aIt), aModes, false);
+          activateInLocalContext((*aIt), aModes, false);
         else
           aDisplayer->erase((*aIt), false);
       }
@@ -453,7 +453,7 @@ void PartSet_Module::activateFeature(ObjectPtr theFeature, const bool isUpdateVi
   if (aPreviewOp) {
     XGUI_Displayer* aDisplayer = xWorkshop()->displayer();
     std::list<int> aModes = aPreviewOp->getSelectionModes(theFeature);
-    aDisplayer->activateInLocalContext(theFeature, aModes, isUpdateViewer);
+    activateInLocalContext(theFeature, aModes, isUpdateViewer);
 
     // If this is a Sketcher then activate objects (planar faces) outside of context
     PartSet_OperationSketch* aSketchOp = dynamic_cast<PartSet_OperationSketch*>(aPreviewOp);
@@ -500,10 +500,10 @@ void PartSet_Module::updateCurrentPreview(const std::string& theCmdId)
     std::list<ResultPtr>::const_iterator aRIt;
     for (aRIt = aResults.cbegin(); aRIt != aResults.cend(); ++aRIt) {
       aDisplayer->display((*aRIt), false);
-      aDisplayer->activateInLocalContext((*aRIt), aModes, false);
+      activateInLocalContext((*aRIt), aModes, false);
     }
     aDisplayer->display(aSPFeature, false);
-    aDisplayer->activateInLocalContext(aSPFeature, aModes, false);
+    activateInLocalContext(aSPFeature, aModes, false);
   }
   aDisplayer->updateViewer();
 }
@@ -564,4 +564,39 @@ XGUI_Workshop* PartSet_Module::xWorkshop() const
     return aConnector->workshop();
   }
   return 0;
-}
\ No newline at end of file
+}
+
+
+void PartSet_Module::activateInLocalContext(ObjectPtr theResult, const std::list<int>& theModes,
+                                            const bool isUpdateViewer)
+{
+  XGUI_Displayer* aDisplayer = xWorkshop()->displayer();
+  Handle(AIS_InteractiveContext) aContext = xWorkshop()->viewer()->AISContext();
+  if (aContext.IsNull())
+    return;
+  // Open local context if there is no one
+  if (!aContext->HasOpenedContext()) {
+    aContext->ClearCurrents(false);
+    //aContext->OpenLocalContext(false/*use displayed objects*/, true/*allow shape decomposition*/);
+    aContext->OpenLocalContext();
+    aContext->NotUseDisplayedObjects();
+  }
+  // display or redisplay presentation
+  boost::shared_ptr<GeomAPI_AISObject> anAIS = aDisplayer->getAISObject(theResult);
+  // Activate selection of objects from prs
+  if (anAIS) {
+    Handle(AIS_InteractiveObject) aAISObj = anAIS->impl<Handle(AIS_InteractiveObject)>();
+    aContext->ClearSelected(false);  // ToCheck
+    //aContext->upClearSelected(false); // ToCheck
+    aContext->Load(aAISObj, -1, true/*allow decomposition*/);
+    aContext->Deactivate(aAISObj);
+
+    std::list<int>::const_iterator anIt = theModes.begin(), aLast = theModes.end();
+    for (; anIt != aLast; anIt++) {
+      aContext->Activate(aAISObj, (*anIt));
+    }
+  }
+
+  if (isUpdateViewer)
+    aDisplayer->updateViewer();
+}
index 0c39e68f814f91d7d946742f634daca3fd106c78..44322b35952a638c63a84d89646451fc7db7f695 100644 (file)
@@ -61,6 +61,14 @@ Q_OBJECT
 
   XGUI_Workshop* xWorkshop() const;
 
+  /// Display the shape and activate selection of sub-shapes
+  /// \param theFeature a feature instance
+  /// \param theShape a shape
+  /// \param theMode a list of local selection modes
+  /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
+  void activateInLocalContext(ObjectPtr theFeature, const std::list<int>& theModes,
+                              const bool isUpdateViewer = true);
+
  public slots:
   void onFeatureTriggered();
   /// SLOT, that is called after the operation is started. Connect on the focus activated signal
index 6ac7aca9a875a3d77fe8e5e1aaac85302ec4e01e..cf39a413f30ba39feb4918f7e3f8a8f95aed1fa1 100644 (file)
@@ -140,44 +140,6 @@ void XGUI_Displayer::redisplay(ObjectPtr theObject, bool isUpdateViewer)
   }
 }
 
-void XGUI_Displayer::activateInLocalContext(ObjectPtr theResult, const std::list<int>& theModes,
-                                            const bool isUpdateViewer)
-{
-  Handle(AIS_InteractiveContext) aContext = AISContext();
-  if (aContext.IsNull())
-    return;
-  // Open local context if there is no one
-  if (!aContext->HasOpenedContext()) {
-    aContext->ClearCurrents(false);
-    //aContext->OpenLocalContext(false/*use displayed objects*/, true/*allow shape decomposition*/);
-    aContext->OpenLocalContext();
-    aContext->NotUseDisplayedObjects();
-  }
-  // display or redisplay presentation
-  Handle(AIS_InteractiveObject) anAIS;
-  if (isVisible(theResult)) {
-    boost::shared_ptr<GeomAPI_AISObject> anObj = myResult2AISObjectMap[theResult];
-    if (anObj)
-      anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
-  }
-
-  // Activate selection of objects from prs
-  if (!anAIS.IsNull()) {
-    aContext->ClearSelected(false);  // ToCheck
-    //aContext->upClearSelected(false); // ToCheck
-    aContext->Load(anAIS, -1, true/*allow decomposition*/);
-    aContext->Deactivate(anAIS);
-
-    std::list<int>::const_iterator anIt = theModes.begin(), aLast = theModes.end();
-    for (; anIt != aLast; anIt++) {
-      aContext->Activate(anAIS, (*anIt));
-    }
-  }
-
-  if (isUpdateViewer)
-    updateViewer();
-}
-
 void XGUI_Displayer::deactivate(ObjectPtr theObject)
 {
   if (isVisible(theObject)) {
index 25b1cdfa204cbb892a4edafc5699c03ac7533ba5..4562e6d0880c53d470a37a6a867abf314065af84 100644 (file)
@@ -58,19 +58,6 @@ class XGUI_EXPORT XGUI_Displayer
   /// Display the given AIS object. To hide this object use corresponde erase method
   void display(boost::shared_ptr<GeomAPI_AISObject> theAIS, bool isUpdate = true);
 
-  /// Redisplay the shape and activate selection of sub-shapes
-  /// \param theFeature a feature instance
-  /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
-  //void redisplay(Handle(AIS_InteractiveObject) theAIS, const bool isUpdateViewer = true);
-
-  /// Display the shape and activate selection of sub-shapes
-  /// \param theFeature a feature instance
-  /// \param theShape a shape
-  /// \param theMode a list of local selection modes
-  /// \param isUpdateViewer the parameter whether the viewer should be update immediatelly
-  void activateInLocalContext(ObjectPtr theFeature, const std::list<int>& theModes,
-                              const bool isUpdateViewer = true);
-
   /// Stop the current selection and color the given features to the selection color
   /// \param theFeatures a list of features to be disabled
   /// \param theToStop the boolean state whether it it stopped or non stopped