Salome HOME
Sketch selection in the browser for extrusion operation
authornds <natalia.donis@opencascade.com>
Thu, 19 Mar 2015 05:42:08 +0000 (08:42 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 19 Mar 2015 05:42:08 +0000 (08:42 +0300)
An empty shape for the sketch result

src/ModuleBase/ModuleBase_FilterValidated.cpp
src/ModuleBase/ModuleBase_IModule.h
src/ModuleBase/ModuleBase_IWorkshop.cpp
src/ModuleBase/ModuleBase_IWorkshop.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/ModuleBase/ModuleBase_WidgetValidated.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_Displayer.h

index 20c1692625886efa1696088f5e4213082d28bc30..a6336d3533360bdf3c7c3f7e345ca44a297a4dfe 100644 (file)
@@ -4,61 +4,25 @@
 // Created:     17 Mar 2015
 // Author:      Natalia ERMOLAEVA
 
-
 #include "ModuleBase_FilterValidated.h"
 #include "ModuleBase_IWorkshop.h"
 
-#include <ModelAPI_Session.h>
-#include <ModelAPI_Document.h>
-#include <ModelAPI_ResultConstruction.h>
-
-#include <AIS_InteractiveObject.hxx>
-#include <AIS_Shape.hxx>
-
-#include <StdSelect_BRepOwner.hxx>
-
-#include <BRep_Tool.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <Geom_Curve.hxx>
-
-#include <ModelAPI_CompositeFeature.h>
-#include <GeomAPI_ICustomPrs.h>
-
+#include <ModuleBase_IModule.h>
+#include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_Operation.h>
+#include <ModuleBase_WidgetValidated.h>
 
 IMPLEMENT_STANDARD_HANDLE(ModuleBase_FilterValidated, SelectMgr_Filter);
 IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_FilterValidated, SelectMgr_Filter);
 
 Standard_Boolean ModuleBase_FilterValidated::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
 {
-/*  // global selection should be ignored, the filter processes only selected sub-shapes
-  Handle(StdSelect_BRepOwner) aShapeOwner = Handle(StdSelect_BRepOwner)::DownCast(theOwner);
-  if (!aShapeOwner.IsNull()) {
-    if (!aShapeOwner->ComesFromDecomposition())
-      return Standard_True;
-  }
-
-  if (theOwner->HasSelectable()) {
-    Handle(AIS_InteractiveObject) aAisObj = 
-      Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
-    if (!aAisObj.IsNull()) {
-      std::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
-      aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aAisObj));
-      ObjectPtr aObj = myWorkshop->findPresentedObject(aAISObj);
+  ModuleBase_Operation* anOperation = myWorkshop->module()->currentOperation();
+  ModuleBase_IPropertyPanel* aPanel = anOperation->propertyPanel();
 
-      ResultConstructionPtr aConstr = 
-        std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aObj);
-      if (aConstr != NULL) {
-        // it provides selection only on compositie features, construction without composite
-        // feature is not selectable
-        FeaturePtr aFeature = ModelAPI_Feature::feature(aConstr);
-        CompositeFeaturePtr aComposite = 
-          std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFeature);
-        return aComposite && aComposite->numberOfSubs() > 0;
-      }
-    }
-  }
-  */
-  return Standard_False;
+  ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
+  ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
+                                                                          (anActiveWidget);
+  return !aWidgetValidated || aWidgetValidated->isValid(theOwner);
 }
 
index 1e467d859cdf7fb1bc34dd87e96229bff441b3c4..ffe5139479fdc09fdcc09043798e4b6fcd413786 100644 (file)
@@ -69,6 +69,10 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
   /// Realizes some functionality by an operation abort\r
   virtual void operationAborted(ModuleBase_Operation* theOperation) {}\r
 \r
+  /// Realizes some functionality by an operation start\r
+  /// \param theOperation a started operation\r
+  virtual ModuleBase_Operation* currentOperation() const = 0;\r
+\r
   /// Add menu atems for viewer into the given menu\r
   /// \param theMenu a popup menu to be shown in the viewer\r
   virtual void addViewerItems(QMenu* theMenu) const {}\r
index 4531933bc2e4164bf4f3b8f28dfa79b77edee3c5..6105bf263ae0f27247bb1409b92bd05d3d5bacc8 100644 (file)
@@ -7,6 +7,17 @@
 #include "ModuleBase_IWorkshop.h"
 #include "ModuleBase_FilterFactory.h"
 
