Track the new identity of merged polygons so they can be merged further

This commit is contained in:
Eric Fischer
2016-10-25 10:01:18 -07:00
parent 057d7b759c
commit 4b3fc4aebe
+12 -3
View File
@@ -390,6 +390,7 @@ struct partial {
signed char t; signed char t;
unsigned long long id; unsigned long long id;
bool has_id; bool has_id;
ssize_t renamed;
}; };
struct partial_arg { struct partial_arg {
@@ -971,7 +972,13 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
} }
size_t i = order[o].p1; size_t i = order[o].p1;
// XXX snap links while (partials[i].renamed >= 0) {
i = partials[i].renamed;
}
size_t i2 = order[o].p2;
while (partials[i2].renamed >= 0) {
i2 = partials[i2].renamed;
}
for (size_t j = 0; j < partials[i].arc_polygon.size() && merged < merge_count; j++) { for (size_t j = 0; j < partials[i].arc_polygon.size() && merged < merge_count; j++) {
if (partials[i].arc_polygon[j] == order[o].edge) { if (partials[i].arc_polygon[j] == order[o].edge) {
@@ -987,7 +994,7 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
std::vector<ssize_t> additions; std::vector<ssize_t> additions;
std::vector<ssize_t> &here = partials[i].arc_polygon; std::vector<ssize_t> &here = partials[i].arc_polygon;
std::vector<ssize_t> &other = partials[order[o].p2].arc_polygon; std::vector<ssize_t> &other = partials[i2].arc_polygon;
#if 0 #if 0
printf("seeking %zd\n", partials[i].arc_polygon[j]); printf("seeking %zd\n", partials[i].arc_polygon[j]);
@@ -1053,7 +1060,8 @@ bool find_common_edges(std::vector<partial> &partials, int z, int line_detail, d
k = l; k = l;
} }
partials[order[o].p2].arc_polygon.clear(); partials[i2].arc_polygon.clear();
partials[i2].renamed = i;
merged++; merged++;
for (size_t k = 0; k < additions.size(); k++) { for (size_t k = 0; k < additions.size(); k++) {
@@ -1424,6 +1432,7 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s
p.has_id = has_id; p.has_id = has_id;
p.index2 = merge_previndex; p.index2 = merge_previndex;
p.index = index; p.index = index;
p.renamed = -1;
partials.push_back(p); partials.push_back(p);
} }