//
//For cylinders, cones, spheres, toruses
const Standard_Boolean isUClosed = Abs((ULast - UFirst) - 2. * M_PI) <= Precision::PConfusion();
+ const Standard_Real eps = 100. * Epsilon(2. * M_PI);
//
if (Surf->IsKind(STANDARD_TYPE(Geom_Plane))) {
TColgp_Array2OfPnt Poles (1, 2, 1, 2);
if (isUClosed) {
Convert_CylinderToBSplineSurface Convert (Cyl, VFirst, VLast);
TheSurface = BSplineSurfaceBuilder (Convert);
+ Standard_Integer aNbK = TheSurface->NbUKnots();
+ if (Abs(TheSurface->UKnot(1) - UFirst) > eps || Abs(TheSurface->UKnot(aNbK) - ULast) > eps)
+ {
+ TheSurface->CheckAndSegment(UFirst, ULast, VFirst, VLast);
+ }
}
else {
Convert_CylinderToBSplineSurface
if (isUClosed) {
Convert_ConeToBSplineSurface Convert (Co, VFirst, VLast);
TheSurface = BSplineSurfaceBuilder (Convert);
+ Standard_Integer aNbK = TheSurface->NbUKnots();
+ if (Abs(TheSurface->UKnot(1) - UFirst) > eps || Abs(TheSurface->UKnot(aNbK) - ULast) > eps)
+ {
+ TheSurface->CheckAndSegment(UFirst, ULast, VFirst, VLast);
+ }
}
else {
Convert_ConeToBSplineSurface
//Convert_SphereToBSplineSurface Convert (Sph, UFirst, ULast);
Convert_SphereToBSplineSurface Convert (Sph, VFirst, VLast, Standard_False);
TheSurface = BSplineSurfaceBuilder (Convert);
+ Standard_Integer aNbK = TheSurface->NbUKnots();
+ if (Abs(TheSurface->UKnot(1) - UFirst) > eps || Abs(TheSurface->UKnot(aNbK) - ULast) > eps)
+ {
+ TheSurface->CheckAndSegment(UFirst, ULast, VFirst, VLast);
+ }
}
else {
Convert_SphereToBSplineSurface
Convert_TorusToBSplineSurface Convert (Tr, VFirst, VLast,
Standard_False);
TheSurface = BSplineSurfaceBuilder (Convert);
+ Standard_Integer aNbK = TheSurface->NbUKnots();
+ if (Abs(TheSurface->UKnot(1) - UFirst) > eps || Abs(TheSurface->UKnot(aNbK) - ULast) > eps)
+ {
+ TheSurface->CheckAndSegment(UFirst, ULast, VFirst, VLast);
+ }
}
else if (Strim->IsVClosed()) {
Convert_TorusToBSplineSurface Convert (Tr, UFirst, ULast);
TheSurface = BSplineSurfaceBuilder (Convert);
+ Standard_Integer aNbK = TheSurface->NbVKnots();
+ if (Abs(TheSurface->VKnot(1) - VFirst) > eps || Abs(TheSurface->VKnot(aNbK) - VLast) > eps)
+ {
+ TheSurface->CheckAndSegment(UFirst, ULast, VFirst, VLast);
+ }
}
else {
Convert_TorusToBSplineSurface
2 , C->Degree(),
periodic, C->IsPeriodic());
-
}