From 07805f1a6149cdec4c4a2c20bc292b9ca6cdcdcf Mon Sep 17 00:00:00 2001 From: tomate44 Date: Tue, 26 Jul 2022 14:58:28 +0200 Subject: [PATCH] [Part] BSplineSurface: fix KnotSequence for periodic BSpline surfaces --- src/Mod/Part/App/BSplineSurfacePyImp.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Mod/Part/App/BSplineSurfacePyImp.cpp b/src/Mod/Part/App/BSplineSurfacePyImp.cpp index e848695282..7e7f593a6a 100644 --- a/src/Mod/Part/App/BSplineSurfacePyImp.cpp +++ b/src/Mod/Part/App/BSplineSurfacePyImp.cpp @@ -1641,8 +1641,14 @@ Py::List BSplineSurfacePy::getUKnotSequence(void) const Handle(Geom_BSplineSurface) surf = Handle(Geom_BSplineSurface)::DownCast (getGeometryPtr()->handle()); Standard_Integer m = 0; - for (int i=1; i<= surf->NbUKnots(); i++) - m += surf->UMultiplicity(i); + if (surf->IsUPeriodic()) { + // knots=poles+2*degree-mult(1)+2 + m = surf->NbUPoles() + 2*surf->UDegree() - surf->UMultiplicity(1) + 2; + } + else { + for (int i=1; i<= surf->NbUKnots(); i++) + m += surf->UMultiplicity(i); + } TColStd_Array1OfReal k(1,m); surf->UKnotSequence(k); Py::List list; @@ -1657,8 +1663,14 @@ Py::List BSplineSurfacePy::getVKnotSequence(void) const Handle(Geom_BSplineSurface) surf = Handle(Geom_BSplineSurface)::DownCast (getGeometryPtr()->handle()); Standard_Integer m = 0; - for (int i=1; i<= surf->NbVKnots(); i++) - m += surf->VMultiplicity(i); + if (surf->IsVPeriodic()) { + // knots=poles+2*degree-mult(1)+2 + m = surf->NbVPoles() + 2*surf->VDegree() - surf->VMultiplicity(1) + 2; + } + else { + for (int i=1; i<= surf->NbVKnots(); i++) + m += surf->VMultiplicity(i); + } TColStd_Array1OfReal k(1,m); surf->VKnotSequence(k); Py::List list;