28 #define READ() gvl_read_char(pos[i]++, gvl->isosurf[i]->data) 
   95     int cols, rows, depths;
 
   98     float xres, yres, zres;
 
  101     int j, p, num, c_ndx, crnt_ev;
 
  106     int *check_color, *check_transp, *check_material, *check_emis, *check_shin;
 
  107     float *kem, *ksh, pkem, pksh;
 
  108     unsigned int *ktrans, *curcolor;
 
  112     int *pos, *nz, *e_dl, tmp_pos, edge_pos[13];
 
  114     GLdouble modelMatrix[16], projMatrix[16];
 
  122     check_color = 
G_malloc(n_i * 
sizeof(
int));
 
  123     check_transp = 
G_malloc(n_i * 
sizeof(
int));
 
  124     check_material = 
G_malloc(n_i * 
sizeof(
int));
 
  125     check_emis = 
G_malloc(n_i * 
sizeof(
int));
 
  126     check_shin = 
G_malloc(n_i * 
sizeof(
int));
 
  128     kem = 
G_malloc(n_i * 
sizeof(
float));
 
  129     ksh = 
G_malloc(n_i * 
sizeof(
float));
 
  131     ktrans = 
G_malloc(n_i * 
sizeof(
unsigned int));
 
  132     curcolor = 
