123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /* Function: read_scalebar
- **
- ** Author: Paul W. Carlson April 1992
- */
- #include <stdlib.h>
- #include <string.h>
- #include "local_proto.h"
- #define KEY(x) (strcmp(key,x)==0)
- static char *help[] = {
- "where x y",
- "length length",
- "units auto|meters|kilometers|feet|miles|nautmiles",
- "height height",
- "segment no_segemnts",
- "numbers no_labels",
- "font fontname",
- "fontsize fontsize",
- "color fontcolor",
- "bgcolor backgroundcolor",
- "background [Y|n]",
- "width #",
- ""
- };
- int read_scalebar(void)
- {
- char buf[1024];
- char *key, *data;
- char ch;
- /* struct defined in decorate.h */
- sb.segment = 4; /* four segments */
- sb.numbers = 1; /* label each segment */
- sb.font = G_store("Helvetica");
- sb.fontsize = 8;
- sb.color = BLACK; /* TODO: multi-color */
- sb.width = 1.;
- sb.length = -1.;
- sb.height = 0.1; /* default height in inches */
- sb.x = PS.page_width / 2.;
- sb.y = 2.;
- sb.bgcolor = 1; /* TODO: multi-color */
- sb.units = SB_UNITS_AUTO; /* default to automatic based on value in PROJ_UNITS */
- while (input(2, buf, help)) {
- if (!key_data(buf, &key, &data))
- continue;
- if (KEY("where")) {
- if (sscanf(data, "%lf %lf", &sb.x, &sb.y) != 2) {
- error(key, data, "illegal where request");
- }
- else
- continue;
- }
- if (KEY("height")) {
- if (sscanf(data, "%lf", &sb.height) != 1 || sb.height <= 0.) {
- error(key, data, "illegal height request");
- }
- else
- continue;
- }
- if (KEY("length")) {
- if (sscanf(data, "%lf", &sb.length) != 1 || sb.length <= 0.) {
- error(key, data, "illegal length request");
- }
- else
- continue;
- }
- if (KEY("units")) {
- G_strip(data);
- if (strcmp(data, "auto") == 0) {
- sb.units = SB_UNITS_AUTO;
- continue;
- }
- else if (G_projection() == PROJECTION_XY) {
- error(key, data,
- "Earth units not available in simple XY location");
- }
- else if (strcmp(data, "meters") == 0) {
- sb.units = SB_UNITS_METERS;
- continue;
- }
- else if (strcmp(data, "kilometers") == 0 || strcmp(data, "km") == 0) {
- sb.units = SB_UNITS_KM;
- continue;
- }
- else if (strcmp(data, "feet") == 0) {
- sb.units = SB_UNITS_FEET;
- continue;
- }
- else if (strcmp(data, "miles") == 0) {
- sb.units = SB_UNITS_MILES;
- continue;
- }
- else if (strcmp(data, "nautmiles") == 0 || strcmp(data, "nm") == 0) {
- sb.units = SB_UNITS_NMILES;
- continue;
- }
- else
- error(key, data, "illegal units request");
- }
- if (KEY("segment")) {
- if (sscanf(data, "%d", &sb.segment) != 1 || sb.segment <= 0) {
- error(key, data, "illegal segment request");
- }
- else
- continue;
- }
- if (KEY("numbers")) {
- if (sscanf(data, "%d", &sb.numbers) != 1 || sb.numbers <= 0) {
- error(key, data, "illegal numbers request");
- }
- else
- continue;
- }
- if (KEY("font")) {
- get_font(data);
- G_free(sb.font);
- sb.font = G_store(data);
- continue;
- }
- if (KEY("fontsize")) {
- if (sscanf(data, "%d", &sb.fontsize) != 1 || sb.fontsize <= 0) {
- error(key, data, "illegal fontsize request");
- }
- else
- continue;
- }
- if (KEY("color"))
- {
- sb.color = get_color_number(data);
- if (sb.color < 0)
- {
- sb.color = BLACK;
- error(key, data, "illegal color request");
- }
- continue;
- }
- if (KEY("background")) {
- sb.bgcolor = yesno(key, data);
- continue;
- }
- if (KEY("width")) {
- sb.width = -1.;
- ch = ' ';
- if ((sscanf(data, "%lf%c", &sb.width, &ch) < 1) ||
- (sb.width < 0.)) {
- sb.width = 1.;
- error(key, data, "illegal grid width request");
- }
- if (ch == 'i')
- sb.width = sb.width * 72.0;
- continue;
- }
- error(key, data, "illegal request (scalebar)");
- }
- return 0;
- }
|