]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1343 Improvement of Extrusion and Revolution operations: revolution/revolution...
authornds <nds@opencascade.com>
Thu, 24 Mar 2016 07:35:35 +0000 (10:35 +0300)
committerdbv <dbv@opencascade.com>
Wed, 6 Apr 2016 10:24:33 +0000 (13:24 +0300)
src/FeaturesPlugin/FeaturesPlugin_CompositeSketch.cpp
src/FeaturesPlugin/FeaturesPlugin_CompositeSketch.h
src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp
src/FeaturesPlugin/FeaturesPlugin_Extrusion.h
src/FeaturesPlugin/FeaturesPlugin_Revolution.cpp
src/FeaturesPlugin/FeaturesPlugin_Revolution.h
src/FeaturesPlugin/extrusionfuse_widget.xml
src/FeaturesPlugin/revolution_widget.xml
src/FeaturesPlugin/revolutioncut_widget.xml
src/FeaturesPlugin/revolutionfuse_widget.xml

index 5f7354120f011370e2669ccc646db8877724455e..3d8ce83ef4473825baaffd406a6ac879419bf2cd 100644 (file)
@@ -28,7 +28,7 @@ void FeaturesPlugin_CompositeSketch::initAttributes()
   data()->addAttribute(SKETCH_SELECTION_ID(), ModelAPI_AttributeSelection::typeId());
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), SKETCH_SELECTION_ID());
 
-  initMakeSolidsAttributes();
+  //initMakeSolidsAttributes();
 }
 
 //=================================================================================================
@@ -85,6 +85,9 @@ bool FeaturesPlugin_CompositeSketch::isSub(ObjectPtr theObject) const
 //=================================================================================================
 void FeaturesPlugin_CompositeSketch::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)
 {
+  AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
+  if (aFacesSelectionList.get() && aFacesSelectionList->size() > 0)
+    aFacesSelectionList->clear();
 }
 
 //=================================================================================================
@@ -215,3 +218,20 @@ void FeaturesPlugin_CompositeSketch::loadNamingDS(std::shared_ptr<ModelAPI_Resul
     }
   }
 }
+//=================================================================================================
+void FeaturesPlugin_CompositeSketch::setSketchObjectToList()
+{
+  std::shared_ptr<ModelAPI_Feature> aSketchFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(
+                                                       reference(SKETCH_OBJECT_ID())->value());
+
+  if(aSketchFeature.get() && !aSketchFeature->results().empty()) {
+    ResultPtr aSketchRes = aSketchFeature->results().front();
+    ResultConstructionPtr aConstruction = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aSketchRes);
+    if(aConstruction.get()) {
+      AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
+      if (aFacesSelectionList.get() && aFacesSelectionList->size() == 0)
+        aFacesSelectionList->append(aSketchRes, std::shared_ptr<GeomAPI_Shape>());
+    }
+  }
+}
+
index d4307edeb965434798f47bab0fab2a3f5fa9e434..7f0a9e9ce6b0ffc0c2bd0cd136a81ba81aa98ca2 100644 (file)
@@ -34,6 +34,14 @@ class FeaturesPlugin_CompositeSketch : public ModelAPI_CompositeFeature
     return MY_SKETCH_SELECTION_ID;
   }
 
+  /// attribute name of references sketch entities list, it should contain a sketch result or
+  /// a pair a sketch result to sketch face
+  inline static const std::string& LIST_ID()
+  {
+    static const std::string MY_GROUP_LIST_ID("base");
+    return MY_GROUP_LIST_ID;
+  }
+
   /// Creates a new part document if needed.
   FEATURESPLUGIN_EXPORT virtual void execute();
 
@@ -66,16 +74,20 @@ protected:
   FeaturesPlugin_CompositeSketch(){};
 
   /// Define this function to init attributes for extrusion/revolution.
-  virtual void initMakeSolidsAttributes() = 0;
+  //virtual void initMakeSolidsAttributes() {};
 
   /// Define this function to create solids from faces with extrusion/revolution.
   virtual void makeSolid(const std::shared_ptr<GeomAPI_Shape> theFace,
-                         std::shared_ptr<GeomAlgoAPI_MakeShape>& theMakeShape) = 0;
+                         std::shared_ptr<GeomAlgoAPI_MakeShape>& theMakeShape) {};
 
   /// Results naming.
   void loadNamingDS(std::shared_ptr<ModelAPI_ResultBody> theResultBody,
                     const std::shared_ptr<GeomAPI_Shape>& theBaseShape,
                     const std::shared_ptr<GeomAlgoAPI_MakeShape>& theMakeShape);
