]> OCCT Git - occt-copy.git/commitdiff
0026446: GeomConvert::ConcatC1 produces not expected curve
authoraml <aml@opencascade.com>
Thu, 16 Jul 2015 09:10:38 +0000 (12:10 +0300)
committervsr <vsr@opencascade.com>
Thu, 13 Aug 2015 08:15:25 +0000 (11:15 +0300)
Concatenation fixed.

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

index 35012a4c91e9d8081d572c0b172e36ea830a16fe..e8b34074b22ce31e8439bc2c35f0a3d80f6d0eaa 100644 (file)
@@ -1226,13 +1226,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 bf32f12af433058682efe0d2b055e3aaa48487df..dcfb40ab2be94993bb325831f9cbfa75408d5682 100755 (executable)
@@ -3867,6 +3867,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;
+}
+
 void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -3939,5 +3997,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   theCommands.Add ("xprojponf", "xprojponf p f", __FILE__, xprojponf, group);
   theCommands.Add ("OCC24923", "OCC24923", __FILE__, OCC24923, group);
   theCommands.Add ("OCC26139", "OCC26139 [-boxsize value] [-boxgrid value] [-compgrid value]", __FILE__, OCC26139, group);
+  theCommands.Add ("OCC26446", "OCC26446 r c1 c2", __FILE__, OCC26446, group);
   return;
 }