- TopoDS_Shape aShape = (*aToolsIt)->impl<TopoDS_Shape>();
- if(aShape.ShapeType() == TopAbs_FACE) {
- TopoDS_Face aFace = TopoDS::Face(aShape);
- Handle(Geom_Surface) aSurf = BRep_Tool::Surface(aFace);
- if (!aSurf.IsNull()) {
- GeomLib_IsPlanarSurface isPlanar(aSurf);
- if(isPlanar.IsPlanar()) {
- Standard_Real UMin, UMax, VMin, VMax;
- BRepTools::UVBounds(aFace, UMin, UMax, VMin, VMax);
- if(UMin == -Precision::Infinite() && UMax == Precision::Infinite() &&
- VMin == -Precision::Infinite() && VMax == Precision::Infinite()) {
- const gp_Pln& aFacePln = isPlanar.Plan();
- Handle(Geom_Plane) aFacePlane = new Geom_Plane(aFacePln);
- IntAna_Quadric aQuadric(aFacePln);
- UMin = UMax = VMin = VMax = 0;
- for(int i = 0; i < 8; i++) {
- gp_Lin aLin(aPoints[i], aFacePln.Axis().Direction());
- IntAna_IntConicQuad anIntAna(aLin, aQuadric);
- const gp_Pnt& aPntOnFace = anIntAna.Point(1);
- Standard_Real aPntU(0), aPntV(0);
- GeomLib_Tool::Parameters(aFacePlane, aPntOnFace, Precision::Confusion(), aPntU, aPntV);
- if(aPntU < UMin) UMin = aPntU;
- if(aPntU > UMax) UMax = aPntU;
- if(aPntV < VMin) VMin = aPntV;
- if(aPntV > VMax) VMax = aPntV;
- }
- aShape = BRepLib_MakeFace(aFacePln, UMin, UMax, VMin, VMax).Face();
- }
- }
- }
- }