+
+  /// Set the sub-object to list of exturusion base.
+  void setSketchObjectToList();
+
 };
 
 #endif
index d388035926c7cb47f7189600ee823ebf670537e3..0be521794d60d2a6715c3f6ab3ef158500f34555 100644 (file)
@@ -60,7 +60,7 @@ void FeaturesPlugin_Extrusion::initAttributes()
 //=================================================================================================
 void FeaturesPlugin_Extrusion::execute()
 {
-  /// feature extrusion does not have the next attribute
+  /// sub feature of the composite should be set in the base list
   AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
   if (aFacesSelectionList.get() && !aFacesSelectionList->isInitialized()) {
     AttributeReferencePtr aSketchAttr = reference(SKETCH_OBJECT_ID());
@@ -173,14 +173,6 @@ void FeaturesPlugin_Extrusion::execute()
   removeResults(aResultIndex);
 }
 
-//=================================================================================================
-void FeaturesPlugin_Extrusion::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)
-{
-  AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
-  if (aFacesSelectionList.get() && aFacesSelectionList->size() > 0)
-    aFacesSelectionList->clear();
-}
-
 //=================================================================================================
 void FeaturesPlugin_Extrusion::loadNamingDS(GeomAlgoAPI_Prism& thePrismAlgo,
                                             std::shared_ptr<ModelAPI_ResultBody> theResultBody,
@@ -227,20 +219,3 @@ void FeaturesPlugin_Extrusion::loadNamingDS(GeomAlgoAPI_Prism& thePrismAlgo,
   }
 }
 
-//=================================================================================================
-void FeaturesPlugin_Extrusion::setSketchObjectToList()
-{
-  std::shared_ptr<ModelAPI_Feature> aSketchFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(
-                                                       reference(SKETCH_OBJECT_ID())->value());
-
-  if(aSketchFeature.get() && !aSketchFeature->results().empty()) {
-    ResultPtr aSketchRes = aSketchFeature->results().front();
-    ResultConstructionPtr aConstruction = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aSketchRes);
-    if(aConstruction.get()) {
-      AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
-      if (aFacesSelectionList.get() && aFacesSelectionList->size() == 0)
-        aFacesSelectionList->append(aSketchRes, std::shared_ptr<GeomAPI_Shape>());
-    }
-  }
-}
-
index a8867530ebcfd4ae193da42a87bff50470676fa0..a9330faf2fc8b1f31c67bb87983ecc6a06c5c76f 100644 (file)
@@ -33,13 +33,6 @@ class FeaturesPlugin_Extrusion : public FeaturesPlugin_CompositeSketch
     static const std::string MY_EXTRUSION_ID("Extrusion");
     return MY_EXTRUSION_ID;
   }
-  /// attribute name of references sketch entities list, it should contain a sketch result or
-  /// a pair a sketch result to sketch face
-  inline static const std::string& LIST_ID()
-  {
-    static const std::string MY_GROUP_LIST_ID("base");
-    return MY_GROUP_LIST_ID;
-  }
 
   /// attribute name of an object to which the extrusion grows
   inline static const std::string& AXIS_OBJECT_ID()
@@ -110,29 +103,14 @@ class FeaturesPlugin_Extrusion : public FeaturesPlugin_CompositeSketch
   /// Request for initialization of data model of the feature: adding all attributes
   FEATURESPLUGIN_EXPORT virtual void initAttributes();
 
-  /// This method to inform that sub-feature is removed and must be removed from the internal data
-  /// structures of the owner (the remove from the document will be done outside just after)
-  FEATURESPLUGIN_EXPORT virtual void removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature);
-
   /// Use plugin manager for features creation
   FeaturesPlugin_Extrusion();
 
-protected:
-  /// Init attributes for extrusion.
-  virtual void initMakeSolidsAttributes() {};
-
-  /// Create solid from face with extrusion.
-  virtual void makeSolid(const std::shared_ptr<GeomAPI_Shape> theFace,
-                         std::shared_ptr<GeomAlgoAPI_MakeShape>& theMakeShape) {};
-
 private:
   /// Load Naming data structure of the feature to the document
   void loadNamingDS(GeomAlgoAPI_Prism& thePrismAlgo,
                     std::shared_ptr<ModelAPI_ResultBody> theResultBody,
                     std::shared_ptr<GeomAPI_Shape> theBasis);
-
-  /// Set the sub-object to list of exturusion base.
-  void setSketchObjectToList();
 };
 
 #endif
index 88163729ca054980e88435b1abb2cd867c874720..e71194aefe88f666d8ebf63bc84efb117dcaec5c 100644 (file)
@@ -9,6 +9,7 @@
 #include <ModelAPI_AttributeDouble.h>
 #include <ModelAPI_AttributeSelectionList.h>
 #include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeReference.h>
 #include <ModelAPI_BodyBuilder.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
@@ -51,14 +52,28 @@ void FeaturesPlugin_Revolution::initAttributes()
 
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), TO_OBJECT_ID());
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), FROM_OBJECT_ID());
+
+  // Composite Sketch attribute
+  data()->addAttribute(FeaturesPlugin_CompositeSketch::SKETCH_OBJECT_ID(),
+                       ModelAPI_AttributeReference::typeId());
+  ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(),
+                       FeaturesPlugin_CompositeSketch::SKETCH_OBJECT_ID());
 }
 
 //=================================================================================================
 void FeaturesPlugin_Revolution::execute()
 {
+  /// sub feature of the composite should be set in the base list
+  AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
+  if (aFacesSelectionList.get() && !aFacesSelectionList->isInitialized()) {
+    AttributeReferencePtr aSketchAttr = reference(SKETCH_OBJECT_ID());
+    if (aSketchAttr.get() && aSketchAttr->isInitialized())
+      setSketchObjectToList();
+  }
+
   // Getting faces.
   ListOfShape aFacesList;
-  AttributeSelectionListPtr aFacesSelectionList = selectionList(LIST_ID());
+  aFacesSelectionList = selectionList(LIST_ID());
   for(int anIndex = 0; anIndex < aFacesSelectionList->size(); anIndex++) {
     AttributeSelectionPtr aFaceSel = aFacesSelectionList->value(anIndex);
     std::shared_ptr<GeomAPI_Shape> aFaceShape = aFaceSel->value();
index 44a9b773abd2f00794efa3135cd5d10b079e7ffa..7c16ec3b279b817284aa9b38c7e09106713ef4c0 100644 (file)
@@ -10,7 +10,7 @@
 #include <FeaturesPlugin.h>
 
 #include <GeomAlgoAPI_Revolution.h>
-#include <ModelAPI_Feature.h>
+#include <FeaturesPlugin_CompositeSketch.h>
 
 class GeomAPI_Shape;
 class ModelAPI_ResultBody;
@@ -21,7 +21,7 @@ class ModelAPI_ResultBody;
  *  Revolution creates the lateral faces based on edges of the base face and
  *  the start and end faces and/or start and end angles.
  */
-class FeaturesPlugin_Revolution : public ModelAPI_Feature
+class FeaturesPlugin_Revolution : public FeaturesPlugin_CompositeSketch
 {
  public:
   /// Revolution kind.
@@ -31,14 +31,6 @@ class FeaturesPlugin_Revolution : public ModelAPI_Feature
     return MY_REVOLUTION_ID;
   }
 
-  /// Attribute name of references sketch entities list, it should contain a sketch result or
-  /// a pair a sketch result to sketch face.
-  inline static const std::string& LIST_ID()
-  {
-    static const std::string MY_GROUP_LIST_ID("base");
-    return MY_GROUP_LIST_ID;
-  }
-
   /// Attribute name of an revolution axis.
   inline static const std::string& AXIS_OBJECT_ID()
   {
index fb06968e0f41c5605b047a695b44266342c7b107..e918b46268f228a0a5c32727289f23491a30cfef 100644 (file)
@@ -3,10 +3,20 @@
 <source>
   <groupbox title="Extrusion">
     <sketch_launcher id="sketch"
-      label="Sketch"
-      icon=":icons/sketch.png"
-      tooltip="Create or edit a sketch">
+      attribute_list_id="base"
+      label="Select:&lt;br /&gt;
+1. Planar face of non-sketch object or a plane. Sketch creation will be started.&lt;br /&gt;
+2. An existing sketch face or contour. Extrusion will be filled by it.&lt;br /&gt;
+3. An existing result shape of kind: wires/edge/vertices.Extrusion will be filled by it."
+      shape_types="face objects">
     </sketch_launcher>
+    <composite_multi_selector id="base"
+      label="Select a sketch face"
+      icon=":icons/sketch.png"
+      tooltip="Select a sketch face"
+      type_choice="Faces Objects">
+      <validator id="FeaturesPlugin_ValidatorExtrusionBase" parameters="Sketch"/>
+    </composite_multi_selector>
     <toolbox id="CreationMethod">
       <box id="BySizes" title="By sizes" icon=":icons/dimension_up_down_32x32.png">
         <groupbox>
index 187317bc087ab9c109f2672c6c7f6836b18895a8..73ed217c7126c7ab06fd3d97e1d985c1756967e5 100644 (file)
@@ -1,6 +1,21 @@
 <!-- Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
 
 <source>
+  <sketch_launcher id="sketch"
+    attribute_list_id="base"
+    label="Select:&lt;br /&gt;
+1. Planar face of non-sketch object or a plane. Sketch creation will be started.&lt;br /&gt;
+2. An existing sketch face or contour. Extrusion will be filled by it.&lt;br /&gt;
+3. An existing result shape of kind: wires/edge/vertices.Extrusion will be filled by it."
+    shape_types="face objects">
+  </sketch_launcher>
+  <composite_multi_selector id="base"
+    label="Select a sketch face"
+    icon=":icons/sketch.png"
+    tooltip="Select a sketch face"
+    type_choice="Faces Objects">
+    <validator id="FeaturesPlugin_ValidatorExtrusionBase" parameters="Sketch"/>
+  </composite_multi_selector>
   <toolbox id="CreationMethod">
     <box id="ByAngles" title="By angles" icon=":icons/angle_up_down_32x32.png">
       <multi_selector id="base"
index 47b7f68730e152771c25eab71742c63a984bed9d..00a98448665fc9b71fbbc401ad95bf98e0823356 100644 (file)
@@ -3,10 +3,20 @@
 <source>
   <groupbox title="Revolution">
     <sketch_launcher id="sketch"
-      label="Sketch"
-      icon=":icons/sketch.png"
-      tooltip="Create or edit a sketch">
+      attribute_list_id="base"
+      label="Select:&lt;br /&gt;
+1. Planar face of non-sketch object or a plane. Sketch creation will be started.&lt;br /&gt;
+2. An existing sketch face or contour. Extrusion will be filled by it.&lt;br /&gt;
+3. An existing result shape of kind: wires/edge/vertices.Extrusion will be filled by it."
+      shape_types="face objects">
     </sketch_launcher>
+    <composite_multi_selector id="base"
+      label="Select a sketch face"
+      icon=":icons/sketch.png"
+      tooltip="Select a sketch face"
+      type_choice="Faces Objects">
+      <validator id="FeaturesPlugin_ValidatorExtrusionBase" parameters="Sketch"/>
+    </composite_multi_selector>
     <toolbox id="CreationMethod">
       <box id="ByAngles" title="By angles" icon=":icons/angle_up_down_32x32.png">
         <shape_selector id="axis_object"
index ce68e4997dfeb908c7a22b72a2a2f718fd455029..00f1496ad8498cdc4987f7b99708173b891bbd48 100644 (file)
@@ -3,10 +3,20 @@
 <source>
   <groupbox title="Revolution">
     <sketch_launcher id="sketch"
-      label="Sketch"
-      icon=":icons/sketch.png"
-      tooltip="Create or edit a sketch">
+      attribute_list_id="base"
+      label="Select:&lt;br /&gt;
+1. Planar face of non-sketch object or a plane. Sketch creation will be started.&lt;br /&gt;
+2. An existing sketch face or contour. Extrusion will be filled by it.&lt;br /&gt;
+3. An existing result shape of kind: wires/edge/vertices.Extrusion will be filled by it."
+      shape_types="face objects">
     </sketch_launcher>
+    <composite_multi_selector id="base"
+      label="Select a sketch face"
+      icon=":icons/sketch.png"
+      tooltip="Select a sketch face"
+      type_choice="Faces Objects">
+      <validator id="FeaturesPlugin_ValidatorExtrusionBase" parameters="Sketch"/>
+    </composite_multi_selector>
     <toolbox id="CreationMethod">
       <box id="ByAngles" title="By angles" icon=":icons/angle_up_down_32x32.png">
         <shape_selector id="axis_object"