diff options
author | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-07-04 15:06:59 +0000 |
---|---|---|
committer | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-07-04 15:06:59 +0000 |
commit | 5303adfc4387b2233dc2665e2b56c9de0966194b (patch) | |
tree | 54a47157d1b5ea63b8f9968d284e4598099bc298 /navit/transform.c | |
parent | e8a630017a0761ed22ba36423a7cf40b221bca92 (diff) | |
download | navit-5303adfc4387b2233dc2665e2b56c9de0966194b.tar.gz |
Add:core:Adaptive plyline generalization, resolves #1050.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5178 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/transform.c')
-rw-r--r-- | navit/transform.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/navit/transform.c b/navit/transform.c index 78c483cb8..d57c50b37 100644 --- a/navit/transform.c +++ b/navit/transform.c @@ -438,16 +438,8 @@ transform(struct transformation *t, enum projection pro, struct coord *c, struct xc=c1.x; yc=c1.y; } - if (i != 0 && i != count-1 && mindist) { - if (xc > c[k].x-mindist && xc < c[k].x+mindist && yc > c[k].y-mindist && yc < c[k].y+mindist && - (c[i+1].x != c[0].x || c[i+1].y != c[0].y)) - continue; - k=i; - } xm=xc; ym=yc; -// dbg(2,"0x%x, 0x%x - 0x%x,0x%x contains 0x%x,0x%x\n", t->r.lu.x, t->r.lu.y, t->r.rl.x, t->r.rl.y, c->x, c->y); -// ret=coord_rect_contains(&t->r, c); xc-=t->map_center.x; yc-=t->map_center.y; xc >>= t->scale_shift; @@ -513,6 +505,18 @@ transform(struct transformation *t, enum projection pro, struct coord *c, struct } xc+=t->offx; yc+=t->offy; + + if (i != 0 && i != count-1 && mindist) { + /* We expect values of mindist to be within 0..5 pixels for nice looking screens. + That gives difference of about 1 pixel in worst case between abs(dx)+abs(dy) and sqrt(dx*dx+dy*dy). + We expect significantly bigger values when drawing map while scrolling it. But it anyway will be ugly. + Should anybody care about that inaccuracy? */ + if ( (abs(xc - p[k].x) + abs(yc - p[k].y)) < mindist && + (c[i+1].x != c[0].x || c[i+1].y != c[0].y)) + continue; + k=j; + } + p[j].x=xc; p[j].y=yc; if (width_return) { |