Fixing issue #2220 (select fails to select from 2nd layout when two are loaded in same panel)

This commit is contained in:
Matthias Koefferlein 2025-11-22 22:35:16 +01:00
parent dacb3230d5
commit 7026cad2c1
1 changed files with 8 additions and 6 deletions

View File

@ -805,8 +805,12 @@ InstFinder::find_internal (LayoutViewBase *view, unsigned int cv_index, const db
void void
InstFinder::checkpoint () InstFinder::checkpoint ()
{ {
if (--m_tries < 0) { if (! point_mode ()) {
throw StopException (); ++*mp_progress;
} else {
if (--m_tries < 0) {
throw StopException ();
}
} }
} }
@ -829,15 +833,13 @@ InstFinder::visit_cell (const db::Cell &cell, const db::Box &search_box, const d
if (! point_mode ()) { if (! point_mode ()) {
++*mp_progress;
// look for instances to check here .. // look for instances to check here ..
for (db::Cell::touching_iterator inst = cell.begin_touching (search_box); ! inst.at_end (); ++inst) { for (db::Cell::touching_iterator inst = cell.begin_touching (search_box); ! inst.at_end (); ++inst) {
const db::CellInstArray &cell_inst = inst->cell_inst (); const db::CellInstArray &cell_inst = inst->cell_inst ();
const db::Cell &inst_cell = layout ().cell (cell_inst.object ().cell_index ()); const db::Cell &inst_cell = layout ().cell (cell_inst.object ().cell_index ());
++*mp_progress; checkpoint ();
if (! consider_cell (inst_cell)) { if (! consider_cell (inst_cell)) {
continue; continue;
@ -851,7 +853,7 @@ InstFinder::visit_cell (const db::Cell &cell, const db::Box &search_box, const d
db::box_convert <db::CellInst, false> bc (layout ()); db::box_convert <db::CellInst, false> bc (layout ());
for (db::CellInstArray::iterator p = cell_inst.begin_touching (search_box, bc); ! p.at_end (); ++p) { for (db::CellInstArray::iterator p = cell_inst.begin_touching (search_box, bc); ! p.at_end (); ++p) {
++*mp_progress; checkpoint ();
db::Box ibox; db::Box ibox;
if (! m_visible_layers || level == mp_view->get_max_hier_levels () - 1 || inst_cell.is_ghost_cell () || mp_view->is_cell_hidden (inst_cell.cell_index (), m_cv_index)) { if (! m_visible_layers || level == mp_view->get_max_hier_levels () - 1 || inst_cell.is_ghost_cell () || mp_view->is_cell_hidden (inst_cell.cell_index (), m_cv_index)) {