Salome HOME
Issue #723 - Different workbenches with diferent "document" attribute
[modules/shaper.git] / src / FeaturesPlugin / FeaturesPlugin_Revolution.cpp
index 4a7795a06717745094491cfd10e4cb0666b12082..3bd64910c877776803eceff05277c89e9ef5f975 100644 (file)
@@ -41,11 +41,14 @@ void FeaturesPlugin_Revolution::initAttributes()
 
   data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId());
 
-  data()->addAttribute(TO_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
   data()->addAttribute(TO_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
+  data()->addAttribute(FROM_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
+
+  data()->addAttribute(TO_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
+  data()->addAttribute(TO_OFFSET_ID(), ModelAPI_AttributeDouble::typeId());
 
   data()->addAttribute(FROM_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
-  data()->addAttribute(FROM_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
+  data()->addAttribute(FROM_OFFSET_ID(), ModelAPI_AttributeDouble::typeId());
 
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), TO_OBJECT_ID());
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), FROM_OBJECT_ID());
@@ -70,21 +73,22 @@ void FeaturesPlugin_Revolution::execute()
   }
 
   // Getting angles.
-  double aFromAngle = real(FROM_ANGLE_ID())->value();
   double aToAngle = real(TO_ANGLE_ID())->value();
+  double aFromAngle = real(FROM_ANGLE_ID())->value();
+
+  if(string(CREATION_METHOD())->value() == "ByAngles") {
+    aToAngle = real(TO_ANGLE_ID())->value();
+    aFromAngle =  real(FROM_ANGLE_ID())->value();
+  } else {
+    aToAngle = real(TO_OFFSET_ID())->value();
+    aFromAngle =  real(FROM_OFFSET_ID())->value();
+  }
 
   // Getting bounding planes.
-  std::shared_ptr<GeomAPI_Shape> aFromShape;
   std::shared_ptr<GeomAPI_Shape> aToShape;
+  std::shared_ptr<GeomAPI_Shape> aFromShape;
 
   if(string(CREATION_METHOD())->value() == "ByPlanesAndOffsets") {
-    anObjRef = selection(FROM_OBJECT_ID());
-    if(anObjRef.get() != NULL) {
-      aFromShape = std::dynamic_pointer_cast<GeomAPI_Shape>(anObjRef->value());
-      if(aFromShape.get() == NULL && anObjRef->context().get() != NULL) {
-        aFromShape = anObjRef->context()->shape();
-      }
-    }
     anObjRef = selection(TO_OBJECT_ID());
     if(anObjRef.get() != NULL) {
       aToShape = std::dynamic_pointer_cast<GeomAPI_Shape>(anObjRef->value());
@@ -92,6 +96,13 @@ void FeaturesPlugin_Revolution::execute()
         aToShape =  anObjRef->context()->shape();
       }
     }
+    anObjRef = selection(FROM_OBJECT_ID());
+    if(anObjRef.get() != NULL) {
+      aFromShape = std::dynamic_pointer_cast<GeomAPI_Shape>(anObjRef->value());
+      if(aFromShape.get() == NULL && anObjRef->context().get() != NULL) {
+        aFromShape = anObjRef->context()->shape();
+      }
+    }
   }
 
   // for each selected face generate a result