]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
1. #700 - filter, preselection of two not coincide edges should fill only first control
authornds <natalia.donis@opencascade.com>
Tue, 14 Jul 2015 05:11:15 +0000 (08:11 +0300)
committernds <natalia.donis@opencascade.com>
Tue, 14 Jul 2015 05:11:15 +0000 (08:11 +0300)
2. Preselected default plane to be used as preselection for sketch operation
3. deviation coefficient [commented due to problems of performance]
4. rotation zero value correction after deselection of rotation elements [commented due to debug is necessary]

src/ModuleBase/ModuleBase_FilterValidated.cpp
src/ModuleBase/ModuleBase_ResultPrs.cpp
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/PartSet/PartSet_OperationPrs.cpp
src/PartSet/PartSet_SketcherMgr.cpp
src/PartSet/PartSet_WidgetSketchLabel.cpp
src/PartSet/PartSet_WidgetSketchLabel.h
src/XGUI/XGUI_Workshop.cpp

index a1b9bdb94e5c5ea7b180584410a95a904f43a5c0..88f16c6d8deb50eb9a9cf36c5b00d66ae77b1490 100644 (file)
@@ -23,11 +23,11 @@ Standard_Boolean ModuleBase_FilterValidated::IsOk(const Handle(SelectMgr_EntityO
   ModuleBase_Operation* anOperation = myWorkshop->module()->currentOperation();
   if (anOperation) {
     ModuleBase_IPropertyPanel* aPanel = anOperation->propertyPanel();
-    ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
-    if (!anActiveWidget)
-      anActiveWidget = aPanel->preselectionWidget();
+    ModuleBase_ModelWidget* aCurrentWidget = aPanel->preselectionWidget();
+    if (!aCurrentWidget)
+      aCurrentWidget = aPanel->activeWidget();
     ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
-                                                                           (anActiveWidget);
+                                                                           (aCurrentWidget);
     ModuleBase_ViewerPrs aPrs;
     myWorkshop->selection()->fillPresentation(aPrs, theOwner);
 
index 5dd2f536b8a825107dd5961046d5ffb3fd8665b0..4469a2189e12f661e92d143eb841dc693224059d 100644 (file)
@@ -5,6 +5,7 @@
 // Author:      Vitaly SMETANNIKOV
 
 #include "ModuleBase_ResultPrs.h"
+#include "ModuleBase_Tools.h"
 
 #include <ModelAPI_Tools.h>
 #include <ModelAPI_ResultConstruction.h>
@@ -65,7 +66,15 @@ void ModuleBase_ResultPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t
   myOriginalShape = aShapePtr->impl<TopoDS_Shape>();
   if (!myOriginalShape.IsNull()) {
     Set(myOriginalShape);
+
+    // change deviation coefficient to provide more precise circle
+    Handle(Prs3d_Drawer) aDrawer = Attributes();
+    Standard_Real aPrevDeviation = aDrawer->DeviationCoefficient();
+    //aDrawer->SetDeviationCoefficient(ModuleBase_Tools::defaultDeviationCoefficient());
+
     AIS_Shape::Compute(thePresentationManager, thePresentation, theMode);
+
+    //aDrawer->SetDeviationCoefficient(aPrevDeviation);
   }
 }
 
index 4dbc9ee3b5cfaeb57629567d166ae989e5c44912..40615158a050439aa864a95b0ad32044038b2ef1 100644 (file)
@@ -242,6 +242,10 @@ void checkObjects(const QObjectPtrList& theObjects, bool& hasResult, bool& hasFe
   }
 }
 
+double defaultDeviationCoefficient()
+{
+ return 1.e-5;
+}
 
 }
 
index f0d9ad2b6b6fbdd10529bf2e8bc356eed3e0db06..cc7ced07abde5356555f8011027a4d41666bf57b 100644 (file)
@@ -92,6 +92,11 @@ Check types of objects which are in the given list
 \param hasSubFeature will be set to true if list contains Sub-Feature objects
 */
 MODULEBASE_EXPORT void checkObjects(const QObjectPtrList& theObjects, bool& hasResult, bool& hasFeature, bool& hasParameter, bool& hasSubFeature);
+
+/*! Returns the default deviation coefficient value
+\return double value
+*/
+MODULEBASE_EXPORT double defaultDeviationCoefficient();
 }
 
 #endif
index 36de5da0313ead2c96c99ee835112f4f3946ce00..ca36cc88f68dd82f53f4f6cbb38bbd38117e3c19 100755 (executable)
@@ -11,6 +11,8 @@
 #include "XGUI_ModuleConnector.h"
 #include "XGUI_Displayer.h"
 
+#include "ModuleBase_Tools.h"
+
 #include <ModelAPI_Result.h>
 #include <ModelAPI_Attribute.h>
 #include <ModelAPI_AttributeRefAttr.h>
@@ -83,7 +85,12 @@ void PartSet_OperationPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t
     for (; aShIt != aShLast; aShIt++) {
       GeomShapePtr aGeomShape = *aShIt;
       TopoDS_Shape aShape = aGeomShape->impl<TopoDS_Shape>();
+      // change deviation coefficient to provide more precise circle
+      Standard_Real aPrevDeviation = aDrawer->DeviationCoefficient();
+      //aDrawer->SetDeviationCoefficient(ModuleBase_Tools::defaultDeviationCoefficient());
+
       StdPrs_WFDeflectionShape::Add(thePresentation, aShape, aDrawer);
+      //aDrawer->SetDeviationCoefficient(aPrevDeviation);
     }
   }
 }
