@@ -115,6 +115,7 @@ class clipper {
115
115
const auto & b = line[i + 1 ];
116
116
const double ak = get<I>(a);
117
117
const double bk = get<I>(b);
118
+ const bool isLastSeg = (i == (len - 2 ));
118
119
119
120
if (lineMetrics) segLen = ::hypot ((b.x - a.x ), (b.y - a.y ));
120
121
@@ -135,9 +136,11 @@ class clipper {
135
136
t = calc_progress<I>(a, b, k1);
136
137
slice.emplace_back (intersect<I>(a, b, k1, t));
137
138
if (lineMetrics) slice.segStart = lineLen + segLen * t;
139
+ if (isLastSeg) slice.emplace_back (b); // last point
138
140
139
- if (i == len - 2 )
140
- slice.emplace_back (b); // last point
141
+ } else if (bk == k1 && !isLastSeg) { // --->|.. |
142
+ if (lineMetrics) slice.segStart = lineLen + segLen;
143
+ slice.emplace_back (b);
141
144
}
142
145
} else if (ak > k2) {
143
146
if (bk < k1) { // <--|-----|---
@@ -152,13 +155,16 @@ class clipper {
152
155
slices.emplace_back (std::move (slice));
153
156
154
157
slice = newSlice (line);
158
+
155
159
} else if (bk < k2) { // | <--|---
156
160
t = calc_progress<I>(a, b, k2);
157
161
slice.emplace_back (intersect<I>(a, b, k2, t));
158
162
if (lineMetrics) slice.segStart = lineLen + segLen * t;
163
+ if (isLastSeg) slice.emplace_back (b); // last point
159
164
160
- if (i == len - 2 )
161
- slice.emplace_back (b); // last point
165
+ } else if (bk == k2 && !isLastSeg) { // | ..|<---
166
+ if (lineMetrics) slice.segStart = lineLen + segLen;
167
+ slice.emplace_back (b);
162
168
}
163
169
} else {
164
170
slice.emplace_back (a);
@@ -177,7 +183,7 @@ class clipper {
177
183
slices.emplace_back (std::move (slice));
178
184
slice = newSlice (line);
179
185
180
- } else if (i == len - 2 ) { // | --> |
186
+ } else if (isLastSeg ) { // | --> |
181
187
slice.emplace_back (b);
182
188
}
183
189
}
@@ -186,7 +192,7 @@ class clipper {
186
192
}
187
193
188
194
if (!slice.empty ()) { // add the final slice
189
- slice.segEnd = lineLen;
195
+ if (lineMetrics) slice.segEnd = lineLen;
190
196
slices.emplace_back (std::move (slice));
191
197
}
192
198
}
0 commit comments