X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=labeller.h;h=3bd13e5f1e7204e2ac52fd9932d6a3b0d887c6b2;hb=refs%2Fheads%2Flabelling;hp=4fe0d922b12ff5cf57394368244486374dbe5b56;hpb=6c7327ea704588e4dfd7d11666833c5761925268;p=leo.git diff --git a/labeller.h b/labeller.h index 4fe0d92..3bd13e5 100644 --- a/labeller.h +++ b/labeller.h @@ -1,24 +1,18 @@ #ifndef _LEO_LABELLER_H #define _LEO_LABELLER_H -enum verbosity -{ - VERBOSITY_NONE, - VERBOSITY_GENERAL, - VERBOSITY_POPULATION, - VERBOSITY_INDIVIDUAL, - VERBOSITY_PLACEMENT, - VERBOSITY_ALL, -}; - -enum edge_dir -{ - DIR_INVALID, - DIR_UNSET, - DIR_CENTER, - DIR_FWD, - DIR_BWD, -}; +#include "lab-utils.h" + +/* +* Requests for point refer directly to point symbols that should be placed. +* Line and area requests are in fact requests for labels (either symbols or +* textual labels) of such objects. +* Area requests are taken quite as-is, +* line requests are broken into section and segment requests -- each line +* is broken into sections of maximal length and each section is made of segments +* which correspond to OSM ways. +* For each line, exactly one segment of each section is labelled in the output. +*/ enum request_type { @@ -30,67 +24,54 @@ enum request_type REQUEST_SEGMENT, }; -enum term_cond -{ - TERM_COND_PENALTY, - TERM_COND_STAGNATION, - TERM_COND_ITERATIONS, -}; - struct variant { int width; int height; - int offset_x; - int offset_y; - bool *bitmap; + int offset_x; // Desired offset of top-left corner with respect to + int offset_y; // actual coordinates of corresponding object + bool *bitmap; // Mask having 1s where the variant is not blank; used for overlap check }; struct request { enum request_type type; - int ind; - struct variant *variants; + int ind; // Index used whenever request indexing is needed + struct variant *variants; // Growing array of all variants usable for this request }; struct request_point { struct request request; struct symbol *sym; - z_index_t zindex; + z_index_t zindex; // Needed when planning symbol double x; double y; - double offset_x; - double offset_y; - int num_variants; }; struct request_segment { struct request request; - struct request_line *rl; - double x1; + struct symbol *label; + double x1; // Start and end of segment double y1; double x2; double y2; - double slope; - struct symbol *label; - z_index_t zindex; + double slope; // Used to calculate label rotation + z_index_t zindex; // Needed when planning symbol }; struct request_section { struct request request; - int num_segments; - struct request_segment *segments; + struct request_segment *segments; // Growing array }; struct request_line { struct request request; struct symbol *line; - int num_variants; - struct request_section *sections; + struct request_section *sections; // Growing array }; struct request_area @@ -99,15 +80,18 @@ struct request_area struct osm_multipolygon *o; struct symbol *label; z_index_t zindex; - double cx, cy; + double cx, cy; // Area center (coordinates average), used as reference coordinates }; +// Buffer for lines (osm_ways) added via labeller_notify_line, +// used to make graph and join lines which should be labelled as one object struct buffer_line { struct sym_line *line; - z_index_t zindex; }; +// Buffer for line labes, +// used to label graph -- join logical lines with their labels struct buffer_linelabel { struct osm_way *way; @@ -115,51 +99,17 @@ struct buffer_linelabel z_index_t zindex; }; -struct graph_node -{ - osm_id_t id; - struct osm_node *o; - struct graph_edge **edges; - int num; -}; - -struct graph_edge -{ - osm_id_t id; - double length; - color_t color; - int visited; - struct graph_edge *prev; - struct graph_edge *next; - struct graph_node *n1; - struct graph_node *n2; - uns longline; - struct symbol *label; - struct sym_line *line; - z_index_t zindex; - enum edge_dir dir; - struct graph_node *anode; - struct graph_node *bnode; // DEBUG PRINT - int num; // DEBUG -}; - -struct longline -{ - uns id; - struct graph_edge *first; -}; - struct placement { struct request *request; - double x; + struct individual *individual;// FIXME: Is it needed? + double x; // Coordinates of variant top-left corner placement double y; - int variant_used; - int ind; - bool processed; + int variant_used; // Variant chosen for request in this placement + int ind; // Index used whenever placement indexing is needed + bool processed; // FIXME: Is it needed? // FIXME: Replace with clist? struct map_placement *map_links; - struct individual *individual; }; struct map_placement @@ -179,20 +129,50 @@ struct map_part int ind; }; -struct individual -{ - struct placement *placements; - struct map_part **map; - int penalty; -}; - +void labeller_conf(void); void labeller_init(void); void labeller_cleanup(void); -void labeller_add_point(struct symbol *sym, struct osm_object *object, z_index_t zindex); -void labeller_add_line(struct symbol *sym, z_index_t zindex); void labeller_label(void); -void labeller_add_linelabel(struct symbol *sym, struct osm_object *o, z_index_t zindex); -void labeller_add_arealabel(struct symbol *sym, struct osm_object *o, z_index_t zindex); + +void labeller_add_point(struct symbol *sym, struct osm_object *object, z_index_t zindex); +void labeller_notify_line(struct symbol *sym, z_index_t zindex); +void labeller_add_label(struct symbol *sym, struct osm_object *o, z_index_t zindex); + +extern struct request_point *requests_point; +extern struct request_line *requests_line; +extern struct request_area *requests_area; + +extern struct longline *longlines; +extern struct buffer_line *buffer_line; +extern struct buffer_linelabel *buffer_linelabel; + +extern int dbg_segments; +extern int dbg_plan; +extern int dbg_requests; +extern int dbg_graph; +extern int dbg_bfs; +extern int dbg_map_parts; +extern int dbg_movement; +extern int dbg_init; +extern int dbg_overlaps; +extern int dbg_rank; +extern int dbg_evolution; +extern int dbg_mutation; +extern int dbg_breeding; + +extern int page_width_int; +extern int page_height_int; + +extern int num_requests; +extern int num_placements; + +extern int conf_map_part_width; +extern int conf_map_part_height; + +extern uns num_map_parts_row; +extern uns num_map_parts_col; +extern uns num_map_parts; + #endif