From 319efc1f951688ba0b0ed0588afdf0a7d04de464 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 9 Nov 2021 00:32:07 +0100 Subject: [PATCH] Bugfix: negative output wasn't working properly for enclosing and overlap. --- src/db/db/dbRegionCheckUtils.cc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/db/db/dbRegionCheckUtils.cc b/src/db/db/dbRegionCheckUtils.cc index 38cfe9f51..5b85311f2 100644 --- a/src/db/db/dbRegionCheckUtils.cc +++ b/src/db/db/dbRegionCheckUtils.cc @@ -231,12 +231,21 @@ Edge2EdgeCheckBase::add (const db::Edge *o1, size_t p1, const db::Edge *o2, size m_e2ep.insert (std::make_pair (std::make_pair (*o2, p2), n * 2 + 1)); if (m_has_negative_edge_output) { - m_pseudo_edges.insert (std::make_pair (db::Edge (ep.first ().p1 (), ep.second ().p2 ()), p1)); - m_pseudo_edges.insert (std::make_pair (db::Edge (ep.second ().p1 (), ep.first ().p2 ()), p1)); + + bool antiparallel = (mp_check->relation () == WidthRelation || mp_check->relation () == SpaceRelation); + + // pseudo1 and pseudo2 are the connecting edges of the edge pairs. Together with the + // original edges they form a quadrangle. + db::Edge pseudo1 (ep.first ().p1 (), antiparallel ? ep.second ().p2 () : ep.second ().p1 ()); + db::Edge pseudo2 (antiparallel ? ep.second ().p1 () : ep.second ().p2 (), ep.first ().p2 ()); + + m_pseudo_edges.insert (std::make_pair (pseudo1, p1)); + m_pseudo_edges.insert (std::make_pair (pseudo2, p1)); if (p1 != p2) { - m_pseudo_edges.insert (std::make_pair (db::Edge (ep.first ().p1 (), ep.second ().p2 ()), p2)); - m_pseudo_edges.insert (std::make_pair (db::Edge (ep.second ().p1 (), ep.first ().p2 ()), p2)); + m_pseudo_edges.insert (std::make_pair (pseudo1, p2)); + m_pseudo_edges.insert (std::make_pair (pseudo2, p2)); } + } }