9 #include "hecmw_font_texture.h"
13 double *mincolor,
double *maxcolor) {
17 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
18 if (empty_flag[i] == 1) {
20 if (value < *mincolor) *mincolor = value;
21 if (value > *maxcolor) *maxcolor = value;
27 int *empty_flag,
int nx,
int ny,
int nz,
29 int color_system_type) {
31 double delta, value, color[3];
32 int count[500], t_count[500], max_number, max_length, start_x, end_x, start_y,
38 unsigned char r, g, b;
42 int start_xs, start_ys;
46 delta = (tmaxcolor - tmincolor) / 500.0;
47 for (i = 0; i < 500; i++) {
51 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
52 if (empty_flag[i] == 1) {
53 j = (int)((var[i] - tmincolor) / delta);
62 for (i = 0; i < 500; i++) t_count[i] = count[i];
65 fp = fopen(
"histogram.bmp",
"wb");
67 fprintf(stderr,
"Cannot generate the histogram output file\n");
70 graph = (
double *)
HECMW_calloc(400 * 530 * 3,
sizeof(
double));
72 fprintf(stderr,
"There is no enough memory for graph\n");
76 for (i = 0; i < 400 * 530 * 3; i++) graph[i] = 0.0;
78 for (i = 0; i < 500; i++) {
79 if (t_count[i] > max_number) max_number = t_count[i];
81 if (max_number == 0) {
83 "Cannot generate histogram graph, the number of voxels is 0\n");
86 max_length = (int)(400 - 30 - 5 - 45 * 1.5);
87 start_x = (int)(5 + 45 * 1.5 + 15);
89 for (j = 0; j < 500; j++) {
91 (int)((
double)t_count[j] * (double)max_length / (
double)max_number +
96 for (i = start_x; i < end_x; i++) {
97 graph[((j + 15) * 400 + i) * 3] = color[0];
98 graph[((j + 15) * 400 + i) * 3 + 1] = color[1];
99 graph[((j + 15) * 400 + i) * 3 + 2] = color[2];
105 for (k = 0; k < 11; k++) {
106 value = tmincolor + (tmaxcolor - tmincolor) / 10.0 * k;
107 start_ys = start_y + (int)((
double)500.0 / 10 * k) - (
int)7 / 2;
109 sprintf(buf,
"%3.2E", value);
110 for (m = 0; m < 9; m++) {
112 for (j = 0; j < 7; j++)
113 for (i = 0; i < 7; i++) {
114 graph[((start_ys + j) * 400 + start_xs - i) * 3] =
115 (double)output7[6 - j][i];
116 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 1] =
117 (double)output7[6 - j][i];
118 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 2] =
119 (double)output7[6 - j][i];
122 if ((value >= 0) && (m == 0)) start_xs -= 7;
124 if ((k != 0) && (k != 10)) {
125 start_ys += (int)7 / 2;
127 for (i = start_x; i < start_x + 5; i++)
128 for (j = 0; j < 3; j++) graph[(start_ys * 400 + i) * 3 + j] = 1.0;
131 header.
bfSize = 54 + 3 * 400 * 530;
132 #ifdef CONVERSE_ORDER
136 #ifdef CONVERSE_ORDER
141 #ifdef CONVERSE_ORDER
146 #ifdef CONVERSE_ORDER
151 #ifdef CONVERSE_ORDER
156 #ifdef CONVERSE_ORDER
161 #ifdef CONVERSE_ORDER
166 #ifdef CONVERSE_ORDER
171 #ifdef CONVERSE_ORDER
176 #ifdef CONVERSE_ORDER
181 #ifdef CONVERSE_ORDER
186 #ifdef CONVERSE_ORDER
191 #ifdef CONVERSE_ORDER
196 #ifdef CONVERSE_ORDER
201 #ifdef CONVERSE_ORDER
207 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, fp);
208 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, fp);
209 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, fp);
210 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, fp);
211 fwrite(&info, 40, 1, fp);
212 for (j = 0; j < 530; j++)
213 for (i = 400 - 1; i >= 0; i--) {
214 ri = (int)(graph[(j * 400 + i) * 3] * 256);
215 gi = (int)(graph[(j * 400 + i) * 3 + 1] * 256);
216 bi = (int)(graph[(j * 400 + i) * 3 + 2] * 256);
218 if (ri > 255) ri = 255;
220 if (gi > 255) gi = 255;
222 if (bi > 255) bi = 255;
238 int *empty_flag,
int nx,
int ny,
int nz,
240 double *interval_point) {
243 int count[500], t_count[500], tmp_count[500], sum_count, interv_count, sum,
245 delta = (tmaxcolor - tmincolor) / 500.0;
246 for (i = 0; i < 500; i++) {
250 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
251 if (empty_flag[i] == 1) {
252 j = (int)((var[i] - tmincolor) / delta);
254 if (j > 499) j = 499;
261 for (i = 0; i < 500; i++) t_count[i] = count[i];
264 for (i = 0; i < 500; i++) {
265 sum_count += t_count[i];
266 tmp_count[i] = t_count[i];
268 interv_count = (int)sum_count / 10;
270 interval_point[0] = tmincolor;
271 interval_point[1] = 0.0;
272 for (i = 1; i < 10; i++) {
273 interval_point[i * 2 + 1] = (double)i / 10.0;
276 while ((j < 500) && (sum < interv_count)) {
281 interval_point[i * 2] =
284 (1.0 - (
double)(sum - interv_count) / (
double)tmp_count[j])) *
285 (tmaxcolor - tmincolor) +
287 t_count[j] = sum - interv_count;
290 interval_point[20] = tmaxcolor;
291 interval_point[21] = 1.0;
292 fprintf(stderr,
"The automatic color mapping set is :\n");
293 for (i = 0; i < 11; i++)
294 fprintf(stderr,
"%lf %lf \n", interval_point[i * 2],
295 interval_point[i * 2 + 1]);
300 int *empty_flag,
int nx,
int ny,
int nz,
int mynode,
304 int count[100], t_count[100];
307 delta = (tmaxcolor - tmincolor) / 100.0;
308 for (i = 0; i < 100; i++) {
312 for (i = 0; i < (nx + 1) * (ny + 1) * (nz + 1); i++) {
313 if (empty_flag[i] == 1) {
314 j = (int)((var[i] - tmincolor) / delta);
323 for (i = 0; i < 100; i++) t_count[i] = count[i];
326 fp = fopen(
"histogram.file",
"w");
328 fprintf(stderr,
"Cannot generate the histogram output file\n");
331 for (i = 0; i < 100; i++)
332 fprintf(fp,
"%d %d -----(%lf --- %lf)\n", i, t_count[i],
333 tmincolor + i * delta, tmincolor + (i + 1) * delta);
342 for (i = 0; i < 6; i++)
349 vertex[0 * 3] = vertex[4 * 3] = vertex[7 * 3] = vertex[3 * 3] = range[0];
350 vertex[1 * 3] = vertex[5 * 3] = vertex[6 * 3] = vertex[2 * 3] = range[1];
351 vertex[0 * 3 + 1] = vertex[1 * 3 + 1] = vertex[5 * 3 + 1] =
352 vertex[4 * 3 + 1] = range[2];
353 vertex[3 * 3 + 1] = vertex[2 * 3 + 1] = vertex[6 * 3 + 1] =
354 vertex[7 * 3 + 1] = range[3];
355 vertex[0 * 3 + 2] = vertex[1 * 3 + 2] = vertex[2 * 3 + 2] =
356 vertex[3 * 3 + 2] = range[4];
357 vertex[4 * 3 + 2] = vertex[5 * 3 + 2] = vertex[6 * 3 + 2] =
358 vertex[7 * 3 + 2] = range[5];
int HECMW_Allreduce(void *sendbuf, void *recvbuf, int count, HECMW_Datatype datatype, HECMW_Op op, HECMW_Comm comm)
#define HECMW_calloc(nmemb, size)
void generate_interval_point(double tmincolor, double tmaxcolor, double *var, int *empty_flag, int nx, int ny, int nz, int mynode, int pesize, HECMW_Comm VIS_COMM, double *interval_point)
void find_minmax(double *voxel_dxyz, double *voxel_orig_xyz, int mynode, double range[6])
void output_histogram(double tmincolor, double tmaxcolor, double *var, int *empty_flag, int nx, int ny, int nz, int mynode, int pesize, HECMW_Comm VIS_COMM)
void find_color_minmax(double *var, int *empty_flag, int nx, int ny, int nz, double *mincolor, double *maxcolor)
void generate_histogram_graph(double tmincolor, double tmaxcolor, double *var, int *empty_flag, int nx, int ny, int nz, int mynode, int pesize, HECMW_Comm VIS_COMM, int color_system_type)
void transform_range_vertex(double range[6], double vertex[24])
int change_int_order(int n)
void value2_to_rgb(double value, double color[3], int color_system_type)
void font7_generate(char input, int output[7][7])
unsigned short int change_short_int_order(unsigned short int n)
unsigned int change_unsigned_int_order(unsigned int n)
void HECMW_vis_print_exit(char *var)
unsigned short bfReserved1
unsigned short bfReserved2
unsigned int biCompression
unsigned short biBitCount
unsigned int biClrImportant