+ModuleBase_IWorkshop::ModuleBase_IWorkshop(QObject* theParent)
+: QObject(theParent)
+{
+  myValidatorFilter = new ModuleBase_FilterValidated(this);
+}
+
+Handle(ModuleBase_FilterValidated) ModuleBase_IWorkshop::validatorFilter()
+{
+  return myValidatorFilter;
+}
+
 ModuleBase_FilterFactory* ModuleBase_IWorkshop::selectionFilters() const
 {
   static ModuleBase_FilterFactory* aFactory = new ModuleBase_FilterFactory;
index b7f02f4a11740600f0ba31338599ddbac1fdcfd0..3646e630c95b18ae5e879150aef6a28f1c18ab98 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "ModuleBase.h"
 #include "ModuleBase_Definitions.h"
+#include <ModuleBase_FilterValidated.h>
 
 #include <ModelAPI_Object.h>
 #include <GeomAPI_AISObject.h>
@@ -31,9 +32,7 @@ Q_OBJECT
  public:
    /// Constructor
    /// \param theParent parent object
-  ModuleBase_IWorkshop(QObject* theParent)
-      : QObject(theParent)
-  {}
+  ModuleBase_IWorkshop(QObject* theParent);
 
   virtual ~ModuleBase_IWorkshop()
   {}
@@ -54,6 +53,10 @@ Q_OBJECT
   //! Returns current viewer
   virtual ModuleBase_IViewer* viewer() const = 0;
 
+  /// A filter to process an attribute validators
+  /// \return a filter
+  Handle(ModuleBase_FilterValidated) validatorFilter();
+
   //! Returns the factory of selection filters : the only one instance per application
   ModuleBase_FilterFactory* selectionFilters() const;
   
@@ -80,6 +83,9 @@ signals:
   /// Signal which is emited after activation of property panel
   void propertyPanelActivated();
 
+protected:
+  /// A filter to process an attribute validators
+  Handle(ModuleBase_FilterValidated) myValidatorFilter;
 };
 
 #endif
index a6f05af6025c5eb23d39d9bc6ad3ca0b4a825a12..509814ee6c0c75c4803c29d5e962edcc868d775e 100644 (file)
@@ -3,18 +3,21 @@
 #include <ModuleBase_WidgetValidated.h>
 #include <ModuleBase_FilterFactory.h>
 #include <ModuleBase_IViewer.h>
-#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
 
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
 #include <ModelAPI_ResultValidator.h>
+#include <ModelAPI_AttributeValidator.h>
+
+#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
+#include <SelectMgr_EntityOwner.hxx>
 
 #include <QWidget>
 
 ModuleBase_WidgetValidated::ModuleBase_WidgetValidated(QWidget* theParent,
                                                        const Config_WidgetAPI* theData,
                                                        const std::string& theParentId)
   : ModuleBase_ModelWidget(theParent, theData, theParentId)
+ : ModuleBase_ModelWidget(theParent, theData, theParentId)
 {
 }
 
@@ -22,6 +25,47 @@ ModuleBase_WidgetValidated::~ModuleBase_WidgetValidated()
 {
 }
 
