mirror of https://github.com/KLayout/klayout.git
New import methods for Region, EdgePairs and Edges
Region: insert of other regions, shape collections (with transformation) Edges: insert of other edge collections, regions, shape collections (with transformation) EdgePairs: insert of other edge pair collections
This commit is contained in:
parent
43359195ea
commit
db5ac31ada
|
|
@ -131,6 +131,13 @@ static db::Edges second_edges (const db::EdgePairs *ep)
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void insert_e (db::EdgePairs *e, const db::EdgePairs &a)
|
||||||
|
{
|
||||||
|
for (db::EdgePairs::const_iterator p = a.begin (); p != a.end (); ++p) {
|
||||||
|
e->insert (*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Class<db::EdgePairs> decl_EdgePairs ("EdgePairs",
|
Class<db::EdgePairs> decl_EdgePairs ("EdgePairs",
|
||||||
constructor ("new", &new_v,
|
constructor ("new", &new_v,
|
||||||
"@brief Default constructor\n"
|
"@brief Default constructor\n"
|
||||||
|
|
@ -259,6 +266,11 @@ Class<db::EdgePairs> decl_EdgePairs ("EdgePairs",
|
||||||
"\n"
|
"\n"
|
||||||
"@return The transformed edge pair collection.\n"
|
"@return The transformed edge pair collection.\n"
|
||||||
) +
|
) +
|
||||||
|
method_ext ("insert", &insert_e,
|
||||||
|
"@brief Inserts all edge pairs from the other edge pair collection into this edge pair collection\n"
|
||||||
|
"@args edge_pairs\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
method_ext ("edges", &edges,
|
method_ext ("edges", &edges,
|
||||||
"@brief Decomposes the edge pairs into single edges\n"
|
"@brief Decomposes the edge pairs into single edges\n"
|
||||||
"@return An edge collection containing the individual edges\n"
|
"@return An edge collection containing the individual edges\n"
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,40 @@ static int projection_metrics ()
|
||||||
return db::Projection;
|
return db::Projection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void insert_r (db::Edges *e, const db::Region &a)
|
||||||
|
{
|
||||||
|
for (db::Region::const_iterator p = a.begin (); ! p.at_end (); ++p) {
|
||||||
|
e->insert (*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void insert_e (db::Edges *e, const db::Edges &a)
|
||||||
|
{
|
||||||
|
for (db::Edges::const_iterator p = a.begin (); ! p.at_end (); ++p) {
|
||||||
|
e->insert (*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Trans>
|
||||||
|
static void insert_st (db::Edges *e, const db::Shapes &a, const Trans &t)
|
||||||
|
{
|
||||||
|
for (db::Shapes::shape_iterator p = a.begin (db::ShapeIterator::Polygons | db::ShapeIterator::Boxes | db::ShapeIterator::Paths); !p.at_end (); ++p) {
|
||||||
|
db::Polygon poly;
|
||||||
|
p->polygon (poly);
|
||||||
|
e->insert (poly.transformed (t));
|
||||||
|
}
|
||||||
|
for (db::Shapes::shape_iterator p = a.begin (db::ShapeIterator::Edges); !p.at_end (); ++p) {
|
||||||
|
db::Edge edge;
|
||||||
|
p->edge (edge);
|
||||||
|
e->insert (edge.transformed (t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void insert_s (db::Edges *e, const db::Shapes &a)
|
||||||
|
{
|
||||||
|
insert_st (e, a, db::UnitTrans ());
|
||||||
|
}
|
||||||
|
|
||||||
Class<db::Edges> dec_Edges ("Edges",
|
Class<db::Edges> dec_Edges ("Edges",
|
||||||
constructor ("new", &new_v,
|
constructor ("new", &new_v,
|
||||||
"@brief Default constructor\n"
|
"@brief Default constructor\n"
|
||||||
|
|
@ -488,7 +522,44 @@ Class<db::Edges> dec_Edges ("Edges",
|
||||||
"\n"
|
"\n"
|
||||||
"Inserts the edges that form the contour of the path into the edge collection.\n"
|
"Inserts the edges that form the contour of the path into the edge collection.\n"
|
||||||
) +
|
) +
|
||||||
method_ext ("insert", &insert_si,
|
method_ext ("insert", &insert_e,
|
||||||
|
"@brief Inserts all edges from the other edge collection into this one\n"
|
||||||
|
"@args edges\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_r,
|
||||||
|
"@brief Inserts a region\n"
|
||||||
|
"@args region\n"
|
||||||
|
"Inserts the edges that form the contours of the polygons from the region into the edge collection.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_s,
|
||||||
|
"@brief Inserts all edges from the shape collection into this edge collection\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method takes each edge from the shape collection and "
|
||||||
|
"insertes it into the region. \"Polygon-like\" objects are inserted as edges forming the contours of the polygons.\n"
|
||||||
|
"Text objects are ignored.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_st<db::Trans>,
|
||||||
|
"@brief Inserts all edges from the shape collection into this edge collection (with transformation)\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method acts as the version without transformation, but will apply the given "
|
||||||
|
"transformation before inserting the edges.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_st<db::ICplxTrans>,
|
||||||
|
"@brief Inserts all edges from the shape collection into this edge collection with complex transformation\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method acts as the version without transformation, but will apply the given "
|
||||||
|
"complex transformation before inserting the edges.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_si,
|
||||||
"@brief Inserts all shapes delivered by the recursive shape iterator into this edge collection\n"
|
"@brief Inserts all shapes delivered by the recursive shape iterator into this edge collection\n"
|
||||||
"@args shape_iterator\n"
|
"@args shape_iterator\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
||||||
|
|
@ -255,6 +255,28 @@ static void insert_a (db::Region *r, const std::vector <db::Polygon> &a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void insert_r (db::Region *r, const db::Region &a)
|
||||||
|
{
|
||||||
|
for (db::Region::const_iterator p = a.begin (); ! p.at_end (); ++p) {
|
||||||
|
r->insert (*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Trans>
|
||||||
|
static void insert_st (db::Region *r, const db::Shapes &a, const Trans &t)
|
||||||
|
{
|
||||||
|
for (db::Shapes::shape_iterator p = a.begin (db::ShapeIterator::Polygons | db::ShapeIterator::Boxes | db::ShapeIterator::Paths); !p.at_end (); ++p) {
|
||||||
|
db::Polygon poly;
|
||||||
|
p->polygon (poly);
|
||||||
|
r->insert (poly.transformed (t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void insert_s (db::Region *r, const db::Shapes &a)
|
||||||
|
{
|
||||||
|
insert_st (r, a, db::UnitTrans ());
|
||||||
|
}
|
||||||
|
|
||||||
static void insert_si (db::Region *r, db::RecursiveShapeIterator si)
|
static void insert_si (db::Region *r, db::RecursiveShapeIterator si)
|
||||||
{
|
{
|
||||||
while (! si.at_end ()) {
|
while (! si.at_end ()) {
|
||||||
|
|
@ -1067,6 +1089,40 @@ Class<db::Region> decl_Region ("Region",
|
||||||
"@brief Inserts all polygons from the array into this region\n"
|
"@brief Inserts all polygons from the array into this region\n"
|
||||||
"@args array\n"
|
"@args array\n"
|
||||||
) +
|
) +
|
||||||
|
method_ext ("insert", &insert_r,
|
||||||
|
"@brief Inserts all polygons from the other region into this region\n"
|
||||||
|
"@args region\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_s,
|
||||||
|
"@brief Inserts all polygons from the shape collection into this region\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method takes each \"polygon-like\" shape from the shape collection and "
|
||||||
|
"insertes this shape into the region. Paths and boxes are converted to polygons during this process. "
|
||||||
|
"Edges and text objects are ignored.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_st<db::Trans>,
|
||||||
|
"@brief Inserts all polygons from the shape collection into this region with transformation\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method takes each \"polygon-like\" shape from the shape collection and "
|
||||||
|
"insertes this shape into the region after applying the given transformation. "
|
||||||
|
"Paths and boxes are converted to polygons during this process. "
|
||||||
|
"Edges and text objects are ignored.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
|
method_ext ("insert", &insert_st<db::ICplxTrans>,
|
||||||
|
"@brief Inserts all polygons from the shape collection into this region with complex transformation\n"
|
||||||
|
"@args shapes\n"
|
||||||
|
"This method takes each \"polygon-like\" shape from the shape collection and "
|
||||||
|
"insertes this shape into the region after applying the given complex transformation. "
|
||||||
|
"Paths and boxes are converted to polygons during this process. "
|
||||||
|
"Edges and text objects are ignored.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.25."
|
||||||
|
) +
|
||||||
method_ext ("extents", &extents0,
|
method_ext ("extents", &extents0,
|
||||||
"@brief Returns a region with the bounding boxes of the polygons\n"
|
"@brief Returns a region with the bounding boxes of the polygons\n"
|
||||||
"This method will return a region consisting of the bounding boxes of the polygons.\n"
|
"This method will return a region consisting of the bounding boxes of the polygons.\n"
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,12 @@ class DBEdgePairs_TestClass < TestBase
|
||||||
assert_equal(r.size, 0)
|
assert_equal(r.size, 0)
|
||||||
assert_equal(r.bbox.to_s, "()")
|
assert_equal(r.bbox.to_s, "()")
|
||||||
|
|
||||||
|
ep = RBA::EdgePairs::new
|
||||||
|
e = RBA::EdgePairs::new
|
||||||
|
e.insert(RBA::EdgePair::new(RBA::Edge::new(0, 0, 0, 100), RBA::Edge::new(-10, 0, -20, 50)))
|
||||||
|
ep.insert(e)
|
||||||
|
assert_equal(ep.to_s, "(0,0;0,100)/(-10,0;-20,50)")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Basics
|
# Basics
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,48 @@ class DBEdges_TestClass < TestBase
|
||||||
r.insert(ly.begin_shapes(c1.cell_index, l1), RBA::ICplxTrans::new(10, 20))
|
r.insert(ly.begin_shapes(c1.cell_index, l1), RBA::ICplxTrans::new(10, 20))
|
||||||
assert_equal(r.to_s(30), "(0,0;0,40);(0,40;20,40);(20,40;20,0);(20,0;0,0);(0,100;0,140);(0,140;20,140);(20,140;20,100);(20,100;0,100);(200,100;200,140);(200,140;220,140);(220,140;220,100);(220,100;200,100)")
|
assert_equal(r.to_s(30), "(0,0;0,40);(0,40;20,40);(20,40;20,0);(20,0;0,0);(0,100;0,140);(0,140;20,140);(20,140;20,100);(20,100;0,100);(200,100;200,140);(200,140;220,140);(220,140;220,100);(220,100;200,100)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
rr = RBA::Edges::new
|
||||||
|
rr.insert(RBA::Edge::new(10, 20, 100, 200))
|
||||||
|
r.insert(rr)
|
||||||
|
assert_equal(r.to_s, "(10,20;100,200)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
rr = RBA::Region::new
|
||||||
|
rr.insert(RBA::Box::new(10, 20, 100, 200))
|
||||||
|
r.insert(rr)
|
||||||
|
assert_equal(r.to_s, "(10,20;10,200);(10,200;100,200);(100,200;100,20);(100,20;10,20)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Edge::new(10, 20, 100, 200))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "(10,20;100,200)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Polygon::new(RBA::Box::new(10, 20, 100, 200)))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "(10,20;10,200);(10,200;100,200);(100,200;100,20);(100,20;10,20)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Text::new("ABC", RBA::Trans::new))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Edge::new(10, 20, 100, 200))
|
||||||
|
r.insert(s, RBA::Trans::new(1, 1))
|
||||||
|
assert_equal(r.to_s, "(11,21;101,201)")
|
||||||
|
|
||||||
|
r = RBA::Edges::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Edge::new(10, 20, 100, 200))
|
||||||
|
r.insert(s, RBA::ICplxTrans::new(RBA::Trans::new(1, 1)))
|
||||||
|
assert_equal(r.to_s, "(11,21;101,201)")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Merge, booleans
|
# Merge, booleans
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,42 @@ class DBRegion_TestClass < TestBase
|
||||||
r.insert(ly.begin_shapes(c1.cell_index, l1), RBA::ICplxTrans::new(10, 20))
|
r.insert(ly.begin_shapes(c1.cell_index, l1), RBA::ICplxTrans::new(10, 20))
|
||||||
assert_equal(r.to_s, "(0,0;0,40;20,40;20,0);(0,100;0,140;20,140;20,100);(200,100;200,140;220,140;220,100)")
|
assert_equal(r.to_s, "(0,0;0,40;20,40;20,0);(0,100;0,140;20,140;20,100);(200,100;200,140;220,140;220,100)")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
rr = RBA::Region::new
|
||||||
|
rr.insert(RBA::Box::new(10, 20, 100, 200))
|
||||||
|
r.insert(rr)
|
||||||
|
assert_equal(r.to_s, "(10,20;10,200;100,200;100,20)")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Box::new(10, 20, 100, 200))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "(10,20;10,200;100,200;100,20)")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Polygon::new(RBA::Box::new(10, 20, 100, 200)))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "(10,20;10,200;100,200;100,20)")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Edge::new(10, 20, 100, 200))
|
||||||
|
r.insert(s)
|
||||||
|
assert_equal(r.to_s, "")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Box::new(10, 20, 100, 200))
|
||||||
|
r.insert(s, RBA::Trans::new(1, 1))
|
||||||
|
assert_equal(r.to_s, "(11,21;11,201;101,201;101,21)")
|
||||||
|
|
||||||
|
r = RBA::Region::new
|
||||||
|
s = RBA::Shapes::new
|
||||||
|
s.insert(RBA::Box::new(10, 20, 100, 200))
|
||||||
|
r.insert(s, RBA::ICplxTrans::new(RBA::Trans::new(1, 1)))
|
||||||
|
assert_equal(r.to_s, "(11,21;11,201;101,201;101,21)")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Booleans
|
# Booleans
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue