#ifndef _LEO_LABELLER_H
#define _LEO_LABELLER_H
+enum edge_dir
+{
+ 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,
};
struct point_variant
{
- double width;
- double height;
+ int width;
+ int height;
bool *bitmap;
};
struct request_segment
{
struct request request;
+ struct request_line *rl;
double x1;
double y1;
double x2;
double y2;
- double k;
- struct sym_line *sym;
+ double angle;
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 *line;
int num_variants;
- int num_segments;
struct line_variant *variants;
- struct request_segment *segments;
+ struct request_section *sections;
};
struct request_area
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 symbol *label;
struct sym_line *line;
z_index_t zindex;
- int dir;
+ enum edge_dir dir;
struct graph_node *anode;
struct graph_node *bnode; // DEBUG PRINT
int num; // DEBUG
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 make_bitmap_icon(struct point_variant *v, struct sym_icon *si);
-void make_bitmap_point(struct point_variant *v, struct sym_point *sp);
-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 make_segments(void);
-
-void make_population(void);
-bool shall_terminate(void);
-void breed(void);
-void mutate(void);
-void elite(void);
-void rank_population(void);
-
-struct individual **perform_crossover(struct individual *parent1, struct individual *parent2);
-void perform_mutation(struct individual *individual);
-
-void init_placement(struct placement *p, struct request *r);
-void init_individual(struct individual *i);
-void gen_coords_point(struct placement *p);
-void gen_coords(struct placement *p);
-struct map_part **get_parts(struct placement *symbol, struct individual *individual);
-
-int randint(int min, int max);
-
-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);
-
-struct placement **get_overlapping(struct placement *p);
-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