mirror of https://github.com/KLayout/klayout.git
Merge branch 'issue-1472' into wip2
This commit is contained in:
commit
e9429320bb
|
|
@ -424,17 +424,53 @@ DEFImporter::produce_routing_geometry (db::Cell &design, const Polygon *style, u
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options ().joined_paths ()) {
|
auto pt_from = pt0;
|
||||||
|
auto pt_to = pt + 1;
|
||||||
|
|
||||||
|
// do not split away end segments if they are shorter than half the width
|
||||||
|
bool dont_join_first = false;
|
||||||
|
bool dont_join_last = false;
|
||||||
|
if (pt_to - pt_from >= 3 && (pt_from[1] - pt_from[0]).length() + be < wxy / 2) {
|
||||||
|
dont_join_first = true;
|
||||||
|
}
|
||||||
|
if (pt_to - pt_from >= 3 && (pt_to[-1] - pt_to[-2]).length() + ee < wxy / 2) {
|
||||||
|
dont_join_last = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options ().joined_paths () || (dont_join_first && dont_join_last && pt_to - pt_from <= 4)) {
|
||||||
|
|
||||||
// single path
|
// single path
|
||||||
db::Path p (pt0, pt + 1, wxy, be, ee, false);
|
db::Path p (pt_from, pt_to, wxy, be, ee, false);
|
||||||
if (prop_id != 0) {
|
if (prop_id != 0) {
|
||||||
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
||||||
} else {
|
} else {
|
||||||
design.shapes (layer).insert (p);
|
design.shapes (layer).insert (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
if (dont_join_first) {
|
||||||
|
db::Path p (pt_from, pt_from + 3, wxy, be, pt_from + 2 != pt ? wxy / 2 : ee, false);
|
||||||
|
if (prop_id != 0) {
|
||||||
|
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
||||||
|
} else {
|
||||||
|
design.shapes (layer).insert (p);
|
||||||
|
}
|
||||||
|
pt_from += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dont_join_last) {
|
||||||
|
db::Path p (pt_to - 3, pt_to, wxy, pt_to - 3 != pt0 ? wxy / 2 : be, ee, false);
|
||||||
|
if (prop_id != 0) {
|
||||||
|
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
||||||
|
} else {
|
||||||
|
design.shapes (layer).insert (p);
|
||||||
|
}
|
||||||
|
pt_to -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
// multipart paths
|
// multipart paths
|
||||||
for (std::vector<db::Point>::const_iterator i = pt0; i != pt; ++i) {
|
for (auto i = pt_from; i + 1 != pt_to; ++i) {
|
||||||
db::Path p (i, i + 2, wxy, i == pt0 ? be : wxy / 2, i + 1 != pt ? wxy / 2 : ee, false);
|
db::Path p (i, i + 2, wxy, i == pt0 ? be : wxy / 2, i + 1 != pt ? wxy / 2 : ee, false);
|
||||||
if (prop_id != 0) {
|
if (prop_id != 0) {
|
||||||
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
design.shapes (layer).insert (db::object_with_properties<db::Path> (p, prop_id));
|
||||||
|
|
@ -442,6 +478,7 @@ DEFImporter::produce_routing_geometry (db::Cell &design, const Polygon *style, u
|
||||||
design.shapes (layer).insert (p);
|
design.shapes (layer).insert (p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
was_path_before = true;
|
was_path_before = true;
|
||||||
|
|
|
||||||
|
|
@ -1005,3 +1005,9 @@ TEST(208_nets_and_rects)
|
||||||
run_test (_this, "issue-1432", "map:test.map+lef:test.lef+def:test.def", "au.oas", default_options (), false);
|
run_test (_this, "issue-1432", "map:test.map+lef:test.lef+def:test.def", "au.oas", default_options (), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// issue-1472
|
||||||
|
TEST(209_invalid_split_paths)
|
||||||
|
{
|
||||||
|
run_test (_this, "issue-1472", "map:tech.map+lef:tech.lef.gz+def:test.def.gz", "au.oas", default_options (), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,2 @@
|
||||||
|
METAL3 SPNET 28 0
|
||||||
|
METAL5 SPNET 33 0
|
||||||
Binary file not shown.
Loading…
Reference in New Issue