MAJ for planes

This commit is contained in:
fps 2012-02-13 12:52:41 +00:00
parent 637e87d26f
commit 4f8c197c8a

View File

@ -61,6 +61,8 @@
#include <Bnd_Box.hxx> #include <Bnd_Box.hxx>
#include <BRepBndLib.hxx> #include <BRepBndLib.hxx>
#include <gp_Pnt.hxx> #include <gp_Pnt.hxx>
#include <GC_MakePlane.hxx>
//======================================================================= //=======================================================================
//function : GetID //function : GetID
//purpose : //purpose :
@ -122,13 +124,13 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log
BoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); BoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
if (isClosed) if (isClosed)
{ {
// Initial surface : Sphere // Initial surface : Sphere
// ** Retrieve center of mass // ** Retrieve center of mass
GProp_GProps aSystem; GProp_GProps aSystem;
BRepGProp::SurfaceProperties(aComp, aSystem); BRepGProp::SurfaceProperties(aComp, aSystem);
gp_Pnt aCenterMass = aSystem.CentreOfMass(); gp_Pnt aCenterMass = aSystem.CentreOfMass();
// ** Computation of radius // ** Computation of radius
Standard_Real aRMax = aXmax-aXmin; Standard_Real aRMax = aXmax-aXmin;
if (aRMax < aYmax-aYmin ) if (aRMax < aYmax-aYmin )
@ -140,34 +142,54 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log
} }
else else
{ {
// Initial surface : Plane
Standard_Real aX = aXmax-aXmin; Standard_Real aX = aXmax-aXmin;
Standard_Real aY = aYmax-aYmin; Standard_Real aY = aYmax-aYmin;
Standard_Real aZ = aZmax-aZmin; Standard_Real aZ = aZmax-aZmin;
gp_Pnt aPnt1 = gp_Pnt(aXmin, aYmin, aZmin); gp_Pnt aPnt1;
gp_Pnt aPnt2 = gp_Pnt(aXmax, aYmax, aZmax); gp_Pnt aPnt2;
gp_Pnt aPnt3; gp_Pnt aPnt3;
if (aX > aY) if (aX > aY)
{ {
if (aZ > aY) if (aX > aZ)
{ {
aPnt3 = gp_Pnt(aXmin, aYmax, aZmax); // X Plane
aPnt1 = gp_Pnt(aXmin, aYmin+aY/2, aZmin);
aPnt2 = gp_Pnt(aXmin, aYmin+aY/2, aZmax);
aPnt3 = gp_Pnt(aXmax, aYmin+aY/2, aZmin);
} }
else else
{ {
aPnt3 = gp_Pnt(aXmax, aYmin, aZmax); // Z Plane
aPnt1 = gp_Pnt(aXmin+aX/2, aYmin, aZmin);
aPnt2 = gp_Pnt(aXmin+aX/2, aYmin, aZmax);
aPnt3 = gp_Pnt(aXmin+aX/2, aYmax, aZmin);
} }
} }
else else
{ {
if (aZ > aY) if (aY > aZ)
{ {
aPnt3 = gp_Pnt(aXmax, aYmin, aZmax); // Y Plane
aPnt1 = gp_Pnt(aXmin, aYmin, aZmin+aZ/2);
aPnt2 = gp_Pnt(aXmin, aYmax, aZmin+aZ/2);
aPnt3 = gp_Pnt(aXmax, aYmin, aZmin+aZ/2);
} }
else else
{ {
aPnt3 = gp_Pnt(aXmax, aYmin, aZmax); // Z Plane
aPnt1 = gp_Pnt(aXmin+aX/2, aYmin, aZmin);
aPnt2 = gp_Pnt(aXmin+aX/2, aYmin, aZmax);
aPnt3 = gp_Pnt(aXmin+aX/2, aYmax, aZmin);
} }
} }
GC_MakePlane aMakePlane (aPnt1, aPnt2, aPnt3);
double aSize = (aX+aY+aZ)/2;
#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version
aInitShape = BRepBuilderAPI_MakeFace(aMakePlane, -aSize, aSize, -aSize, aSize, Precision::Confusion()).Face();
#else
aInitShape = BRepBuilderAPI_MakeFace(aMakePlane, -aSize, aSize, -aSize, aSize).Face();
#endif
} }
// ** Initialization of surface // ** Initialization of surface