]> mj.ucw.cz Git - leo.git/blobdiff - labeller.h
Labelling: Kind of backup before clean-up :D
[leo.git] / labeller.h
index fae5f21b643088ab2800b7791af7bec4d4a0cdf7..d6dfa27d3323d96b98ba41d83b95a772dfbcf708 100644 (file)
@@ -1,16 +1,23 @@
 #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_AREA,
+  REQUEST_LINE,
+  REQUEST_SECTION,
+  REQUEST_SEGMENT,
 };
 
 enum term_cond
@@ -20,24 +27,10 @@ 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;
-  double height;
+  int width;
+  int height;
   bool *bitmap;
 };
 
@@ -46,11 +39,16 @@ struct line_variant
   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;
@@ -63,30 +61,42 @@ struct request_point
 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;
+  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 symbol *label;
+  struct point_variant *variants;
   z_index_t zindex;
+  double cx, cy;
 };
 
 struct buffer_line
@@ -98,14 +108,16 @@ 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
@@ -113,14 +125,19 @@ 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
@@ -131,11 +148,11 @@ struct longline
 
 struct placement
 {
+  struct request *request;
   double x;
   double y;
   int variant_used;
   bool processed;
-  struct request *request;
 };
 
 struct map_part
@@ -177,13 +194,12 @@ struct individual **perform_crossover(struct individual *parent1, struct individ
 void perform_mutation(struct individual *individual);
 
 void init_placement(struct placement *p, struct request *r);
-void gen_coords_point(struct placement *p);
-void gen_coords(struct placement *p);
+void init_individual(struct individual *i);
 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);
@@ -194,4 +210,8 @@ 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