Thu, 11/22/2001 - 01:53
Forums:
Hi !
I try to get all the faces from a shape I created with BRepPrimAPI_MakeBox( 1, 1, 1);, but I get incorrect result. First of all, the bounds returned for the faces are weird min=-2.0e+100 and max=2.0e+100, is this correct, it looks a bit odd to me ?
And when I use Geom_Surface::D0( umin, vmin, pt), pt.X and pt.Y is correct, but pt.Z is a large negative value, am I doing anything wrong with this, the code looks like this:
void renderShape( TopoDS_Shape& shape) { TopExp_Explorer ex; TopTools_MapOfShape map; for( ex.Init( shape, TopAbs_FACE); ex.More(); ex.Next()) // Iterate over all faces { const TopoDS_Shape& shp = ex.Current(); TopLoc_Location loc; FXASSERT( shp.ShapeType() == TopAbs_FACE); TopoDS_Face face = TopoDS::Face( shp); gp_Trsf xform = loc; if( map.Add( face)) { BRepAdaptor_Surface sa( face); const Handle(Geom_Surface)& surf = Handle(Geom_Surface)::DownCast(sa.Surface().Surface()); double u1, u2, v1, v2; surf->Bounds( u1, u2, v1, v2); surf->D0( u1, v2, pt); return odd Z values here... } } }
Thu, 11/22/2001 - 14:07
Hello Mikael,
You should instead use BRepTools:UVBounds that will return you the bounds corresponding to the limit of the Face and not to the Surface which in your case is infinite (2.e+100).
Thu, 11/22/2001 - 15:58
Thanks, that helped a lot, just one question, the help text for Bounds() says that it returns Standard_Real::FirstReal() and LastReal() for infinite surfaces, but FirstReal() and LastReal() returns, I think it was 1.0e+308 or something like that, but the bounds was +/-2.0e+100.
Is this a bug or a typo in the documentation ?
Mikael
Thu, 11/22/2001 - 16:16
In case of infinite surfaces Bounds() method returns Precision::Infinite() which is a value equals to 2.0e+100. So it looks like a typo in the documentation.