From 74880a51988efa3a6f105556e1676db0f6c3a3e0 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 1 Oct 2019 22:06:16 +0200 Subject: [PATCH 01/10] First implementation of pull* methods --- src/db/db/dbAsIfFlatRegion.cc | 89 ++++++++++++++- src/db/db/dbAsIfFlatRegion.h | 22 ++++ src/db/db/dbDeepRegion.cc | 202 +++++++++++++++++++++++++++++++++- src/db/db/dbDeepRegion.h | 2 + src/db/db/dbEmptyRegion.h | 5 + src/db/db/dbFlatEdges.h | 4 +- src/db/db/dbRegion.h | 40 +++++++ src/db/db/dbRegionDelegate.h | 4 + src/db/db/dbRegionUtils.cc | 52 +++++++-- src/db/db/dbRegionUtils.h | 19 ++-- src/db/db/gsiDeclDbRegion.cc | 43 ++++++++ 11 files changed, 457 insertions(+), 25 deletions(-) diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index 7e31ca54a..a80066242 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -27,6 +27,7 @@ #include "dbFlatEdges.h" #include "dbEmptyRegion.h" #include "dbEmptyEdgePairs.h" +#include "dbEmptyEdges.h" #include "dbRegion.h" #include "dbRegionUtils.h" #include "dbShapeProcessor.h" @@ -337,7 +338,7 @@ AsIfFlatRegion::selected_interacting_generic (const Edges &other, bool inverse) scanner.reserve2 (other.size ()); std::auto_ptr output (new FlatRegion (false)); - region_to_edge_interaction_filter filter (output->raw_polygons (), inverse); + region_to_edge_interaction_filter filter (output->raw_polygons (), inverse); AddressablePolygonDelivery p (begin_merged (), has_valid_merged_polygons ()); @@ -423,6 +424,92 @@ AsIfFlatRegion::selected_interacting_generic (const Region &other, int mode, boo return output.release (); } +EdgesDelegate * +AsIfFlatRegion::pull_generic (const Edges &other) const +{ + if (other.empty ()) { + return other.delegate ()->clone (); + } else if (empty ()) { + return new EmptyEdges (); + } + + db::box_scanner2 scanner (report_progress (), progress_desc ()); + scanner.reserve1 (size ()); + scanner.reserve2 (other.size ()); + + std::auto_ptr output (new FlatEdges (false)); + region_to_edge_interaction_filter filter (output->raw_edges (), false); + + AddressablePolygonDelivery p (begin_merged (), has_valid_merged_polygons ()); + + for ( ; ! p.at_end (); ++p) { + scanner.insert1 (p.operator-> (), 0); + } + + AddressableEdgeDelivery e (other.addressable_edges ()); + + for ( ; ! e.at_end (); ++e) { + scanner.insert2 (e.operator-> (), 0); + } + + scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + + return output.release (); +} + +RegionDelegate * +AsIfFlatRegion::pull_generic (const Region &other, int mode, bool touching) const +{ + db::EdgeProcessor ep (report_progress (), progress_desc ()); + ep.set_base_verbosity (base_verbosity ()); + + // shortcut + if (empty ()) { + return clone (); + } else if (other.empty ()) { + return new EmptyRegion (); + } + + size_t n = 1; + for (RegionIterator p = other.begin (); ! p.at_end (); ++p, ++n) { + if (p->box ().touches (bbox ())) { + ep.insert (*p, n); + } + } + + for (RegionIterator p (begin_merged ()); ! p.at_end (); ++p) { + if (mode > 0 || p->box ().touches (other.bbox ())) { + ep.insert (*p, 0); + } + } + + db::InteractionDetector id (mode, 0); + id.set_include_touching (touching); + db::EdgeSink es; + ep.process (es, id); + id.finish (); + + std::auto_ptr output (new FlatRegion (false)); + + n = 0; + std::set selected; + for (db::InteractionDetector::iterator i = id.begin (); i != id.end () && i->first == 0; ++i) { + ++n; + selected.insert (i->second); + } + + output->reserve (n); + + n = 1; + for (RegionIterator p = other.begin (); ! p.at_end (); ++p, ++n) { + if (selected.find (n) != selected.end ()) { + output->raw_polygons ().insert (*p); + } + } + + return output.release (); +} + template void AsIfFlatRegion::produce_markers_for_grid_check (const db::Polygon &poly, const Trans &tr, db::Coord gx, db::Coord gy, db::Shapes &shapes) diff --git a/src/db/db/dbAsIfFlatRegion.h b/src/db/db/dbAsIfFlatRegion.h index b6c1b3e93..35824d0c8 100644 --- a/src/db/db/dbAsIfFlatRegion.h +++ b/src/db/db/dbAsIfFlatRegion.h @@ -205,6 +205,26 @@ public: return selected_interacting_generic (other, 0, false, true); } + virtual RegionDelegate *pull_inside (const Region &other) const + { + return pull_generic (other, -1, true); + } + + virtual RegionDelegate *pull_interacting (const Region &other) const + { + return pull_generic (other, 0, true); + } + + virtual EdgesDelegate *pull_interacting (const Edges &other) const + { + return pull_generic (other); + } + + virtual RegionDelegate *pull_overlapping (const Region &other) const + { + return pull_generic (other, 0, false); + } + virtual RegionDelegate *in (const Region &other, bool invert) const; virtual bool equals (const Region &other) const; @@ -220,6 +240,8 @@ protected: EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; + RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; + EdgesDelegate *pull_generic (const Edges &other) const; template static void produce_markers_for_grid_check (const db::Polygon &poly, const Trans &tr, db::Coord gx, db::Coord gy, db::Shapes &shapes); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 149555c20..383143703 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -1617,8 +1617,82 @@ private: mutable db::EdgeProcessor m_ep; }; +class PullLocalOperation + : public local_operation +{ +public: + PullLocalOperation (int mode, bool touching) + : m_mode (mode), m_touching (touching) + { + // .. nothing yet .. + } + + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const + { + m_ep.clear (); + + std::set others; + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { + others.insert (interactions.intruder_shape (*j)); + } + } + + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + const db::PolygonRef &subject = interactions.subject_shape (i->first); + for (db::PolygonRef::polygon_edge_iterator e = subject.begin_edge (); ! e.at_end(); ++e) { + m_ep.insert (*e, 0); + } + } + + size_t n = 1; + for (std::set::const_iterator o = others.begin (); o != others.end (); ++o, ++n) { + for (db::PolygonRef::polygon_edge_iterator e = o->begin_edge (); ! e.at_end(); ++e) { + m_ep.insert (*e, n); + } + } + + db::InteractionDetector id (m_mode, 0); + id.set_include_touching (m_touching); + db::EdgeSink es; + m_ep.process (es, id); + id.finish (); + + n = 0; + std::set selected; + for (db::InteractionDetector::iterator i = id.begin (); i != id.end () && i->first == 0; ++i) { + ++n; + selected.insert (i->second); + } + + n = 1; + for (std::set::const_iterator o = others.begin (); o != others.end (); ++o, ++n) { + if (selected.find (n) != selected.end ()) { + result.insert (*o); + } + } + } + + virtual on_empty_intruder_mode on_empty_intruder_hint () const + { + return Drop; + } + + virtual std::string description () const + { + return tl::to_string (tr ("Pull regions by their geometric relation to first (interacting, inside)")); + } + +private: + int m_mode; + bool m_touching; + mutable db::EdgeProcessor m_ep; +}; + struct ResultInserter { + typedef db::Polygon value_type; + ResultInserter (db::Layout *layout, std::unordered_set &result) : mp_layout (layout), mp_result (&result) { @@ -1635,6 +1709,25 @@ private: std::unordered_set *mp_result; }; +struct EdgeResultInserter +{ + typedef db::Edge value_type; + + EdgeResultInserter (std::unordered_set &result) + : mp_result (&result) + { + // .. nothing yet .. + } + + void insert (const db::Edge &e) + { + (*mp_result).insert (e); + } + +private: + std::unordered_set *mp_result; +}; + class InteractingWithEdgeLocalOperation : public local_operation { @@ -1652,7 +1745,7 @@ public: ResultInserter inserter (layout, result); region_to_edge_interaction_filter filter (inserter, m_inverse); - for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { m_scanner.insert2 (& interactions.intruder_shape (*j), 0); } @@ -1688,7 +1781,7 @@ public: virtual std::string description () const { - return tl::to_string (tr ("Select regions by their geometric relation (interacting, inside, outside ..)")); + return tl::to_string (tr ("Select regions by their geometric relation to edges")); } private: @@ -1696,6 +1789,55 @@ private: mutable db::box_scanner2 m_scanner; }; +class PullWithEdgeLocalOperation + : public local_operation +{ +public: + PullWithEdgeLocalOperation () + { + // .. nothing yet .. + } + + virtual void compute_local (db::Layout *, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const + { + m_scanner.clear (); + + EdgeResultInserter inserter (result); + region_to_edge_interaction_filter filter (inserter, false); + + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { + m_scanner.insert2 (& interactions.intruder_shape (*j), 0); + } + } + + std::list heap; + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + + const db::PolygonRef &subject = interactions.subject_shape (i->first); + heap.push_back (subject.obj ().transformed (subject.trans ())); + + m_scanner.insert1 (&heap.back (), 0); + + } + + m_scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + } + + virtual on_empty_intruder_mode on_empty_intruder_hint () const + { + return Drop; + } + + virtual std::string description () const + { + return tl::to_string (tr ("Select edges from second by their geometric relation to first")); + } + +private: + mutable db::box_scanner2 m_scanner; +}; + } RegionDelegate * @@ -1766,4 +1908,60 @@ DeepRegion::selected_interacting_generic (const Edges &other, bool inverse) cons return res; } +RegionDelegate * +DeepRegion::pull_generic (const Region &other, int mode, bool touching) const +{ + // with these flag set to true, the resulting polygons are broken again. + bool split_after = false; + + const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); + if (! other_deep) { + return db::AsIfFlatRegion::pull_generic (other, mode, touching); + } + + ensure_merged_polygons_valid (); + + DeepLayer dl_out (m_deep_layer.derived ()); + + db::PullLocalOperation op (mode, touching); + + db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + proc.set_base_verbosity (base_verbosity ()); + proc.set_threads (m_deep_layer.store ()->threads ()); + if (split_after) { + proc.set_area_ratio (m_deep_layer.store ()->max_area_ratio ()); + proc.set_max_vertex_count (m_deep_layer.store ()->max_vertex_count ()); + } + + proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + + db::DeepRegion *res = new db::DeepRegion (dl_out); + if (! split_after) { + res->set_is_merged (true); + } + return res; +} + +EdgesDelegate * +DeepRegion::pull_generic (const Edges &other) const +{ + const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); + if (! other_deep) { + return db::AsIfFlatRegion::pull_generic (other); + } + + ensure_merged_polygons_valid (); + + DeepLayer dl_out (m_deep_layer.derived ()); + + db::PullWithEdgeLocalOperation op; + + db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + proc.set_base_verbosity (base_verbosity ()); + proc.set_threads (m_deep_layer.store ()->threads ()); + proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + + return new db::DeepEdges (dl_out); +} + } diff --git a/src/db/db/dbDeepRegion.h b/src/db/db/dbDeepRegion.h index ce554ffb9..2f70eb2fd 100644 --- a/src/db/db/dbDeepRegion.h +++ b/src/db/db/dbDeepRegion.h @@ -240,6 +240,8 @@ private: EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; + RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; + EdgesDelegate *pull_generic (const Edges &other) const; const DeepLayer &merged_deep_layer () const { diff --git a/src/db/db/dbEmptyRegion.h b/src/db/db/dbEmptyRegion.h index d57a8e512..0ea403ebe 100644 --- a/src/db/db/dbEmptyRegion.h +++ b/src/db/db/dbEmptyRegion.h @@ -26,6 +26,7 @@ #include "dbCommon.h" #include "dbRegionDelegate.h" +#include "dbEmptyEdges.h" namespace db { @@ -106,6 +107,10 @@ public: virtual RegionDelegate *selected_not_interacting (const Edges &) const { return new EmptyRegion (); } virtual RegionDelegate *selected_overlapping (const Region &) const { return new EmptyRegion (); } virtual RegionDelegate *selected_not_overlapping (const Region &) const { return new EmptyRegion (); } + virtual RegionDelegate *pull_inside (const Region &) const { return new EmptyRegion (); } + virtual RegionDelegate *pull_interacting (const Region &) const { return new EmptyRegion (); } + virtual EdgesDelegate *pull_interacting (const Edges &) const { return new EmptyEdges (); } + virtual RegionDelegate *pull_overlapping (const Region &) const { return new EmptyRegion (); } virtual RegionDelegate *in (const Region &, bool) const { return new EmptyRegion (); } virtual bool has_valid_polygons () const { return true; } diff --git a/src/db/db/dbFlatEdges.h b/src/db/db/dbFlatEdges.h index e1a80f014..415a0ca54 100644 --- a/src/db/db/dbFlatEdges.h +++ b/src/db/db/dbFlatEdges.h @@ -178,6 +178,8 @@ public: } } + db::Shapes &raw_edges () { return m_edges; } + protected: virtual void merged_semantics_changed (); virtual Box compute_bbox () const; @@ -187,8 +189,6 @@ protected: private: friend class AsIfFlatEdges; - db::Shapes &raw_edges () { return m_edges; } - FlatEdges &operator= (const FlatEdges &other); bool m_is_merged; diff --git a/src/db/db/dbRegion.h b/src/db/db/dbRegion.h index 1c6e5ff37..b8f96c109 100644 --- a/src/db/db/dbRegion.h +++ b/src/db/db/dbRegion.h @@ -1355,6 +1355,46 @@ public: return Region (mp_delegate->selected_not_overlapping (other)); } + /** + * @brief Returns all polygons of "other" which are inside polygons of this region + * + * Merged semantics applies. + */ + Region pull_inside (const Region &other) const + { + return Region (mp_delegate->pull_inside (other)); + } + + /** + * @brief Returns all edges of "other" which are interacting (touching or overlapping with) polygons of this region + * + * Merged semantics applies. + */ + Edges pull_interacting (const Edges &other) const + { + return Edges (mp_delegate->pull_interacting (other)); + } + + /** + * @brief Returns all polygons of "other" which are interacting (touching or overlapping with) polygons of this region + * + * Merged semantics applies. + */ + Region pull_interacting (const Region &other) const + { + return Region (mp_delegate->pull_interacting (other)); + } + + /** + * @brief Returns all polygons of "other" which are overlapping with polygons of this region + * + * Merged semantics applies. + */ + Region pull_overlapping (const Region &other) const + { + return Region (mp_delegate->pull_overlapping (other)); + } + /** * @brief Returns the holes * diff --git a/src/db/db/dbRegionDelegate.h b/src/db/db/dbRegionDelegate.h index 8fe79edb9..5bfea5e07 100644 --- a/src/db/db/dbRegionDelegate.h +++ b/src/db/db/dbRegionDelegate.h @@ -294,6 +294,10 @@ public: virtual RegionDelegate *selected_not_interacting (const Edges &other) const = 0; virtual RegionDelegate *selected_overlapping (const Region &other) const = 0; virtual RegionDelegate *selected_not_overlapping (const Region &other) const = 0; + virtual RegionDelegate *pull_inside (const Region &other) const = 0; + virtual RegionDelegate *pull_interacting (const Region &other) const = 0; + virtual EdgesDelegate *pull_interacting (const Edges &other) const = 0; + virtual RegionDelegate *pull_overlapping (const Region &other) const = 0; virtual RegionDelegate *in (const Region &other, bool invert) const = 0; virtual const db::Polygon *nth (size_t n) const = 0; diff --git a/src/db/db/dbRegionUtils.cc b/src/db/db/dbRegionUtils.cc index 82a70313f..90afa9148 100644 --- a/src/db/db/dbRegionUtils.cc +++ b/src/db/db/dbRegionUtils.cc @@ -288,22 +288,47 @@ Poly2PolyCheckBase::enter (const db::Polygon &o1, size_t p1, const db::Polygon & // ------------------------------------------------------------------------------------- // RegionToEdgeInteractionFilterBase implementation -RegionToEdgeInteractionFilterBase::RegionToEdgeInteractionFilterBase (bool inverse) +namespace +{ + +template +struct edge_or_polygon; + +template <> +struct edge_or_polygon +{ + const db::Polygon *operator() (const db::Polygon *p, const db::Edge *) const { return p; } +}; + +template <> +struct edge_or_polygon +{ + const db::Edge *operator() (const db::Polygon *, const db::Edge *e) const { return e; } +}; + +} + +template +region_to_edge_interaction_filter_base::region_to_edge_interaction_filter_base (bool inverse) : m_inverse (inverse) { // .. nothing yet .. } +template void -RegionToEdgeInteractionFilterBase::preset (const db::Polygon *poly) +region_to_edge_interaction_filter_base::preset (const OutputType *s) { - m_seen.insert (poly); + m_seen.insert (s); } +template void -RegionToEdgeInteractionFilterBase::add (const db::Polygon *p, size_t, const db::Edge *e, size_t) +region_to_edge_interaction_filter_base::add (const db::Polygon *p, size_t, const db::Edge *e, size_t) { - if ((m_seen.find (p) == m_seen.end ()) != m_inverse) { + const OutputType *o = edge_or_polygon () (p, e); + + if ((m_seen.find (o) == m_seen.end ()) != m_inverse) { // A polygon and an edge interact if the edge is either inside completely // of at least one edge of the polygon intersects with the edge @@ -320,23 +345,28 @@ RegionToEdgeInteractionFilterBase::add (const db::Polygon *p, size_t, const db:: if (interacts) { if (m_inverse) { - m_seen.erase (p); + m_seen.erase (o); } else { - m_seen.insert (p); - put (*p); + m_seen.insert (o); + put (*o); } } } } +template void -RegionToEdgeInteractionFilterBase::fill_output () +region_to_edge_interaction_filter_base::fill_output () { - for (std::set::const_iterator p = m_seen.begin (); p != m_seen.end (); ++p) { - put (**p); + for (typename std::set::const_iterator s = m_seen.begin (); s != m_seen.end (); ++s) { + put (**s); } } +// explicit instantiations +template class region_to_edge_interaction_filter_base; +template class region_to_edge_interaction_filter_base; + } diff --git a/src/db/db/dbRegionUtils.h b/src/db/db/dbRegionUtils.h index ce847fd9e..9e082f582 100644 --- a/src/db/db/dbRegionUtils.h +++ b/src/db/db/dbRegionUtils.h @@ -481,40 +481,41 @@ public: /** * @brief A helper class for the region to edge interaction functionality */ -class DB_PUBLIC RegionToEdgeInteractionFilterBase +template +class DB_PUBLIC region_to_edge_interaction_filter_base : public db::box_scanner_receiver2 { public: - RegionToEdgeInteractionFilterBase (bool inverse); + region_to_edge_interaction_filter_base (bool inverse); - void preset (const db::Polygon *poly); + void preset (const OutputType *s); void add (const db::Polygon *p, size_t, const db::Edge *e, size_t); void fill_output (); protected: - virtual void put (const db::Polygon &poly) const = 0; + virtual void put (const OutputType &s) const = 0; private: - std::set m_seen; + std::set m_seen; bool m_inverse; }; /** * @brief A helper class for the region to edge interaction functionality */ -template +template class DB_PUBLIC_TEMPLATE region_to_edge_interaction_filter - : public RegionToEdgeInteractionFilterBase + : public region_to_edge_interaction_filter_base { public: region_to_edge_interaction_filter (OutputContainer &output, bool inverse) - : RegionToEdgeInteractionFilterBase (inverse), mp_output (&output) + : region_to_edge_interaction_filter_base (inverse), mp_output (&output) { // .. nothing yet .. } protected: - virtual void put (const db::Polygon &poly) const + virtual void put (const OutputType &poly) const { mp_output->insert (poly); } diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc index 16a5d5883..cfb6bf25c 100644 --- a/src/db/db/gsiDeclDbRegion.cc +++ b/src/db/db/gsiDeclDbRegion.cc @@ -1600,6 +1600,49 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + + method ("pull_inside", &db::Region::pull_inside, gsi::arg ("other"), + "@brief Returns all polygons of \"other\" which are inside polygons of this region\n" + "The \"pull_...\" methods are similar to \"selected_...\" but work the opposite way: they " + "select shapes from the argument region rather than self. In a deep (hierarchical) context " + "the output region will be hierarchically aligned with self, so the \"pull_...\" methods " + "provide a way for rehierarchisation.\n" + "\n" + "@return The region after the polygons have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + + method ("pull_overlapping", &db::Region::pull_overlapping, gsi::arg ("other"), + "@brief Returns all polygons of \"other\" which are overlapping polygons of this region\n" + "See \\pull_inside for a description of the \"pull_...\" methods.\n" + "\n" + "@return The region after the polygons have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + + method ("pull_interacting", static_cast (&db::Region::pull_interacting), gsi::arg ("other"), + "@brief Returns all polygons of \"other\" which are interacting with (overlapping, touching) polygons of this region\n" + "See \\pull_inside for a description of the \"pull_...\" methods.\n" + "\n" + "@return The region after the polygons have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + + method ("pull_interacting", static_cast (&db::Region::pull_interacting), gsi::arg ("other"), + "@brief Returns all edges of \"other\" which are interacting with polygons of this region\n" + "See \\pull_inside for a description of the \"pull_...\" methods.\n" + "\n" + "@return The edge collection after the edges have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + method ("is_box?", &db::Region::is_box, "@brief Returns true, if the region is a simple box\n" "\n" From a1e87d4c14f4dea8ff1a56b0ecd3c9ca97e043ab Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 1 Oct 2019 23:53:05 +0200 Subject: [PATCH 02/10] First pull* implementation functional. --- src/db/db/dbAsIfFlatRegion.h | 8 +- src/db/db/dbDeepRegion.cc | 17 +- src/db/db/dbDeepRegion.h | 59 +---- src/db/db/gsiDeclDbRegion.cc | 258 ++++++++-------------- src/drc/drc/built-in-macros/_drc_layer.rb | 75 ++++++- 5 files changed, 178 insertions(+), 239 deletions(-) diff --git a/src/db/db/dbAsIfFlatRegion.h b/src/db/db/dbAsIfFlatRegion.h index 35824d0c8..712ebb851 100644 --- a/src/db/db/dbAsIfFlatRegion.h +++ b/src/db/db/dbAsIfFlatRegion.h @@ -238,10 +238,10 @@ protected: EdgePairsDelegate *run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; - RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; - RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; - RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; - EdgesDelegate *pull_generic (const Edges &other) const; + virtual RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; + virtual RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; + virtual RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; + virtual EdgesDelegate *pull_generic (const Edges &other) const; template static void produce_markers_for_grid_check (const db::Polygon &poly, const Trans &tr, db::Coord gx, db::Coord gy, db::Shapes &shapes); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 383143703..d40612b17 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -113,6 +113,15 @@ DeepRegion::DeepRegion (const RecursiveShapeIterator &si, DeepShapeStore &dss, c set_merged_semantics (merged_semantics); } +DeepRegion::DeepRegion (const db::Region &other, DeepShapeStore &dss) + : AsIfFlatRegion (), m_merged_polygons () +{ + m_deep_layer = dss.create_from_flat (other, false); + + init (); + set_merged_semantics (other.merged_semantics ()); +} + DeepRegion::DeepRegion () : AsIfFlatRegion () { @@ -1848,6 +1857,7 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { + // @@@ turn into deep return db::AsIfFlatRegion::selected_interacting_generic (other, mode, touching, inverse); } @@ -1882,6 +1892,7 @@ DeepRegion::selected_interacting_generic (const Edges &other, bool inverse) cons const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { + // @@@ turn into deep return db::AsIfFlatRegion::selected_interacting_generic (other, inverse); } @@ -1914,9 +1925,12 @@ DeepRegion::pull_generic (const Region &other, int mode, bool touching) const // with these flag set to true, the resulting polygons are broken again. bool split_after = false; + std::auto_ptr dr_holder; const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - return db::AsIfFlatRegion::pull_generic (other, mode, touching); + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepRegion (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } ensure_merged_polygons_valid (); @@ -1947,6 +1961,7 @@ DeepRegion::pull_generic (const Edges &other) const { const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { + // @@@ see above return db::AsIfFlatRegion::pull_generic (other); } diff --git a/src/db/db/dbDeepRegion.h b/src/db/db/dbDeepRegion.h index 2f70eb2fd..4e49de744 100644 --- a/src/db/db/dbDeepRegion.h +++ b/src/db/db/dbDeepRegion.h @@ -42,6 +42,7 @@ public: typedef polygon_layer_type::iterator polygon_iterator_type; DeepRegion (); + DeepRegion (const db::Region &other, DeepShapeStore &dss); DeepRegion (const RecursiveShapeIterator &si, DeepShapeStore &dss, double area_ratio = 0.0, size_t max_vertex_count = 0); DeepRegion (const RecursiveShapeIterator &si, DeepShapeStore &dss, const db::ICplxTrans &trans, bool merged_semantics = true, double area_ratio = 0.0, size_t max_vertex_count = 0); @@ -154,56 +155,6 @@ public: virtual RegionDelegate *sized (coord_type d, unsigned int mode) const; virtual RegionDelegate *sized (coord_type dx, coord_type dy, unsigned int mode) const; - virtual RegionDelegate *selected_outside (const Region &other) const - { - return selected_interacting_generic (other, 1, false, false); - } - - virtual RegionDelegate *selected_not_outside (const Region &other) const - { - return selected_interacting_generic (other, 1, false, true); - } - - virtual RegionDelegate *selected_inside (const Region &other) const - { - return selected_interacting_generic (other, -1, true, false); - } - - virtual RegionDelegate *selected_not_inside (const Region &other) const - { - return selected_interacting_generic (other, -1, true, true); - } - - virtual RegionDelegate *selected_interacting (const Region &other) const - { - return selected_interacting_generic (other, 0, true, false); - } - - virtual RegionDelegate *selected_not_interacting (const Region &other) const - { - return selected_interacting_generic (other, 0, true, true); - } - - virtual RegionDelegate *selected_interacting (const Edges &other) const - { - return selected_interacting_generic (other, false); - } - - virtual RegionDelegate *selected_not_interacting (const Edges &other) const - { - return selected_interacting_generic (other, true); - } - - virtual RegionDelegate *selected_overlapping (const Region &other) const - { - return selected_interacting_generic (other, 0, false, false); - } - - virtual RegionDelegate *selected_not_overlapping (const Region &other) const - { - return selected_interacting_generic (other, 0, false, true); - } - virtual RegionDelegate *in (const Region &other, bool invert) const; virtual void insert_into (Layout *layout, db::cell_index_type into_cell, unsigned int into_layer) const; @@ -238,10 +189,10 @@ private: DeepLayer and_or_not_with(const DeepRegion *other, bool and_op) const; EdgePairsDelegate *run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; - RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; - RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; - RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; - EdgesDelegate *pull_generic (const Edges &other) const; + virtual RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; + virtual RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const; + virtual RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; + virtual EdgesDelegate *pull_generic (const Edges &other) const; const DeepLayer &merged_deep_layer () const { diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc index cfb6bf25c..75e81430b 100644 --- a/src/db/db/gsiDeclDbRegion.cc +++ b/src/db/db/gsiDeclDbRegion.cc @@ -611,39 +611,33 @@ Class decl_Region ("db", "Region", "\n" "This constructor creates an empty region.\n" ) + - constructor ("new", &new_a, + constructor ("new", &new_a, gsi::arg ("array"), "@brief Constructor from a polygon array\n" - "@args array\n" "\n" "This constructor creates a region from an array of polygons.\n" ) + - constructor ("new", &new_b, + constructor ("new", &new_b, gsi::arg ("box"), "@brief Box constructor\n" - "@args box\n" "\n" "This constructor creates a region from a box.\n" ) + - constructor ("new", &new_p, + constructor ("new", &new_p, gsi::arg ("polygon"), "@brief Polygon constructor\n" - "@args polygon\n" "\n" "This constructor creates a region from a polygon.\n" ) + - constructor ("new", &new_ps, + constructor ("new", &new_ps, gsi::arg ("polygon"), "@brief Simple polygon constructor\n" - "@args polygon\n" "\n" "This constructor creates a region from a simple polygon.\n" ) + - constructor ("new", &new_path, + constructor ("new", &new_path, gsi::arg ("path"), "@brief Path constructor\n" - "@args path\n" "\n" "This constructor creates a region from a path.\n" ) + - constructor ("new", &new_shapes, + constructor ("new", &new_shapes, gsi::arg ("shapes"), "@brief Shapes constructor\n" - "@args shapes\n" "\n" "This constructor creates a region from a \\Shapes collection.\n" "\n" @@ -779,9 +773,8 @@ Class decl_Region ("db", "Region", "@hide\n" "This method is provided for DRC implementation only." ) + - method ("merged_semantics=", &db::Region::set_merged_semantics, + method ("merged_semantics=", &db::Region::set_merged_semantics, gsi::arg ("f"), "@brief Enables or disables merged semantics\n" - "@args f\n" "If merged semantics is enabled (the default), coherent polygons will be considered\n" "as single regions and artificial edges such as cut-lines will not be considered.\n" "Merged semantics thus is equivalent to considering coherent areas rather than\n" @@ -791,9 +784,8 @@ Class decl_Region ("db", "Region", "@brief Gets a flag indicating whether merged semantics is enabled\n" "See \\merged_semantics= for a description of this attribute.\n" ) + - method ("strict_handling=", &db::Region::set_strict_handling, + method ("strict_handling=", &db::Region::set_strict_handling, gsi::arg ("f"), "@brief Enables or disables strict handling\n" - "@args f\n" "\n" "Strict handling means to leave away some optimizations. Specifically the \n" "output of boolean operations will be merged even if one input is empty.\n" @@ -810,9 +802,8 @@ Class decl_Region ("db", "Region", "\n" "This method has been introduced in version 0.23.2." ) + - method ("min_coherence=", &db::Region::set_min_coherence, + method ("min_coherence=", &db::Region::set_min_coherence, gsi::arg ("f"), "@brief Enable or disable minimum coherence\n" - "@args f\n" "If minimum coherence is set, the merge operations (explicit merge with \\merge or\n" "implicit merge through merged_semantics) are performed using minimum coherence mode.\n" "The coherence mode determines how kissing-corner situations are resolved. If\n" @@ -825,18 +816,16 @@ Class decl_Region ("db", "Region", "@brief Gets a flag indicating whether minimum coherence is selected\n" "See \\min_coherence= for a description of this attribute.\n" ) + - method_ext ("with_perimeter", with_perimeter1, + method_ext ("with_perimeter", with_perimeter1, gsi::arg ("perimeter"), gsi::arg ("inverse"), "@brief Filter the polygons by perimeter\n" - "@args perimeter, inverse\n" "Filters the polygons inside the region by perimeter. If \"inverse\" is false, only " "polygons which have the given perimeter are returned. If \"inverse\" is true, " "polygons not having the given perimeter are returned.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_perimeter", with_perimeter2, + method_ext ("with_perimeter", with_perimeter2, gsi::arg ("min_perimeter"), gsi::arg ("max_perimeter"), gsi::arg ("inverse"), "@brief Filter the polygons by perimeter\n" - "@args min_perimeter, max_perimeter, inverse\n" "Filters the polygons inside the region by perimeter. If \"inverse\" is false, only " "polygons which have a perimeter larger or equal to \"min_perimeter\" and less than \"max_perimeter\" are " "returned. If \"inverse\" is true, " @@ -847,18 +836,16 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_area", with_area1, + method_ext ("with_area", with_area1, gsi::arg ("area"), gsi::arg ("inverse"), "@brief Filter the polygons by area\n" - "@args area, inverse\n" "Filters the polygons inside the region by area. If \"inverse\" is false, only " "polygons which have the given area are returned. If \"inverse\" is true, " "polygons not having the given area are returned.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_area", with_area2, + method_ext ("with_area", with_area2, gsi::arg ("min_area"), gsi::arg ("max_area"), gsi::arg ("inverse"), "@brief Filter the polygons by area\n" - "@args min_area, max_area, inverse\n" "Filters the polygons inside the region by area. If \"inverse\" is false, only " "polygons which have an area larger or equal to \"min_area\" and less than \"max_area\" are " "returned. If \"inverse\" is true, " @@ -869,18 +856,16 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_width", with_bbox_width1, + method_ext ("with_bbox_width", with_bbox_width1, gsi::arg ("width"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width\n" - "@args width, inverse\n" "Filters the polygons inside the region by the width of their bounding box. If \"inverse\" is false, only " "polygons whose bounding box has the given width are returned. If \"inverse\" is true, " "polygons whose bounding box does not have the given width are returned.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_width", with_bbox_width2, + method_ext ("with_bbox_width", with_bbox_width2, gsi::arg ("min_width"), gsi::arg ("max_width"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width\n" - "@args min_width, max_width, inverse\n" "Filters the polygons inside the region by the width of their bounding box. If \"inverse\" is false, only " "polygons whose bounding box has a width larger or equal to \"min_width\" and less than \"max_width\" are " "returned. If \"inverse\" is true, all polygons not matching this criterion are returned." @@ -889,18 +874,16 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_height", with_bbox_height1, + method_ext ("with_bbox_height", with_bbox_height1, gsi::arg ("height"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box height\n" - "@args height, inverse\n" "Filters the polygons inside the region by the height of their bounding box. If \"inverse\" is false, only " "polygons whose bounding box has the given height are returned. If \"inverse\" is true, " "polygons whose bounding box does not have the given height are returned.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_height", with_bbox_height2, + method_ext ("with_bbox_height", with_bbox_height2, gsi::arg ("min_height"), gsi::arg ("max_height"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box height\n" - "@args min_height, max_height, inverse\n" "Filters the polygons inside the region by the height of their bounding box. If \"inverse\" is false, only " "polygons whose bounding box has a height larger or equal to \"min_height\" and less than \"max_height\" are " "returned. If \"inverse\" is true, all polygons not matching this criterion are returned." @@ -909,9 +892,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_min", with_bbox_min1, + method_ext ("with_bbox_min", with_bbox_min1, gsi::arg ("dim"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width or height, whichever is smaller\n" - "@args dim, inverse\n" "Filters the polygons inside the region by the minimum dimension of their bounding box. " "If \"inverse\" is false, only polygons whose bounding box's smaller dimension is equal to the given value " "are returned. " @@ -919,9 +901,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_min", with_bbox_min2, + method_ext ("with_bbox_min", with_bbox_min2, gsi::arg ("min_dim"), gsi::arg ("max_dim"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width or height, whichever is smaller\n" - "@args min_dim, max_dim, inverse\n" "Filters the polygons inside the region by the minimum dimension of their bounding box. " "If \"inverse\" is false, only polygons whose bounding box's smaller dimension is larger or equal to \"min_dim\" " "and less than \"max_dim\" are returned. " @@ -931,9 +912,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_max", with_bbox_max1, + method_ext ("with_bbox_max", with_bbox_max1, gsi::arg ("dim"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width or height, whichever is larger\n" - "@args dim, inverse\n" "Filters the polygons inside the region by the maximum dimension of their bounding box. " "If \"inverse\" is false, only polygons whose bounding box's larger dimension is equal to the given value " "are returned. " @@ -941,9 +921,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_bbox_max", with_bbox_max2, + method_ext ("with_bbox_max", with_bbox_max2, gsi::arg ("min_dim"), gsi::arg ("max_dim"), gsi::arg ("inverse"), "@brief Filter the polygons by bounding box width or height, whichever is larger\n" - "@args min_dim, max_dim, inverse\n" "Filters the polygons inside the region by the minimum dimension of their bounding box. " "If \"inverse\" is false, only polygons whose bounding box's larger dimension is larger or equal to \"min_dim\" " "and less than \"max_dim\" are returned. " @@ -959,14 +938,12 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics does not apply for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("snapped", &db::Region::snapped, + method ("snapped", &db::Region::snapped, gsi::arg ("gx"), gsi::arg ("gy"), "@brief Returns the snapped region\n" - "@args gx, gy\n" "This method will snap the region to the given grid and return the snapped region (see \\snap). The original region is not modified.\n" ) + - method ("snap", &db::Region::snap, + method ("snap", &db::Region::snap, gsi::arg ("gx"), gsi::arg ("gy"), "@brief Snaps the region to the given grid\n" - "@args gx, gy\n" "This method will snap the region to the given grid - each x or y coordinate is brought on the gx or gy grid by rounding " "to the nearest value which is a multiple of gx or gy.\n" "\n" @@ -974,9 +951,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("grid_check", &db::Region::grid_check, + method ("grid_check", &db::Region::grid_check, gsi::arg ("gx"), gsi::arg ("gy"), "@brief Returns a marker for all vertices not being on the given grid\n" - "@args gx, gy\n" "This method will return an edge pair object for every vertex whose x coordinate is not a multiple of gx or whose " "y coordinate is not a multiple of gy. The edge pair objects contain two edges consisting of the same single point - the " "original vertex.\n" @@ -985,9 +961,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_angle", angle_check1, + method_ext ("with_angle", angle_check1, gsi::arg ("angle"), gsi::arg ("inverse"), "@brief Returns markers on every corner with the given angle (or not with the given angle)\n" - "@args angle, inverse\n" "If the inverse flag is false, this method returns an error marker (an \\EdgePair object) for every corner whose connected edges " "form an angle with the given value (in degree). If the inverse flag is true, the method returns markers for every corner whose " "angle is not the given value.\n" @@ -996,9 +971,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("with_angle", angle_check2, + method_ext ("with_angle", angle_check2, gsi::arg ("amin"), gsi::arg ("amax"), gsi::arg ("inverse"), "@brief Returns markers on every corner with an angle of more than amin and less than amax (or the opposite)\n" - "@args amin, amax, inverse\n" "If the inverse flag is false, this method returns an error marker (an \\EdgePair object) for every corner whose connected edges " "form an angle whose value is more or equal to amin (in degree) or less (but not equal to) amax. If the inverse flag is true, the method returns markers for every corner whose " "angle is not matching that criterion.\n" @@ -1007,67 +981,57 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("insert", (void (db::Region::*)(const db::Box &)) &db::Region::insert, + method ("insert", (void (db::Region::*)(const db::Box &)) &db::Region::insert, gsi::arg ("box"), "@brief Inserts a box\n" - "@args box\n" "\n" "Inserts a box into the region.\n" ) + - method ("insert", (void (db::Region::*)(const db::Polygon &)) &db::Region::insert, + method ("insert", (void (db::Region::*)(const db::Polygon &)) &db::Region::insert, gsi::arg ("polygon"), "@brief Inserts a polygon\n" - "@args polygon\n" "\n" "Inserts a polygon into the region.\n" ) + - method ("insert", (void (db::Region::*)(const db::SimplePolygon &)) &db::Region::insert, + method ("insert", (void (db::Region::*)(const db::SimplePolygon &)) &db::Region::insert, gsi::arg ("polygon"), "@brief Inserts a simple polygon\n" - "@args polygon\n" "\n" "Inserts a simple polygon into the region.\n" ) + - method ("insert", (void (db::Region::*)(const db::Path &)) &db::Region::insert, + method ("insert", (void (db::Region::*)(const db::Path &)) &db::Region::insert, gsi::arg ("path"), "@brief Inserts a path\n" - "@args path\n" "\n" "Inserts a path into the region.\n" ) + - method_ext ("insert", &insert_si, + method_ext ("insert", &insert_si, gsi::arg ("shape_iterator"), "@brief Inserts all shapes delivered by the recursive shape iterator into this region\n" - "@args shape_iterator\n" "\n" "This method will insert all shapes delivered by the shape iterator and insert them into the region.\n" "Text objects and edges are not inserted, because they cannot be converted to polygons.\n" ) + - method_ext ("insert", &insert_si2, + method_ext ("insert", &insert_si2, gsi::arg ("shape_iterator"), gsi::arg ("trans"), "@brief Inserts all shapes delivered by the recursive shape iterator into this region with a transformation\n" - "@args shape_iterator, trans\n" "\n" "This method will insert all shapes delivered by the shape iterator and insert them into the region.\n" "Text objects and edges are not inserted, because they cannot be converted to polygons.\n" "This variant will apply the given transformation to the shapes. This is useful to scale the " "shapes to a specific database unit for example.\n" ) + - method_ext ("insert", &insert_a, + method_ext ("insert", &insert_a, gsi::arg ("array"), "@brief Inserts all polygons from the array into this region\n" - "@args array\n" ) + - method_ext ("insert", &insert_r, + method_ext ("insert", &insert_r, gsi::arg ("region"), "@brief Inserts all polygons from the other region into this region\n" - "@args region\n" "This method has been introduced in version 0.25." ) + - method_ext ("insert", &insert_s, + method_ext ("insert", &insert_s, gsi::arg ("shapes"), "@brief Inserts all polygons from the shape collection into this region\n" - "@args shapes\n" "This method takes each \"polygon-like\" shape from the shape collection and " "insertes this shape into the region. Paths and boxes are converted to polygons during this process. " "Edges and text objects are ignored.\n" "\n" "This method has been introduced in version 0.25." ) + - method_ext ("insert", &insert_st, + method_ext ("insert", &insert_st, gsi::arg ("shapes"), gsi::arg ("trans"), "@brief Inserts all polygons from the shape collection into this region with transformation\n" - "@args shapes\n" "This method takes each \"polygon-like\" shape from the shape collection and " "insertes this shape into the region after applying the given transformation. " "Paths and boxes are converted to polygons during this process. " @@ -1075,9 +1039,8 @@ Class decl_Region ("db", "Region", "\n" "This method has been introduced in version 0.25." ) + - method_ext ("insert", &insert_st, + method_ext ("insert", &insert_st, gsi::arg ("shapes"), gsi::arg ("trans"), "@brief Inserts all polygons from the shape collection into this region with complex transformation\n" - "@args shapes\n" "This method takes each \"polygon-like\" shape from the shape collection and " "insertes this shape into the region after applying the given complex transformation. " "Paths and boxes are converted to polygons during this process. " @@ -1093,9 +1056,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("extents", &extents1, + method_ext ("extents", &extents1, gsi::arg ("d"), "@brief Returns a region with the enlarged bounding boxes of the polygons\n" - "@args d\n" "This method will return a region consisting of the bounding boxes of the polygons enlarged by the given distance d.\n" "The enlargement is specified per edge, i.e the width and height will be increased by 2*d.\n" "The boxes will not be merged, so it is possible to determine overlaps " @@ -1103,9 +1065,8 @@ Class decl_Region ("db", "Region", "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("extents", &extents2, + method_ext ("extents", &extents2, gsi::arg ("dx"), gsi::arg ("dy"), "@brief Returns a region with the enlarged bounding boxes of the polygons\n" - "@args dx, dy\n" "This method will return a region consisting of the bounding boxes of the polygons enlarged by the given distance dx in x direction and dy in y direction.\n" "The enlargement is specified per edge, i.e the width will be increased by 2*dx.\n" "The boxes will not be merged, so it is possible to determine overlaps " @@ -1151,10 +1112,9 @@ Class decl_Region ("db", "Region", "Merging removes overlaps and joins touching polygons.\n" "If the region is already merged, this method does nothing\n" ) + - method_ext ("merge", &merge_ext1, + method_ext ("merge", &merge_ext1, gsi::arg ("min_wc"), "@brief Merge the region with options\n" "\n" - "@args min_wc\n" "@param min_wc Overlap selection\n" "@return The region after is has been merged (self).\n" "\n" @@ -1165,10 +1125,9 @@ Class decl_Region ("db", "Region", "\n" "This method is equivalent to \"merge(false, min_wc).\n" ) + - method_ext ("merge", &merge_ext2, + method_ext ("merge", &merge_ext2, gsi::arg ("min_coherence"), gsi::arg ("min_wc"), "@brief Merge the region with options\n" "\n" - "@args min_coherence, min_wc\n" "@param min_coherence A flag indicating whether the resulting polygons shall have minimum coherence\n" "@param min_wc Overlap selection\n" "@return The region after is has been merged (self).\n" @@ -1188,9 +1147,8 @@ Class decl_Region ("db", "Region", "If the region is already merged, this method does nothing.\n" "In contrast to \\merge, this method does not modify the region but returns a merged copy.\n" ) + - method_ext ("merged", &merged_ext1, + method_ext ("merged", &merged_ext1, gsi::arg ("min_wc"), "@brief Returns the merged region (with options)\n" - "@args min_wc\n" "\n" "@return The region after is has been merged.\n" "\n" @@ -1202,10 +1160,9 @@ Class decl_Region ("db", "Region", "\n" "In contrast to \\merge, this method does not modify the region but returns a merged copy.\n" ) + - method_ext ("merged", &merged_ext2, + method_ext ("merged", &merged_ext2, gsi::arg ("min_coherence"), gsi::arg ("min_wc"), "@brief Returns the merged region (with options)\n" "\n" - "@args min_coherence, min_wc\n" "@param min_coherence A flag indicating whether the resulting polygons shall have minimum coherence\n" "@param min_wc Overlap selection\n" "@return The region after is has been merged (self).\n" @@ -1218,9 +1175,8 @@ Class decl_Region ("db", "Region", "\n" "In contrast to \\merge, this method does not modify the region but returns a merged copy.\n" ) + - method ("round_corners", &db::Region::round_corners, + method ("round_corners", &db::Region::round_corners, gsi::arg ("r_inner"), gsi::arg ("r_outer"), gsi::arg ("n"), "@brief Corner rounding\n" - "@args r_inner, r_outer, n\n" "@param r_inner Inner corner radius (in database units)\n" "@param r_outer Outer corner radius (in database units)\n" "@param n The number of points per circle\n" @@ -1232,9 +1188,8 @@ Class decl_Region ("db", "Region", "This method modifies the region. \\rounded_corners is a method that does the same but returns a new " "region without modifying self. Merged semantics applies for this method.\n" ) + - method ("rounded_corners", &db::Region::rounded_corners, + method ("rounded_corners", &db::Region::rounded_corners, gsi::arg ("r_inner"), gsi::arg ("r_outer"), gsi::arg ("n"), "@brief Corner rounding\n" - "@args r_inner, r_outer, n\n" "@param r_inner Inner corner radius (in database units)\n" "@param r_outer Outer corner radius (in database units)\n" "@param n The number of points per circle\n" @@ -1242,9 +1197,8 @@ Class decl_Region ("db", "Region", "See \\round_corners for a description of this method. This version returns a new region instead of " "modifying self (out-of-place)." ) + - method ("smooth", &db::Region::smooth, + method ("smooth", &db::Region::smooth, gsi::arg ("d"), "@brief Smoothing\n" - "@args d\n" "@param d The smoothing tolerance (in database units)\n" "\n" "This method will simplify the merged polygons of the region by removing vertexes if the " @@ -1254,18 +1208,16 @@ Class decl_Region ("db", "Region", "This method modifies the region. \\smoothed is a method that does the same but returns a new " "region without modifying self. Merged semantics applies for this method.\n" ) + - method ("smoothed", &db::Region::smoothed, + method ("smoothed", &db::Region::smoothed, gsi::arg ("d"), "@brief Smoothing\n" - "@args d\n" "@param d The smoothing tolerance (in database units)\n" "\n" "See \\smooth for a description of this method. This version returns a new region instead of " "modifying self (out-of-place). It has been introduced in version 0.25." ) + - method ("size", (db::Region & (db::Region::*) (db::Coord, db::Coord, unsigned int)) &db::Region::size, + method ("size", (db::Region & (db::Region::*) (db::Coord, db::Coord, unsigned int)) &db::Region::size, gsi::arg ("dx"), gsi::arg ("dy"), gsi::arg ("mode"), "@brief Anisotropic sizing (biasing)\n" "\n" - "@args dx, dy, mode\n" "@return The region after the sizing has applied (self)\n" "\n" "Shifts the contour outwards (dx,dy>0) or inwards (dx,dy<0).\n" @@ -1292,310 +1244,275 @@ Class decl_Region ("db", "Region", "# r now is (50,-50;50,100;100,100;100,-50)\n" "@/code\n" ) + - method ("size", (db::Region & (db::Region::*) (db::Coord, unsigned int)) &db::Region::size, + method ("size", (db::Region & (db::Region::*) (db::Coord, unsigned int)) &db::Region::size, gsi::arg ("d"), gsi::arg ("mode"), "@brief Isotropic sizing (biasing)\n" "\n" - "@args d, mode\n" "@return The region after the sizing has applied (self)\n" "\n" "This method is equivalent to \"size(d, d, mode)\".\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("size", size_ext, + method_ext ("size", size_ext, gsi::arg ("d"), "@brief Isotropic sizing (biasing)\n" "\n" - "@args d, mode\n" "@return The region after the sizing has applied (self)\n" "\n" "This method is equivalent to \"size(d, d, 2)\".\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("sized", (db::Region (db::Region::*) (db::Coord, db::Coord, unsigned int) const) &db::Region::sized, + method ("sized", (db::Region (db::Region::*) (db::Coord, db::Coord, unsigned int) const) &db::Region::sized, gsi::arg ("dx"), gsi::arg ("dy"), gsi::arg ("mode"), "@brief Returns the anisotropically sized region\n" "\n" - "@args dx, dy, mode\n" "@return The sized region\n" "\n" "This method is returns the sized region (see \\size), but does not modify self.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("sized", (db::Region (db::Region::*) (db::Coord, unsigned int) const) &db::Region::sized, + method ("sized", (db::Region (db::Region::*) (db::Coord, unsigned int) const) &db::Region::sized, gsi::arg ("d"), gsi::arg ("mode"), "@brief Returns the isotropically sized region\n" "\n" - "@args d, mode\n" "@return The sized region\n" "\n" "This method is returns the sized region (see \\size), but does not modify self.\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method_ext ("sized", sized_ext, + method_ext ("sized", sized_ext, gsi::arg ("d"), "@brief Isotropic sizing (biasing)\n" "\n" - "@args d, mode\n" "@return The region after the sizing has applied (self)\n" "\n" "This method is equivalent to \"sized(d, d, 2)\".\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("&", &db::Region::operator&, + method ("&", &db::Region::operator&, gsi::arg ("other"), "@brief Returns the boolean AND between self and the other region\n" "\n" - "@args other\n" "@return The result of the boolean AND operation\n" "\n" "This method will compute the boolean AND (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("&=", &db::Region::operator&=, + method ("&=", &db::Region::operator&=, gsi::arg ("other"), "@brief Performs the boolean AND between self and the other region\n" "\n" - "@args other\n" "@return The region after modification (self)\n" "\n" "This method will compute the boolean AND (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("-", &db::Region::operator-, + method ("-", &db::Region::operator-, gsi::arg ("other"), "@brief Returns the boolean NOT between self and the other region\n" "\n" - "@args other\n" "@return The result of the boolean NOT operation\n" "\n" "This method will compute the boolean NOT (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("-=", &db::Region::operator-=, + method ("-=", &db::Region::operator-=, gsi::arg ("other"), "@brief Performs the boolean NOT between self and the other region\n" "\n" - "@args other\n" "@return The region after modification (self)\n" "\n" "This method will compute the boolean NOT (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("^", &db::Region::operator^, + method ("^", &db::Region::operator^, gsi::arg ("other"), "@brief Returns the boolean NOT between self and the other region\n" "\n" - "@args other\n" "@return The result of the boolean XOR operation\n" "\n" "This method will compute the boolean XOR (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("^=", &db::Region::operator^=, + method ("^=", &db::Region::operator^=, gsi::arg ("other"), "@brief Performs the boolean XOR between self and the other region\n" "\n" - "@args other\n" "@return The region after modification (self)\n" "\n" "This method will compute the boolean XOR (intersection) between two regions. " "The result is often but not necessarily always merged.\n" ) + - method ("\\|", &db::Region::operator|, + method ("\\|", &db::Region::operator|, gsi::arg ("other"), "@brief Returns the boolean OR between self and the other region\n" "\n" - "@args other\n" "@return The resulting region\n" "\n" "The boolean OR is implemented by merging the polygons of both regions. To simply join the regions " "without merging, the + operator is more efficient." ) + - method ("\\|=", &db::Region::operator|=, + method ("\\|=", &db::Region::operator|=, gsi::arg ("other"), "@brief Performs the boolean OR between self and the other region\n" "\n" - "@args other\n" "@return The region after modification (self)\n" "\n" "The boolean OR is implemented by merging the polygons of both regions. To simply join the regions " "without merging, the + operator is more efficient." ) + - method ("+", &db::Region::operator+, + method ("+", &db::Region::operator+, gsi::arg ("other"), "@brief Returns the combined region of self and the other region\n" "\n" - "@args other\n" "@return The resulting region\n" "\n" "This operator adds the polygons of the other region to self and returns a new combined region. " "This usually creates unmerged regions and polygons may overlap. Use \\merge if you want to ensure the result region is merged.\n" ) + - method ("+=", &db::Region::operator+=, + method ("+=", &db::Region::operator+=, gsi::arg ("other"), "@brief Adds the polygons of the other region to self\n" "\n" - "@args other\n" "@return The region after modification (self)\n" "\n" "This operator adds the polygons of the other region to self. " "This usually creates unmerged regions and polygons may overlap. Use \\merge if you want to ensure the result region is merged.\n" ) + - method ("inside", &db::Region::selected_inside, + method ("inside", &db::Region::selected_inside, gsi::arg ("other"), "@brief Returns the polygons of this region which are completely inside polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons which are inside polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("not_inside", &db::Region::selected_not_inside, + method ("not_inside", &db::Region::selected_not_inside, gsi::arg ("other"), "@brief Returns the polygons of this region which are not completely inside polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons which are not inside polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_inside", &db::Region::select_inside, + method ("select_inside", &db::Region::select_inside, gsi::arg ("other"), "@brief Selects the polygons of this region which are completely inside polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_not_inside", &db::Region::select_not_inside, + method ("select_not_inside", &db::Region::select_not_inside, gsi::arg ("other"), "@brief Selects the polygons of this region which are not completely inside polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("outside", &db::Region::selected_outside, + method ("outside", &db::Region::selected_outside, gsi::arg ("other"), "@brief Returns the polygons of this region which are completely outside polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons which are outside polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("not_outside", &db::Region::selected_not_outside, + method ("not_outside", &db::Region::selected_not_outside, gsi::arg ("other"), "@brief Returns the polygons of this region which are not completely outside polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons which are not outside polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_outside", &db::Region::select_outside, + method ("select_outside", &db::Region::select_outside, gsi::arg ("other"), "@brief Selects the polygons of this region which are completely outside polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_not_outside", &db::Region::select_not_outside, + method ("select_not_outside", &db::Region::select_not_outside, gsi::arg ("other"), "@brief Selects the polygons of this region which are not completely outside polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("interacting", (db::Region (db::Region::*) (const db::Region &) const) &db::Region::selected_interacting, + method ("interacting", (db::Region (db::Region::*) (const db::Region &) const) &db::Region::selected_interacting, gsi::arg ("other"), "@brief Returns the polygons of this region which overlap or touch polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons overlapping or touching polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("not_interacting", (db::Region (db::Region::*) (const db::Region &) const) &db::Region::selected_not_interacting, + method ("not_interacting", (db::Region (db::Region::*) (const db::Region &) const) &db::Region::selected_not_interacting, gsi::arg ("other"), "@brief Returns the polygons of this region which do not overlap or touch polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons not overlapping or touching polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_interacting", (db::Region &(db::Region::*) (const db::Region &)) &db::Region::select_interacting, + method ("select_interacting", (db::Region &(db::Region::*) (const db::Region &)) &db::Region::select_interacting, gsi::arg ("other"), "@brief Selects the polygons from this region which overlap or touch polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_not_interacting", (db::Region &(db::Region::*) (const db::Region &)) &db::Region::select_not_interacting, + method ("select_not_interacting", (db::Region &(db::Region::*) (const db::Region &)) &db::Region::select_not_interacting, gsi::arg ("other"), "@brief Selects the polygons from this region which do not overlap or touch polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("interacting", (db::Region (db::Region::*) (const db::Edges &) const) &db::Region::selected_interacting, + method ("interacting", (db::Region (db::Region::*) (const db::Edges &) const) &db::Region::selected_interacting, gsi::arg ("other"), "@brief Returns the polygons of this region which overlap or touch edges from the edge collection\n" "\n" - "@args other\n" "@return A new region containing the polygons overlapping or touching edges from the edge collection\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" "\n" "This method has been introduced in version 0.25\n" ) + - method ("not_interacting", (db::Region (db::Region::*) (const db::Edges &) const) &db::Region::selected_not_interacting, + method ("not_interacting", (db::Region (db::Region::*) (const db::Edges &) const) &db::Region::selected_not_interacting, gsi::arg ("other"), "@brief Returns the polygons of this region which do not overlap or touch edges from the edge collection\n" "\n" - "@args other\n" "@return A new region containing the polygons not overlapping or touching edges from the edge collection\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" "\n" "This method has been introduced in version 0.25\n" ) + - method ("select_interacting", (db::Region &(db::Region::*) (const db::Edges &)) &db::Region::select_interacting, + method ("select_interacting", (db::Region &(db::Region::*) (const db::Edges &)) &db::Region::select_interacting, gsi::arg ("other"), "@brief Selects the polygons from this region which overlap or touch edges from the edge collection\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" "\n" "This method has been introduced in version 0.25\n" ) + - method ("select_not_interacting", (db::Region &(db::Region::*) (const db::Edges &)) &db::Region::select_not_interacting, + method ("select_not_interacting", (db::Region &(db::Region::*) (const db::Edges &)) &db::Region::select_not_interacting, gsi::arg ("other"), "@brief Selects the polygons from this region which do not overlap or touch edges from the edge collection\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" "\n" "This method has been introduced in version 0.25\n" ) + - method ("overlapping", &db::Region::selected_overlapping, + method ("overlapping", &db::Region::selected_overlapping, gsi::arg ("other"), "@brief Returns the polygons of this region which overlap polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons overlapping polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("not_overlapping", &db::Region::selected_not_overlapping, + method ("not_overlapping", &db::Region::selected_not_overlapping, gsi::arg ("other"), "@brief Returns the polygons of this region which do not overlap polygons from the other region\n" "\n" - "@args other\n" "@return A new region containing the polygons not overlapping polygons from the other region\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_overlapping", &db::Region::select_overlapping, + method ("select_overlapping", &db::Region::select_overlapping, gsi::arg ("other"), "@brief Selects the polygons from this region which overlap polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" ) + - method ("select_not_overlapping", &db::Region::select_not_overlapping, + method ("select_not_overlapping", &db::Region::select_not_overlapping, gsi::arg ("other"), "@brief Selects the polygons from this region which do not overlap polygons from the other region\n" "\n" - "@args other\n" "@return The region after the polygons have been selected (self)\n" "\n" "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" @@ -1695,9 +1612,8 @@ Class decl_Region ("db", "Region", method ("clear", &db::Region::clear, "@brief Clears the region\n" ) + - method ("swap", &db::Region::swap, + method ("swap", &db::Region::swap, gsi::arg ("other"), "@brief Swap the contents of this region with the contents of another region\n" - "@args other\n" "This method is useful to avoid excessive memory allocation in some cases. " "For managed memory languages such as Ruby, those cases will be rare. " ) + @@ -1719,15 +1635,13 @@ Class decl_Region ("db", "Region", "are taken from a hole-less representation (i.e. GDS2 file). Use explicit merge (\\merge method) " "in order to merge the polygons and detect holes.\n" ) + - method_ext ("members_of|#in", &in, + method_ext ("members_of|#in", &in, gsi::arg ("other"), "@brief Returns all polygons which are members of the other region\n" - "@args other\n" "This method returns all polygons in self which can be found in the other region as well with exactly the same " "geometry." ) + - method_ext ("not_members_of|#not_in", ¬_in, + method_ext ("not_members_of|#not_in", ¬_in, gsi::arg ("other"), "@brief Returns all polygons which are not members of the other region\n" - "@args other\n" "This method returns all polygons in self which can not be found in the other region with exactly the same " "geometry." ) + diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index afaabe2ba..4b5085a04 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -1287,7 +1287,7 @@ CODE # @brief Selects shapes or regions of self which overlap shapes from the other region # @synopsis layer.overlapping(other) # This method selects all shapes or regions from self which overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It returns a new layer containing the selected shapes. A version which modifies self # is \select_overlapping. @@ -1308,7 +1308,7 @@ CODE # @brief Selects shapes or regions of self which do not overlap shapes from the other region # @synopsis layer.not_overlapping(other) # This method selects all shapes or regions from self which do not overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # # The "not_overlapping" method is equivalent to the \outside method. It is provided @@ -1324,7 +1324,7 @@ CODE # @brief Selects shapes or regions of self which overlap shapes from the other region # @synopsis layer.select_overlapping(other) # This method selects all shapes or regions from self which overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It modifies self to contain the selected shapes. A version which does not modify self # is \overlapping. @@ -1337,7 +1337,7 @@ CODE # @brief Selects shapes or regions of self which do not overlap shapes from the other region # @synopsis layer.select_not_overlapping(other) # This method selects all shapes or regions from self which do not overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It modifies self to contain the selected shapes. A version which does not modify self # is \not_overlapping. @@ -1538,7 +1538,7 @@ CODE # @brief Selects shapes or regions of self which touch or overlap shapes from the other region # @synopsis layer.interacting(other) # This method selects all shapes or regions from self which touch or overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It returns a new layer containing the selected shapes. A version which modifies self # is \select_interacting. @@ -1559,7 +1559,7 @@ CODE # @brief Selects shapes or regions of self which do not touch or overlap shapes from the other region # @synopsis layer.not_interacting(other) # This method selects all shapes or regions from self which do not touch or overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It returns a new layer containing the selected shapes. A version which modifies self # is \select_not_interacting. @@ -1580,7 +1580,7 @@ CODE # @brief Selects shapes or regions of self which touch or overlap shapes from the other region # @synopsis layer.select_interacting(other) # This method selects all shapes or regions from self which touch or overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It modifies self to contain the selected shapes. A version which does not modify self # is \interacting. @@ -1593,7 +1593,7 @@ CODE # @brief Selects shapes or regions of self which do not touch or overlap shapes from the other region # @synopsis layer.select_interacting(other) # This method selects all shapes or regions from self which do not touch or overlap shapes from the other - # region. If self is in raw mode (see \raw), coherent regions are selected from self, + # region. Unless self is in raw mode (see \raw), coherent regions are selected from self, # otherwise individual shapes are selected. # It modifies self to contain the selected shapes. A version which does not modify self # is \not_interacting. @@ -1633,6 +1633,65 @@ CODE # @/tr # @/table + # %DRC% + # @name pull_interacting + # @brief Selects shapes or edges of other which touch or overlap shapes from the this region + # @synopsis layer.pull_interacting(other) + # This method selects all shapes or regions from other which touch or overlap shapes from this + # region. Unless other is in raw mode (see \raw), coherent regions are selected from other, + # otherwise individual shapes are selected. + # + # The functionality is similar to select_interacting, but chosing shapes from other rather + # than from self. Because in deep mode the hierarchy reference comes from self, this method + # provides a way to pull shapes from other to the hierarchy to self. + # + # This method will neither modify self nor other. + # + # This method is available for polygon layers. Other can be an edge or polygon layer. + # Edges or polygons can be selected with respect to polygons of self. + + # %DRC% + # @name pull_overlapping + # @brief Selects shapes or regions of other which overlap shapes from the this region + # @synopsis layer.pull_overlapping(other) + # This method selects all shapes or regions from other which overlap shapes from this + # region. Unless other is in raw mode (see \raw), coherent regions are selected from other, + # otherwise individual shapes are selected. + # + # The functionality is similar to select_overlapping, but chosing shapes from other rather + # than from self. Because in deep mode the hierarchy reference comes from self, this method + # provides a way to pull shapes from other to the hierarchy to self. + # + # This method is available for polygon layers. Other needs to be a polygon layer too. + + # %DRC% + # @name pull_inside + # @brief Selects shapes or regions of other which are inside polygons from the this region + # @synopsis layer.pull_inside(other) + # This method selects all shapes or regions from other which are inside polygons from this + # region. Unless other is in raw mode (see \raw), coherent regions are selected from other, + # otherwise individual shapes are selected. + # + # The functionality is similar to select_inside, but chosing shapes from other rather + # than from self. Because in deep mode the hierarchy reference comes from self, this method + # provides a way to pull shapes from other to the hierarchy to self. + # + # This method is available for polygon layers. Other needs to be a polygon layer too. + + %w(pull_interacting pull_overlapping pull_inside).each do |f| + eval <<"CODE" + def #{f}(other) + requires_region("#{f}") + if :#{f} != :pull_interacting + requires_same_type(other, "#{f}") + else + other.requires_edges_or_region("#{f}") + end + DRCLayer::new(@engine, @engine._tcmd(@data, 0, @data.class, :#{f}, other.data)) + end +CODE + end + %w(& | ^ - + interacting not_interacting overlapping not_overlapping inside not_inside outside not_outside in not_in).each do |f| eval <<"CODE" def #{f}(other) From 77c8ff50ed199ee1052cf6a7ce77a5ebb0aa4372 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 2 Oct 2019 00:12:04 +0200 Subject: [PATCH 03/10] WIP: don't fallback to flat in case of non-deep other arguments in select_interacting and pull. --- src/db/db/dbDeepEdges.cc | 9 +++++++++ src/db/db/dbDeepEdges.h | 1 + src/db/db/dbDeepRegion.cc | 18 ++++++++++++------ src/db/db/dbDeepShapeStore.cc | 30 ++++++++++++++++++++++++++++++ src/db/db/dbDeepShapeStore.h | 12 ++++++++++++ 5 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index 081ac4c99..61a88d447 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -108,6 +108,15 @@ DeepEdges::DeepEdges (const RecursiveShapeIterator &si, DeepShapeStore &dss, con set_merged_semantics (merged_semantics); } +DeepEdges::DeepEdges (const db::Edges &other, DeepShapeStore &dss) + : AsIfFlatEdges (), m_merged_edges () +{ + m_deep_layer = dss.create_from_flat (other); + + init (); + set_merged_semantics (other.merged_semantics ()); +} + DeepEdges::DeepEdges () : AsIfFlatEdges () { diff --git a/src/db/db/dbDeepEdges.h b/src/db/db/dbDeepEdges.h index a114d7e66..dd70bd590 100644 --- a/src/db/db/dbDeepEdges.h +++ b/src/db/db/dbDeepEdges.h @@ -43,6 +43,7 @@ class DB_PUBLIC DeepEdges { public: DeepEdges (); + DeepEdges (const db::Edges &other, DeepShapeStore &dss); DeepEdges (const RecursiveShapeIterator &si, DeepShapeStore &dss, bool as_edges = true); DeepEdges (const RecursiveShapeIterator &si, DeepShapeStore &dss, const db::ICplxTrans &trans, bool as_edges = true, bool merged_semantics = true); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index d40612b17..2eb962283 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -1855,10 +1855,12 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to // with these flag set to true, the resulting polygons are broken again. bool split_after = false; + std::auto_ptr dr_holder; const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - // @@@ turn into deep - return db::AsIfFlatRegion::selected_interacting_generic (other, mode, touching, inverse); + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepRegion (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } ensure_merged_polygons_valid (); @@ -1890,10 +1892,12 @@ DeepRegion::selected_interacting_generic (const Edges &other, bool inverse) cons // with these flag set to true, the resulting polygons are broken again. bool split_after = false; + std::auto_ptr dr_holder; const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - // @@@ turn into deep - return db::AsIfFlatRegion::selected_interacting_generic (other, inverse); + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepEdges (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } ensure_merged_polygons_valid (); @@ -1959,10 +1963,12 @@ DeepRegion::pull_generic (const Region &other, int mode, bool touching) const EdgesDelegate * DeepRegion::pull_generic (const Edges &other) const { + std::auto_ptr dr_holder; const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - // @@@ see above - return db::AsIfFlatRegion::pull_generic (other); + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepEdges (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } ensure_merged_polygons_valid (); diff --git a/src/db/db/dbDeepShapeStore.cc b/src/db/db/dbDeepShapeStore.cc index 7fa787440..db8ce5d01 100644 --- a/src/db/db/dbDeepShapeStore.cc +++ b/src/db/db/dbDeepShapeStore.cc @@ -326,6 +326,36 @@ DeepLayer DeepShapeStore::create_from_flat (const db::Region ®ion, bool for_n return dl; } +DeepLayer DeepShapeStore::create_from_flat (const db::Edges &edges, const db::ICplxTrans &trans) +{ + // reuse existing layer + std::pair lff = layer_for_flat (tl::id_of (edges.delegate ())); + if (lff.first) { + return lff.second; + } + + require_singular (); + + unsigned int layer = layout ().insert_layer (); + + db::Shapes *shapes = &initial_cell ().shapes (layer); + db::Box world = db::Box::world (); + + db::EdgeBuildingHierarchyBuilderShapeReceiver eb (false); + + std::pair ii = edges.begin_iter (); + db::ICplxTrans ttop = trans * ii.second; + while (! ii.first.at_end ()) { + eb.push (*ii.first, ttop * ii.first.trans (), world, 0, shapes); + ++ii.first; + } + + DeepLayer dl (this, 0 /*singular layout index*/, layer); + m_layers_for_flat [tl::id_of (edges.delegate ())] = std::make_pair (dl.layout_index (), dl.layer ()); + m_flat_region_id [std::make_pair (dl.layout_index (), dl.layer ())] = tl::id_of (edges.delegate ()); + return dl; +} + std::pair DeepShapeStore::layer_for_flat (const db::Region ®ion) const { return layer_for_flat (tl::id_of (region.delegate ())); diff --git a/src/db/db/dbDeepShapeStore.h b/src/db/db/dbDeepShapeStore.h index 79c5c7495..0a5404f35 100644 --- a/src/db/db/dbDeepShapeStore.h +++ b/src/db/db/dbDeepShapeStore.h @@ -41,6 +41,7 @@ namespace db { class DeepShapeStore; class Region; +class Edges; /** * @brief Represents a shape collection from the deep shape store @@ -274,6 +275,17 @@ public: */ DeepLayer create_from_flat (const db::Region ®ion, bool for_netlist, double max_area_ratio = 0.0, size_t max_vertex_count = 0, const db::ICplxTrans &trans = db::ICplxTrans ()); + /** + * @brief Creates a new layer from a flat edge collection (or the edge collection is made flat) + * + * This method is intended for use with singular-created DSS objects (see + * singular constructor). + * + * After a flat layer has been created for a region, it can be retrieved + * from the region later with layer_for_flat (region). + */ + DeepLayer create_from_flat (const db::Edges ®ion, const db::ICplxTrans &trans = db::ICplxTrans ()); + /** * @brief Gets the layer for a given flat region. * From 76b8bd327934fe2cb102ed34f2841f0bd69d7019 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 3 Oct 2019 01:46:49 +0200 Subject: [PATCH 04/10] Fixed several issues with raw mode/merged semantics and many Region and Edges methods. Added edge/edge pull and edge/polygon pull. --- src/db/db/dbAsIfFlatEdges.cc | 173 ++++++++++----- src/db/db/dbAsIfFlatEdges.h | 4 + src/db/db/dbAsIfFlatRegion.cc | 10 +- src/db/db/dbDeepEdges.cc | 282 +++++++++++++++++++------ src/db/db/dbDeepEdges.h | 12 +- src/db/db/dbDeepRegion.cc | 209 +++++++++--------- src/db/db/dbDeepRegion.h | 6 +- src/db/db/dbEdges.cc | 5 + src/db/db/dbEdges.h | 19 ++ src/db/db/dbEdgesDelegate.h | 2 + src/db/db/dbEdgesUtils.h | 14 +- src/db/db/dbEmptyEdges.cc | 6 + src/db/db/dbEmptyEdges.h | 2 + src/db/db/dbFlatEdges.h | 2 + src/db/db/dbFlatRegion.h | 1 + src/db/db/dbHierProcessor.cc | 1 + src/db/db/dbRegionUtils.cc | 24 +-- src/db/db/gsiDeclDbEdges.cc | 30 +++ src/db/db/gsiDeclDbRegion.cc | 2 +- src/db/unit_tests/dbDeepRegionTests.cc | 60 ++++++ src/db/unit_tests/dbRegion.cc | 54 ++++- src/tl/tl/tl.pro | 3 +- src/tl/tl/tlSelect.h | 58 +++++ 23 files changed, 717 insertions(+), 262 deletions(-) create mode 100644 src/tl/tl/tlSelect.h diff --git a/src/db/db/dbAsIfFlatEdges.cc b/src/db/db/dbAsIfFlatEdges.cc index e3d1edba8..203a89e9f 100644 --- a/src/db/db/dbAsIfFlatEdges.cc +++ b/src/db/db/dbAsIfFlatEdges.cc @@ -32,6 +32,7 @@ #include "dbBoxConvert.h" #include "dbRegion.h" #include "dbFlatRegion.h" +#include "dbEmptyRegion.h" #include "dbPolygonTools.h" #include "dbShapeProcessor.h" #include "dbEdgeProcessor.h" @@ -123,6 +124,125 @@ AsIfFlatEdges::selected_interacting_generic (const Region &other, bool inverse) return output.release (); } +EdgesDelegate * +AsIfFlatEdges::selected_interacting_generic (const Edges &edges, bool inverse) const +{ + db::box_scanner scanner (report_progress (), progress_desc ()); + + AddressableEdgeDelivery e (begin_merged (), has_valid_merged_edges ()); + + for ( ; ! e.at_end (); ++e) { + scanner.insert (e.operator-> (), 0); + } + + AddressableEdgeDelivery ee = edges.addressable_edges (); + + for ( ; ! ee.at_end (); ++ee) { + scanner.insert (ee.operator-> (), 1); + } + + std::auto_ptr output (new FlatEdges (true)); + + if (! inverse) { + + edge_interaction_filter filter (*output); + scanner.process (filter, 1, db::box_convert ()); + + } else { + + std::set interacting; + edge_interaction_filter > filter (interacting); + scanner.process (filter, 1, db::box_convert ()); + + for (EdgesIterator o (begin_merged ()); ! o.at_end (); ++o) { + if (interacting.find (*o) == interacting.end ()) { + output->insert (*o); + } + } + + } + + return output.release (); +} + +EdgesDelegate * +AsIfFlatEdges::pull_generic (const Edges &edges) const +{ + db::box_scanner scanner (report_progress (), progress_desc ()); + + AddressableEdgeDelivery e (begin (), true); + + for ( ; ! e.at_end (); ++e) { + scanner.insert (e.operator-> (), 1); + } + + AddressableEdgeDelivery ee = edges.addressable_merged_edges (); + + for ( ; ! ee.at_end (); ++ee) { + scanner.insert (ee.operator-> (), 0); + } + + std::auto_ptr output (new FlatEdges (true)); + edge_interaction_filter filter (*output); + scanner.process (filter, 1, db::box_convert ()); + + return output.release (); +} + +RegionDelegate * +AsIfFlatEdges::pull_generic (const Region &other) const +{ + // shortcuts + if (other.empty () || empty ()) { + return new EmptyRegion (); + } + + db::box_scanner2 scanner (report_progress (), progress_desc ()); + + AddressableEdgeDelivery e (begin (), true); + + for ( ; ! e.at_end (); ++e) { + scanner.insert1 (e.operator-> (), 0); + } + + AddressablePolygonDelivery p = other.addressable_merged_polygons (); + + for ( ; ! p.at_end (); ++p) { + scanner.insert2 (p.operator-> (), 1); + } + + std::auto_ptr output (new FlatRegion (true)); + + edge_to_region_interaction_filter filter (*output); + scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + + return output.release (); +} + +EdgesDelegate * +AsIfFlatEdges::pull_interacting (const Edges &other) const +{ + return pull_generic (other); +} + +RegionDelegate * +AsIfFlatEdges::pull_interacting (const Region &other) const +{ + return pull_generic (other); +} + +EdgesDelegate * +AsIfFlatEdges::selected_interacting (const Edges &other) const +{ + return selected_interacting_generic (other, false); +} + +EdgesDelegate * +AsIfFlatEdges::selected_not_interacting (const Edges &other) const +{ + return selected_interacting_generic (other, true); +} + EdgesDelegate * AsIfFlatEdges::selected_interacting (const Region &other) const { @@ -195,59 +315,6 @@ AsIfFlatEdges::extended (coord_type ext_b, coord_type ext_e, coord_type ext_o, c } } -EdgesDelegate * -AsIfFlatEdges::selected_interacting_generic (const Edges &edges, bool inverse) const -{ - db::box_scanner scanner (report_progress (), progress_desc ()); - - AddressableEdgeDelivery e (begin_merged (), has_valid_merged_edges ()); - - for ( ; ! e.at_end (); ++e) { - scanner.insert (e.operator-> (), 0); - } - - AddressableEdgeDelivery ee = edges.addressable_edges (); - - for ( ; ! ee.at_end (); ++ee) { - scanner.insert (ee.operator-> (), 1); - } - - std::auto_ptr output (new FlatEdges (true)); - - if (! inverse) { - - edge_interaction_filter filter (*output); - scanner.process (filter, 1, db::box_convert ()); - - } else { - - std::set interacting; - edge_interaction_filter > filter (interacting); - scanner.process (filter, 1, db::box_convert ()); - - for (EdgesIterator o (begin_merged ()); ! o.at_end (); ++o) { - if (interacting.find (*o) == interacting.end ()) { - output->insert (*o); - } - } - - } - - return output.release (); -} - -EdgesDelegate * -AsIfFlatEdges::selected_interacting (const Edges &other) const -{ - return selected_interacting_generic (other, false); -} - -EdgesDelegate * -AsIfFlatEdges::selected_not_interacting (const Edges &other) const -{ - return selected_interacting_generic (other, true); -} - EdgesDelegate * AsIfFlatEdges::in (const Edges &other, bool invert) const { diff --git a/src/db/db/dbAsIfFlatEdges.h b/src/db/db/dbAsIfFlatEdges.h index ffc1150b7..c47cf8409 100644 --- a/src/db/db/dbAsIfFlatEdges.h +++ b/src/db/db/dbAsIfFlatEdges.h @@ -157,6 +157,8 @@ public: virtual RegionDelegate *extended (coord_type ext_b, coord_type ext_e, coord_type ext_o, coord_type ext_i, bool join) const; + virtual EdgesDelegate *pull_interacting (const Edges &) const; + virtual RegionDelegate *pull_interacting (const Region &) const; virtual EdgesDelegate *selected_interacting (const Edges &) const; virtual EdgesDelegate *selected_not_interacting (const Edges &) const; virtual EdgesDelegate *selected_interacting (const Region &) const; @@ -173,6 +175,8 @@ protected: void update_bbox (const db::Box &box); void invalidate_bbox (); EdgePairsDelegate *run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; + virtual EdgesDelegate *pull_generic (const Edges &edges) const; + virtual RegionDelegate *pull_generic (const Region ®ion) const; virtual EdgesDelegate *selected_interacting_generic (const Edges &edges, bool inverse) const; virtual EdgesDelegate *selected_interacting_generic (const Region ®ion, bool inverse) const; diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index a80066242..0b8682b67 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -440,13 +440,13 @@ AsIfFlatRegion::pull_generic (const Edges &other) const std::auto_ptr output (new FlatEdges (false)); region_to_edge_interaction_filter filter (output->raw_edges (), false); - AddressablePolygonDelivery p (begin_merged (), has_valid_merged_polygons ()); + AddressablePolygonDelivery p (begin (), has_valid_merged_polygons ()); for ( ; ! p.at_end (); ++p) { scanner.insert1 (p.operator-> (), 0); } - AddressableEdgeDelivery e (other.addressable_edges ()); + AddressableEdgeDelivery e (other.addressable_merged_edges ()); for ( ; ! e.at_end (); ++e) { scanner.insert2 (e.operator-> (), 0); @@ -471,13 +471,13 @@ AsIfFlatRegion::pull_generic (const Region &other, int mode, bool touching) cons } size_t n = 1; - for (RegionIterator p = other.begin (); ! p.at_end (); ++p, ++n) { + for (RegionIterator p = other.begin_merged (); ! p.at_end (); ++p, ++n) { if (p->box ().touches (bbox ())) { ep.insert (*p, n); } } - for (RegionIterator p (begin_merged ()); ! p.at_end (); ++p) { + for (RegionIterator p (begin ()); ! p.at_end (); ++p) { if (mode > 0 || p->box ().touches (other.bbox ())) { ep.insert (*p, 0); } @@ -501,7 +501,7 @@ AsIfFlatRegion::pull_generic (const Region &other, int mode, bool touching) cons output->reserve (n); n = 1; - for (RegionIterator p = other.begin (); ! p.at_end (); ++p, ++n) { + for (RegionIterator p = other.begin_merged (); ! p.at_end (); ++p, ++n) { if (selected.find (n) != selected.end ()) { output->raw_polygons ().insert (*p); } diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index 61a88d447..7aa1b108d 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -365,6 +365,17 @@ private: } +const DeepLayer & +DeepEdges::merged_deep_layer () const +{ + if (merged_semantics ()) { + ensure_merged_edges_valid (); + return m_merged_edges; + } else { + return deep_layer (); + } +} + void DeepEdges::ensure_merged_edges_valid () const { @@ -450,18 +461,18 @@ DeepEdges::length_type DeepEdges::length (const db::Box &box) const { if (box.empty ()) { - ensure_merged_edges_valid (); + const db::DeepLayer &edges = merged_deep_layer (); db::MagnificationReducer red; db::cell_variants_collector vars (red); - vars.collect (m_merged_edges.layout (), m_merged_edges.initial_cell ()); + vars.collect (edges.layout (), edges.initial_cell ()); DeepEdges::length_type l = 0; - const db::Layout &layout = m_merged_edges.layout (); + const db::Layout &layout = edges.layout (); for (db::Layout::top_down_const_iterator c = layout.begin_top_down (); c != layout.end_top_down (); ++c) { DeepEdges::length_type lc = 0; - for (db::ShapeIterator s = layout.cell (*c).shapes (m_merged_edges.layer ()).begin (db::ShapeIterator::Edges); ! s.at_end (); ++s) { + for (db::ShapeIterator s = layout.cell (*c).shapes (edges.layer ()).begin (db::ShapeIterator::Edges); ! s.at_end (); ++s) { lc += s->edge ().length (); } const std::map &vv = vars.variants (*c); @@ -553,36 +564,34 @@ template OutputContainer * DeepEdges::processed_impl (const edge_processor &filter) const { - if (! filter.requires_raw_input ()) { - ensure_merged_edges_valid (); - } + const db::DeepLayer &edges = filter.requires_raw_input () ? deep_layer () : merged_deep_layer (); std::auto_ptr vars; if (filter.vars ()) { vars.reset (new db::VariantsCollectorBase (filter.vars ())); - vars->collect (m_deep_layer.layout (), m_deep_layer.initial_cell ()); + vars->collect (edges.layout (), edges.initial_cell ()); if (filter.wants_variants ()) { - const_cast (m_deep_layer).separate_variants (*vars); + const_cast (edges).separate_variants (*vars); } } - db::Layout &layout = const_cast (m_deep_layer.layout ()); + db::Layout &layout = const_cast (edges.layout ()); std::vector heap; std::map > to_commit; - std::auto_ptr res (new OutputContainer (m_deep_layer.derived ())); + std::auto_ptr res (new OutputContainer (edges.derived ())); if (filter.result_must_not_be_merged ()) { res->set_merged_semantics (false); } for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &s = c->shapes (filter.requires_raw_input () ? m_deep_layer.layer () : m_merged_edges.layer ()); + const db::Shapes &s = c->shapes (filter.requires_raw_input () ? edges.layer () : edges.layer ()); if (vars.get ()) { @@ -647,30 +656,28 @@ DeepEdges::filter_in_place (const EdgeFilterBase &filter) EdgesDelegate * DeepEdges::filtered (const EdgeFilterBase &filter) const { - if (! filter.requires_raw_input ()) { - ensure_merged_edges_valid (); - } + const db::DeepLayer &edges = filter.requires_raw_input () ? deep_layer () : merged_deep_layer (); std::auto_ptr vars; if (filter.vars ()) { vars.reset (new db::VariantsCollectorBase (filter.vars ())); - vars->collect (m_deep_layer.layout (), m_deep_layer.initial_cell ()); + vars->collect (edges.layout (), edges.initial_cell ()); if (filter.wants_variants ()) { - const_cast (m_deep_layer).separate_variants (*vars); + const_cast (edges).separate_variants (*vars); } } - db::Layout &layout = const_cast (m_deep_layer.layout ()); + db::Layout &layout = const_cast (edges.layout ()); std::map > to_commit; - std::auto_ptr res (new db::DeepEdges (m_deep_layer.derived ())); + std::auto_ptr res (new db::DeepEdges (edges.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &s = c->shapes (filter.requires_raw_input () ? m_deep_layer.layer () : m_merged_edges.layer ()); + const db::Shapes &s = c->shapes (edges.layer ()); if (vars.get ()) { @@ -1003,31 +1010,28 @@ EdgesDelegate *DeepEdges::outside_part (const Region &other) const RegionDelegate *DeepEdges::extended (coord_type ext_b, coord_type ext_e, coord_type ext_o, coord_type ext_i, bool join) const { - ensure_merged_edges_valid (); + const db::DeepLayer &edges = merged_deep_layer (); - std::auto_ptr res (new db::DeepRegion (m_merged_edges.derived ())); + std::auto_ptr res (new db::DeepRegion (edges.derived ())); - db::Layout &layout = const_cast (m_merged_edges.layout ()); - db::Cell &top_cell = const_cast (m_merged_edges.initial_cell ()); + db::Layout &layout = const_cast (edges.layout ()); + db::Cell &top_cell = const_cast (edges.initial_cell ()); // TODO: there is a special case when we'd need a MagnificationAndOrientationReducer: // dots formally don't have an orientation, hence the interpretation is x and y. db::MagnificationReducer red; db::cell_variants_collector vars (red); - vars.collect (m_merged_edges.layout (), m_merged_edges.initial_cell ()); + vars.collect (edges.layout (), edges.initial_cell ()); std::map > to_commit; if (join) { - // In joined mode we need to create a special cluster which connects all joined edges - db::DeepLayer joined = m_merged_edges.derived (); - db::hier_clusters hc; db::Connectivity conn (db::Connectivity::EdgesConnectByPoints); - conn.connect (m_merged_edges); + conn.connect (edges); hc.set_base_verbosity (base_verbosity () + 10); - hc.build (layout, m_merged_edges.initial_cell (), db::ShapeIterator::Edges, conn); + hc.build (layout, edges.initial_cell (), db::ShapeIterator::Edges, conn); // TODO: iterate only over the called cells? for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { @@ -1052,7 +1056,7 @@ RegionDelegate *DeepEdges::extended (coord_type ext_b, coord_type ext_e, coord_t JoinEdgesCluster jec (&ptrans, ext_b, ext_e, ext_o, ext_i); std::list heap; - for (db::recursive_cluster_shape_iterator rcsi (hc, m_merged_edges.layer (), c->cell_index (), *cl); ! rcsi.at_end (); ++rcsi) { + for (db::recursive_cluster_shape_iterator rcsi (hc, edges.layer (), c->cell_index (), *cl); ! rcsi.at_end (); ++rcsi) { heap.push_back (rcsi->transformed (v->first * rcsi.trans ())); jec.add (&heap.back (), 0); } @@ -1081,7 +1085,7 @@ RegionDelegate *DeepEdges::extended (coord_type ext_b, coord_type ext_e, coord_t out = & to_commit [c->cell_index ()][v->first]; } - for (db::Shapes::shape_iterator si = c->shapes (m_merged_edges.layer ()).begin (db::ShapeIterator::Edges); ! si.at_end (); ++si) { + for (db::Shapes::shape_iterator si = c->shapes (edges.layer ()).begin (db::ShapeIterator::Edges); ! si.at_end (); ++si) { out->insert (extended_edge (si->edge ().transformed (v->first), ext_b, ext_e, ext_o, ext_i).transformed (v->first.inverted ())); } @@ -1170,6 +1174,51 @@ private: bool m_inverse; }; +class Edge2EdgePullLocalOperation + : public local_operation +{ +public: + Edge2EdgePullLocalOperation () + { + // .. nothing yet .. + } + + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const + { + db::box_scanner scanner; + + std::set others; + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { + others.insert (interactions.intruder_shape (*j)); + } + } + + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + const db::Edge &subject = interactions.subject_shape (i->first); + scanner.insert (&subject, 1); + } + + for (std::set::const_iterator o = others.begin (); o != others.end (); ++o) { + scanner.insert (o.operator-> (), 0); + } + + edge_interaction_filter > filter (result); + scanner.process (filter, 1, db::box_convert ()); + + } + + virtual on_empty_intruder_mode on_empty_intruder_hint () const + { + return Drop; + } + + virtual std::string description () const + { + return tl::to_string (tr ("Select interacting edges from other")); + } +}; + class Edge2PolygonInteractingLocalOperation : public local_operation { @@ -1241,27 +1290,97 @@ private: bool m_inverse; }; +struct ResultInserter +{ + typedef db::Polygon value_type; + + ResultInserter (db::Layout *layout, std::unordered_set &result) + : mp_layout (layout), mp_result (&result) + { + // .. nothing yet .. + } + + void insert (const db::Polygon &p) + { + (*mp_result).insert (db::PolygonRef (p, mp_layout->shape_repository ())); + } + +private: + db::Layout *mp_layout; + std::unordered_set *mp_result; +}; + +class Edge2PolygonPullLocalOperation + : public local_operation +{ +public: + Edge2PolygonPullLocalOperation () + { + // .. nothing yet .. + } + + virtual void compute_local (db::Layout *layout, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const + { + db::box_scanner2 scanner; + + std::set others; + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { + others.insert (interactions.intruder_shape (*j)); + } + } + + for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + const db::Edge &subject = interactions.subject_shape (i->first); + scanner.insert1 (&subject, 1); + } + + std::list heap; + for (std::set::const_iterator o = others.begin (); o != others.end (); ++o) { + heap.push_back (o->obj ().transformed (o->trans ())); + scanner.insert2 (& heap.back (), 0); + } + + ResultInserter inserter (layout, result); + edge_to_region_interaction_filter filter (inserter); + scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + } + + virtual on_empty_intruder_mode on_empty_intruder_hint () const + { + return Drop; + } + + virtual std::string description () const + { + return tl::to_string (tr ("Select interacting regions")); + } +}; + } EdgesDelegate * DeepEdges::selected_interacting_generic (const Region &other, bool inverse) const { + std::auto_ptr dr_holder; const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - return db::AsIfFlatEdges::selected_interacting_generic (other, inverse); + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepRegion (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } - ensure_merged_edges_valid (); + const db::DeepLayer &edges = merged_deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (edges.derived ()); db::Edge2PolygonInteractingLocalOperation op (inverse); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&edges.layout ()), const_cast (&edges.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (edges.store ()->threads ()); - proc.run (&op, m_merged_edges.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.run (&op, edges.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); return new db::DeepEdges (dl_out); } @@ -1269,44 +1388,79 @@ DeepEdges::selected_interacting_generic (const Region &other, bool inverse) cons EdgesDelegate * DeepEdges::selected_interacting_generic (const Edges &other, bool inverse) const { + std::auto_ptr dr_holder; const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (! other_deep) { - return db::AsIfFlatEdges::selected_interacting_generic (other, inverse); + // if the other edge collection isn't deep, turn into a top-level only deep edge collection to facilitate re-hierarchisation + dr_holder.reset (new db::DeepEdges (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); } - ensure_merged_edges_valid (); + const db::DeepLayer &edges = merged_deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (edges.derived ()); db::Edge2EdgeInteractingLocalOperation op (inverse); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&edges.layout ()), const_cast (&edges.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (edges.store ()->threads ()); - proc.run (&op, m_merged_edges.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.run (&op, edges.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); return new db::DeepEdges (dl_out); } -EdgesDelegate *DeepEdges::selected_interacting (const Edges &other) const +RegionDelegate *DeepEdges::pull_generic (const Region &other) const { - return selected_interacting_generic (other, false); + std::auto_ptr dr_holder; + const db::DeepRegion *other_deep = dynamic_cast (other.delegate ()); + if (! other_deep) { + // if the other region isn't deep, turn into a top-level only deep region to facilitate re-hierarchisation + dr_holder.reset (new db::DeepRegion (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); + } + + const db::DeepLayer &edges = deep_layer (); + const db::DeepLayer &other_polygons = other_deep->merged_deep_layer (); + + DeepLayer dl_out (other_polygons.derived ()); + + db::Edge2PolygonPullLocalOperation op; + + db::local_processor proc (const_cast (&edges.layout ()), const_cast (&edges.initial_cell ()), &other_polygons.layout (), &other_polygons.initial_cell ()); + proc.set_base_verbosity (base_verbosity ()); + proc.set_threads (edges.store ()->threads ()); + + proc.run (&op, edges.layer (), other_polygons.layer (), dl_out.layer ()); + + return new db::DeepRegion (dl_out); } -EdgesDelegate *DeepEdges::selected_not_interacting (const Edges &other) const +EdgesDelegate *DeepEdges::pull_generic (const Edges &other) const { - return selected_interacting_generic (other, true); -} + std::auto_ptr dr_holder; + const db::DeepEdges *other_deep = dynamic_cast (other.delegate ()); + if (! other_deep) { + // if the other edge collection isn't deep, turn into a top-level only deep edge collection to facilitate re-hierarchisation + dr_holder.reset (new db::DeepEdges (other, const_cast (*deep_layer ().store ()))); + other_deep = dr_holder.get (); + } -EdgesDelegate *DeepEdges::selected_interacting (const Region &other) const -{ - return selected_interacting_generic (other, false); -} + const db::DeepLayer &edges = deep_layer (); + const db::DeepLayer &other_edges = merged_deep_layer (); -EdgesDelegate *DeepEdges::selected_not_interacting (const Region &other) const -{ - return selected_interacting_generic (other, true); + DeepLayer dl_out (other_edges.derived ()); + + db::Edge2EdgePullLocalOperation op; + + db::local_processor proc (const_cast (&edges.layout ()), const_cast (&edges.initial_cell ()), &other_edges.layout (), &other_edges.initial_cell ()); + proc.set_base_verbosity (base_verbosity ()); + proc.set_threads (edges.store ()->threads ()); + + proc.run (&op, edges.layer (), other_edges.layer (), dl_out.layer ()); + + return new db::DeepEdges (dl_out); } EdgesDelegate *DeepEdges::in (const Edges &other, bool invert) const @@ -1410,7 +1564,7 @@ DeepEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Coord } } - ensure_merged_edges_valid (); + const db::DeepLayer &edges = merged_deep_layer (); EdgeRelationFilter check (rel, d, metrics); check.set_include_zero (false); @@ -1419,19 +1573,19 @@ DeepEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Coord check.set_min_projection (min_projection); check.set_max_projection (max_projection); - std::auto_ptr res (new db::DeepEdgePairs (m_merged_edges.derived ())); + std::auto_ptr res (new db::DeepEdgePairs (edges.derived ())); db::CheckLocalOperation op (check, other_deep != 0); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), - const_cast (&m_deep_layer.initial_cell ()), - other_deep ? &other_deep->deep_layer ().layout () : const_cast (&m_deep_layer.layout ()), - other_deep ? &other_deep->deep_layer ().initial_cell () : const_cast (&m_deep_layer.initial_cell ())); + db::local_processor proc (const_cast (&edges.layout ()), + const_cast (&edges.initial_cell ()), + other_deep ? &other_deep->deep_layer ().layout () : const_cast (&edges.layout ()), + other_deep ? &other_deep->deep_layer ().initial_cell () : const_cast (&edges.initial_cell ())); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (edges.store ()->threads ()); - proc.run (&op, m_merged_edges.layer (), other_deep ? other_deep->deep_layer ().layer () : m_merged_edges.layer (), res->deep_layer ().layer ()); + proc.run (&op, edges.layer (), other_deep ? other_deep->deep_layer ().layer () : edges.layer (), res->deep_layer ().layer ()); return res.release (); } diff --git a/src/db/db/dbDeepEdges.h b/src/db/db/dbDeepEdges.h index dd70bd590..e60bab2b1 100644 --- a/src/db/db/dbDeepEdges.h +++ b/src/db/db/dbDeepEdges.h @@ -137,11 +137,6 @@ public: virtual RegionDelegate *extended (coord_type ext_b, coord_type ext_e, coord_type ext_o, coord_type ext_i, bool join) const; - virtual EdgesDelegate *selected_interacting (const Edges &) const; - virtual EdgesDelegate *selected_not_interacting (const Edges &) const; - virtual EdgesDelegate *selected_interacting (const Region &) const; - virtual EdgesDelegate *selected_not_interacting (const Region &) const; - virtual EdgesDelegate *in (const Edges &, bool) const; virtual void insert_into (Layout *layout, db::cell_index_type into_cell, unsigned int into_layer) const; @@ -172,11 +167,14 @@ private: void init (); void ensure_merged_edges_valid () const; + const DeepLayer &merged_deep_layer () const; DeepLayer and_or_not_with(const DeepEdges *other, bool and_op) const; DeepLayer edge_region_op (const DeepRegion *other, bool outside, bool include_borders) const; EdgePairsDelegate *run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; - EdgesDelegate *selected_interacting_generic (const Edges &edges, bool invert) const; - EdgesDelegate *selected_interacting_generic (const Region ®ion, bool invert) const; + virtual EdgesDelegate *pull_generic (const Edges &edges) const; + virtual RegionDelegate *pull_generic (const Region ®ion) const; + virtual EdgesDelegate *selected_interacting_generic (const Edges &edges, bool invert) const; + virtual EdgesDelegate *selected_interacting_generic (const Region ®ion, bool invert) const; template OutputContainer *processed_impl (const edge_processor &filter) const; }; diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 2eb962283..c189c9c46 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -402,6 +402,17 @@ private: } +const DeepLayer & +DeepRegion::merged_deep_layer () const +{ + if (merged_semantics ()) { + ensure_merged_polygons_valid (); + return m_merged_polygons; + } else { + return deep_layer (); + } +} + void DeepRegion::ensure_merged_polygons_valid () const { @@ -651,17 +662,17 @@ DeepRegion::area (const db::Box &box) const { if (box.empty ()) { - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); db::cell_variants_collector vars; - vars.collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars.collect (polygons.layout (), polygons.initial_cell ()); DeepRegion::area_type a = 0; - const db::Layout &layout = m_merged_polygons.layout (); + const db::Layout &layout = polygons.layout (); for (db::Layout::top_down_const_iterator c = layout.begin_top_down (); c != layout.end_top_down (); ++c) { DeepRegion::area_type ac = 0; - for (db::ShapeIterator s = layout.cell (*c).shapes (m_merged_polygons.layer ()).begin (db::ShapeIterator::All); ! s.at_end (); ++s) { + for (db::ShapeIterator s = layout.cell (*c).shapes (polygons.layer ()).begin (db::ShapeIterator::All); ! s.at_end (); ++s) { ac += s->area (); } const std::map &vv = vars.variants (*c); @@ -684,17 +695,17 @@ DeepRegion::perimeter (const db::Box &box) const { if (box.empty ()) { - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); db::cell_variants_collector vars; - vars.collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars.collect (polygons.layout (), polygons.initial_cell ()); DeepRegion::perimeter_type p = 0; - const db::Layout &layout = m_merged_polygons.layout (); + const db::Layout &layout = polygons.layout (); for (db::Layout::top_down_const_iterator c = layout.begin_top_down (); c != layout.end_top_down (); ++c) { DeepRegion::perimeter_type pc = 0; - for (db::ShapeIterator s = layout.cell (*c).shapes (m_merged_polygons.layer ()).begin (db::ShapeIterator::All); ! s.at_end (); ++s) { + for (db::ShapeIterator s = layout.cell (*c).shapes (polygons.layer ()).begin (db::ShapeIterator::All); ! s.at_end (); ++s) { pc += s->perimeter (); } const std::map &vv = vars.variants (*c); @@ -740,19 +751,18 @@ DeepRegion::grid_check (db::Coord gx, db::Coord gy) const return new EmptyEdgePairs (); } - ensure_merged_polygons_valid (); - - db::Layout &layout = m_merged_polygons.layout (); + const db::DeepLayer &polygons = merged_deep_layer (); + db::Layout &layout = const_cast (polygons.layout ()); db::cell_variants_collector vars (gx); - vars.collect (layout, m_merged_polygons.initial_cell ()); + vars.collect (layout, polygons.initial_cell ()); std::map > to_commit; - std::auto_ptr res (new db::DeepEdgePairs (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepEdgePairs (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &shapes = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &shapes = c->shapes (polygons.layer ()); const std::map &vv = vars.variants (c->cell_index ()); for (std::map::const_iterator v = vv.begin (); v != vv.end (); ++v) { @@ -786,15 +796,14 @@ DeepRegion::grid_check (db::Coord gx, db::Coord gy) const EdgePairsDelegate * DeepRegion::angle_check (double min, double max, bool inverse) const { - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); + db::Layout &layout = const_cast (polygons.layout ()); - db::Layout &layout = m_merged_polygons.layout (); - - std::auto_ptr res (new db::DeepEdgePairs (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepEdgePairs (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &shapes = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &shapes = c->shapes (polygons.layer ()); db::Shapes &markers = c->shapes (res->deep_layer ().layer ()); for (db::Shapes::shape_iterator si = shapes.begin (db::ShapeIterator::All); ! si.at_end (); ++si) { @@ -824,19 +833,19 @@ DeepRegion::snapped (db::Coord gx, db::Coord gy) return this; } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); db::cell_variants_collector vars (gx); - vars.collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars.collect (polygons.layout (), polygons.initial_cell ()); // NOTE: m_merged_polygons is mutable, so why is the const_cast needed? - const_cast (m_merged_polygons).separate_variants (vars); + const_cast (polygons).separate_variants (vars); - db::Layout &layout = m_merged_polygons.layout (); + db::Layout &layout = const_cast (polygons.layout ()); std::vector heap; - std::auto_ptr res (new db::DeepRegion (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepRegion (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { const std::map &v = vars.variants (c->cell_index ()); @@ -844,7 +853,7 @@ DeepRegion::snapped (db::Coord gx, db::Coord gy) const db::ICplxTrans &tr = v.begin ()->first; db::ICplxTrans trinv = tr.inverted (); - const db::Shapes &s = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); db::Shapes &st = c->shapes (res->deep_layer ().layer ()); db::PolygonRefToShapesGenerator pr (&layout, &st); @@ -865,7 +874,7 @@ DeepRegion::snapped (db::Coord gx, db::Coord gy) EdgesDelegate * DeepRegion::edges (const EdgeFilterBase *filter) const { - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); std::auto_ptr vars; @@ -873,16 +882,16 @@ DeepRegion::edges (const EdgeFilterBase *filter) const vars.reset (new db::VariantsCollectorBase (filter->vars ())); - vars->collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars->collect (polygons.layout (), polygons.initial_cell ()); // NOTE: m_merged_polygons is mutable, so why is the const_cast needed? - const_cast (m_merged_polygons).separate_variants (*vars); + const_cast (polygons).separate_variants (*vars); } - db::Layout &layout = m_merged_polygons.layout (); + db::Layout &layout = const_cast (polygons.layout ()); - std::auto_ptr res (new db::DeepEdges (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepEdges (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { db::ICplxTrans tr; @@ -892,7 +901,7 @@ DeepRegion::edges (const EdgeFilterBase *filter) const tr = v.begin ()->first; } - const db::Shapes &s = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); db::Shapes &st = c->shapes (res->deep_layer ().layer ()); for (db::Shapes::shape_iterator si = s.begin (db::ShapeIterator::All); ! si.at_end (); ++si) { @@ -984,36 +993,34 @@ template OutputContainer * DeepRegion::processed_impl (const polygon_processor &filter) const { - if (! filter.requires_raw_input ()) { - ensure_merged_polygons_valid (); - } + const db::DeepLayer &polygons = filter.requires_raw_input () ? deep_layer () : merged_deep_layer (); std::auto_ptr vars; if (filter.vars ()) { vars.reset (new db::VariantsCollectorBase (filter.vars ())); - vars->collect (m_deep_layer.layout (), m_deep_layer.initial_cell ()); + vars->collect (polygons.layout (), polygons.initial_cell ()); if (filter.wants_variants ()) { - const_cast (m_deep_layer).separate_variants (*vars); + const_cast (polygons).separate_variants (*vars); } } - db::Layout &layout = const_cast (m_deep_layer.layout ()); + db::Layout &layout = const_cast (polygons.layout ()); std::vector heap; std::map > to_commit; - std::auto_ptr res (new OutputContainer (m_deep_layer.derived ())); + std::auto_ptr res (new OutputContainer (polygons.derived ())); if (filter.result_must_not_be_merged ()) { res->set_merged_semantics (false); } for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &s = c->shapes (filter.requires_raw_input () ? m_deep_layer.layer () : m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); if (vars.get ()) { @@ -1084,30 +1091,28 @@ DeepRegion::filter_in_place (const PolygonFilterBase &filter) RegionDelegate * DeepRegion::filtered (const PolygonFilterBase &filter) const { - if (! filter.requires_raw_input ()) { - ensure_merged_polygons_valid (); - } + const db::DeepLayer &polygons = filter.requires_raw_input () ? deep_layer () : merged_deep_layer (); std::auto_ptr vars; if (filter.vars ()) { vars.reset (new db::VariantsCollectorBase (filter.vars ())); - vars->collect (m_deep_layer.layout (), m_deep_layer.initial_cell ()); + vars->collect (polygons.layout (), polygons.initial_cell ()); if (filter.wants_variants ()) { - const_cast (m_deep_layer).separate_variants (*vars); + const_cast (polygons).separate_variants (*vars); } } - db::Layout &layout = const_cast (m_deep_layer.layout ()); + db::Layout &layout = const_cast (polygons.layout ()); std::map > to_commit; - std::auto_ptr res (new db::DeepRegion (m_deep_layer.derived ())); + std::auto_ptr res (new db::DeepRegion (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &s = c->shapes (filter.requires_raw_input () ? m_deep_layer.layer () : m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); if (vars.get ()) { @@ -1242,17 +1247,17 @@ DeepRegion::sized (coord_type d, unsigned int mode) const return clone (); } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); - db::Layout &layout = m_merged_polygons.layout (); + db::Layout &layout = const_cast (polygons.layout ()); db::cell_variants_collector vars; - vars.collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars.collect (polygons.layout (), polygons.initial_cell ()); // NOTE: m_merged_polygons is mutable, so why is the const_cast needed? - const_cast (m_merged_polygons).separate_variants (vars); + const_cast (polygons).separate_variants (vars); - std::auto_ptr res (new db::DeepRegion (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepRegion (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { const std::map &v = vars.variants (c->cell_index ()); @@ -1260,7 +1265,7 @@ DeepRegion::sized (coord_type d, unsigned int mode) const double mag = v.begin ()->first.mag (); db::Coord d_with_mag = db::coord_traits::rounded (d / mag); - const db::Shapes &s = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); db::Shapes &st = c->shapes (res->deep_layer ().layer ()); db::PolygonRefToShapesGenerator pr (&layout, &st); @@ -1320,17 +1325,17 @@ DeepRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const return sized (dx, mode); } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); - db::Layout &layout = m_merged_polygons.layout (); + db::Layout &layout = const_cast (polygons.layout ()); db::cell_variants_collector vars; - vars.collect (m_merged_polygons.layout (), m_merged_polygons.initial_cell ()); + vars.collect (polygons.layout (), polygons.initial_cell ()); // NOTE: m_merged_polygons is mutable, so why is the const_cast needed? - const_cast (m_merged_polygons).separate_variants (vars); + const_cast (polygons).separate_variants (vars); - std::auto_ptr res (new db::DeepRegion (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepRegion (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { const std::map &v = vars.variants (c->cell_index ()); @@ -1345,7 +1350,7 @@ DeepRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const std::swap (dx_with_mag, dy_with_mag); } - const db::Shapes &s = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &s = c->shapes (polygons.layer ()); db::Shapes &st = c->shapes (res->deep_layer ().layer ()); db::PolygonRefToShapesGenerator pr (&layout, &st); @@ -1480,7 +1485,7 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons } } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); EdgeRelationFilter check (rel, d, metrics); check.set_include_zero (false); @@ -1489,19 +1494,19 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons check.set_min_projection (min_projection); check.set_max_projection (max_projection); - std::auto_ptr res (new db::DeepEdgePairs (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepEdgePairs (polygons.derived ())); db::CheckLocalOperation op (check, different_polygons, other_deep != 0); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), - const_cast (&m_deep_layer.initial_cell ()), - other_deep ? &other_deep->deep_layer ().layout () : const_cast (&m_deep_layer.layout ()), - other_deep ? &other_deep->deep_layer ().initial_cell () : const_cast (&m_deep_layer.initial_cell ())); + db::local_processor proc (const_cast (&polygons.layout ()), + const_cast (&polygons.initial_cell ()), + other_deep ? &other_deep->deep_layer ().layout () : const_cast (&polygons.layout ()), + other_deep ? &other_deep->deep_layer ().initial_cell () : const_cast (&polygons.initial_cell ())); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (polygons.store ()->threads ()); - proc.run (&op, m_merged_polygons.layer (), other_deep ? other_deep->deep_layer ().layer () : m_merged_polygons.layer (), res->deep_layer ().layer ()); + proc.run (&op, polygons.layer (), other_deep ? other_deep->deep_layer ().layer () : polygons.layer (), res->deep_layer ().layer ()); return res.release (); } @@ -1509,7 +1514,7 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons EdgePairsDelegate * DeepRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const { - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); EdgeRelationFilter check (rel, d, metrics); check.set_include_zero (false); @@ -1518,12 +1523,12 @@ DeepRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord d, b check.set_min_projection (min_projection); check.set_max_projection (max_projection); - db::Layout &layout = m_merged_polygons.layout (); + db::Layout &layout = const_cast (polygons.layout ()); - std::auto_ptr res (new db::DeepEdgePairs (m_merged_polygons.derived ())); + std::auto_ptr res (new db::DeepEdgePairs (polygons.derived ())); for (db::Layout::iterator c = layout.begin (); c != layout.end (); ++c) { - const db::Shapes &shapes = c->shapes (m_merged_polygons.layer ()); + const db::Shapes &shapes = c->shapes (polygons.layer ()); db::Shapes &result = c->shapes (res->deep_layer ().layer ()); for (db::Shapes::shape_iterator s = shapes.begin (db::ShapeIterator::Polygons); ! s.at_end (); ++s) { @@ -1863,21 +1868,23 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to other_deep = dr_holder.get (); } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); + // NOTE: on "inside", the other polygons must be merged + const db::DeepLayer &other_polygons = mode < 0 ? other_deep->merged_deep_layer () : other_deep->deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (polygons.derived ()); db::InteractingLocalOperation op (mode, touching, inverse); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&polygons.layout ()), const_cast (&polygons.initial_cell ()), &other_polygons.layout (), &other_polygons.initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (polygons.store ()->threads ()); if (split_after) { - proc.set_area_ratio (m_deep_layer.store ()->max_area_ratio ()); - proc.set_max_vertex_count (m_deep_layer.store ()->max_vertex_count ()); + proc.set_area_ratio (polygons.store ()->max_area_ratio ()); + proc.set_max_vertex_count (polygons.store ()->max_vertex_count ()); } - proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.run (&op, polygons.layer (), other_polygons.layer (), dl_out.layer ()); db::DeepRegion *res = new db::DeepRegion (dl_out); if (! split_after) { @@ -1900,21 +1907,21 @@ DeepRegion::selected_interacting_generic (const Edges &other, bool inverse) cons other_deep = dr_holder.get (); } - ensure_merged_polygons_valid (); + const db::DeepLayer &polygons = merged_deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (polygons.derived ()); db::InteractingWithEdgeLocalOperation op (inverse); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&polygons.layout ()), const_cast (&polygons.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (polygons.store ()->threads ()); if (split_after) { - proc.set_area_ratio (m_deep_layer.store ()->max_area_ratio ()); - proc.set_max_vertex_count (m_deep_layer.store ()->max_vertex_count ()); + proc.set_area_ratio (polygons.store ()->max_area_ratio ()); + proc.set_max_vertex_count (polygons.store ()->max_vertex_count ()); } - proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.run (&op, polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); db::DeepRegion *res = new db::DeepRegion (dl_out); if (! split_after) { @@ -1937,21 +1944,23 @@ DeepRegion::pull_generic (const Region &other, int mode, bool touching) const other_deep = dr_holder.get (); } - ensure_merged_polygons_valid (); + // in "inside" mode, the first argument needs to be merged too + const db::DeepLayer &polygons = mode < 0 ? merged_deep_layer () : deep_layer (); + const db::DeepLayer &other_polygons = other_deep->merged_deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (polygons.derived ()); db::PullLocalOperation op (mode, touching); - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&polygons.layout ()), const_cast (&polygons.initial_cell ()), &other_polygons.layout (), &other_polygons.initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); + proc.set_threads (polygons.store ()->threads ()); if (split_after) { - proc.set_area_ratio (m_deep_layer.store ()->max_area_ratio ()); - proc.set_max_vertex_count (m_deep_layer.store ()->max_vertex_count ()); + proc.set_area_ratio (polygons.store ()->max_area_ratio ()); + proc.set_max_vertex_count (polygons.store ()->max_vertex_count ()); } - proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.run (&op, polygons.layer (), other_polygons.layer (), dl_out.layer ()); db::DeepRegion *res = new db::DeepRegion (dl_out); if (! split_after) { @@ -1971,18 +1980,22 @@ DeepRegion::pull_generic (const Edges &other) const other_deep = dr_holder.get (); } - ensure_merged_polygons_valid (); + // in "inside" mode, the first argument needs to be merged too + const db::DeepLayer &polygons = deep_layer (); + const db::DeepLayer &other_edges = other_deep->merged_deep_layer (); - DeepLayer dl_out (m_deep_layer.derived ()); + DeepLayer dl_out (polygons.derived ()); db::PullWithEdgeLocalOperation op; - db::local_processor proc (const_cast (&m_deep_layer.layout ()), const_cast (&m_deep_layer.initial_cell ()), &other_deep->deep_layer ().layout (), &other_deep->deep_layer ().initial_cell ()); + db::local_processor proc (const_cast (&polygons.layout ()), const_cast (&polygons.initial_cell ()), &other_edges.layout (), &other_edges.initial_cell ()); proc.set_base_verbosity (base_verbosity ()); - proc.set_threads (m_deep_layer.store ()->threads ()); - proc.run (&op, m_merged_polygons.layer (), other_deep->deep_layer ().layer (), dl_out.layer ()); + proc.set_threads (polygons.store ()->threads ()); + proc.run (&op, polygons.layer (), other_edges.layer (), dl_out.layer ()); - return new db::DeepEdges (dl_out); + db::DeepEdges *res = new db::DeepEdges (dl_out); + res->set_is_merged (true); + return res; } } diff --git a/src/db/db/dbDeepRegion.h b/src/db/db/dbDeepRegion.h index 4e49de744..276b0bf83 100644 --- a/src/db/db/dbDeepRegion.h +++ b/src/db/db/dbDeepRegion.h @@ -186,6 +186,7 @@ private: void init (); void ensure_merged_polygons_valid () const; + const DeepLayer &merged_deep_layer () const; DeepLayer and_or_not_with(const DeepRegion *other, bool and_op) const; EdgePairsDelegate *run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; @@ -194,11 +195,6 @@ private: virtual RegionDelegate *pull_generic (const Region &other, int mode, bool touching) const; virtual EdgesDelegate *pull_generic (const Edges &other) const; - const DeepLayer &merged_deep_layer () const - { - return m_merged_polygons; - } - template OutputContainer *processed_impl (const polygon_processor &filter) const; }; diff --git a/src/db/db/dbEdges.cc b/src/db/db/dbEdges.cc index aca8c0baf..e51827627 100644 --- a/src/db/db/dbEdges.cc +++ b/src/db/db/dbEdges.cc @@ -191,6 +191,11 @@ void Edges::processed (Region &output, const EdgeToPolygonProcessorBase &filter) output.set_delegate (mp_delegate->processed_to_polygons (filter)); } +void Edges::pull_interacting (Region &output, const Region &other) const +{ + output = Region (mp_delegate->pull_interacting (other)); +} + void Edges::extended (Region &output, coord_type ext_b, coord_type ext_e, coord_type ext_o, coord_type ext_i, bool join) const { output.set_delegate (mp_delegate->extended (ext_b, ext_e, ext_o, ext_i, join)); diff --git a/src/db/db/dbEdges.h b/src/db/db/dbEdges.h index 9ca70a5fe..a2c236d54 100644 --- a/src/db/db/dbEdges.h +++ b/src/db/db/dbEdges.h @@ -1062,6 +1062,25 @@ public: return Edges (mp_delegate->outside_part (other)); } + /** + * @brief Selects all polygons of the other region set which overlap or touch edges from this edge set + * + * Merged semantics applies for the other region. Merged polygons will be selected from the other region + * if merged semantics is enabled. + */ + void pull_interacting (Region &output, const Region &other) const; + + /** + * @brief Selects all edges of the other edge set which overlap or touch edges from this edge set + * + * Merged semantics applies. If merged semantics is chosen, the connected edge parts will be + * selected as a whole from other. + */ + Edges pull_interacting (const Edges &other) const + { + return Edges (mp_delegate->pull_interacting (other)); + } + /** * @brief Selects all edges of this edge set which overlap or touch with polygons from the region * diff --git a/src/db/db/dbEdgesDelegate.h b/src/db/db/dbEdgesDelegate.h index 420e406e1..42564daca 100644 --- a/src/db/db/dbEdgesDelegate.h +++ b/src/db/db/dbEdgesDelegate.h @@ -272,6 +272,8 @@ public: virtual EdgesDelegate *inside_part (const Region &other) const = 0; virtual EdgesDelegate *outside_part (const Region &other) const = 0; + virtual RegionDelegate *pull_interacting (const Region &) const = 0; + virtual EdgesDelegate *pull_interacting (const Edges &) const = 0; virtual EdgesDelegate *selected_interacting (const Region &other) const = 0; virtual EdgesDelegate *selected_not_interacting (const Region &other) const = 0; virtual EdgesDelegate *selected_interacting (const Edges &other) const = 0; diff --git a/src/db/db/dbEdgesUtils.h b/src/db/db/dbEdgesUtils.h index a2db45117..0be253eeb 100644 --- a/src/db/db/dbEdgesUtils.h +++ b/src/db/db/dbEdgesUtils.h @@ -27,6 +27,7 @@ #include "dbEdges.h" #include "dbBoxScanner.h" #include "dbPolygonTools.h" +#include "tlSelect.h" namespace db { @@ -242,7 +243,7 @@ private: * * There is a special box converter which is able to sort that out as well. */ -template +template class edge_to_region_interaction_filter : public db::box_scanner_receiver2 { @@ -255,17 +256,20 @@ public: void add (const db::Edge *e, size_t, const db::Polygon *p, size_t) { - if (m_seen.find (e) == m_seen.end ()) { + const OutputType *ep = 0; + tl::select (ep, e, p); + + if (m_seen.find (ep) == m_seen.end ()) { if (db::interact (*p, *e)) { - m_seen.insert (e); - mp_output->insert (*e); + m_seen.insert (ep); + mp_output->insert (*ep); } } } private: OutputContainer *mp_output; - std::set m_seen; + std::set m_seen; }; /** diff --git a/src/db/db/dbEmptyEdges.cc b/src/db/db/dbEmptyEdges.cc index 211172085..8667ed923 100644 --- a/src/db/db/dbEmptyEdges.cc +++ b/src/db/db/dbEmptyEdges.cc @@ -60,6 +60,12 @@ EmptyEdges::extended (coord_type, coord_type, coord_type, coord_type, bool) cons return new EmptyRegion (); } +RegionDelegate * +EmptyEdges::pull_interacting (const Region &) const +{ + return new EmptyRegion (); +} + EdgePairsDelegate * EmptyEdges::processed_to_edge_pairs (const EdgeToEdgePairProcessorBase &) const { diff --git a/src/db/db/dbEmptyEdges.h b/src/db/db/dbEmptyEdges.h index 8f590bc32..243bd56a3 100644 --- a/src/db/db/dbEmptyEdges.h +++ b/src/db/db/dbEmptyEdges.h @@ -86,6 +86,8 @@ public: virtual EdgesDelegate *inside_part (const Region &) const { return new EmptyEdges (); } virtual EdgesDelegate *outside_part (const Region &) const { return new EmptyEdges (); } + virtual RegionDelegate *pull_interacting (const Region &) const; + virtual EdgesDelegate *pull_interacting (const Edges &) const { return new EmptyEdges (); } virtual EdgesDelegate *selected_interacting (const Edges &) const { return new EmptyEdges (); } virtual EdgesDelegate *selected_not_interacting (const Edges &) const { return new EmptyEdges (); } virtual EdgesDelegate *selected_interacting (const Region &) const { return new EmptyEdges (); } diff --git a/src/db/db/dbFlatEdges.h b/src/db/db/dbFlatEdges.h index 415a0ca54..429950c4e 100644 --- a/src/db/db/dbFlatEdges.h +++ b/src/db/db/dbFlatEdges.h @@ -81,6 +81,8 @@ class DB_PUBLIC FlatEdges : public AsIfFlatEdges { public: + typedef db::Edge value_type; + typedef db::layer edge_layer_type; typedef edge_layer_type::iterator edge_iterator_type; diff --git a/src/db/db/dbFlatRegion.h b/src/db/db/dbFlatRegion.h index 5f7d2d2cd..34d8d67c0 100644 --- a/src/db/db/dbFlatRegion.h +++ b/src/db/db/dbFlatRegion.h @@ -81,6 +81,7 @@ class DB_PUBLIC FlatRegion : public AsIfFlatRegion { public: + typedef db::Polygon value_type; typedef db::layer polygon_layer_type; typedef polygon_layer_type::iterator polygon_iterator_type; diff --git a/src/db/db/dbHierProcessor.cc b/src/db/db/dbHierProcessor.cc index da7a55c6b..d53769649 100644 --- a/src/db/db/dbHierProcessor.cc +++ b/src/db/db/dbHierProcessor.cc @@ -1616,6 +1616,7 @@ local_processor::compute_local_cell (const db::local_processor_conte template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; +template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; diff --git a/src/db/db/dbRegionUtils.cc b/src/db/db/dbRegionUtils.cc index 90afa9148..bfdda2990 100644 --- a/src/db/db/dbRegionUtils.cc +++ b/src/db/db/dbRegionUtils.cc @@ -22,6 +22,7 @@ #include "dbRegionUtils.h" +#include "tlSelect.h" namespace db { @@ -288,26 +289,6 @@ Poly2PolyCheckBase::enter (const db::Polygon &o1, size_t p1, const db::Polygon & // ------------------------------------------------------------------------------------- // RegionToEdgeInteractionFilterBase implementation -namespace -{ - -template -struct edge_or_polygon; - -template <> -struct edge_or_polygon -{ - const db::Polygon *operator() (const db::Polygon *p, const db::Edge *) const { return p; } -}; - -template <> -struct edge_or_polygon -{ - const db::Edge *operator() (const db::Polygon *, const db::Edge *e) const { return e; } -}; - -} - template region_to_edge_interaction_filter_base::region_to_edge_interaction_filter_base (bool inverse) : m_inverse (inverse) @@ -326,7 +307,8 @@ template void region_to_edge_interaction_filter_base::add (const db::Polygon *p, size_t, const db::Edge *e, size_t) { - const OutputType *o = edge_or_polygon () (p, e); + const OutputType *o = 0; + tl::select (o, p, e); if ((m_seen.find (o) == m_seen.end ()) != m_inverse) { diff --git a/src/db/db/gsiDeclDbEdges.cc b/src/db/db/gsiDeclDbEdges.cc index 0ab75e021..2f6d5c35c 100644 --- a/src/db/db/gsiDeclDbEdges.cc +++ b/src/db/db/gsiDeclDbEdges.cc @@ -316,6 +316,13 @@ static db::Region extended (const db::Edges *r, db::Coord b, db::Coord e, db::Co return out; } +static db::Region pull_interacting (const db::Edges *r, const db::Region &other) +{ + db::Region out; + r->pull_interacting (out, other); + return out; +} + static db::Region extents2 (const db::Edges *r, db::Coord dx, db::Coord dy) { db::Region e; @@ -913,6 +920,29 @@ Class dec_Edges ("db", "Edges", "This method does not merge the edges before they are selected. If you want to select coherent " "edges, make sure the edge collection is merged before this method is used.\n" ) + + method_ext ("pull_interacting", &pull_interacting, gsi::arg ("other"), + "@brief Returns all polygons of \"other\" which are interacting with (overlapping, touching) edges of this edge set\n" + "The \"pull_...\" methods are similar to \"select_...\" but work the opposite way: they " + "select shapes from the argument region rather than self. In a deep (hierarchical) context " + "the output region will be hierarchically aligned with self, so the \"pull_...\" methods " + "provide a way for rehierarchisation.\n" + "\n" + "@return The region after the polygons have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + + method ("pull_interacting", static_cast (&db::Edges::pull_interacting), gsi::arg ("other"), + "@brief Returns all edges of \"other\" which are interacting with polygons of this edge set\n" + "See the other \\pull_interacting version for more details.\n" + "\n" + "@return The edge collection after the edges have been selected (from other)\n" + "\n" + "Merged semantics applies for this method (see \\merged_semantics= of merged semantics)\n" + "\n" + "This method has been introduced in version 0.26.1\n" + ) + method ("inside_part", &db::Edges::inside_part, gsi::arg ("other"), "@brief Returns the parts of the edges of this edge collection which are inside the polygons of the region\n" "\n" diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc index 75e81430b..7e60ba869 100644 --- a/src/db/db/gsiDeclDbRegion.cc +++ b/src/db/db/gsiDeclDbRegion.cc @@ -1519,7 +1519,7 @@ Class decl_Region ("db", "Region", ) + method ("pull_inside", &db::Region::pull_inside, gsi::arg ("other"), "@brief Returns all polygons of \"other\" which are inside polygons of this region\n" - "The \"pull_...\" methods are similar to \"selected_...\" but work the opposite way: they " + "The \"pull_...\" methods are similar to \"select_...\" but work the opposite way: they " "select shapes from the argument region rather than self. In a deep (hierarchical) context " "the output region will be hierarchically aligned with self, so the \"pull_...\" methods " "provide a way for rehierarchisation.\n" diff --git a/src/db/unit_tests/dbDeepRegionTests.cc b/src/db/unit_tests/dbDeepRegionTests.cc index 5bdb28766..2e8aa35ab 100644 --- a/src/db/unit_tests/dbDeepRegionTests.cc +++ b/src/db/unit_tests/dbDeepRegionTests.cc @@ -1283,6 +1283,65 @@ TEST(24_TextsFromDeep) } } +TEST(25_Pull) +{ + db::Layout ly; + { + std::string fn (tl::testsrc ()); + fn += "/testdata/algo/deep_region_l1.gds"; + tl::InputStream stream (fn); + db::Reader reader (stream); + reader.read (ly); + } + + db::cell_index_type top_cell_index = *ly.begin_top_down (); + db::Cell &top_cell = ly.cell (top_cell_index); + + db::DeepShapeStore dss; + + unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0)); + unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0)); + unsigned int l6 = ly.get_layer (db::LayerProperties (6, 0)); + + db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss); + db::Region r2 (db::RecursiveShapeIterator (ly, top_cell, l2), dss); + db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss); + + { + db::Layout target; + unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), r1.pull_interacting (r2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), r1.pull_inside (r2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), r1.pull_overlapping (r2)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (20, 0)), r2.pull_interacting (r6)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), r2.pull_inside (r6)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), r2.pull_overlapping (r6)); + + EXPECT_EQ (r2.pull_interacting (r6).is_merged (), true); + + CHECKPOINT(); + db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au25a.gds"); + } + + db::Edges r1e = r1.edges (); + + { + db::Layout target; + unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), r6); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), r1e); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), r6.pull_interacting (r1e)); + + EXPECT_EQ (r6.pull_interacting (r1e).is_merged (), true); + + CHECKPOINT(); + db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au25b.gds"); + } +} + TEST(100_Integration) { db::Layout ly; @@ -1433,3 +1492,4 @@ TEST(issue_277) r.set_min_coherence (false); // needs to merge again EXPECT_EQ (r.sized (1).merged (false, 1).to_string (), ""); } + diff --git a/src/db/unit_tests/dbRegion.cc b/src/db/unit_tests/dbRegion.cc index 31d939d4a..cca3d4d08 100644 --- a/src/db/unit_tests/dbRegion.cc +++ b/src/db/unit_tests/dbRegion.cc @@ -391,7 +391,31 @@ TEST(10c) EXPECT_EQ (r.to_string (), "(-100,-100;-100,0;0,0;0,200;100,200;100,0;0,0;0,-100)"); } -TEST(11) +TEST(10d) +{ + db::Region r; + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), ""); + r.insert (db::Box (db::Point (0, 0), db::Point (100, 200))); + r.insert (db::Box (db::Point (-100, -100), db::Point (0, 0))); + r.set_merged_semantics (true); + r.set_min_coherence (false); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), "(20,20;20,30;30,30;30,20)"); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-20, -20), db::Point (30, 30)))).to_string (), "(-20,-20;-20,30;30,30;30,-20)"); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-200, -200), db::Point (-190, -190)))).to_string (), ""); + + r.clear (); + r.insert(db::Box (db::Point (1000, 0), db::Point (6000, 4000))); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000)))).to_string (), "(0,3999;0,6000;1001,6000;1001,3999)"); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000))).pull_overlapping (r).to_string (), "(1000,0;1000,4000;6000,4000;6000,0)"); +} + +TEST(11) { db::Box bb[3] = { db::Box (db::Point (0, 0), db::Point (10, 10)), db::Box (), db::Box (db::Point (20, 20), db::Point (40, 50)) }; EXPECT_EQ (db::Region (bb + 0, bb + 3).to_string (), "(0,0;0,10;10,10;10,0);(20,20;20,50;40,50;40,20)"); @@ -861,7 +885,33 @@ TEST(18c) EXPECT_EQ (r.selected_not_interacting (rr).to_string (), ""); } -TEST(19) +TEST(18d) +{ + db::Region r; + r.set_merged_semantics (false); + r.insert (db::Box (db::Point (0, 0), db::Point (10, 10))); + r.insert (db::Box (db::Point (20, 30), db::Point (40, 50))); + r.insert (db::Box (db::Point (50, 10), db::Point (70, 30))); + r.insert (db::Box (db::Point (70, 60), db::Point (90, 80))); + r.insert (db::Box (db::Point (0, 60), db::Point (60, 80))); + r.insert (db::Box (db::Point (0, 100), db::Point (30, 130))); + + db::Region rr; + rr.insert (db::Box (db::Point (10, 0), db::Point (20, 10))); + rr.insert (db::Box (db::Point (10, 10), db::Point (50, 90))); + rr.insert (db::Box (db::Point (10, 110), db::Point (20, 120))); + + EXPECT_EQ (r.pull_inside (rr).to_string (), "(10,110;10,120;20,120;20,110)"); + + EXPECT_EQ (r.pull_interacting (rr).to_string (), "(10,0;10,90;50,90;50,10;20,10;20,0);(10,110;10,120;20,120;20,110)"); + EXPECT_EQ (r.pull_overlapping (rr).to_string (), "(10,0;10,90;50,90;50,10;20,10;20,0);(10,110;10,120;20,120;20,110)"); + + rr.set_merged_semantics (false); + EXPECT_EQ (r.pull_interacting (rr).to_string (), "(10,0;10,10;20,10;20,0);(10,10;10,90;50,90;50,10);(10,110;10,120;20,120;20,110)"); + EXPECT_EQ (r.pull_overlapping (rr).to_string (), "(10,10;10,90;50,90;50,10);(10,110;10,120;20,120;20,110)"); +} + +TEST(19) { db::Region r1; r1.insert (db::Box (db::Point (0, 0), db::Point (10, 20))); diff --git a/src/tl/tl/tl.pro b/src/tl/tl/tl.pro index 39184f182..c63c2ec55 100644 --- a/src/tl/tl/tl.pro +++ b/src/tl/tl/tl.pro @@ -102,7 +102,8 @@ HEADERS = \ tlList.h \ tlEquivalenceClusters.h \ tlUniqueName.h \ - tlRecipe.h + tlRecipe.h \ + tlSelect.h equals(HAVE_CURL, "1") { diff --git a/src/tl/tl/tlSelect.h b/src/tl/tl/tlSelect.h new file mode 100644 index 000000000..e7ae4c3be --- /dev/null +++ b/src/tl/tl/tlSelect.h @@ -0,0 +1,58 @@ + +/* + + KLayout Layout Viewer + Copyright (C) 2006-2019 Matthias Koefferlein + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + + +#ifndef HDR_tlSelect +#define HDR_tlSelect + +#include "tlCommon.h" + +namespace tl +{ + +template +struct try_assign +{ + bool operator() (Q &, const X &) { return false; } +}; + +template +struct try_assign +{ + bool operator() (Q &q, const Q &x) { q = x; return true; } +}; + +/** + * @brief Copies either value a or b into q, whichever type matches + * + * Returns true, if type A or B match with Q and q has been assigned. + */ +template +bool select (Q &q, const A &a, const B &b) +{ + return try_assign () (q, a) || try_assign () (q, b); +} + +} + +#endif + From e1d77a1476395dc4a294fc04a6f810020aef270f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 3 Oct 2019 13:08:37 +0200 Subject: [PATCH 05/10] pull_interacting for edges/edges and edges/regions, some enhancements and bug fixes Bug fixes: - use dist 1 to cover touching case properly in local processor - handling of raw mode and is_merged state Additional tests --- src/db/db/dbDeepEdges.cc | 26 ++++- src/db/db/dbDeepRegion.cc | 36 ++++-- src/db/db/dbHierProcessor.cc | 1 + src/db/unit_tests/dbDeepEdgesTests.cc | 133 ++++++++++++++++++++++ src/db/unit_tests/dbDeepRegionTests.cc | 118 ++++++++++++++++++- src/db/unit_tests/dbEdges.cc | 34 +++++- src/db/unit_tests/dbRegion.cc | 48 ++++---- src/drc/drc/built-in-macros/_drc_layer.rb | 5 +- testdata/algo/deep_edges_au10.gds | Bin 0 -> 7012 bytes testdata/algo/deep_edges_au8.gds | Bin 4010 -> 15242 bytes testdata/algo/deep_region_au14a.gds | Bin 2778 -> 8730 bytes testdata/algo/deep_region_au14b.gds | Bin 1666 -> 2514 bytes testdata/algo/deep_region_au25a.gds | Bin 0 -> 6490 bytes testdata/algo/deep_region_au25b.gds | Bin 0 -> 13346 bytes 14 files changed, 362 insertions(+), 39 deletions(-) create mode 100644 testdata/algo/deep_edges_au10.gds create mode 100644 testdata/algo/deep_region_au25a.gds create mode 100644 testdata/algo/deep_region_au25b.gds diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index 7aa1b108d..220b2c212 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -1114,6 +1114,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { db::box_scanner scanner; @@ -1183,6 +1189,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { db::box_scanner scanner; @@ -1229,6 +1241,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { db::box_scanner2 scanner; @@ -1319,6 +1337,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout *layout, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { db::box_scanner2 scanner; @@ -1448,7 +1472,7 @@ EdgesDelegate *DeepEdges::pull_generic (const Edges &other) const } const db::DeepLayer &edges = deep_layer (); - const db::DeepLayer &other_edges = merged_deep_layer (); + const db::DeepLayer &other_edges = other_deep->merged_deep_layer (); DeepLayer dl_out (other_edges.derived ()); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index c189c9c46..9742628dc 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -919,7 +919,7 @@ DeepRegion::edges (const EdgeFilterBase *filter) const } - res->set_is_merged (true); + res->set_is_merged (merged_semantics () || is_merged ()); return res.release (); } @@ -1282,7 +1282,7 @@ DeepRegion::sized (coord_type d, unsigned int mode) const // in case of negative sizing the output polygons will still be merged (on positive sizing they might // overlap after size and are not necessarily merged) - if (d < 0) { + if (d < 0 && (merged_semantics () || is_merged ())) { res->set_is_merged (true); } @@ -1367,7 +1367,7 @@ DeepRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const // in case of negative sizing the output polygons will still be merged (on positive sizing they might // overlap after size and are not necessarily merged) - if (dx < 0 && dy < 0) { + if (dx < 0 && dy < 0 && (merged_semantics () || is_merged ())) { res->set_is_merged (true); } @@ -1563,6 +1563,11 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + return m_touching ? 1 : 0; + } + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { m_ep.clear (); @@ -1641,6 +1646,11 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + return m_touching ? 1 : 0; + } + virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { m_ep.clear (); @@ -1752,6 +1762,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout *layout, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { m_scanner.clear (); @@ -1812,6 +1828,12 @@ public: // .. nothing yet .. } + virtual db::Coord dist () const + { + // touching is sufficient + return 1; + } + virtual void compute_local (db::Layout *, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { m_scanner.clear (); @@ -1887,7 +1909,7 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to proc.run (&op, polygons.layer (), other_polygons.layer (), dl_out.layer ()); db::DeepRegion *res = new db::DeepRegion (dl_out); - if (! split_after) { + if (! split_after && ((mode < 0 && other.merged_semantics ()) || other.is_merged ()) && (merged_semantics () || is_merged ())) { res->set_is_merged (true); } return res; @@ -1925,7 +1947,7 @@ DeepRegion::selected_interacting_generic (const Edges &other, bool inverse) cons db::DeepRegion *res = new db::DeepRegion (dl_out); if (! split_after) { - res->set_is_merged (true); + res->set_is_merged (other.is_merged () && (merged_semantics () || is_merged ())); } return res; } @@ -1963,7 +1985,7 @@ DeepRegion::pull_generic (const Region &other, int mode, bool touching) const proc.run (&op, polygons.layer (), other_polygons.layer (), dl_out.layer ()); db::DeepRegion *res = new db::DeepRegion (dl_out); - if (! split_after) { + if (! split_after && ((mode < 0 && merged_semantics ()) || is_merged ()) && (other.merged_semantics () || other.is_merged ())) { res->set_is_merged (true); } return res; @@ -1994,7 +2016,7 @@ DeepRegion::pull_generic (const Edges &other) const proc.run (&op, polygons.layer (), other_edges.layer (), dl_out.layer ()); db::DeepEdges *res = new db::DeepEdges (dl_out); - res->set_is_merged (true); + res->set_is_merged (is_merged () && (other.merged_semantics () || other.is_merged ())); return res; } diff --git a/src/db/db/dbHierProcessor.cc b/src/db/db/dbHierProcessor.cc index d53769649..8b9de21bf 100644 --- a/src/db/db/dbHierProcessor.cc +++ b/src/db/db/dbHierProcessor.cc @@ -1620,6 +1620,7 @@ template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; +template class DB_PUBLIC local_processor; template class DB_PUBLIC local_processor; } diff --git a/src/db/unit_tests/dbDeepEdgesTests.cc b/src/db/unit_tests/dbDeepEdgesTests.cc index 9fcfed52a..2fa7f90d2 100644 --- a/src/db/unit_tests/dbDeepEdgesTests.cc +++ b/src/db/unit_tests/dbDeepEdgesTests.cc @@ -367,6 +367,20 @@ TEST(8_SelectInteracting) db::Edges e2 = r2.edges (); db::Edges e3 = r3.edges (); + db::Region r2f (db::RecursiveShapeIterator (ly, top_cell, l2)); + db::Region r3f (db::RecursiveShapeIterator (ly, top_cell, l3)); + db::Edges e2f = r2f.edges (); + db::Edges e3f = r3f.edges (); + + db::Region r2r = r2; + r2r.set_merged_semantics (false); + db::Region r3r = r3; + r3r.set_merged_semantics (false); + db::Edges e2r = r2r.edges (); + e2r.set_merged_semantics (false); + db::Edges e3r = r3r.edges (); + e3r.set_merged_semantics (false); + db::Layout target; unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); @@ -383,6 +397,46 @@ TEST(8_SelectInteracting) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), e3.selected_interacting (r2)); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 0)), e3.selected_not_interacting (r2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), e2.selected_interacting (e3f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), e2.selected_not_interacting (e3f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), e3.selected_interacting (e2f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 0)), e3.selected_not_interacting (e2f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), e2.selected_interacting (r3f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), e2.selected_not_interacting (r3f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), e3.selected_interacting (r2f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (43, 0)), e3.selected_not_interacting (r2f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (50, 0)), e2r.selected_interacting (e3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 0)), e2r.selected_not_interacting (e3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 0)), e3r.selected_interacting (e2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 0)), e3r.selected_not_interacting (e2)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (60, 0)), e2r.selected_interacting (r3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (61, 0)), e2r.selected_not_interacting (r3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (62, 0)), e3r.selected_interacting (r2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (63, 0)), e3r.selected_not_interacting (r2)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (70, 0)), e2.selected_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (71, 0)), e2.selected_not_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (72, 0)), e3.selected_interacting (e2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (73, 0)), e3.selected_not_interacting (e2r)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (80, 0)), e2.selected_interacting (r3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (81, 0)), e2.selected_not_interacting (r3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (82, 0)), e3.selected_interacting (r2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (83, 0)), e3.selected_not_interacting (r2r)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (90, 0)), e2r.selected_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (91, 0)), e2r.selected_not_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (92, 0)), e3r.selected_interacting (e2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (93, 0)), e3r.selected_not_interacting (e2r)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (100, 0)), e2r.selected_interacting (r3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (101, 0)), e2r.selected_not_interacting (r3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (102, 0)), e3r.selected_interacting (r2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (103, 0)), e3r.selected_not_interacting (r2r)); + CHECKPOINT(); db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_edges_au8.gds"); } @@ -435,3 +489,82 @@ TEST(9_DRCChecks) } } +TEST(10_PullInteracting) +{ + db::Layout ly; + { + std::string fn (tl::testsrc ()); + fn += "/testdata/algo/deep_region_l1.gds"; + tl::InputStream stream (fn); + db::Reader reader (stream); + reader.read (ly); + } + + db::cell_index_type top_cell_index = *ly.begin_top_down (); + db::Cell &top_cell = ly.cell (top_cell_index); + + db::DeepShapeStore dss; + + unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0)); + unsigned int l3 = ly.get_layer (db::LayerProperties (3, 0)); + + db::Region r2 (db::RecursiveShapeIterator (ly, top_cell, l2), dss); + db::Region r2r = r2; + r2r.set_merged_semantics (false); + db::Region r2f (db::RecursiveShapeIterator (ly, top_cell, l2)); + db::Region r3 (db::RecursiveShapeIterator (ly, top_cell, l3), dss); + db::Region r3r = r3; + r3r.set_merged_semantics (false); + db::Region r3f (db::RecursiveShapeIterator (ly, top_cell, l3)); + db::Edges e2 = r2.edges (); + db::Edges e2r = r2r.edges (); + e2r.set_merged_semantics (false); + db::Edges e2f = r2f.edges (); + db::Edges e3 = r3.edges (); + db::Edges e3r = r3r.edges (); + e3r.set_merged_semantics (false); + db::Edges e3f = r3f.edges (); + + db::Layout target; + unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), r2); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (3, 0)), r3); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), e2.pull_interacting (e3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), e3.pull_interacting (e2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), e2.pull_interacting (e3f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (13, 0)), e3.pull_interacting (e2f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (14, 0)), e2.pull_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (15, 0)), e3.pull_interacting (e2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (16, 0)), e2r.pull_interacting (e3)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (17, 0)), e3r.pull_interacting (e2)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (18, 0)), e2r.pull_interacting (e3r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (19, 0)), e3r.pull_interacting (e2r)); + + db::Region o; + e2.pull_interacting (o, r3); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (20, 0)), o); + e3.pull_interacting (o, r2); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), o); + e2.pull_interacting (o, r3f); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), o); + e3.pull_interacting (o, r2f); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 0)), o); + e2.pull_interacting (o, r3r); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (24, 0)), o); + e3.pull_interacting (o, r2r); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 0)), o); + e2r.pull_interacting (o, r3); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 0)), o); + e3r.pull_interacting (o, r2); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 0)), o); + e2r.pull_interacting (o, r3r); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (28, 0)), o); + e3r.pull_interacting (o, r2r); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (29, 0)), o); + + CHECKPOINT(); + db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_edges_au10.gds"); +} + diff --git a/src/db/unit_tests/dbDeepRegionTests.cc b/src/db/unit_tests/dbDeepRegionTests.cc index 2e8aa35ab..e6d3b7dc3 100644 --- a/src/db/unit_tests/dbDeepRegionTests.cc +++ b/src/db/unit_tests/dbDeepRegionTests.cc @@ -784,6 +784,15 @@ TEST(14_Interacting) db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss); db::Region r2 (db::RecursiveShapeIterator (ly, top_cell, l2), dss); db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss); + db::Region r1f (db::RecursiveShapeIterator (ly, top_cell, l1)); + db::Region r2f (db::RecursiveShapeIterator (ly, top_cell, l2)); + db::Region r6f (db::RecursiveShapeIterator (ly, top_cell, l6)); + db::Region r1r = r1; + r1r.set_merged_semantics (false); + db::Region r2r = r2; + r2r.set_merged_semantics (false); + db::Region r6r = r6; + r6r.set_merged_semantics (false); { db::Layout target; @@ -807,13 +816,57 @@ TEST(14_Interacting) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 0)), r6.selected_overlapping (r1)); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 0)), r6.selected_not_overlapping (r1)); - EXPECT_EQ (r2.selected_interacting (r1).is_merged (), true); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), r2.selected_interacting (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r2.selected_not_interacting (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r2.selected_inside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 0)), r2.selected_not_inside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (34, 0)), r2.selected_outside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (35, 0)), r2.selected_not_outside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (36, 0)), r2.selected_overlapping (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (37, 0)), r2.selected_not_overlapping (r1f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r6.selected_interacting (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r6.selected_not_interacting (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r6.selected_inside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (43, 0)), r6.selected_not_inside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (44, 0)), r6.selected_outside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (45, 0)), r6.selected_not_outside (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (46, 0)), r6.selected_overlapping (r1f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (47, 0)), r6.selected_not_overlapping (r1f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (50, 0)), r2r.selected_interacting (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 0)), r2r.selected_not_interacting (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 0)), r2r.selected_inside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 0)), r2r.selected_not_inside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (54, 0)), r2r.selected_outside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (55, 0)), r2r.selected_not_outside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (56, 0)), r2r.selected_overlapping (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (57, 0)), r2r.selected_not_overlapping (r1r)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (60, 0)), r6r.selected_interacting (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (61, 0)), r6r.selected_not_interacting (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (62, 0)), r6r.selected_inside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (63, 0)), r6r.selected_not_inside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (64, 0)), r6r.selected_outside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (65, 0)), r6r.selected_not_outside (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (66, 0)), r6r.selected_overlapping (r1r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (67, 0)), r6r.selected_not_overlapping (r1r)); + + EXPECT_EQ (r2.selected_interacting (r1).is_merged (), false); + EXPECT_EQ (r2.selected_interacting (r1.merged ()).is_merged (), true); + EXPECT_EQ (r2.selected_inside (r1).is_merged (), true); + EXPECT_EQ (r2r.selected_interacting (r1).is_merged (), false); + EXPECT_EQ (r2.selected_interacting (r1r).is_merged (), false); + EXPECT_EQ (r2r.selected_interacting (r1r).is_merged (), false); CHECKPOINT(); db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au14a.gds"); } db::Edges r1e = r1.edges (); + db::Edges r1ef = r1f.edges (); + db::Edges r1er = r1r.edges (); + r1er.set_merged_semantics (false); { db::Layout target; @@ -823,8 +876,15 @@ TEST(14_Interacting) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), r1e); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), r6.selected_interacting (r1e)); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (13, 0)), r6.selected_not_interacting (r1e)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), r6.selected_interacting (r1ef)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 0)), r6.selected_not_interacting (r1ef)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r6r.selected_interacting (r1er)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 0)), r6r.selected_not_interacting (r1er)); EXPECT_EQ (r6.selected_interacting (r1e).is_merged (), true); + EXPECT_EQ (r6.selected_interacting (r1er).is_merged (), false); + EXPECT_EQ (r6r.selected_interacting (r1e).is_merged (), false); + EXPECT_EQ (r6r.selected_interacting (r1er).is_merged (), false); CHECKPOINT(); db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au14b.gds"); @@ -857,7 +917,6 @@ TEST(15_Filtered) EXPECT_EQ (af1_filtered.is_merged (), true); EXPECT_EQ (af1_else.is_merged (), true); - { db::Layout target; unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); @@ -1306,6 +1365,15 @@ TEST(25_Pull) db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss); db::Region r2 (db::RecursiveShapeIterator (ly, top_cell, l2), dss); db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss); + db::Region r1f (db::RecursiveShapeIterator (ly, top_cell, l1)); + db::Region r2f (db::RecursiveShapeIterator (ly, top_cell, l2)); + db::Region r6f (db::RecursiveShapeIterator (ly, top_cell, l6)); + db::Region r1r = r1; + r1r.set_merged_semantics (false); + db::Region r2r = r2; + r2r.set_merged_semantics (false); + db::Region r6r = r6; + r6r.set_merged_semantics (false); { db::Layout target; @@ -1319,13 +1387,41 @@ TEST(25_Pull) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), r2.pull_inside (r6)); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), r2.pull_overlapping (r6)); - EXPECT_EQ (r2.pull_interacting (r6).is_merged (), true); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), r1.pull_interacting (r2f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.pull_inside (r2f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r1.pull_overlapping (r2f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r2.pull_interacting (r6f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r2.pull_inside (r6f)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r2.pull_overlapping (r6f)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (50, 0)), r1r.pull_interacting (r2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 0)), r1r.pull_inside (r2r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 0)), r1r.pull_overlapping (r2r)); + + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (60, 0)), r2r.pull_interacting (r6r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (61, 0)), r2r.pull_inside (r6r)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (62, 0)), r2r.pull_overlapping (r6r)); + + EXPECT_EQ (r2.pull_inside (r6).is_merged (), true); + EXPECT_EQ (r2.pull_interacting (r6).is_merged (), false); + EXPECT_EQ (r2r.pull_interacting (r6).is_merged (), false); + EXPECT_EQ (r2.pull_interacting (r6r).is_merged (), false); + EXPECT_EQ (r2r.pull_interacting (r6r).is_merged (), false); CHECKPOINT(); db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au25a.gds"); } db::Edges r1e = r1.edges (); + db::Edges r1ef = r1f.edges (); + db::Edges r1er = r1r.edges (); + r1er.set_merged_semantics (false); + + db::Edges r6e = r6.edges (); + db::Edges r6ef = r6f.edges (); + db::Edges r6er = r6r.edges (); + r6er.set_merged_semantics (false); { db::Layout target; @@ -1334,8 +1430,22 @@ TEST(25_Pull) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), r6); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), r1e); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), r6.pull_interacting (r1e)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (13, 0)), r6.pull_interacting (r1ef)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (14, 0)), r6r.pull_interacting (r1e)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (15, 0)), r6.pull_interacting (r1er)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (16, 0)), r6r.pull_interacting (r1er)); - EXPECT_EQ (r6.pull_interacting (r1e).is_merged (), true); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 0)), r1.pull_interacting (r6e)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 0)), r1.pull_interacting (r6ef)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (24, 0)), r1r.pull_interacting (r6e)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 0)), r1.pull_interacting (r6er)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 0)), r1r.pull_interacting (r6er)); + + EXPECT_EQ (r6.pull_interacting (r1e).is_merged (), false); + EXPECT_EQ (r6.merged ().pull_interacting (r1e).is_merged (), true); + EXPECT_EQ (r6r.pull_interacting (r1er).is_merged (), false); + EXPECT_EQ (r6r.pull_interacting (r1e).is_merged (), false); + EXPECT_EQ (r6.pull_interacting (r1er).is_merged (), false); CHECKPOINT(); db::compare_layouts (_this, target, tl::testsrc () + "/testdata/algo/deep_region_au25b.gds"); diff --git a/src/db/unit_tests/dbEdges.cc b/src/db/unit_tests/dbEdges.cc index 1e4b27501..86d00817e 100644 --- a/src/db/unit_tests/dbEdges.cc +++ b/src/db/unit_tests/dbEdges.cc @@ -854,8 +854,40 @@ TEST(22) EXPECT_EQ ((e & ee).to_string (), "(400,0;-2000,0);(500,-174;400,0);(1000,0;900,-173);(4000,0;1000,0)"); } -// GitHub issue #72 (Edges/Region NOT issue) TEST(23) +{ + db::Edges e; + e.insert (db::Edge (db::Point (0, 0), db::Point (0, 200))); + e.insert (db::Edge (db::Point (250, 200), db::Point (300, 0))); + + db::Edges e2; + e2.insert (db::Edge (db::Point (0, 100), db::Point (100, 100))); + + EXPECT_EQ (e2.pull_interacting (e).to_string (), "(0,0;0,200)"); + + e2.clear (); + e2.insert (db::Edge (db::Point (0, 100), db::Point (0, 100))); + + EXPECT_EQ (e2.pull_interacting (e).to_string (), "(0,0;0,200)"); + + e2.clear (); + e2.insert (db::Edge (db::Point (100, 0), db::Point (0, 0))); + + EXPECT_EQ (e2.pull_interacting (e).to_string (), "(0,0;0,200)"); + + e2.clear (); + e2.insert (db::Edge (db::Point (-100, -1), db::Point (100, -1))); + + EXPECT_EQ (e2.pull_interacting (e).to_string (), ""); + + e2.clear (); + e2.insert (db::Edge (db::Point (-100, 0), db::Point (100, 0))); + + EXPECT_EQ (e2.pull_interacting (e).to_string (), "(0,0;0,200)"); +} + +// GitHub issue #72 (Edges/Region NOT issue) +TEST(100) { db::Edges e; e.insert (db::Edge (0, 0, 0, 1000)); diff --git a/src/db/unit_tests/dbRegion.cc b/src/db/unit_tests/dbRegion.cc index cca3d4d08..9f1a4b40f 100644 --- a/src/db/unit_tests/dbRegion.cc +++ b/src/db/unit_tests/dbRegion.cc @@ -391,30 +391,6 @@ TEST(10c) EXPECT_EQ (r.to_string (), "(-100,-100;-100,0;0,0;0,200;100,200;100,0;0,0;0,-100)"); } -TEST(10d) -{ - db::Region r; - EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), ""); - r.insert (db::Box (db::Point (0, 0), db::Point (100, 200))); - r.insert (db::Box (db::Point (-100, -100), db::Point (0, 0))); - r.set_merged_semantics (true); - r.set_min_coherence (false); - EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), "(20,20;20,30;30,30;30,20)"); - EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-20, -20), db::Point (30, 30)))).to_string (), "(-20,-20;-20,30;30,30;30,-20)"); - EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-200, -200), db::Point (-190, -190)))).to_string (), ""); - - r.clear (); - r.insert(db::Box (db::Point (1000, 0), db::Point (6000, 4000))); - EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000)))).to_string (), ""); - EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); - EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000)))).to_string (), ""); - EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000))).pull_overlapping (r).to_string (), ""); - EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000)))).to_string (), ""); - EXPECT_EQ (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); - EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000)))).to_string (), "(0,3999;0,6000;1001,6000;1001,3999)"); - EXPECT_EQ (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000))).pull_overlapping (r).to_string (), "(1000,0;1000,4000;6000,4000;6000,0)"); -} - TEST(11) { db::Box bb[3] = { db::Box (db::Point (0, 0), db::Point (10, 10)), db::Box (), db::Box (db::Point (20, 20), db::Point (40, 50)) }; @@ -1391,6 +1367,30 @@ TEST(30c) EXPECT_EQ (r.to_string (), "(-100,-100;-100,0;0,0;0,200;100,200;100,0;0,0;0,-100)"); } +TEST(31) +{ + db::Region r; + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), ""); + r.insert (db::Box (db::Point (0, 0), db::Point (100, 200))); + r.insert (db::Box (db::Point (-100, -100), db::Point (0, 0))); + r.set_merged_semantics (true); + r.set_min_coherence (false); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (20, 20), db::Point (30, 30)))).to_string (), "(20,20;20,30;30,30;30,20)"); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-20, -20), db::Point (30, 30)))).to_string (), "(-20,-20;-20,30;30,30;30,-20)"); + EXPECT_EQ (r.pull_interacting (db::Region (db::Box (db::Point (-200, -200), db::Point (-190, -190)))).to_string (), ""); + + r.clear (); + r.insert(db::Box (db::Point (1000, 0), db::Point (6000, 4000))); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4000), db::Point (1000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000)))).to_string (), ""); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 4001), db::Point (2000, 6000))).pull_overlapping (r).to_string (), ""); + EXPECT_EQ (r.pull_overlapping (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000)))).to_string (), "(0,3999;0,6000;1001,6000;1001,3999)"); + EXPECT_EQ (db::Region (db::Box (db::Point (0, 3999), db::Point (1001, 6000))).pull_overlapping (r).to_string (), "(1000,0;1000,4000;6000,4000;6000,0)"); +} + TEST(100_Processors) { db::Region r; diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 4b5085a04..8d4507afd 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -1681,10 +1681,11 @@ CODE %w(pull_interacting pull_overlapping pull_inside).each do |f| eval <<"CODE" def #{f}(other) - requires_region("#{f}") if :#{f} != :pull_interacting - requires_same_type(other, "#{f}") + requires_region("#{f}") + other.requires_region("#{f}") else + requires_edges_or_region("#{f}") other.requires_edges_or_region("#{f}") end DRCLayer::new(@engine, @engine._tcmd(@data, 0, @data.class, :#{f}, other.data)) diff --git a/testdata/algo/deep_edges_au10.gds b/testdata/algo/deep_edges_au10.gds new file mode 100644 index 0000000000000000000000000000000000000000..13ded556bf1632921542df723bc3894c87a3fd81 GIT binary patch literal 7012 zcmc&(zi%By5FX!qIlsKv&Wq#l!x&@=3ZzIu1Sz5bB`6YDLu+aw_M2~J*HlwgeM37d z)#^i<(uhvc1)8Nl)1<1e?R`SDH9GO}m7gwse&@I253l}y;r1`z9@5SUA2+S*!-FgP zUlENbMD=<_71bLR5uKlnn&$ZrP4nU%SfZ8tMAgq~^*bz$&$Reaif?W<&EF52rnyNp z+T~e)RIA@%1%FcfZ$^CmHdZk?J>vg)Uo+SYJq!ik>MQsTYmL6ndcHb49)v=C+_-GN zY+T~GypiHx;#_u8yorg4ti~)m*EduAGX7Vo$iPWm@9ls6K8>eD(@kaL8rb*Z`*8Ll z_Wh&NV_9Q1T5qr1AmSOAtGApP%Y&B?>?z8XL1=D8xY43_BDhk=~fWc2uIcLdkcmaOl3|R1nQ-eYh_{@qWUY^4X*+ z;jT~^!KxRcq9+$4f69wI$8VeHrAU3JQQK*25?lRbA2^Uq)e59=a%;E_7HB-SXK>nqm{Mi25O>>cgGb~MWM74z#z z?9dg8FR6BIb&4A0`ih+2gBh5??G?W0^&vA1z=ti_t*qC`dIrqIz|7sZia6?GKbMHTh1a686%Il56m zA@i-W#T(aFa5)|PiO;pPMW>J7-;CPMd}aE|N^$?!ka09Ny$k;ebE@an;xK-=%h z%}H-cnzL%PZngImIdwDtxwyacm|r^hPEXX^;m7qEyz)MaXKy}4{44)+eAWMd72j9? zWqb{O>G;0Z`j?zax`n_`yne;5sE>aM-l~SpY#q<|+rcY;rC-F$7v@o3x0NdL!{E_} z!B5+lDbMx0_Gw+b>_6l>-}VQ-cqIOT4}G9kxh%i6*EarNZ{sh07y1*dA?d&7`IUAc zas37_=Wq0Co?mG%(ubF>qpcaSyW%cOc?FxDU*_NHL+t57muCB}=wDwKm)1|j6Z)vO z?}cfAej5Mbr8S(N>b6?#Ueu~?t1bIa=8avr+5gh|0zRX1igoit_ZR1ve3JKoW$HtV z(;G`%fA+d-`4it$=KM>$+Ad!EbFp3i&&SjHm-xqc;HTaSLf%N-*6$tuCU{%lG!NUn z6n^`G<3D@d#<@W6VDlH-_PdFHf*1XPUPFg+{Q`bIp2jbG9k=H< zApbMG?sJI#EO=e#zwaFE?SJ|OH_QA+KG~GF_O hcQ5;67jOAvA3gBLK6}p}JGkMGT|a8aID+Fb{R67gj2Zv{ literal 0 HcmV?d00001 diff --git a/testdata/algo/deep_edges_au8.gds b/testdata/algo/deep_edges_au8.gds index 16aa28b5ceca33384b779badcfdf991f480334bb..b58194b243a50d718c2afeb43a35bc927cae2ef7 100644 GIT binary patch literal 15242 zcmb80&uUPoQ+wp#>#4r3UltywWiLKEu(t2 zB$fK7v#t$oEAdi$U6S%X>G-l^>jK%b2vlR+mZX9$8L#)Xtt4yOwj_n|x=6NUyd;J3 z+SIlnUXsFiT_RgDUXsFi-PE=qUXsFieMz=tyd;J3+S9fmUXsFieMPopyd;J3`dZt9 zcu5N5^$ppQ@sbqA>z1|!@sbqA>o(bv@sia1cr7~IX{SZ8wf*@yH<>v%J7&A?QrOp? zf9t=|@1S89o&R*UKj&$&zHrAm{|$bJx+lIN`9JnO^da_;EyvV8g|jKiq-zr)+rWWD#UA!it= zr9UF&$M){}f?Ai&?0_Cb9n7ru$}n38Gpp8>cmro>p6_{MNv$hnpSS0;CX6eqof%3h z=6cAHkn@M3;@eQ5l8gddp`KP&{n{S)-gzYzt0-juX!)>|Ur$wo-Ye}WgRM}({%ySS zp;cO4Da+dPq0U?N+O`E$Qtbn&5ZzP@ax*lKhbZ@aC}$XRLgRWlv9t~$Ej z^M{>b%&1=W!VK#Qsd6L9d7u(C9=I;k^13<)QH_F!`dWO@$zD0bRR25Fn$BL(d8DMy zOA2*9LkXQfuGWP*FDcad3}rJ+bY4&H2b~8BbRHAa+3{t2Cz)WMt3Je>y$ zbRHPE3Uxk1nTjUw^RKCOq0UPRbv{Gc3=^G~6zcpb zwJy|oNukaoC3PMs(0NIr&Sxm0^FV>lpVpoSod*hZ9w^XxNukaI1v)P&)On(`&Pxh) zUQ(#@K!MH!1v)P&)cFi0bpDLaUeI}@q|QqUbv{FxiY7XLR;>$lUQ(#@8Ommu=)9y* z=igB4LYO4|X=Yay9mlW!Jh7vjt6zKe$+Vi0EK!MH!1v)P&)Onyl=Ou+YPn6bq zNukb53UwYR(0QOh=Ou+YpP_`#Z>a1IxzWCz=yYvBb?-QaQL&cejYe~WQJ*?WTOnR{ z?@`@@w9mdSsCC6Cw{A}cQ8A;MJDbkBz!ubUh7#w!l8Ut)Z~mlr3I|nPIqfvKc1bsI+Bg4OTJ3*41cK9k)Tb5h;sTa;m?n@(}9_D5x(< zq34n6+%LAhAt}s5NntHtQa;35mK4^qq~fiq-HaqRJ{ih#V<;8t%W^)cFKG*_5-6yz z3}p(CRHdY_zA}{gFsZMPbZ$VOf|Tr2B!zuShO#ao=~J$%bzz?(DeO}+l+7^dQzV6b z$~CpFSj!>G;Y~KVHIo$fDM-ma1t{oKBo(wb-l)#GU(QgXPXP-0lr8Of=u?1#cN?If zPmxsIQ{p{Qh+Ahj2MYQWNi`Z($F05V5vBVSNnxKNse=lcckcic^eI3=pCT!H>$2(` z8n5op7j>xXI(tFqk&-$uDb)E4Wh$EJ{AX%isPmFSozGAl-_V{1od*hZ9w^XxNukaI1v)P&)On(`&P&R&HmtAr zZX+qwd7wb&fdZYE6zY7261{``Y4Pa0cmmTqJpc;&Wl6bRvW+>~wk{(u4v6jVo6jAy-DnnUDCH=CbLX_osl%$%R4`*OW=bNEyhC``F zqiPLqzl%y+k+OIt{qilfJ79eQ1@$E<^gL2lDLn;{6y~9%g7#W&^v;%VD<4M17PTxX ztYt}IEoUgpjii<(<$b8DGDBI;Cshd)oJVCSvz64Bq_Dm+l=;x=EAzW4{R-_P@1IPM#ott^ezU|!GW@A(JAF30uAi;l*UwJw>t|;_(9h1_)6XtG)X%QHqo3{E P(a-k&Y@T@!PA2YuXzl{x delta 535 zcmaixy-UMT6vbadOl{0(QweDr1F0^>p_CFqq;_?%Ra``Y=o(N0;EtD=>XaLacbJZ2@dvLXgF8>udanur{oJ5qhrRU2L1!Lcl2S12u7E_&ok ss)wi_q4cZ>#pQm$`))H8j)@jAOon5k`~=M!#VIBdgz?{h?JehGpFT&C>i_@% diff --git a/testdata/algo/deep_region_au14a.gds b/testdata/algo/deep_region_au14a.gds index 7a3109d5096d0607c891b2d9c6b1c3717d95b9f3..8037da6ccc53df17f5fb1ea2b3717d4f1fc3e095 100644 GIT binary patch literal 8730 zcmc(kzfV*_5Xa|!@POk~B!?mzf0OtF#Q=&XilQb;yr4m1jNwn9u%NWCu(7kS(}K>% z(!zq$*w|Ru*_fDE(~3WyGjHEFw{v$--FZ2VgnTc%@3XTzJNx$SEJai--lu(qV((X~ zP>HHEKqLNd>MKU|`Kv^=QqSz%)0tcEUu|5t{&r&R#e*f<*OSdvqG)MxZs9IbxtIR> zWM34`FWj4?a)qce1gbh%isRo8N&d<^`M-T_Wur}PG+KB}#4QjNo@KPq^bFeRBZ{^a z*%#6FB9r6Niyz;J`iGrXKX6w@x$#s{-aqX6k@5qY=aGy#zVO-cPEjtZ_^RfE?QhdO z?65!n&;ItD{0_|r_kS=azf<$Uv($`)@UlMWtPO(@>Q6ud4U~Uzhm(InM1biwYOV zzn(X={F3{Bontc9(zL603QknDKkWNAu1o)2|HMDiKc^@cRs1f^2aj)em*)re)A_+T zF>WZzTgDH*Q}Z*T{fmB}Ur>~{^lwj>{R{in_y^x9|BiOqKd^805BN^`XK&8<+wb#+ z{r7<8Ilja8--DVD-oFlMKG^=@ocs~Z2lxMIPJT@D!Q(%c@+)21e_`LczQA{CeI57x zYuJBJXg+xVJ=x{?f&FxTWd92K{s7;p`5D*#4esBmF8deut?>`OQ~o{OW&gmw)j!}n z<)4Y1@i*!7&HFEH^7(%tKO*@Kr|hRB46mN)E#T(Yk6*XVs>rL^7{wv<#KaV%f-&{KWt%^6;v%cRIpZF_meR;g;{owH~ z&hZ{^&Znci>HU6ni~S9IR(~tr;BSvN`P<`7{=SxTeJkFuz7=m+-yR>fzW;I8%D1wM z^9wg_^M?iBr}hoGo7bxB0_h*_T2)=;PEy;puC|t4w|^tM?)a7Lx+#5YtNL>3OE!1& zOm^MkQZCaUp#&>t delta 197 zcmbQ`a!XW+fsKKQDS|@E%QX2RbHrpx<^z*0SvtV%oh%0?-(>ZGh_fA-{F6OlvL*Y0$&nnEa`=tg P{6SWQi4CZRg@pkC3H&8t diff --git a/testdata/algo/deep_region_au14b.gds b/testdata/algo/deep_region_au14b.gds index 85b83f54e5e979436fa4008a55b8d82627165a99..d0205019990d940f8afe77bfc2d64912f70ca8ef 100644 GIT binary patch delta 251 zcmZqTy(Fx}z{bGD6u}_F$i)7bfs28efrmkmK@OQcQAt@8yF^qE2L}TK8!r=s;>2|p z2zH)@96JMp3@c6}H?uI_V}hv{o7}||&nPze6;nN<_~cd0aD&7rXEEC|Domcmm=7em inCux9CwnmwGJ6wC4U*A1tZ?HLCIdNaK!>rgFaQ8`Ga(WH delta 146 zcmca4+{CNIz{bGD6u}_F$i)7bfr){iL7YL2ffboOQAt@8yF^rv96JMp3@c8pn_C#~ SF%eR8fvtv#4QLJv3j+W=0TMg_ diff --git a/testdata/algo/deep_region_au25a.gds b/testdata/algo/deep_region_au25a.gds new file mode 100644 index 0000000000000000000000000000000000000000..6ff7376a70d764e17420a4096a4d070364150152 GIT binary patch literal 6490 zcmc(jKTH%s6viKS$8xMEL2{rW1WEi8F&GRG35gIfB#K^6gM<)rg_VV&upm|z6vo8P z!b&aZOpK*5##qzXSQsk{6B7$7YDL$1`{r|JmK*eDxr2i5GVgxxo7;W!?(I=Px!f`h zwB6!(P0`eUsEv`ROT-dmGkX0vkxb)Za&|dntL<4@pNU82HM?R7zB$8v(+0! zg(6XKFh^wyx^hG`(w$fTKS$B;`>aH5_lRL9qF?Vg&dOXAMaQ97-@*4~ z^f!1f|5F+L4c^QDbVh%J_wqlV(cj>`{HHVe8@!kQOh$i$Z_K}gc0H-ZAegT%jZq;a z3VU#BOWk>Og6^mjs!kxE!urv0t4=iNZ(Ao)8Pu74g*LQ zy;oc5SIM0M?to%9XRib=dC2s9M#dCgnAMcxaQLOLqx4v6E>J5Ce>MfOD?LV&jJ*zk5Z&kg) zZ@=no(5yF){x+16w`K{CdIR6AdQ0Ws^Lj)6R@EE)_N(58&3f_ZZz&#q41EoXbyllC zTC<}^y@795y`}Q+dA%WjtLhDY`&DmaR=ou>zeP$hw?TP+m@A=JSM!ZIPo;R*dBQqtUB2P-f;kY1IS^{h zgZ1_+enWcRRmyYQZu2gDpzwjlev;4hv!3NV?oWzu`2M7L+=ui$hxHxz2YjpUkL}mQ z`}2=yW%aAp!hH48HF+K`_Q;cSDgH%E6^;6f@3MMUwqoIRcdWeOjty?PW5XBRv2pvU z+uF$sCYaZ-3z=FhAo z%Dj%7{Lzf{XYn5OXYn5OXYn5OXYn5OXYgM2XYhaPE3UKutUrtQs6UJMs6UHur2f=5 INTEP~0K<{cZ~y=R literal 0 HcmV?d00001 diff --git a/testdata/algo/deep_region_au25b.gds b/testdata/algo/deep_region_au25b.gds new file mode 100644 index 0000000000000000000000000000000000000000..8d0ac52ad119863ad163f8058f20a63213ad85b7 GIT binary patch literal 13346 zcmbW7zi%8>5P-+`%a_BkLv#Y$icknHf)osbNJ$D1HkOEmZBVdc3%NomQczH&NI{W; z0y>IxP^3VDg3^Tx$_S;Tph!UxiGRQa1w@eL&AxrNx696Vb9OV)?S4D&$GmTM-$r`U zYVFIpnbzzdGLW{+$$7aj{%`5GdRv?8BExp~owcv8eDKQ;$JaKFUVrfIC%ba4YjcBM zZ}-O9&c`C1zDVzMD_p-f-x85aXWCiz@6TEG>`RRzGhbv`wvuA{U88iKZ{)*Oe$S7G zsGLY^BgOQ4$nk#L33 zrf-ZZ)XquQsg2cvUZZ_JTw@rc_O<;}?5oD!Zs_}GWju8!9RE!u#n~{v-N2@pt`nj$ zwpsSirO@*Oje4ChNB2`qziR~kNod36z=zoRF3wGg>G$^K$e)U}u~5`T?`5r!{zB+= z_#0~PyLUtD`&st%D~%QE%!#NMY)TGePqVFj1oIIpS~!843v&?ZN(+I~SxU1KqAOQe zCwa?a3^`p?tO#vkk<&?OT_wt!Yt*uQH2l`-?*I_ujsiI6OjY5pIegUPcJdMV5EmSu&tQ0dB)*(<(hbEO;Hmb+*S)M?p zk@t>9)tFvtv>K(TELRJww)f|P>RseIG-i1MmBujKhsOH_RN1PbcV zq(=4E_)mpfGB5zEfLXIYH z0F_o{F)HIe1PZ(X6nF!u)WQaDm=t=$q^eIT-uXgrKrZlxNtJaNE2~n6NTqk+Y3fjC z+3*JB0&kcUdc&m98$f|KOe)rf;SG~2=c~aRKs9+|!hTTLxw^5r^Zti%&!>Mj?hfU< zIpGeVfBD)D`$3gsgOBWE!w2@UmyYdYufA&^d#k#$RB6lGPi*e`8}_jq_v~W_zm~^p zyHxp(-ronh3zcOWXT$E^(}!hDzlSG@aW6h+nLF+F#5n(W8Y-MEpI#U7QlqnTs>-33onH1)lKT$4|!d&K#Al8OSiCn!M>M<0q##(Iv_1=C-)oKH% z)x}6@^ygYViqtEQ@;JUyAXjm=X!PfTT~)}nbT_t8qd(Vn7qn8&=+CwHSEPy=aOT?nvCQSK`IXy| zDr&@;tC-zObWdL6nFzD@CH#uZ8UfTDDVbQ;0>U_8$f|K zfC6s-1>PVk)}J(Z11RtYP~Z)qz#Bk;H-G|f00rIv3cLXncmuxFy*3P%3Expyck?)I zHlT{LbISj{=tBO~EV9y>CRcHGPWf}quf%>W+?pm=akgmm=eilkPWJ9kldD^dyheYn z?Ty$kjee?VS>8fFwf<+!rO``;JJCa>VywLrnH5!kv#PuknG}9y0&1&Mj$v(Q8mKF` zB6aoqJUUm(+F_)Mv2;?4cOtbEX(v^jEgHS^6`lcNfAUzP%x{Sz;0>U_8$f|KfC6s- z1>OJ(ya5z=11R-H`jX(EFYpHB0&f5X-Y_Zj22j-U_8zzO`01CWeQs@n! zz#Bk;H-G|f00rIv3cLXnc*FdPJ9OJ(ya7~`H^Tpt H=yc>iOoO6S literal 0 HcmV?d00001 From c6e5a785ea70e3c20071cc33a2b66b7517177801 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 3 Oct 2019 14:21:29 +0200 Subject: [PATCH 06/10] Updated test data. --- testdata/drc/drcBasicTests_au.gds | Bin 2138 -> 2202 bytes testdata/drc/drcSimpleTests_au2.gds | Bin 12460 -> 12542 bytes testdata/drc/drcSimpleTests_au4.gds | Bin 10580 -> 10836 bytes testdata/drc/drcSuiteTests.drc | 18 +++++++++++++++++- testdata/drc/drcSuiteTests_au1.oas | Bin 11451 -> 12342 bytes testdata/drc/drcSuiteTests_au2.oas | Bin 50726 -> 51860 bytes testdata/drc/drcSuiteTests_au3.oas | Bin 974516 -> 1143867 bytes testdata/drc/drcSuiteTests_au4.oas | Bin 50726 -> 52120 bytes testdata/drc/drcSuiteTests_au5.oas | Bin 11337 -> 12174 bytes testdata/drc/drcSuiteTests_au6.oas | Bin 17842 -> 18672 bytes testdata/drc/drctest.gds | Bin 3000 -> 3064 bytes 11 files changed, 17 insertions(+), 1 deletion(-) diff --git a/testdata/drc/drcBasicTests_au.gds b/testdata/drc/drcBasicTests_au.gds index 594ba23d0655028da94e71289f1c31982e1983c8..9b2cb50ecd9868a17d77c005d9f29b6778fcf646 100644 GIT binary patch delta 116 zcmca5FiTL0fsKKQDS|70oh}oEn*;(P=nK^i=c4mUHBQ|lovUuX`n@8VD)s5WBgZc&L7ysK^u0K33$sBXA zL66O{y0_2&7;N5nH^r_ zuq_xkEL7nWb2ug3#kS4BJ>H1!Y*^NwZdpD4@yfDxSN`&!{hp3%VhvT%Fkg$8?YQbJ zA>}mig|J3wy2^;S4198(#u{)_JlM&&lGx98;u^Y%B9;>S zc|A#oBx(rIA!Df$-lpyNnXKb$I*Ns42}>C|Fg1)D@nLA`-WwAAC)4gcrm`w!oM>kY zXl0$4Or_zRduOXP}!kut{jsT-HewZxY&i{x_Cf B^qT+x delta 642 zcmZ{eKWGzi9L0b4CzpsxbCHtdlDk~4N=4vj8vE&P*^iDEN+_yft?A&C{()^~GrWVPlG^zW?s-H6Fv^ zEHfwz-R_Tgx4Tnhk|NPVVuTcAObYRgV^Wl7Y>|tj$X~`9H-~H76m;LICrdns4bjDh zP{k#&i6y~BMl9i@?*#7qTrVok`mqwKU?Jq<*no>Y^3K3v%u^l$xZZqXzlhf<7uQo0SkbGvsUL-?-|zzI0Eebg!}qj> zno)#oMDf-*k59%G@9xk84r*4z)r^i0nHaf(=az&m>rd98nM%K-nJPA|M4#VfDp)tm z5X@z~w|f82k=JRfVLdxTQWgunsNmvo87W)BZZ?L6VTH0rUZ?LG?u^VpAJOqGAET^5 z&i(B=x!+wU*Xu^nwg>SjZzJvaQO{38C2i((d?sGYCox+{;)vbbjN?_dmy>AOb69pV yXgeyJ&NyvK_-a>ZGerGE{adsGom$3iI_qU&60K1eHBykYN@^8}NkP(T@!&5iRmwd8 diff --git a/testdata/drc/drcSimpleTests_au4.gds b/testdata/drc/drcSimpleTests_au4.gds index 1f3124594f337cea35454c64a5235480b0df1445..901ac492dae2c8ea9b93bd698d262d69362d37e4 100644 GIT binary patch delta 303 zcmcZ-bR|TIfsKKQDS|Agjm>3us zbOf0H|Npe(|NkEb5c=nV|Np-&`2Qb9!^D3WY_?$aXT)yi<~eLGTpA1voCypJylWsd zzYUP>!N35cVdA`NHlGlb> delta 114 zcmcZ-awSNKfsKKQDS|usSnhm)?Ab W&4p`og5UwB%?Tn~m==eK3j+WPFcfG2 diff --git a/testdata/drc/drcSuiteTests.drc b/testdata/drc/drcSuiteTests.drc index 0928bbb0a..b3164b5cd 100644 --- a/testdata/drc/drcSuiteTests.drc +++ b/testdata/drc/drcSuiteTests.drc @@ -47,7 +47,7 @@ def run_testsuite(dm, ic, tiled = false, hier = false) a.join(b).xor(a + b).is_empty? || raise("xor not empty") if !tiled - expect_eq(a.join(b).data.size, 16 * ic) + expect_eq(a.join(b).data.size, 17 * ic) end # NOTE: there is no clean/raw semantics in deep mode @@ -572,6 +572,22 @@ def run_testsuite(dm, ic, tiled = false, hier = false) message "--- odd polygon check #{lb}" y.odd_polygons.output(lb, dm) + + lb += 10 #430 + message "--- pull_inside, pull_overlapping, pull_interacting #{lb}" + + p = c.pull_inside(b) + p.output(lb, dm) + p = c.pull_interacting(b) + p.output(lb + 1, dm) + p = c.pull_overlapping(b) + p.output(lb + 2, dm) + p = c.pull_interacting(b.edges) + p.output(lb + 3, dm) + p = c.edges.pull_interacting(b) + p.output(lb + 4, dm) + p = c.edges.pull_interacting(b.edges) + p.output(lb + 5, dm) end diff --git a/testdata/drc/drcSuiteTests_au1.oas b/testdata/drc/drcSuiteTests_au1.oas index dfb17aa776072df76bf2b6390a03cc39c77cd8d8..0774c72d291913c119e57645dbffd0eace8d4791 100644 GIT binary patch literal 12342 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 S6~lcjS_tEu|IdF0!+!y=@YwSJ diff --git a/testdata/drc/drcSuiteTests_au2.oas b/testdata/drc/drcSuiteTests_au2.oas index 6394194da4ebda58df735e832948b06612fa143c..77a154493a9824c32fd0a754a2b5f6e50cbdbd69 100644 GIT binary patch delta 6930 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 OGB*G9!U_%<2Lj;H*%u5Evv<(;;97h;K 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

