18 double *mivalue,
double *mavalue,
19 Result *result,
int mynode,
int pesize,
22 double delta, value, color[3];
23 int count[500], t_count[500], max_number, max_length, start_x, end_x, start_y,
29 unsigned char r, g, b;
33 int start_xs, start_ys;
38 for (i = 0; i <
data->nn_component; i++) {
39 if (color_list[i] == 1) {
41 delta = (mavalue[i] - mivalue[i]) / 500.0;
45 for (i = 0; i < 500; i++) {
51 if (sf[ii].display_method != 4) {
52 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
53 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
63 for (i = 0; i < 500; i++) t_count[i] = count[i];
68 fp = fopen(
"histogram.bmp",
"wb");
71 graph = (
double *)
HECMW_calloc(400 * 530 * 3,
sizeof(
double));
73 for (i = 0; i < 400 * 530 * 3; i++) graph[i] = 0.0;
75 for (i = 0; i < 500; i++) {
76 if (t_count[i] > max_number) max_number = t_count[i];
80 "ERROR: HEC-MW-VIS-E2003:Cannot generate histogram graph, the number "
82 max_length = (int)(400 - 30 - 5 - 45 * 1.5);
83 start_x = (int)(5 + 45 * 1.5 + 15);
85 for (j = 0; j < 500; j++) {
87 (int)((
double)t_count[j] * (double)max_length / (
double)max_number +
92 for (i = start_x; i < end_x; i++) {
93 graph[((j + 15) * 400 + i) * 3] = color[0];
94 graph[((j + 15) * 400 + i) * 3 + 1] = color[1];
95 graph[((j + 15) * 400 + i) * 3 + 2] = color[2];
101 for (k = 0; k < 11; k++) {
102 value = mivalue[color_id] +
103 (mavalue[color_id] - mivalue[color_id]) / 10.0 * k;
104 start_ys = start_y + (int)((
double)500.0 / 10 * k) - (
int)7 / 2;
106 sprintf(buf,
"%3.2E", value);
107 for (m = 0; m < 9; m++) {
109 for (j = 0; j < 7; j++)
110 for (i = 0; i < 7; i++) {
111 graph[((start_ys + j) * 400 + start_xs - i) * 3] =
112 (double)output7[6 - j][i];
113 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 1] =
114 (double)output7[6 - j][i];
115 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 2] =
116 (double)output7[6 - j][i];
119 if ((value >= 0) && (m == 0)) start_xs -= 7;
121 if ((k != 0) && (k != 10)) {
122 start_ys += (int)7 / 2;
124 for (i = start_x; i < start_x + 5; i++)
125 for (j = 0; j < 3; j++) graph[(start_ys * 400 + i) * 3 + j] = 1.0;
128 header.
bfSize = 54 + 3 * 400 * 530;
129 #ifdef CONVERSE_ORDER
133 #ifdef CONVERSE_ORDER
138 #ifdef CONVERSE_ORDER
143 #ifdef CONVERSE_ORDER
148 #ifdef CONVERSE_ORDER
153 #ifdef CONVERSE_ORDER
158 #ifdef CONVERSE_ORDER
163 #ifdef CONVERSE_ORDER
168 #ifdef CONVERSE_ORDER
173 #ifdef CONVERSE_ORDER
178 #ifdef CONVERSE_ORDER
183 #ifdef CONVERSE_ORDER
188 #ifdef CONVERSE_ORDER
193 #ifdef CONVERSE_ORDER
198 #ifdef CONVERSE_ORDER
204 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, fp);
205 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, fp);
206 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, fp);
207 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, fp);
208 fwrite(&info, 40, 1, fp);
209 for (j = 0; j < 530; j++)
210 for (i = 400 - 1; i >= 0; i--) {
211 ri = (int)(graph[(j * 400 + i) * 3] * 256);
212 gi = (int)(graph[(j * 400 + i) * 3 + 1] * 256);
213 bi = (int)(graph[(j * 400 + i) * 3 + 2] * 256);
215 if (ri > 255) ri = 255;
217 if (gi > 255) gi = 255;
219 if (bi > 255) bi = 255;
236 double *mivalue,
double *mavalue,
237 Result *result,
int mynode,
int pesize,
238 HECMW_Comm VIS_COMM,
double *interval_point) {
241 int count[500], t_count[500], tmp_count[500], sum_count, interv_count, sum,
245 for (i = 0; i <
data->nn_component; i++) {
246 if (color_list[i] == 1) {
248 delta = (mavalue[i] - mivalue[i]) / 500.0;
252 for (i = 0; i < 500; i++) {
258 if (sf[ii].display_method != 4) {
259 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
260 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
262 if (j > 499) j = 499;
270 for (i = 0; i < 500; i++) t_count[i] = count[i];
273 for (i = 0; i < 500; i++) {
274 sum_count += t_count[i];
275 tmp_count[i] = t_count[i];
277 interv_count = (int)sum_count / 10;
279 interval_point[0] = mivalue[color_id];
280 interval_point[1] = 0.0;
281 for (i = 1; i < 10; i++) {
282 interval_point[i * 2 + 1] = (double)i / 10.0;
285 while ((j < 500) && (sum < interv_count)) {
290 interval_point[i * 2] =
293 (1.0 - (
double)(sum - interv_count) / (
double)tmp_count[j])) *
294 (mavalue[color_id] - mivalue[color_id]) +
296 t_count[j] = sum - interv_count;
299 interval_point[20] = mavalue[color_id];
300 interval_point[21] = 1.0;
301 fprintf(stderr,
"The automatic color mapping set is :\n");
302 for (i = 0; i < 11; i++)
303 fprintf(stderr,
"%lf %lf \n", interval_point[i * 2],
304 interval_point[i * 2 + 1]);
310 double *mavalue,
Result *result,
int mynode,
314 int count[100], t_count[100];
317 for (i = 0; i <
data->nn_component; i++) {
318 if (color_list[i] == 1) {
320 delta = (mavalue[i] - mivalue[i]) / 100.0;
324 for (i = 0; i < 100; i++) {
330 if (sf[ii].display_method != 4) {
331 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
332 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
342 for (i = 0; i < 100; i++) t_count[i] = count[i];
346 fp = fopen(
"histogram.file",
"w");
349 for (i = 0; i < 100; i++)
350 fprintf(fp,
"%d %d -----(%lf --- %lf)\n", i, t_count[i],
351 mivalue[color_id] + i * delta,
352 mivalue[color_id] + (i + 1) * delta);
361 for (i = 0; i < 3; i++) {
362 range[i * 2] = 1.0E17;
363 range[i * 2 + 1] = -1.0E17;
381 for (i = 0; i < 3; i++) {
382 range[i * 2] = 1.0E17;
383 range[i * 2 + 1] = -1.0E17;
387 for (i = 0; i < result[ii].
n_vertex; i++) {
388 for (j = 0; j < 3; j++) {
389 if (result[ii].vertex[i * 3 + j] < range[j * 2])
390 range[j * 2] = result[ii].
vertex[i * 3 + j];
391 if (result[ii].vertex[i * 3 + j] > range[j * 2 + 1])
392 range[j * 2 + 1] = result[ii].
vertex[i * 3 + j];
405 if (sf[ii + 1].deform_display_on == 1) {
406 for (i = 0; i < result[ii].
n_vertex; i++) {
407 for (j = 0; j < 3; j++) {
408 new_v = result[ii].
vertex[i * 3 + j] +
410 if (new_v < range[j * 2]) range[j * 2] = new_v;
411 if (new_v > range[j * 2 + 1]) range[j * 2 + 1] = new_v;
420 double range_y,
double range_z,
424 double max_disp, t_max_disp, tmp[3], disp, max_range, s_scale;
426 int tn_component, d_base;
430 for (i = 0; i <
data->nn_component; i++) tn_component +=
data->nn_dof[i];
432 for (i = 0; i < sf[ii].
disp_comp; i++) d_base +=
data->nn_dof[i];
437 for (j = 0; j < 3; j++)
438 tmp[j] =
data->node_val_item[i * tn_component + d_base + j];
439 disp = sqrt(tmp[0] * tmp[0] + tmp[1] * tmp[1] + tmp[2] * tmp[2]);
440 if (disp > max_disp) max_disp = disp;
447 t_max_disp = max_disp;
449 max_range = sqrt(range_x * range_x + range_y * range_y + range_z * range_z);
450 if (fabs(t_max_disp) <
EPSILON * 0.0001)
452 s_scale = max_range * 0.1 / t_max_disp;
453 if (sf[ii].disp_scale < 0.0)
458 fprintf(stderr,
"The real deformation scale = %lf\n", sf[ii].disp_scale);