G_malloc(n_i * 
sizeof(
unsigned int));
 
  140         G_debug(5, 
"  start : gvl: %s isosurf : %d\n",
 
  170     window[0] += (int)(yres * 2);
 
  171     window[1] -= (int)(yres * 2);
 
  172     window[2] -= (int)(xres * 2);
 
  173     window[3] += (int)(xres * 2);
 
  192         ktrans[i] = (255U << 24);
 
  237             (check_shin[i] || check_emis[i] || (kem[i] && check_color[i]));
 
  246     for (z = 0; z < depths - 1; z++) {
 
  251                 G_debug(5, 
"  break : isosurf : %d datalength : %d B\n", i,
 
  263         for (y = 0; y < rows - 1; y++) {
 
  264             yc = ((rows - 1) * yres) - (y * yres);
 
  266             for (
x = 0; 
x < cols - 1; 
x++) {
 
  283                             c_ndx = (c_ndx - 1) * 256 + 
READ();
 
  297                             pos[i] + j * e_dl[i];
 
  301                     if (check_transp[i] || (ktrans[i] >> 24) < 255) {
 
  318                         for (j = 0; j < 3; j++) {
 
  321                             pos[i] = edge_pos[crnt_ev];
 
  325                                 pt[
X] = xc + (
READ() / 255. * xres);
 
  326                                 pt[
Y] = yc + (-(
READ() / 255. * yres));
 
  327                                 pt[
Z] = zc + (
READ() / 255. * zres);
 
  330                                 pt[edge_vert_pos[crnt_ev][0]] = 
READ() / 255.;
 
  331                                 pt[edge_vert_pos[crnt_ev][1]] =
 
  332                                     edge_vert_pos[crnt_ev][2];
 
  333                                 pt[edge_vert_pos[crnt_ev][3]] =
 
  334                                     edge_vert_pos[crnt_ev][4];
 
  336                                 pt[
X] = xc + (pt[
X] * xres);
 
  337                                 pt[
Y] = yc + (-(pt[
Y] * yres));
 
  338                                 pt[
Z] = zc + (pt[
Z] * zres);
 
  341                             n[
X] = (
READ() / 127. - 1.) / xres;
 
  342                             n[
Y] = (-(
READ() / 127. - 1.)) / yres;
 
  343                             n[
Z] = (
READ() / 127. - 1.) / zres;
 
  351                             if (check_color[i]) {
 
  355                                 curcolor[i] = (
r & 0xff) | ((
g & 0xff) << 8) |
 
  360                                 ktrans[i] = 
READ() << 24;
 
  364                                 ksh[i] = ((float)
READ()) / 255.;
 
  367                                 kem[i] = ((float)
READ()) / 255.;
 
  369                             if (pksh != ksh[i] || pkem != kem[i] ||
 
  370                                 (kem[i] && check_color[i])) {
 
  393         G_debug(5, 
"  end : isosurf : %d datalength : %d B\n", i, pos[i]);
 
  433 #define DISTANCE_2(x1, y1, x2, y2) \ 
  434     sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) 
  448     GLdouble modelMatrix[16], projMatrix[16];
 
  468     for (i = 0; i < gvl->
n_slices; i++) {
 
  476     for (i = 0; i < gvl->
n_slices; i++) {
 
  504     int color, offset, transp;
 
  506     float x, nextx, y, nexty, z, stepx, stepy, stepz;
 
  507     int cols, rows, c, 
r;
 
  508     float f_cols, f_rows, distxy, distz, modx, mody, modz, modxy;
 
  510     double resx, resy, resz;
 
  513     slice = gvl->
slice[ndx];
 
  517     distz = fabsf(slice->
z2 - slice->
z1);
 
  520     if (distxy == 0. || distz == 0.) {
 
  525     if (slice->
dir == 
X) {
 
  536     else if (slice->
dir == 
Y) {
 
  561                        (slice->
y2 - slice->
y1) / distxy * mody, 0., 0.);
 
  564     f_cols = distxy / modxy;
 
  565     cols = f_cols > (int)f_cols ? (
int)f_cols + 1 : (int)f_cols;
 
  567     f_rows = distz / modz;
 
  568     rows = f_rows > (int)f_rows ? (
int)f_rows + 1 : (int)f_rows;
 
  571     stepx = (slice->
x2 - slice->
x1) / f_cols;
 
  572     stepy = (slice->
y2 - slice->
y1) / f_cols;
 
  573     stepz = (slice->
z2 - slice->
z1) / f_rows;
 
  581         nextx = 
x + stepx * f_cols;
 
  582         nexty = y + stepy * f_cols;
 
  591         transp = (255 - slice->
transp) << 24;
 
  598     for (c = 0; c < cols; c++) {
 
  607         for (
r = 0; 
r < rows + 1; 
r++) {
 
  609             offset = (c + 1) * (rows + 1) * 3 + 
r * 3;
 
  612             color = (slice->
data[offset] & 0xff) |
 
  613                     ((slice->
data[offset + 1] & 0xff) << 8) |
 
  614                     ((slice->
data[offset + 2] & 0xff) << 16);
 
  617             pt[ptX] = nextx * resx;
 
  618             pt[ptY] = nexty * resy;
 
  625             offset = c * (rows + 1) * 3 + 
r * 3;
 
  628             color = (slice->
data[offset] & 0xff) |
 
  629                     ((slice->
data[offset + 1] & 0xff) << 8) |
 
  630                     ((slice->
data[offset + 2] & 0xff) << 16);
 
  640             if (
r + 1 > f_rows) {
 
  641                 z += stepz * (f_rows - (float)
r);
 
  651         if (c + 2 > f_cols) {
 
  653             nextx += stepx * (f_cols - (float)(c + 1));
 
  655             nexty += stepy * (f_cols - (float)(c + 1));
 
  683     double resx, resy, resz;
 
  687     G_debug(5, 
"gvld_wire_slices");
 
  704     for (i = 0; i < gvl->
n_slices; i++) {
 
  705         slice = gvl->
slice[i];
 
  708         if (slice->
dir == 
X) {
 
  716         else if (slice->
dir == 
Y) {
 
  736         pt[ptX] = slice->
x1 * resx;
 
  737         pt[ptY] = slice->
y1 * resy;
 
  738         pt[ptZ] = slice->
z1 * resz;
 
  743         pt[ptX] = slice->
x1 * resx;
 
  744         pt[ptY] = slice->
y1 * resy;
 
  745         pt[ptZ] = slice->
z2 * resz;
 
  750         pt[ptX] = slice->
x2 * resx;
 
  751         pt[ptY] = slice->
y2 * resy;
 
  752         pt[ptZ] = slice->
z2 * resz;
 
  757         pt[ptX] = slice->
x2 * resx;
 
  758         pt[ptY] = slice->
y2 * resy;
 
  759         pt[ptZ] = slice->
z1 * resz;
 
  764         pt[ptX] = slice->
x1 * resx;
 
  765         pt[ptY] = slice->
y1 * resy;
 
  766         pt[ptZ] = slice->
z1 * resz;
 
CELL_ENTRY cell_table[256]
void G_free(void *)
Free allocated memory.
int G_debug(int, const char *,...) __attribute__((format(printf
void gsd_endtmesh(void)
ADD.
void gsd_pushmatrix(void)
Push the current matrix stack.
char * gvl_file_get_name(int)
Get file name for given handle.
void gsd_getwindow(int *, int *, double *, double *)
Get viewport.
void gsd_do_scale(int)
Set current scale.
int gvl_slices_calc(geovol *)
Calculate slices for given volume set.
void gsd_shademodel(int)
Set shaded model.
void gsd_bgnpolygon(void)
Delimit the vertices of a primitive or a group of like primitives.
int gvl_isosurf_calc(geovol *)
Fill data structure with computed isosurfaces polygons.
void gsd_color_func(unsigned int)
Set current color.
void gsd_translate(float, float, float)
Multiply the current matrix by a translation matrix.
void gsd_popmatrix(void)
Pop the current matrix stack.
void gsd_zwritemask(unsigned long)
Write out z-mask.
void gsd_linewidth(short)
Set width of rasterized lines.
void gsd_endline(void)
End line.
void gsd_colormode(int)
Set color mode.
void GS_get_scale(float *, float *, float *, int)
Get axis scale.
void gsd_set_material(int, int, float, float, int)
Set material.
void gsd_bgnline(void)
Begin line.
void gsd_blend(int)
Specify pixel arithmetic.
void gsd_vert_func(float *)
ADD.
void gsd_bgntmesh(void)
ADD.
int GS_check_cancel(void)
Check for cancel.
void gsd_endpolygon(void)
Delimit the vertices of a primitive or a group of like primitives.
void gsd_litvert_func(float *, unsigned long, float *)
Set the current normal vector & specify vertex.
#define UNUSED
A macro for an attribute, if attached to a variable, indicating that the variable is not used.
#define DISTANCE_2(x1, y1, x2, y2)
int gvld_isosurf(geovol *gvl)
Draw volume isosurfaces.
int gvld_slice(geovol *gvl, int ndx)
Draw slice.
int gvld_wire_slices(geovol *gvl)
Draw wire slices.
int gvld_wire_isosurf(geovol *gvl)
Draw volume isosurface in draw mode.
int gvld_wind3_box(geovol *gvl)
Draw volume bounding box.
int gvld_slices(geovol *gvl)
Draw slices.
int gvld_wire_vol(geovol *gvl)
Draw volume in wire mode (bounding box)
int gvld_vol(geovol *gvl)
Draw volume set (slices and isosurfaces)
OGSF header file (structures)
geovol_isosurf * isosurf[12]
unsigned int slice_draw_mode
unsigned int isosurf_draw_mode
geovol_isosurf_att att[7]