X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=labeller.h;h=d6dfa27d3323d96b98ba41d83b95a772dfbcf708;hb=eadd63b657be979276b0f7bab89f76a632473ab4;hp=fae5f21b643088ab2800b7791af7bec4d4a0cdf7;hpb=27a0c4be8375ad51adf0a55696f83859625b8d47;p=leo.git diff --git a/labeller.h b/labeller.h index fae5f21..d6dfa27 100644 --- a/labeller.h +++ b/labeller.h @@ -1,16 +1,23 @@ #ifndef _LEO_LABELLER_H #define _LEO_LABELLER_H -enum label_type +enum edge_dir { - LABEL_POINT, - LABEL_LINE, - LABEL_AREA, + DIR_INVALID, + DIR_UNSET, + DIR_CENTER, + DIR_FWD, + DIR_BWD, }; enum request_type { + REQUEST_INVALID, REQUEST_POINT, + REQUEST_AREA, + REQUEST_LINE, + REQUEST_SECTION, + REQUEST_SEGMENT, }; enum term_cond @@ -20,24 +27,10 @@ enum term_cond TERM_COND_ITERATIONS, }; -struct sym_placement -{ - double x; - double y; - int variant; - struct request *request; -}; - -struct request -{ - enum request_type type; - int ind; -}; - struct point_variant { - double width; - double height; + int width; + int height; bool *bitmap; }; @@ -46,11 +39,16 @@ struct line_variant bool *masks; }; +struct request +{ + enum request_type type; + int ind; +}; + struct request_point { struct request request; struct symbol *sym; - struct osm_object *object; z_index_t zindex; double x; double y; @@ -63,30 +61,42 @@ struct request_point struct request_segment { struct request request; + struct request_line *rl; double x1; double y1; double x2; double y2; - double k; - struct sym_line *sym; + struct symbol *label; struct point_variant *variant; + z_index_t zindex; +}; + +struct request_section +{ + struct request request; + int num_segments; + struct request_segment *segments; }; struct request_line { struct request request; - struct symbol *sym; + struct symbol *line; int num_variants; int num_segments; struct line_variant *variants; struct request_segment *segments; + struct request_section *sections; }; struct request_area { struct request request; struct osm_multipolygon *o; + struct symbol *label; + struct point_variant *variants; z_index_t zindex; + double cx, cy; }; struct buffer_line @@ -98,14 +108,16 @@ struct buffer_line struct buffer_linelabel { struct osm_way *way; - struct sym_text *text; + struct symbol *label; z_index_t zindex; }; struct graph_node { osm_id_t id; + struct osm_node *o; struct graph_edge **edges; + int num; }; struct graph_edge @@ -113,14 +125,19 @@ struct graph_edge osm_id_t id; double length; color_t color; - bool visited; + int visited; struct graph_edge *prev; struct graph_edge *next; struct graph_node *n1; struct graph_node *n2; uns longline; - struct sym_text *text; - struct sym_line *sym; + 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 @@ -131,11 +148,11 @@ struct longline struct placement { + struct request *request; double x; double y; int variant_used; bool processed; - struct request *request; }; struct map_part @@ -177,13 +194,12 @@ struct individual **perform_crossover(struct individual *parent1, struct individ void perform_mutation(struct individual *individual); void init_placement(struct placement *p, struct request *r); -void gen_coords_point(struct placement *p); -void gen_coords(struct placement *p); +void init_individual(struct individual *i); struct map_part **get_parts(struct placement *symbol, struct individual *individual); int randint(int min, int max); -void get_closure(struct placement **closure, struct placement *placement, struct individual *parent1, struct individual *parent2); +struct placement **get_closure(struct placement *placement, struct individual *parent1, struct individual *parent2); void copy_symbols(struct placement **closure, struct individual *parent, struct individual *child); void move_symbol(struct placement *p); void move_symbol_point(struct placement *p); @@ -194,4 +210,8 @@ void filter(struct placement **list, bool *pred); int flip(int a, int b); double randdouble(void); +void cleanup(void); + +void copy_individual(struct individual *src, struct individual *dest); + #endif