- if (!edge[LEFT].empty_b ())
- m = edge[LEFT];
-
- if (!edge_line[LEFT].empty_b ())
- m.add_at_edge (X_AXIS, RIGHT, edge_line[LEFT], 0);
- if (!line.empty_b ())
- m.add_at_edge (X_AXIS, RIGHT, line,
- edge_line[LEFT].empty_b () ? 0 : -thick/2);
- if (!edge_line[RIGHT].empty_b ())
- m.add_at_edge (X_AXIS, RIGHT, edge_line[RIGHT], -thick/2);
- if (!edge[RIGHT].empty_b ())
- m.add_at_edge (X_AXIS, RIGHT, edge[RIGHT], 0);
- m.translate_axis (broken_left + extra_off[LEFT] + shorten[LEFT], X_AXIS);
+ do
+ {
+ Interval ext = edge[d].extent (X_AXIS);
+
+ edge[d].translate_axis (span_points[d], X_AXIS);
+ m.add_molecule (edge[d]);
+ edge_line[d].translate_axis (span_points[d], X_AXIS);
+ m.add_molecule (edge_line[d]);
+ if (!ext.empty_b ())
+ span_points[d] += -d * ext[-d];
+ }
+ while (flip (&d) != LEFT);