From 90820fe15696d684c622c9a730f22fe57ce38fe1 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Sat, 19 Jul 2008 15:09:00 +0100 Subject: [PATCH] constellation: bounds - fixed problems crossing 0h. --- src/sky/constellation.c | 67 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/src/sky/constellation.c b/src/sky/constellation.c index 3e8b5d3..23351f1 100644 --- a/src/sky/constellation.c +++ b/src/sky/constellation.c @@ -2468,13 +2468,70 @@ static inline void equ_dec_line(struct render_object *robject, { gint i = 7; gdouble divs = 7.0;//proj->pixels_per_degree - gdouble step = (end->ra - pos->ra) / divs; - - if ((pos->ra > 270.0 && end->ra < 90.0) || - (pos->ra < 90.0 && end->ra > 270.0)) { + + /* we need to do 2 lines if we cross the 0h boundary */ + if (pos->ra > 330.0 && end->ra < 30.0) { + gdouble step = (360.0 - pos->ra) / divs; + + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_move_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + + for (pos->ra = pos->ra + step; + i > 0; pos->ra += step, i--) { + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_line_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + } + + step = end->ra / divs; + pos->ra = 0; + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_move_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + for (pos->ra = step; + i > 0; pos->ra += step, i--) { + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_line_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + } + + cairo_move_to(robject->cr, + robject->coord[1].x, robject->coord[1].y); + } else if (pos->ra < 30.0 && end->ra > 330.0) { + gdouble step = pos->ra / divs; + + pos->ra = 0; + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_move_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + + for (pos->ra = step; + i > 0; pos->ra += step, i--) { + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_line_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + } + + step = (360.0 - end->ra) / divs; + pos->ra = end->ra; + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_move_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + + for (pos->ra = end->ra + step; + i > 0; pos->ra += step, i--) { + proj->trans->sky_to_proj_equ(proj, &robject->coord[0]); + cairo_line_to(robject->cr, + robject->coord[0].x, robject->coord[0].y); + } + + cairo_move_to(robject->cr, + robject->coord[1].x, robject->coord[1].y); + } else { - + gdouble step = (end->ra - pos->ra) / divs; /* draw to DEC end */ for (pos->ra = pos->ra + step; i > 0; pos->ra += step, i--) { -- 2.11.4.GIT