X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_Box.cpp;h=1a2149ee7be806d1b44b9ee294a3b5c139ea99d7;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=05b15667fd4f9b091b81b96bff6dc6fdecb18333;hpb=746b0b809686d6b79ae6e42322b4be6569f4c375;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_Box.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_Box.cpp index 05b15667f..1a2149ee7 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_Box.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_Box.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-2016 CEA/DEN, EDF R&D - -// File: GeomAlgoAPI_Box.cpp -// Created: 10 Mar 2016 -// Author: Clarisse Genrault (CEA) +// Copyright (C) 2014-2023 CEA, EDF +// +// 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 +// #include @@ -21,6 +34,7 @@ GeomAlgoAPI_Box::GeomAlgoAPI_Box(const double theDx, const double theDy, const d myDy = theDy; myDz = theDz; myMethodType = MethodType::BOX_DIM; + headError = "Box builder with dimensions"; } //================================================================================================= @@ -30,33 +44,48 @@ GeomAlgoAPI_Box::GeomAlgoAPI_Box(std::shared_ptr theFirstPoint, myFirstPoint = theFirstPoint; mySecondPoint = theSecondPoint; myMethodType = MethodType::BOX_POINTS; + headError = "Box builder with two points"; +} + +//================================================================================================= +GeomAlgoAPI_Box::GeomAlgoAPI_Box(const double theOx, const double theOy, const double theOz, + const double theDx, const double theDy, const double theDz) +{ + myOx = theOx; + myOy = theOy; + myOz = theOz; + myDx = theDx; + myDy = theDy; + myDz = theDz; + myMethodType = MethodType::BOX_POINT_DIMS; + headError = "Box builder with coordinates and dimensions"; } //================================================================================================= bool GeomAlgoAPI_Box::check() { - if (myMethodType == MethodType::BOX_DIM) { + if (myMethodType == MethodType::BOX_DIM || myMethodType == MethodType::BOX_POINT_DIMS) { if (myDx < Precision::Confusion()) { - myError = "Box builder with dimensions :: Dx is null or negative."; + myError = headError + " :: Dx is null or negative."; return false; } else if (myDy < Precision::Confusion()) { - myError = "Box builder with dimensions :: Dy is null or negative."; + myError = headError + " :: Dy is null or negative."; return false; } else if (myDz < Precision::Confusion()) { - myError = "Box builder with dimensions :: Dz is null or negative."; + myError = headError + " :: Dz is null or negative."; return false; } } else if (myMethodType == MethodType::BOX_POINTS) { if (!myFirstPoint.get()) { - myError = "Box builder with points :: the first point is not correct."; + myError = headError + " :: the first point is not valid."; return false; } if (!mySecondPoint.get()) { - myError = "Box builder with points :: the second point is not correct."; + myError = headError + " :: the second point is not valid."; return false; } if (myFirstPoint->distance(mySecondPoint) < Precision::Confusion()) { - myError = "Box builder with points :: the distance between the two points is null."; + myError = headError + " :: the distance between the two points is null."; return false; } double aDiffX = myFirstPoint->x() - mySecondPoint->x(); @@ -66,7 +95,7 @@ bool GeomAlgoAPI_Box::check() fabs(aDiffY) < Precision::Confusion() || fabs(aDiffZ) < Precision::Confusion()) { myError = - "Box builder with points :: the points belong both to one of the OXY, OYZ or OZX planes."; + headError + " :: the points belong both to one of the OXY, OYZ or OZX planes."; return false; } } else { @@ -83,6 +112,8 @@ void GeomAlgoAPI_Box::build() buildWithDimensions(); } else if (myMethodType == MethodType::BOX_POINTS) { buildWithPoints(); + } else if (myMethodType == MethodType::BOX_POINT_DIMS) { + buildWithPointAndDims(); } else { myError = "Box builder :: Method not implemented."; return; @@ -100,7 +131,7 @@ void GeomAlgoAPI_Box::buildWithDimensions() // Test the algorithm if (!aBoxMaker->IsDone()) { - myError = "Box builder with dimensions :: algorithm failed."; + myError = headError + " :: algorithm failed."; return; } @@ -111,7 +142,7 @@ void GeomAlgoAPI_Box::buildWithDimensions() // Test on the shapes if (!aShape.get() || aShape->isNull()) { - myError = "Box builder with dimensions :: resulting shape is null."; + myError = headError + " :: resulting shape is null."; return; } @@ -134,7 +165,7 @@ void GeomAlgoAPI_Box::buildWithPoints() // Test the algorithm if(!aBoxMaker->IsDone()) { - myError = "Box builder with two points :: algorithm failed."; + myError = headError + " :: algorithm failed."; return; } @@ -146,7 +177,7 @@ void GeomAlgoAPI_Box::buildWithPoints() // Tests on the shape if (!aShape.get() || aShape->isNull()) { - myError = "Box builder with two points :: resulting shape is null."; + myError = headError + " :: resulting shape is null."; return; } @@ -155,6 +186,18 @@ void GeomAlgoAPI_Box::buildWithPoints() setDone(true); } +//================================================================================================= +void GeomAlgoAPI_Box::buildWithPointAndDims() +{ + // Construct points from cordinates and dimensions to use the method with two points + myFirstPoint = + std::shared_ptr(new GeomAPI_Pnt(myOx - myDx, myOy - myDy, myOz - myDz)); + mySecondPoint = + std::shared_ptr(new GeomAPI_Pnt(myOx + myDx, myOy + myDy, myOz + myDz)); + + buildWithPoints(); +} + //================================================================================================= void GeomAlgoAPI_Box::prepareNamingFaces() {