#include <math.h>
+static GeomShapePtr runAlgo(GeomAlgoAPI_MakeShape& theAlgo) throw (GeomAlgoAPI_Exception)
+{
+ if (!theAlgo.check())
+ throw GeomAlgoAPI_Exception(theAlgo.getError());
+
+ theAlgo.build();
+
+ if (!theAlgo.isDone())
+ throw GeomAlgoAPI_Exception(theAlgo.getError());
+
+ return theAlgo.shape();
+}
+
+static GeomShapePtr runAlgoAndCheckShape(GeomAlgoAPI_MakeShape& theAlgo, const std::string& theMsg)
+throw (GeomAlgoAPI_Exception)
+{
+ if (!theAlgo.check())
+ throw GeomAlgoAPI_Exception(theAlgo.getError());
+
+ theAlgo.build();
+
+ if (!theAlgo.isDone() || !theAlgo.checkValid(theMsg))
+ throw GeomAlgoAPI_Exception(theAlgo.getError());
+
+ return theAlgo.shape();
+}
+
namespace GeomAlgoAPI_ShapeAPI
{
//===============================================================================================
const double theDx, const double theDy,
const double theDz) throw (GeomAlgoAPI_Exception)
{
+ static const std::string aMsg("Box builder with dimensions");
GeomAlgoAPI_Box aBoxAlgo(theDx,theDy,theDz);
-
- if (!aBoxAlgo.check()) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
-
- aBoxAlgo.build();
-
- if(!aBoxAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
- if (!aBoxAlgo.checkValid("Box builder with dimensions")) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
- return aBoxAlgo.shape();
+ return runAlgoAndCheckShape(aBoxAlgo, aMsg);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Pnt> theFirstPoint,
std::shared_ptr<GeomAPI_Pnt> theSecondPoint) throw (GeomAlgoAPI_Exception)
{
+ static const std::string aMsg("Box builder with two points");
GeomAlgoAPI_Box aBoxAlgo(theFirstPoint, theSecondPoint);
-
- if (!aBoxAlgo.check()) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
-
- aBoxAlgo.build();
-
- if(!aBoxAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
- if (!aBoxAlgo.checkValid("Box builder with two points")) {
- throw GeomAlgoAPI_Exception(aBoxAlgo.getError());
- }
- return aBoxAlgo.shape();
+ return runAlgoAndCheckShape(aBoxAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cylinder aCylinderAlgo(anAxis, theRadius, theHeight);
- if (!aCylinderAlgo.check()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
-
- aCylinderAlgo.build();
-
- if(!aCylinderAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- if (!aCylinderAlgo.checkValid("Cylinder builder")) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- return aCylinderAlgo.shape();
+ static const std::string aMsg("Cylinder builder");
+ return runAlgoAndCheckShape(aCylinderAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cylinder aCylinderAlgo(anAxis, theRadius, theHeight, theAngle);
- if (!aCylinderAlgo.check()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
-
- aCylinderAlgo.build();
-
- if(!aCylinderAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- if (!aCylinderAlgo.checkValid("Cylinder portion builder")) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- return aCylinderAlgo.shape();
+ static const std::string aMsg("Cylinder portion builder");
+ return runAlgoAndCheckShape(aCylinderAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cylinder aCylinderAlgo(anAxis, theRadius, theHeight);
- if (!aCylinderAlgo.check()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
-
- aCylinderAlgo.build();
-
- if(!aCylinderAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- if (!aCylinderAlgo.checkValid("Cylinder builder")) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- return aCylinderAlgo.shape();
+ static const std::string aMsg("Cylinder builder");
+ return runAlgoAndCheckShape(aCylinderAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cylinder aCylinderAlgo(anAxis, theRadius, theHeight, theAngle);
- if (!aCylinderAlgo.check()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
-
- aCylinderAlgo.build();
-
- if(!aCylinderAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- if (!aCylinderAlgo.checkValid("Cylinder portion builder")) {
- throw GeomAlgoAPI_Exception(aCylinderAlgo.getError());
- }
- return aCylinderAlgo.shape();
+ static const std::string aMsg("Cylinder portion builder");
+ return runAlgoAndCheckShape(aCylinderAlgo, aMsg);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeSphere(
std::shared_ptr<GeomAPI_Pnt> theCenterPoint, double theRadius) throw (GeomAlgoAPI_Exception)
{
+ static const std::string aMsg("Sphere builder");
GeomAlgoAPI_Sphere aSphereAlgo(theCenterPoint, theRadius);
-
- if (!aSphereAlgo.check()) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
-
- aSphereAlgo.build();
-
- if(!aSphereAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
-
- if (!aSphereAlgo.checkValid("Sphere builder")) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
- return aSphereAlgo.shape();
+ return runAlgoAndCheckShape(aSphereAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Sphere aSphereAlgo(aCenterPoint, theRadius);
- if (!aSphereAlgo.check()) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
-
- aSphereAlgo.build();
-
- if(!aSphereAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
-
- if (!aSphereAlgo.checkValid("Sphere builder")) {
- throw GeomAlgoAPI_Exception(aSphereAlgo.getError());
- }
- return aSphereAlgo.shape();
+ static const std::string aMsg("Sphere builder");
+ return runAlgoAndCheckShape(aSphereAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Torus aTorusAlgo(anAxis, theRadius, theRingRadius);
- if (!aTorusAlgo.check()) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
-
- aTorusAlgo.build();
-
- if(!aTorusAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
-
- if (!aTorusAlgo.checkValid("Torus builder")) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
- return aTorusAlgo.shape();
+ static const std::string aMsg("Torus builder");
+ return runAlgoAndCheckShape(aTorusAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Torus aTorusAlgo(anAxis, theRadius, theRingRadius);
- if (!aTorusAlgo.check()) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
-
- aTorusAlgo.build();
-
- if(!aTorusAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
-
- if (!aTorusAlgo.checkValid("Torus builder")) {
- throw GeomAlgoAPI_Exception(aTorusAlgo.getError());
- }
- return aTorusAlgo.shape();
+ static const std::string aMsg("Torus builder");
+ return runAlgoAndCheckShape(aTorusAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cone aConeAlgo(anAxis, theBaseRadius, theTopRadius, theHeight);
- if (!aConeAlgo.check()) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
-
- aConeAlgo.build();
-
- if(!aConeAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
-
- if (!aConeAlgo.checkValid("Cone builder")) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
- return aConeAlgo.shape();
+ static const std::string aMsg("Cone builder");
+ return runAlgoAndCheckShape(aConeAlgo, aMsg);
}
//===============================================================================================
GeomAlgoAPI_Cone aConeAlgo(anAxis, theBaseRadius, theTopRadius, theHeight);
- if (!aConeAlgo.check()) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
-
- aConeAlgo.build();
-
- if(!aConeAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
-
- if (!aConeAlgo.checkValid("Cone builder")) {
- throw GeomAlgoAPI_Exception(aConeAlgo.getError());
- }
- return aConeAlgo.shape();
+ static const std::string aMsg("Cone builder");
+ return runAlgoAndCheckShape(aConeAlgo, aMsg);
}
//===============================================================================================
const double theDistance) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Translation aTranslationAlgo(theSourceShape, theAxis, theDistance);
-
- if (!aTranslationAlgo.check()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- aTranslationAlgo.build();
-
- if(!aTranslationAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- return aTranslationAlgo.shape();
+ return runAlgo(aTranslationAlgo);
}
//===============================================================================================
const double theDz) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Translation aTranslationAlgo(theSourceShape, theDx, theDy, theDz);
-
- if (!aTranslationAlgo.check()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- aTranslationAlgo.build();
-
- if(!aTranslationAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- return aTranslationAlgo.shape();
+ return runAlgo(aTranslationAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Pnt> theEndPoint) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Translation aTranslationAlgo(theSourceShape, theStartPoint, theEndPoint);
-
- if (!aTranslationAlgo.check()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- aTranslationAlgo.build();
-
- if(!aTranslationAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aTranslationAlgo.getError());
- }
-
- return aTranslationAlgo.shape();
+ return runAlgo(aTranslationAlgo);
}
//===============================================================================================
const double theAngle) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Rotation aRotationAlgo(theSourceShape, theAxis, theAngle);
-
- if (!aRotationAlgo.check()) {
- throw GeomAlgoAPI_Exception(aRotationAlgo.getError());
- }
-
- aRotationAlgo.build();
-
- if(!aRotationAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aRotationAlgo.getError());
- }
-
- return aRotationAlgo.shape();
+ return runAlgo(aRotationAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Pnt> theEndPoint) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Rotation aRotationAlgo(theSourceShape, theCenterPoint, theStartPoint, theEndPoint);
-
- if (!aRotationAlgo.check()) {
- throw GeomAlgoAPI_Exception(aRotationAlgo.getError());
- }
-
- aRotationAlgo.build();
-
- if(!aRotationAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aRotationAlgo.getError());
- }
-
- return aRotationAlgo.shape();
+ return runAlgo(aRotationAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Pnt> thePoint) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, thePoint);
-
- if (!aSymmetryAlgo.check()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- aSymmetryAlgo.build();
-
- if(!aSymmetryAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- return aSymmetryAlgo.shape();
+ return runAlgo(aSymmetryAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Ax1> theAxis) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, theAxis);
-
- if (!aSymmetryAlgo.check()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- aSymmetryAlgo.build();
-
- if(!aSymmetryAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- return aSymmetryAlgo.shape();
+ return runAlgo(aSymmetryAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Ax2> thePlane) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, thePlane);
-
- if (!aSymmetryAlgo.check()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- aSymmetryAlgo.build();
-
- if(!aSymmetryAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
- }
-
- return aSymmetryAlgo.shape();
+ return runAlgo(aSymmetryAlgo);
}
//===============================================================================================
const double theScaleFactor) throw (GeomAlgoAPI_Exception)
{
GeomAlgoAPI_Scale aScaleAlgo(theSourceShape, theCenterPoint, theScaleFactor);
-
- if (!aScaleAlgo.check()) {
- throw GeomAlgoAPI_Exception(aScaleAlgo.getError());
- }
-
- aScaleAlgo.build();
-
- if(!aScaleAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aScaleAlgo.getError());
- }
-
- return aScaleAlgo.shape();
+ return runAlgo(aScaleAlgo);
}
//===============================================================================================
{
GeomAlgoAPI_Scale aScaleAlgo(theSourceShape, theCenterPoint,
theScaleFactorX, theScaleFactorY, theScaleFactorZ);
-
- if (!aScaleAlgo.check()) {
- throw GeomAlgoAPI_Exception(aScaleAlgo.getError());
- }
-
- aScaleAlgo.build();
-
- if(!aScaleAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aScaleAlgo.getError());
- }
-
- return aScaleAlgo.shape();
+ return runAlgo(aScaleAlgo);
}
//===============================================================================================
std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeMultiRotation(
std::shared_ptr<GeomAPI_Shape> theSourceShape,
std::shared_ptr<GeomAPI_Ax1> theAxis,
- const int theNumber)
+ const int theNumber) throw (GeomAlgoAPI_Exception)
{
if (!theAxis) {
std::string aError = "Multirotation builder ";
std::shared_ptr<GeomAPI_Shape> theSourceShape,
std::shared_ptr<GeomAPI_Ax1> theAxis,
const double theStep,
- const int theNumber)
+ const int theNumber) throw (GeomAlgoAPI_Exception)
{
if (!theAxis) {
std::string aError = "Multirotation builder ";
GeomAlgoAPI_ConeSegment aConeSegmentAlgo(theRMin1, theRMax1, theRMin2, theRMax2,
theZ, theStartPhi, theDeltaPhi);
- if (!aConeSegmentAlgo.check()) {
- throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
- }
-
- aConeSegmentAlgo.build();
-
- if(!aConeSegmentAlgo.isDone()) {
- throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
- }
- if (!aConeSegmentAlgo.checkValid("Cone Segment builder")) {
- throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
- }
- return aConeSegmentAlgo.shape();
+ static const std::string aMsg("Cone Segment builder");
+ return runAlgoAndCheckShape(aConeSegmentAlgo, aMsg);
}
}
--- /dev/null
+## Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+## See http:##www.salome-platform.org/ or
+## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+##
+
+from GeomAlgoAPI import GeomAlgoAPI_ShapeAPI as shaperpy
+from GeomAlgoAPI import GeomAlgoAPI_Exception as myExcept
+from GeomAPI import GeomAPI_Ax1 as axis, GeomAPI_Pnt as pnt, GeomAPI_Dir as direction
+
+# Create Boxes
+Box_1 = shaperpy.makeBox(10.,10.,10.)
+Box_2 = shaperpy.makeBox(10.,10.,10.)
+Box_3 = shaperpy.makeBox(10.,10.,10.)
+Box_4 = shaperpy.makeBox(10.,10.,10.)
+Box_5 = shaperpy.makeBox(10.,10.,10.)
+Box_6 = shaperpy.makeBox(10.,10.,10.)
+Box_7 = shaperpy.makeBox(10.,10.,10.)
+
+# Points
+pntOrigin = pnt(0.,0.,0.)
+pnt1 = pnt(10.,0.,0.)
+
+# Axis
+xDir = direction(10., 0., 0.)
+ax1 = axis(pntOrigin, xDir)
+
+# Create MultiRotations
+MultiRotation_1 = shaperpy.makeMultiRotation(Box_1, ax1, 45., 5)
+MultiRotation_2 = shaperpy.makeMultiRotation(Box_2, ax1, 0., 5)
+
+try:
+ MultiRotation_3 = shaperpy.makeMultiRotation(Box_3, ax1, 45., -5)
+except myExcept as ec:
+ assert(ec.what() == "Multirotation builder :: the number of copies is null or negative.")
+
+try:
+ MultiRotation_4 = shaperpy.makeMultiRotation(None, ax1, 45., 5)
+except myExcept as ec:
+ assert(ec.what() == "Rotation builder :: source shape is not valid.")
+
+try:
+ MultiRotation_5 = shaperpy.makeMultiRotation(Box_4, None, 45., 5)
+except myExcept as ec:
+ assert(ec.what() == "Multirotation builder :: the axis is not valid")
+
+MultiRotation_6 = shaperpy.makeMultiRotation(Box_5, ax1, 5)
+
+try:
+ MultiRotation_7 = shaperpy.makeMultiRotation(Box_6, ax1, -5)
+except myExcept as ec:
+ assert(ec.what() == "Multirotation builder :: the number of copies is null or negative.")
+
+try:
+ MultiRotation_8 = shaperpy.makeMultiRotation(None, ax1, 5)
+except myExcept as ec:
+ assert(ec.what() == "Rotation builder :: source shape is not valid.")
+
+try:
+ MultiRotation_9 = shaperpy.makeMultiRotation(Box_7, None, 5)
+except myExcept as ec:
+ assert(ec.what() == "Multirotation builder :: the axis is not valid")