]> mj.ucw.cz Git - leo.git/blobdiff - labeller.h
Labelling: Variants may have offset
[leo.git] / labeller.h
index cf30b0ee54fbddaa821c344067053d6db3475aaf..e0088173446a392a2f6a4661bd17310b3caa423f 100644 (file)
@@ -1,12 +1,22 @@
 #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,
 };
 
@@ -17,22 +27,20 @@ enum term_cond
   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
@@ -45,31 +53,34 @@ 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
@@ -77,7 +88,6 @@ struct request_area
   struct request request;
   struct osm_multipolygon *o;
   struct symbol *label;
-  struct point_variant *variants;
   z_index_t zindex;
   double cx, cy;
 };
@@ -108,7 +118,7 @@ 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;
@@ -117,7 +127,7 @@ struct graph_edge
   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
@@ -135,11 +145,30 @@ struct placement
   double x;
   double y;
   int variant_used;
+  int ind;
   bool processed;
+  // FIXME: Replace with clist?
+  struct placement_link *map_links;
+  struct individual *individual;
+};
+
+struct placement_link
+{
+  struct map_placement *mp;
+  struct placement_link *next;
+};
+
+struct map_placement
+{
+  struct placement *placement;
+  struct map_placement *next;
+  struct map_placement *prev;
 };
 
 struct map_part
 {
+  // FIXME: Replace with clist?
+  struct map_placement *placement;
 };
 
 struct individual
@@ -156,47 +185,4 @@ 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