#ifndef _LEO_LABELLER_H
#define _LEO_LABELLER_H
-enum label_type
-{
- LABEL_POINT,
- LABEL_LINE,
- LABEL_AREA,
-};
-
enum request_type
{
+ REQUEST_INVALID,
REQUEST_POINT,
+ REQUEST_AREA,
+ REQUEST_LINE,
+ REQUEST_SEGMENT,
};
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;
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;
double y2;
double k;
struct sym_line *sym;
+ struct symbol *label;
struct point_variant *variant;
+ z_index_t zindex;
};
struct request_line
{
struct request request;
- struct symbol *sym;
+ struct symbol *line;
int num_variants;
int num_segments;
struct line_variant *variants;
{
struct request request;
struct osm_multipolygon *o;
+ struct symbol *label;
+ struct point_variant *variants;
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;
};
struct graph_node
{
osm_id_t id;
+ struct osm_node *o;
struct graph_edge **edges;
+ int num;
};
struct graph_edge
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;
+ int 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;
bool processed;
- struct request *request;
};
struct map_part
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);
-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);
int flip(int a, int b);
double randdouble(void);
+void cleanup(void);
+
+void copy_individual(struct individual *src, struct individual *dest);
+
#endif