Complete migration of models to image rendering engine

This commit is contained in:
Gareth Evans
2017-02-02 12:51:03 +00:00
parent 6fecec8e4e
commit de3c4edc2f

View File

@@ -31,6 +31,13 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
int indx, x, y, z, x0 = 0, y0 = 0, loss, match; int indx, x, y, z, x0 = 0, y0 = 0, loss, match;
double lat, lon, conversion, one_over_gamma, minwest; double lat, lon, conversion, one_over_gamma, minwest;
FILE *fd; FILE *fd;
IMAGE_CTX ctx;
int success;
if((success = image_init(&ctx, width, (kml ? height : height + 30), IMAGE_RGB, IMAGE_DEFAULT)) != 0){
fprintf(stderr,"Error initializing image\n");
exit(success);
}
one_over_gamma = 1.0 / GAMMA; one_over_gamma = 1.0 / GAMMA;
conversion = conversion =
@@ -46,24 +53,11 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
filename[strlen(filename) - 4] = 0; /* Remove .qth */ filename[strlen(filename) - 4] = 0; /* Remove .qth */
} }
y = strlen(filename); if(image_get_filename(&ctx,mapfile,sizeof(mapfile),filename) != 0){
fprintf(stderr,"Error creating file name\n");
if (y > 4) { exit(1);
if (filename[y - 1] == 'm' && filename[y - 2] == 'p'
&& filename[y - 3] == 'p' && filename[y - 4] == '.')
y -= 4;
} }
for (x = 0; x < y; x++) {
mapfile[x] = filename[x];
}
mapfile[x] = '.';
mapfile[x + 1] = 'p';
mapfile[x + 2] = 'p';
mapfile[x + 3] = 'm';
mapfile[x + 4] = 0;
fd = fopen(mapfile,"wb"); fd = fopen(mapfile,"wb");
} else { } else {
@@ -88,7 +82,6 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
east = (minwest < 180.0 ? -minwest : 360.0 - min_west); east = (minwest < 180.0 ? -minwest : 360.0 - min_west);
west = (double)(max_west < 180 ? -max_west : 360 - max_west); west = (double)(max_west < 180 ? -max_west : 360 - max_west);
fprintf(fd, "P6\n%u %u\n255\n", width, (kml ? height : height + 30));
if (debug) { if (debug) {
fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n", fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n",
filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30)); filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30));
@@ -161,11 +154,11 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
if (red >= 180 && green <= 75 if (red >= 180 && green <= 75
&& blue <= 75 && loss == 0) && blue <= 75 && loss == 0)
fprintf(fd, "%c%c%c", 255 ^ red, ADD_PIXEL(&ctx, 255 ^ red,
255 ^ green, 255 ^ green,
255 ^ blue); 255 ^ blue);
else else
fprintf(fd, "%c%c%c", 255, 0, ADD_PIXEL(&ctx, 255, 0,
0); 0);
cityorcounty = 1; cityorcounty = 1;
@@ -174,7 +167,7 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
else if (mask & 4) { else if (mask & 4) {
/* County Boundaries: Black */ /* County Boundaries: Black */
fprintf(fd, "%c%c%c", 0, 0, 0); ADD_PIXEL(&ctx, 0, 0, 0);
cityorcounty = 1; cityorcounty = 1;
} }
@@ -185,15 +178,14 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
&& loss > && loss >
abs(contour_threshold))) { abs(contour_threshold))) {
if (ngs) /* No terrain */ if (ngs) /* No terrain */
fprintf(fd, "%c%c%c", ADD_PIXEL(&ctx,
255, 255, 255); 255, 255, 255);
else { else {
/* Display land or sea elevation */ /* Display land or sea elevation */
if (dem[indx]. if (dem[indx].
data[x0][y0] == 0) data[x0][y0] == 0)
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
0, 0, 0, 0,
170); 170);
else { else {
@@ -201,8 +193,7 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
(unsigned) (unsigned)
(0.5 + (0.5 +
pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion); pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion);
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
terrain, terrain,
terrain, terrain,
terrain); terrain);
@@ -215,7 +206,7 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
if (red != 0 || green != 0 if (red != 0 || green != 0
|| blue != 0) || blue != 0)
fprintf(fd, "%c%c%c", ADD_PIXEL(&ctx,
red, green, red, green,
blue); blue);
@@ -223,8 +214,7 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
if (dem[indx]. if (dem[indx].
data[x0][y0] == 0) data[x0][y0] == 0)
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
0, 0, 0, 0,
170); 170);
else { else {
@@ -233,8 +223,7 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
(unsigned) (unsigned)
(0.5 + (0.5 +
pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion); pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion);
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
terrain, terrain,
terrain, terrain,
terrain); terrain);
@@ -248,11 +237,18 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
/* We should never get here, but if */ /* We should never get here, but if */
/* we do, display the region as black */ /* we do, display the region as black */
fprintf(fd, "%c%c%c", 0, 0, 0); ADD_PIXEL(&ctx, 0, 0, 0);
} }
} }
} }
if((success = image_write(&ctx,fd)) != 0){
fprintf(stderr,"Error writing image\n");
exit(success);
}
image_free(&ctx);
if( filename != NULL ) { if( filename != NULL ) {
fclose(fd); fclose(fd);
fd = NULL; fd = NULL;
@@ -275,6 +271,13 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
int indx, x, y, z = 1, x0 = 0, y0 = 0, signal, match; int indx, x, y, z = 1, x0 = 0, y0 = 0, signal, match;
double conversion, one_over_gamma, lat, lon, minwest; double conversion, one_over_gamma, lat, lon, minwest;
FILE *fd; FILE *fd;
IMAGE_CTX ctx;
int success;
if((success = image_init(&ctx, width, (kml ? height : height + 30), IMAGE_RGB, IMAGE_DEFAULT)) != 0){
fprintf(stderr,"Error initializing image\n");
exit(success);
}
one_over_gamma = 1.0 / GAMMA; one_over_gamma = 1.0 / GAMMA;
conversion = conversion =
@@ -290,24 +293,11 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
filename[strlen(filename) - 4] = 0; /* Remove .qth */ filename[strlen(filename) - 4] = 0; /* Remove .qth */
} }
y = strlen(filename); if(image_get_filename(&ctx,mapfile,sizeof(mapfile),filename) != 0){
fprintf(stderr,"Error creating file name\n");
if (y > 4) { exit(1);
if (filename[y - 1] == 'm' && filename[y - 2] == 'p'
&& filename[y - 3] == 'p' && filename[y - 4] == '.')
y -= 4;
} }
for (x = 0; x < y; x++) {
mapfile[x] = filename[x];
}
mapfile[x] = '.';
mapfile[x + 1] = 'p';
mapfile[x + 2] = 'p';
mapfile[x + 3] = 'm';
mapfile[x + 4] = 0;
fd = fopen(mapfile,"wb"); fd = fopen(mapfile,"wb");
} else { } else {
@@ -329,7 +319,6 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
east = (minwest < 180.0 ? -minwest : 360.0 - min_west); east = (minwest < 180.0 ? -minwest : 360.0 - min_west);
west = (double)(max_west < 180 ? -max_west : 360 - max_west); west = (double)(max_west < 180 ? -max_west : 360 - max_west);
fprintf(fd, "P6\n%u %u\n255\n", width, (kml ? height : height + 30));
if (debug) { if (debug) {
fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n", fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n",
filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30)); filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30));
@@ -403,11 +392,11 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
if (red >= 180 && green <= 75 if (red >= 180 && green <= 75
&& blue <= 75) && blue <= 75)
fprintf(fd, "%c%c%c", 255 ^ red, ADD_PIXEL(&ctx, 255 ^ red,
255 ^ green, 255 ^ green,
255 ^ blue); 255 ^ blue);
else else
fprintf(fd, "%c%c%c", 255, 0, ADD_PIXEL(&ctx, 255, 0,
0); 0);
cityorcounty = 1; cityorcounty = 1;
@@ -416,7 +405,7 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
else if (mask & 4) { else if (mask & 4) {
/* County Boundaries: Black */ /* County Boundaries: Black */
fprintf(fd, "%c%c%c", 0, 0, 0); ADD_PIXEL(&ctx, 0, 0, 0);
cityorcounty = 1; cityorcounty = 1;
} }
@@ -425,15 +414,14 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
if (contour_threshold != 0 if (contour_threshold != 0
&& signal < contour_threshold) { && signal < contour_threshold) {
if (ngs) if (ngs)
fprintf(fd, "%c%c%c", ADD_PIXEL(&ctx,
255, 255, 255); 255, 255, 255);
else { else {
/* Display land or sea elevation */ /* Display land or sea elevation */
if (dem[indx]. if (dem[indx].
data[x0][y0] == 0) data[x0][y0] == 0)
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
0, 0, 0, 0,
170); 170);
else { else {
@@ -441,8 +429,7 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
(unsigned) (unsigned)
(0.5 + (0.5 +
pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion); pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion);
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
terrain, terrain,
terrain, terrain,
terrain); terrain);
@@ -455,15 +442,14 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
if (red != 0 || green != 0 if (red != 0 || green != 0
|| blue != 0) || blue != 0)
fprintf(fd, "%c%c%c", ADD_PIXEL(&ctx,
red, green, red, green,
blue); blue);
else { /* terrain / sea-level */ else { /* terrain / sea-level */
if (ngs) if (ngs)
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
255, 255,
255, 255,
255); 255);
@@ -471,9 +457,7 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
if (dem[indx]. if (dem[indx].
data[x0][y0] data[x0][y0]
== 0) == 0)
fprintf ADD_PIXEL(&ctx,
(fd,
"%c%c%c",
0, 0,
0, 0,
170); 170);
@@ -486,9 +470,7 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
+ +
pow pow
((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion); ((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion);
fprintf ADD_PIXEL(&ctx,
(fd,
"%c%c%c",
terrain, terrain,
terrain, terrain,
terrain); terrain);
@@ -503,11 +485,18 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
/* We should never get here, but if */ /* We should never get here, but if */
/* we do, display the region as black */ /* we do, display the region as black */
fprintf(fd, "%c%c%c", 0, 0, 0); ADD_PIXEL(&ctx, 0, 0, 0);
} }
} }
} }
if((success = image_write(&ctx,fd)) != 0){
fprintf(stderr,"Error writing image\n");
exit(success);
}
image_free(&ctx);
if( filename != NULL ) { if( filename != NULL ) {
fclose(fd); fclose(fd);
fd = NULL; fd = NULL;
@@ -773,6 +762,13 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
int indx, x, y, x0 = 0, y0 = 0; int indx, x, y, x0 = 0, y0 = 0;
double conversion, one_over_gamma, lat, lon, minwest; double conversion, one_over_gamma, lat, lon, minwest;
FILE *fd; FILE *fd;
IMAGE_CTX ctx;
int success;
if((success = image_init(&ctx, width, (kml ? height : height + 30), IMAGE_RGB, IMAGE_DEFAULT)) != 0){
fprintf(stderr,"Error initializing image\n");
exit(success);
}
one_over_gamma = 1.0 / GAMMA; one_over_gamma = 1.0 / GAMMA;
conversion = conversion =
@@ -786,24 +782,11 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
filename[strlen(filename) - 4] = 0; /* Remove .qth */ filename[strlen(filename) - 4] = 0; /* Remove .qth */
} }
y = strlen(filename); if(image_get_filename(&ctx,mapfile,sizeof(mapfile),filename) != 0){
fprintf(stderr,"Error creating file name\n");
if (y > 4) { exit(1);
if (filename[y - 1] == 'm' && filename[y - 2] == 'p'
&& filename[y - 3] == 'p' && filename[y - 4] == '.')
y -= 4;
} }
for (x = 0; x < y; x++) {
mapfile[x] = filename[x];
}
mapfile[x] = '.';
mapfile[x + 1] = 'p';
mapfile[x + 2] = 'p';
mapfile[x + 3] = 'm';
mapfile[x + 4] = 0;
fd = fopen(mapfile,"wb"); fd = fopen(mapfile,"wb");
} else { } else {
@@ -825,7 +808,6 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
east = (minwest < 180.0 ? -minwest : 360.0 - min_west); east = (minwest < 180.0 ? -minwest : 360.0 - min_west);
west = (double)(max_west < 180 ? -max_west : 360 - max_west); west = (double)(max_west < 180 ? -max_west : 360 - max_west);
fprintf(fd, "P6\n%u %u\n255\n", width, (kml ? height : height + 30));
if (debug) { if (debug) {
fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n", fprintf(stderr, "\nWriting \"%s\" (%ux%u pixmap image)...\n",
filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30)); filename != NULL ? mapfile : "to stdout", width, (kml ? height : height + 30));
@@ -862,114 +844,113 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
if (mask & 2) if (mask & 2)
/* Text Labels: Red */ /* Text Labels: Red */
fprintf(fd, "%c%c%c", 255, 0, 0); ADD_PIXEL(&ctx, 255, 0, 0);
else if (mask & 4) else if (mask & 4)
/* County Boundaries: Light Cyan */ /* County Boundaries: Light Cyan */
fprintf(fd, "%c%c%c", 128, 128, 255); ADD_PIXEL(&ctx, 128, 128, 255);
else else
switch (mask & 57) { switch (mask & 57) {
case 1: case 1:
/* TX1: Green */ /* TX1: Green */
fprintf(fd, "%c%c%c", 0, 255, ADD_PIXEL(&ctx, 0, 255,
0); 0);
break; break;
case 8: case 8:
/* TX2: Cyan */ /* TX2: Cyan */
fprintf(fd, "%c%c%c", 0, 255, ADD_PIXEL(&ctx, 0, 255,
255); 255);
break; break;
case 9: case 9:
/* TX1 + TX2: Yellow */ /* TX1 + TX2: Yellow */
fprintf(fd, "%c%c%c", 255, 255, ADD_PIXEL(&ctx, 255, 255,
0); 0);
break; break;
case 16: case 16:
/* TX3: Medium Violet */ /* TX3: Medium Violet */
fprintf(fd, "%c%c%c", 147, 112, ADD_PIXEL(&ctx, 147, 112,
219); 219);
break; break;
case 17: case 17:
/* TX1 + TX3: Pink */ /* TX1 + TX3: Pink */
fprintf(fd, "%c%c%c", 255, 192, ADD_PIXEL(&ctx, 255, 192,
203); 203);
break; break;
case 24: case 24:
/* TX2 + TX3: Orange */ /* TX2 + TX3: Orange */
fprintf(fd, "%c%c%c", 255, 165, ADD_PIXEL(&ctx, 255, 165,
0); 0);
break; break;
case 25: case 25:
/* TX1 + TX2 + TX3: Dark Green */ /* TX1 + TX2 + TX3: Dark Green */
fprintf(fd, "%c%c%c", 0, 100, ADD_PIXEL(&ctx, 0, 100,
0); 0);
break; break;
case 32: case 32:
/* TX4: Sienna 1 */ /* TX4: Sienna 1 */
fprintf(fd, "%c%c%c", 255, 130, ADD_PIXEL(&ctx, 255, 130,
71); 71);
break; break;
case 33: case 33:
/* TX1 + TX4: Green Yellow */ /* TX1 + TX4: Green Yellow */
fprintf(fd, "%c%c%c", 173, 255, ADD_PIXEL(&ctx, 173, 255,
47); 47);
break; break;
case 40: case 40:
/* TX2 + TX4: Dark Sea Green 1 */ /* TX2 + TX4: Dark Sea Green 1 */
fprintf(fd, "%c%c%c", 193, 255, ADD_PIXEL(&ctx, 193, 255,
193); 193);
break; break;
case 41: case 41:
/* TX1 + TX2 + TX4: Blanched Almond */ /* TX1 + TX2 + TX4: Blanched Almond */
fprintf(fd, "%c%c%c", 255, 235, ADD_PIXEL(&ctx, 255, 235,
205); 205);
break; break;
case 48: case 48:
/* TX3 + TX4: Dark Turquoise */ /* TX3 + TX4: Dark Turquoise */
fprintf(fd, "%c%c%c", 0, 206, ADD_PIXEL(&ctx, 0, 206,
209); 209);
break; break;
case 49: case 49:
/* TX1 + TX3 + TX4: Medium Spring Green */ /* TX1 + TX3 + TX4: Medium Spring Green */
fprintf(fd, "%c%c%c", 0, 250, ADD_PIXEL(&ctx, 0, 250,
154); 154);
break; break;
case 56: case 56:
/* TX2 + TX3 + TX4: Tan */ /* TX2 + TX3 + TX4: Tan */
fprintf(fd, "%c%c%c", 210, 180, ADD_PIXEL(&ctx, 210, 180,
140); 140);
break; break;
case 57: case 57:
/* TX1 + TX2 + TX3 + TX4: Gold2 */ /* TX1 + TX2 + TX3 + TX4: Gold2 */
fprintf(fd, "%c%c%c", 238, 201, ADD_PIXEL(&ctx, 238, 201,
0); 0);
break; break;
default: default:
if (ngs) /* No terrain */ if (ngs) /* No terrain */
fprintf(fd, "%c%c%c", ADD_PIXEL(&ctx,
255, 255, 255); 255, 255, 255);
else { else {
/* Sea-level: Medium Blue */ /* Sea-level: Medium Blue */
if (dem[indx]. if (dem[indx].
data[x0][y0] == 0) data[x0][y0] == 0)
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
0, 0, 0, 0,
170); 170);
else { else {
@@ -978,8 +959,7 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
(unsigned) (unsigned)
(0.5 + (0.5 +
pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion); pow((double)(dem[indx].data[x0][y0] - min_elevation), one_over_gamma) * conversion);
fprintf(fd, ADD_PIXEL(&ctx,
"%c%c%c",
terrain, terrain,
terrain, terrain,
terrain); terrain);
@@ -992,11 +972,18 @@ void DoLOS(char *filename, unsigned char geo, unsigned char kml,
/* We should never get here, but if */ /* We should never get here, but if */
/* we do, display the region as black */ /* we do, display the region as black */
fprintf(fd, "%c%c%c", 0, 0, 0); ADD_PIXEL(&ctx, 0, 0, 0);
} }
} }
} }
if((success = image_write(&ctx,fd)) != 0){
fprintf(stderr,"Error writing image\n");
exit(success);
}
image_free(&ctx);
if( filename != NULL) { if( filename != NULL) {
fclose(fd); fclose(fd);
fd = NULL; fd = NULL;