From: nbv Date: Thu, 3 Sep 2015 11:54:29 +0000 (+0300) Subject: 0026251: Section curve cannot be found X-Git-Tag: V7_0_0_beta~323 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=4b0cab06c11168600301ff275aecb19bcbe9bc75;p=occt-copy.git 0026251: Section curve cannot be found Current algorithm ignores found triangles intersection (IntPolyh_PMaillageAffinage) and, consequently, cannot find start point for intersection line. Branch fixes this problem. Test case for issue CR26251 Modified test case Small correction of test case for issue CR26251 --- diff --git a/src/IntPolyh/IntPolyh_Intersection.cxx b/src/IntPolyh/IntPolyh_Intersection.cxx index cd4c89f002..4ebcea801f 100644 --- a/src/IntPolyh/IntPolyh_Intersection.cxx +++ b/src/IntPolyh/IntPolyh_Intersection.cxx @@ -89,7 +89,7 @@ void IntPolyh_Intersection::Perform() { isAdvDone = PerformAdv(aPMaillageFF,aPMaillageFR,aPMaillageRF,aPMaillageRR,nbCouplesAdv); // advanced interference found - if(isAdvDone && nbCouplesAdv > 10) { + if(isAdvDone && nbCouplesAdv > 0) { aPMaillageFF->StartPointsChain(TSectionLines,TTangentZones); aPMaillageFR->StartPointsChain(TSectionLines,TTangentZones); aPMaillageRF->StartPointsChain(TSectionLines,TTangentZones); diff --git a/src/IntPolyh/IntPolyh_Intersection_1.cxx b/src/IntPolyh/IntPolyh_Intersection_1.cxx index 67a0760c41..639ae60f95 100644 --- a/src/IntPolyh/IntPolyh_Intersection_1.cxx +++ b/src/IntPolyh/IntPolyh_Intersection_1.cxx @@ -87,7 +87,7 @@ void IntPolyh_Intersection::Perform(const TColStd_Array1OfReal& Upars1, aPMaillageRR,nbCouplesAdv); // advanced interference found - if(isAdvDone && nbCouplesAdv > 10) { + if(isAdvDone && nbCouplesAdv > 0) { aPMaillageFF->StartPointsChain(TSectionLines,TTangentZones); aPMaillageFR->StartPointsChain(TSectionLines,TTangentZones); aPMaillageRF->StartPointsChain(TSectionLines,TTangentZones); @@ -171,7 +171,7 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage(const Standard_Boolean i (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() || FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) { return Standard_False; -} + } */ //IFV test for parallel surf if(FinTTC > 200) { @@ -250,7 +250,7 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage(const TColStd_Array1OfRe (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() || FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) { return Standard_False; -} + } */ //IFV test for parallel surf if(FinTTC > 200) { diff --git a/tests/bugs/modalg_6/bug26251 b/tests/bugs/modalg_6/bug26251 new file mode 100755 index 0000000000..0f21c56f61 --- /dev/null +++ b/tests/bugs/modalg_6/bug26251 @@ -0,0 +1,43 @@ +puts "============" +puts "OCC26251" +puts "============" +puts "" +############################### +## Section curve cannot be found +############################### + +restore [locate_data_file bug26251_b31_3.brep] b1 +restore [locate_data_file bug26251_tank31.brep] b2 + +bsection result b1 b2 + +set length 2.49934 + +set nbshapes_expected " +Number of shapes in shape + VERTEX : 3 + EDGE : 2 + WIRE : 0 + FACE : 0 + SHELL : 0 + SOLID : 0 + COMPSOLID : 0 + COMPOUND : 1 + SHAPE : 6 +" + +checknbshapes result -ref ${nbshapes_expected} -t -m "Section curve" + +explode b2 f +copy b2_5 b2 + +set NbCurves 0 + +set log [bopcurves b1 b2 -2d] +regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurves + +if {$NbCurves == 0} { + puts "Error: Intersection curve is not found" +} + +set 3dviewer 1