0025024: BSplCLib::PrepareInsertKnots reports incorrect number of poles
authorkhlebnikov <rostislav.khlebnikov@kcl.ac.uk>
Thu, 25 Sep 2014 08:47:03 +0000 (12:47 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 25 Sep 2014 11:58:06 +0000 (15:58 +0400)
Added test bugs fclasses bug25024

src/BSplCLib/BSplCLib.cxx
tests/bugs/fclasses/bug25024 [new file with mode: 0644]

index 345e3c6..f41a893 100644 (file)
@@ -1702,6 +1702,7 @@ Standard_Boolean  BSplCLib::PrepareInsertKnots
       ak++;
   }
   
+  Standard_Integer aLastKnotMult = Mults (Knots.Upper());
   Standard_Real au,oldau = AddKnots(ak),Eps;
   
   while (ak <= AddKnots.Upper()) {
@@ -1741,7 +1742,15 @@ Standard_Boolean  BSplCLib::PrepareInsertKnots
       }
       else if (amult > mult) {
        if (amult > Degree) amult = Degree;
-       sigma += amult - mult;
+        if (k == Knots.Upper () && Periodic)
+        {
+          aLastKnotMult = Max (amult, mult);
+          sigma += 2 * (aLastKnotMult - mult);
+        }
+        else
+        {
+         sigma += amult - mult;
+        }
       }
       /*
       // on periodic curves if this is the last knot
@@ -1779,7 +1788,7 @@ Standard_Boolean  BSplCLib::PrepareInsertKnots
     //instance);
     //respectively AddMults() must meet this requirement if AddKnots() contains
     //knot(s) coincident with first or last
-    NbPoles = sigma - Mults(Knots.Upper());
+    NbPoles = sigma - aLastKnotMult;
   }
   else {
     NbPoles = sigma - Degree - 1;
@@ -1968,7 +1977,8 @@ void BSplCLib::InsertKnots
       if (Periodic) {
        // on periodic curve the first and last knot are delayed to the end
        if (curk == Knots.Lower() || (curk == Knots.Upper())) {
-         firstmult += depth;
+          if (firstmult == 0) // do that only once
+            firstmult += depth;
          depth = 0;
        }
       }
diff --git a/tests/bugs/fclasses/bug25024 b/tests/bugs/fclasses/bug25024
new file mode 100644 (file)
index 0000000..2c63955
--- /dev/null
@@ -0,0 +1,11 @@
+puts "============"
+puts "OCC25024"
+puts "============"
+puts ""
+#######################################################################
+# BSplCLib::PrepareInsertKnots reports incorrect number of poles
+#######################################################################
+
+restore [locate_data_file bug25024_wires.brep] w
+explode w
+thrusections r 0 0 w_1 w_2