From c343d14479295d517ae64ccee5a7e83d3ce0fc42 Mon Sep 17 00:00:00 2001 From: Karryanna Date: Wed, 1 Jul 2015 12:05:24 +0200 Subject: [PATCH] Labelling: Rotation computation improved and commented on --- lab-evolution.c | 13 ++++++++++--- lab-lines.c | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lab-evolution.c b/lab-evolution.c index ccf7515..1978624 100644 --- a/lab-evolution.c +++ b/lab-evolution.c @@ -692,10 +692,17 @@ static void move_symbol_point(struct placement *p) static void move_symbol_segment(struct placement *p) { + struct request_segment *rs = (struct request_segment *) p->request; double m = gen_movement_uniform(); - // CHECK ME - p->x += m; - p->y += m * ((struct request_segment *) p->request)->slope; + if (fabs(rs->x2 - rs->x1) > 0.01) + { + p->x += m; + p->y += m * rs->slope; + } + else + { + p->x += m; + } } static void hide_segment_labels(struct individual *individual) diff --git a/lab-lines.c b/lab-lines.c index 35f9f45..a0fc3c7 100644 --- a/lab-lines.c +++ b/lab-lines.c @@ -505,8 +505,18 @@ static void make_segments(void) rs->x2 = e->n2->o->x; rs->y2 = e->n2->o->y; - rs->slope = (rs->y2 - rs->y1) / (rs->x2 - rs->x1); - ((struct sym_text *) rs->label)->rotate = convert_to_deg(atan(rs->slope)); + if (fabs(rs->x2 - rs->x1) > 0.01) + { + rs->slope = (rs->y2 - rs->y1) / (rs->x2 - rs->x1); + // This works a little bit magically :) + // It's possible not to care about quadrants as it "just works" as expected + ((struct sym_text *) rs->label)->rotate = convert_to_deg(atan(rs->slope)); + } + else + { + rs->slope = 142; // Magic! + ((struct sym_text *) rs->label)->rotate = 1; + } struct variant *v = GARY_PUSH(rs->request.variants); make_bitmap(v, rs->label); -- 2.39.2