31 int tpatch,
int *color_list,
double *minvalue,
32 double *maxvalue,
Result *result,
38 int i, j, k, m, ii, iii, m1, m2, mmm, mmm1, jjj;
41 double view_n[3], nview_n, vertex[3 * 8];
42 double point_s[3], point_o[3];
43 double range[6], xd, yd;
44 double coff_matrix[3][3], n_vertex[3 * 8], inv_matrix[3][3];
45 double view_point[3], scr_area[4], x, y;
46 double tmincolor, tmaxcolor, trange[6], svertex[3 * 8], sn_vertex[3 * 8],
51 int pix_num, pix0_num, pixn;
52 double *n_subimage, *n_subopa, *subimage, *subopa;
53 double *subimage1, *subopa1;
55 int starti, startj, endi, endj, start_x, start_y;
56 double minx, miny, minz, maxx, maxy, maxz, tminx, tminy, tminz, tmaxx, tmaxy,
58 int num_img, base_x, base_y;
59 double o_v_point[3], m_scr[4];
60 double mincolor, maxcolor, *mivalue, *mavalue, color_iso[3], org_mincolor,
64 unsigned char r, g, b;
67 int scale, scale_type;
68 double *z_buffer, scr_f[4], f[3][3], n_f[3][3], inter_point[3], normal[9];
69 double value, c_value[3], depth;
70 double deltac, iso_p[6], isocolor, n_iso[6], pixel_d[2][2], slip_y;
72 int pixel_i[2][2], flag, tmp_i, last_j, next_j;
78 double f_f[4], norm, v_f[9];
80 double start_time, time_interval;
83 int deform_flag, count_dash_num;
99 if ((mivalue ==
NULL) || (mavalue ==
NULL))
107 for (i = 0; i <
data->nn_component; i++) {
108 mivalue[i] = minvalue[i];
109 mavalue[i] = maxvalue[i];
113 for (i = 0; i <
data->nn_component; i++) {
114 if (color_list[i] == 1) {
115 org_mincolor = tmincolor = mivalue[i];
116 org_maxcolor = tmaxcolor = mavalue[i];
119 "For data attribute %s, the minimum value is %lf, the maximum "
121 data->node_label[i], tmincolor, tmaxcolor);
136 mynode, pesize, VIS_COMM,
144 if (stat_para[70] == 0) {
149 for (i = 0; i < 6; i++) trange[i] = 0.0;
174 "trange: minx=%lf maxx=%lf miny=%lf maxy=%lf minz=%lf maxz=%lf\n",
175 tminx, tmaxx, tminy, tmaxy, tminz, tmaxz);
188 "Fixed range is used for dynamic dataset: minx=%lf maxx=%lf "
189 "miny=%lf maxy=%lf minz=%lf maxz=%lf\n",
190 tminx, tmaxx, tminy, tmaxy, tminz, tmaxz);
195 if (stat_para[69] == 0)
197 tmaxz - tminz,
mesh,
data, pesize, VIS_COMM);
203 if (deform_flag == 1) {
205 if (stat_para[70] == 0) {
206 for (i = 0; i < 6; i++) trange[i] = 0.0;
233 if (stat_para[26] == 0) {
238 sr->
light_point[1] = tmaxy + 0.1 * (tmaxy - tminy);
239 sr->
light_point[2] = tmaxz + (tmaxz - tminz) * 2.0;
241 if (stat_para[27] == 0) {
246 if (stat_para[28] == 0) {
283 "viewpoint=%lf %lf %lf screen_point=%lf %lf %lfup=%lf %lf %lf\n",
286 sr->
up[0], sr->
up[1], sr->
up[2]);
287 fprintf(stderr,
"rotate_style=%d num_of_frames=%d\n", sr->
rotate_style,
294 for (i = 0; i < 3; i++)
295 sr->
screen_point[i] = (trange[i * 2] + trange[i * 2 + 1]) / 2.0;
297 for (i = 0; i < 3; i++) o_v_point[i] = sr->
view_point_d[i];
298 m_scr[0] = m_scr[2] = 1.0E+17;
299 m_scr[1] = m_scr[3] = -1.0E+17;
301 for (ii = 0; ii < num_img; ii++) {
307 for (i = 0; i < 3; i++)
309 nview_n = sqrt(
SQR(view_n[0]) +
SQR(view_n[1]) +
SQR(view_n[2]));
311 for (i = 0; i < 3; i++) view_n[i] /= nview_n;
317 for (i = 0; i < 3; i++)
321 if (scr_area[0] < m_scr[0]) m_scr[0] = scr_area[0];
322 if (scr_area[1] > m_scr[1]) m_scr[1] = scr_area[1];
323 if (scr_area[2] < m_scr[2]) m_scr[2] = scr_area[2];
324 if (scr_area[3] > m_scr[3]) m_scr[3] = scr_area[3];
327 for (i = 0; i < 3; i++) sr->
view_point_d[i] = o_v_point[i];
330 for (ii = 0; ii < num_img; ii++) {
335 fprintf(stderr,
"Start rendering rotation frame %d\n", ii);
338 "viewpoint=%lf %lf %lf screen_point=%lf %lf %lf up=%lf %lf %lf\n",
341 sr->
up[0], sr->
up[1], sr->
up[2]);
342 fprintf(stderr,
"rotate_style=%d num_of_frames=%d\n", sr->
rotate_style,
349 for (i = 0; i < 3; i++)
351 nview_n = sqrt(
SQR(view_n[0]) +
SQR(view_n[1]) +
SQR(view_n[2]));
353 for (i = 0; i < 3; i++) view_n[i] /= nview_n;
363 fprintf(stderr,
"viewpoint=%lf %lf %lf screen_point=%lf %lf %lf\n",
374 for (i = 0; i < 3; i++)
387 xd = (scr_area[1] - scr_area[0]) / (sr->
xr - 20);
388 yd = (scr_area[3] - scr_area[2]) / (sr->
yr - 20);
391 xd = (m_scr[1] - m_scr[0]) / (sr->
xr - 20);
392 yd = (m_scr[3] - m_scr[2]) / (sr->
yr - 20);
399 (int)((
int)(20 + (scr_area[3] - scr_area[2]) / yd) / 10) * 10 +
401 else if (num_img > 1)
403 (int)((
int)(20 + (m_scr[3] - m_scr[2]) / yd) / 10) * 10 + 10;
410 (int)((
int)(20 + (scr_area[1] - scr_area[0]) / xd) / 8) * 8 + 8;
411 else if (num_img > 1)
412 sr->
xr = (int)((
int)(20 + (m_scr[1] - m_scr[0]) / xd) / 8) * 8 + 8;
418 (
int)(start_time + time_interval * (
double)end_timestep));
419 len_step = strlen(buf3);
423 start_y = 10 + 7 * scale + 5;
424 if (sr->
yr < start_y + 10)
426 "The resolution for yr is not enough, please specify a larger "
428 if (sr->
xr < start_x + (len_step + 3 + 3) * scale)
430 "The resolution for xr is not enough, please specify a larger "
433 xd = (scr_area[1] - scr_area[0]) / (sr->
xr - (start_x + 10));
434 yd = (scr_area[3] - scr_area[2]) / (sr->
yr - (start_y + 10));
435 }
else if (num_img > 1) {
436 xd = (m_scr[1] - m_scr[0]) / (sr->
xr - (start_x + 10));
437 yd = (m_scr[3] - m_scr[2]) / (sr->
yr - (start_y + 10));
443 (int)((
int)(start_y + 10 + (scr_area[3] - scr_area[2]) / yd) /
447 else if (num_img > 1)
449 (int)((
int)(start_y + 10 + (m_scr[3] - m_scr[2]) / yd) / 10) *
458 (int)((
int)(20 + (scr_area[1] - scr_area[0]) / xd) / 8) * 8 + 8;
459 else if (num_img > 1)
460 sr->
xr = (int)((
int)(20 + (m_scr[1] - m_scr[0]) / xd) / 8) * 8 + 8;
468 xd = (scr_area[1] - scr_area[0]) / (sr->
xr - 40);
469 yd = (scr_area[3] - scr_area[2]) / (sr->
yr - 20);
470 }
else if (num_img > 1) {
471 xd = (m_scr[1] - m_scr[0]) / (sr->
xr - 40);
472 yd = (m_scr[3] - m_scr[2]) / (sr->
yr - 20);
479 (int)((
int)(20 + (scr_area[3] - scr_area[2]) / yd) / 10) * 10 +
481 else if (num_img > 1)
483 (int)((
int)(20 + (m_scr[3] - m_scr[2]) / yd) / 10) * 10 + 10;
484 }
else if (xd < yd) {
488 (int)((
int)(40 + (scr_area[1] - scr_area[0]) / xd) / 8) * 8 + 8;
489 else if (num_img > 1)
490 sr->
xr = (int)((
int)(40 + (m_scr[1] - m_scr[0]) / xd) / 8) * 8 + 8;
499 if (scale_type == 1) {
500 start_x = 20 + 45 * scale;
502 }
else if (scale_type == 2) {
503 start_x = 20 + 63 * scale;
508 if (sr->
xr < start_x + 10) {
510 "The image x_resolution cannot write such size characters\n");
512 "Please reduce the font size or enlarge x_resolution and run "
516 xd = (scr_area[1] - scr_area[0]) / (sr->
xr - (start_x + 10));
517 yd = (scr_area[3] - scr_area[2]) / (sr->
yr - 20);
518 }
else if (num_img > 1) {
519 xd = (m_scr[1] - m_scr[0]) / (sr->
xr - (start_x + 10));
520 yd = (m_scr[3] - m_scr[2]) / (sr->
yr - 20);
527 (int)((
int)(20 + (scr_area[3] - scr_area[2]) / yd) / 10) * 10 +
529 else if (num_img > 1)
531 (int)((
int)(20 + (m_scr[3] - m_scr[2]) / yd) / 10) * 10 + 10;
532 }
else if (xd < yd) {
536 (int)((
int)(start_x + 10 + (scr_area[1] - scr_area[0]) / xd) /
540 else if (num_img > 1)
542 (int)((
int)(start_x + 10 + (m_scr[1] - m_scr[0]) / xd) / 8) *
553 base_x = (int)((scr_area[0] - m_scr[0]) / xd);
554 base_y = (int)((scr_area[2] - m_scr[2]) / yd);
582 grad_minmax[0] = 1.0E17;
583 grad_minmax[1] = -1.0E17;
584 if (transfer_function_style == 2) {
586 feap_minmax[0] = 1.0E17;
587 feap_minmax[1] = -1.0E17;
588 if (transfer_function_style == 3) {
596 feap_minmax[0] = tfeap_minmax[0];
597 feap_minmax[1] = tfeap_minmax[1];
599 feai_minmax[0] = 1.0E17;
600 feai_minmax[1] = -1.0E17;
601 if (transfer_function_style == 4) {
612 dis_minmax[0] = 1.0E17;
613 dis_minmax[1] = -1.0E17;
614 if ((transfer_function_style == 5) || (transfer_function_style == 6))
620 fprintf(stderr,
"Start rendering deformation frame %d\n", jjj);
632 for (j = 0; j < sr->
yr * sr->
xr * 3; j++)
image[j] = 0.0;
644 for (j = 0; j < sr->
xr * sr->
yr; j++) z_buffer[j] = 1.0E16;
655 for (i = 0; i <
data->nn_component; i++) {
656 if (color_list[i] == 1) {
657 mincolor = mivalue[i];
658 maxcolor = mavalue[i];
675 v_normal = (
double *)
HECMW_calloc(result[iii].n_vertex * 3,
677 p_normal = (
double *)
HECMW_calloc(result[iii].n_patch * 4,
679 v_num = (
int *)
HECMW_calloc(result[iii].n_vertex,
sizeof(
int));
680 if ((v_normal ==
NULL) || (v_num ==
NULL) || (p_normal ==
NULL))
682 for (k = 0; k < result[iii].
n_vertex; k++) v_num[k] = 0;
683 for (k = 0; k < result[iii].
n_vertex * 3; k++) v_normal[k] = 0.0;
684 for (k = 0; k < result[iii].
n_patch; k++) {
685 for (i = 0; i < 3; i++) {
686 for (j = 0; j < 3; j++)
689 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
691 p_normal[k * 4 + 0] =
692 (f[1][1] - f[0][1]) * (f[2][2] - f[0][2]) -
693 (f[2][1] - f[0][1]) * (f[1][2] - f[0][2]);
694 p_normal[k * 4 + 1] =
695 -(f[1][0] - f[0][0]) * (f[2][2] - f[0][2]) +
696 (f[2][0] - f[0][0]) * (f[1][2] - f[0][2]);
697 p_normal[k * 4 + 2] =
698 (f[1][0] - f[0][0]) * (f[2][1] - f[0][1]) -
699 (f[2][0] - f[0][0]) * (f[1][1] - f[0][1]);
700 norm = sqrt(p_normal[k * 4 + 0] * p_normal[k * 4 + 0] +
701 p_normal[k * 4 + 1] * p_normal[k * 4 + 1] +
702 p_normal[k * 4 + 2] * p_normal[k * 4 + 2]);
704 for (j = 0; j < 3; j++) p_normal[k * 4 + j] /= norm;
706 p_normal[k * 4 + 3] = -p_normal[k * 4 + 0] * f[0][0] -
707 p_normal[k * 4 + 1] * f[0][1] -
708 p_normal[k * 4 + 2] * f[0][2];
709 for (i = 0; i < 3; i++) {
710 v_num[result[iii].
patch[k * 3 + i] - 1]++;
711 for (j = 0; j < 3; j++)
712 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j] +=
716 for (k = 0; k < result[iii].
n_vertex; k++) {
718 for (j = 0; j < 3; j++) v_normal[k * 3 + j] /= v_num[k];
723 for (k = 0; k < result[iii].
n_patch; k++) {
724 for (i = 0; i < 3; i++) {
725 for (j = 0; j < 3; j++)
728 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
730 result[iii].
color[result[iii].
patch[k * 3 + i] - 1];
733 for (i = 0; i < 3; i++)
734 for (j = 0; j < 3; j++)
736 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
741 starti = (int)((scr_f[0] - scr_area[0]) / xd) + start_x - 1;
742 endi = (int)((scr_f[1] - scr_area[0]) / xd) + start_x + 1;
743 startj = (int)((scr_f[2] - scr_area[2]) / yd) + start_y - 1;
744 endj = (int)((scr_f[3] - scr_area[2]) / yd) + start_y + 1;
745 for (j = startj; j < endj; j++)
746 for (i = starti; i < endi; i++) {
747 x = xd * (i - start_x + 0.5) + scr_area[0];
748 y = yd * (j - start_y + 0.5) + scr_area[2];
759 if (intersection == 1) {
763 if (depth < z_buffer[j * sr->
xr + i]) {
764 z_buffer[j * sr->
xr + i] = depth;
766 value = (mincolor + maxcolor) / 2.0;
779 accum_rgba, mincolor, maxcolor,
781 image[(j * sr->
xr + i) * 3] = accum_rgba[0];
782 image[(j * sr->
xr + i) * 3 + 1] = accum_rgba[1];
783 image[(j * sr->
xr + i) * 3 + 2] = accum_rgba[2];
793 v_normal = (
double *)
HECMW_calloc(result[iii].n_vertex * 3,
795 p_normal = (
double *)
HECMW_calloc(result[iii].n_patch * 4,
797 v_num = (
int *)
HECMW_calloc(result[iii].n_vertex,
sizeof(
int));
798 if ((v_normal ==
NULL) || (v_num ==
NULL) || (p_normal ==
NULL))
800 for (k = 0; k < result[iii].
n_vertex; k++) v_num[k] = 0;
801 for (k = 0; k < result[iii].
n_vertex * 3; k++) v_normal[k] = 0.0;
802 for (k = 0; k < result[iii].
n_patch; k++) {
803 for (i = 0; i < 3; i++) {
804 if (stat_para[70] == 0) {
805 for (j = 0; j < 3; j++)
808 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
811 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
816 for (j = 0; j < 3; j++)
819 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
822 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
827 p_normal[k * 4 + 0] =
828 (f[1][1] - f[0][1]) * (f[2][2] - f[0][2]) -
829 (f[2][1] - f[0][1]) * (f[1][2] - f[0][2]);
830 p_normal[k * 4 + 1] =
831 -(f[1][0] - f[0][0]) * (f[2][2] - f[0][2]) +
832 (f[2][0] - f[0][0]) * (f[1][2] - f[0][2]);
833 p_normal[k * 4 + 2] =
834 (f[1][0] - f[0][0]) * (f[2][1] - f[0][1]) -
835 (f[2][0] - f[0][0]) * (f[1][1] - f[0][1]);
836 norm = sqrt(p_normal[k * 4 + 0] * p_normal[k * 4 + 0] +
837 p_normal[k * 4 + 1] * p_normal[k * 4 + 1] +
838 p_normal[k * 4 + 2] * p_normal[k * 4 + 2]);
840 for (j = 0; j < 3; j++) p_normal[k * 4 + j] /= norm;
842 p_normal[k * 4 + 3] = -p_normal[k * 4 + 0] * f[0][0] -
843 p_normal[k * 4 + 1] * f[0][1] -
844 p_normal[k * 4 + 2] * f[0][2];
845 for (i = 0; i < 3; i++) {
846 v_num[result[iii].
patch[k * 3 + i] - 1]++;
847 for (j = 0; j < 3; j++)
848 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j] +=
852 for (k = 0; k < result[iii].
n_vertex; k++) {
854 for (j = 0; j < 3; j++) v_normal[k * 3 + j] /= v_num[k];
859 for (k = 0; k < result[iii].
n_patch; k++) {
860 for (i = 0; i < 3; i++) {
861 if (stat_para[70] == 0) {
862 for (j = 0; j < 3; j++)
865 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
868 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
873 for (j = 0; j < 3; j++)
876 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
879 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
885 result[iii].
color[result[iii].
patch[k * 3 + i] - 1];
888 for (i = 0; i < 3; i++)
889 for (j = 0; j < 3; j++)
891 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
896 starti = (int)((scr_f[0] - scr_area[0]) / xd) + start_x - 1;
897 endi = (int)((scr_f[1] - scr_area[0]) / xd) + start_x + 1;
898 startj = (int)((scr_f[2] - scr_area[2]) / yd) + start_y - 1;
899 endj = (int)((scr_f[3] - scr_area[2]) / yd) + start_y + 1;
900 for (j = startj; j < endj; j++)
901 for (i = starti; i < endi; i++) {
902 x = xd * (i - start_x + 0.5) + scr_area[0];
903 y = yd * (j - start_y + 0.5) + scr_area[2];
912 f_disp, point_o, sr->
view_point_d, inter_point, f_f, v_f,
914 if (intersection == 1) {
918 if (depth < z_buffer[j * sr->
xr + i]) {
919 z_buffer[j * sr->
xr + i] = depth;
922 value = (mincolor + maxcolor) / 2.0;
935 accum_rgba, mincolor, maxcolor,
937 image[(j * sr->
xr + i) * 3] = accum_rgba[0];
938 image[(j * sr->
xr + i) * 3 + 1] = accum_rgba[1];
939 image[(j * sr->
xr + i) * 3 + 2] = accum_rgba[2];
948 for (k = 0; k < result[iii].
n_patch; k++) {
949 for (i = 0; i < 3; i++) {
950 for (j = 0; j < 3; j++)
953 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
955 result[iii].
color[result[iii].
patch[k * 3 + i] - 1];
957 for (mmm = 0; mmm < 3; mmm++) {
959 if (mmm1 == 3) mmm1 = 0;
960 for (j = 0; j < 3; j++) {
961 iso_p[j] = f[mmm][j];
962 iso_p[j + 3] = f[mmm1][j];
969 (int)((pixel_d[0][0] - scr_area[0]) / xd - 0.5) + start_x;
971 (int)((pixel_d[0][1] - scr_area[2]) / yd - 0.5) + start_y;
973 (int)((pixel_d[1][0] - scr_area[0]) / xd + 0.5) + start_x;
975 (int)((pixel_d[1][1] - scr_area[2]) / yd + 0.5) + start_y;
976 if (pixel_i[1][0] != pixel_i[0][0]) {
977 slip_y = (double)(pixel_i[1][1] - pixel_i[0][1]) /
978 (double)(pixel_i[1][0] - pixel_i[0][0]);
979 last_j = pixel_i[0][1];
980 for (i = pixel_i[0][0]; i <= pixel_i[1][0]; i++) {
981 next_j = (int)(pixel_i[0][1] +
982 slip_y * (
double)(i - pixel_i[0][0]));
983 if (last_j <= next_j) {
984 for (j = last_j; j <= next_j; j++) {
985 x = xd * (i - start_x + 0.5) + scr_area[0];
986 y = yd * (j - start_y + 0.5) + scr_area[2];
991 inv_matrix, point_o);
995 inter_point, normal_flag);
996 if (intersection == 1)
1003 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1006 if ((count_dash_num % 4) < 1) {
1009 image[(j * sr->
xr + i) * 3 + 1] =
1011 image[(j * sr->
xr + i) * 3 + 2] =
1013 z_buffer[j * sr->
xr + i] = depth;
1018 image[(j * sr->
xr + i) * 3 + 1] =
1020 image[(j * sr->
xr + i) * 3 + 2] =
1022 z_buffer[j * sr->
xr + i] = depth;
1027 for (j = last_j; j >= next_j; j--) {
1028 x = xd * (i - start_x + 0.5) + scr_area[0];
1029 y = yd * (j - start_y + 0.5) + scr_area[2];
1034 inv_matrix, point_o);
1038 inter_point, normal_flag);
1039 if (intersection == 1)
1046 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1049 if ((count_dash_num % 4) < 1) {
1052 image[(j * sr->
xr + i) * 3 + 1] =
1054 image[(j * sr->
xr + i) * 3 + 2] =
1056 z_buffer[j * sr->
xr + i] = depth;
1061 image[(j * sr->
xr + i) * 3 + 1] =
1063 image[(j * sr->
xr + i) * 3 + 2] =
1065 z_buffer[j * sr->
xr + i] = depth;
1075 if (pixel_i[0][1] <= pixel_i[1][1]) {
1076 for (j = pixel_i[0][1]; j <= pixel_i[1][1]; j++) {
1077 x = xd * (i - start_x + 0.5) + scr_area[0];
1078 y = yd * (j - start_y + 0.5) + scr_area[2];
1088 inter_point, normal_flag);
1089 if (intersection == 1)
1095 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1098 if ((count_dash_num % 4) < 1) {
1101 image[(j * sr->
xr + i) * 3 + 1] =
1103 image[(j * sr->
xr + i) * 3 + 2] =
1105 z_buffer[j * sr->
xr + i] = depth;
1110 image[(j * sr->
xr + i) * 3 + 1] =
1112 image[(j * sr->
xr + i) * 3 + 2] =
1114 z_buffer[j * sr->
xr + i] = depth;
1118 }
else if (pixel_i[0][1] > pixel_i[1][1]) {
1119 for (j = pixel_i[1][1]; j <= pixel_i[0][1]; j++) {
1120 x = xd * (i - start_x + 0.5) + scr_area[0];
1121 y = yd * (j - start_y + 0.5) + scr_area[2];
1131 inter_point, normal_flag);
1132 if (intersection == 1)
1138 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1141 if ((count_dash_num % 4) < 1) {
1144 image[(j * sr->
xr + i) * 3 + 1] =
1146 image[(j * sr->
xr + i) * 3 + 2] =
1148 z_buffer[j * sr->
xr + i] = depth;
1153 image[(j * sr->
xr + i) * 3 + 1] =
1155 image[(j * sr->
xr + i) * 3 + 2] =
1157 z_buffer[j * sr->
xr + i] = depth;
1170 for (k = 0; k < result[iii].
n_patch; k++) {
1171 for (i = 0; i < 3; i++) {
1172 if (stat_para[70] == 0) {
1173 for (j = 0; j < 3; j++)
1176 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
1179 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
1184 for (j = 0; j < 3; j++)
1187 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 +
1190 .
disp[(result[iii].
patch[k * 3 + i] - 1) * 3 +
1195 result[iii].
color[result[iii].
patch[k * 3 + i] - 1];
1197 for (mmm = 0; mmm < 3; mmm++) {
1199 if (mmm1 == 3) mmm1 = 0;
1200 for (j = 0; j < 3; j++) {
1201 iso_p[j] = f_disp[mmm][j];
1202 iso_p[j + 3] = f_disp[mmm1][j];
1207 for (j = 0; j < 2; j++) {
1209 (int)((pixel_d[j][0] - scr_area[0]) / xd - 0.5) + start_x;
1211 (int)((pixel_d[j][1] - scr_area[2]) / yd + 0.5) + start_y;
1213 if (pixel_i[1][0] != pixel_i[0][0]) {
1214 slip_y = (double)(pixel_i[1][1] - pixel_i[0][1]) /
1215 (double)(pixel_i[1][0] - pixel_i[0][0]);
1216 last_j = pixel_i[0][1];
1217 for (i = pixel_i[0][0]; i <= pixel_i[1][0]; i++) {
1218 next_j = (int)(pixel_i[0][1] +
1219 slip_y * (
double)(i - pixel_i[0][0]));
1220 if (last_j <= next_j) {
1221 for (j = last_j; j <= next_j; j++) {
1222 x = xd * (i - start_x + 0.5) + scr_area[0];
1223 y = yd * (j - start_y + 0.5) + scr_area[2];
1228 inv_matrix, point_o);
1232 f_f, inter_point, normal_flag);
1233 if (intersection == 1)
1240 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1243 if ((count_dash_num % 4) < 1) {
1246 image[(j * sr->
xr + i) * 3 + 1] =
1248 image[(j * sr->
xr + i) * 3 + 2] =
1250 z_buffer[j * sr->
xr + i] = depth;
1255 image[(j * sr->
xr + i) * 3 + 1] =
1257 image[(j * sr->
xr + i) * 3 + 2] =
1259 z_buffer[j * sr->
xr + i] = depth;
1264 for (j = last_j; j >= next_j; j--) {
1265 x = xd * (i - start_x + 0.5) + scr_area[0];
1266 y = yd * (j - start_y + 0.5) + scr_area[2];
1271 inv_matrix, point_o);
1275 f_f, inter_point, normal_flag);
1276 if (intersection == 1)
1283 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1286 if ((count_dash_num % 4) < 1) {
1289 image[(j * sr->
xr + i) * 3 + 1] =
1291 image[(j * sr->
xr + i) * 3 + 2] =
1293 z_buffer[j * sr->
xr + i] = depth;
1298 image[(j * sr->
xr + i) * 3 + 1] =
1300 image[(j * sr->
xr + i) * 3 + 2] =
1302 z_buffer[j * sr->
xr + i] = depth;
1312 if (pixel_i[0][1] <= pixel_i[1][1]) {
1313 for (j = pixel_i[0][1]; j <= pixel_i[1][1]; j++) {
1314 x = xd * (i - start_x + 0.5) + scr_area[0];
1315 y = yd * (j - start_y + 0.5) + scr_area[2];
1325 f_f, inter_point, normal_flag);
1326 if (intersection == 1)
1332 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1335 if ((count_dash_num % 4) < 1) {
1338 image[(j * sr->
xr + i) * 3 + 1] =
1340 image[(j * sr->
xr + i) * 3 + 2] =
1342 z_buffer[j * sr->
xr + i] = depth;
1347 image[(j * sr->
xr + i) * 3 + 1] =
1349 image[(j * sr->
xr + i) * 3 + 2] =
1351 z_buffer[j * sr->
xr + i] = depth;
1355 }
else if (pixel_i[0][1] > pixel_i[1][1]) {
1356 for (j = pixel_i[1][1]; j <= pixel_i[0][1]; j++) {
1357 x = xd * (i - start_x + 0.5) + scr_area[0];
1358 y = yd * (j - start_y + 0.5) + scr_area[2];
1368 f_f, inter_point, normal_flag);
1369 if (intersection == 1)
1375 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1378 if ((count_dash_num % 4) < 1) {
1381 image[(j * sr->
xr + i) * 3 + 1] =
1383 image[(j * sr->
xr + i) * 3 + 2] =
1385 z_buffer[j * sr->
xr + i] = depth;
1390 image[(j * sr->
xr + i) * 3 + 1] =
1392 image[(j * sr->
xr + i) * 3 + 2] =
1394 z_buffer[j * sr->
xr + i] = depth;
1408 deltac = (maxcolor - mincolor) / (sf[iii + 1].
isoline_number + 1);
1414 iso_value[m] = mincolor + deltac * (m + 1);
1419 iso_rgb[m * 3] = color_iso[0];
1420 iso_rgb[m * 3 + 1] = color_iso[1];
1421 iso_rgb[m * 3 + 2] = color_iso[2];
1430 (sf[iii + 1].
coef[1] == 0) && (sf[iii + 1].
coef[2] == 0) &&
1431 (sf[iii + 1].
coef[3] == 0) && (sf[iii + 1].
coef[4] == 0) &&
1432 (sf[iii + 1].
coef[5] == 0)) {
1433 f_f[0] = sf[iii + 1].
coef[6];
1434 f_f[1] = sf[iii + 1].
coef[7];
1435 f_f[2] = sf[iii + 1].
coef[8];
1436 f_f[3] = sf[iii + 1].
coef[9];
1437 norm = sqrt(f_f[0] * f_f[0] + f_f[1] * f_f[1] + f_f[2] * f_f[2]);
1438 for (m = 0; m < 4; m++) f_f[m] /= norm;
1443 v_normal = (
double *)
HECMW_calloc(result[iii].n_vertex * 3,
1445 p_normal = (
double *)
HECMW_calloc(result[iii].n_patch * 4,
1447 v_num = (
int *)
HECMW_calloc(result[iii].n_vertex,
sizeof(
int));
1448 if ((v_normal ==
NULL) || (v_num ==
NULL) || (p_normal ==
NULL))
1450 for (k = 0; k < result[iii].
n_vertex; k++) v_num[k] = 0;
1451 for (k = 0; k < result[iii].
n_vertex * 3; k++) v_normal[k] = 0.0;
1452 for (k = 0; k < result[iii].
n_patch; k++) {
1453 for (i = 0; i < 3; i++) {
1454 for (j = 0; j < 3; j++)
1457 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
1459 p_normal[k * 4 + 0] =
1460 (f[1][1] - f[0][1]) * (f[2][2] - f[0][2]) -
1461 (f[2][1] - f[0][1]) * (f[1][2] - f[0][2]);
1462 p_normal[k * 4 + 1] =
1463 -(f[1][0] - f[0][0]) * (f[2][2] - f[0][2]) +
1464 (f[2][0] - f[0][0]) * (f[1][2] - f[0][2]);
1465 p_normal[k * 4 + 2] =
1466 (f[1][0] - f[0][0]) * (f[2][1] - f[0][1]) -
1467 (f[2][0] - f[0][0]) * (f[1][1] - f[0][1]);
1468 norm = sqrt(p_normal[k * 4 + 0] * p_normal[k * 4 + 0] +
1469 p_normal[k * 4 + 1] * p_normal[k * 4 + 1] +
1470 p_normal[k * 4 + 2] * p_normal[k * 4 + 2]);
1472 for (j = 0; j < 3; j++) p_normal[k * 4 + j] /= norm;
1474 p_normal[k * 4 + 3] = -p_normal[k * 4 + 0] * f[0][0] -
1475 p_normal[k * 4 + 1] * f[0][1] -
1476 p_normal[k * 4 + 2] * f[0][2];
1477 for (i = 0; i < 3; i++) {
1478 v_num[result[iii].
patch[k * 3 + i] - 1]++;
1479 for (j = 0; j < 3; j++)
1480 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j] +=
1481 p_normal[k * 4 + j];
1484 for (k = 0; k < result[iii].
n_vertex; k++) {
1485 if (v_num[k] != 0) {
1486 for (j = 0; j < 3; j++) v_normal[k * 3 + j] /= v_num[k];
1492 for (k = 0; k < result[iii].
n_patch; k++) {
1493 for (i = 0; i < 3; i++) {
1494 for (j = 0; j < 3; j++)
1497 .vertex[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
1498 c_value[i] = result[iii].
color[result[iii].
patch[k * 3 + i] - 1];
1502 for (i = 0; i < 3; i++)
1503 for (j = 0; j < 3; j++)
1505 v_normal[(result[iii].patch[k * 3 + i] - 1) * 3 + j];
1510 starti = (int)((scr_f[0] - scr_area[0]) / xd) + start_x - 1;
1511 endi = (int)((scr_f[1] - scr_area[0]) / xd) + start_x + 1;
1512 startj = (int)((scr_f[2] - scr_area[2]) / yd) + start_y - 1;
1513 endj = (int)((scr_f[3] - scr_area[2]) / yd) + start_y + 1;
1514 for (j = startj; j < endj; j++)
1515 for (i = starti; i < endi; i++) {
1516 x = xd * (i - start_x + 0.5) + scr_area[0];
1517 y = yd * (j - start_y + 0.5) + scr_area[2];
1528 if (intersection == 1) {
1532 if (depth < z_buffer[j * sr->
xr + i]) {
1533 z_buffer[j * sr->
xr + i] = depth;
1536 (int)((value - mincolor) / (maxcolor - mincolor) *
1538 value = (maxcolor - mincolor) /
1549 accum_rgba, mincolor, maxcolor,
1551 image[(j * sr->
xr + i) * 3] = accum_rgba[0];
1552 image[(j * sr->
xr + i) * 3 + 1] = accum_rgba[1];
1553 image[(j * sr->
xr + i) * 3 + 2] = accum_rgba[2];
1568 for (j = 0; j < 2; j++) {
1570 (int)((pixel_d[j][0] - scr_area[0]) / xd - 0.5) +
1573 (int)((pixel_d[j][1] - scr_area[2]) / yd + 0.5) +
1576 if (pixel_i[1][0] != pixel_i[0][0]) {
1577 slip_y = (double)(pixel_i[1][1] - pixel_i[0][1]) /
1578 (double)(pixel_i[1][0] - pixel_i[0][0]);
1579 last_j = pixel_i[0][1];
1580 for (i = pixel_i[0][0]; i <= pixel_i[1][0]; i++) {
1581 next_j = (int)(pixel_i[0][1] +
1582 slip_y * (
double)(i - pixel_i[0][0]));
1583 if (last_j <= next_j) {
1584 for (j = last_j; j <= next_j; j++) {
1585 x = xd * (i - start_x + 0.5) + scr_area[0];
1586 y = yd * (j - start_y + 0.5) + scr_area[2];
1591 inv_matrix, point_o);
1595 f_f, inter_point, normal_flag);
1596 if (intersection == 1)
1603 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1604 image[(j * sr->
xr + i) * 3] = iso_rgb[m * 3];
1605 image[(j * sr->
xr + i) * 3 + 1] =
1607 image[(j * sr->
xr + i) * 3 + 2] =
1609 z_buffer[j * sr->
xr + i] = depth;
1613 for (j = last_j; j >= next_j; j--) {
1614 x = xd * (i - start_x + 0.5) + scr_area[0];
1615 y = yd * (j - start_y + 0.5) + scr_area[2];
1620 inv_matrix, point_o);
1624 f_f, inter_point, normal_flag);
1625 if (intersection == 1)
1632 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1633 image[(j * sr->
xr + i) * 3] = iso_rgb[m * 3];
1634 image[(j * sr->
xr + i) * 3 + 1] =
1636 image[(j * sr->
xr + i) * 3 + 2] =
1638 z_buffer[j * sr->
xr + i] = depth;
1647 if (pixel_i[0][1] <= pixel_i[1][1]) {
1648 for (j = pixel_i[0][1]; j <= pixel_i[1][1]; j++) {
1649 x = xd * (i - start_x + 0.5) + scr_area[0];
1650 y = yd * (j - start_y + 0.5) + scr_area[2];
1656 inv_matrix, point_o);
1660 inter_point, normal_flag);
1661 if (intersection == 1)
1668 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1669 image[(j * sr->
xr + i) * 3] = iso_rgb[m * 3];
1670 image[(j * sr->
xr + i) * 3 + 1] = iso_rgb[m * 3 + 1];
1671 image[(j * sr->
xr + i) * 3 + 2] = iso_rgb[m * 3 + 2];
1672 z_buffer[j * sr->
xr + i] = depth;
1675 }
else if (pixel_i[0][1] > pixel_i[1][1]) {
1676 for (j = pixel_i[1][1]; j <= pixel_i[0][1]; j++) {
1677 x = xd * (i - start_x + 0.5) + scr_area[0];
1678 y = yd * (j - start_y + 0.5) + scr_area[2];
1684 inv_matrix, point_o);
1688 inter_point, normal_flag);
1689 if (intersection == 1)
1696 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
1697 image[(j * sr->
xr + i) * 3] = iso_rgb[m * 3];
1698 image[(j * sr->
xr + i) * 3 + 1] = iso_rgb[m * 3 + 1];
1699 image[(j * sr->
xr + i) * 3 + 2] = iso_rgb[m * 3 + 2];
1700 z_buffer[j * sr->
xr + i] = depth;
1718 fprintf(stderr,
"Finish the computing on each PE\n");
1729 pix_num = (int)(sr->
xr * sr->
yr / pesize);
1730 pix0_num = sr->
xr * sr->
yr - pix_num * (pesize - 1);
1731 if (mynode == 0) pixn = pix0_num;
1732 if (mynode != 0) pixn = pix_num;
1733 n_subimage = (
double *)
HECMW_calloc(pesize * pixn * 3,
sizeof(
double));
1734 n_subopa = (
double *)
HECMW_calloc(pesize * pixn,
sizeof(
double));
1735 if ((n_subimage ==
NULL) || (n_subopa ==
NULL))
1738 for (j = 0; j < pixn * 3; j++) {
1740 n_subimage[j] =
image[j];
1741 else if (mynode != 0)
1742 n_subimage[mynode * pixn * 3 + j] =
1743 image[pix0_num * 3 + (mynode - 1) * pix_num * 3 + j];
1746 for (j = 0; j < pixn; j++) n_subopa[j] = z_buffer[j];
1747 else if (mynode != 0)
1748 for (j = 0; j < pixn; j++)
1749 n_subopa[mynode * pixn + j] =
1750 z_buffer[pix0_num + (mynode - 1) * pix_num + j];
1752 subimage = (
double *)
HECMW_calloc(pixn * 3,
sizeof(
double));
1754 if ((subimage ==
NULL) || (subopa ==
NULL))
1758 for (i = 0; i < pesize; i++) {
1760 for (k = 0; k < pesize; k++) {
1765 subopa1 = (
double *)
HECMW_calloc(pix0_num,
sizeof(
double));
1766 }
else if (k != 0) {
1769 subopa1 = (
double *)
HECMW_calloc(pix_num,
sizeof(
double));
1772 if ((subimage1 ==
NULL) || (subopa1 ==
NULL))
1775 for (j = 0; j < pix0_num * 3; j++) subimage1[j] =
image[j];
1776 for (j = 0; j < pix0_num; j++) subopa1[j] = z_buffer[j];
1777 }
else if (k != 0) {
1778 for (j = 0; j < pix_num * 3; j++)
1780 image[pix0_num * 3 + (k - 1) * pix_num * 3 + j];
1781 for (j = 0; j < pix_num; j++)
1782 subopa1[j] = z_buffer[pix0_num + (k - 1) * pix_num + j];
1788 }
else if (k != 0) {
1804 for (j = 0; j < pixn * 3; j++)
1805 n_subimage[i * pixn * 3 + j] = subimage[j];
1806 for (j = 0; j < pixn; j++) n_subopa[i * pixn + j] = subopa[j];
1827 for (j = 0; j < pix0_num * 3; j++)
image[j] = subimage[j];
1828 for (j = 0; j < pix0_num; j++) z_buffer[j] = subopa[j];
1829 for (i = 1; i < pesize; i++) {
1835 for (j = 0; j < pix_num * 3; j++)
1836 image[pix0_num * 3 + (i - 1) * pix_num * 3 + j] = subimage[j];
1837 for (j = 0; j < pix_num; j++)
1838 z_buffer[pix0_num + (i - 1) * pix_num + j] = subopa[j];
1842 "Drawing boundary line: trange=%lf %lf %lf %lf %lf %lf\n",
1843 trange[0], trange[1], trange[2], trange[3], trange[4],
1845 for (m1 = 0; m1 < 6; m1++)
1846 for (m2 = 0; m2 < 4; m2++) {
1847 if (((m1 == 2) && (m2 == 0)) || ((m1 == 4) && (m2 == 1))) {
1848 iso_p[0] = trange[0];
1849 iso_p[1] = trange[2];
1850 iso_p[2] = trange[4];
1851 iso_p[3] = trange[1];
1852 iso_p[4] = trange[2];
1853 iso_p[5] = trange[4];
1854 }
else if (((m1 == 0) && (m2 == 0)) ||
1855 ((m1 == 4) && (m2 == 0))) {
1856 iso_p[0] = trange[0];
1857 iso_p[1] = trange[2];
1858 iso_p[2] = trange[4];
1859 iso_p[3] = trange[0];
1860 iso_p[4] = trange[3];
1861 iso_p[5] = trange[4];
1862 }
else if (((m1 == 0) && (m2 == 1)) ||
1863 ((m1 == 2) && (m2 == 3))) {
1864 iso_p[0] = trange[0];
1865 iso_p[1] = trange[2];
1866 iso_p[2] = trange[4];
1867 iso_p[3] = trange[0];
1868 iso_p[4] = trange[2];
1869 iso_p[5] = trange[5];
1870 }
else if (((m1 == 1) && (m2 == 0)) ||
1871 ((m1 == 4) && (m2 == 2))) {
1872 iso_p[0] = trange[1];
1873 iso_p[1] = trange[2];
1874 iso_p[2] = trange[4];
1875 iso_p[3] = trange[1];
1876 iso_p[4] = trange[3];
1877 iso_p[5] = trange[4];
1878 }
else if (((m1 == 1) && (m2 == 1)) ||
1879 ((m1 == 2) && (m2 == 1))) {
1880 iso_p[0] = trange[1];
1881 iso_p[1] = trange[2];
1882 iso_p[2] = trange[4];
1883 iso_p[3] = trange[1];
1884 iso_p[4] = trange[2];
1885 iso_p[5] = trange[5];
1886 }
else if (((m1 == 2) && (m2 == 2)) ||
1887 ((m1 == 5) && (m2 == 1))) {
1888 iso_p[0] = trange[1];
1889 iso_p[1] = trange[2];
1890 iso_p[2] = trange[5];
1891 iso_p[3] = trange[0];
1892 iso_p[4] = trange[2];
1893 iso_p[5] = trange[5];
1894 }
else if (((m1 == 1) && (m2 == 2)) ||
1895 ((m1 == 5) && (m2 == 2))) {
1896 iso_p[0] = trange[1];
1897 iso_p[1] = trange[2];
1898 iso_p[2] = trange[5];
1899 iso_p[3] = trange[1];
1900 iso_p[4] = trange[3];
1901 iso_p[5] = trange[5];
1902 }
else if (((m1 == 0) && (m2 == 2)) ||
1903 ((m1 == 5) && (m2 == 0))) {
1904 iso_p[0] = trange[0];
1905 iso_p[1] = trange[2];
1906 iso_p[2] = trange[5];
1907 iso_p[3] = trange[0];
1908 iso_p[4] = trange[3];
1909 iso_p[5] = trange[5];
1910 }
else if (((m1 == 0) && (m2 == 3)) ||
1911 ((m1 == 3) && (m2 == 0))) {
1912 iso_p[0] = trange[0];
1913 iso_p[1] = trange[3];
1914 iso_p[2] = trange[4];
1915 iso_p[3] = trange[0];
1916 iso_p[4] = trange[3];
1917 iso_p[5] = trange[5];
1918 }
else if (((m1 == 3) && (m2 == 1)) ||
1919 ((m1 == 4) && (m2 == 3))) {
1920 iso_p[0] = trange[0];
1921 iso_p[1] = trange[3];
1922 iso_p[2] = trange[4];
1923 iso_p[3] = trange[1];
1924 iso_p[4] = trange[3];
1925 iso_p[5] = trange[4];
1926 }
else if (((m1 == 1) && (m2 == 3)) ||
1927 ((m1 == 3) && (m2 == 2))) {
1928 iso_p[0] = trange[1];
1929 iso_p[1] = trange[3];
1930 iso_p[2] = trange[4];
1931 iso_p[3] = trange[1];
1932 iso_p[4] = trange[3];
1933 iso_p[5] = trange[5];
1934 }
else if (((m1 == 3) && (m2 == 3)) ||
1935 ((m1 == 5) && (m2 == 3))) {
1936 iso_p[0] = trange[1];
1937 iso_p[1] = trange[3];
1938 iso_p[2] = trange[5];
1939 iso_p[3] = trange[0];
1940 iso_p[4] = trange[3];
1941 iso_p[5] = trange[5];
1945 f[0][0] = trange[0];
1946 f[0][1] = trange[2];
1947 f[0][2] = trange[4];
1948 f[1][0] = trange[0];
1949 f[1][1] = trange[3];
1950 f[1][2] = trange[4];
1951 f[2][0] = trange[0];
1952 f[2][1] = trange[3];
1953 f[2][2] = trange[5];
1954 }
else if (m1 == 1) {
1955 f[0][0] = trange[1];
1956 f[0][1] = trange[2];
1957 f[0][2] = trange[4];
1958 f[1][0] = trange[1];
1959 f[1][1] = trange[2];
1960 f[1][2] = trange[5];
1961 f[2][0] = trange[1];
1962 f[2][1] = trange[3];
1963 f[2][2] = trange[4];
1964 }
else if (m1 == 2) {
1965 f[0][0] = trange[0];
1966 f[0][1] = trange[2];
1967 f[0][2] = trange[4];
1968 f[1][0] = trange[0];
1969 f[1][1] = trange[2];
1970 f[1][2] = trange[5];
1971 f[2][0] = trange[1];
1972 f[2][1] = trange[2];
1973 f[2][2] = trange[5];
1974 }
else if (m1 == 3) {
1975 f[0][0] = trange[0];
1976 f[0][1] = trange[3];
1977 f[0][2] = trange[4];
1978 f[1][0] = trange[1];
1979 f[1][1] = trange[3];
1980 f[1][2] = trange[4];
1981 f[2][0] = trange[1];
1982 f[2][1] = trange[3];
1983 f[2][2] = trange[5];
1987 f[0][0] = trange[0];
1988 f[0][1] = trange[2];
1989 f[0][2] = trange[4];
1990 f[1][0] = trange[1];
1991 f[1][1] = trange[2];
1992 f[1][2] = trange[4];
1993 f[2][0] = trange[0];
1994 f[2][1] = trange[3];
1995 f[2][2] = trange[4];
1996 }
else if (m1 == 5) {
1997 f[0][0] = trange[0];
1998 f[0][1] = trange[3];
1999 f[0][2] = trange[5];
2000 f[1][0] = trange[1];
2001 f[1][1] = trange[3];
2002 f[1][2] = trange[5];
2003 f[2][0] = trange[1];
2004 f[2][1] = trange[2];
2005 f[2][2] = trange[5];
2010 for (j = 0; j < 2; j++) {
2012 (int)((pixel_d[j][0] - scr_area[0]) / xd - 0.5) + start_x;
2014 (int)((pixel_d[j][1] - scr_area[2]) / yd + 0.5) + start_y;
2016 if (pixel_i[1][0] != pixel_i[0][0]) {
2017 slip_y = (double)(pixel_i[1][1] - pixel_i[0][1]) /
2018 (double)(pixel_i[1][0] - pixel_i[0][0]);
2019 last_j = pixel_i[0][1];
2020 for (i = pixel_i[0][0]; i <= pixel_i[1][0]; i++) {
2021 next_j = (int)(pixel_i[0][1] +
2022 slip_y * (
double)(i - pixel_i[0][0]));
2023 if (last_j <= next_j) {
2024 for (j = last_j; j <= next_j; j++) {
2025 x = xd * (i - start_x + 0.5) + scr_area[0];
2026 y = yd * (j - start_y + 0.5) + scr_area[2];
2031 inv_matrix, point_o);
2034 if (intersection == 1)
2041 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
2045 z_buffer[j * sr->
xr + i] = depth;
2049 for (j = last_j; j >= next_j; j--) {
2050 x = xd * (i - start_x + 0.5) + scr_area[0];
2051 y = yd * (j - start_y + 0.5) + scr_area[2];
2056 inv_matrix, point_o);
2059 if (intersection == 1)
2066 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
2070 z_buffer[j * sr->
xr + i] = depth;
2079 if (pixel_i[0][1] <= pixel_i[1][1]) {
2080 for (j = pixel_i[0][1]; j <= pixel_i[1][1]; j++) {
2081 x = xd * (i - start_x + 0.5) + scr_area[0];
2082 y = yd * (j - start_y + 0.5) + scr_area[2];
2091 if (intersection == 1)
2097 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
2101 z_buffer[j * sr->
xr + i] = depth;
2104 }
else if (pixel_i[0][1] > pixel_i[1][1]) {
2105 for (j = pixel_i[1][1]; j <= pixel_i[0][1]; j++) {
2106 x = xd * (i - start_x + 0.5) + scr_area[0];
2107 y = yd * (j - start_y + 0.5) + scr_area[2];
2116 if (intersection == 1)
2122 if (depth <= z_buffer[j * sr->
xr + i] +
EPSILON) {
2126 z_buffer[j * sr->
xr + i] = depth;
2138 fprintf(stderr,
" Finish combining \n");
2167 tmincolor, tmaxcolor, org_mincolor, org_maxcolor,
image);
2174 tmincolor, tmaxcolor, tmincolor, tmaxcolor,
image);
2181 timestep, len_step,
image);
2204 sprintf(fname,
"%s.%d.bmp", outfile, ii);
2206 sprintf(fname,
"%s.0%d.bmp", outfile, ii);
2210 sprintf(fname,
"%s.%d.%d.bmp", outfile, ii, jjj);
2212 sprintf(fname,
"%s.%d.0%d.bmp", outfile, ii, jjj);
2216 sprintf(fname,
"%s.%d.bmp", outfile, jjj);
2218 sprintf(fname,
"%s.0%d.bmp", outfile, jjj);
2222 sprintf(fname,
"%s.bmp", outfile);
2224 outfp = fopen(fname,
"wb");
2228 "ERROR: HEC-MW-VIS-E0009: Cannot open output file");
2231 #ifdef CONVERSE_ORDER
2235 #ifdef CONVERSE_ORDER
2240 #ifdef CONVERSE_ORDER
2245 #ifdef CONVERSE_ORDER
2250 #ifdef CONVERSE_ORDER
2255 #ifdef CONVERSE_ORDER
2260 #ifdef CONVERSE_ORDER
2265 #ifdef CONVERSE_ORDER
2270 #ifdef CONVERSE_ORDER
2275 #ifdef CONVERSE_ORDER
2280 #ifdef CONVERSE_ORDER
2285 #ifdef CONVERSE_ORDER
2290 #ifdef CONVERSE_ORDER
2295 #ifdef CONVERSE_ORDER
2300 #ifdef CONVERSE_ORDER
2306 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, outfp);
2307 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, outfp);
2308 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, outfp);
2309 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, outfp);
2310 fwrite(&info, 40, 1, outfp);
2311 for (j = 0; j < sr->
yr; j++)
2312 for (i = sr->
xr - 1; i >= 0; i--) {
2313 if ((
image[(j * sr->
xr + i) * 3] < 0.1) &&
2314 (
image[(j * sr->
xr + i) * 3 + 1] < 0.1) &&
2315 (
image[(j * sr->
xr + i) * 3 + 2] < 0.1)) {
2320 ri = (int)(
image[(j * sr->
xr + i) * 3] * 256);
2321 gi = (int)(
image[(j * sr->
xr + i) * 3 + 1] * 256);
2322 bi = (int)(
image[(j * sr->
xr + i) * 3 + 2] * 256);
2325 if (ri > 255) ri = 255;
2327 if (gi > 255) gi = 255;
2329 if (bi > 255) bi = 255;