mirror of https://github.com/KLayout/klayout.git
Considering degenerated edges for partial edge selectors
This commit is contained in:
parent
8b6ed7f663
commit
db168d8a55
|
|
@ -189,17 +189,22 @@ EdgeSegmentSelector::process (const db::Edge &edge, std::vector<db::Edge> &res)
|
||||||
{
|
{
|
||||||
double l = std::max (edge.double_length () * m_fraction, double (m_length));
|
double l = std::max (edge.double_length () * m_fraction, double (m_length));
|
||||||
|
|
||||||
|
db::DVector ds;
|
||||||
|
if (! edge.is_degenerate ()) {
|
||||||
|
ds = db::DVector (edge.d ()) * (l / edge.double_length ());
|
||||||
|
}
|
||||||
|
|
||||||
if (m_mode < 0) {
|
if (m_mode < 0) {
|
||||||
|
|
||||||
res.push_back (db::Edge (edge.p1 (), db::Point (db::DPoint (edge.p1 ()) + db::DVector (edge.d ()) * (l / edge.double_length ()))));
|
res.push_back (db::Edge (edge.p1 (), db::Point (db::DPoint (edge.p1 ()) + ds)));
|
||||||
|
|
||||||
} else if (m_mode > 0) {
|
} else if (m_mode > 0) {
|
||||||
|
|
||||||
res.push_back (db::Edge (db::Point (db::DPoint (edge.p2 ()) - db::DVector (edge.d ()) * (l / edge.double_length ())), edge.p2 ()));
|
res.push_back (db::Edge (db::Point (db::DPoint (edge.p2 ()) - ds), edge.p2 ()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
db::DVector dl = db::DVector (edge.d ()) * (0.5 * l / edge.double_length ());
|
db::DVector dl = ds * 0.5;
|
||||||
db::DPoint center = db::DPoint (edge.p1 ()) + db::DVector (edge.p2 () - edge.p1 ()) * 0.5;
|
db::DPoint center = db::DPoint (edge.p1 ()) + db::DVector (edge.p2 () - edge.p1 ()) * 0.5;
|
||||||
|
|
||||||
res.push_back (db::Edge (db::Point (center - dl), db::Point (center + dl)));
|
res.push_back (db::Edge (db::Point (center - dl), db::Point (center + dl)));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue