From 1e53b2eec7110491149426bf9be844e5de283247 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Fri, 15 Feb 2002 09:23:29 +0000 Subject: Passage des dimansions en flottant. Ajout de l'attribut -speedvectormark qui permet de dessiner un point au bout du vecteur vitesse et de l'attribut -speedvectorticks qui fait apparaitre une marque chaque minute sur le vv. --- generic/Track.c | 111 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 32 deletions(-) (limited to 'generic/Track.c') diff --git a/generic/Track.c b/generic/Track.c index 6b29b82..4053cf6 100644 --- a/generic/Track.c +++ b/generic/Track.c @@ -84,9 +84,9 @@ typedef struct _TrackItemStruct { Pixmap symbol; /* item symbol */ ZnColor symbol_color; int label_angle; /* Label angle from track. */ - int label_distance; /* Label distance from track. */ - int label_dx; /* Label dx/dy from track. */ - int label_dy; + ZnDim label_distance; /* Label distance from track. */ + ZnDim label_dx; /* Label dx/dy from track. */ + ZnDim label_dy; ZnAnchor label_anchor; LeaderAnchors leader_anchors; /* Spec of the leader attachment */ ZnColor leader_color; /* leader color */ @@ -94,20 +94,20 @@ typedef struct _TrackItemStruct { LineShape leader_shape; ZnLineEnd leader_first_end; ZnLineEnd leader_last_end; - int leader_width; - int marker_size; /* world size of error circle */ + ZnDim leader_width; + ZnDim marker_size; /* world size of error circle */ ZnColor marker_color; /* error circle color */ LineStyle marker_style; /* error circle style */ Pixmap marker_fill_pattern; /* error circle fill pattern */ ZnColor connection_color; /* connection color */ LineStyle connection_style; - int connection_width; + ZnDim connection_width; ZnColor speed_vector_color; /* s. v. color */ int speed_vector_alpha; int visible_history_size; /* Number of visible positions */ ZnPoint pos; /* item world coordinates */ ZnPoint speed_vector; /* s. v. slope in world coord */ - int speed_vector_width; + ZnDim speed_vector_width; ZnColor history_color; /* Private data */ @@ -752,8 +752,19 @@ ComputeCoordinates(Item item, ZnTransformPoint(wi->current_transfo, &p, &track->speed_vector_dev); track->speed_vector_dev.x = REAL_TO_INT(track->speed_vector_dev.x); track->speed_vector_dev.y = REAL_TO_INT(track->speed_vector_dev.y); - AddPointToBBox(&item->item_bounding_box, track->speed_vector_dev.x, - track->speed_vector_dev.y); + if (ISSET(track->flags, SV_MARK_BIT)) { + int w = track->speed_vector_width + 1; + AddPointToBBox(&item->item_bounding_box, + track->speed_vector_dev.x - w, + track->speed_vector_dev.y - w); + AddPointToBBox(&item->item_bounding_box, + track->speed_vector_dev.x + w, + track->speed_vector_dev.y + w); + } + else { + AddPointToBBox(&item->item_bounding_box, track->speed_vector_dev.x, + track->speed_vector_dev.y); + } } /* @@ -1316,36 +1327,64 @@ Render(Item item) */ if ((item->class == ZnTrack) && (track->speed_vector_width > 0)) { ZnPoint mark[2]; - + int num_clips, svlength, ticksize; + ZnReal svxstep, svystep; + color = track->speed_vector_color; glColor4us(color->red, color->green, color->blue, track->speed_vector_alpha*wi->alpha/100*65535/100); glLineWidth(track->speed_vector_width); - /*a faire avec des lignes perp dans le stencil */ - if (ISSET(track->flags, SV_TICKS_BIT)) { - } - else { + + /* + * Turn off AA to obtain a square point precisely defined + */ + if (ISSET(track->flags, SV_TICKS_BIT) || + ISSET(track->flags, SV_MARK_BIT)) { + glDisable(GL_POINT_SMOOTH); + + if (ISSET(track->flags, SV_TICKS_BIT)) { + num_clips = ZnListSize(wi->clip_stack); + ticksize = 3; + svlength = (int) wi->speed_vector_length; + svxstep = (track->speed_vector_dev.x-track->dev.x)/svlength; + svystep = (track->speed_vector_dev.y-track->dev.y)/svlength; + glPointSize(ticksize); + GLX_START_CLIP(num_clips, False); + glBegin(GL_POINTS); + for (i = 1; i < svlength; i++) { + glVertex2f(track->dev.x + i*svxstep, track->dev.y + i*svystep); + } + glEnd(); + GLX_RENDER_CLIPPED(); + } } + glBegin(GL_LINES); glVertex2f(track->dev.x, track->dev.y); glVertex2f(track->speed_vector_dev.x, track->speed_vector_dev.y); glEnd(); - /* afaire avec un point non anti aliasé */ + if (ISSET(track->flags, SV_MARK_BIT)) { - glBegin(GL_QUADS); - GetButtPoints(&track->dev, &track->speed_vector_dev, track->speed_vector_width + 3, - True, &mark[0], &mark[1]); - glVertex2f(mark[0].x, mark[0].y); - glVertex2f(mark[1].x, mark[1].y); - GetButtPoints(&track->dev, &track->speed_vector_dev, - (track->speed_vector_width + 3), - True, &mark[0], &mark[1]); - glVertex2f(mark[0].x, mark[0].y); - glVertex2f(mark[1].x, mark[1].y); - glEnd(); - /* glPointSize(track->speed_vector_width + 2); + glPointSize(track->speed_vector_width + 2); glBegin(GL_POINTS); glVertex2f(track->speed_vector_dev.x, track->speed_vector_dev.y); - glEnd();*/ + glEnd(); + } + + if (ISSET(track->flags, SV_TICKS_BIT) || + ISSET(track->flags, SV_MARK_BIT)) { + glEnable(GL_POINT_SMOOTH); + + if (ISSET(track->flags, SV_TICKS_BIT)) { + glPointSize(ticksize); + GLX_RESTORE_STENCIL(num_clips, False); + glBegin(GL_POINTS); + for (i = 1; i < svlength; i++) { + glVertex2f(track->dev.x + i*svxstep, track->dev.y + i*svystep); + } + glEnd(); + GLX_END_CLIP(num_clips); + } } } @@ -1380,7 +1419,13 @@ Render(Item item) num_acc_pos = MIN(track->visible_history_size, ZnListSize(track->history)); hist = ZnListArray(track->history); side_size = MAX(width, height); - /*glDisable(GL_LINE_SMOOTH);*/ + + /* + * Turning off line and point smoothing + * to enhance ;-) history drawing. + */ + glDisable(GL_LINE_SMOOTH); + glDisable(GL_POINT_SMOOTH); for (i = 0, nb_hist = 0; i < num_acc_pos; i++) { if (ISSET(track->flags, LAST_AS_FIRST_BIT) && (i == track->visible_history_size-1)) { @@ -1409,14 +1454,15 @@ Render(Item item) glEnd(); } else { - RenderHollowDot(wi, &hist[i].dev, side_size+1); -#if 0 +#if 1 glBegin(GL_LINE_LOOP); for (j = 0; j < num_points; j++) { glVertex2f(x0 + points[j].x*h_side_size, y0 + points[j].y*h_side_size); } glEnd(); +#else + RenderHollowDot(wi, &hist[i].dev, side_size+1); #endif } } @@ -1441,7 +1487,8 @@ Render(Item item) } } } - /*glEnable(GL_LINE_SMOOTH);*/ + glEnable(GL_LINE_SMOOTH); + glEnable(GL_POINT_SMOOTH); } /* @@ -1801,7 +1848,7 @@ QueryLabelPosition(void *ptr, /* No longer in use. */ if (track->field_set.label_format) { ZnDim bb_width, bb_height; - int delta_x, delta_y; + ZnDim delta_x, delta_y; ZnReal heading; /* -- cgit v1.1