]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1343. Improvement of Extrusion and Revolution operations: Bug correction:...
authornds <nds@opencascade.com>
Mon, 4 Apr 2016 13:22:25 +0000 (16:22 +0300)
committernds <nds@opencascade.com>
Mon, 4 Apr 2016 13:22:25 +0000 (16:22 +0300)
src/ModuleBase/ModuleBase_WidgetSelector.cpp
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/ModuleBase/ModuleBase_WidgetValidated.h
src/PartSet/PartSet_WidgetSketchCreator.cpp
src/PartSet/PartSet_WidgetSketchCreator.h
src/PartSet/PartSet_WidgetSketchLabel.cpp

index 28f94ae02e80bcd47104e0c4247439f2ee7f3363..5dc76b1644ce711acfb4b385399d1b58894a956f 100755 (executable)
@@ -175,8 +175,7 @@ bool ModuleBase_WidgetSelector::setSelectionCustom(const ModuleBase_ViewerPrs& t
   GeomShapePtr aShape;
   getGeomSelection(thePrs, anObject, aShape);
 
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
-  ModuleBase_Tools::setObject(anAttribute, anObject, aShape, myWorkshop, false);
+  ModuleBase_Tools::setObject(attributeToValidate(), anObject, aShape, myWorkshop, false);
   return true;
 }
 
index fd41a85f5ed8131942641cd40ec47e1570792d98..be322691a2a6a66b881ec417b2c4d0ee492aaaa1 100644 (file)
@@ -57,21 +57,14 @@ void ModuleBase_WidgetValidated::clearValidatedCash()
 void ModuleBase_WidgetValidated::storeAttributeValue()
 {
   myIsInValidate = true;
-  DataPtr aData = myFeature->data();
-  AttributePtr anAttribute = myFeature->attribute(attributeID());
-
-  myAttributeStore->storeAttributeValue(anAttribute, myWorkshop);
+  myAttributeStore->storeAttributeValue(attributeToValidate(), myWorkshop);
 }
 
 //********************************************************************
 void ModuleBase_WidgetValidated::restoreAttributeValue(const bool theValid)
 {
   myIsInValidate = false;
-
-  DataPtr aData = myFeature->data();
-  AttributePtr anAttribute = myFeature->attribute(attributeID());
-
-  myAttributeStore->restoreAttributeValue(anAttribute, myWorkshop);
+  myAttributeStore->restoreAttributeValue(attributeToValidate(), myWorkshop);
 }
 
 //********************************************************************
@@ -124,6 +117,12 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrs& th
   return aValid;
 }
 
