]> mj.ucw.cz Git - leo.git/commitdiff
Labelling: Changes in symbols movement
authorKarryanna <karry@karryanna.cz>
Wed, 13 May 2015 16:55:07 +0000 (18:55 +0200)
committerKarryanna <karry@karryanna.cz>
Wed, 13 May 2015 16:55:07 +0000 (18:55 +0200)
labeller.c

index 1799bd0253ef7566e46d8c6ed9351ad4b2791b76..ed04defff0ece8e920b0aa696c033714b0694ec5 100644 (file)
@@ -146,6 +146,7 @@ void dump_individual(struct individual *individual);
 void print_label(struct symbol *sym);
 
 double gen_movement(void);
+double gen_movement_uniform(void);
 void gen_coords(struct placement *p);
 void gen_coords_point(struct placement *p);
 void gen_coords_segment(struct placement *p);
@@ -172,6 +173,7 @@ struct placement **get_closure(struct placement *placement, struct individual *p
 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);
+void move_symbol_segment(struct placement *p);
 
 struct placement **get_overlapping(struct placement *p);
 void filter(struct placement **list, bool *pred);
@@ -1493,6 +1495,11 @@ double gen_movement(void)
   return m;
 }
 
+double gen_movement_uniform(void)
+{
+  return (move_max - move_min) * randdouble() * flip(1, -1);
+}
+
 void gen_coords_point(struct placement *p)
 {
   p->x = p->x + gen_movement();
@@ -1590,12 +1597,12 @@ void move_symbol(struct placement *p)
   switch (p->request->type)
   {
     case REQUEST_POINT:
+    case REQUEST_AREA:
       move_symbol_point(p);
-    case REQUEST_LINE:
+      break;
     case REQUEST_SEGMENT:
-    case REQUEST_AREA:
-      if (dbg_movement)
-        printf("Not yet implemented\n");
+      move_symbol_segment(p);
+      break;
     default:
       ASSERT(p->request->type != REQUEST_INVALID);
   }
@@ -1603,8 +1610,16 @@ void move_symbol(struct placement *p)
 
 void move_symbol_point(struct placement *p)
 {
-  p->x += (double) (move_min + randdouble()) * flip(1, -1);
-  p->y += (double) (move_min + randdouble()) * flip(1, -1);
+  p->x += gen_movement_uniform();
+  p->y += gen_movement_uniform();
+}
+
+void move_symbol_segment(struct placement *p)
+{
+  double m = gen_movement_uniform();
+  // CHECK ME
+  p->x += m;
+  p->y += m * ((struct request_segment *) p->request)->slope;
 }
 
 void hide_segment_labels(struct individual *individual)