index 73dd90c13ace843accb5019ce68b19eaaa2262ac..4c83fb774ec9348671923f3cba9804f1ca6c1463 100644 (file)
@@ -969,6 +969,9 @@ bool PartSet_SketcherMgr::isObjectOfSketch(const ObjectPtr& theObject) const
 
 void PartSet_SketcherMgr::onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>& thePln)
 {
+  if (myPlaneFilter.IsNull()) 
+   myPlaneFilter = new ModuleBase_ShapeInPlaneFilter();
+
   myPlaneFilter->setPlane(thePln);
 }
 
index 728ebf0ca7ba91700e2012e48c8a47b345bd428d..566552ba684cf91dac13c9a189239fe4fe658e29 100644 (file)
@@ -92,7 +92,12 @@ bool PartSet_WidgetSketchLabel::setSelection(QList<ModuleBase_ViewerPrs>& theVal
   if (plane().get())
     return true;
 
-  return ModuleBase_WidgetValidated::setSelection(theValues, theToValidate);
+  ModuleBase_ViewerPrs aPrs = theValues.first();
+  bool aDone = ModuleBase_WidgetValidated::setSelection(theValues, theToValidate);
+  if (aDone)
+    updateByPlaneSelected(aPrs);
+
+  return aDone;
 }
 
 QList<QWidget*> PartSet_WidgetSketchLabel::getControls() const
@@ -110,14 +115,17 @@ void PartSet_WidgetSketchLabel::onSelectionChanged()
     return;
   ModuleBase_ViewerPrs aPrs = aSelected.first();
 
-  bool isDone = ModuleBase_WidgetValidated::setSelection(aSelected, false);
-  if (!isDone)
-    return;
+  bool aDone = ModuleBase_WidgetValidated::setSelection(aSelected, false);
+  if (aDone)
+    updateByPlaneSelected(aPrs);
+}
 
-  // 3. hide main planes if they have been displayed
+void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrs& thePrs)
+{
+  // 1. hide main planes if they have been displayed
   erasePreviewPlanes();
-  // 4. if the planes were displayed, change the view projection
-  TopoDS_Shape aShape = aPrs.shape();
+  // 2. if the planes were displayed, change the view projection
+  TopoDS_Shape aShape = thePrs.shape();
   std::shared_ptr<GeomAPI_Shape> aGShape;
   std::shared_ptr<GeomAPI_Shape> aBaseShape;
 
@@ -162,15 +170,15 @@ void PartSet_WidgetSketchLabel::onSelectionChanged()
 
     myWorkshop->viewer()->setViewProjection(aXYZ.X(), aXYZ.Y(), aXYZ.Z());
   }
-  // 5. Clear text in the label
+  // 3. Clear text in the label
   myLabel->setText("");
   myLabel->setToolTip("");
   disconnect(workshop()->selector(), SIGNAL(selectionChanged()), 
               this, SLOT(onSelectionChanged()));
-  // 6. deactivate face selection filter
+  // 4. deactivate face selection filter
   activateFilters(false);
 
-  // 7. Clear selection mode and define sketching mode
+  // 5. Clear selection mode and define sketching mode
   //XGUI_Displayer* aDisp = workshop()->displayer();
   //aDisp->closeLocalContexts();
   emit planeSelected(plane());
@@ -179,7 +187,7 @@ void PartSet_WidgetSketchLabel::onSelectionChanged()
   // the selection by any label deactivation, but need to switch it off by stop the sketch
   activateSelection(true);
 
-  // 8. Update sketcher actions
+  // 6. Update sketcher actions
   XGUI_ActionsMgr* anActMgr = workshop()->actionsMgr();
   anActMgr->update();
   myWorkshop->viewer()->update();
index 3eddeb2d2c52a910b48e6e03a3e716586bbc0dbf..beaff58bec82b883e76ae7bb0741b3584fa9e21e 100644 (file)
@@ -110,6 +110,10 @@ protected:
   /// The methiod called when widget is activated
   virtual void activateCustom();
 
+  /// Erase preview planes, disconnect widget, change the view projection
+  /// \param thePrs a selected presentation
+  void updateByPlaneSelected(const ModuleBase_ViewerPrs& thePrs);
+
  protected:
   /// Activate or deactivate selection
   void activateSelection(bool toActivate);
index b2bb15a387c6e7fa2d59aaa8d420d26443d3db5e..92c15866223b15dd2be0f2cc722761aa0a5db1db 100644 (file)
@@ -365,6 +365,14 @@ void XGUI_Workshop::onOperationStarted(ModuleBase_Operation* theOperation)
   if (theOperation->getDescription()->hasXmlRepresentation()) {  //!< No need for property panel
     connectWithOperation(theOperation);
     setPropertyPanel(theOperation);
+    // filling the operation values by the current selection
+    // if the operation can be commited after the controls filling, the method perform should
+    // be stopped. Otherwise unnecessary presentations can be shown(e.g. operation prs in sketch)
+    if (!theOperation->isEditOperation()) {
+      theOperation->activateByPreselection();
+      if (operationMgr()->currentOperation() != theOperation)
+        return;
+    }
   }
   updateCommandStatus();
 
@@ -384,12 +392,6 @@ void XGUI_Workshop::onOperationStarted(ModuleBase_Operation* theOperation)
     deactivateActiveObject(*anIt, false);
   if (anObjects.size() > 0)
     myDisplayer->updateViewer();
-
-  // filling the operation values by the selection in the viewer
-  // it should be perfomed at the end of the method because it can commit the operation
-  // if after the controls fill, the operation becomes valid
-  if (!theOperation->isEditOperation())
-    theOperation->activateByPreselection();
 }
 
 //******************************************************