]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Added MultiRotation feature (Shape API).
authorClarisse Genrault <clarisse.genrault@cea.fr>
Wed, 5 Apr 2017 14:42:05 +0000 (16:42 +0200)
committerClarisse Genrault <clarisse.genrault@cea.fr>
Wed, 5 Apr 2017 14:42:05 +0000 (16:42 +0200)
src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.cpp [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.h [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_ShapeAPI.cpp
src/GeomAlgoAPI/GeomAlgoAPI_ShapeAPI.h

diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.cpp
deleted file mode 100644 (file)
index 0c706d3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File:        GeomAlgoAPI_MultiRotation.cpp
-// Created:     30 Mar 2017
-// Author:      Clarisse Genrault (CEA)
-
-#include "GeomAlgoAPI_MultiRotation.h"
-
-//=================================================================================================
-GeomAlgoAPI_MultiRotation::GeomAlgoAPI_MultiRotation(std::shared_ptr<GeomAPI_Shape> theSourceShape,
-                                           std::shared_ptr<GeomAPI_Ax1>   theAxis,
-                                           double                         theAngle)
-{
-}
-
-//=================================================================================================
-bool GeomAlgoAPI_MultiRotation::check()
-{
-  return true;
-}
-
-//=================================================================================================
-void GeomAlgoAPI_MultiRotation::build()
-{
-  setDone(true);
-}
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.h b/src/GeomAlgoAPI/GeomAlgoAPI_MultiRotation.h
deleted file mode 100644 (file)
index d687e4a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File:        GeomAlgoAPI_MultiRotation.h
-// Created:     30 Mar 2017
-// Author:      Clarisse Genrault (CEA)
-
-#ifndef GEOMALGOAPI_MULTIROTATION_H_
-#define GEOMALGOAPI_MULTIROTATION_H_
-
-#include <GeomAlgoAPI.h>
-#include <GeomAlgoAPI_MakeShape.h>
-
-#include <GeomAPI_Ax1.h>
-#include <GeomAPI_Shape.h>
-
-/// \class GeomAlgoAPI_MultiRotation
-/// \ingroup DataAlgo
-/// \brief Creates a copy of the object by rotating it around the axis.
-class GeomAlgoAPI_MultiRotation : public GeomAlgoAPI_MakeShape
-{
-public:
-
-  /// \brief Creates an object which is obtained from current object by rotating it around the axis
-  ///        with the angle.
-  /// \param[in] theSourceShape  a shape to be rotated.
-  /// \param[in] theAxis         rotation axis.
-  /// \param[in] theAngle        rotation angle(in degree).
-  GEOMALGOAPI_EXPORT GeomAlgoAPI_MultiRotation(std::shared_ptr<GeomAPI_Shape> theSourceShape,
-                                          std::shared_ptr<GeomAPI_Ax1>   theAxis,
-                                          double                         theAngle);
-
-  /// Checks if data for the translation execution is OK.
-  GEOMALGOAPI_EXPORT bool check();
-
-  /// Execute the translation.
-  GEOMALGOAPI_EXPORT void build();
-
-private:
-  std::shared_ptr<GeomAPI_Shape> mySourceShape; /// Shape to be rotated.
-  std::shared_ptr<GeomAPI_Ax1> myAxis; /// Rotation axis.
-  double myAngle; /// Rotation angle.
-  std::shared_ptr<GeomAPI_Pnt> myCenterPoint; /// Rotation center point.
-  std::shared_ptr<GeomAPI_Pnt> myStartPoint; /// Rotation start point.
-  std::shared_ptr<GeomAPI_Pnt> myEndPoint; /// Rotation end point.
-};
-
-#endif // GEOMALGOAPI_MULTIROTATION_H_
index 6b26c3eb22d4cab94456beb74a72792b749c5008..a3c700e13be922e514e53f481cf75a06cc4462f9 100644 (file)
@@ -673,6 +673,61 @@ namespace GeomAlgoAPI_ShapeAPI
     return GeomAlgoAPI_CompoundBuilder::compound(aListOfShape);
   }
 
+  //===============================================================================================
+  std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeMultiRotation(
+    std::shared_ptr<GeomAPI_Shape> theSourceShape,
+    std::shared_ptr<GeomAPI_Ax1> theAxis,
+    const int theNumber)
+  {
+    if (!theAxis) {
+      std::string aError = "Multirotation builder ";
+      aError+=":: the axis is not valid";
+      throw GeomAlgoAPI_Exception(aError);
+    }
+
+    if (theNumber <=0) {
+      std::string aError = "Multirotation builder ";
+      aError+=":: the number of copies is null or negative.";
+      throw GeomAlgoAPI_Exception(aError);
+    }
+
+    double anAngle = 360./theNumber;
+
+    ListOfShape aListOfShape;
+    for (int i=0; i<theNumber; i++) {
+      aListOfShape.
+        push_back(GeomAlgoAPI_ShapeAPI::makeRotation(theSourceShape, theAxis, i*anAngle));
+    }
+    return GeomAlgoAPI_CompoundBuilder::compound(aListOfShape);
+  }
+
+  //===============================================================================================
+  std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeMultiRotation(
+    std::shared_ptr<GeomAPI_Shape> theSourceShape,
+    std::shared_ptr<GeomAPI_Ax1> theAxis,
+    const double theStep,
+    const int theNumber)
+  {
+    if (!theAxis) {
+      std::string aError = "Multirotation builder ";
+      aError+=":: the axis is not valid";
+      throw GeomAlgoAPI_Exception(aError);
+    }
+
+    if (theNumber <=0) {
+      std::string aError = "Multirotation builder ";
+      aError+=":: the number of copies is null or negative.";
+      throw GeomAlgoAPI_Exception(aError);
+    }
+
+    ListOfShape aListOfShape;
+    for (int i=0; i<theNumber; i++) {
+      aListOfShape.
+        push_back(GeomAlgoAPI_ShapeAPI::makeRotation(theSourceShape, theAxis, i*theStep));
+    }
+    return GeomAlgoAPI_CompoundBuilder::compound(aListOfShape);
+  }
+
   //===============================================================================================
   std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeConeSegment(
     const double theRMin1, const double theRMax1,
index d7bd12034b003a410bc56838cce87ee3a9071342..72797970d3e6c49ccf48b0f74e3c472209fd60b2 100644 (file)
@@ -242,6 +242,26 @@ public:
                      const double theSecondStep,
                      const int theSecondNumber) throw (GeomAlgoAPI_Exception);
 
+  /// Performs a multi rotation along one axis and a number of times
+  /// \param[in] theSourceShape Shape to be rotated
+  /// \param[in] theAxis Axis for the rotation
+  /// \param[in] theNumber Number of copies
+  static std::shared_ptr<GeomAPI_Shape> makeMultiRotation(
+                     std::shared_ptr<GeomAPI_Shape> theSourceShape,
+                     std::shared_ptr<GeomAPI_Ax1> theAxis,
+                     const int theNumber);
+
+  /// Performs a multi rotation along one axis, at a step and a number of times
+  /// \param theSourceShape Shape to be moved
+  /// \param[in] theAxis Axis for the rotation
+  /// \param[in] theStep Angle for each rotation
+  /// \param[in] theNumber Number of copies
+  static std::shared_ptr<GeomAPI_Shape> makeMultiRotation(
+                     std::shared_ptr<GeomAPI_Shape> theSourceShape,
+                     std::shared_ptr<GeomAPI_Ax1> theAxis,
+                     const double theStep,
+                     const int theNumber);
+
   /// Creates a cone segment using standard GDML parameters.
   /// \param theRMin1 Inner radius at base of cone
   /// \param theRMax1 Outer radius at base of cone