#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,
+};
+
enum request_type
{
REQUEST_INVALID,
REQUEST_POINT,
REQUEST_AREA,
REQUEST_LINE,
+ REQUEST_SECTION,
REQUEST_SEGMENT,
};
TERM_COND_ITERATIONS,
};
-struct point_variant
+struct variant
{
- double width;
- double height;
+ int width;
+ int height;
+ int offset_x;
+ int offset_y;
bool *bitmap;
};
-struct line_variant
-{
- bool *masks;
-};
-
struct request
{
enum request_type type;
int ind;
+ struct variant *variants;
};
struct request_point
double offset_x;
double offset_y;
int num_variants;
- struct point_variant *variants;
};
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 slope;
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
struct request request;
struct osm_multipolygon *o;
struct symbol *label;
- struct point_variant *variants;
z_index_t zindex;
double cx, cy;
};
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
double x;
double y;
int variant_used;
+ int ind;
bool processed;
+ // FIXME: Replace with clist?
+ struct map_placement *map_links;
+ struct individual *individual;
+};
+
+struct map_placement
+{
+ struct placement *placement;
+ struct map_part *part;
+ struct map_placement *next_in_map;
+ struct map_placement *prev_in_map;
+ struct map_placement *next_in_placement;
+ struct map_placement *prev_in_placement;
};
struct map_part
{
+ // FIXME: Replace with clist?
+ struct map_placement *placement;
+ int ind;
};
struct individual
};
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 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