+//********************************************************************
+AttributePtr ModuleBase_WidgetValidated::attributeToValidate() const
+{
+  return myFeature->attribute(attributeID());
+}
+
 //********************************************************************
 bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& theValue)
 {
@@ -140,6 +139,7 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th
 
   // stores the current values of the widget attribute
   bool isFlushesActived, isAttributeSetInitializedBlocked;
+
   blockAttribute(true, isFlushesActived, isAttributeSetInitializedBlocked);
 
   storeAttributeValue();
@@ -179,7 +179,7 @@ bool ModuleBase_WidgetValidated::isValidAttribute() const
 {
   SessionPtr aMgr = ModelAPI_Session::get();
   ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
-  AttributePtr anAttribute = myFeature->attribute(attributeID());
+  AttributePtr anAttribute = attributeToValidate();
   std::string aValidatorID, anError;
   return aFactory->validate(anAttribute, aValidatorID, anError);
 }
@@ -217,7 +217,7 @@ void ModuleBase_WidgetValidated::blockAttribute(const bool& theToBlock, bool& is
 {
   Events_Loop* aLoop = Events_Loop::loop();
   DataPtr aData = myFeature->data();
-  AttributePtr anAttribute = myFeature->attribute(attributeID());
+  AttributePtr anAttribute = attributeToValidate();
   if (theToBlock) {
     // blocks the flush signals to avoid the temporary objects visualization in the viewer
     // they should not be shown in order to do not lose highlight by erasing them
index 5f8aae3b76815ae9c7c464e915d7fbfa06b4f211..ef503aacc7941298cc4a78e3ecbab69564c89abd 100644 (file)
@@ -14,6 +14,7 @@
 #include <GeomAPI_Shape.h>
 #include <GeomAPI_AISObject.h>
 #include <ModelAPI_Object.h>
+#include <ModelAPI_Attribute.h>
 
 #include <SelectMgr_ListOfFilter.hxx>
 
@@ -61,6 +62,11 @@ protected:
   /// \return a boolean value
   bool isValidInFilters(const ModuleBase_ViewerPrs& thePrs);
 
+  /// Retunrs attribute, which should be validated. In default implementation,
+  /// this is an attribute of ID
+  /// \return an attribute
+  virtual AttributePtr attributeToValidate() const;
+
   /// 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
index d7130e5f6a83f60676be210f6faf6819c41969f7..1379e1cdcb99eb92d280a7bb11342480d9845388 100644 (file)
@@ -114,6 +114,11 @@ bool PartSet_WidgetSketchCreator::storeValueCustom() const
   return true;
 }
 
+AttributePtr PartSet_WidgetSketchCreator::attributeToValidate() const
+{
+  return myFeature->attribute(myAttributeListID);
+}
+
 void PartSet_WidgetSketchCreator::activateSelectionControl()
 {
   setVisibleSelectionControl(true);
@@ -248,12 +253,13 @@ bool PartSet_WidgetSketchCreator::setSelection(QList<ModuleBase_ViewerPrs>& theV
 {
   bool aDone = false;
   if (!startSketchOperation(theValues)) {
+    ModuleBase_WidgetSelector::setSelection(theValues, theToValidate);
     QList<ModuleBase_ViewerPrs>::const_iterator anIt = theValues.begin(), aLast = theValues.end();
     bool aProcessed = false;
     for (; anIt != aLast; anIt++) {
       ModuleBase_ViewerPrs aValue = *anIt;
       if (!theToValidate || isValidInFilters(aValue))
-        aProcessed = setBaseAttributeSelection(aValue) || aProcessed;
+        aProcessed = setSelectionCustom(aValue) || aProcessed;
     }
     aDone = aProcessed;
     if (aProcessed) {
@@ -441,17 +447,3 @@ void PartSet_WidgetSketchCreator::onResumed(ModuleBase_Operation* theOp)
     }
   }
 }
-
-bool PartSet_WidgetSketchCreator::setBaseAttributeSelection(const ModuleBase_ViewerPrs& theValue)
-{
-  bool isDone = false;
-  ObjectPtr anObject;
-  GeomShapePtr aShape;
-  getGeomSelection(theValue, anObject, aShape);
-
-  std::string anAttributeId = myAttributeListID;
-  DataPtr aData = myFeature->data();
-  ModuleBase_Tools::setObject(aData->attribute(anAttributeId), anObject, aShape,
-                              myWorkshop, false);
-  return true;
-}
index a229fda230b84767ac7289860fa8b5feef168e19..d11c92e60732d8803e7ca85fdc55262da56eca6d 100644 (file)
@@ -75,6 +75,11 @@ protected:
 
   virtual bool restoreValueCustom();
 
+  /// Retunrs attribute, which should be validated. In default implementation,
+  /// this is an attribute of ID
+  /// \return an attribute
+  virtual AttributePtr attributeToValidate() const;
+
   /// Sets the selection control visible and set the current widget as active in property panel
   /// It leads to connect to onSelectionChanged slot
   void activateSelectionControl();
@@ -110,11 +115,6 @@ private:
   /// \return true if the sketch is started
   bool startSketchOperation(const QList<ModuleBase_ViewerPrs>& theValues);
 
-  /// Appends the selection to the sketch base attribute 
-  /// \param theValue a selection value from the viewer
-  /// \return true if the value is set
-  bool setBaseAttributeSelection(const ModuleBase_ViewerPrs& theValue);
-
 private:
   std::string myAttributeListID;
 
index 01ebff93e83dd51db867cf73bc1b835ff5c0753d..262070bc88f4fd4f911efeca7500cafe27d495e3 100644 (file)
@@ -359,9 +359,11 @@ bool PartSet_WidgetSketchLabel::canFillSketch(const ModuleBase_ViewerPrs& thePrs
     std::shared_ptr<GeomAPI_Face> aGeomFace;
     const TopoDS_Shape aShape = thePrs.shape();
     if (aShape.IsNull()) {
-      GeomShapePtr aGeomShape = aResult->shape();
-      std::shared_ptr<GeomAPI_Face> aGeomFace(new GeomAPI_Face(aGeomShape));
-      aCanFillSketch = aGeomFace.get() && aGeomFace->isPlanar();
+      if (aResult.get()) {
+        GeomShapePtr aGeomShape = aResult->shape();
+        std::shared_ptr<GeomAPI_Face> aGeomFace(new GeomAPI_Face(aGeomShape));
+        aCanFillSketch = aGeomFace.get() && aGeomFace->isPlanar();
+      }
     }
     else if (aShape.ShapeType() == TopAbs_FACE) {
       std::shared_ptr<GeomAPI_Face> aGeomFace(new GeomAPI_Face());