X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_FaceBuilder.cpp;h=c197873082d41d554107f2006be01495ce820bd6;hb=48a4bd38c2b9d1b6b51ebca992a5eab30e85d99b;hp=a00f8d8c0972a2b00a6dd60c83e5a451071df0db;hpb=a24b7e6f4d112d5e7889fd76f030298fc428cd01;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_FaceBuilder.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_FaceBuilder.cpp index a00f8d8c0..c19787308 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_FaceBuilder.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_FaceBuilder.cpp @@ -11,6 +11,7 @@ #include #include #include +#include std::shared_ptr GeomAlgoAPI_FaceBuilder::square( @@ -58,15 +59,29 @@ std::shared_ptr GeomAlgoAPI_FaceBuilder::plane( Handle(Geom_Surface) aSurf = BRep_Tool::Surface(aFace); if (aSurf.IsNull()) return aResult; // no surface - Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurf); - if (aPlane.IsNull()) - return aResult; // not planar + GeomLib_IsPlanarSurface isPlanar(aSurf); + if(!isPlanar.IsPlanar()) { + return aResult; + } + gp_Pln aPln = isPlanar.Plan(); double aA, aB, aC, aD; - aPlane->Coefficients(aA, aB, aC, aD); + aPln.Coefficients(aA, aB, aC, aD); aResult = std::shared_ptr(new GeomAPI_Pln(aA, aB, aC, aD)); return aResult; } +std::shared_ptr GeomAlgoAPI_FaceBuilder::planarFace(std::shared_ptr theCenter, + std::shared_ptr theNormal) +{ + const gp_Pnt& aCenter = theCenter->impl(); + const gp_Dir& aDir = theNormal->impl(); + gp_Pln aPlane(aCenter, aDir); + BRepBuilderAPI_MakeFace aFaceBuilder(aPlane); + std::shared_ptr aRes(new GeomAPI_Shape); + aRes->setImpl(new TopoDS_Shape(aFaceBuilder.Face())); + return aRes; +} + std::shared_ptr GeomAlgoAPI_FaceBuilder::planarFace(std::shared_ptr thePlane, double theX, double theY, double theWidth, double theHeight)