Salome HOME
updated copyright message
[modules/shaper.git] / src / PartSet / PartSet_WidgetSketchLabel.cpp
index 9365adc575d8067ce1476cc03c8c32d7ec47f706..4a5edfa01266b8b6093f1fb59bbbf450bf1e9feb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -63,7 +63,6 @@
 #include <gp_Pnt.hxx>
 #include <gp_Dir.hxx>
 #include <AIS_Shape.hxx>
-#include <AIS_DimensionSelectionMode.hxx>
 #include <Bnd_Box.hxx>
 
 #include <Config_WidgetAPI.h>
 #include <QDialog>
 #include <QTimer>
 
+#ifdef WIN32
+#pragma warning(disable : 4456) // for nested foreach
+#endif
+
 #ifndef DBL_MAX
 #define DBL_MAX 1.7976931348623158e+308
 #endif
@@ -158,15 +161,29 @@ myIsSelection(false)
   ModuleBase_Tools::zeroMargins(aLayout);
 
   QGroupBox* aViewBox = new QGroupBox(tr("Sketcher plane"), this);
-  QVBoxLayout* aViewLayout = new QVBoxLayout(aViewBox);
+  QGridLayout* aViewLayout = new QGridLayout(aViewBox);
 
   myViewInverted = new QCheckBox(tr("Reversed"), aViewBox);
-  aViewLayout->addWidget(myViewInverted);
+  aViewLayout->addWidget(myViewInverted, 0, 0);
+
+  // Sketch plane visibility
+  myViewVisible = new QCheckBox(tr("Visible"), aViewBox);
+  PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
+  PartSet_PreviewSketchPlane* aPreviewPlane = aModule->sketchMgr()->previewSketchPlane();
+  if (aPreviewPlane->isPlaneCreated())
+    // init with current state
+    myViewVisible->setChecked(aPreviewPlane->isDisplayed());
+  else
+    // true by default (at start of sketch creation)
+    myViewVisible->setChecked(true);
+
+  aViewLayout->addWidget(myViewVisible, 0, 1, Qt::AlignRight);
+  connect(myViewVisible, SIGNAL(toggled(bool)), this, SLOT(onShowViewPlane(bool)));
 
   QPushButton* aSetViewBtn =
     new QPushButton(QIcon(":icons/plane_view.png"), tr("Set plane view"), aViewBox);
   connect(aSetViewBtn, SIGNAL(clicked(bool)), this, SLOT(onSetPlaneView()));
-  aViewLayout->addWidget(aSetViewBtn);
+  aViewLayout->addWidget(aSetViewBtn, 1, 0, 1, 2);
 
   aLayout->addWidget(aViewBox);
 
@@ -313,7 +330,7 @@ bool PartSet_WidgetSketchLabel::setSelectionInternal(
   bool aDone = false;
   if (theValues.empty()) {
     // In order to make reselection possible, set empty object and shape should be done
-    setSelectionCustom(std::shared_ptr<ModuleBase_ViewerPrs>(
+    setSelectionCustom(ModuleBase_ViewerPrsPtr(
                               new ModuleBase_ViewerPrs(ObjectPtr(), GeomShapePtr(), NULL)));
     aDone = false;
   }
@@ -359,8 +376,10 @@ void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrs
   if (aModule) {
     CompositeFeaturePtr aSketch = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
     aModule->sketchMgr()->previewSketchPlane()->setSizeOfView(aSizeOfView, isSetSizeOfView);
-    // Call of createSketchPlane is managed by events Loop
-    //aModule->sketchMgr()->previewSketchPlane()->createSketchPlane(aSketch, myWorkshop);
+    if (myViewVisible->isChecked())
+      aModule->sketchMgr()->previewSketchPlane()->createSketchPlane(aSketch, myWorkshop);
+    else
+      aModule->sketchMgr()->previewSketchPlane()->clearPlanePreview();
   }
   // 2. if the planes were displayed, change the view projection
 
@@ -733,7 +752,7 @@ void PartSet_WidgetSketchLabel::onSetPlaneView()
 
 
 //******************************************************
-QList<std::shared_ptr<ModuleBase_ViewerPrs>> PartSet_WidgetSketchLabel::findCircularEdgesInPlane()
+QList<ModuleBase_ViewerPrsPtr> PartSet_WidgetSketchLabel::findCircularEdgesInPlane()
 {
   QList<std::shared_ptr<ModuleBase_ViewerPrs>> aResult;
   XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(myWorkshop);
@@ -755,7 +774,7 @@ QList<std::shared_ptr<ModuleBase_ViewerPrs>> PartSet_WidgetSketchLabel::findCirc
             bool isContains = false;
             // Check that edge is not used.
             // It is possible that the same edge will be taken from different faces
-            foreach(std::shared_ptr<ModuleBase_ViewerPrs> aPrs, aResult) {
+            foreach(ModuleBase_ViewerPrsPtr aPrs, aResult) {
               GeomAPI_Edge aUsedEdge(aPrs->shape());
               if (aUsedEdge.isEqual(aEdgeShape)) {
                 isContains = true;
@@ -763,8 +782,7 @@ QList<std::shared_ptr<ModuleBase_ViewerPrs>> PartSet_WidgetSketchLabel::findCirc
               }
             }
             if (!isContains) {
-              std::shared_ptr<ModuleBase_ViewerPrs>
-                aPrs(new ModuleBase_ViewerPrs(aResObj, aEdgeShape));
+              ModuleBase_ViewerPrsPtr aPrs(new ModuleBase_ViewerPrs(aResObj, aEdgeShape));
               aResult.append(aPrs);
             }
           }
@@ -880,4 +898,21 @@ bool PartSet_WidgetSketchLabel::eventFilter(QObject* theObj, QEvent* theEvent)
       onShowPanel();
   }
   return ModuleBase_WidgetValidated::eventFilter(theObj, theEvent);
-}
\ No newline at end of file
+}
+
+void PartSet_WidgetSketchLabel::onShowViewPlane(bool toShow)
+{
+  PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
+  PartSet_PreviewSketchPlane* aPreviewPlane = aModule->sketchMgr()->previewSketchPlane();
+  if (toShow) {
+    CompositeFeaturePtr aSketch = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
+    if (aPreviewPlane->isPlaneCreated())
+      aPreviewPlane->displaySketchPlane(myWorkshop);
+    else
+      aPreviewPlane->createSketchPlane(aSketch, myWorkshop);
+  }
+  else {
+    aPreviewPlane->eraseSketchPlane(myWorkshop, false);
+  }
+  myWorkshop->viewer()->update();
+}