From c345be616bdf4ddddce4a41228aa62d36213ac31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ronald=20R=C3=B6mer?= Date: Sun, 17 Sep 2023 19:56:42 +0200 Subject: [PATCH] a test for invalid capt points 4 --- testing/test_filter.py | 8 +--- vtkPolyDataBooleanFilter.cxx | 89 +++++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/testing/test_filter.py b/testing/test_filter.py index db97153..8526117 100755 --- a/testing/test_filter.py +++ b/testing/test_filter.py @@ -959,11 +959,7 @@ def test_invalid_capt_pts_2(tmp_path): reader = vtkPolyDataReader() reader.SetFileName('data/cross.vtk') - cyl = vtkCylinderSource() - cyl.SetHeight(2.5) - cyl.SetResolution(12) - - z = .0000025 + z = .000001 tra = vtkTransform() tra.RotateZ(45) @@ -971,7 +967,7 @@ def test_invalid_capt_pts_2(tmp_path): tf = vtkTransformPolyDataFilter() tf.SetTransform(tra) - tf.SetInputConnection(cyl.GetOutputPort()) + tf.SetInputConnection(reader.GetOutputPort()) bf = vtkPolyDataBooleanFilter() bf.SetInputConnection(0, reader.GetOutputPort()) diff --git a/vtkPolyDataBooleanFilter.cxx b/vtkPolyDataBooleanFilter.cxx index 996efc3..55cca99 100644 --- a/vtkPolyDataBooleanFilter.cxx +++ b/vtkPolyDataBooleanFilter.cxx @@ -611,6 +611,58 @@ bool vtkPolyDataBooleanFilter::GetPolyStrips (vtkPolyData *pd, vtkIdTypeArray *c } + // sucht nach gleichen captPts + + { + std::map>>> collapsed; + + PolyStripsType::iterator itr; + StripPtsType::iterator itr2; + + for (itr = polyStrips.begin(); itr != polyStrips.end(); ++itr) { + PStrips &pStrips = itr->second; + + StripPtsType &pts = pStrips.pts; + + for (itr2 = pts.begin(); itr2 != pts.end(); ++itr2) { + StripPt &sp = itr2->second; + + if (sp.capt & Capt::BOUNDARY) { + collapsed[{sp.cutPt[0], sp.cutPt[1], sp.cutPt[2]}][sp.ind].push_back(sp); + } + } + } + + for (auto &[pt, map] : collapsed) { + if (map.size() > 1) { + // std::cout << pt << std::endl; + + // for (auto &[ind, pts] : map) { + // for (auto &p : pts) { + // std::cout << p << std::endl; + // } + // } + + // if (map.size() == 2 && std::all_of(map.begin(), map.end(), [](const auto &m) { return m.second.size() == 1 && m.second.back().get().capt == Capt::EDGE; })) { + + // for (auto &[ind, pts] : map) { + // StripPt &sp = pts.back(); + + // sp.capt = Capt::NOT; + // sp.edge[0] = sp.edge[1] = NOTSET; + // Cpy(sp.cutPt, sp.pt, 3); + // } + + // } else { + // return true; + // } + + return true; + + } + } + } + for (itr = polyLines.begin(); itr != polyLines.end(); ++itr) { PStrips &pStrips = polyStrips.at(itr->first); @@ -779,43 +831,6 @@ bool vtkPolyDataBooleanFilter::GetPolyStrips (vtkPolyData *pd, vtkIdTypeArray *c } - // sucht nach gleichen captPts - - { - std::map>>> collapsed; - - PolyStripsType::const_iterator itr; - StripPtsType::const_iterator itr2; - - for (itr = polyStrips.begin(); itr != polyStrips.end(); ++itr) { - const PStrips &pStrips = itr->second; - - const StripPtsType &pts = pStrips.pts; - - for (itr2 = pts.begin(); itr2 != pts.end(); ++itr2) { - const StripPt &sp = itr2->second; - - if (sp.capt & Capt::BOUNDARY) { - collapsed[{sp.cutPt[0], sp.cutPt[1], sp.cutPt[2]}][sp.ind].push_back(sp); - } - } - } - - for (auto &[pt, map] : collapsed) { - if (map.size() > 1) { - // std::cout << pt << std::endl; - - // for (auto &[ind, pts] : map) { - // for (auto &p : pts) { - // std::cout << p << std::endl; - // } - // } - - return true; - } - } - } - return false; }