Salome HOME
22752: [EDF] Provide explicit feedback on what has been done by Shape Processing...
[modules/geom.git] / src / GEOMImpl / GEOMImpl_CylinderDriver.cxx
index 9f2d816ab533661ff8a216cc9747c9a22de16e0f..d7f8a5bee5127d7d0f7c10344b766f218e3d961b 100644 (file)
@@ -76,11 +76,11 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const
   gp_Pnt aP;
   gp_Vec aV;
 
-  if (aType == CYLINDER_R_H) {
+  if (aType == CYLINDER_R_H || aType == CYLINDER_R_H_A) {
     aP = gp::Origin();
     aV = gp::DZ();
   }
-  else if (aType == CYLINDER_PNT_VEC_R_H) {
+  else if (aType == CYLINDER_PNT_VEC_R_H || aType == CYLINDER_PNT_VEC_R_H_A) {
     Handle(GEOM_Function) aRefPoint  = aCI.GetPoint();
     Handle(GEOM_Function) aRefVector = aCI.GetVector();
     TopoDS_Shape aShapePnt = aRefPoint->GetValue();
@@ -110,19 +110,39 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const
   if (aCI.GetH() < 0.0) aV.Reverse();
   gp_Ax2 anAxes (aP, aV);
 
-  BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH()));
-  MC.Build();
-  if (!MC.IsDone()) {
-    StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters");
+  TopoDS_Shape aShape;
+  
+  switch (aType) {
+  case CYLINDER_R_H:
+  case CYLINDER_PNT_VEC_R_H:
+    {
+      BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH()));
+      MC.Build();
+      if (!MC.IsDone()) {
+        StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters");
+      }
+      aShape = MC.Shape();
+      break;
+    }
+  case CYLINDER_R_H_A:
+  case CYLINDER_PNT_VEC_R_H_A:
+    {
+      BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA());
+      MC.Build();
+      if (!MC.IsDone()) {
+        StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure.");
+      }
+      aShape = MC.Shape();
+      break;
+    }
+  default:
+    break;
   }
-
-  TopoDS_Shape aShape = MC.Shape();
+  
   if (aShape.IsNull()) return 0;
-
   aFunction->SetValue(aShape);
 
   log.SetTouched(Label());
-
   return 1;
 }
 
@@ -149,16 +169,28 @@ GetCreationInformation(std::string&             theOperationName,
     AddParam( theParams, "Radius", aCI.GetR() );
     AddParam( theParams, "Height", aCI.GetH() );
     break;
-  case CONE_PNT_VEC_R1_R2_H:
+  case CYLINDER_R_H_A:
+    AddParam( theParams, "Radius", aCI.GetR() );
+    AddParam( theParams, "Height", aCI.GetH() );
+    AddParam( theParams, "Angle",  aCI.GetA() );
+    break;
+  case CYLINDER_PNT_VEC_R_H:
+    AddParam( theParams, "Base Point", aCI.GetPoint() );
+    AddParam( theParams, "Vector", aCI.GetVector() );
+    AddParam( theParams, "Radius", aCI.GetR() );
+    AddParam( theParams, "Height", aCI.GetH() );
+    break;
+  case CYLINDER_PNT_VEC_R_H_A:
     AddParam( theParams, "Base Point", aCI.GetPoint() );
     AddParam( theParams, "Vector", aCI.GetVector() );
     AddParam( theParams, "Radius", aCI.GetR() );
     AddParam( theParams, "Height", aCI.GetH() );
+    AddParam( theParams, "Angle",  aCI.GetA() );
     break;
   default:
     return false;
   }
-  
+
   return true;
 }