12 #if defined(old_version) || defined(old_intersection)
21 static int find_out_point(
double orig_xyz[3],
double r_dxyz[3],
int ijk[3],
22 double in_point[3],
double ray_direction[3],
23 int face_sect[3],
double out_point[3]);
24 static void find_next_cell(
int ijkn[3],
int current_ijk[3],
int face_sect[3],
25 double vv[3],
int next_ijk[3]);
27 static int find_first_inter_point(
double point_o[3],
double view_p[3],
28 double ray_direction[3],
double orig_xyz[3],
29 double dxyz[3],
int r_level[3],
32 double minmax[6], t[6], mint;
34 for (i = 0; i < 3; i++) {
35 minmax[i * 2] = orig_xyz[i];
36 minmax[i * 2 + 1] = orig_xyz[i] + dxyz[i];
38 for (i = 0; i < 3; i++) {
39 if (fabs(ray_direction[i]) <
EPSILON) {
41 t[i * 2 + 1] = 1.0E+17;
43 t[i * 2] = (minmax[i * 2] - view_p[i]) / ray_direction[i];
44 t[i * 2 + 1] = (minmax[i * 2 + 1] - view_p[i]) / ray_direction[i];
48 for (i = 0; i < 3; i++) {
49 t[i * 2] = (minmax[i * 2] - view_p[i]) / (ray_direction[i] +
EPSILON);
51 (minmax[i * 2 + 1] - view_p[i]) / (ray_direction[i] +
EPSILON);
57 for (i = 0; i < 6; i++) {
58 if ((mint > t[i]) && (t[i] >
EPSILON)) {
59 for (j = 0; j < 3; j++) first_p[j] = view_p[j] + t[i] * ray_direction[j];
60 if ((first_p[0] >= minmax[0] -
EPSILON) &&
61 (first_p[0] <= minmax[1] +
EPSILON) &&
62 (first_p[1] >= minmax[2] -
EPSILON) &&
63 (first_p[1] <= minmax[3] +
EPSILON) &&
64 (first_p[2] >= minmax[4] -
EPSILON) &&
65 (first_p[2] <= minmax[5] +
EPSILON)) {
71 if ((mincomp >= 0) && (mincomp <= 5)) {
72 for (i = 0; i < 3; i++) first_p[i] = view_p[i] + mint * ray_direction[i];
87 int find_first_inter_point(
double point_o[3],
double view_p[3],
VR_data *vd,
89 int i, j, m, node[4], spm[6], minsp;
90 double vv[8 * 3], nn, a[6], b[6], c[6], d[6], abc, in_vv[3], in_point[3],
92 double t, st[6], mint, out_point[3], point[3];
96 for (i = 0; i < 3; i++) in_vv[i] = point_o[i] - view_p[i];
97 nn = sqrt(
SQR(in_vv[0]) +
SQR(in_vv[1]) +
SQR(in_vv[2]));
99 for (i = 0; i < 3; i++) in_vv[i] /= nn;
101 for (i = 0; i < 3; i++) in_point[i] = view_p[i];
102 vv[0 * 3] = vv[4 * 3] = vv[7 * 3] = vv[3 * 3] = vd->
xyz0[0];
103 vv[1 * 3] = vv[5 * 3] = vv[6 * 3] = vv[2 * 3] =
105 vv[0 * 3 + 2] = vv[1 * 3 + 2] = vv[2 * 3 + 2] = vv[3 * 3 + 2] = vd->
xyz0[2];
106 vv[4 * 3 + 2] = vv[5 * 3 + 2] = vv[6 * 3 + 2] = vv[7 * 3 + 2] =
108 vv[0 * 3 + 1] = vv[1 * 3 + 1] = vv[5 * 3 + 1] = vv[4 * 3 + 1] = vd->
xyz0[1];
109 vv[3 * 3 + 1] = vv[2 * 3 + 1] = vv[6 * 3 + 1] = vv[7 * 3 + 1] =
112 for (m = 0; m < 6; m++) {
114 for (i = 0; i < 4; i++)
115 for (j = 0; j < 3; j++) fp[i][j] = vv[node[i] * 3 + j];
116 a[m] = (fp[1][1] - fp[0][1]) * (fp[3][2] - fp[0][2]) -
117 (fp[3][1] - fp[0][1]) * (fp[1][2] - fp[0][2]);
118 b[m] = -(fp[1][0] - fp[0][0]) * (fp[3][2] - fp[0][2]) +
119 (fp[3][0] - fp[0][0]) * (fp[1][2] - fp[0][2]);
120 c[m] = (fp[1][0] - fp[0][0]) * (fp[3][1] - fp[0][1]) -
121 (fp[3][0] - fp[0][0]) * (fp[1][1] - fp[0][1]);
122 abc = sqrt(a[m] * a[m] + b[m] * b[m] + c[m] * c[m]);
128 d[m] = -(fp[0][0] * a[m] + fp[0][1] * b[m] + fp[0][2] * c[m]);
132 for (m = 0; m < 6; m++) {
133 if (fabs(a[m] * in_vv[0] + b[m] * in_vv[1] + c[m] * in_vv[2]) >
EPSILON) {
134 t = (-d[m] - a[m] * in_point[0] - b[m] * in_point[1] -
135 c[m] * in_point[2]) /
136 (a[m] * in_vv[0] + b[m] * in_vv[1] + c[m] * in_vv[2]);
139 for (j = 0; j < 3; j++) point[j] = in_point[j] + t * in_vv[j];
187 for (m = 1; m <= lc; m++) {
193 for (j = 0; j < 3; j++) out_point[j] = in_point[j] + mint * in_vv[j];
196 for (i = 0; i < 3; i++) first_p[i] = out_point[i];
206 void search2_leave(
Tree_pointer *in_voxel,
double out_point[3],
208 int i, index[3], child_no;
213 for (i = 0; i < 3; i++) {
216 if (ray_direction[i] < 0) {
217 if (out_point[i] <= mid_value)
221 }
else if (ray_direction[i] >= 0) {
222 if (out_point[i] < mid_value)
228 child_no = index[2] * 4 + index[1] * 2 + index[0];
229 p1 = &(p1->
child[child_no]);
235 void search_leave(
Tree_pointer *root_tree,
int ini_index,
double first_p[3],
238 int index[3], child_no;
242 p1 = &(root_tree[ini_index]);
244 for (i = 0; i < 3; i++) {
247 if (ray_direction[i] < 0) {
248 if (first_p[i] <= mid_value)
252 }
else if (ray_direction[i] >= 0) {
253 if (first_p[i] < mid_value)
259 child_no = index[2] * 4 + index[1] * 2 + index[0];
260 p1 = &(p1->
child[child_no]);
269 double orig_xyz[3],
double dxyz[3],
double r_dxyz[3],
270 double ray_direction[3],
double first_p[3],
int ijk[3]) {
272 int ini_face, intersection, con1, next_ijk[3], face_sect[3];
275 ini_face = find_first_inter_point(point_o, view_point_d, ray_direction,
276 orig_xyz, dxyz, r_level, first_p);
277 if (ini_face == -1) {
281 for (i = 0; i < 3; i++)
282 ijk[i] = (
int)((first_p[i] - orig_xyz[i] -
EPSILON) / r_dxyz[i]);
283 if ((ijk[0] < 0) || (ijk[0] > r_level[0] - 1) || (ijk[1] < 0) ||
284 (ijk[1] > r_level[1] - 1) || (ijk[2] < 0) || (ijk[2] > r_level[2] - 1))
286 "ERROR: HEC-MW-VIS-E2006:There is something wrong on finding the "
288 for (i = 0; i < 3; i++) out_point[i] = 0.0;
289 con1 = find_out_point(orig_xyz, r_dxyz, ijk, first_p, ray_direction,
290 face_sect, out_point);
293 find_next_cell(r_level, ijk, face_sect, ray_direction, next_ijk);
294 if ((next_ijk[0] < 0) || (next_ijk[0] > r_level[0] - 1) ||
295 (next_ijk[1] < 0) || (next_ijk[1] > r_level[1] - 1) ||
296 (next_ijk[2] < 0) || (next_ijk[2] > r_level[2] - 1))
299 for (i = 0; i < 3; i++) ijk[i] = next_ijk[i];
308 double ray_direction[3],
double first_p[3])
311 int i, ijk[3], ini_index, ijkn[3];
312 int ini_face, intersection, con1, face_sect[3], next_ijk[3];
313 double view_p[3], out_point[3];
316 for (i = 0; i < 3; i++) ijkn[i] = vd->
nxyz[i];
318 for (i = 0; i < 3; i++) view_p[i] = vr->
view_point_d[i];
319 ini_face = find_first_inter_point(point_o, view_p, vd, first_p);
320 if (ini_face == -1) {
329 for (i = 1; i < 3; i++)
330 ijk[i] = (
int)((first_p[i] - vd->
xyz0[i]) / vd->
dxyz[i]);
331 }
else if (ini_face == 1) {
332 ijk[0] = vd->
nxyz[0] - 1;
333 for (i = 1; i < 3; i++)
334 ijk[i] = (
int)((first_p[i] - vd->
xyz0[i]) / vd->
dxyz[i]);
335 }
else if (ini_face == 2) {
337 ijk[0] = (int)((first_p[0] - vd->
xyz0[0]) / vd->
dxyz[0]);
338 ijk[2] = (int)((first_p[2] - vd->
xyz0[2]) / vd->
dxyz[2]);
339 }
else if (ini_face == 3) {
340 ijk[1] = vd->
nxyz[1] - 1;
341 ijk[0] = (int)((first_p[0] - vd->
xyz0[0]) / vd->
dxyz[0]);
342 ijk[2] = (int)((first_p[2] - vd->
xyz0[2]) / vd->
dxyz[2]);
343 }
else if (ini_face == 4) {
345 ijk[0] = (int)((first_p[0] - vd->
xyz0[0]) / vd->
dxyz[0]);
346 ijk[1] = (int)((first_p[1] - vd->
xyz0[1]) / vd->
dxyz[1]);
347 }
else if (ini_face == 5) {
348 ijk[2] = vd->
nxyz[2] - 1;
349 ijk[0] = (int)((first_p[0] - vd->
xyz0[0]) / vd->
dxyz[0]);
350 ijk[1] = (int)((first_p[1] - vd->
xyz0[1]) / vd->
dxyz[1]);
353 for (i = 0; i < 3; i++) out_point[i] = 0.0;
354 con1 = find_out_point(vd, first_p, ray_direction, face_sect, out_point);
357 find_next_cell(ijkn, ijk, face_sect, ray_direction, next_ijk);
358 for (i = 0; i < 3; i++) ijk[i] = next_ijk[i];
360 ijk[2] * vd->
nxyz[1] * vd->
nxyz[0] + ijk[1] * vd->
nxyz[0] + ijk[0];
362 search_leave(root_tree, ini_index, first_p, &vvv, ray_direction);
366 return (intersection);
369 void build_adjacent_index(
int connect[8][6],
int local_face[8][6]) {
370 connect[0][0] = connect[0][2] = connect[0][4] = -1;
371 local_face[0][0] = 0;
372 local_face[0][2] = 2;
373 local_face[0][4] = 4;
375 local_face[0][1] = 0;
377 local_face[0][3] = 2;
379 local_face[0][5] = 4;
380 connect[1][1] = connect[1][2] = connect[1][4] = -1;
381 local_face[1][1] = 1;
382 local_face[1][2] = 2;
383 local_face[1][4] = 4;
385 local_face[1][0] = 1;
387 local_face[1][3] = 2;
389 local_face[1][5] = 4;
390 connect[2][0] = connect[2][3] = connect[2][4] = -1;
391 local_face[2][0] = 0;
392 local_face[2][3] = 3;
393 local_face[2][4] = 4;
395 local_face[2][1] = 0;
397 local_face[2][2] = 3;
399 local_face[2][5] = 4;
400 connect[3][1] = connect[3][3] = connect[3][4] = -1;
401 local_face[3][1] = 1;
402 local_face[3][3] = 3;
403 local_face[3][4] = 4;
405 local_face[3][0] = 1;
407 local_face[3][2] = 3;
409 local_face[3][5] = 4;
410 connect[4][0] = connect[4][2] = connect[4][5] = -1;
411 local_face[4][0] = 0;
412 local_face[4][2] = 2;
413 local_face[4][5] = 5;
415 local_face[4][1] = 0;
417 local_face[4][3] = 2;
419 local_face[4][4] = 5;
420 connect[5][1] = connect[5][2] = connect[5][5] = -1;
421 local_face[5][1] = 1;
422 local_face[5][2] = 2;
423 local_face[5][5] = 5;
425 local_face[5][0] = 1;
427 local_face[5][3] = 2;
429 local_face[5][4] = 5;
430 connect[6][0] = connect[6][3] = connect[6][5] = -1;
431 local_face[6][0] = 0;
432 local_face[6][3] = 3;
433 local_face[6][5] = 5;
435 local_face[6][1] = 0;
437 local_face[6][2] = 3;
439 local_face[6][4] = 5;
440 connect[7][1] = connect[7][3] = connect[7][5] = -1;
441 local_face[7][1] = 1;
442 local_face[7][3] = 3;
443 local_face[7][5] = 5;
445 local_face[7][0] = 1;
447 local_face[7][2] = 3;
449 local_face[7][4] = 5;
454 #ifdef old_intersection
455 static void find_coordinates_of_cell(
int r_level[3],
double orig_xyz[3],
456 double r_dxyz[3],
int ijk[3],
458 vv[0 * 3] = vv[4 * 3] = vv[7 * 3] = vv[3 * 3] =
459 orig_xyz[0] + ijk[0] * r_dxyz[0];
460 vv[1 * 3] = vv[5 * 3] = vv[6 * 3] = vv[2 * 3] =
461 orig_xyz[0] + (ijk[0] + 1) * r_dxyz[0];
462 vv[0 * 3 + 2] = vv[1 * 3 + 2] = vv[2 * 3 + 2] = vv[3 * 3 + 2] =
463 orig_xyz[2] + ijk[2] * r_dxyz[2];
464 vv[4 * 3 + 2] = vv[5 * 3 + 2] = vv[6 * 3 + 2] = vv[7 * 3 + 2] =
465 orig_xyz[2] + (ijk[2] + 1) * r_dxyz[2];
466 vv[0 * 3 + 1] = vv[1 * 3 + 1] = vv[5 * 3 + 1] = vv[4 * 3 + 1] =
467 orig_xyz[1] + ijk[1] * r_dxyz[1];
468 vv[3 * 3 + 1] = vv[2 * 3 + 1] = vv[6 * 3 + 1] = vv[7 * 3 + 1] =
469 orig_xyz[1] + (ijk[1] + 1) * r_dxyz[1];
473 int find_out_point(
VR_data *vd,
int ijk[3],
double in_point[3],
474 double ray_direction[3],
int face_sect[3],
478 double fp[4][3], t, a[6], b[6], c[6], d[6], abc, st[6], mint, vv[24];
479 int i, j, m, lc, spm[6], con1, minsp, node[4], face1_sect[3], lm;
481 find_coordinates_of_cell(vd, ijk, vv);
484 for (m = 0; m < 6; m++) {
486 for (i = 0; i < 4; i++)
487 for (j = 0; j < 3; j++) {
488 fp[i][j] = vv[node[i] * 3 + j];
492 a[m] = (fp[1][1] - fp[0][1]) * (fp[3][2] - fp[0][2]) -
493 (fp[3][1] - fp[0][1]) * (fp[1][2] - fp[0][2]);
494 b[m] = -(fp[1][0] - fp[0][0]) * (fp[3][2] - fp[0][2]) +
495 (fp[3][0] - fp[0][0]) * (fp[1][2] - fp[0][2]);
496 c[m] = (fp[1][0] - fp[0][0]) * (fp[3][1] - fp[0][1]) -
497 (fp[3][0] - fp[0][0]) * (fp[1][1] - fp[0][1]);
498 abc = sqrt(a[m] * a[m] + b[m] * b[m] + c[m] * c[m]);
502 d[m] = -(fp[0][0] * a[m] + fp[0][1] * b[m] + fp[0][2] * c[m]);
505 for (m = 0; m < 3; m++) face_sect[m] = -1;
506 for (m = 0; m < 6; m++) {
507 if (fabs(a[m] * in_point[0] + b[m] * in_point[1] + c[m] * in_point[2] +
513 for (m = 0; m < 6; m++) {
514 if ((m != face_sect[0]) && (m != face_sect[1]) && (m != face_sect[2])) {
515 if (fabs(a[m] * ray_direction[0] + b[m] * ray_direction[1] +
516 c[m] * ray_direction[2]) > 0.000001) {
517 t = (-d[m] - a[m] * in_point[0] - b[m] * in_point[1] -
518 c[m] * in_point[2]) /
519 (a[m] * ray_direction[0] + b[m] * ray_direction[1] +
520 c[m] * ray_direction[2]);
535 for (m = 1; m <= lc; m++) {
543 for (j = 0; j < 3; j++)
544 out_point[j] = in_point[j] + mint * ray_direction[j];
555 for (m = 0; m < 3; m++) face1_sect[m] = -1;
556 for (m = 0; m < 6; m++) {
557 if (fabs(a[m] * out_point[0] + b[m] * out_point[1] + c[m] * out_point[2] +
564 for (m = 0; m < 3; m++) face_sect[m] = face1_sect[m];
575 static int find_out_point(
double orig_xyz[3],
double r_dxyz[3],
int ijk[3],
576 double in_point[3],
double ray_direction[3],
577 int face_sect[3],
double out_point[3]) {
578 int i, j, mincomp, intersection;
579 double minmax[6], t[3], mint;
581 for (i = 0; i < 3; i++) face_sect[i] = -1;
582 for (i = 0; i < 6; i++) {
585 minmax[i] = orig_xyz[i1] + (ijk[i1] + j1) * r_dxyz[i1];
588 for (i = 0; i < 3; i++) {
589 if (fabs(ray_direction[i]) <
EPSILON)
592 if (ray_direction[i] > 0)
593 t[i] = (minmax[i * 2 + 1] - in_point[i]) / ray_direction[i];
594 else if (ray_direction[i] < 0)
595 t[i] = (in_point[i] - minmax[i * 2]) / (-ray_direction[i]);
599 for (i = 0; i < 3; i++) {
600 if (ray_direction[i] > 0)
601 t[i] = (minmax[i * 2 + 1] - in_point[i]) / (ray_direction[i] +
EPSILON);
602 else if (ray_direction[i] < 0)
603 t[i] = (in_point[i] - minmax[i * 2]) / (-ray_direction[i] +
EPSILON);
608 for (i = 0; i < 3; i++) {
609 if ((mint > t[i]) && (t[i] >
EPSILON)) {
610 for (j = 0; j < 3; j++)
611 out_point[j] = in_point[j] + t[i] * ray_direction[j];
612 if ((out_point[0] >= minmax[0] -
EPSILON) &&
613 (out_point[0] <= minmax[1] +
EPSILON) &&
614 (out_point[1] >= minmax[2] -
EPSILON) &&
615 (out_point[1] <= minmax[3] +
EPSILON) &&
616 (out_point[2] >= minmax[4] -
EPSILON) &&
617 (out_point[2] <= minmax[5] +
EPSILON)) {
623 if ((mincomp >= 0) && (mincomp <= 2)) {
625 for (i = 0; i < 3; i++)
626 out_point[i] = in_point[i] + mint * ray_direction[i];
629 for (i = 0; i < 3; i++) out_point[i] = in_point[i];
631 for (i = 0; i < 3; i++) {
632 if (fabs(out_point[i] - minmax[i * 2]) <
EPSILON)
633 face_sect[i] = i * 2;
634 else if (fabs(out_point[i] - minmax[i * 2 + 1]) <
EPSILON)
635 face_sect[i] = i * 2 + 1;
638 return (intersection);
641 static void find_next_cell(
int ijkn[3],
int current_ijk[3],
int face_sect[3],
642 double vv[3],
int next_ijk[3])
648 for (j = 0; j < 3; j++) face1_sect[j] = face_sect[j];
649 for (j = 0; j < 3; j++) next_ijk[j] = current_ijk[j];
650 for (m = 0; m < 3; m++) {
651 if (face_sect[m] != -1) {
652 if (face_sect[m] == 0) {
654 next_ijk[0] = current_ijk[0] - 1;
656 if (next_ijk[0] < 0)
break;
658 }
else if (face_sect[m] == 1) {
660 next_ijk[0] = current_ijk[0] + 1;
662 if (next_ijk[0] > ijkn[0] - 1)
break;
664 }
else if (face_sect[m] == 2) {
666 next_ijk[1] = current_ijk[1] - 1;
668 if (next_ijk[1] < 0)
break;
670 }
else if (face_sect[m] == 3) {
672 next_ijk[1] = current_ijk[1] + 1;
674 if (next_ijk[1] > ijkn[1] - 1)
break;
676 }
else if (face_sect[m] == 4) {
678 next_ijk[2] = current_ijk[2] - 1;
680 if (next_ijk[2] < 0)
break;
682 }
else if (face_sect[m] == 5) {
684 next_ijk[2] = current_ijk[2] + 1;
686 if (next_ijk[2] > ijkn[2] - 1)
break;
692 for (m = 0; m < 3; m++) face_sect[m] = face1_sect[m];
697 static int find_next_point(
double orig_xyz[3],
double r_dxyz[3],
int r_level[3],
698 int current_ijk[3],
double in_point[3],
699 double out_point[3],
double ray_direction[3],
701 int flag, face_sect[3];
704 flag = find_out_point(orig_xyz, r_dxyz, current_ijk, in_point, ray_direction,
705 face_sect, out_point);
709 "ERROR: HEC-MW-VIS-E2007:There is some problem in finding intersection "
718 find_next_cell(r_level, current_ijk, face_sect, ray_direction, next_ijk);
719 if ((next_ijk[0] < 0) || (next_ijk[0] > r_level[0] - 1) ||
720 (next_ijk[1] < 0) || (next_ijk[1] > r_level[1] - 1) ||
721 (next_ijk[2] < 0) || (next_ijk[2] > r_level[2] - 1))
727 void ray_trace(
int remove_0_display_on,
int color_mapping_style,
728 double *interval_point,
int transfer_function_style,
729 double opa_value,
int num_of_features,
double *fea_point,
730 double view_point_d[3],
int interval_mapping_num,
731 int color_system_type,
int num_of_lights,
double *light_point,
732 double k_ads[3],
double orig_xyz[3],
double dxyz[3],
733 double r_dxyz[3],
int r_level[3],
int *empty_flag,
double *var,
734 double *grad_var,
double first_p[3],
int first_ijk[3],
735 double ray_direction[3],
double mincolor,
double maxcolor,
736 double accum_rgba[4],
double grad_minmax[2],
737 double feap_minmax[2],
double feai_minmax[2],
738 double dis_minmax[2],
double *opa_table,
double tav_length,
739 int time_step,
int test_i,
int test_j)
753 double in_point[3], out_point[3];
754 int flag, single_empty_flag, value_flag, index, current_ijk[3], next_ijk[3];
757 for (i = 0; i < 4; i++) accum_rgba[i] = 0.0;
759 for (i = 0; i < 3; i++) in_point[i] = first_p[i];
760 for (i = 0; i < 3; i++) current_ijk[i] = first_ijk[i];
761 while ((accum_rgba[3] < 0.99) && (flag == 1)) {
767 flag = find_next_point(orig_xyz, r_dxyz, r_level, current_ijk, in_point,
768 out_point, ray_direction, next_ijk);
770 single_empty_flag = 1;
779 for (i = 0; i < 8; i++) {
781 index = (current_ijk[2] + (int)(i / 4)) * (r_level[0] + 1) *
783 (current_ijk[1] + (
int)(j / 2)) * (r_level[0] + 1) +
784 current_ijk[0] + j % 2;
785 if (empty_flag[index] == 0) single_empty_flag = 0;
814 if ((single_empty_flag == 1) && (flag != 0) && (value_flag == 1))
816 transfer_function_style, opa_value, num_of_features,
817 fea_point, view_point_d, interval_mapping_num,
818 color_system_type, num_of_lights, light_point, k_ads,
819 r_level, orig_xyz, r_dxyz, var, grad_var, accum_rgba,
820 mincolor, maxcolor, grad_minmax, feap_minmax,
821 feai_minmax, dis_minmax, opa_table, in_point, out_point,
822 tav_length, time_step, print_flag);
824 for (i = 0; i < 3; i++) in_point[i] = out_point[i];
825 for (i = 0; i < 3; i++) current_ijk[i] = next_ijk[i];
void compute_color_vr(int current_ijk[3], int color_mapping_style, double *interval_point, int transfer_function_style, double opa_value, int num_of_features, double *fea_point, double view_point_d[3], int interval_mapping_num, int color_system_type, int num_of_lights, double *light_point, double k_ads[3], int r_level[3], double orig_xyz[3], double r_dxyz[3], double *var, double *grad_var, double accum_rgba[4], double mincolor, double maxcolor, double grad_minmax[2], double feap_minmax[2], double feai_minmax[2], double dis_minmax[2], double *opa_table, double in_point[3], double out_point[3], double tav_length, int time_step, int print_flag)
void HECMW_vis_print_exit(char *var)
void transform_face_node(int face, int node[4])
int find_first_inter(double point_o[3], double view_point_d[3], int r_level[3], double orig_xyz[3], double dxyz[3], double r_dxyz[3], double ray_direction[3], double first_p[3], int ijk[3])
void ray_trace(int remove_0_display_on, int color_mapping_style, double *interval_point, int transfer_function_style, double opa_value, int num_of_features, double *fea_point, double view_point_d[3], int interval_mapping_num, int color_system_type, int num_of_lights, double *light_point, double k_ads[3], double orig_xyz[3], double dxyz[3], double r_dxyz[3], int r_level[3], int *empty_flag, double *var, double *grad_var, double first_p[3], int first_ijk[3], double ray_direction[3], double mincolor, double maxcolor, double accum_rgba[4], double grad_minmax[2], double feap_minmax[2], double feai_minmax[2], double dis_minmax[2], double *opa_table, double tav_length, int time_step, int test_i, int test_j)
struct _tree_pointer_struct * child