217 {
222 int dir1, dir2;
223 int sum1, sum2;
224 int stopped;
225 int fixed_count;
226 int d01, d12, d23, gapmin;
227 TPOINT d01vec, d12vec, d23vec;
228 EDGEPT *edgefix, *startfix;
229 EDGEPT *edgefix0, *edgefix1, *edgefix2, *edgefix3;
230
231 edgept = start;
233 && (dir1 =
235 && dir1 != 6)
236 edgept = edgept->
next;
237 loopstart = edgept;
238
239 stopped = 0;
241 do {
242 linestart = edgept;
244
246 edgept = edgept->
next;
248
250 if (((dir1 - dir2 + 1) & 7) < 3) {
252 edgept = edgept->
next;
254
256 else
258 }
259
260 if (edgept == loopstart)
261 stopped = 1;
262 if (sum2 + sum1 > 2
266
267 linestart = linestart->
prev;
269 }
270
272 || (edgept->
flags[
DIR] == dir1 && sum1 >= sum2)
274 || (edgept->
flags[
DIR] == dir2 && sum2 >= sum1))
275 && linestart->
next != edgept))
276 edgept = edgept->
next;
277 }
278
280 }
281
282 while (edgept != loopstart && !stopped);
283
284 edgept = start;
285 do {
291 edgept1 = edgept->
next;
293 }
294 edgept = edgept->
next;
295 }
296 while (edgept != start);
297
298 edgept = start;
299 do {
300
302
304
307
310 }
311 edgept = edgept->
next;
312 }
313 while (edgept != start);
314
315 stopped = 0;
316 if (area < 450)
317 area = 450;
318
320
321 edgept = start;
322 fixed_count = 0;
323 do {
325 fixed_count++;
326 edgept = edgept->
next;
327 }
328 while (edgept != start);
330 edgept = edgept->
next;
331 edgefix0 = edgept;
332
333 edgept = edgept->
next;
335 edgept = edgept->
next;
336 edgefix1 = edgept;
337
338 edgept = edgept->
next;
340 edgept = edgept->
next;
341 edgefix2 = edgept;
342
343 edgept = edgept->
next;
345 edgept = edgept->
next;
346 edgefix3 = edgept;
347
348 startfix = edgefix2;
349
350 do {
351 if (fixed_count <= 3)
352 break;
355
356
357
358
359
360 if (d12 <= gapmin) {
365 if (d01 > d23) {
367 fixed_count--;
368 }
369 else {
371 fixed_count--;
372 edgefix1 = edgefix2;
373 }
374 }
375 else {
376 edgefix0 = edgefix1;
377 edgefix1 = edgefix2;
378 }
379 edgefix2 = edgefix3;
380 edgept = edgept->
next;
382 if (edgept == startfix)
383 stopped = 1;
384 edgept = edgept->
next;
385 }
386 edgefix3 = edgept;
387 edgefix = edgefix2;
388 }
389 while ((edgefix != startfix) && (!stopped));
390}
void diff(const TPOINT &p1, const TPOINT &p2)