aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlecoanet2002-02-15 09:23:29 +0000
committerlecoanet2002-02-15 09:23:29 +0000
commit1e53b2eec7110491149426bf9be844e5de283247 (patch)
tree4b1c4b0e3aba251d05a3be8bca8c02db058f5d4e
parenta864c455f3032ed26a3583ebc48f0e8dce91ca9e (diff)
downloadtkzinc-1e53b2eec7110491149426bf9be844e5de283247.zip
tkzinc-1e53b2eec7110491149426bf9be844e5de283247.tar.gz
tkzinc-1e53b2eec7110491149426bf9be844e5de283247.tar.bz2
tkzinc-1e53b2eec7110491149426bf9be844e5de283247.tar.xz
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.
-rw-r--r--generic/Track.c111
1 files changed, 79 insertions, 32 deletions
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;
/*