Go to the source code of this file.
Definition at line 62 of file polyaprx.cpp.
66 EDGEPT* edgepts = stack_edgepts;
74 if (!poly_wide_objects_better && loop_box.
width() > area)
75 area = loop_box.
width();
82 EDGEPT* prev_result =
nullptr;
86 new_pt->prev = prev_result;
87 if (prev_result ==
nullptr) {
90 prev_result->
next = new_pt;
91 new_pt->
prev = prev_result;
93 if (allow_detailed_fx) {
99 edgept = edgept->
next;
101 while (edgept != startpt);
102 prev_result->
next = result;
103 result->
prev = prev_result;
104 if (edgepts != stack_edgepts)
EDGEPT * poly2(EDGEPT *startpt, int area)
const TBOX & bounding_box() const
static TESSLINE * BuildFromOutlineList(EDGEPT *outline)
int32_t pathlength() const
void fix2(EDGEPT *start, int area)
EDGEPT * edgesteps_to_edgepts(C_OUTLINE *c_outline, EDGEPT edgepts[])
Definition at line 499 of file polyaprx.cpp.
515 if (edge->
next == last)
521 if (vecsum.
x == 0 && vecsum.
y == 0) {
527 vlen = vecsum.
x > 0 ? vecsum.
x : -vecsum.
x;
530 else if (-vecsum.
y > vlen)
536 squaresum = ptcount = 0;
540 perp =
CROSS (vec, vecsum);
547 tprintf (
"Cutline:Final perp=%d\n", perp);
548 if (perp > maxperp) {
552 vec.
x += edge->
vec.
x;
553 vec.
y += edge->
vec.
y;
556 while (edge != last);
561 if (maxperp < 256 * INT16_MAX) {
569 if (squaresum < 256 * INT16_MAX)
571 perp = (squaresum << 8) / (perp * ptcount);
574 perp = (squaresum / perp << 8) / ptcount;
577 tprintf (
"Cutline:A=%d, max=%.2f(%.2f%%), msd=%.2f(%.2f%%)\n",
578 area, maxperp / 256.0, maxperp * 200.0 / area,
579 perp / 256.0, perp * 300.0 / area);
580 if (maxperp *
par1 >= 10 * area || perp *
par2 >= 10 * area || vlen >= 126) {
583 cutline(first, maxpoint, area);
void cutline(EDGEPT *first, EDGEPT *last, int area)
DLLSYM void tprintf(const char *format,...)
Definition at line 117 of file polyaprx.cpp.
139 int prev_stepindex = 0;
141 dir = c_outline->
step_dir (stepindex);
142 vec = c_outline->
step (stepindex);
143 if (stepindex < length - 1
144 && c_outline->
step_dir (stepindex + 1) - dir == -32) {
146 vec += c_outline->
step (stepindex + 1);
156 edgepts[epindex].
pos.
x = pos.
x ();
157 edgepts[epindex].
pos.
y = pos.
y ();
159 edgepts[epindex].
vec.
x = prev_vec.
x ();
160 edgepts[epindex].
vec.
y = prev_vec.
y ();
163 edgepts[epindex].
prev = &edgepts[epindex - 1];
165 edgepts[epindex].
next = &edgepts[epindex + 1];
167 epdir =
DIR128(0) - prevdir;
170 edgepts[epindex].
flags[
DIR] = epdir;
173 edgepts[epindex].
step_count = stepindex - prev_stepindex;
178 prev_stepindex = stepindex;
182 stepindex += stepinc;
184 while (stepindex < length);
185 edgepts[epindex].
pos.
x = pos.
x ();
186 edgepts[epindex].
pos.
y = pos.
y ();
188 edgepts[epindex].
vec.
x = prev_vec.
x ();
189 edgepts[epindex].
vec.
y = prev_vec.
y ();
195 edgepts[epindex].
step_count = stepindex - prev_stepindex;
196 edgepts[epindex].
prev = &edgepts[epindex - 1];
197 edgepts[epindex].
next = &edgepts[0];
199 epdir =
DIR128(0) - prevdir;
202 edgepts[epindex].
flags[
DIR] = epdir;
203 edgepts[0].
prev = &edgepts[epindex];
ICOORD step(int index) const
const ICOORD & start_pos() const
int16_t y() const
access_function
DIR128 step_dir(int index) const
int32_t pathlength() const
int16_t x() const
access function
| void fix2 |
( |
EDGEPT * |
start, |
|
|
int |
area |
|
) |
| |
Definition at line 216 of file polyaprx.cpp.
227 int d01, d12, d23, gapmin;
228 TPOINT d01vec, d12vec, d23vec;
229 EDGEPT *edgefix, *startfix;
230 EDGEPT *edgefix0, *edgefix1, *edgefix2, *edgefix3;
237 edgept = edgept->
next;
247 edgept = edgept->
next;
251 if (((dir1 - dir2 + 1) & 7) < 3) {
253 edgept = edgept->
next;
261 if (edgept == loopstart)
268 linestart = linestart->
prev;
273 || (edgept->
flags[
DIR] == dir1 && sum1 >= sum2)
275 || (edgept->
flags[
DIR] == dir2 && sum2 >= sum1))
276 && linestart->
next != edgept))
277 edgept = edgept->
next;
283 while (edgept != loopstart && !stopped);
292 edgept1 = edgept->
next;
295 edgept = edgept->
next;
297 while (edgept != start);
312 edgept = edgept->
next;
314 while (edgept != start);
327 edgept = edgept->
next;
329 while (edgept != start);
331 edgept = edgept->
next;
334 edgept = edgept->
next;
336 edgept = edgept->
next;
339 edgept = edgept->
next;
341 edgept = edgept->
next;
344 edgept = edgept->
next;
346 edgept = edgept->
next;
352 if (fixed_count <= 3)
381 edgept = edgept->
next;
383 if (edgept == startfix)
385 edgept = edgept->
next;
390 while ((edgefix != startfix) && (!stopped));
#define point_diff(p, p1, p2)
Definition at line 401 of file polyaprx.cpp.
424 edgept = edgept->
next;
426 while (edgept != startpt);
442 edgept = edgept->
next;
445 && edgept != loopstart && edgesum < 126);
448 (
"Poly2:starting at (%d,%d)+%d=(%d,%d),%d to (%d,%d)\n",
450 linestart->
vec.
x, linestart->
vec.
y, edgesum, edgept->
pos.
x,
453 cutline(linestart, edgept, area);
456 && edgept != loopstart)
457 edgept = edgept->
next;
460 while (edgept != loopstart);
465 edgept = edgept->
next;
468 while (edgept != loopstart);
476 edgept = edgept->
next;
479 linestart->
next = edgept;
480 edgept->
prev = linestart;
484 while (edgept != loopstart);
void cutline(EDGEPT *first, EDGEPT *last, int area)
DLLSYM void tprintf(const char *format,...)