#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_AREALABEL,
- REQUEST_LINELABEL,
+ REQUEST_AREA,
+ REQUEST_LINE,
+ REQUEST_SECTION,
REQUEST_SEGMENT,
};
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;
};
bool *masks;
};
+struct request
+{
+ enum request_type type;
+ int ind;
+};
+
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;
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;
- struct sym_text *text;
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 sym_text *sym;
- struct point_variant *text_variant;
+ 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;
};
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;
bool processed;
- struct request *request;
};
struct map_part
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);