X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_EdgeBuilder.cpp;h=f1ecb2b34fca5e14775253030ec483e616639460;hb=7fcf163a8a369889707c5b73eeeb2bc68a4b906e;hp=d12cbdd73816d48fadbfd83cd4e41fa339a73805;hpb=cb65395939911675238e6b5668524c12d71ad9df;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp index d12cbdd73..f1ecb2b34 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: GeomAlgoAPI_EdgeBuilder.cpp // Created: 23 Apr 2014 // Author: Mikhail PONIKAROV @@ -13,26 +15,26 @@ #include #include -boost::shared_ptr GeomAlgoAPI_EdgeBuilder::line( - boost::shared_ptr theStart, boost::shared_ptr theEnd) +std::shared_ptr GeomAlgoAPI_EdgeBuilder::line( + std::shared_ptr theStart, std::shared_ptr theEnd) { const gp_Pnt& aStart = theStart->impl(); const gp_Pnt& anEnd = theEnd->impl(); if (aStart.IsEqual(anEnd, Precision::Confusion())) - return boost::shared_ptr(); + return std::shared_ptr(); if (Abs(aStart.SquareDistance(anEnd)) > 1.e+100) - return boost::shared_ptr(); + return std::shared_ptr(); BRepBuilderAPI_MakeEdge anEdgeBuilder(aStart, anEnd); - boost::shared_ptr aRes(new GeomAPI_Shape); + std::shared_ptr aRes(new GeomAPI_Edge); TopoDS_Edge anEdge = anEdgeBuilder.Edge(); aRes->setImpl(new TopoDS_Shape(anEdge)); return aRes; } -boost::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircle( - boost::shared_ptr theCenter, - boost::shared_ptr theNormal, double theRadius) +std::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircle( + std::shared_ptr theCenter, std::shared_ptr theNormal, + double theRadius) { const gp_Pnt& aCenter = theCenter->impl(); const gp_Dir& aDir = theNormal->impl(); @@ -40,17 +42,15 @@ boost::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircle( gp_Circ aCircle(gp_Ax2(aCenter, aDir), theRadius); BRepBuilderAPI_MakeEdge anEdgeBuilder(aCircle); - boost::shared_ptr aRes(new GeomAPI_Shape); + std::shared_ptr aRes(new GeomAPI_Edge); TopoDS_Edge anEdge = anEdgeBuilder.Edge(); aRes->setImpl(new TopoDS_Shape(anEdge)); return aRes; } -boost::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircleArc( - boost::shared_ptr theCenter, - boost::shared_ptr theStartPoint, - boost::shared_ptr theEndPoint, - boost::shared_ptr theNormal) +std::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircleArc( + std::shared_ptr theCenter, std::shared_ptr theStartPoint, + std::shared_ptr theEndPoint, std::shared_ptr theNormal) { const gp_Pnt& aCenter = theCenter->impl(); const gp_Dir& aDir = theNormal->impl(); @@ -62,14 +62,18 @@ boost::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircleArc( const gp_Pnt& anEnd = theEndPoint->impl(); BRepBuilderAPI_MakeEdge anEdgeBuilder; - if (aStart.IsEqual(anEnd, Precision::Confusion()) || - gp_Pnt(0, 0, 0).IsEqual(anEnd, Precision::Confusion())) + if (aStart.IsEqual(anEnd, Precision::Confusion()) + || gp_Pnt(0, 0, 0).IsEqual(anEnd, Precision::Confusion())) anEdgeBuilder = BRepBuilderAPI_MakeEdge(aCircle); else anEdgeBuilder = BRepBuilderAPI_MakeEdge(aCircle, aStart, anEnd); - boost::shared_ptr aRes(new GeomAPI_Shape); - TopoDS_Edge anEdge = anEdgeBuilder.Edge(); - aRes->setImpl(new TopoDS_Shape(anEdge)); + std::shared_ptr aRes(new GeomAPI_Edge); + anEdgeBuilder.Build(); + + if (anEdgeBuilder.IsDone()) + aRes->setImpl(new TopoDS_Shape(anEdgeBuilder.Edge())); + else + aRes = std::shared_ptr(); return aRes; }