]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/PartSet/PartSet_Module.cpp
Salome HOME
Issue #2309 Possibility to hide faces : transparency using
[modules/shaper.git] / src / PartSet / PartSet_Module.cpp
index 282f82889d5d17f48ce890db8d10f880261c4185..1455f1ab08e55363ff68b2c20a1d1b38ac2e320f 100755 (executable)
 #include <GeomDataAPI_Point.h>
 #include <GeomDataAPI_Dir.h>
 
-#include <XGUI_Displayer.h>
-#include <XGUI_Workshop.h>
-#include <XGUI_OperationMgr.h>
-#include <XGUI_PropertyPanel.h>
-#include <XGUI_ModuleConnector.h>
+#include <XGUI_ActiveControlMgr.h>
+#include <XGUI_ActiveControlSelector.h>
+#include <XGUI_ActionsMgr.h>
 #include <XGUI_ContextMenuMgr.h>
-#include <XGUI_Tools.h>
-#include <XGUI_ObjectsBrowser.h>
-#include <XGUI_SelectionMgr.h>
+#include <XGUI_CustomPrs.h>
 #include <XGUI_DataModel.h>
+#include <XGUI_Displayer.h>
 #include <XGUI_ErrorMgr.h>
-#include <XGUI_CustomPrs.h>
+#include <XGUI_FacesPanelSelector.h>
+#include <XGUI_ModuleConnector.h>
+#include <XGUI_ObjectsBrowser.h>
+#include <XGUI_OperationMgr.h>
+#include <XGUI_PropertyPanel.h>
 #include <XGUI_SelectionMgr.h>
-#include <XGUI_ActionsMgr.h>
+#include <XGUI_Tools.h>
+#include <XGUI_Workshop.h>
 
-#include <SketchPlugin_Feature.h>
-#include <SketchPlugin_Sketch.h>
 #include <SketchPlugin_ConstraintAngle.h>
 #include <SketchPlugin_ConstraintLength.h>
 #include <SketchPlugin_ConstraintDistance.h>
 #include <SketchPlugin_ConstraintParallel.h>
 #include <SketchPlugin_ConstraintPerpendicular.h>
 #include <SketchPlugin_ConstraintRadius.h>
+#include <SketchPlugin_Feature.h>
+#include <SketchPlugin_Projection.h>
+#include <SketchPlugin_Sketch.h>
 
 #include <SketcherPrs_SymbolPrs.h>
 #include <SketcherPrs_Coincident.h>
@@ -188,6 +191,11 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   Config_PropManager::registerProp("Visualization", "sketch_preview_plane",
                           "Color of sketch plane", Config_Prop::Color,
                           PartSet_CustomPrs::OPERATION_SKETCH_PLANE());
+
+  Config_PropManager::registerProp("Visualization", "hidden_face_transparency",
+                                   "Hidden faces transparency",
+                                   Config_Prop::Double,
+                                   "0.8");
 }
 
 PartSet_Module::~PartSet_Module()
@@ -222,6 +230,17 @@ void PartSet_Module::deactivateSelectionFilters()
   }
 }
 
+void PartSet_Module::updateActiveSelectionFilters()
+{
+  XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(workshop());
+  XGUI_ActiveControlSelector* anActiveSelector = aWorkshop->activeControlMgr()->activeSelector();
+
+  if (anActiveSelector && anActiveSelector->getType() == XGUI_FacesPanelSelector::Type())
+    sketchMgr()->deactivateSelectionFilters();
+  else
+    sketchMgr()->activateSelectionFilters();
+}
+
 void PartSet_Module::storeSelection()
 {
   // cash is used only to restore selection, so it should be filled in storeSelection and
@@ -624,7 +643,6 @@ bool PartSet_Module::isSketchNeutralPointActivated() const
 void PartSet_Module::closeDocument()
 {
   myActivePartIndex = QModelIndex();
-  clearViewer();
 }
 
 void PartSet_Module::clearViewer()
@@ -935,15 +953,21 @@ void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS)
 {
   Handle(AIS_InteractiveObject) anAIS = theAIS->impl<Handle(AIS_InteractiveObject)>();
   if (!anAIS.IsNull()) {
+    bool aToUseZLayer = false;
+    FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
+    if (aFeature.get() && PartSet_Tools::findRefsToMeFeature(aFeature,
+                                                        SketchPlugin_Projection::ID()))
+      aToUseZLayer = true;
     Handle(AIS_InteractiveContext) aCtx = anAIS->GetContext();
     Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAIS);
     if (!aDim.IsNull()) {
-      aCtx->SetZLayer(aDim, myVisualLayerId);
+      aToUseZLayer = true;
     } else {
       Handle(SketcherPrs_SymbolPrs) aCons = Handle(SketcherPrs_SymbolPrs)::DownCast(anAIS);
       if (!aCons.IsNull())
-        aCtx->SetZLayer(aCons, myVisualLayerId);
+      aToUseZLayer = true;
     }
+    aCtx->SetZLayer(anAIS, myVisualLayerId);
   }
 }
 
