8 #include "hecmw_font_texture.h"
12 double *mincolor,
double *maxcolor) {
16 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
17 if (empty_flag[i] == 1) {
19 if (value < *mincolor) *mincolor = value;
20 if (value > *maxcolor) *maxcolor = value;
26 int *empty_flag,
int nx,
int ny,
int nz,
28 int color_system_type) {
30 double delta, value, color[3];
31 int count[500], t_count[500], max_number, max_length, start_x, end_x, start_y,
37 unsigned char r, g, b;
41 int start_xs, start_ys;
45 delta = (tmaxcolor - tmincolor) / 500.0;
46 for (i = 0; i < 500; i++) {
50 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
51 if (empty_flag[i] == 1) {
52 j = (int)((var[i] - tmincolor) / delta);
61 for (i = 0; i < 500; i++) t_count[i] = count[i];
64 fp = fopen(
"histogram.bmp",
"wb");
66 fprintf(stderr,
"Cannot generate the histogram output file\n");
69 graph = (
double *)
HECMW_calloc(400 * 530 * 3,
sizeof(
double));
71 fprintf(stderr,
"There is no enough memory for graph\n");
74 for (i = 0; i < 400 * 530 * 3; i++) graph[i] = 0.0;
76 for (i = 0; i < 500; i++) {
77 if (t_count[i] > max_number) max_number = t_count[i];
79 if (max_number == 0) {
81 "Cannot generate histogram graph, the number of voxels is 0\n");
84 max_length = (int)(400 - 30 - 5 - 45 * 1.5);
85 start_x = (int)(5 + 45 * 1.5 + 15);
87 for (j = 0; j < 500; j++) {
89 (int)((
double)t_count[j] * (double)max_length / (
double)max_number +
94 for (i = start_x; i < end_x; i++) {
95 graph[((j + 15) * 400 + i) * 3] = color[0];
96 graph[((j + 15) * 400 + i) * 3 + 1] = color[1];
97 graph[((j + 15) * 400 + i) * 3 + 2] = color[2];
103 for (k = 0; k < 11; k++) {
104 value = tmincolor + (tmaxcolor - tmincolor) / 10.0 * k;
105 start_ys = start_y + (int)((
double)500.0 / 10 * k) - (
int)7 / 2;
107 sprintf(buf,
"%3.2E", value);
108 for (m = 0; m < 9; m++) {
110 for (j = 0; j < 7; j++)
111 for (i = 0; i < 7; i++) {
112 graph[((start_ys + j) * 400 + start_xs - i) * 3] =
113 (double)output7[6 - j][i];
114 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 1] =
115 (double)output7[6 - j][i];
116 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 2] =
117 (double)output7[6 - j][i];
120 if ((value >= 0) && (m == 0)) start_xs -= 7;
122 if ((k != 0) && (k != 10)) {
123 start_ys += (int)7 / 2;
125 for (i = start_x; i < start_x + 5; i++)
126 for (j = 0; j < 3; j++) graph[(start_ys * 400 + i) * 3 + j] = 1.0;
129 header.
bfSize = 54 + 3 * 400 * 530;
130 #ifdef CONVERSE_ORDER
134 #ifdef CONVERSE_ORDER
139 #ifdef CONVERSE_ORDER
144 #ifdef CONVERSE_ORDER
149 #ifdef CONVERSE_ORDER
154 #ifdef CONVERSE_ORDER
159 #ifdef CONVERSE_ORDER
164 #ifdef CONVERSE_ORDER
169 #ifdef CONVERSE_ORDER
174 #ifdef CONVERSE_ORDER
179 #ifdef CONVERSE_ORDER
184 #ifdef CONVERSE_ORDER
189 #ifdef CONVERSE_ORDER
194 #ifdef CONVERSE_ORDER
199 #ifdef CONVERSE_ORDER
205 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, fp);
206 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, fp);
207 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, fp);
208 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, fp);
209 fwrite(&info, 40, 1, fp);
210 for (j = 0; j < 530; j++)
211 for (i = 400 - 1; i >= 0; i--) {
212 ri = (int)(graph[(j * 400 + i) * 3] * 256);
213 gi = (int)(graph[(j * 400 + i) * 3 + 1] * 256);
214 bi = (int)(graph[(j * 400 + i) * 3 + 2] * 256);
216 if (ri > 255) ri = 255;
218 if (gi > 255) gi = 255;
220 if (bi > 255) bi = 255;
236 int *empty_flag,
int nx,
int ny,
int nz,
238 double *interval_point) {
241 int count[500], t_count[500], tmp_count[500], sum_count, interv_count, sum,
243 delta = (tmaxcolor - tmincolor) / 500.0;
244 for (i = 0; i < 500; i++) {
248 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
249 if (empty_flag[i] == 1) {
250 j = (int)((var[i] - tmincolor) / delta);
252 if (j > 499) j = 499;
259 for (i = 0; i < 500; i++) t_count[i] = count[i];
262 for (i = 0; i < 500; i++) {
263 sum_count += t_count[i];
264 tmp_count[i] = t_count[i];
266 interv_count = (int)sum_count / 10;
268 interval_point[0] = tmincolor;
269 interval_point[1] = 0.0;
270 for (i = 1; i < 10; i++) {
271 interval_point[i * 2 + 1] = (double)i / 10.0;
274 while ((j < 500) && (sum < interv_count)) {
279 interval_point[i * 2] =
282 (1.0 - (
double)(sum - interv_count) / (
double)tmp_count[j])) *
283 (tmaxcolor - tmincolor) +
285 t_count[j] = sum - interv_count;
288 interval_point[20] = tmaxcolor;
289 interval_point[21] = 1.0;
290 fprintf(stderr,
"The automatic color mapping set is :\n");
291 for (i = 0; i < 11; i++)
292 fprintf(stderr,
"%lf %lf \n", interval_point[i * 2],
293 interval_point[i * 2 + 1]);
298 int *empty_flag,
int nx,
int ny,
int nz,
int mynode,
302 int count[100], t_count[100];
305 delta = (tmaxcolor - tmincolor) / 100.0;
306 for (i = 0; i < 100; i++) {
310 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
311 if (empty_flag[i] == 1) {
312 j = (int)((var[i] - tmincolor) / delta);
321 for (i = 0; i < 100; i++) t_count[i] = count[i];
324 fp = fopen(
"histogram.file",
"w");
326 fprintf(stderr,
"Cannot generate the histogram output file\n");
329 for (i = 0; i < 100; i++)
330 fprintf(fp,
"%d %d -----(%lf --- %lf)\n", i, t_count[i],
331 tmincolor + i * delta, tmincolor + (i + 1) * delta);
340 for (i = 0; i < 6; i++)
347 vertex[0 * 3] = vertex[4 * 3] = vertex[7 * 3] = vertex[3 * 3] = range[0];
348 vertex[1 * 3] = vertex[5 * 3] = vertex[6 * 3] = vertex[2 * 3] = range[1];
349 vertex[0 * 3 + 1] = vertex[1 * 3 + 1] = vertex[5 * 3 + 1] =
350 vertex[4 * 3 + 1] = range[2];
351 vertex[3 * 3 + 1] = vertex[2 * 3 + 1] = vertex[6 * 3 + 1] =
352 vertex[7 * 3 + 1] = range[3];
353 vertex[0 * 3 + 2] = vertex[1 * 3 + 2] = vertex[2 * 3 + 2] =
354 vertex[3 * 3 + 2] = range[4];
355 vertex[4 * 3 + 2] = vertex[5 * 3 + 2] = vertex[6 * 3 + 2] =
356 vertex[7 * 3 + 2] = range[5];