From: Karryanna Date: Thu, 7 May 2015 14:21:03 +0000 (+0200) Subject: Labelling: Mostly backup of current state X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=a23e84c341b39588414b1d4055d30598c5b91dfe;p=leo.git Labelling: Mostly backup of current state --- diff --git a/labeller.c b/labeller.c index f740b49..a0ba5c2 100644 --- a/labeller.c +++ b/labeller.c @@ -73,7 +73,7 @@ int conf_mutate_chvar_bound = 0.1; int conf_elite_perc = 5; -double conf_max_section_length = 100; +double conf_max_section_length = 10; double conf_max_section_overlay = 10; int old_best = 0; // FIXME: Shall be int max @@ -103,6 +103,8 @@ void gen_coords_point(struct placement *p); void gen_coords_segment(struct placement *p); void gen_coords_area(struct placement *p); +void make_segments_old(void); + int max2(int a, int b); int min2(int a, int b); int max4(int a, int b, int c, int d); @@ -423,187 +425,7 @@ printf("There are %u line labels requested\n", GARY_SIZE(buffer_linelabel)); } } - - -/*** -* void join_edge(struct graph_edge *e, int dir) -* { -* struct graph_node *other_node = NULL; -* switch (dir) -* { -* case 1: -* other_node = e->n2; -* break; -* case 2: -* other_node = e->n1; -* break; -* // FIXME: default? -* } -* -* struct graph_edge *candidate = NULL; -* for (uns i=0; iedges); i++) -* { -* struct graph_edge *other = other_node->edges[i]; -* if (! other->visited) -* { -* struct graph_edge **new = GARY_PUSH(bfs_queue); -* *new = other_node->edges[i]; -* } -* -* if ((!other->visited) && (e->text) && (other->text) && (e->text->text == other->text->text)) -* { -* if (e->color == other_node->edges[i]->color) -* { -* if ((!candidate) || (candidate->length < other->length)) -* { -* candidate = other; -* } -* } -* else -* { -* // Beware: Name conflict here -* } -* } -* } -* -* if (candidate) -* { -* candidate->longline = e->longline; -* if (dir == 1) -* { -* if (candidate->n2 != e->n1) -* { -* candidate->n1 = candidate->n2; -* candidate->n2 = e->n1; -* } -* e->prev = candidate; -* candidate->next = e; -* -* longlines[e->longline].first = candidate; -* } -* else -* { -* if (candidate->n1 != e->n2) -* { -* candidate->n2 = candidate->n1; -* candidate->n1 = e->n2; -* } -* e->next = candidate; -* candidate->prev = e; -* } -* } -* } -* ***/ - -/*** -void bfs2(void) -* { -* GARY_INIT(bfs_queue, 0); -* GARY_INIT(longlines, 0); -* -* printf("Making longlines from %u causal lines, using %d graph edges\n", GARY_SIZE(buffer_line), num_edges_dbg); -* -* HASH_FOR_ALL(hash, node) -* { -* for (uns i=0; iedges); i++) -* { -* struct graph_edge *e = node->edges[i]; -* -* // printf("Examining edge from [%.2f; %.2f] to [%.2f; %.2f]\n", -* // e->n1->o->x, e->n1->o->y, e->n2->o->x, e->n2->o->y); -* -* // if (e->visited) HASH_CONTINUE; // FIXME: Is is correct? -* if (e->visited) continue; -* // printf("Continuing\n"); -* if (e->longline == (uns) -1) -* { -* GARY_PUSH(longlines); -* e->longline = num_longlines++; -* longlines[e->longline].first = e; -* } -* // printf("Longline is %u\n", e->longline); -* -* e->visited = 1; -* -* if (! e->prev) -* { -* join_edge(e, 1); -* } -* if (! e->next) -* { -* join_edge(e, 2); -* } -* } -* } -* HASH_END_FOR; -* -* GARY_FREE(bfs_queue); -* } -* ***/ - void bfs_edge(struct graph_edge *e, struct graph_node *node, struct graph_node *anode, enum edge_dir dir) -{ - ASSERT(dir < 3); - struct graph_edge *candidate = NULL; - - if ((e->num > 31) && (e->num < 48)) printf("Searching for neighbours of %d, in longline %u, BFS dir is %d, edge's dir is %d\n", e->num, e->longline, dir, e->dir); - - - for (uns i=0; iedges); i++) - { - struct graph_edge *other = node->edges[i]; -printf("Touching %d\n", other->num); -if (other->num == 44) printf("Longline of 44 is %u\n", other->longline); - if ((other->longline != (uns) -1) && (other->longline != e->longline)) continue; - - if (! other->visited) { - struct graph_edge **e_ptr = GARY_PUSH(bfs_queue); - *e_ptr = other; - other->visited = 1; - } - - if (((other->n1->id == node->id) && (other->n2->id == anode->id)) || - ((other->n2->id == node->id) && (other->n1->id == anode->id))) - continue; - - if (((other->n1->id == node->id) || (other->n2->id == node->id)) && - (e->label) && (other->label) && - (e->label->type == SYMBOLIZER_TEXT) && (other->label->type == SYMBOLIZER_TEXT) && - (((struct sym_text *) e->label)->text == ((struct sym_text *) other->label)->text)) -// (e->text) && (other->text) && (e->text->text == other->text->text)) - { - if (! candidate || (other->length > candidate->length)) - candidate = other; - } - } - - if (candidate) - { - struct graph_edge *other = candidate; -dbg_num_hits++; - other->longline = e->longline; - other->dir = dir; - other->anode = (other->n1->id == node->id ? other->n2 : other->n1); - other->bnode = (other->n1->id == node->id ? other->n1 : other->n2); - switch (dir) - { - case 1: - e->prev = other; - other->next = e; - longlines[other->longline].first = other; - break; - case 2: - e->next = other; - other->prev = e; - break; - default: - printf("Oops\n"); - ASSERT(0); - } - } -} - -void ya_bfs_edge(struct graph_edge *e, struct graph_node *node, struct graph_node *anode, enum edge_dir dir) { printf("BFS edge called for edge %d (going %d) in direction %d\n", e->num, e->dir, dir); struct graph_edge *candidate = NULL; @@ -616,7 +438,7 @@ if (e->num == 987) printf("Got label %d\n", e->num); if (e->num == 987) printf("Continuing with edge %d\n", e->num); printf("Testing %d ?= %d\n", other->visited, e->longline); - if (other->visited != e->longline) { + if ((uns) other->visited != e->longline) { printf("Pushing new edge %d / %ju\n", other->num, other->id); struct graph_edge **e_ptr = GARY_PUSH(bfs_queue); *e_ptr = other; @@ -669,35 +491,7 @@ printf("New line in longline %u\n", e->longline); } } -void bfs(void) -{ - for (uns i=0; inum); - //ASSERT(! cur->visited); - - cur->visited = 1; - if (cur->longline == (uns) -1) - { - GARY_PUSH(longlines); - cur->longline = num_longlines++; - longlines[cur->longline].first = cur; - } - - if (!cur->anode) - { - bfs_edge(cur, cur->n1, cur->n2, 1); - bfs_edge(cur, cur->n2, cur->n1, 2); - } - else - { - bfs_edge(cur, cur->anode, cur->bnode, cur->dir); - } - } -} - -void ya_bfs(uns longline) +void bfs(uns longline) { printf("BFS called for longline %u\n", longline); printf("%d longlines are believed to exist, %d exist\n", num_longlines, GARY_SIZE(longlines)); @@ -715,18 +509,18 @@ printf("%d longlines are believed to exist, %d exist\n", num_longlines, GARY_SIZ if (cur->dir == DIR_UNSET) { cur->dir = DIR_CENTER; - ya_bfs_edge(cur, cur->n1, cur->n2, DIR_BWD); - ya_bfs_edge(cur, cur->n2, cur->n1, DIR_FWD); + bfs_edge(cur, cur->n1, cur->n2, DIR_BWD); + bfs_edge(cur, cur->n2, cur->n1, DIR_FWD); } else { switch (cur->dir) { case DIR_BWD: - ya_bfs_edge(cur, cur->n1, cur->n2, cur->dir); + bfs_edge(cur, cur->n1, cur->n2, cur->dir); break; case DIR_FWD: - ya_bfs_edge(cur, cur->n2, cur->n1, cur->dir); + bfs_edge(cur, cur->n2, cur->n1, cur->dir); break; default: // FIXME @@ -741,33 +535,6 @@ void bfs_wrapper(void) GARY_INIT(bfs_queue, 0); GARY_INIT(longlines, 0); - HASH_FOR_ALL(hash, node) - { - for (uns i=0; iedges); i++) - { - if (! node->edges[i]->visited) - { - printf("Running new BFS\n"); - GARY_RESIZE(bfs_queue, 0); - struct graph_edge **e = GARY_PUSH(bfs_queue); - *e = node->edges[i]; - bfs(); - //dump_longlines(); - printf("Joined %d edges\n", dbg_num_hits); dbg_num_hits = 0; - printf("Planned %u edges\n", GARY_SIZE(bfs_queue)); - } - } - } - HASH_END_FOR; - - GARY_FREE(bfs_queue); -} - -void ya_bfs_wrapper(void) -{ - GARY_INIT(bfs_queue, 0); - GARY_INIT(longlines, 0); - HASH_FOR_ALL(hash, node) { for (uns i=0; iedges); i++) @@ -782,7 +549,7 @@ void ya_bfs_wrapper(void) struct graph_edge **e = GARY_PUSH(bfs_queue); *e = node->edges[i]; node->edges[i]->longline = num_longlines; - ya_bfs(node->edges[i]->longline); + bfs(node->edges[i]->longline); //dump_longlines(); printf("Joined %d edges\n", dbg_num_hits); dbg_num_hits = 0; printf("Planned %u edges\n", GARY_SIZE(bfs_queue)); @@ -795,62 +562,6 @@ void ya_bfs_wrapper(void) GARY_FREE(bfs_queue); } -/*** -* void oldbfs(void) -* { -* printf("Starting outer BFS\n"); -* printf("There are %u buffered lines and %d eges\n", GARY_SIZE(buffer_line), num_edges_dbg); -* -* GARY_INIT(bfs_queue, 0); -* GARY_INIT(longlines, 0); -* -* int dbg_bfs_continues = 0; -* -* HASH_FOR_ALL(hash, node) -* { -* // FIXME: Skip if visited node -* -* for (uns i=0; iedges); i++) -* { -* struct graph_edge *e = node->edges[i]; -* -* if (e->visited) continue; -* -* // BFS itself -* for (uns i1=0; i1n1->edges); i1++) -* { -* struct graph_edge *other = e->n1->edges[i1]; -* if (other->visited) { dbg_bfs_continues++; continue; } -* -* if (((other->n1->id == e->n1->id) || (other->n2->id == e->n1->id)) && -* (e->text) && (other->text) && (e->text->text == other->text->text)) -* { -* // printf("Hit\n"); -* other->visited = 1; -* } -* } -* for (uns i2=0; i2n2->edges); i2++) -* { -* struct graph_edge *other = e->n2->edges[i2]; -* if (other->visited) {dbg_bfs_continues++; continue; } -* -* if (((other->n1->id == e->n2->id) || (other->n2->id == e->n2->id)) && -* (e->text) && (other->text) && (e->text->text == other->text->text)) -* { -* // printf("Hit\n"); -* other->visited = 1; -* } -* } -* } -* } -* -* HASH_END_FOR; -* printf("Total: %d hits, %d visited edges skipped\n", dbg_num_hits, dbg_bfs_continues); -* -* GARY_FREE(bfs_queue); -* } -* ***/ - void dump_longlines(void) { printf("*** Longlines dump\n"); @@ -872,39 +583,7 @@ printf("\n"); } } -void dump_longlines_old(void) -{ - for (uns i=0; i Longline %u;", i); - if (longlines[i].first->label && longlines[i].first->label->type == SYMBOLIZER_TEXT) printf(" labelled %s", osm_val_decode(((struct sym_text *) longlines[i].first->label)->text)); - printf("\n"); - while (e) - { - printf("\t#%ju (%d)", e->id, e->num); - switch (e->dir) - { - case DIR_BWD: - printf("[%.2f; %.2f] -- #%ju [%.2f; %.2f] (dir %d)\n", e->anode->o->x, e->anode->o->y, e->bnode->o->o.id, e->bnode->o->x, e->bnode->o->y, e->dir); - break; - case DIR_FWD: - printf("[%.2f; %.2f] -- #%ju [%.2f; %.2f] (dir %d)\n", e->bnode->o->x, e->bnode->o->y, e->anode->o->o.id, e->anode->o->x, e->anode->o->y, e->dir); - break; - case DIR_CENTER: - printf("[%.2f; %.2f] -- #%ju [%.2f; %.2f] (dir %d)\n", e->n1->o->x, e->n1->o->y, e->n2->o->o.id, e->n2->o->x, e->n2->o->y, e->dir); - break; - default: - printf("%d\n", e->dir); - ASSERT(0); - } - e = e->next; - } - } -} - -void make_segments_new(void) +void make_segments(void) { for (uns i=0; irequest.ind = -1; + request->request.ind = num_requests++; request->request.type = REQUEST_LINE; GARY_INIT(request->sections, 0); @@ -947,17 +626,39 @@ void make_segments_new(void) struct osm_node *n = e->n1->o; rs = GARY_PUSH(rls->segments); + rs->request.type = REQUEST_SEGMENT; + rs->request.ind = num_requests++; rls->num_segments++; rs->x1 = n->x; rs->y1 = n->y; // FIXME: Truly compute x2, y2 rs->x2 = n->x; rs->y2 = n->y; + rs->zindex = e->zindex; + rs->label = e->label; rls = GARY_PUSH(request->sections); rls->request.ind = num_requests++; rls->request.type = REQUEST_SECTION; rls->num_segments = 0; + + struct point_variant *v = malloc(sizeof(struct point_variant)); + switch (e->label->type) + { + case SYMBOLIZER_POINT: + make_bitmap_point(v, (struct sym_point *) e->label); + break; + case SYMBOLIZER_ICON: + make_bitmap_icon(v, (struct sym_icon *) e->label); + break; + case SYMBOLIZER_TEXT: + make_bitmap_label(v, (struct sym_text *) e->label); + break; + default: + // FIXME + ; + } + rs->variant = v; GARY_INIT(rls->segments, 0); } @@ -973,11 +674,31 @@ void make_segments_new(void) rs->request.ind = num_requests++; rs->label = e->label; + struct point_variant *v = malloc(sizeof(struct point_variant)); + switch (e->label->type) + { + case SYMBOLIZER_POINT: + make_bitmap_point(v, (struct sym_point *) e->label); + break; + case SYMBOLIZER_ICON: + make_bitmap_icon(v, (struct sym_icon *) e->label); + break; + case SYMBOLIZER_TEXT: + make_bitmap_label(v, (struct sym_text *) e->label); + break; + default: + // FIXME + ; + } + rs->variant = v; + rs->x1 = e->n1->o->x; rs->y1 = e->n1->o->y; rs->x2 = e->n2->o->x; rs->y2 = e->n2->o->y; + rs->angle = atan2(rs->x2 - rs->x1, rs->y2 - rs->y1); + rs->zindex = e->zindex; cur_length += e->length; @@ -987,97 +708,99 @@ void make_segments_new(void) } } -void make_segments(void) -{ -printf("Analysing %u longlines\n", GARY_SIZE(longlines)); - for (uns i=0; ilabel) continue; -// printf("Survived! %s\n", osm_val_decode(longlines[i].first->text->text)); -printf("New longline\n"); - -if (longlines[i].first->label->type != SYMBOLIZER_TEXT) -{ - printf("Heh?\n"); - exit(42); -} - struct request_line *request = GARY_PUSH(requests_line); - request->request.ind = -1; - request->request.type = REQUEST_LINE; - - GARY_INIT(request->segments, 0); - request->num_segments = 0; - - // ->num_variants FIXME - // ->variants FIXME - - struct graph_edge *e = longlines[i].first; - - if (! e) printf("Oops\n"); - num_requests++; - while (e) - { - if (! e->label) break; - - struct request_segment *r = GARY_PUSH(request->segments); - request->num_segments++; - - r->request.ind = num_requests++; - r->request.type = REQUEST_SEGMENT; - - struct osm_node *n = e->n1->o; - r->x1 = n->x; - r->y1 = n->y; - n = e->n2->o; - r->x2 = n->x; - r->y2 = n->y; - r->k = abs(r->x2 - r->x1) / (abs(r->y2 - r->y1) + 0.001); // FIXME: Hack to prevent floating point exception when y2 = y1 - -printf("Segment [%.2f; %.2f] -- [%.2f; %.2f]\n", r->x1, r->y1, r->x2, r->y2); - - r->sym = e->line; - r->zindex = e->zindex; - r->variant = malloc(sizeof(struct point_variant)); // FIXME - switch (e->label->type) - { - case SYMBOLIZER_TEXT: ; - struct sym_text *st = malloc(sizeof(struct sym_text)); - ((struct symbol *) st)->o = e->label->o; - ((struct symbol *) st)->type = SYMBOLIZER_TEXT; - st->x = r->x1; - st->y = r->y1; - st->text = ((struct sym_text *) e->label)->text; - st->text_color = ((struct sym_text *) e->label)->text_color; - st->font = ((struct sym_text *) e->label)->font; - st->opacity = ((struct sym_text *) e->label)->opacity; - st->halo_color = ((struct sym_text *) e->label)->halo_color; - st->halo_radius = ((struct sym_text *) e->label)->halo_radius; - st->halo_opacity = ((struct sym_text *) e->label)->halo_opacity; - st->tw = ((struct sym_text *) e->label)->tw; - st->th = ((struct sym_text *) e->label)->th; - st->td = ((struct sym_text *) e->label)->td; - r->label = (struct symbol *) st; - // FIXME: This shall be done in more elegant way - make_bitmap_label(r->variant, (struct sym_text *) e->label); - break; - default: - // FIXME - printf("Got here?\n"); - ; - } - - e = e->next; - } - } -} +/*** +* void make_segments_old(void) +* { +* printf("Analysing %u longlines\n", GARY_SIZE(longlines)); +* for (uns i=0; ilabel) continue; +* // printf("Survived! %s\n", osm_val_decode(longlines[i].first->text->text)); +* printf("New longline\n"); +* +* if (longlines[i].first->label->type != SYMBOLIZER_TEXT) +* { +* printf("Heh?\n"); +* exit(42); +* } +* struct request_line *request = GARY_PUSH(requests_line); +* request->request.ind = -1; +* request->request.type = REQUEST_LINE; +* +* GARY_INIT(request->segments, 0); +* request->num_segments = 0; +* +* // ->num_variants FIXME +* // ->variants FIXME +* +* struct graph_edge *e = longlines[i].first; +* +* if (! e) printf("Oops\n"); +* num_requests++; +* while (e) +* { +* if (! e->label) break; +* +* struct request_segment *r = GARY_PUSH(request->segments); +* request->num_segments++; +* +* r->request.ind = num_requests++; +* r->request.type = REQUEST_SEGMENT; +* +* struct osm_node *n = e->n1->o; +* r->x1 = n->x; +* r->y1 = n->y; +* n = e->n2->o; +* r->x2 = n->x; +* r->y2 = n->y; +* +* printf("Segment [%.2f; %.2f] -- [%.2f; %.2f]\n", r->x1, r->y1, r->x2, r->y2); +* +* r->zindex = e->zindex; +* r->variant = malloc(sizeof(struct point_variant)); // FIXME +* switch (e->label->type) +* { +* case SYMBOLIZER_TEXT: ; +* struct sym_text *st = malloc(sizeof(struct sym_text)); +* ((struct symbol *) st)->o = e->label->o; +* ((struct symbol *) st)->type = SYMBOLIZER_TEXT; +* st->x = r->x1; +* st->y = r->y1; +* st->text = ((struct sym_text *) e->label)->text; +* st->text_color = ((struct sym_text *) e->label)->text_color; +* st->font = ((struct sym_text *) e->label)->font; +* st->opacity = ((struct sym_text *) e->label)->opacity; +* st->halo_color = ((struct sym_text *) e->label)->halo_color; +* st->halo_radius = ((struct sym_text *) e->label)->halo_radius; +* st->halo_opacity = ((struct sym_text *) e->label)->halo_opacity; +* st->tw = ((struct sym_text *) e->label)->tw; +* st->th = ((struct sym_text *) e->label)->th; +* st->td = ((struct sym_text *) e->label)->td; +* r->label = (struct symbol *) st; +* // FIXME: This shall be done in more elegant way +* make_bitmap_label(r->variant, (struct sym_text *) e->label); +* break; +* default: +* // FIXME +* printf("Got here?\n"); +* ; +* } +* +* e = e->next; +* } +* } +* } +***/ -void dump_linelabel_requests(void) -{ - for (uns i=0; iplacements); i++) { +fprintf(stderr, "%d-th placement\n", i); struct placement *p = &(individual->placements[i]); struct point_variant *v = NULL; @@ -1108,10 +832,13 @@ void dump_bitmaps(struct individual *individual) v = &(ra->variants[p->variant_used]); break; default: + printf("Testing request type (dump_bitmaps): %d\n", p->request->type); ASSERT(p->request->type != REQUEST_INVALID); continue; } + printf("Got after with %d-th placement of request type %d\n", i, p->request->type); + printf("Rendering %d-th label %d x %d (w x h)\n", i, v->width, v->height); for (int row = max2(p->y, 0); row < min2(p->y + v->height, page_height_int); row++) { @@ -1152,7 +879,11 @@ printf("(There are %d requests)\n", num_requests); break; case REQUEST_LINE: ; struct request_line *rl = (struct request_line *) p->request; - print_label(rl->segments[0].label); + printf("Line: "); + print_label(rl->sections[0].segments[0].label); + break; + case REQUEST_SECTION: ; + printf("*"); break; case REQUEST_SEGMENT: ; printf("Segment placed at [%.2f; %.2f] on %u\n", p->x, p->y, ((struct request_segment *) p->request)->zindex); @@ -1164,6 +895,7 @@ printf("(There are %d requests)\n", num_requests); printf(" at [%.2f; %.2f] on %u\n", p->x, p->y, ((struct request_area *) p->request)->zindex); break; default: + printf("Testing request type (dump_individual)\n"); ASSERT(p->request->type != 0); } } @@ -1175,9 +907,9 @@ void labeller_label(void) make_graph(); label_graph(); dump_graph(); - ya_bfs_wrapper(); + bfs_wrapper(); dump_longlines(); - make_segments_new(); + make_segments(); //dump_linelabel_requests(); printf("Having %u point requests, %u line requests and %u area requests\n", GARY_SIZE(requests_point), GARY_SIZE(requests_line), GARY_SIZE(requests_area)); @@ -1205,7 +937,7 @@ dump_bitmaps(population1[0]); for (uns i=0; iplacements); i++) { -printf("Coping with %d\n", population1[0]->placements[i].request->type); +printf("(%d) Coping with %d\n", i, population1[0]->placements[i].request->type); struct symbol *s = NULL; z_index_t zindex = 0; @@ -1231,6 +963,7 @@ printf("Coping with %d\n", population1[0]->placements[i].request->type); printf("%u\n", zindex); break; default: + printf("Testing request type (flushing final placements)\n"); ASSERT(population1[0]->placements[i].request != REQUEST_INVALID); printf("Yep, in default, continuing\n"); continue; @@ -1260,82 +993,83 @@ printf("Will plan symbol on %u\n", zindex); sym_plan((struct symbol *) st, zindex); break; default: + printf("Testing symbolizer type\n"); ASSERT(s->type != SYMBOLIZER_INVALID); } /*** - switch (population1[0]->placements[i].request->type) - { - case REQUEST_POINT: ; - struct request_point *rp = (struct request_point *) population1[0]->placements[i].request; - switch (rp->sym->type) - { - case SYMBOLIZER_POINT: ; - printf("Moving point to final destination\n"); - struct sym_point *sp = (struct sym_point *) rp->sym; - sp->x = population1[0]->placements[i].x; - sp->y = population1[0]->placements[i].y; - sym_plan((struct symbol *) sp, rp->zindex); - break; - case SYMBOLIZER_ICON: ; - printf("Moving icon to final destination\n"); - struct sym_icon *si = (struct sym_icon *) rp->sym; - si->sir.x = population1[0]->placements[i].x; - si->sir.y = population1[0]->placements[i].y; - sym_plan((struct symbol *) si, rp->zindex); - break; - default: - printf("Haúúú 1\n"); - ; - } - break; - case REQUEST_AREA: ; - struct request_area *ra = (struct request_area *) population1[0]->placements[i].request; - switch (ra->label->type) - { - case SYMBOLIZER_ICON - case SYMBOLIZER_TEXT: ; - struct sym_text *st = (struct sym_text *) ra->label; - st->x = population1[0]->placements[i].x; - st->y = population1[0]->placements[i].y; - break; - default: - // FIXME - ; - } - if (ra->label->type == SYMBOLIZER_INVALID) printf("Haúúú 2\n"); - sym_plan((struct symbol *) ra->label, ra->zindex); - break; - - case REQUEST_LINE: ; - struct request_line *rl = (struct request_line *) population1[0]->placements[i].request; - for (uns j=0; jsegments); j++) - { - switch (rl->segments[j].label->type) - { - case SYMBOLIZER_TEXT: - ((struct sym_text *) rl->segments[j].label)->next_duplicate = NULL; - ((struct sym_text *) rl->segments[j].label)->next_in_tile = NULL; - printf("Planning text "); - print_label(rl->segments[j].label); - default: - printf("Haúúú 3\n"); - // FIXME - ; - } - sym_plan((struct symbol *) rl->segments[j].label, rl->segments[j].zindex); // FIXME: z-index - } - break; - - case REQUEST_SEGMENT: ; - //struct request_segment *rs = (struct request_segment *) population1[0]->placements[i].request; - printf("Segment!\n"); - - default: - ASSERT(population1[0]->placements[i].request->type != REQUEST_INVALID); - } +* switch (population1[0]->placements[i].request->type) +* { +* case REQUEST_POINT: ; +* struct request_point *rp = (struct request_point *) population1[0]->placements[i].request; +* switch (rp->sym->type) +* { +* case SYMBOLIZER_POINT: ; +* printf("Moving point to final destination\n"); +* struct sym_point *sp = (struct sym_point *) rp->sym; +* sp->x = population1[0]->placements[i].x; +* sp->y = population1[0]->placements[i].y; +* sym_plan((struct symbol *) sp, rp->zindex); +* break; +* case SYMBOLIZER_ICON: ; +* printf("Moving icon to final destination\n"); +* struct sym_icon *si = (struct sym_icon *) rp->sym; +* si->sir.x = population1[0]->placements[i].x; +* si->sir.y = population1[0]->placements[i].y; +* sym_plan((struct symbol *) si, rp->zindex); +* break; +* default: +* printf("Haúúú 1\n"); +* ; +* } +* break; +* case REQUEST_AREA: ; +* struct request_area *ra = (struct request_area *) population1[0]->placements[i].request; +* switch (ra->label->type) +* { +* case SYMBOLIZER_ICON +* case SYMBOLIZER_TEXT: ; +* struct sym_text *st = (struct sym_text *) ra->label; +* st->x = population1[0]->placements[i].x; +* st->y = population1[0]->placements[i].y; +* break; +* default: +* // FIXME +* ; +* } +* if (ra->label->type == SYMBOLIZER_INVALID) printf("Haúúú 2\n"); +* sym_plan((struct symbol *) ra->label, ra->zindex); +* break; +* +* case REQUEST_LINE: ; +* struct request_line *rl = (struct request_line *) population1[0]->placements[i].request; +* for (uns j=0; jsegments); j++) +* { +* switch (rl->segments[j].label->type) +* { +* case SYMBOLIZER_TEXT: +* ((struct sym_text *) rl->segments[j].label)->next_duplicate = NULL; +* ((struct sym_text *) rl->segments[j].label)->next_in_tile = NULL; +* printf("Planning text "); +* print_label(rl->segments[j].label); +* default: +* printf("Haúúú 3\n"); +* // FIXME +* ; +* } +* sym_plan((struct symbol *) rl->segments[j].label, rl->segments[j].zindex); // FIXME: z-index +* } +* break; +* +* case REQUEST_SEGMENT: ; +* //struct request_segment *rs = (struct request_segment *) population1[0]->placements[i].request; +* printf("Segment!\n"); +* +* default: +* ASSERT(population1[0]->placements[i].request->type != REQUEST_INVALID); +* } ***/ } @@ -1374,19 +1108,28 @@ void make_population(void) { init_placement(&(individual->placements[p++]), (struct request *) &requests_point[j]); } + for (uns j=0; jplacements[p++]), (struct request *) &requests_line[j]); - for (uns k=0; kplacements[p++]), (struct request *) &requests_line[j].segments[k]); + init_placement(&(individual->placements[p++]), (struct request *) &requests_line[j].sections[k]); + + for (uns l=0; lplacements[p++]), (struct request *) &requests_line[j].sections[k].segments[l]); + } } } + for (uns j=0; jplacements[p++]), (struct request *) &requests_area[j]); } +printf("Testing p\n"); ASSERT(p == num_requests); } } @@ -1560,6 +1303,7 @@ void gen_coords(struct placement *p) printf("Not yet implemented\n"); break; default: + printf("Testing request type\n"); ASSERT(p->request->type != REQUEST_INVALID); } } @@ -1616,6 +1360,7 @@ struct map_part **get_parts(struct placement *symbol, struct individual *individ int randint(int min, int max) { + if (min == max) return min; int r = random(); //printf("Returning %d + (%d %% (%d - %d)) = %d + %d %% %d = %d + %d = %d\n", min, r, max, min, min, r, max-min, min, r%(max-min), min+(r%(max-min))); return min + (r % (max - min)); @@ -1716,7 +1461,6 @@ void init_placement(struct placement *p, struct request *r) default: ASSERT(p->request->type != REQUEST_INVALID); printf("Valid request: %d\n", p->request->type); - ASSERT(0); } gen_coords(p); diff --git a/labeller.h b/labeller.h index d6dfa27..d8d4db6 100644 --- a/labeller.h +++ b/labeller.h @@ -66,6 +66,7 @@ struct request_segment double y1; double x2; double y2; + double angle; struct symbol *label; struct point_variant *variant; z_index_t zindex; @@ -83,9 +84,7 @@ struct request_line struct request request; struct symbol *line; int num_variants; - int num_segments; struct line_variant *variants; - struct request_segment *segments; struct request_section *sections; }; @@ -180,7 +179,7 @@ void make_bitmap_label(struct point_variant *v, struct sym_text *text); void make_graph(void); void label_graph(void); void join_edge(struct graph_edge *e, int dir); -void bfs(void); +void bfs(uns longline); void make_segments(void); void make_population(void);