From 519b54467114aa4888f8135d5099469cd920ea5d Mon Sep 17 00:00:00 2001 From: gka Date: Thu, 9 Oct 2014 16:03:27 +0400 Subject: [PATCH] 0025333: Result wires obtained after TestHarness command "connectedges" contains internal edges Fix contains protection in order to avoid addition in result wires INTERNAL or EXTERNAL edges during connecting edges in wires. Test case for issue #25333 --- .../ShapeAnalysis_FreeBounds.cxx | 15 +++++---- tests/bugs/heal/bug25333 | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 tests/bugs/heal/bug25333 diff --git a/src/ShapeAnalysis/ShapeAnalysis_FreeBounds.cxx b/src/ShapeAnalysis/ShapeAnalysis_FreeBounds.cxx index 6ed060a616..5ebf9f165e 100644 --- a/src/ShapeAnalysis/ShapeAnalysis_FreeBounds.cxx +++ b/src/ShapeAnalysis/ShapeAnalysis_FreeBounds.cxx @@ -286,6 +286,8 @@ ShapeAnalysis_FreeBounds::ShapeAnalysis_FreeBounds(const TopoDS_Shape& shape, TopoDS_Wire aCurW = TopoDS::Wire (arrwires->Value (lwire)); Handle(ShapeExtend_WireData) acurwd = new ShapeExtend_WireData ( TopoDS::Wire (arrwires->Value (lwire)), Standard_True, isUsedManifoldMode); + if( !acurwd->NbEdges()) + continue; sewd->Add (acurwd, (tail ? 0 : 1)); } else @@ -369,21 +371,22 @@ ShapeAnalysis_FreeBounds::ShapeAnalysis_FreeBounds(const TopoDS_Shape& shape, // Recherche de la premier edge non traitee pour un autre wire. //Searching for first edge for next wire lwire = -1; - for (/*Standard_Integer*/ i = 1 ; i <= arrwires->Length() && lwire == -1; i++) + for (/*Standard_Integer*/ i = 1 ; i <= arrwires->Length(); i++) { if (!aSel.ContWire(i)) { lwire = i; //szv#4:S4163:12Mar99 optimized + sewd->Add (TopoDS::Wire (arrwires->Value (lwire))); + aSel.LoadList(lwire); + + if (sewd->NbEdges() > 0) + break; + sewd->Clear(); } } if (lwire == -1) done = 1; - else - { - sewd->Add (TopoDS::Wire (arrwires->Value (lwire))); - aSel.LoadList(lwire); - } } } diff --git a/tests/bugs/heal/bug25333 b/tests/bugs/heal/bug25333 new file mode 100644 index 0000000000..58f28fee2b --- /dev/null +++ b/tests/bugs/heal/bug25333 @@ -0,0 +1,31 @@ +puts "========" +puts "OCC25333" +puts "========" +puts "" +########################################################################################## +# Result wires obtained after TestHarness command "connectedges" contains internal edges +########################################################################################## + +restore [locate_data_file bug25318_TheShapeTotal.brep] a +connectedges r a + +set WireSet [explode r] +set ii 0 +set IsFixed "TRUE" +while {$ii != [llength $WireSet]} { + set EdgeSet [explode [lindex $WireSet $ii]] + set iii 0 + while {$iii != [llength $EdgeSet]} { + set EdgeInfo [whatis [lindex $EdgeSet $iii]] + if {[lindex $EdgeInfo 5] == "INTERNAL"} { + set IsFixed "FALSE" + } + set iii [expr $iii + 1] + } + set ii [expr $ii + 1] +} + +if {$IsFixed == "FALSE"} { + puts "ERROR: OCC25333 is reproduced" + puts " Internal edge is detected" +}