X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_Circ2dBuilder.cpp;h=232a0d690d894f03d646a36bc8212a881b5b2931;hb=aca54238175d75c25fa9b12ade0e274765a1cabd;hp=7338ad4e70fc81621eed40349908db16df0e94d9;hpb=1d8b62d5f466237e9f4862e6454c675f83ff9d9d;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_Circ2dBuilder.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_Circ2dBuilder.cpp index 7338ad4e7..232a0d690 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_Circ2dBuilder.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_Circ2dBuilder.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2017-20xx CEA/DEN, EDF R&D - -// File: GeomAlgoAPI_Circ2dBuilder.cpp -// Created: 3 April 2017 -// Author: Artem ZHIDKOV +// Copyright (C) 2014-2019 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 +// #include #include @@ -197,29 +210,28 @@ private: VectorOfGccLine aTgLine; convertTangentCurvesToGccEnt(aTgCirc, aTgLine); - if (aTgCirc.size() + aTgLine.size() != 3) - return Circ2dPtr(); - std::shared_ptr aCircleBuilder; - switch (aTgLine.size()) { - case 0: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - *aTgCirc[0], *aTgCirc[1], *aTgCirc[2], Precision::Confusion())); - break; - case 1: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - *aTgCirc[0], *aTgCirc[1], *aTgLine[0], Precision::Confusion())); - break; - case 2: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - *aTgCirc[0], *aTgLine[0], *aTgLine[1], Precision::Confusion())); - break; - case 3: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - *aTgLine[0], *aTgLine[1], *aTgLine[0], Precision::Confusion())); - break; - default: - break; + if (aTgCirc.size() + aTgLine.size() == 3) { + switch (aTgLine.size()) { + case 0: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgCirc[0], *aTgCirc[1], *aTgCirc[2], Precision::Confusion())); + break; + case 1: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgCirc[0], *aTgCirc[1], *aTgLine[0], Precision::Confusion())); + break; + case 2: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgCirc[0], *aTgLine[0], *aTgLine[1], Precision::Confusion())); + break; + case 3: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgLine[0], *aTgLine[1], *aTgLine[2], Precision::Confusion())); + break; + default: + break; + } } return getProperCircle(aCircleBuilder); @@ -228,35 +240,28 @@ private: Circ2dPtr circleByPointAndTwoTangentCurves() { const gp_Pnt2d& aPoint = myPassingPoints[0]; - CurveAdaptorPtr aCurve1 = myTangentShapes[0]; - CurveAdaptorPtr aCurve2 = myTangentShapes[1]; - if (!aCurve1 || !aCurve2) - return Circ2dPtr(); + + VectorOfGccCirc aTgCirc; + VectorOfGccLine aTgLine; + convertTangentCurvesToGccEnt(aTgCirc, aTgLine); std::shared_ptr aCircleBuilder; - if (aCurve1->GetType() == GeomAbs_Line) { - if (aCurve2->GetType() == GeomAbs_Line) { - aCircleBuilder = std::shared_ptr( - new GccAna_Circ2d3Tan(GccEnt::Unqualified(aCurve1->Line()), - GccEnt::Unqualified(aCurve2->Line()), - aPoint, Precision::Confusion())); - } else if (aCurve2->GetType() == GeomAbs_Circle) { - aCircleBuilder = std::shared_ptr( - new GccAna_Circ2d3Tan(GccEnt::Unqualified(aCurve2->Circle()), - GccEnt::Unqualified(aCurve1->Line()), - aPoint, Precision::Confusion())); - } - } else if (aCurve1->GetType() == GeomAbs_Circle) { - if (aCurve2->GetType() == GeomAbs_Line) { - aCircleBuilder = std::shared_ptr( - new GccAna_Circ2d3Tan(GccEnt::Unqualified(aCurve1->Circle()), - GccEnt::Unqualified(aCurve2->Line()), - aPoint, Precision::Confusion())); - } else if (aCurve2->GetType() == GeomAbs_Circle) { - aCircleBuilder = std::shared_ptr( - new GccAna_Circ2d3Tan(GccEnt::Unqualified(aCurve2->Circle()), - GccEnt::Unqualified(aCurve1->Circle()), - aPoint, Precision::Confusion())); + if (aTgCirc.size() + aTgLine.size() == 2) { + switch (aTgLine.size()) { + case 0: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgCirc[0], *aTgCirc[1], aPoint, Precision::Confusion())); + break; + case 1: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgCirc[0], *aTgLine[0], aPoint, Precision::Confusion())); + break; + case 2: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + *aTgLine[0], *aTgLine[1], aPoint, Precision::Confusion())); + break; + default: + break; } } @@ -268,16 +273,17 @@ private: const gp_Pnt2d& aPoint1 = myPassingPoints[0]; const gp_Pnt2d& aPoint2 = myPassingPoints[1]; CurveAdaptorPtr aCurve = myTangentShapes[0]; - if (!aCurve) - return Circ2dPtr(); std::shared_ptr aCircleBuilder; - if (aCurve->GetType() == GeomAbs_Line) { - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - GccEnt::Unqualified(aCurve->Line()), aPoint1, aPoint2, Precision::Confusion())); - } else if (aCurve->GetType() == GeomAbs_Circle) { - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( - GccEnt::Unqualified(aCurve->Circle()), aPoint1, aPoint2, Precision::Confusion())); + if (aCurve) { + if (aCurve->GetType() == GeomAbs_Line) { + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + GccEnt::Unqualified(aCurve->Line()), aPoint1, aPoint2, Precision::Confusion())); + } + else if (aCurve->GetType() == GeomAbs_Circle) { + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d3Tan( + GccEnt::Unqualified(aCurve->Circle()), aPoint1, aPoint2, Precision::Confusion())); + } } return getProperCircle(aCircleBuilder); @@ -342,25 +348,24 @@ private: VectorOfGccLine aTgLine; convertTangentCurvesToGccEnt(aTgCirc, aTgLine); - if (aTgCirc.size() + aTgLine.size() != 2) - return Circ2dPtr(); - std::shared_ptr aCircleBuilder; - switch (aTgLine.size()) { - case 0: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( - *aTgCirc[0], *aTgCirc[1], myRadius, Precision::Confusion())); - break; - case 1: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( - *aTgCirc[0], *aTgLine[0], myRadius, Precision::Confusion())); - break; - case 2: - aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( - *aTgLine[0], *aTgLine[1], myRadius, Precision::Confusion())); - break; - default: - break; + if (aTgCirc.size() + aTgLine.size() == 2) { + switch (aTgLine.size()) { + case 0: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( + *aTgCirc[0], *aTgCirc[1], myRadius, Precision::Confusion())); + break; + case 1: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( + *aTgCirc[0], *aTgLine[0], myRadius, Precision::Confusion())); + break; + case 2: + aCircleBuilder = std::shared_ptr(new GccAna_Circ2d2TanRad( + *aTgLine[0], *aTgLine[1], myRadius, Precision::Confusion())); + break; + default: + break; + } } return getProperCircle(aCircleBuilder);