mirror of https://github.com/KLayout/klayout.git
Proper setting of merged status after interacting/inside etc.
This commit is contained in:
parent
d76eef10af
commit
5db45d7aee
|
|
@ -434,7 +434,7 @@ AsIfFlatRegion::in_and_out_generic (const Region &other, InteractingOutputMode o
|
|||
std::pair<RegionDelegate *, RegionDelegate *>
|
||||
AsIfFlatRegion::selected_interacting_generic (const Edges &other, InteractingOutputMode output_mode, size_t min_count, size_t max_count) const
|
||||
{
|
||||
OutputPairHolder oph (output_mode, merged_semantics ());
|
||||
OutputPairHolder oph (output_mode, merged_semantics () || is_merged ());
|
||||
|
||||
if (output_mode == None) {
|
||||
return oph.region_pair ();
|
||||
|
|
@ -485,7 +485,7 @@ AsIfFlatRegion::selected_interacting_generic (const Edges &other, InteractingOut
|
|||
std::pair<RegionDelegate *, RegionDelegate *>
|
||||
AsIfFlatRegion::selected_interacting_generic (const Texts &other, InteractingOutputMode output_mode, size_t min_count, size_t max_count) const
|
||||
{
|
||||
OutputPairHolder oph (output_mode, merged_semantics ());
|
||||
OutputPairHolder oph (output_mode, merged_semantics () || is_merged ());
|
||||
|
||||
if (output_mode == None) {
|
||||
return oph.region_pair ();
|
||||
|
|
@ -531,7 +531,7 @@ AsIfFlatRegion::selected_interacting_generic (const Texts &other, InteractingOut
|
|||
std::pair<RegionDelegate *, RegionDelegate *>
|
||||
AsIfFlatRegion::selected_interacting_generic (const Region &other, int mode, bool touching, InteractingOutputMode output_mode, size_t min_count, size_t max_count) const
|
||||
{
|
||||
OutputPairHolder oph (output_mode, merged_semantics ());
|
||||
OutputPairHolder oph (output_mode, merged_semantics () || is_merged ());
|
||||
|
||||
if (output_mode == None) {
|
||||
return oph.region_pair ();
|
||||
|
|
@ -611,7 +611,7 @@ AsIfFlatRegion::pull_generic (const Edges &other) const
|
|||
std::vector<generic_shape_iterator<db::Edge> > others;
|
||||
others.push_back (other.begin_merged ());
|
||||
|
||||
std::unique_ptr<FlatEdges> output (new FlatEdges (merged_semantics ()));
|
||||
std::unique_ptr<FlatEdges> output (new FlatEdges (other.merged_semantics () || other.is_merged ()));
|
||||
std::vector<db::Shapes *> results;
|
||||
results.push_back (&output->raw_edges ());
|
||||
|
||||
|
|
@ -720,7 +720,7 @@ AsIfFlatRegion::pull_generic (const Region &other, int mode, bool touching) cons
|
|||
std::vector<generic_shape_iterator<db::Polygon> > others;
|
||||
others.push_back (other.begin_merged ());
|
||||
|
||||
std::unique_ptr<FlatRegion> output (new FlatRegion (merged_semantics ()));
|
||||
std::unique_ptr<FlatRegion> output (new FlatRegion (other.merged_semantics () || other.is_merged ()));
|
||||
std::vector<db::Shapes *> results;
|
||||
results.push_back (&output->raw_polygons ());
|
||||
|
||||
|
|
|
|||
|
|
@ -1840,7 +1840,8 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to
|
|||
|
||||
const db::DeepLayer &polygons = merged_deep_layer ();
|
||||
// NOTE: on "inside" or with counting, the other polygons must be merged
|
||||
const db::DeepLayer &other_polygons = (mode < 0 || counting) ? other_deep->merged_deep_layer () : other_deep->deep_layer ();
|
||||
bool other_needs_merged = (mode < 0 || counting);
|
||||
const db::DeepLayer &other_polygons = other_needs_merged ? other_deep->merged_deep_layer () : other_deep->deep_layer ();
|
||||
|
||||
db::InteractingLocalOperation op (mode, touching, output_mode, min_count, max_count, true);
|
||||
|
||||
|
|
@ -1854,7 +1855,7 @@ DeepRegion::selected_interacting_generic (const Region &other, int mode, bool to
|
|||
proc.set_max_vertex_count (polygons.store ()->max_vertex_count ());
|
||||
}
|
||||
|
||||
bool result_is_merged = (! split_after && ((mode < 0 && other.merged_semantics ()) || other.is_merged ()) && (merged_semantics () || is_merged ()));
|
||||
bool result_is_merged = (! split_after && (merged_semantics () || is_merged ()));
|
||||
InteractingResultHolder orh (output_mode, result_is_merged, polygons);
|
||||
|
||||
proc.run (&op, polygons.layer (), other_polygons.layer (), orh.layers ());
|
||||
|
|
@ -1892,7 +1893,7 @@ DeepRegion::selected_interacting_generic (const Edges &other, InteractingOutputM
|
|||
proc.set_max_vertex_count (polygons.store ()->max_vertex_count ());
|
||||
}
|
||||
|
||||
bool result_is_merged = (! split_after && other.is_merged () && (merged_semantics () || is_merged ()));
|
||||
bool result_is_merged = (! split_after && (merged_semantics () || is_merged ()));
|
||||
InteractingResultHolder orh (output_mode, result_is_merged, polygons);
|
||||
|
||||
proc.run (&op, polygons.layer (), counting ? other_deep->merged_deep_layer ().layer () : other_deep->deep_layer ().layer (), orh.layers ());
|
||||
|
|
@ -1935,9 +1936,7 @@ DeepRegion::pull_generic (const Region &other, int mode, bool touching) const
|
|||
proc.run (&op, polygons.layer (), other_polygons.layer (), dl_out.layer ());
|
||||
|
||||
db::DeepRegion *res = new db::DeepRegion (dl_out);
|
||||
if (! split_after && ((mode < 0 && merged_semantics ()) || is_merged ()) && (other.merged_semantics () || other.is_merged ())) {
|
||||
res->set_is_merged (true);
|
||||
}
|
||||
res->set_is_merged (! split_after && (other.merged_semantics () || other.is_merged ()));
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -1998,9 +1997,7 @@ DeepRegion::pull_generic (const Texts &other) const
|
|||
proc.set_threads (polygons.store ()->threads ());
|
||||
proc.run (&op, polygons.layer (), other_texts.layer (), dl_out.layer ());
|
||||
|
||||
db::DeepTexts *res = new db::DeepTexts (dl_out);
|
||||
res->set_is_merged (is_merged ());
|
||||
return res;
|
||||
return new db::DeepTexts (dl_out);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -880,8 +880,6 @@ TEST(14_Interacting)
|
|||
db::Region r2 (db::RecursiveShapeIterator (ly, top_cell, l2), dss);
|
||||
db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss);
|
||||
db::Region r1f (db::RecursiveShapeIterator (ly, top_cell, l1));
|
||||
db::Region r2f (db::RecursiveShapeIterator (ly, top_cell, l2));
|
||||
db::Region r6f (db::RecursiveShapeIterator (ly, top_cell, l6));
|
||||
db::Region r1r = r1;
|
||||
r1r.set_merged_semantics (false);
|
||||
db::Region r2r = r2;
|
||||
|
|
@ -947,12 +945,13 @@ TEST(14_Interacting)
|
|||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (66, 0)), r6r.selected_overlapping (r1r));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (67, 0)), r6r.selected_not_overlapping (r1r));
|
||||
|
||||
EXPECT_EQ (r2.selected_interacting (r1).is_merged (), false);
|
||||
EXPECT_EQ (r2.selected_interacting (r1.merged ()).is_merged (), true);
|
||||
EXPECT_EQ (r2.selected_inside (r1).is_merged (), true);
|
||||
EXPECT_EQ (r2.selected_interacting (r1).is_merged (), true);
|
||||
EXPECT_EQ (r2r.selected_interacting (r1).is_merged (), false);
|
||||
EXPECT_EQ (r2.selected_interacting (r1r).is_merged (), false);
|
||||
EXPECT_EQ (r2r.selected_interacting (r1r).is_merged (), false);
|
||||
EXPECT_EQ (r2r.selected_interacting (r1.merged ()).is_merged (), false);
|
||||
EXPECT_EQ (r2.selected_interacting (r1r).is_merged (), true);
|
||||
EXPECT_EQ (r2.selected_inside (r1).is_merged (), true);
|
||||
EXPECT_EQ (r2r.selected_inside (r1).is_merged (), false);
|
||||
EXPECT_EQ (r2.selected_inside (r1).is_merged (), true);
|
||||
|
||||
CHECKPOINT();
|
||||
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au14a.gds");
|
||||
|
|
@ -976,8 +975,8 @@ TEST(14_Interacting)
|
|||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r6r.selected_interacting (r1er));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 0)), r6r.selected_not_interacting (r1er));
|
||||
|
||||
EXPECT_EQ (r6.selected_interacting (r1e).is_merged (), false);
|
||||
EXPECT_EQ (r6.selected_interacting (r1er).is_merged (), false);
|
||||
EXPECT_EQ (r6.selected_interacting (r1e).is_merged (), true);
|
||||
EXPECT_EQ (r6.selected_interacting (r1er).is_merged (), true);
|
||||
EXPECT_EQ (r6r.selected_interacting (r1e).is_merged (), false);
|
||||
EXPECT_EQ (r6r.selected_interacting (r1er).is_merged (), false);
|
||||
|
||||
|
|
@ -1499,8 +1498,8 @@ TEST(25_Pull)
|
|||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (62, 0)), r2r.pull_overlapping (r6r));
|
||||
|
||||
EXPECT_EQ (r2.pull_inside (r6).is_merged (), true);
|
||||
EXPECT_EQ (r2.pull_interacting (r6).is_merged (), false);
|
||||
EXPECT_EQ (r2r.pull_interacting (r6).is_merged (), false);
|
||||
EXPECT_EQ (r2.pull_interacting (r6).is_merged (), true);
|
||||
EXPECT_EQ (r2r.pull_interacting (r6).is_merged (), true);
|
||||
EXPECT_EQ (r2.pull_interacting (r6r).is_merged (), false);
|
||||
EXPECT_EQ (r2r.pull_interacting (r6r).is_merged (), false);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue