mirror of https://github.com/KLayout/klayout.git
Edges#each, Edges#each_merged, Region#each, Region#each_merged, Texts#each and EdgePairs#each now deliver objects with properties too.
This commit is contained in:
parent
502346608f
commit
e48c6f3660
|
|
@ -127,7 +127,7 @@ FlatEdges::ensure_merged_edges_valid () const
|
|||
|
||||
if (! need_split_props) {
|
||||
|
||||
EdgeBooleanClusterCollectorToShapes cluster_collector (&tmp, EdgeOr);
|
||||
EdgeBooleanClusterCollectorToShapes cluster_collector (&tmp, EdgeOr, prop_id);
|
||||
|
||||
scanner.reserve (mp_edges->size ());
|
||||
|
||||
|
|
|
|||
|
|
@ -577,6 +577,11 @@ static db::EdgePairs with_area2 (const db::EdgePairs *r, db::EdgePair::area_type
|
|||
return r->filtered (f);
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::EdgePairWithProperties> begin_edge_pairs (const db::EdgePairs *edge_pairs)
|
||||
{
|
||||
return db::generic_shape_iterator<db::EdgePairWithProperties> (db::make_wp_iter (edge_pairs->delegate ()->begin ()));
|
||||
}
|
||||
|
||||
extern Class<db::ShapeCollection> decl_dbShapeCollection;
|
||||
|
||||
Class<db::EdgePairs> decl_EdgePairs (decl_dbShapeCollection, "db", "EdgePairs",
|
||||
|
|
@ -1499,8 +1504,10 @@ Class<db::EdgePairs> decl_EdgePairs (decl_dbShapeCollection, "db", "EdgePairs",
|
|||
"\n"
|
||||
"This method has been introduced in version 0.27."
|
||||
) +
|
||||
gsi::iterator ("each", &db::EdgePairs::begin,
|
||||
gsi::iterator_ext ("each", &begin_edge_pairs,
|
||||
"@brief Returns each edge pair of the edge pair collection\n"
|
||||
"\n"
|
||||
"Starting with version 0.30, the iterator delivers EdgePairWithProperties objects."
|
||||
) +
|
||||
method ("[]", &db::EdgePairs::nth, gsi::arg ("n"),
|
||||
"@brief Returns the nth edge pair\n"
|
||||
|
|
|
|||
|
|
@ -745,6 +745,15 @@ static std::vector<db::Edges> split_interacting_with_region (const db::Edges *r,
|
|||
return as_2edges_vector (r->selected_interacting_differential (other, min_count, max_count));
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::EdgeWithProperties> begin_edges (const db::Edges *edges)
|
||||
{
|
||||
return db::generic_shape_iterator<db::EdgeWithProperties> (db::make_wp_iter (edges->delegate ()->begin ()));
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::EdgeWithProperties> begin_edges_merged (const db::Edges *edges)
|
||||
{
|
||||
return db::generic_shape_iterator<db::EdgeWithProperties> (db::make_wp_iter (edges->delegate ()->begin_merged ()));
|
||||
}
|
||||
|
||||
extern Class<db::ShapeCollection> decl_dbShapeCollection;
|
||||
|
||||
|
|
@ -2266,15 +2275,18 @@ Class<db::Edges> decl_Edges (decl_dbShapeCollection, "db", "Edges",
|
|||
"\n"
|
||||
"This method has been introduced in version 0.27."
|
||||
) +
|
||||
gsi::iterator ("each", &db::Edges::begin,
|
||||
gsi::iterator_ext ("each", &begin_edges,
|
||||
"@brief Returns each edge of the region\n"
|
||||
"\n"
|
||||
"Starting with version 0.30, the iterator delivers an EdgeWithProperties object."
|
||||
) +
|
||||
gsi::iterator ("each_merged", &db::Edges::begin_merged,
|
||||
gsi::iterator_ext ("each_merged", &begin_edges_merged,
|
||||
"@brief Returns each edge of the region\n"
|
||||
"\n"
|
||||
"In contrast to \\each, this method delivers merged edges if merge semantics applies while \\each delivers the original edges only.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.25."
|
||||
"Starting with version 0.30, the iterator delivers an EdgeWithProperties object."
|
||||
) +
|
||||
method ("[]", &db::Edges::nth, gsi::arg ("n"),
|
||||
"@brief Returns the nth edge of the collection\n"
|
||||
|
|
|
|||
|
|
@ -1168,6 +1168,16 @@ rasterize1 (const db::Region *region, const db::Point &origin, const db::Vector
|
|||
return rasterize2 (region, origin, pixel_size, pixel_size, nx, ny);
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::PolygonWithProperties> begin_region (const db::Region *region)
|
||||
{
|
||||
return db::generic_shape_iterator<db::PolygonWithProperties> (db::make_wp_iter (region->delegate ()->begin ()));
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::PolygonWithProperties> begin_region_merged (const db::Region *region)
|
||||
{
|
||||
return db::generic_shape_iterator<db::PolygonWithProperties> (db::make_wp_iter (region->delegate ()->begin_merged ()));
|
||||
}
|
||||
|
||||
static tl::Variant begin_shapes_rec (const db::Region *region)
|
||||
{
|
||||
auto res = region->begin_iter ();
|
||||
|
|
@ -3725,15 +3735,18 @@ Class<db::Region> decl_Region (decl_dbShapeCollection, "db", "Region",
|
|||
"\n"
|
||||
"This method has been introduced in version 0.27."
|
||||
) +
|
||||
iterator ("each", &db::Region::begin,
|
||||
iterator_ext ("each", &begin_region,
|
||||
"@brief Returns each polygon of the region\n"
|
||||
"\n"
|
||||
"This returns the raw polygons (not merged polygons if merged semantics is enabled).\n"
|
||||
"\n"
|
||||
"Starting with version 0.30, the iterator delivers a RegionWithProperties object."
|
||||
) +
|
||||
iterator ("each_merged", &db::Region::begin_merged,
|
||||
iterator_ext ("each_merged", &begin_region_merged,
|
||||
"@brief Returns each merged polygon of the region\n"
|
||||
"\n"
|
||||
"This returns the raw polygons if merged semantics is disabled or the merged ones if merged semantics is enabled.\n"
|
||||
"Starting with version 0.30, the iterator delivers a RegionWithProperties object."
|
||||
) +
|
||||
method ("[]", &db::Region::nth, gsi::arg ("n"),
|
||||
"@brief Returns the nth polygon of the region\n"
|
||||
|
|
|
|||
|
|
@ -362,6 +362,11 @@ static db::Region pull_interacting (const db::Texts *r, const db::Region &other)
|
|||
return out;
|
||||
}
|
||||
|
||||
static db::generic_shape_iterator<db::TextWithProperties> begin_texts (const db::Texts *texts)
|
||||
{
|
||||
return db::generic_shape_iterator<db::TextWithProperties> (db::make_wp_iter (texts->delegate ()->begin ()));
|
||||
}
|
||||
|
||||
extern Class<db::ShapeCollection> decl_dbShapeCollection;
|
||||
|
||||
Class<db::Texts> decl_Texts (decl_dbShapeCollection, "db", "Texts",
|
||||
|
|
@ -721,8 +726,10 @@ Class<db::Texts> decl_Texts (decl_dbShapeCollection, "db", "Texts",
|
|||
"\n"
|
||||
"This method has been introduced in version 0.27."
|
||||
) +
|
||||
gsi::iterator ("each", &db::Texts::begin,
|
||||
gsi::iterator_ext ("each", &begin_texts,
|
||||
"@brief Returns each text of the text collection\n"
|
||||
"\n"
|
||||
"Starting with version 0.30, the iterator delivers TextWithProperties objects."
|
||||
) +
|
||||
method ("[]", &db::Texts::nth, gsi::arg ("n"),
|
||||
"@brief Returns the nth text\n"
|
||||
|
|
|
|||
|
|
@ -590,6 +590,12 @@ class DBEdgePairs_TestClass < TestBase
|
|||
r.insert(RBA::EdgePairWithProperties::new(RBA::EdgePair::new(RBA::Edge::new(0, 0, 100, 100), RBA::Edge::new(200, 300, 200, 500)), { 1 => "one" }))
|
||||
assert_equal(r.to_s, "(0,0;100,100)/(200,300;200,500){1=>one}")
|
||||
|
||||
r = RBA::EdgePairs::new
|
||||
r.insert(RBA::EdgePairWithProperties::new(RBA::EdgePair::new(RBA::Edge::new(0, 0, 100, 100), RBA::Edge::new(200, 300, 200, 500)), { 1 => "one" }))
|
||||
r.insert(RBA::EdgePair::new(RBA::Edge::new(0, 10, 100, 110), RBA::Edge::new(220, 300, 220, 500)))
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(0,10;100,110)/(220,300;220,500) props={};(0,0;100,100)/(200,300;200,500) props={1=>one}")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -129,12 +129,8 @@ class DBEdges_TestClass < TestBase
|
|||
|
||||
r.assign(RBA::Edges::new(RBA::Box::new(10, 20, 100, 200)))
|
||||
assert_equal(csort(r.to_s), csort("(10,20;10,200);(10,200;100,200);(100,200;100,20);(100,20;10,20)"))
|
||||
s = ""
|
||||
r.each do |e|
|
||||
s.empty? || s += ";"
|
||||
s += e.to_s
|
||||
end
|
||||
assert_equal(s, "(10,20;10,200);(10,200;100,200);(100,200;100,20);(100,20;10,20)")
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,20;10,200) props={};(10,200;100,200) props={};(100,200;100,20) props={};(100,20;10,20) props={}")
|
||||
assert_equal(r.is_empty?, false)
|
||||
assert_equal(r.count, 4)
|
||||
assert_equal(r.hier_count, 4)
|
||||
|
|
@ -1019,6 +1015,26 @@ class DBEdges_TestClass < TestBase
|
|||
r.insert(s)
|
||||
assert_equal(r.to_s, "(0,0;100,100){1=>one}")
|
||||
|
||||
r = RBA::Edges::new
|
||||
s = RBA::Shapes::new
|
||||
s.insert(RBA::EdgeWithProperties::new(RBA::Edge::new(0, 0, 100, 100), { 1 => "one" }))
|
||||
r.insert(s)
|
||||
assert_equal(r.to_s, "(0,0;100,100){1=>one}")
|
||||
|
||||
r = RBA::Edges::new
|
||||
r.insert(RBA::EdgeWithProperties::new(RBA::Edge::new(0, 0, 100, 0), { 1 => "one" }))
|
||||
r.insert(RBA::Edge::new(10, 0, 110, 0))
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,0;110,0) props={};(0,0;100,0) props={1=>one}")
|
||||
s = r.each_merged.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,0;110,0) props={};(0,0;100,0) props={1=>one}")
|
||||
|
||||
r = RBA::Edges::new
|
||||
r.insert(RBA::EdgeWithProperties::new(RBA::Edge::new(0, 0, 100, 0), { 1 => "one" }))
|
||||
r.insert(RBA::EdgeWithProperties::new(RBA::Edge::new(10, 0, 110, 0), { 1 => "one" }))
|
||||
s = r.each_merged.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(0,0;110,0) props={1=>one}")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -180,12 +180,8 @@ class DBRegion_TestClass < TestBase
|
|||
RBA::Polygon::new(RBA::Box::new(20, 50, 120, 250))
|
||||
] )
|
||||
assert_equal(csort(r.to_s), csort("(10,20;10,200;100,200;100,20);(20,50;20,250;120,250;120,50)"))
|
||||
s = ""
|
||||
r.each do |p|
|
||||
s.empty? || s += ";"
|
||||
s += p.to_s
|
||||
end
|
||||
assert_equal(s, "(10,20;10,200;100,200;100,20);(20,50;20,250;120,250;120,50)")
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,20;10,200;100,200;100,20) props={};(20,50;20,250;120,250;120,50) props={}")
|
||||
assert_equal(r.merged.to_s, "(10,20;10,200;20,200;20,250;120,250;120,50;100,50;100,20)")
|
||||
assert_equal(r.merged(false, 1).to_s, "(10,20;10,200;20,200;20,250;120,250;120,50;100,50;100,20)")
|
||||
assert_equal(r.merged(1).to_s, "(10,20;10,200;20,200;20,250;120,250;120,50;100,50;100,20)")
|
||||
|
|
@ -1571,6 +1567,20 @@ class DBRegion_TestClass < TestBase
|
|||
r.insert(s)
|
||||
assert_equal(r.to_s, "(0,0;0,200;100,200;100,0){1=>one}")
|
||||
|
||||
r = RBA::Region::new
|
||||
r.insert(RBA::BoxWithProperties::new(RBA::Box::new(0, 0, 100, 200), { 1 => "one" }))
|
||||
r.insert(RBA::Box::new(10, 20, 110, 220))
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,20;10,220;110,220;110,20) props={};(0,0;0,200;100,200;100,0) props={1=>one}")
|
||||
s = r.each_merged.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(10,20;10,220;110,220;110,20) props={};(0,0;0,200;100,200;100,0) props={1=>one}")
|
||||
|
||||
r = RBA::Region::new
|
||||
r.insert(RBA::BoxWithProperties::new(RBA::Box::new(0, 0, 100, 200), { 1 => "one" }))
|
||||
r.insert(RBA::BoxWithProperties::new(RBA::Box::new(10, 20, 110, 220), { 1 => "one" }))
|
||||
s = r.each_merged.collect(&:to_s).join(";")
|
||||
assert_equal(s, "(0,0;0,200;10,200;10,220;110,220;110,20;100,20;100,0) props={1=>one}")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -459,6 +459,12 @@ class DBTexts_TestClass < TestBase
|
|||
r.insert(RBA::TextWithProperties::new(RBA::Text::new("abc", RBA::Trans::new), { 1 => "one" }))
|
||||
assert_equal(r.to_s, "('abc',r0 0,0){1=>one}")
|
||||
|
||||
r = RBA::Texts::new
|
||||
r.insert(RBA::TextWithProperties::new(RBA::Text::new("abc", RBA::Trans::new), { 1 => "one" }))
|
||||
r.insert(RBA::Text::new("xuv", RBA::Trans::new))
|
||||
s = r.each.collect(&:to_s).join(";")
|
||||
assert_equal(s, "('xuv',r0 0,0) props={};('abc',r0 0,0) props={1=>one}")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue