From 2953184b15101e427792f051731f652919374c8c Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 14 Mar 2017 00:09:51 +0100 Subject: [PATCH] Fixed #6 (RVE DB reader and edges) This solution will not only fix this issue but also turn pairs of edges into "edge pair" objects. These objects provide a somewhat better visualization for DRC violations by connecting the edges with a filled region. Single edges and clusters of more than two edges are represented as individual edges. --- src/rdb/rdbRVEReader.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/rdb/rdbRVEReader.cc b/src/rdb/rdbRVEReader.cc index 137db884f..81eaf8c26 100644 --- a/src/rdb/rdbRVEReader.cc +++ b/src/rdb/rdbRVEReader.cc @@ -30,6 +30,7 @@ #include "dbTrans.h" #include "dbPolygon.h" #include "dbEdge.h" +#include "dbEdgePair.h" #include #include @@ -80,6 +81,7 @@ public: db::DCplxTrans trans; db::DCplxTrans shape_trans; std::vector points; + std::vector edges; ex = tl::Extractor (m_input_stream.get_line ().c_str ()); ex.read (s, " "); @@ -360,10 +362,7 @@ public: } else if (shape_type == 'e') { - Item *item = db.create_item (cell->id (), cath->id ()); - if (waived) { - db.add_item_tag (item, waived_tag_id); - } + edges.clear (); for (size_t point = 0; point < npoints; ++point) { @@ -387,10 +386,19 @@ public: ex.expect_end (); - values.add (new Value (db::DEdge (db::DPoint (x1 * dbu, y1 * dbu), db::DPoint (x2 * dbu, y2 * dbu)).transformed (shape_trans))); + edges.push_back (db::DEdge (db::DPoint (x1 * dbu, y1 * dbu), db::DPoint (x2 * dbu, y2 * dbu)).transformed (shape_trans)); } + if (edges.size () == 2) { + // produce an edge pair from two edges + values.add (new Value (db::DEdgePair (edges [0], edges [1]))); + } else { + for (std::vector ::const_iterator e = edges.begin (); e != edges.end (); ++e) { + values.add (new Value (*e)); + } + } + } else { error (tl::sprintf (tl::to_string (QObject::tr ("Invalid shape type: %c")), shape_type)); }