From: maxsson Date: Fri, 1 Mar 2019 14:13:53 +0000 (+0300) Subject: Preserving the value of parallelism before parametric branch X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2FCR30217;p=occt-copy.git Preserving the value of parallelism before parametric branch --- diff --git a/src/Extrema/Extrema_ExtCC.cxx b/src/Extrema/Extrema_ExtCC.cxx index 7ee612f23c..bd3f468625 100644 --- a/src/Extrema/Extrema_ExtCC.cxx +++ b/src/Extrema/Extrema_ExtCC.cxx @@ -249,7 +249,8 @@ void Extrema_ExtCC::Perform() } default: break; } - if (mypoints.Size() == 0) { + if (mypoints.Size() == 0) + { myDone = Standard_False; } } else if (type1 == GeomAbs_Circle && type2 == GeomAbs_Circle) { @@ -265,8 +266,10 @@ void Extrema_ExtCC::Perform() } } if(!myDone){ + Standard_Boolean isParallel = myIsPar; myECC.Perform(); PrepareResults(myECC, U11, U12, U21, U22); + myIsPar = myIsPar || isParallel; } } diff --git a/src/GeomliteTest/GeomliteTest_API2dCommands.cxx b/src/GeomliteTest/GeomliteTest_API2dCommands.cxx index 829bc60432..f57d65ae73 100644 --- a/src/GeomliteTest/GeomliteTest_API2dCommands.cxx +++ b/src/GeomliteTest/GeomliteTest_API2dCommands.cxx @@ -384,10 +384,10 @@ static Standard_Integer intersect(Draw_Interpretor& di, Standard_Integer n, cons Standard_Integer aNbSegments = Intersector.NbSegments(); for (Standard_Integer i = 1; i <= aNbSegments; i++) { - di << "Segment #" << i << " found.\n"; - di << "Curve 1 first parameter:" << S1->FirstParameter() << " last parameter: " << S1->LastParameter() <<"\n"; - di << "Curve 2 first parameter:" << S2->FirstParameter() << " last parameter: " << S2->LastParameter() << "\n"; Intersector.Segment(i,S1,S2); + di << "Segment #" << i << " found.\n"; + di << "Curve 1 first parameter: " << S1->FirstParameter() << " last parameter: " << S1->LastParameter() <<"\n"; + di << "Curve 2 first parameter: " << S2->FirstParameter() << " last parameter: " << S2->LastParameter() <<"\n"; CD = new DrawTrSurf_Curve2d(S1, Draw_bleu, 30); dout << CD; CD = new DrawTrSurf_Curve2d(S2, Draw_violet, 30); diff --git a/tests/bugs/modalg_7/bug30217_1 b/tests/bugs/modalg_7/bug30217_1 index 3786d25900..78dc99aeba 100644 --- a/tests/bugs/modalg_7/bug30217_1 +++ b/tests/bugs/modalg_7/bug30217_1 @@ -1,5 +1,5 @@ puts "============" -puts "OCC30217" +puts "OCC30217_1" puts "============" puts "" ######################################################################### @@ -16,7 +16,7 @@ set tol_rel 1.0e-2 set param11 1.8484218380721342 set param12 1.8484627151687805 set param21 50.908401295062035 -set param22 1.8484627151687805 +set param22 50.909328431594709 set info [2dintersect c2 s2 -tol 1e-8] regexp {Curve 1 first parameter: +([-0-9.+eE]+) last parameter: +([-0-9.+eE]+)} ${info} full curve1p1 curve1p2 diff --git a/tests/bugs/modalg_7/bug30217_2 b/tests/bugs/modalg_7/bug30217_2 index de0be97d93..6a12fcd6b8 100644 --- a/tests/bugs/modalg_7/bug30217_2 +++ b/tests/bugs/modalg_7/bug30217_2 @@ -1,5 +1,5 @@ puts "============" -puts "OCC30217_1" +puts "OCC30217_2" puts "============" puts "" ######################################################################### @@ -9,8 +9,7 @@ set tol_abs 2.e-7 drseg s -80.461134694338 53.07587187722 0.0 -31.501464018476 67.029737602069 0.0 circle c -18.339655323916 20.849340929486 0.0 48.019394466707 -set info1 [extrema c s] - +set info1 [extrema c s] if {[regexp "ext" ${info1}] != 1} { puts "Error : No intersection detected" } else { @@ -24,4 +23,4 @@ if { ${extLength} > $tol_abs } { puts "Error: bad distance poins obtained" } else { puts "OK: good distance between obtained points" -} \ No newline at end of file +} \ No newline at end of file diff --git a/tests/bugs/modalg_7/bug30217_3 b/tests/bugs/modalg_7/bug30217_3 new file mode 100644 index 0000000000..c5ed10a5ae --- /dev/null +++ b/tests/bugs/modalg_7/bug30217_3 @@ -0,0 +1,28 @@ +puts "============" +puts "OCC30217_3" +puts "============" +puts "" +######################################################################### +# Intersection between a circle and a line not detected (3d) +######################################################################### +set tol_abs 2.e-7 + +drseg s -31.501464018476 67.029737602069 -10.0 -31.501464018476 67.029737602069 0.0 +circle c -18.339655323916 20.849340929486 0.0 48.019394466707 +set info1 [extrema c s] +if {[regexp "ext" ${info1}] != 1} { + puts "Error : No intersection detected" +} else { + puts "OK: Intersection are detected" +} + +# Distance check +set infoext1 [dump ext_1] + + +regexp "Parameters : 0 +(\[-0-9*\.+eE\]+)" $infoext1 full ext1Length ext2Length +if { $ext1Length > $tol_abs || $ext2Length > $tol_abs } { + puts "Error: bad distance poins obtained" +} else { + puts "OK: good distance between obtained points" +} \ No newline at end of file diff --git a/tests/bugs/modalg_7/bug30217_4 b/tests/bugs/modalg_7/bug30217_4 new file mode 100644 index 0000000000..11930cd1b9 --- /dev/null +++ b/tests/bugs/modalg_7/bug30217_4 @@ -0,0 +1,20 @@ +puts "============" +puts "OCC30217_4" +puts "============" +puts "" +######################################################################### +# Intersection between a circle and a line not detected (3d) +######################################################################### + +set ExpDist 5 + +circle c1 0 0 0 0 0 1 5 +line c2 0 0 0 0 0 1 +trim c2 c2 -1 -5e-8 + +regexp {Infinite number of extremas, distance = +([-0-9.+eE]+)} [extrema c1 c2] full aDist1 +checkreal Distance $aDist1 $ExpDist 1.0e-7 0.0 + +regexp {Infinite number of extremas, distance = +([-0-9.+eE]+)} [extrema c2 c1] full aDist2 +checkreal Distance $aDist2 $ExpDist 1.0e-7 0.0 + \ No newline at end of file