WIP: next part of region refactoring.

This commit is contained in:
Matthias Koefferlein 2018-11-05 00:25:16 +01:00
parent 5a5051b0dd
commit 7062c4acf5
4 changed files with 5 additions and 10 deletions

View File

@ -724,7 +724,6 @@ Edges::select_interacting (const Region &other)
scanner.insert ((char *) &*e, 0); scanner.insert ((char *) &*e, 0);
} }
other.ensure_valid_polygons ();
for (Region::const_iterator p = other.begin (); ! p.at_end (); ++p) { for (Region::const_iterator p = other.begin (); ! p.at_end (); ++p) {
scanner.insert ((char *) &*p + 1, 1); scanner.insert ((char *) &*p + 1, 1);
} }
@ -754,7 +753,6 @@ Edges::select_not_interacting (const Region &other)
scanner.insert ((char *) &*e, 0); scanner.insert ((char *) &*e, 0);
} }
other.ensure_valid_polygons ();
for (Region::const_iterator p = other.begin (); ! p.at_end (); ++p) { for (Region::const_iterator p = other.begin (); ! p.at_end (); ++p) {
scanner.insert ((char *) &*p + 1, 1); scanner.insert ((char *) &*p + 1, 1);
} }

View File

@ -581,12 +581,11 @@ public:
* This method will keep all edges for which the filter returns true. * This method will keep all edges for which the filter returns true.
* Merged semantics applies. * Merged semantics applies.
*/ */
template <class F> Edges &filter (EdgeFilterBase &filter)
Edges &filter (F &filter)
{ {
edge_iterator_type ew = m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().begin (); edge_iterator_type ew = m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().begin ();
for (const_iterator e = begin_merged (); ! e.at_end (); ++e) { for (const_iterator e = begin_merged (); ! e.at_end (); ++e) {
if (filter (*e)) { if (filter.selected (*e)) {
if (ew == m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().end ()) { if (ew == m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().end ()) {
m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().insert (*e); m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().insert (*e);
ew = m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().end (); ew = m_edges.get_layer<db::Edge, db::unstable_layer_tag> ().end ();
@ -609,12 +608,11 @@ public:
* conform to the filter criterion. * conform to the filter criterion.
* Merged semantics applies. * Merged semantics applies.
*/ */
template <class F> Edges filtered (const EdgeFilterBase &filter) const
Edges filtered (F &filter) const
{ {
Edges d; Edges d;
for (const_iterator e = begin_merged (); ! e.at_end (); ++e) { for (const_iterator e = begin_merged (); ! e.at_end (); ++e) {
if (filter (*e)) { if (filter.selected (*e)) {
d.insert (*e); d.insert (*e);
} }
} }

View File

@ -3422,6 +3422,7 @@ private:
Region selected_interacting_generic (const Edges &other, bool inverse) const; Region selected_interacting_generic (const Edges &other, bool inverse) const;
void select_interacting_generic (const Edges &other, bool inverse); void select_interacting_generic (const Edges &other, bool inverse);
}; };
#endif
/** /**
* @brief A polygon receiver putting the polygons into a Region object * @brief A polygon receiver putting the polygons into a Region object
@ -3466,7 +3467,6 @@ private:
Region *mp_region; Region *mp_region;
bool m_clear; bool m_clear;
}; };
#endif
} // namespace db } // namespace db

View File

@ -237,7 +237,6 @@ TEST(3)
tp.input ("i2", ir2.begin_iter ().first, ir2.begin_iter ().second); tp.input ("i2", ir2.begin_iter ().first, ir2.begin_iter ().second);
EXPECT_EQ (ir2.has_valid_polygons (), false); EXPECT_EQ (ir2.has_valid_polygons (), false);
db::Region ir3 (db::RecursiveShapeIterator (ly, ly.cell (top), l3)); db::Region ir3 (db::RecursiveShapeIterator (ly, ly.cell (top), l3));
ir3.ensure_valid_polygons ();
tp.input ("i3", ir3.begin_iter ().first, ir3.begin_iter ().second); tp.input ("i3", ir3.begin_iter ().first, ir3.begin_iter ().second);
EXPECT_EQ (ir3.has_valid_polygons (), true); EXPECT_EQ (ir3.has_valid_polygons (), true);
tp.output ("o1", ly, top, o1); tp.output ("o1", ly, top, o1);