X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=labeller.c;h=0089fc4c0bc934a6e8b52babadd186f2c1293647;hb=570ed05bd065baa7020d445b6c71c2faba72a863;hp=e31f001938eaad8fbfee1116ead7583c57ed8f94;hpb=318906e5386b306edda58b5069b423052d2c9eaf;p=leo.git diff --git a/labeller.c b/labeller.c index e31f001..0089fc4 100644 --- a/labeller.c +++ b/labeller.c @@ -48,6 +48,7 @@ int dbg_graph = 0; int dbg_bfs = 0; int dbg_map_parts = 0; int dbg_movement = 0; +int dbg_init = 0; int page_width_int; int page_height_int; @@ -251,16 +252,16 @@ void make_bitmap(struct variant *v, struct symbol *sym) void make_bitmap_icon(struct variant *v, struct sym_icon *si) { - v->width = si->sir.icon->width; - v->height = si->sir.icon->height; - v->bitmap = malloc((int) ceil(v->width * v->height * sizeof(bool))); + v->width = si->sir.width + 1; + v->height = si->sir.height + 1; + v->bitmap = malloc(v->width * v->height * sizeof(bool)); for (int i=0; iwidth*v->height; i++) v->bitmap[i] = 1; } void make_bitmap_point(struct variant *v, struct sym_point *sp) { - v->width = v->height = sp->size; - v->bitmap = malloc(sp->size*sp->size * sizeof(bool)); + v->width = v->height = sp->size + 1; + v->bitmap = malloc(v->width * v->height * sizeof(bool)); // FIXME: Okay, memset would be much nicer here for (int i=0; isize*sp->size; i++) v->bitmap[i] = 1; } @@ -279,7 +280,8 @@ void make_bitmap_label(struct variant *v, struct sym_text *text) void labeller_add_point(struct symbol *sym, struct osm_object *object, z_index_t zindex) { -printf("Adding point\n"); + if (dbg_requests) + printf("Adding point\n"); if (object->type != OSM_TYPE_NODE) { printf("Warning: Point label requested on non-point object\n"); @@ -345,7 +347,8 @@ void labeller_add_linelabel(struct symbol *sym, struct osm_object *o, z_index_t return; } - printf("[LAB] Labelling way %ju on %u\n", o->id, zindex); + if (dbg_requests) + printf("[LAB] Labelling way %ju on %u\n", o->id, zindex); struct buffer_linelabel *ll = GARY_PUSH(buffer_linelabel); ll->way = (struct osm_way *) o; ll->label = sym; @@ -354,7 +357,8 @@ void labeller_add_linelabel(struct symbol *sym, struct osm_object *o, z_index_t void labeller_add_arealabel(struct symbol *sym, struct osm_object *o, z_index_t zindex) { -printf("Adding area on %u\n", zindex); + if (dbg_requests) + printf("Adding area on %u\n", zindex); struct request_area *r = GARY_PUSH(requests_area); r->request.type = REQUEST_AREA; @@ -371,11 +375,13 @@ printf("Adding area on %u\n", zindex); switch (sym->type) { case SYMBOLIZER_ICON: - printf("DEBUG: Icon label\n"); + if (dbg_requests) + printf("DEBUG: Icon label\n"); make_bitmap_icon(v, (struct sym_icon *) sym); break; case SYMBOLIZER_TEXT: - printf("DEBUG: Text label\n"); + if (dbg_requests) + printf("DEBUG: Text label\n"); make_bitmap_label(v, (struct sym_text *) sym); default: // FIXME @@ -719,6 +725,8 @@ void cut_edge(struct graph_edge *e, double dist) *new = *e; e->next = new; + // FIXME? Create new label for new edge, don't only copy pointer? + struct osm_node *n1 = e->n1->o; struct osm_node *n2 = e->n2->o; @@ -871,7 +879,6 @@ void dump_bitmaps(struct individual *individual) for (uns i=0; iplacements); i++) { -fprintf(stderr, "%d-th placement\n", i); if (individual->placements[i].variant_used == -1) continue; struct placement *p = &(individual->placements[i]); @@ -885,19 +892,14 @@ fprintf(stderr, "%d-th placement\n", i); v = &(p->request->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++) { for (int col = max2(p->x, 0); col < min2(p->x + v->width, page_width_int); col++) { - printf("Writing to %d\n", row*page_width_int + col); bitmap[row * page_width_int + col] = 1; } } @@ -1064,7 +1066,8 @@ void make_population(void) { for (int i=0; ix = p->x + gen_movement(); p->y = p->y + gen_movement(); - printf("Moved label to [%.2f; %.2f] from [%.2f; %.2f]\n", p->x, p->y, ra->cx, ra->cy); + if (dbg_movement) + printf("Moved label to [%.2f; %.2f] from [%.2f; %.2f]\n", p->x, p->y, ra->cx, ra->cy); } struct map_part **get_parts(struct placement *symbol, struct individual *individual) @@ -1544,7 +1548,8 @@ void init_placement(struct placement *p, struct individual *individual, struct r } gen_coords(p); -// printf("Inited placement to [%.2f; %.2f]\n", p->x, p->y); + if (dbg_init) + printf("Inited placement to [%.2f; %.2f]\n", p->x, p->y); } void init_individual(struct individual *i) @@ -1561,6 +1566,9 @@ void init_individual(struct individual *i) mp->next = mp->prev = NULL; } i->penalty = 0; // FIXME + + if (dbg_init) + printf("Individual inited, has %u map parts\n", GARY_SIZE(i->map)); } struct placement **get_overlapping(struct placement *p UNUSED)