mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0032557: Modeling Data - Use of BRepBuilderAPI_NurbsConvert create 2d p-curves with gaps
GeomConvert/GeomConvert_1.cxx - method CheckAndSegment is added to adjust surface periodic boundaries bug32557 - test is updated by new cases
This commit is contained in:
@@ -383,6 +383,7 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
//
|
||||
//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);
|
||||
@@ -415,6 +416,11 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
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
|
||||
@@ -431,6 +437,11 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
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
|
||||
@@ -450,6 +461,11 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
//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
|
||||
@@ -468,10 +484,20 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
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
|
||||
@@ -575,7 +601,6 @@ Handle(Geom_BSplineSurface) GeomConvert::SurfaceToBSplineSurface
|
||||
2 , C->Degree(),
|
||||
periodic, C->IsPeriodic());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user