Function:cs2socb

From S2PLOT

(Difference between revisions)
Jump to: navigation, search
Revision as of 01:02, 30 October 2007
S2plot admin (Talk | contribs)

← Previous diff
Current revision
S2plot admin (Talk | contribs)

Line 25: Line 25:
==Code Example== ==Code Example==
<code><pre> <code><pre>
-/* This function should only be used by experienced OpenGL programmers +/* This function should only be used by experienced OpenGL programmers */
- * Example code is available in s2uc7.c in the sample directory +#include <stdio.h>
- * distributed with S2PLOT */+#include <stdlib.h>
 +#include <time.h>
 +#include <math.h>
 +#include "s2plot.h"
 + 
 +#include "s2opengl.h"
 +#include "s2glut.h"
 + 
 +void openglcb(void);
 + 
 +int main(int argc, char *argv[])
 +{
 + float x[10], y[10], z[10]; /* Arrays of coordinate points */
 + int N = 10; /* Number of points */
 + int i; /* Loop variable */
 + 
 + srand48((long)time(NULL)); /* Seed random numbers */
 + s2opend("/?",argc, argv); /* Open the display */
 + s2swin(-1.,1., -1.,1., -1.,1.); /* Set the window coordinates */
 + s2box("BCDET",0,0,"BCDET",0,0,"BCDET",0,0); /* Draw coordinate box */
 + 
 + for (i=0;i<N;i++) {
 + x[i] = drand48()*2.0 - 1.0; /* Random (x,y,z) coordinates */
 + y[i] = drand48()*2.0 - 1.0;
 + z[i] = drand48()*2.0 - 1.0;
 + }
 + 
 + s2sci(S2_PG_YELLOW); /* Set colour */
 + s2slw(4); /* Set line width */
 + s2line(N, x, y, z); /* Draw the poly-line */
 + 
 + cs2socb(openglcb); /* Register an OpenGL callback */
 + s2show(1); /* Open the s2plot window */
 + 
 + return 1;
 +}
 + 
 +/* an opengl callback */
 +void openglcb(void) {
 + static float phase = 0.;
 + float vx = 2. + 0.5 * sin(phase * M_PI * 2.);
 + 
 + glBegin(GL_QUADS);
 + glColor3f(0.8, vx * 0.25, 0.0);
 + glVertex3f(-vx, -vx, -2.);
 + glVertex3f(-vx, vx, -2.);
 + glVertex3f( vx, vx, -2.);
 + glVertex3f( vx, -vx, -2.);
 + glEnd();
 + 
 + phase = phase + 0.001;
 + while (phase > 1.) {
 + phase -= 1.;
 + }
 +}
 + 
</pre></code> </pre></code>
[[S2PLOT:Function List | Back]] to S2PLOT function list. [[S2PLOT:Function List | Back]] to S2PLOT function list.
__NOTOC__ __NOTOC__
__NOEDITSECTION__ __NOEDITSECTION__

Current revision

cs2socb

Register function that will draw direct OpenGL graphics when called.

Prototype

void cs2socb(void *oglfn);

Description

Register function that will draw direct OpenGL graphics when called. This is a highly advanced capability of s2plot that is open to many potential pitfalls. Only experienced OpenGL programmers should attempt to use it! Use NULL argument to disable this callback. The coordinate system for drawing geometry in this function is the viewport one. The OpenGL callback must be of the form:

void oglfn(void).

See Also

cs2scb Set the callback function; can be null to cancel callback.
cs2sncb Set the function to call when number-keys pressed.
cs2shcb Set the handle callback function for when a handle is (de)selected


Code Example

/* This function should only be used by experienced OpenGL programmers  */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "s2plot.h"

#include "s2opengl.h"
#include "s2glut.h"

void openglcb(void);

int main(int argc, char *argv[])
{
   float x[10], y[10], z[10];                   /* Arrays of coordinate points */
   int N = 10;                                  /* Number of points */
   int i;                                       /* Loop variable */

   srand48((long)time(NULL));                   /* Seed random numbers */
   s2opend("/?",argc, argv);                    /* Open the display */
   s2swin(-1.,1., -1.,1., -1.,1.);              /* Set the window coordinates */
   s2box("BCDET",0,0,"BCDET",0,0,"BCDET",0,0);  /* Draw coordinate box */

   for (i=0;i<N;i++) {
      x[i] = drand48()*2.0 - 1.0;               /* Random (x,y,z) coordinates */
      y[i] = drand48()*2.0 - 1.0;
      z[i] = drand48()*2.0 - 1.0;
   }

   s2sci(S2_PG_YELLOW);                         /* Set colour */
   s2slw(4);                                    /* Set line width */
   s2line(N, x, y, z);                          /* Draw the poly-line */

   cs2socb(openglcb);                           /* Register an OpenGL callback */
   s2show(1);                                   /* Open the s2plot window */

   return 1;
}

/* an opengl callback */
void openglcb(void) {
  static float phase = 0.;
  float vx = 2. + 0.5 * sin(phase * M_PI * 2.);

  glBegin(GL_QUADS);
  glColor3f(0.8, vx * 0.25, 0.0);
  glVertex3f(-vx, -vx, -2.);
  glVertex3f(-vx,  vx, -2.);
  glVertex3f( vx,  vx, -2.);
  glVertex3f( vx, -vx, -2.);
  glEnd();

  phase = phase + 0.001;
  while (phase > 1.) {
    phase -= 1.;
  }
}

Back to S2PLOT function list.


Personal tools