mirror of https://github.com/KLayout/klayout.git
[CONSIDER MERGING] Bugfix: polygon interaction with texts did not capture texts because of vanishing bounding box
This commit is contained in:
parent
b7c515bf91
commit
fad85e4260
|
|
@ -354,6 +354,8 @@ db::Box safe_box_enlarged (const db::Box &box, db::Coord dx, db::Coord dy)
|
||||||
{
|
{
|
||||||
if (box.empty ()) {
|
if (box.empty ()) {
|
||||||
return box;
|
return box;
|
||||||
|
} else if (box == db::Box::world ()) {
|
||||||
|
return box;
|
||||||
} else {
|
} else {
|
||||||
db::Coord w2 = db::Coord (box.width () / 2);
|
db::Coord w2 = db::Coord (box.width () / 2);
|
||||||
db::Coord h2 = db::Coord (box.height () / 2);
|
db::Coord h2 = db::Coord (box.height () / 2);
|
||||||
|
|
@ -2222,18 +2224,13 @@ local_processor<TS, TI, TR>::run_flat (const generic_shape_iterator<TS> &subject
|
||||||
|
|
||||||
db::Coord dist = op->dist ();
|
db::Coord dist = op->dist ();
|
||||||
|
|
||||||
db::Box subjects_box = subjects.bbox ();
|
db::Box subjects_box = safe_box_enlarged (subjects.bbox (), dist - 1, dist - 1);
|
||||||
if (subjects_box != db::Box::world ()) {
|
|
||||||
subjects_box.enlarge (db::Vector (dist, dist));
|
|
||||||
}
|
|
||||||
|
|
||||||
db::Box intruders_box;
|
db::Box intruders_box;
|
||||||
for (typename std::vector<generic_shape_iterator<TI> >::const_iterator il = intruders.begin (); il != intruders.end (); ++il) {
|
for (typename std::vector<generic_shape_iterator<TI> >::const_iterator il = intruders.begin (); il != intruders.end (); ++il) {
|
||||||
intruders_box += il->bbox ();
|
intruders_box += il->bbox ();
|
||||||
}
|
}
|
||||||
if (intruders_box != db::Box::world ()) {
|
intruders_box = safe_box_enlarged (intruders_box, dist - 1, dist - 1);
|
||||||
intruders_box.enlarge (db::Vector (dist, dist));
|
|
||||||
}
|
|
||||||
|
|
||||||
db::Box common_box = intruders_box & subjects_box;
|
db::Box common_box = intruders_box & subjects_box;
|
||||||
if (common_box.empty ()) {
|
if (common_box.empty ()) {
|
||||||
|
|
@ -2295,7 +2292,7 @@ local_processor<TS, TI, TR>::run_flat (const generic_shape_iterator<TS> &subject
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
addressable_shape_delivery<TI> ii ((*il).confined (common_box, true));
|
addressable_shape_delivery<TI> ii ((*il).confined (common_box, false));
|
||||||
for (; !ii.at_end (); ++ii) {
|
for (; !ii.at_end (); ++ii) {
|
||||||
scanner.insert2 (ii.operator-> (), interactions.next_id ());
|
scanner.insert2 (ii.operator-> (), interactions.next_id ());
|
||||||
}
|
}
|
||||||
|
|
@ -2331,7 +2328,7 @@ local_processor<TS, TI, TR>::run_flat (const generic_shape_iterator<TS> &subject
|
||||||
|
|
||||||
interaction_registration_shape1_scanner_combo<TS, TI> scanner (&interactions, il_index, m_report_progress, scan_description);
|
interaction_registration_shape1_scanner_combo<TS, TI> scanner (&interactions, il_index, m_report_progress, scan_description);
|
||||||
|
|
||||||
addressable_shape_delivery<TS> is (subjects.confined (common_box, true));
|
addressable_shape_delivery<TS> is (subjects.confined (common_box, false));
|
||||||
unsigned int id = id_first;
|
unsigned int id = id_first;
|
||||||
|
|
||||||
for ( ; ! is.at_end (); ++is, ++id) {
|
for ( ; ! is.at_end (); ++is, ++id) {
|
||||||
|
|
@ -2350,7 +2347,7 @@ local_processor<TS, TI, TR>::run_flat (const generic_shape_iterator<TS> &subject
|
||||||
// this is the case of intra-layer interactions ("foreign"): we pretend we have two layers and
|
// this is the case of intra-layer interactions ("foreign"): we pretend we have two layers and
|
||||||
// reject shape self-interactions by registering them as "same"
|
// reject shape self-interactions by registering them as "same"
|
||||||
|
|
||||||
addressable_shape_delivery<TS> is (subjects.confined (common_box, true));
|
addressable_shape_delivery<TS> is (subjects.confined (common_box, false));
|
||||||
|
|
||||||
unsigned int id = id_first;
|
unsigned int id = id_first;
|
||||||
for ( ; ! is.at_end (); ++is, ++id) {
|
for ( ; ! is.at_end (); ++is, ++id) {
|
||||||
|
|
@ -2364,8 +2361,8 @@ local_processor<TS, TI, TR>::run_flat (const generic_shape_iterator<TS> &subject
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
addressable_shape_delivery<TS> is (subjects.confined (common_box, true));
|
addressable_shape_delivery<TS> is (subjects.confined (common_box, false));
|
||||||
addressable_shape_delivery<TI> ii ((*il).confined (common_box, true));
|
addressable_shape_delivery<TI> ii ((*il).confined (common_box, false));
|
||||||
|
|
||||||
unsigned int id = id_first;
|
unsigned int id = id_first;
|
||||||
for ( ; ! is.at_end (); ++is, ++id) {
|
for ( ; ! is.at_end (); ++is, ++id) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue