#ifndef _LEO_LABELLER_H
#define _LEO_LABELLER_H
-enum label_type
+enum verbosity
{
- LABEL_POINT,
- LABEL_LINE,
- LABEL_AREA,
+ 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_AREALABEL,
- REQUEST_LINELABEL,
+ REQUEST_AREA,
+ REQUEST_LINE,
+ REQUEST_SECTION,
REQUEST_SEGMENT,
};
TERM_COND_ITERATIONS,
};
-struct sym_placement
+struct variant
{
- double x;
- double y;
- int variant;
- struct request *request;
+ int width;
+ int height;
+ int offset_x;
+ int offset_y;
+ bool *bitmap;
};
struct request
{
enum request_type type;
int ind;
-};
-
-struct point_variant
-{
- double width;
- double height;
- bool *bitmap;
-};
-
-struct line_variant
-{
- bool *masks;
+ struct variant *variants;
};
struct request_point
{
struct request request;
struct symbol *sym;
- struct osm_object *object; // FIXME: Linked also by sym
z_index_t zindex;
double x;
double y;
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;
- struct point_variant *variant;
- struct sym_text *text;
+ double slope;
+ struct symbol *label;
z_index_t zindex;
};
-struct request_line
+struct request_section
{
struct request request;
- struct symbol *sym;
- int num_variants;
int num_segments;
- struct line_variant *variants;
struct request_segment *segments;
};
+struct request_line
+{
+ struct request request;
+ struct symbol *line;
+ int num_variants;
+ struct request_section *sections;
+};
+
struct request_area
{
struct request request;
struct osm_multipolygon *o;
- struct sym_text *sym;
- struct point_variant *text_variant;
+ struct symbol *label;
z_index_t zindex;
+ double cx, cy;
};
struct buffer_line
struct buffer_linelabel
{
struct osm_way *way;
- struct sym_text *text;
+ struct symbol *label;
z_index_t zindex;
};
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;
- 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
struct placement
{
+ struct request *request;
double x;
double y;
int variant_used;
+ int ind;
bool processed;
- struct request *request;
+ // 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