Function:ns2sisc

From S2PLOT

(Difference between revisions)
Jump to: navigation, search
Revision as of 23:25, 3 December 2007
S2plot admin (Talk | contribs)

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

Line 25: Line 25:
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
 +#include <time.h>
#include <math.h> #include <math.h>
#include "s2plot.h" #include "s2plot.h"
Line 31: Line 32:
int id1, id2; /* IDs for isosurface object */ int id1, id2; /* IDs for isosurface object */
-void cb(double *t, int *kc){+void cb(double *t, int *kc)
 +{
static int count = 0; /* Counter for refreshing */ static int count = 0; /* Counter for refreshing */
int force = 1; /* Force redraw of surface */ int force = 1; /* Force redraw of surface */
Line 48: Line 50:
ns2dis(id2, force); /* Draw second isosurface */ ns2dis(id2, force); /* Draw second isosurface */
} }
 +
int main(int argc, char *argv[]) int main(int argc, char *argv[])
Line 60: Line 63:
float alpha; /* Alpha channel */ float alpha; /* Alpha channel */
char trans; /* Drawing mode for isosurface */ char trans; /* Drawing mode for isosurface */
 +
 + srand48((long)time(NULL)); /* Seed random numbers */
nx = 30; /* Grid dimensions */ nx = 30; /* Grid dimensions */
ny = 30; ny = 30;
nz = 30; nz = 30;
 +
/* Create transpose matrix mapping data indices to world coords */ /* Create transpose matrix mapping data indices to world coords */
tr[0] = tr[4] = tr[8] = 0.0; /* Offsets */ tr[0] = tr[4] = tr[8] = 0.0; /* Offsets */
Line 87: Line 93:
} }
} }
- 
level = 0.2; /* Set the isosurface level */ level = 0.2; /* Set the isosurface level */
resolution = 1; /* Set the isosurface resolution */ resolution = 1; /* Set the isosurface resolution */
Line 108: Line 113:
return 1; return 1;
} }
 +
</pre></code> </pre></code>

Current revision

ns2sisc

Set the isosurface colour.

Prototype

void ns2sisc(int isid, float r, float g, float b);

Description

Set the (r,g,b) colour for an isosurface. To view changes, you must call ns2dis with the force argument set to 1.

See Also

ns2cisCreate an isosurface object.
ns2ciscCreate an isosurface object with a colour function.
ns2dis Draw an isosurface object
ns2sisl Change the level of isosurface
ns2sisaSet the alpha channel for an isosurface.
struct COLOURData structure for (r,g,b) colour indices.

Code Example

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "s2plot.h"

/* Global variables */
int id1, id2;                           /* IDs for isosurface object */

void cb(double *t, int *kc)
{
   static int count = 0;                /* Counter for refreshing */
   int force = 1;                       /* Force redraw of surface */
   float r, g, b;                       /* Isosurface colour */

   if (count == 12) {                   /* About once per half second */
      count = 0;                        /* Reset counter */
      r = drand48();                    /* Random colours */
      g = drand48();
      b = drand48();
      ns2sisc(id1, r, g, b);            /* Set isosurface colour */
   } else {
      count++;                          /* Keep counting */
   }
   ns2dis(id1, force);                  /* Draw first isosurface */
   ns2dis(id2, force);                  /* Draw second isosurface */
}


int main(int argc, char *argv[])
{
   int i, j, k;                         /* Loop variables */
   float x, y, z;                       /* Dummy variables for grid values */
   int nx, ny, nz;                      /* Number of cells in grid */
   float ***grid;                       /* Grid data */
   float tr[12];                        /* Transformation matrix */
   int resolution;                      /* Resolution of isosurface */
   float level;                         /* Isosurface level to plot */
   float alpha;                         /* Alpha channel */
   char trans;                          /* Drawing mode for isosurface */

   srand48((long)time(NULL));           /* Seed random numbers */

   nx = 30;                             /* Grid dimensions */
   ny = 30;
   nz = 30;

  /* Create transpose matrix mapping data indices to world coords */
   tr[0] = tr[4] = tr[8] = 0.0;                           /* Offsets */
   tr[1] = tr[6] = tr[11] = 1.0;                          /* Increments */
   tr[2] = tr[3] = tr[5] = tr[7] = tr[9] = tr[10] = 0.;   /* Cross terms */

   s2opend("/?",argc, argv);                    /* Open the display */
   s2swin(0, nx-1, 0, ny-1, 0, nz-1);           /* Set the window coordinates */
   s2box("BCDET",0,0,"BCDET",0,0,"BCDET",0,0);  /* Draw coordinate box */

   /* allocate and generate the data grid */
   grid = (float ***)malloc(nx * sizeof(float **));
   for (i = 0; i < nx; i++) {
      grid[i] = (float **)malloc(ny * sizeof(float *));
      x = (float)(i) / (float)(nx - 1);
      for (j = 0; j < ny; j++) {
         grid[i][j] = (float *)malloc(nz * sizeof(float));
         y = (float)(j) / (float)(ny - 1);
         for (k = 0; k < nz; k++) {
            z = (float)(k) / (float)(nz - 1);
            grid[i][j][k] = x*x*x + y*y - z*z*z*z;
         }
      }
   }
   level      = 0.2;                    /* Set the isosurface level */
   resolution = 1;                      /* Set the isosurface resolution */
   alpha      = 1.0;                    /* Set the alpha channel */
   trans      = 't';                    /* Opaque isosurface */

/* Create the first isosurface object */
   id1 = ns2cis(grid, nx, ny, nz, 0, nx-1, 0, ny-1, 0, nz-1,
                   tr, level, resolution, trans, alpha, 1., 1., 0.);

   level      = 0.8;                    /* Set the isosurface level */

/* Create the second isosurface object */
   id2 = ns2cis(grid, nx, ny, nz, 0, nx-1, 0, ny-1, 0, nz-1,
                   tr, level, resolution, trans, alpha, 1., 1., 0.);

   s2scb(&cb);                          /* Install a dynamic callback */
   s2show(1);                           /* Open the s2plot window */

   return 1;
}


Back to S2PLOT function list.


Personal tools