@@ -986,28 +1010,33 @@ void PartSet_Module::onViewTransformed(int theTrsfType)
   }
   if (aView.IsNull())
     return;
-  double aLen = aView->Convert(SketcherPrs_Tools::getDefaultArrowSize());
-
-  double aPrevLen = SketcherPrs_Tools::getArrowSize();
-  SketcherPrs_Tools::setArrowSize(aLen);
-  const double aPrevScale = aViewer->Scale(aViewer->activeView());
-  const double aCurScale = aViewer->activeView()->Camera()->Scale();
-  aViewer->SetScale(aViewer->activeView(), aCurScale);
-  SketcherPrs_Tools::setTextHeight (aCurScale / aPrevScale * SketcherPrs_Tools::getTextHeight());
-  bool isModified = false;
-  QList<AISObjectPtr> aPrsList = aDisplayer->displayedPresentations();
-  foreach (AISObjectPtr aAIS, aPrsList) {
-    Handle(AIS_InteractiveObject) aAisObj = aAIS->impl<Handle(AIS_InteractiveObject)>();
-
-    Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(aAisObj);
-    if (!aDim.IsNull()) {
-      aDim->DimensionAspect()->ArrowAspect()->SetLength(aLen);
-      aContext->Redisplay(aDim, false);
-      isModified = true;
+
+  ModuleBase_Operation* aCurrentOperation = myWorkshop->currentOperation();
+  if (aCurrentOperation &&
+    (PartSet_SketcherMgr::isSketchOperation(aCurrentOperation) ||
+     sketchMgr()->isNestedSketchOperation(aCurrentOperation)))
+  {
+    double aLen = aView->Convert(SketcherPrs_Tools::getConfigArrowSize());
+
+    double aPrevLen = SketcherPrs_Tools::getArrowSize();
+    SketcherPrs_Tools::setArrowSize(aLen);
+    const double aCurScale = aViewer->activeView()->Camera()->Scale();
+    aViewer->SetScale(aViewer->activeView(), aCurScale);
+    bool isModified = false;
+    QList<AISObjectPtr> aPrsList = aDisplayer->displayedPresentations();
+    foreach (AISObjectPtr aAIS, aPrsList) {
+      Handle(AIS_InteractiveObject) aAisObj = aAIS->impl<Handle(AIS_InteractiveObject)>();
+
+      Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(aAisObj);
+      if (!aDim.IsNull()) {
+        aDim->DimensionAspect()->ArrowAspect()->SetLength(aLen);
+        aContext->Redisplay(aDim, false);
+        isModified = true;
+      }
     }
+    if (isModified)
+      aDisplayer->updateViewer();
   }
-  if (isModified)
-    aDisplayer->updateViewer();
 }
 
 bool PartSet_Module::isCustomPrsActivated(const ModuleBase_CustomizeFlag& theFlag) const
@@ -1187,8 +1216,9 @@ void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const
   bool hasParameter = false;
   bool hasCompositeOwner = false;
   bool hasResultInHistory = false;
+  bool hasFolder = false;
   ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter,
-                                  hasCompositeOwner, hasResultInHistory);
+                                  hasCompositeOwner, hasResultInHistory, hasFolder);
 
   ModuleBase_Operation* aCurrentOp = myWorkshop->currentOperation();
   if (aSelected == 1) {