yEf!z 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 XZ~tpobAR78C|r;adt&Hd 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

    CWC_8PfOSX-h}X!^;K>VqhCtrCBM;wY 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 literal 974516 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�l&P81mBC;dy@sGWtuGr6JcNMLO4zKJ-1)s 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 ZRjBSGynN~uMbS`s=AYm?6GqEq{{`QXn`Qt2 diff --git a/testdata/drc/drcSuiteTests_au5.oas b/testdata/drc/drcSuiteTests_au5.oas index c49c2c6164431654c5f4e39ba9a9a6e4a31a9c5a..939fa3b9345de492aff52ec0ead0306a2aac259f 100644 GIT binary patch literal 12174 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 I{}Y7&0cWtEk^lez literal 11337 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 Ci_en) delta 6138 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 diff --git a/testdata/drc/drctest.gds b/testdata/drc/drctest.gds index f1eb87e1160e70ed3cb2250f6049faa0ed77b77e..460e30ad86bdc4927585d269b8774ac430c87856 100644 GIT binary patch delta 234 zcmdlX{zF`efsKKQDS| Date: Thu, 3 Oct 2019 22:53:38 +0200 Subject: [PATCH 07/10] WIP: performance improvement of hier local processor The solution is to take intruder instances from as far as possible in the hierarchy. This provides a performance improvement in some cases, specifically if this leads to compression of contexts. --- src/db/db/dbHierProcessor.cc | 66 +++++++++++++++++++++- src/db/db/dbHierProcessor.h | 1 + src/drc/drc/built-in-macros/_drc_engine.rb | 12 ++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/db/db/dbHierProcessor.cc b/src/db/db/dbHierProcessor.cc index 8b9de21bf..63129fdb6 100644 --- a/src/db/db/dbHierProcessor.cc +++ b/src/db/db/dbHierProcessor.cc @@ -1235,7 +1235,7 @@ void local_processor::compute_contexts (local_processor_contextsbegin (); !i.at_end (); ++i) { unsigned int iid = ++id; @@ -1327,7 +1327,11 @@ void local_processor::compute_contexts (local_processor_contextscomplex_trans (*k); // NOTE: no self-interactions if (i->first != *j || tn != tk) { - intruders_below.first.insert (db::CellInstArray (db::CellInst ((*j)->object ().cell_index ()), tni * tk)); + // optimize the intruder instance so it will be as low as possible + std::pair ei = effective_instance (contexts, i->first->object ().cell_index (), (*j)->object ().cell_index (), tni * tk, dist); + if (ei.first) { + intruders_below.first.insert (ei.second); + } } } } @@ -1342,6 +1346,64 @@ void local_processor::compute_contexts (local_processor_contexts +std::pair +local_processor::effective_instance (local_processor_contexts &contexts, db::cell_index_type subject_cell_index, db::cell_index_type intruder_cell_index, const db::ICplxTrans &ti2s, db::Coord dist) const +{ + db::Box bbox = safe_box_enlarged (mp_subject_layout->cell (subject_cell_index).bbox (contexts.subject_layer ()), dist - 1, dist - 1); + if (bbox.empty ()) { + // should not happen, but skip if it does + return std::make_pair (false, db::CellInstArray ()); + } + + db::Box ibbox = bbox.transformed (ti2s.inverted ()); + + const db::Cell &intruder_cell = mp_intruder_layout->cell (intruder_cell_index); + const db::Shapes &intruder_shapes = intruder_cell.shapes (contexts.intruder_layer ()); + if (! intruder_shapes.empty () && ! intruder_shapes.begin_touching (ibbox, db::ShapeIterator::All).at_end ()) { + return std::make_pair (true, db::CellInstArray (db::CellInst (intruder_cell_index), ti2s)); + } + + db::box_convert inst_bcii (*mp_intruder_layout, contexts.intruder_layer ()); + + size_t ni = 0; + db::cell_index_type eff_cell_index = 0; + db::ICplxTrans eff_trans; + + for (db::Cell::touching_iterator i = intruder_cell.begin_touching (ibbox); ! i.at_end() && ni < 2; ++i) { + const db::CellInstArray &ci = i->cell_inst (); + db::Box cbox = mp_intruder_layout->cell (ci.object ().cell_index ()).bbox (contexts.intruder_layer ()); + for (db::CellInstArray::iterator k = ci.begin_touching (ibbox, inst_bcii); ! k.at_end () && ni < 2; ++k) { + db::ICplxTrans tk = ci.complex_trans (*k); + if (ibbox.overlaps (cbox.transformed (tk))) { + eff_trans = tk; + eff_cell_index = ci.object ().cell_index (); + ++ni; + } + } + } + + if (ni == 0) { + // should not happen, but skip if it does + return std::make_pair (false, db::CellInstArray ()); + } else if (ni == 1) { + // one instance - dive down + return effective_instance (contexts, subject_cell_index, eff_cell_index, ti2s * eff_trans, dist); + } else { + return std::make_pair (true, db::CellInstArray (db::CellInst (intruder_cell_index), ti2s)); + } } template diff --git a/src/db/db/dbHierProcessor.h b/src/db/db/dbHierProcessor.h index 1326cffa9..72b95cc1a 100644 --- a/src/db/db/dbHierProcessor.h +++ b/src/db/db/dbHierProcessor.h @@ -434,6 +434,7 @@ private: void issue_compute_contexts (db::local_processor_contexts &contexts, db::local_processor_cell_context *parent_context, db::Cell *subject_parent, db::Cell *subject_cell, const db::ICplxTrans &subject_cell_inst, const db::Cell *intruder_cell, typename local_processor_cell_contexts::context_key_type &intruders, db::Coord dist) const; void push_results (db::Cell *cell, unsigned int output_layer, const std::unordered_set &result) const; void compute_local_cell (const db::local_processor_contexts &contexts, db::Cell *subject_cell, const db::Cell *intruder_cell, const local_operation *op, const typename local_processor_cell_contexts::context_key_type &intruders, std::unordered_set &result) const; + std::pair effective_instance (local_processor_contexts &contexts, db::cell_index_type subject_cell_index, db::cell_index_type intruder_cell_index, const db::ICplxTrans &ti2s, db::Coord dist) const; }; } diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index f513aef6d..997255a24 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -1296,10 +1296,16 @@ CODE end else + + if @dss + @dss.threads = (@tt || 1) + end + res = nil run_timed("\"#{method}\" in: #{src_line}", obj) do res = obj.send(method, *args) end + end # enable progress @@ -1333,10 +1339,16 @@ CODE res = res.value else + + if @dss + @dss.threads = (@tt || 1) + end + res = nil run_timed("\"#{method}\" in: #{src_line}", obj) do res = obj.send(method) end + end # enable progress From 212bd86aabd29eefb5fffffd147b227717901ffb Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 4 Oct 2019 01:39:16 +0200 Subject: [PATCH 08/10] Thread safetiness: enable multiple threads for deep region operations --- src/db/db/dbDeepRegion.cc | 42 +++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 9742628dc..78ca0ac83 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -1570,7 +1570,7 @@ public: virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { - m_ep.clear (); + db::EdgeProcessor ep; std::set others; for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { @@ -1583,20 +1583,20 @@ public: for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i, ++n) { const db::PolygonRef &subject = interactions.subject_shape (i->first); for (db::PolygonRef::polygon_edge_iterator e = subject.begin_edge (); ! e.at_end(); ++e) { - m_ep.insert (*e, n); + ep.insert (*e, n); } } for (std::set::const_iterator o = others.begin (); o != others.end (); ++o) { for (db::PolygonRef::polygon_edge_iterator e = o->begin_edge (); ! e.at_end(); ++e) { - m_ep.insert (*e, 0); + ep.insert (*e, 0); } } db::InteractionDetector id (m_mode, 0); id.set_include_touching (m_touching); db::EdgeSink es; - m_ep.process (es, id); + ep.process (es, id); id.finish (); n = 0; @@ -1633,7 +1633,6 @@ private: int m_mode; bool m_touching; bool m_inverse; - mutable db::EdgeProcessor m_ep; }; class PullLocalOperation @@ -1653,7 +1652,7 @@ public: virtual void compute_local (db::Layout * /*layout*/, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { - m_ep.clear (); + db::EdgeProcessor ep; std::set others; for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { @@ -1665,21 +1664,21 @@ public: for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { const db::PolygonRef &subject = interactions.subject_shape (i->first); for (db::PolygonRef::polygon_edge_iterator e = subject.begin_edge (); ! e.at_end(); ++e) { - m_ep.insert (*e, 0); + ep.insert (*e, 0); } } size_t n = 1; for (std::set::const_iterator o = others.begin (); o != others.end (); ++o, ++n) { for (db::PolygonRef::polygon_edge_iterator e = o->begin_edge (); ! e.at_end(); ++e) { - m_ep.insert (*e, n); + ep.insert (*e, n); } } db::InteractionDetector id (m_mode, 0); id.set_include_touching (m_touching); db::EdgeSink es; - m_ep.process (es, id); + ep.process (es, id); id.finish (); n = 0; @@ -1704,13 +1703,12 @@ public: virtual std::string description () const { - return tl::to_string (tr ("Pull regions by their geometric relation to first (interacting, inside)")); + return tl::to_string (tr ("Pull regions by their geometrical relation to first")); } private: int m_mode; bool m_touching; - mutable db::EdgeProcessor m_ep; }; struct ResultInserter @@ -1770,14 +1768,14 @@ public: virtual void compute_local (db::Layout *layout, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { - m_scanner.clear (); + db::box_scanner2 scanner; ResultInserter inserter (layout, result); region_to_edge_interaction_filter filter (inserter, m_inverse); for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { - m_scanner.insert2 (& interactions.intruder_shape (*j), 0); + scanner.insert2 (& interactions.intruder_shape (*j), 0); } } @@ -1787,14 +1785,14 @@ public: const db::PolygonRef &subject = interactions.subject_shape (i->first); heap.push_back (subject.obj ().transformed (subject.trans ())); - m_scanner.insert1 (&heap.back (), 0); + scanner.insert1 (&heap.back (), 0); if (m_inverse) { filter.preset (&heap.back ()); } } - m_scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + scanner.process (filter, 1, db::box_convert (), db::box_convert ()); if (m_inverse) { filter.fill_output (); } @@ -1816,7 +1814,6 @@ public: private: bool m_inverse; - mutable db::box_scanner2 m_scanner; }; class PullWithEdgeLocalOperation @@ -1836,14 +1833,14 @@ public: virtual void compute_local (db::Layout *, const shape_interactions &interactions, std::unordered_set &result, size_t /*max_vertex_count*/, double /*area_ratio*/) const { - m_scanner.clear (); + db::box_scanner2 scanner; EdgeResultInserter inserter (result); region_to_edge_interaction_filter filter (inserter, false); for (shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { for (shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { - m_scanner.insert2 (& interactions.intruder_shape (*j), 0); + scanner.insert2 (& interactions.intruder_shape (*j), 0); } } @@ -1853,11 +1850,11 @@ public: const db::PolygonRef &subject = interactions.subject_shape (i->first); heap.push_back (subject.obj ().transformed (subject.trans ())); - m_scanner.insert1 (&heap.back (), 0); + scanner.insert1 (&heap.back (), 0); } - m_scanner.process (filter, 1, db::box_convert (), db::box_convert ()); + scanner.process (filter, 1, db::box_convert (), db::box_convert ()); } virtual on_empty_intruder_mode on_empty_intruder_hint () const @@ -1867,11 +1864,8 @@ public: virtual std::string description () const { - return tl::to_string (tr ("Select edges from second by their geometric relation to first")); + return tl::to_string (tr ("Pull edges from second by their geometric relation to first")); } - -private: - mutable db::box_scanner2 m_scanner; }; } From 2fa7c4b6d4e10cf192cabdc867333fdaf742f5f5 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 4 Oct 2019 01:48:45 +0200 Subject: [PATCH 09/10] Partially enabled progress for hierarchical processor. --- src/db/db/dbHierProcessor.cc | 76 +++++++++++++++++++++++++++++++----- src/db/db/dbHierProcessor.h | 10 +++++ 2 files changed, 77 insertions(+), 9 deletions(-) diff --git a/src/db/db/dbHierProcessor.cc b/src/db/db/dbHierProcessor.cc index 63129fdb6..1385deea2 100644 --- a/src/db/db/dbHierProcessor.cc +++ b/src/db/db/dbHierProcessor.cc @@ -441,6 +441,7 @@ local_processor_cell_contexts::compute_results (const local_processo for (typename std::vector *> >::const_iterator c = sorted_contexts.begin (); c != sorted_contexts.end (); ++c) { + proc->next (); ++index; if (tl::verbosity () >= proc->base_verbosity () + 20) { @@ -1046,14 +1047,14 @@ template class DB_PUBLIC local_processor_result_computation_task local_processor::local_processor (db::Layout *layout, db::Cell *top) - : mp_subject_layout (layout), mp_intruder_layout (layout), mp_subject_top (top), mp_intruder_top (top), m_nthreads (0), m_max_vertex_count (0), m_area_ratio (0.0), m_base_verbosity (30) + : mp_subject_layout (layout), mp_intruder_layout (layout), mp_subject_top (top), mp_intruder_top (top), m_nthreads (0), m_max_vertex_count (0), m_area_ratio (0.0), m_base_verbosity (30), m_progress (0), mp_progress (0) { // .. nothing yet .. } template local_processor::local_processor (db::Layout *subject_layout, db::Cell *subject_top, const db::Layout *intruder_layout, const db::Cell *intruder_top) - : mp_subject_layout (subject_layout), mp_intruder_layout (intruder_layout), mp_subject_top (subject_top), mp_intruder_top (intruder_top), m_nthreads (0), m_max_vertex_count (0), m_area_ratio (0.0), m_base_verbosity (30) + : mp_subject_layout (subject_layout), mp_intruder_layout (intruder_layout), mp_subject_top (subject_top), mp_intruder_top (intruder_top), m_nthreads (0), m_max_vertex_count (0), m_area_ratio (0.0), m_base_verbosity (30), m_progress (0), mp_progress (0) { // .. nothing yet .. } @@ -1068,6 +1069,31 @@ std::string local_processor::description (const local_operation +void local_processor::next () const +{ + static tl::Mutex s_lock; + tl::MutexLocker locker (&s_lock); + ++m_progress; + + tl::RelativeProgress *rp = dynamic_cast (mp_progress); + if (rp) { + rp->set (m_progress); + } +} + +template +size_t local_processor::get_progress () const +{ + size_t p = 0; + { + static tl::Mutex s_lock; + tl::MutexLocker locker (&s_lock); + p = m_progress; + } + return p; +} + template void local_processor::run (local_operation *op, unsigned int subject_layer, unsigned int intruder_layer, unsigned int output_layer) { @@ -1416,6 +1442,16 @@ local_processor::compute_results (local_processor_contextsupdate (); db::LayoutLocker layout_update_locker (mp_subject_layout); + // prepare a progress for the computation tasks + size_t comp_effort = 0; + for (typename local_processor_contexts::iterator c = contexts.begin (); c != contexts.end (); ++c) { + comp_effort += c->second.size (); + } + + tl::RelativeProgress progress (description (op), comp_effort, 1); + m_progress = 0; + mp_progress = 0; + if (m_nthreads > 0) { std::auto_ptr > > rc_job (new tl::Job > (m_nthreads)); @@ -1471,22 +1507,44 @@ local_processor::compute_results (local_processor_contextsstart (); - rc_job->wait (); + + try { + + rc_job->start (); + while (! rc_job->wait (10)) { + progress.set (get_progress ()); + } + + } catch (...) { + rc_job->terminate (); + throw; + } + } } } else { - for (db::Layout::bottom_up_const_iterator bu = mp_subject_layout->begin_bottom_up (); bu != mp_subject_layout->end_bottom_up (); ++bu) { + try { + + mp_progress = &progress; + + for (db::Layout::bottom_up_const_iterator bu = mp_subject_layout->begin_bottom_up (); bu != mp_subject_layout->end_bottom_up (); ++bu) { + + typename local_processor_contexts::iterator cpc = contexts.context_map ().find (&mp_subject_layout->cell (*bu)); + if (cpc != contexts.context_map ().end ()) { + cpc->second.compute_results (contexts, cpc->first, op, output_layer, this); + contexts.context_map ().erase (cpc); + } - typename local_processor_contexts::iterator cpc = contexts.context_map ().find (&mp_subject_layout->cell (*bu)); - if (cpc != contexts.context_map ().end ()) { - cpc->second.compute_results (contexts, cpc->first, op, output_layer, this); - contexts.context_map ().erase (cpc); } + mp_progress = 0; + + } catch (...) { + mp_progress = 0; + throw; } } diff --git a/src/db/db/dbHierProcessor.h b/src/db/db/dbHierProcessor.h index 72b95cc1a..6444c8753 100644 --- a/src/db/db/dbHierProcessor.h +++ b/src/db/db/dbHierProcessor.h @@ -30,6 +30,7 @@ #include "dbLayout.h" #include "dbLocalOperation.h" #include "tlThreadedWorkers.h" +#include "tlProgress.h" #include #include @@ -193,6 +194,11 @@ public: db::local_processor_cell_context *create (const context_key_type &intruders); void compute_results (const local_processor_contexts &contexts, db::Cell *cell, const local_operation *op, unsigned int output_layer, const local_processor *proc); + size_t size () const + { + return m_contexts.size (); + } + iterator begin () const { return m_contexts.begin (); @@ -427,8 +433,12 @@ private: double m_area_ratio; int m_base_verbosity; mutable std::auto_ptr > > mp_cc_job; + mutable size_t m_progress; + mutable tl::Progress *mp_progress; std::string description (const local_operation *op) const; + void next () const; + size_t get_progress () const; void compute_contexts (db::local_processor_contexts &contexts, db::local_processor_cell_context *parent_context, db::Cell *subject_parent, db::Cell *subject_cell, const db::ICplxTrans &subject_cell_inst, const db::Cell *intruder_cell, const typename local_processor_cell_contexts::context_key_type &intruders, db::Coord dist) const; void do_compute_contexts (db::local_processor_cell_context *cell_context, const db::local_processor_contexts &contexts, db::local_processor_cell_context *parent_context, db::Cell *subject_parent, db::Cell *subject_cell, const db::ICplxTrans &subject_cell_inst, const db::Cell *intruder_cell, const typename local_processor_cell_contexts::context_key_type &intruders, db::Coord dist) const; void issue_compute_contexts (db::local_processor_contexts &contexts, db::local_processor_cell_context *parent_context, db::Cell *subject_parent, db::Cell *subject_cell, const db::ICplxTrans &subject_cell_inst, const db::Cell *intruder_cell, typename local_processor_cell_contexts::context_key_type &intruders, db::Coord dist) const; From ef56264f64f74a7e244d7627dc6ec0440ed320b5 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 4 Oct 2019 22:45:23 +0200 Subject: [PATCH 10/10] Fixed a regular arrays issue with begin_touching In case of 1d arrays with a or b == (0,0), the iterator was always delivering all items, not just the touching ones. --- src/db/db/dbArray.h | 65 +++++++++++++++++++++++++++++------- src/db/unit_tests/dbArray.cc | 20 +++++++++++ 2 files changed, 73 insertions(+), 12 deletions(-) diff --git a/src/db/db/dbArray.h b/src/db/db/dbArray.h index 8e9f1b6e0..0bc1cf3d2 100644 --- a/src/db/db/dbArray.h +++ b/src/db/db/dbArray.h @@ -417,6 +417,19 @@ struct regular_array ab_coord (b.p2 ()) }; + // NOTE: we need to take some care we don't overiterate in case of vanishing row + // or column vectors. Hence eff_amax and eff_bmax which are 1 in this case. + + unsigned long eff_amax = m_amax; + if (m_a.equal (vector_type ())) { + eff_amax = 1; + } + + unsigned long eff_bmax = m_bmax; + if (m_b.equal (vector_type ())) { + eff_bmax = 1; + } + double amin = ab [0].first; double amax = ab [0].first; double bmin = ab [0].second; @@ -436,8 +449,8 @@ struct regular_array } else { amini = (unsigned long) (amin + 1.0 - epsilon); } - if (amini > m_amax) { - amini = m_amax; + if (amini > eff_amax) { + amini = eff_amax; } } @@ -448,8 +461,8 @@ struct regular_array } else { amaxi = (unsigned long) (amax + epsilon) + 1; } - if (amaxi > m_amax) { - amaxi = m_amax; + if (amaxi > eff_amax) { + amaxi = eff_amax; } } @@ -460,8 +473,8 @@ struct regular_array } else { bmini = (unsigned long) (bmin + 1.0 - epsilon); } - if (bmini > m_bmax) { - bmini = m_bmax; + if (bmini > eff_bmax) { + bmini = eff_bmax; } } @@ -472,8 +485,8 @@ struct regular_array } else { bmaxi = (unsigned long) (bmax + epsilon) + 1; } - if (bmaxi > m_bmax) { - bmaxi = m_bmax; + if (bmaxi > eff_bmax) { + bmaxi = eff_bmax; } } @@ -590,16 +603,44 @@ protected: unsigned long m_amax, m_bmax; double m_det; + inline vector_type eff_a () const + { + if (m_a.equal (vector_type ())) { + if (m_b.equal (vector_type ())) { + return vector_type (1, 0); + } else { + return vector_type (m_b.y (), -m_b.x ()); + } + } else { + return m_a; + } + } + + inline vector_type eff_b () const + { + if (m_b.equal (vector_type ())) { + if (m_a.equal (vector_type ())) { + return vector_type (0, 1); + } else { + return vector_type (-m_a.y (), m_a.x ()); + } + } else { + return m_b; + } + } + std::pair ab_coord (const point_type &p) const { - double a = (double (p.x ()) * double (m_b.y ()) - double (p.y ()) * double (m_b.x ())) / m_det; - double b = (double (m_a.x ()) * double (p.y ()) - double (m_a.y ()) * double (p.x ())) / m_det; - return std::make_pair (a, b); + vector_type a = eff_a (), b = eff_b (); + double ia = (double (p.x ()) * double (b.y ()) - double (p.y ()) * double (b.x ())) / m_det; + double ib = (double (a.x ()) * double (p.y ()) - double (a.y ()) * double (p.x ())) / m_det; + return std::make_pair (ia, ib); } void compute_det () { - m_det = double (m_a.x ()) * double (m_b.y ()) - double (m_a.y ()) * double (m_b.x ()); + vector_type a = eff_a (), b = eff_b (); + m_det = double (a.x ()) * double (b.y ()) - double (a.y ()) * double (b.x ()); } }; diff --git a/src/db/unit_tests/dbArray.cc b/src/db/unit_tests/dbArray.cc index 524369002..3f6b3e0c7 100644 --- a/src/db/unit_tests/dbArray.cc +++ b/src/db/unit_tests/dbArray.cc @@ -463,3 +463,23 @@ TEST(11) EXPECT_EQ (ba1cplx == ba2x3cplx, false); } +TEST(12_1dArraysX) +{ + db::Vector a (0, 0); + db::Vector b (200, 0); + BoxArray ba (db::Box (10, 30, 30, 40), db::Trans (db::Vector (0, 0)), new db::regular_array (a, b, 1, 3)); + + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin ()), "0,0;200,0;400,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 0, 200, 100), MyBoxConvert ())), "0,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 50, 200, 110), MyBoxConvert ())), ""); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 40, 200, 110), MyBoxConvert ())), "0,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (31, 40, 210, 130), MyBoxConvert ())), "200,0"); + + ba = BoxArray (db::Box (10, 30, 30, 40), db::Trans (db::Vector (0, 0)), new db::regular_array (b, a, 3, 1)); + + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin ()), "0,0;200,0;400,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 0, 200, 100), MyBoxConvert ())), "0,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 50, 200, 110), MyBoxConvert ())), ""); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (0, 40, 200, 110), MyBoxConvert ())), "0,0"); + EXPECT_EQ (positions (ba, db::Point (0, 0), ba.begin_touching (db::Box (31, 40, 210, 130), MyBoxConvert ())), "200,0"); +}