#include "mfcpch.h"
#include <stdio.h>
#include "polyaprx.h"
#include "params.h"
#include "tprintf.h"
Go to the source code of this file.
Macro Definition Documentation
#define FASTEDGELENGTH 256 |
#define FIXED 4 /*OUTLINE point is fixed */ |
#define RUNLENGTH 1 /*length of run */ |
Function Documentation
Definition at line 59 of file polyaprx.cpp.
{
EDGEPT* edgepts = stack_edgepts;
area *= area;
edgept =
poly2 (edgepts, area);
do {
new_pt->
prev = prev_result;
if (prev_result ==
NULL) {
result = new_pt;
} else {
prev_result->
next = new_pt;
new_pt->
prev = prev_result;
}
prev_result = new_pt;
}
while (edgept != startpt);
prev_result->
next = result;
result->
prev = prev_result;
if (edgepts != stack_edgepts)
delete [] edgepts;
}
Definition at line 484 of file polyaprx.cpp.
{
int vlen;
int maxperp;
register int perp;
int ptcount;
int squaresum;
edge = first;
return;
if (vecsum.
x == 0 && vecsum.
y == 0) {
}
vlen = vecsum.
x > 0 ? vecsum.
x : -vecsum.
x;
else if (-vecsum.
y > vlen)
maxperp = 0;
squaresum = ptcount = 0;
maxpoint = edge;
do {
perp =
CROSS (vec, vecsum);
if (perp != 0) {
perp *= perp;
}
squaresum += perp;
ptcount++;
tprintf (
"Cutline:Final perp=%d\n", perp);
if (perp > maxperp) {
maxperp = perp;
maxpoint = edge;
}
}
while (edge != last);
maxperp <<= 8;
maxperp /= perp;
}
else {
maxperp /= perp;
maxperp <<= 8;
}
perp = (squaresum << 8) / (perp * ptcount);
else
perp = (squaresum / perp << 8) / ptcount;
tprintf (
"Cutline:A=%d, max=%.2f(%.2f%%), msd=%.2f(%.2f%%)\n",
area, maxperp / 256.0, maxperp * 200.0 / area,
perp / 256.0, perp * 300.0 / area);
if (maxperp *
par1 >= 10 * area || perp *
par2 >= 10 * area || vlen >= 126) {
}
}
Definition at line 110 of file polyaprx.cpp.
{
stepindex = 0;
epindex = 0;
prevdir = -1;
count = 0;
do {
vec = c_outline->
step (stepindex);
if (stepindex < length - 1
&& c_outline->
step_dir (stepindex + 1) - dir == -32) {
dir += 128 - 16;
vec += c_outline->
step (stepindex + 1);
stepinc = 2;
}
else
stepinc = 1;
if (count == 0) {
prevdir = dir;
prev_vec = vec;
}
edgepts[epindex].
pos.
x = pos.
x ();
edgepts[epindex].
pos.
y = pos.
y ();
edgepts[epindex].
vec.
x = prev_vec.
x ();
edgepts[epindex].
vec.
y = prev_vec.
y ();
pos += prev_vec;
edgepts[epindex].
prev = &edgepts[epindex - 1];
edgepts[epindex].
next = &edgepts[epindex + 1];
prevdir += 64;
epdir >>= 4;
epdir &= 7;
epindex++;
prevdir = dir;
prev_vec = vec;
count = 1;
}
else
count++;
stepindex += stepinc;
}
while (stepindex < length);
edgepts[epindex].
pos.
x = pos.
x ();
edgepts[epindex].
pos.
y = pos.
y ();
edgepts[epindex].
vec.
x = prev_vec.
x ();
edgepts[epindex].
vec.
y = prev_vec.
y ();
pos += prev_vec;
edgepts[epindex].
prev = &edgepts[epindex - 1];
edgepts[epindex].
next = &edgepts[0];
prevdir += 64;
epdir >>= 4;
epdir &= 7;
edgepts[0].
prev = &edgepts[epindex];
return &edgepts[0];
}
void fix2 |
( |
EDGEPT * |
start, |
|
|
int |
area |
|
) |
| |
Definition at line 201 of file polyaprx.cpp.
{
register int dir1, dir2;
register int sum1, sum2;
int stopped;
int fixed_count;
int d01, d12, d23, gapmin;
TPOINT d01vec, d12vec, d23vec;
register EDGEPT *edgefix, *startfix;
register EDGEPT *edgefix0, *edgefix1, *edgefix2, *edgefix3;
edgept = start;
&& (dir1 =
&& dir1 != 6)
loopstart = edgept;
stopped = 0;
do {
linestart = edgept;
if (((dir1 - dir2 + 1) & 7) < 3) {
else
}
if (edgept == loopstart)
stopped = 1;
if (sum2 + sum1 > 2
linestart = linestart->
prev;
}
|| (edgept->
flags[
DIR] == dir1 && sum1 >= sum2)
|| (edgept->
flags[
DIR] == dir2 && sum2 >= sum1))
&& linestart->
next != edgept))
}
}
while (edgept != loopstart && !stopped);
edgept = start;
do {
}
}
while (edgept != start);
edgept = start;
do {
}
}
while (edgept != start);
stopped = 0;
if (area < 450)
area = 450;
edgept = start;
fixed_count = 0;
do {
fixed_count++;
}
while (edgept != start);
edgefix0 = edgept;
edgefix1 = edgept;
edgefix2 = edgept;
edgefix3 = edgept;
startfix = edgefix2;
do {
if (fixed_count <= 3)
break;
if (d12 <= gapmin) {
if (d01 > d23) {
fixed_count--;
}
else {
fixed_count--;
edgefix1 = edgefix2;
}
}
else {
edgefix0 = edgefix1;
edgefix1 = edgefix2;
}
edgefix2 = edgefix3;
if (edgept == startfix)
stopped = 1;
}
edgefix3 = edgept;
edgefix = edgefix2;
}
while ((edgefix != startfix) && (!stopped));
}
Definition at line 386 of file polyaprx.cpp.
{
register int edgesum;
if (area < 1200)
area = 1200;
edgept = startpt;
do {
loopstart = edgept;
break;
}
}
while (edgept != startpt);
loopstart = startpt;
}
if (loopstart) {
do {
edgept = loopstart;
do {
linestart = edgept;
edgesum = 0;
do {
}
&& edgept != loopstart && edgesum < 126);
("Poly2:starting at (%d,%d)+%d=(%d,%d),%d to (%d,%d)\n",
&& edgept != loopstart)
}
while (edgept != loopstart);
edgesum = 0;
do {
edgesum++;
}
while (edgept != loopstart);
if (edgesum < 3)
area /= 2;
}
while (edgesum < 3);
do {
linestart = edgept;
do {
}
linestart->
next = edgept;
edgept->
prev = linestart;
}
while (edgept != loopstart);
}
else
edgept = startpt;
loopstart = edgept;
return loopstart;
}
Variable Documentation
"More accurate approx on wide things"
Definition at line 34 of file polyaprx.cpp.