mirror of https://github.com/KLayout/klayout.git
WIP: some testing and bug fixes for hierarchical report db generation.
This commit is contained in:
parent
2d9a3aaaa6
commit
43014d6923
|
|
@ -103,10 +103,17 @@ public:
|
||||||
|
|
||||||
virtual void begin (const db::RecursiveShapeIterator *iter)
|
virtual void begin (const db::RecursiveShapeIterator *iter)
|
||||||
{
|
{
|
||||||
m_cell_stack.clear ();
|
|
||||||
|
|
||||||
db::cell_index_type ci = iter->top_cell ()->cell_index ();
|
db::cell_index_type ci = iter->top_cell ()->cell_index ();
|
||||||
const rdb::Cell *rdb_cell = cell_for_id (iter->layout (), ci);
|
const rdb::Cell *rdb_cell = cell_for_id (iter->layout (), ci);
|
||||||
|
|
||||||
|
if (! m_cell_stack.empty () && rdb_cell != m_cell_stack.front () && (rdb_cell->references ().begin () == rdb_cell->references ().end ())) {
|
||||||
|
// If the actual top cell is not the one specified, add a dummy reference so we find the real top cell under
|
||||||
|
// the given one.
|
||||||
|
// TODO: get rid of the const_cast
|
||||||
|
(const_cast<rdb::Cell *> (rdb_cell))->references ().insert (rdb::Reference (db::DCplxTrans (), m_cell_stack.front ()->id ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
m_cell_stack.clear ();
|
||||||
m_cell_stack.push_back (rdb_cell);
|
m_cell_stack.push_back (rdb_cell);
|
||||||
m_id_to_cell.insert (std::make_pair (ci, rdb_cell));
|
m_id_to_cell.insert (std::make_pair (ci, rdb_cell));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -789,6 +789,30 @@ class RDB_TestClass < TestBase
|
||||||
rdb.each_cell { |c| cn << c.to_s_items }
|
rdb.each_cell { |c| cn << c.to_s_items }
|
||||||
assert_equal(cn.join(";"), "c1[polygon: (0,0.001;0,0.03;0.02,0.03;0.02,0.001),polygon: (0.01,0.021;0.01,0.051;0.031,0.051;0.031,0.021),polygon: (0.021,0.042;0.021,0.073;0.043,0.073;0.043,0.042)]")
|
assert_equal(cn.join(";"), "c1[polygon: (0,0.001;0,0.03;0.02,0.03;0.02,0.001),polygon: (0.01,0.021;0.01,0.051;0.031,0.051;0.031,0.021),polygon: (0.021,0.042;0.021,0.073;0.043,0.073;0.043,0.042)]")
|
||||||
|
|
||||||
|
rdb = RBA::ReportDatabase.new("neu")
|
||||||
|
cat = rdb.create_category("l1")
|
||||||
|
r = RBA::Region::new(c1.begin_shapes_rec(l1))
|
||||||
|
cat.scan_region(rdb.create_cell("TOP"), RBA::CplxTrans::new(0.001), r) # hierarchical scan
|
||||||
|
assert_equal(cat.num_items, 3)
|
||||||
|
cn = []
|
||||||
|
rdb.each_cell { |c| cn << c.to_s_test }
|
||||||
|
assert_equal(cn.join(";"), "TOP[];c1[TOP->r0 *1 0,0];c2[c1->r0 *1 0.01,0.02];c3[c1->r0 *1 0.021,0.041]")
|
||||||
|
cn = []
|
||||||
|
rdb.each_cell { |c| cn << c.to_s_items }
|
||||||
|
assert_equal(cn.join(";"), "TOP[];c1[polygon: (0,0.001;0,0.03;0.02,0.03;0.02,0.001)];c2[polygon: (0,0.001;0,0.031;0.021,0.031;0.021,0.001)];c3[polygon: (0,0.001;0,0.032;0.022,0.032;0.022,0.001)]")
|
||||||
|
|
||||||
|
rdb = RBA::ReportDatabase.new("neu")
|
||||||
|
cat = rdb.create_category("l1")
|
||||||
|
r = RBA::Region::new(c1.begin_shapes_rec(l1))
|
||||||
|
cat.scan_region(rdb.create_cell("TOP"), RBA::CplxTrans::new(0.001), r, true) # flat scan
|
||||||
|
assert_equal(cat.num_items, 3)
|
||||||
|
cn = []
|
||||||
|
rdb.each_cell { |c| cn << c.to_s_test }
|
||||||
|
assert_equal(cn.join(";"), "TOP[]")
|
||||||
|
cn = []
|
||||||
|
rdb.each_cell { |c| cn << c.to_s_items }
|
||||||
|
assert_equal(cn.join(";"), "TOP[polygon: (0,0.001;0,0.03;0.02,0.03;0.02,0.001),polygon: (0.01,0.021;0.01,0.051;0.031,0.051;0.031,0.021),polygon: (0.021,0.042;0.021,0.073;0.043,0.073;0.043,0.042)]")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# shape insertion from shape, shapes, recursive iterator
|
# shape insertion from shape, shapes, recursive iterator
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue