diff --git a/clip.cpp b/clip.cpp index 28ec0aca..33e16722 100644 --- a/clip.cpp +++ b/clip.cpp @@ -895,13 +895,13 @@ static drawvec simplify_lines_basic(drawvec &geom, int z, int detail, double sim for (size_t i = 0; i < geom.size(); i++) { if (geom[i].op == VT_MOVETO) { - geom[i].necessary = 127; + geom[i].necessary = 1; } else if (geom[i].op == VT_LINETO) { geom[i].necessary = 0; // if this is actually the endpoint, not an intermediate point, // it will be marked as necessary below } else { - geom[i].necessary = 127; + geom[i].necessary = 1; } } @@ -914,8 +914,8 @@ static drawvec simplify_lines_basic(drawvec &geom, int z, int detail, double sim } } - geom[i].necessary = 127; - geom[j - 1].necessary = 127; + geom[i].necessary = 1; + geom[j - 1].necessary = 1; if (j - i > 1) { douglas_peucker(geom, i, j - i, res * simplification, 2, retain, false); diff --git a/geometry.cpp b/geometry.cpp index 59aa30aa..30f8fd9e 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -40,11 +40,9 @@ drawvec decode_geometry(const char **meta, int z, unsigned tx, unsigned ty, long if (d.op == VT_MOVETO || d.op == VT_LINETO) { long long dx, dy; - signed char necessary; deserialize_long_long(meta, &dx); deserialize_long_long(meta, &dy); - deserialize_byte(meta, &necessary); wx += dx * (1 << geometry_scale); wy += dy * (1 << geometry_scale); @@ -64,7 +62,6 @@ drawvec decode_geometry(const char **meta, int z, unsigned tx, unsigned ty, long d.x = wwx; d.y = wwy; - d.necessary = necessary; } out.push_back(d); @@ -227,11 +224,11 @@ drawvec impose_tile_boundaries(const drawvec &geom, long long extent) { if (c > 1) { // clipped if (x1 != geom[i - 1].x || y1 != geom[i - 1].y) { out.emplace_back(VT_LINETO, x1, y1); - out[out.size() - 1].necessary = 127; + out[out.size() - 1].necessary = 1; } if (x2 != geom[i - 0].x || y2 != geom[i - 0].y) { out.emplace_back(VT_LINETO, x2, y2); - out[out.size() - 1].necessary = 127; + out[out.size() - 1].necessary = 1; } } } @@ -248,13 +245,13 @@ drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool ma for (size_t i = 0; i < geom.size(); i++) { if (geom[i].op == VT_MOVETO) { - geom[i].necessary = 127; + geom[i].necessary = 1; } else if (geom[i].op == VT_LINETO) { geom[i].necessary = 0; // if this is actually the endpoint, not an intermediate point, // it will be marked as necessary below } else { - geom[i].necessary = 127; + geom[i].necessary = 1; } if (prevent[P_SIMPLIFY_SHARED_NODES]) { @@ -268,7 +265,7 @@ drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool ma auto pt = std::lower_bound(shared_nodes.begin(), shared_nodes.end(), geom[i]); if (pt != shared_nodes.end() && *pt == geom[i]) { - geom[i].necessary = 127; + geom[i].necessary = true; } if (nodepos > 0) { @@ -284,7 +281,7 @@ drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool ma n.index = encode_quadkey((unsigned) d.x, (unsigned) d.y); if (bsearch(&n, shared_nodes_map, nodepos / sizeof(node), sizeof(node), nodecmp) != NULL) { - geom[i].necessary = 127; + geom[i].necessary = true; } } } @@ -303,8 +300,8 @@ drawvec simplify_lines(drawvec &geom, int z, int tx, int ty, int detail, bool ma } } - geom[i].necessary = 127; - geom[j - 1].necessary = 127; + geom[i].necessary = 1; + geom[j - 1].necessary = 1; // empirical mapping from douglas-peucker simplifications // to visvalingam simplifications that yield similar diff --git a/geometry.hpp b/geometry.hpp index fad6f339..997842c7 100644 --- a/geometry.hpp +++ b/geometry.hpp @@ -27,24 +27,20 @@ struct draw { long long x : 40; signed char op; long long y : 40; - - // 0: not necessary - // 127: always necessary - // other n: necessary at detail n/4 signed char necessary; draw(int nop, long long nx, long long ny) : x(nx), op(nop), y(ny), - necessary(127) { + necessary(0) { } draw() : x(0), op(0), y(0), - necessary(127) { + necessary(0) { } bool operator<(draw const &s) const { diff --git a/serial.cpp b/serial.cpp index 6df96758..bd694ebb 100644 --- a/serial.cpp +++ b/serial.cpp @@ -160,7 +160,6 @@ static void write_geometry(drawvec const &dv, std::string &out, long long wx, lo serialize_byte(out, dv[i].op); serialize_long_long(out, dv[i].x - wx); serialize_long_long(out, dv[i].y - wy); - serialize_byte(out, dv[i].necessary); wx = dv[i].x; wy = dv[i].y; } else {