home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / gmt_os2.zip / src / psbasemap.c < prev    next >
C/C++ Source or Header  |  1995-07-24  |  6KB  |  185 lines

  1. /*--------------------------------------------------------------------
  2.  *    The GMT-system:    @(#)psbasemap.c    2.29  24 Jul 1995    
  3.  *
  4.  *    Copyright (c) 1991-1995 by P. Wessel and W. H. F. Smith
  5.  *    See README file for copying and redistribution conditions.
  6.  *--------------------------------------------------------------------*/
  7. /*
  8.  * psbasemap plots out a basemap for the given area using the specified map
  9.  * projection.
  10.  *
  11.  * Author:    Paul Wessel
  12.  * Date:    8-MAY-1990
  13.  * Version:    2.0, from old 1.1
  14.  *
  15.  */
  16.  
  17. #include "gmt.h"
  18.  
  19. main (argc, argv)
  20. int argc;
  21. char **argv; {
  22.     int i, j, k;
  23.     
  24.     BOOLEAN error = FALSE, paint = FALSE, miles = FALSE, draw_scale = FALSE, gave_xy = FALSE;
  25.     BOOLEAN fancy = FALSE;
  26.     
  27.     double w = 0.0, e = 0.0, s = 0.0, n = 0.0, new_z_level = 0.0, x0, y0, lat, length;
  28.  
  29.     char txt_a[32], txt_b[32], txt_c[32];
  30.  
  31.     struct FILL fill;
  32.     
  33.     argc = gmt_begin (argc, argv);
  34.         
  35.     for (i = 1; i < argc; i++) {
  36.         if (argv[i][0] != '-') error = TRUE;
  37.         
  38.         switch (argv[i][1]) {
  39.         
  40.             /* Common parameters */
  41.             
  42.             case 'B':
  43.             case 'J':
  44.             case 'K':
  45.             case 'O':
  46.             case 'P':
  47.             case 'R':
  48.             case 'U':
  49.             case 'V':
  50.             case 'X':
  51.             case 'x':
  52.             case 'Y':
  53.             case 'y':
  54.             case 'c':
  55.             case '\0':
  56.                 error += get_common_args (argv[i], &w, &e, &s, &n);
  57.                 break;
  58.                 
  59.             /* Supplemental options */
  60.             
  61.             case 'E':
  62.                 sscanf (&argv[i][2], "%lf/%lf", &z_project.view_azimuth, &z_project.view_elevation);
  63.                 break;
  64.             case 'F':
  65.                 if (gmt_getrgb (&argv[i][2], &gmtdefs.basemap_frame_rgb[0], &gmtdefs.basemap_frame_rgb[1], &gmtdefs.basemap_frame_rgb[2])) {
  66.                     gmt_pen_syntax ('F');
  67.                     error++;
  68.                 }
  69.                 break;
  70.                 
  71.             case 'G':
  72.                 if (gmt_getfill (&argv[i][2], &fill)) {
  73.                     gmt_fill_syntax ('G');
  74.                     error++;
  75.                 }
  76.                 paint = TRUE;
  77.                 break;
  78.                 
  79.             case 'L':
  80.                 j = 2;
  81.                 if (argv[i][j] == 'f') fancy = TRUE, j++;
  82.                 if (argv[i][j] == 'x') gave_xy = TRUE, j++;
  83.                 k = sscanf (&argv[i][j], "%[^/]/%[^/]/%[^/]/%lf", txt_a, txt_b, txt_c, &length);
  84.                 x0 = ddmmss_to_degree (txt_a);
  85.                 y0 = ddmmss_to_degree (txt_b);
  86.                 lat = ddmmss_to_degree (txt_c);
  87.                 if (k != 4) {
  88.                     fprintf (stderr, "%s: GMT SYNTAX ERROR -L option:  Correct syntax\n", gmt_program);
  89.                     fprintf (stderr, "    -L[f][x]<x0>/<y0>/<lat>/<length>[m], append m for miles [Default is km]\n");
  90.                     error++;
  91.                 }
  92.                 miles = (strchr (&argv[i][2], 'm') != CNULL);
  93.                 draw_scale = TRUE;
  94.                 break;
  95.                 
  96.             case 'Z':
  97.                 new_z_level = atof (&argv[i][2]);
  98.                 break;
  99.                 
  100.             /* Illegal options */
  101.             
  102.             default:
  103.                 error = TRUE;
  104.                 gmt_default_error (argv[i][1]);
  105.                 break;
  106.         }
  107.     }
  108.     
  109.     if (gmt_quick || argc == 1) {
  110.         fprintf (stderr,"psbasemap %s - To plot PostScript basemaps\n\n", GMT_VERSION);
  111.         fprintf (stderr, "usage: psbasemap -B<tickinfo> -J<params> -R<west/east/south/north> [-Eas/el]\n");
  112.         fprintf (stderr, "    [-F<r/g/b] [-G<fill>] [-K] [-L[f][x]<lon0>/<lat0>/<slat>/<length>[m]] [-O] [-P]\n");
  113.         fprintf (stderr, "    [-U[dx/dy/][label]] [-V] [-X<xshift>] [-Y<yshift>] [-Z<zlevel>] [-c<ncopies>]\n\n");
  114.         
  115.         if (gmt_quick) exit (-1);
  116.         
  117.         explain_option ('B');
  118.         explain_option ('J');
  119.         explain_option ('R');
  120.         fprintf (stderr, "\n\tOPTIONS:\n");
  121.         fprintf (stderr, "      -F Set color used for Frame and anotation [%d/%d/%d]\n",
  122.             gmtdefs.basemap_frame_rgb[0], gmtdefs.basemap_frame_rgb[1], gmtdefs.basemap_frame_rgb[2]);
  123.         fprintf (stderr, "      -G fill inside of basemap with the specified color\n");
  124.         explain_option ('K');
  125.         fprintf (stderr, "      -L draws a simple map scaLe centered on <lon0>/<lat0>.  Use -Lx to specify cartesian coordinates instead.\n");
  126.         fprintf (stderr, "         Scale is calculated at latitude <slat>. <length> is in km, or miles is m is appended\n");
  127.         fprintf (stderr, "         -Lf draws a \"fancy\" scale [Default is plain]\n");
  128.         explain_option ('O');
  129.         explain_option ('P');
  130.         explain_option ('U');
  131.         explain_option ('V');
  132.         explain_option ('X');
  133.         fprintf (stderr, "      -Z For 3-D plots: Set the z-level of map [0]\n");
  134.         explain_option ('c');
  135.         explain_option ('.');
  136.         exit (-1);
  137.     }
  138.     
  139.     if (!project_info.region_supplied) {
  140.         fprintf (stderr, "%s: GMT SYNTAX ERROR:  Must specify -R option\n", gmt_program);
  141.         error++;
  142.     }
  143.     if (!(frame_info.plot || draw_scale)) {
  144.         fprintf (stderr, "%s: GMT SYNTAX ERROR:  Must specify at least one of -B, -L\n", gmt_program);
  145.         error++;
  146.     }
  147.     if (z_project.view_azimuth > 360.0 || z_project.view_elevation <= 0.0 || z_project.view_elevation > 90.0) {
  148.         fprintf (stderr, "%s: GMT SYNTAX ERROR -E option:  Enter azimuth in 0-360 range, elevation in 0-90 range\n", gmt_program);
  149.         error++;
  150.     }
  151.     
  152.     if (error) exit (-1);
  153.  
  154.     if (gmtdefs.verbose) fprintf (stderr, "psbasemap: Constructing basemap\n");
  155.  
  156.     map_setup (w, e, s, n);
  157.     
  158.     ps_plotinit (CNULL, gmtdefs.overlay, gmtdefs.page_orientation, gmtdefs.x_origin, gmtdefs.y_origin,
  159.         gmtdefs.global_x_scale, gmtdefs.global_y_scale, gmtdefs.n_copies,
  160.         gmtdefs.dpi, gmtdefs.measure_unit, gmtdefs.paper_width, gmtdefs.page_rgb, gmt_epsinfo (argv[0]));
  161.         
  162.     echo_command (argc, argv);
  163.     if (gmtdefs.unix_time) timestamp (argc, argv);
  164.     
  165.     if (project_info.three_D) ps_transrotate (-z_project.xmin, -z_project.ymin, 0.0);
  166.  
  167.     if (paint) {
  168.         map_clip_on (fill.r, fill.g, fill.b, 3);
  169.         map_clip_off ();
  170.     }
  171.     
  172.     ps_setpaint (gmtdefs.basemap_frame_rgb[0], gmtdefs.basemap_frame_rgb[1], gmtdefs.basemap_frame_rgb[2]);
  173.     
  174.     if (new_z_level != 0.0) project_info.z_level = new_z_level;
  175.     
  176.     if (frame_info.plot) map_basemap ();
  177.     
  178.     if (draw_scale) draw_map_scale (x0, y0, lat, length, miles, gave_xy, fancy);
  179.     
  180.     if (project_info.three_D) ps_rotatetrans (z_project.xmin, z_project.ymin, 0.0);
  181.     ps_plotend (gmtdefs.last_page);
  182.     
  183.     gmt_end (argc, argv);
  184. }
  185.