]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/GeomAPI/GeomAPI_BSpline2d.cpp
Salome HOME
updated copyright message
[modules/shaper.git] / src / GeomAPI / GeomAPI_BSpline2d.cpp
index 5835d9707d4a06a278429c48375e45382ab0f91f..32cad15b0dcc603196edcaa47e4dd930da18556f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2019-2020  CEA/DEN, EDF R&D
+// Copyright (C) 2019-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -48,8 +48,15 @@ static Handle_Geom2d_BSplineCurve* newBSpline2d(
     return newBSpline2d(thePoles, theWeights, theDegree, thePeriodic);
 
   int anAuxPole = 0;
-  if (thePeriodic && thePoles.front()->distance(thePoles.back()) < Precision::Confusion())
-    anAuxPole = -1;
+  if (thePeriodic && thePoles.front()->distance(thePoles.back()) < Precision::Confusion()) {
+    // additionally check the number of poles is greater than needed for th periodic B-spline
+    int aNbPoles = 0;
+    std::list<int>::const_iterator it = theMults.begin();
+    for (++it; it != theMults.end(); ++it)
+      aNbPoles += *it;
+    if ((int)thePoles.size() > aNbPoles)
+      anAuxPole = -1;
+  }
 
   // collect arrays of poles, weights, knots and multiplicities
   TColgp_Array1OfPnt2d aPoles(1, (int)thePoles.size() + anAuxPole);