+bool ModuleBase_WidgetValidated::isValid(const Handle_SelectMgr_EntityOwner& theOwner)
+{
+  backupAttributeValue(true);
+
+  setValue(theOwner);
+  bool aValid = isValidAttribute();
+  backupAttributeValue(false);
+
+  return aValid;
+}
+
+//********************************************************************
+bool ModuleBase_WidgetValidated::isValidAttribute() const
+{
+  SessionPtr aMgr = ModelAPI_Session::get();
+  ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
+  std::list<ModelAPI_Validator*> aValidators;
+  std::list<std::list<std::string> > anArguments;
+  aFactory->validators(parentID(), attributeID(), aValidators, anArguments);
+
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = myFeature->attribute(attributeID());
+
+  aData->blockSendAttributeUpdated(true);
+
+    // 3. check the acceptability of the current values
+  std::list<ModelAPI_Validator*>::iterator aValidator = aValidators.begin();
+  std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
+  bool aValid = true;
+  for (; aValidator != aValidators.end() && aValid; aValidator++, aArgs++) {
+    const ModelAPI_AttributeValidator* aAttrValidator =
+        dynamic_cast<const ModelAPI_AttributeValidator*>(*aValidator);
+    if (aAttrValidator) {
+      aValid = aAttrValidator->isValid(anAttribute, *aArgs);
+    }
+  }
+  aData->blockSendAttributeUpdated(false);
+
+  return aValid;
+}
+
 //********************************************************************
 bool ModuleBase_WidgetValidated::isValid(ObjectPtr theObj, GeomShapePtr theShape) const
 {
@@ -52,7 +96,13 @@ void ModuleBase_WidgetValidated::activateFilters(ModuleBase_IWorkshop* theWorksh
                                                  const bool toActivate) const
 {
   ModuleBase_IViewer* aViewer = theWorkshop->viewer();
-
+  /*
+  Handle(SelectMgr_Filter) aSelFilter = theWorkshop->validatorFilter();
+  if (toActivate)
+    aViewer->addSelectionFilter(aSelFilter);
+  else
+    aViewer->removeSelectionFilter(aSelFilter);*/
+  
   // apply filters loaded from the XML definition of the widget
   ModuleBase_FilterFactory* aFactory = theWorkshop->selectionFilters();
   SelectMgr_ListOfFilter aFactoryFilters;
index 014668e12731848f7c303c29dc570cb143558a27..03b3175cec5322f18cf8bd7dd3c37908cdd64f13 100644 (file)
@@ -19,6 +19,7 @@
 class QWidget;
 class ModuleBase_IWorkshop;
 class Config_WidgetAPI;
+class Handle_SelectMgr_EntityOwner;
 
 /**
 * \ingroup GUI
@@ -37,7 +38,27 @@ class MODULEBASE_EXPORT ModuleBase_WidgetValidated : public ModuleBase_ModelWidg
                              const std::string& theParentId);
   virtual ~ModuleBase_WidgetValidated();
 
+  /// Checks all widget validator if the owner is valid
+  /// \param theOwner a selected owner in the view
+  /// \return a boolean value
+  bool isValid(const Handle_SelectMgr_EntityOwner& theOwner);
+
 protected:
+  /// Creates a backup of the current values of the attribute
+  /// It should be realized in the specific widget because of different
+  /// parameters of the current attribute
+  /// \param isBackup a boolean flag, if true, store values from the attribute
+  /// to backup, otherwise set the backed up values to the attribute
+  virtual void backupAttributeValue(const bool isBackup) {}//= 0;
+
+  /// Fills the attribute with the value of the selected owner
+  /// \param theOwner a selected owner
+  virtual void setValue(const Handle_SelectMgr_EntityOwner& theOwner) {}//= 0;
+
+  /// Checks the current attibute in all attribute validators
+  // \return true if all validators return that the attribute is valid
+  bool isValidAttribute() const;
+
   /// Check the selected with validators if installed
   /// \param theObj the object for checking
   /// \param theShape the shape for checking
index cb62b8797e4bb8cf8fc57af15810e506f12fa78e..83f59bfe61bab2cde6132c700e168076a81b57df 100644 (file)
@@ -218,6 +218,13 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation)
   myWorkshop->viewer()->removeSelectionFilter(myDocumentShapeFilter);
 }
 
+ModuleBase_Operation* PartSet_Module::currentOperation() const
+{
+  XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
+  XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
+  return anOpMgr->currentOperation();
+}
+
 bool PartSet_Module::canUndo() const
 {
   bool aCanUndo = false;
index 138ffb3de55b36efdd68503bc2084213ced3b74e..11214c096ee79f5a970eaa214becfcd71ae4230c 100644 (file)
@@ -79,6 +79,10 @@ public:
   /// \param theOperation a stopped operation
   virtual void operationStopped(ModuleBase_Operation* theOperation);
 
+  /// Realizes some functionality by an operation start
+  /// \param theOperation a started operation
+  virtual ModuleBase_Operation* currentOperation() const;
+
   /// Returns action according to the given ID
   /// \param theId an action identifier, it should be uniqued in the bounds of the module
   QAction* action(const QString& theId) const;
index bfdf8a5d58dfc26824948896719e6dc78ec70907..da11c4d8ef6f65ba1ca039fe7f9c208d41c92a43 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <ModuleBase_Definitions.h>
 #include <ModuleBase_ViewerPrs.h>
-#include <ModuleBase_FilterValidated.h>
 
 #include <GeomAPI_ICustomPrs.h>
 
@@ -232,8 +231,6 @@ class XGUI_EXPORT XGUI_Displayer
   /// A container for selection filters
   Handle(SelectMgr_AndFilter) myAndFilter;
 
-  Handle(ModuleBase_FilterValidated) myFilterValidated;
-
   /// A default custom presentation, which is used if the displayed feature is not a custom presentation
   GeomCustomPrsPtr myCustomPrs;