]> OCCT Git - occt.git/commitdiff
0026446: GeomConvert::ConcatC1 produces not expected curve
authoraml <aml@opencascade.com>
Thu, 16 Jul 2015 09:10:38 +0000 (12:10 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 22 Jul 2015 10:55:15 +0000 (13:55 +0300)
Concatenation fixed.

src/GeomConvert/GeomConvert.cxx
src/QABugs/QABugs_19.cxx

index e265014e0175e7c5de6d7cf4dc1a65d31513613e..e1316415e2eb507823027ba762b9a8f4eb631257 100644 (file)
@@ -1215,13 +1215,14 @@ void  GeomConvert::ConcatC1(TColGeom_Array1OfBSplineCurve&           ArrayOfCurv
        
        if (index==j)                                      //initialisation at the begining of the loop
         ArrayOfConcatenated->SetValue(i,Curve1);
-       else{
-        GeomConvert_CompCurveToBSplineCurve   C(Handle(Geom_BSplineCurve)::DownCast(ArrayOfConcatenated->Value(i)));
-        fusion=C.Add(Curve1,
-                     local_tolerance(j-1));          //merge of two consecutive curves               
-        if (fusion==Standard_False)
-          Standard_ConstructionError::Raise("GeomConvert Concatenation Error") ;
-        ArrayOfConcatenated->SetValue(i,C.BSplineCurve());
+       else
+       {
+         // Merge of two consecutive curves.
+         GeomConvert_CompCurveToBSplineCurve   C(Handle(Geom_BSplineCurve)::DownCast(ArrayOfConcatenated->Value(i)));
+         fusion=C.Add(Curve1, local_tolerance(j-1), Standard_True);
+         if (fusion==Standard_False)
+           Standard_ConstructionError::Raise("GeomConvert Concatenation Error");
+         ArrayOfConcatenated->SetValue(i,C.BSplineCurve());
        }
      }
      index=index+1+nb_vertexG1;
index 2d2fb5b0ef550cbf1477e259816b70878e8c8dde..c59479e14f6d2ea5491471649ff4c701e1a1bc12 100644 (file)
@@ -3663,6 +3663,64 @@ static Standard_Integer OCC24923(
   return 0;
 }
 
+#include <TColGeom_Array1OfBSplineCurve.hxx>
+#include <TColStd_Array1OfReal.hxx>
+#include <TColGeom_HArray1OfBSplineCurve.hxx>
+#include <GeomConvert.hxx>
+
+//=======================================================================
+//function : OCC26446
+//purpose  : 
+//=======================================================================
+Standard_Integer OCC26446 (Draw_Interpretor& di, 
+                           Standard_Integer n, 
+                           const char** a)
+{
+  if (n != 4) {
+    di << "Usage: OCC26446 r c1 c2" << "\n";
+    return 1;
+  }
+
+  Handle(Geom_BSplineCurve) aCurve1 =
+    Handle(Geom_BSplineCurve)::DownCast(DrawTrSurf::GetCurve(a[2]));
+  Handle(Geom_BSplineCurve) aCurve2 = 
+    Handle(Geom_BSplineCurve)::DownCast(DrawTrSurf::GetCurve(a[3]));
+
+  if (aCurve1.IsNull()) {
+    di << a[2] << " is not a BSpline curve" << "\n";
+       return 1;
+  }
+
+  if (aCurve2.IsNull()) {
+    di << a[3] << " is not a BSpline curve" << "\n";
+       return 1;
+  }
+
+  TColGeom_Array1OfBSplineCurve          aCurves     (0, 1);
+  TColStd_Array1OfReal                   aTolerances (0, 0);
+  Standard_Real                          aTolConf    = 1.e-3;
+  Standard_Real                          aTolClosure = Precision::Confusion();
+  Handle(TColGeom_HArray1OfBSplineCurve) aConcatCurves;
+  Handle(TColStd_HArray1OfInteger)       anIndices;
+
+  aCurves.SetValue(0, aCurve1);
+  aCurves.SetValue(1, aCurve2);
+  aTolerances.SetValue(0, aTolConf);
+
+  GeomConvert::ConcatC1(aCurves,
+                        aTolerances,
+                        anIndices,
+                        aConcatCurves,
+                        Standard_False,
+                        aTolClosure);
+
+  Handle(Geom_BSplineCurve) aResult =
+    aConcatCurves->Value(aConcatCurves->Lower());
+
+  DrawTrSurf::Set(a[1], aResult);
+  return 0;
+}
+
 static Standard_Integer OCC26448 (Draw_Interpretor& theDI, Standard_Integer, const char **)
 {
   TColStd_SequenceOfReal aSeq1, aSeq2;
@@ -3818,6 +3876,7 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   theCommands.Add ("OCC24923", "OCC24923", __FILE__, OCC24923, group);
   theCommands.Add ("OCC26139", "OCC26139 [-boxsize value] [-boxgrid value] [-compgrid value]", __FILE__, OCC26139, group);
   theCommands.Add ("OCC26284", "OCC26284", __FILE__, OCC26284, group);
+  theCommands.Add ("OCC26446", "OCC26446 r c1 c2", __FILE__, OCC26446, group);
   theCommands.Add ("OCC26448", "OCC26448: check method Prepend() of sequence", __FILE__, OCC26448, group);
   theCommands.Add ("OCC26407", "OCC26407 result_name", __FILE__, OCC26407, group);
   return;