mirror of https://github.com/KLayout/klayout.git
Bugfix: Deep mode XOR needs to maintain the layout origin of the first argument even if it is empty
This commit is contained in:
parent
0ec8e18173
commit
5efcf83640
|
|
@ -1054,12 +1054,7 @@ DeepRegion::xor_with (const Region &other, db::PropertyConstraint property_const
|
||||||
{
|
{
|
||||||
const DeepRegion *other_deep = dynamic_cast <const DeepRegion *> (other.delegate ());
|
const DeepRegion *other_deep = dynamic_cast <const DeepRegion *> (other.delegate ());
|
||||||
|
|
||||||
if (empty ()) {
|
if (other.empty ()) {
|
||||||
|
|
||||||
// Nothing to do
|
|
||||||
return other.delegate ()->clone ();
|
|
||||||
|
|
||||||
} else if (other.empty ()) {
|
|
||||||
|
|
||||||
// Nothing to do
|
// Nothing to do
|
||||||
return clone ();
|
return clone ();
|
||||||
|
|
@ -1068,6 +1063,18 @@ DeepRegion::xor_with (const Region &other, db::PropertyConstraint property_const
|
||||||
|
|
||||||
return AsIfFlatRegion::xor_with (other, property_constraint);
|
return AsIfFlatRegion::xor_with (other, property_constraint);
|
||||||
|
|
||||||
|
} else if (empty ()) {
|
||||||
|
|
||||||
|
// Nothing to do, but to maintain the normal behavior, we have to map the other
|
||||||
|
// input to our layout if neccessary
|
||||||
|
if (&other_deep->deep_layer ().layout () == &deep_layer ().layout ()) {
|
||||||
|
return other.delegate ()->clone ();
|
||||||
|
} else {
|
||||||
|
std::unique_ptr<DeepRegion> other_deep_mapped (dynamic_cast<DeepRegion *> (clone ()));
|
||||||
|
other_deep_mapped->deep_layer ().add_from (other_deep->deep_layer ());
|
||||||
|
return other_deep_mapped.release ();
|
||||||
|
}
|
||||||
|
|
||||||
} else if (other_deep->deep_layer () == deep_layer () && pc_skip (property_constraint)) {
|
} else if (other_deep->deep_layer () == deep_layer () && pc_skip (property_constraint)) {
|
||||||
|
|
||||||
return new DeepRegion (deep_layer ().derived ());
|
return new DeepRegion (deep_layer ().derived ());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue