Function:ds2vtb
From S2PLOT
(Difference between revisions)
Revision as of 23:04, 7 November 2007 S2plot admin (Talk | contribs) ← Previous diff |
Current revision S2plot admin (Talk | contribs) |
||
Line 13: | Line 13: | ||
Draw text at position iP that faces the camera with vector inputs. Use this function only from within a dynamic callback. The components of iOff are in character units along Right and Up vectors - use this to displace labels in screen coordinates. If scaletext is true (non-zero), then text further from the camera will be made larger so that labels are equally legible for all distances. | Draw text at position iP that faces the camera with vector inputs. Use this function only from within a dynamic callback. The components of iOff are in character units along Right and Up vectors - use this to displace labels in screen coordinates. If scaletext is true (non-zero), then text further from the camera will be made larger so that labels are equally legible for all distances. | ||
- | NOTE: this function uses the S2PLOT attributes for character height (size) and colour. The z component of ioff is ignored. | + | NOTES |
+ | * This function uses the S2PLOT attributes for character height (size) and colour. The z component of ioff is ignored. | ||
+ | * If your text does does not appear, try setting the x and y values of ioff to something small, e.g ioff.x = ioff.y = 0.01. | ||
== See Also == | == See Also == |
Current revision
ds2vtb
Draw text that always faces the camera - vector input
Prototype
void ds2vtb(XYZ iP, XYZ ioff, char *text, int scaletext);
Description
Draw text at position iP that faces the camera with vector inputs. Use this function only from within a dynamic callback. The components of iOff are in character units along Right and Up vectors - use this to displace labels in screen coordinates. If scaletext is true (non-zero), then text further from the camera will be made larger so that labels are equally legible for all distances.
NOTES
- This function uses the S2PLOT attributes for character height (size) and colour. The z component of ioff is ignored.
- If your text does does not appear, try setting the x and y values of ioff to something small, e.g ioff.x = ioff.y = 0.01.
See Also
ds2bb | Draw a (dynamic) billboard: a textured facet that always faces the camera |
ds2vbb | Draw a (dynamic) billboard: a textured facet that always faces the camera - vector input |
ds2tb | Draw text that always faces the camera |
s2sci | Set the pen colour by index. |
s2sch | Set the character height in "arbitrary" units. |
struct_COLOUR | Data structure for (r,g,b) colour indices. |
struct_XYZ | Data structure for (x,y,z) coordinates. |
Code Example
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "s2plot.h"
XYZ *xyz; /* Global array - text position */
int N; /* Number of text labels */
void cb(double *t, int *kc)
/* A dynamic callback */
{
int i; /* Loop variable */
XYZ ioff = { 0.01, 0.01, 0.0 }; /* Small offsets - must be non-zero */
/* z offset is ignored */
s2sch(0.2); /* Set the text height */
for (i=0;i<N;i++) { /* Draw the billboard labels */
ds2vtb(xyz[i], ioff, "S2PLOT", 1);
}
}
int main(int argc, char *argv[])
{
int i; /* Loop variable */
srand48((long)time(NULL)); /* Seed random numbers */
s2opend("/S2MONO",argc,argv); /* Open the display */
s2swin(-1.5,1.5, -1.5,1.5, -1.5,1.5);
s2box("BCDE",0,0,"BCDE",0,0,"BCDE",0,0); /* Draw coord box */
N = 20; /* Number of labels to draw */
xyz = (XYZ *)calloc(N, sizeof(XYZ));
for (i=0;i<N;i++) { /* Create N random (x,y,z) values */
xyz[i].x = drand48()*2.0 - 1.0; /* Create N random (x,y,z) values */
xyz[i].y = drand48()*2.0 - 1.0;
xyz[i].z = drand48()*2.0 - 1.0;
}
cs2scb(cb); /* Install a dynamic callback */
s2show(1); /* Open the s2plot window */
return 1;
}
Back to S2PLOT function list.