前段时间在OCC中建模的时候一直困扰于如何获得GeomPlate_Surface的面的边界线。查了很多资料,从该类的声明中可以看到void RealBounds(Standard_Real& U1,Standard_Real& U2,Standard_Real& V1,Standard_Real& V2) const;这个函数,但是这个函数只能得到这个面的最大x,y和最小x,y值。同理在Geom_BSplineSurface中其自身也有获得这几个值的函数:void Bounds (Standard_Real &U1, Standard_Real &U2, Standard_Real &V1, Standard_Real &V2) ,但这些都不是我想要的。后来我发现有一个BndBox的类,但是它的基本功能其实和上面两个函数相差无几。
后来我在例子代码中看到这么一段代码,解决了我的问题
Handle(Geom_Surface) aSurf;
TopoDS_Wire Wire[2];
...
TopoDS_Face myFace = BRepBuilderAPI_MakeFace(aSurf, Precision::Confusion());
Face[r-1]=myFace;
//
ShapeAnalysis_FreeBounds aFreeBounds(myFace, Standard_False, Standard_True);
TopoDS_Compound aClosedWires = aFreeBounds.GetClosedWires();
TopTools_IndexedMapOfShape aWires;
TopExp::MapShapes(aClosedWires, TopAbs_WIRE, aWires);
TopoDS_Wire aWire;
Standard_Integer nbWires = aWires.Extent();
if (nbWires)
aWire = TopoDS::Wire(aWires(1));
else
return;
Wire[r-1]=aWire;