Exemplo n.º 1
0
int main(int argc,char *argv[]) {



#ifdef _XLIB_
  int xdf=0;
  int xd=0;
  struct XwinDisplay *dp;
  struct XwinWindow *win;
  char *display_name=NULL;
  char *wname="fov_plot";
  int xdoff=-1;
  int ydoff=-1;
#endif

  struct FrameBuffer *img=NULL;
  struct PostScript *psdata=NULL;
  FILE *fontfp=NULL;
  char *fntdbfname=NULL;
  struct FrameBufferFontDB *fontdb=NULL;
  unsigned int bgcol;
  unsigned int txtcol;

  int arg;

  char *envstr=NULL;
  char *cfname=NULL;
  FILE *fp;



  float wdt=540,hgt=540;
  float pad=0;

  char *fontname=NULL;
  float fontsize=10.0;
  char *dfontname="Helvetica";

  float width=0.5;

  struct Plot *plot=NULL;
  struct Splot *splot=NULL;

  float xpoff=40,ypoff=40;
  unsigned char psflg=0;
  unsigned char xmlflg=0;
  unsigned char ppmflg=0;
  unsigned char ppmxflg=0;
  unsigned char pngflg=0;

  unsigned char gflg=0;
  unsigned char pflg=0;


  unsigned char help=0; 
  unsigned char option=0; 

  char *bgcol_txt=NULL;
  char *txtcol_txt=NULL;


  unsigned char sqflg=0;
  MapTFunction  tfunc;

  unsigned char flip=0;
  unsigned char gvp=0;
  unsigned char ortho=0;
  unsigned char stereo=0;
  unsigned char cylind=0;

  float lat=90,lon=0;
  float latmin=50.0;
  float sf=1.0;
  float alt=0.0; 

  unsigned char magflg=0;
  unsigned char rotflg=0;

  unsigned char mapflg=0;
  unsigned char fmapflg=0;
  unsigned char bndflg=0;
  unsigned char grdflg=0;
  unsigned char tmkflg=0;
  unsigned char tlblflg=0;
  unsigned char ofovflg=0;
  unsigned char fofovflg=0;

  unsigned char cfovflg=0;
  unsigned char fcfovflg=0;

  unsigned char fovflg=0;
  unsigned char ffovflg=0;

  unsigned char grdontop=0;

  unsigned char dotflg=0;

  int tmtick=3;

  unsigned char lstflg=0;
  unsigned char trmflg=0;
  unsigned char ftrmflg=0;

  char *grdcol_txt=NULL;
  char *cstcol_txt=NULL;
  char *bndcol_txt=NULL;
  char *lndcol_txt=NULL;
  char *seacol_txt=NULL;
  char *trmcol_txt=NULL;
  char *ftrmcol_txt=NULL;
  char *tmkcol_txt=NULL;
  char *ofovcol_txt=NULL;
  char *fofovcol_txt=NULL;
  char *fovcol_txt=NULL;
  char *ffovcol_txt=NULL;

  char *cfovcol_txt=NULL;
  char *fcfovcol_txt=NULL;


  unsigned int grdcol;
  unsigned int cstcol;
  unsigned int bndcol;
  unsigned int lndcol;
  unsigned int seacol;
  unsigned int trmcol;
  unsigned int ftrmcol;
  unsigned int tmkcol;
  unsigned int ofovcol;
  unsigned int fofovcol;
  unsigned int fovcol;
  unsigned int ffovcol;

  unsigned int cfovcol;
  unsigned int fcfovcol;
  

  FILE *mapfp;
  float marg[4];
  int i;

  char *tmetxt=NULL;
  char *dtetxt=NULL;

  double tval=-1;
  double dval=-1;

  int yr,mo,dy,hr,mt;
  double sc;
  int yrsec;
  float tme_shft;



  double LsoT,LT,Hangle,dec,eqt;
  
  float dotr=2; 
 
  int stid=-1;
  char *ststr=NULL;
  int stnum=0;

  char tsfx[16];


  envstr=getenv("MAPDATA");

  mapfp=fopen(envstr,"r");
  map=MapFread(mapfp);
  fclose(mapfp);   

  envstr=getenv("BNDDATA");
  mapfp=fopen(envstr,"r");
  bnd=MapBndFread(mapfp);
  fclose(mapfp);

 envstr=getenv("SD_RADAR");
  if (envstr==NULL) {
    fprintf(stderr,"Environment variable 'SD_RADAR' must be defined.\n");
    exit(-1);
  }

  fp=fopen(envstr,"r");

  if (fp==NULL) {
    fprintf(stderr,"Could not locate radar information file.\n");
    exit(-1);
  }

  network=RadarLoad(fp);
  fclose(fp); 
  if (network==NULL) {
    fprintf(stderr,"Failed to read radar information.\n");
    exit(-1);
  }

  envstr=getenv("SD_HDWPATH");
  if (envstr==NULL) {
    fprintf(stderr,"Environment variable 'SD_HDWPATH' must be defined.\n");
    exit(-1);
  }

  RadarLoadHardware(envstr,network);


  bgcol=PlotColor(0xff,0xff,0xff,0xff);
  txtcol=PlotColor(0x00,0x00,0x00,0xff);

  grdcol=PlotColor(0x20,0x40,0x60,0xff);
  cstcol=PlotColor(0xa0,0xa0,0xa0,0xff);
  bndcol=PlotColor(0x80,0x80,0x80,0xff);
  lndcol=PlotColor(0xff,0xff,0xf0,0xff);
  seacol=PlotColor(0xe0,0xf0,0xff,0xff);
  tmkcol=PlotColor(0x00,0x00,0x00,0xff);
  ofovcol=PlotColor(0x00,0x00,0x00,0xff);
  fofovcol=PlotColor(0xff,0xff,0xff,0xff);
  fovcol=PlotColor(0x00,0x00,0x00,0xff);
  ffovcol=PlotColor(0xc0,0x00,0x00,0xff);
  trmcol=PlotColor(0x80,0x80,0x80,0xff);
  ftrmcol=PlotColor(0x80,0x80,0x80,0xff);

  cfovcol=PlotColor(0x00,0x00,0x00,0xff);
  fcfovcol=PlotColor(0xff,0xff,0xff,0xff);
 
  OptionAdd(&opt,"-help",'x',&help);
  OptionAdd(&opt,"-option",'x',&option);

  OptionAdd(&opt,"cf",'t',&cfname);


#ifdef _XLIB_ 
  OptionAdd(&opt,"x",'x',&xd);
  OptionAdd(&opt,"display",'t',&display_name);
  OptionAdd(&opt,"xoff",'i',&xdoff);
  OptionAdd(&opt,"yoff",'i',&ydoff);
#endif

  OptionAdd(&opt,"ppm",'x',&ppmflg);
  OptionAdd(&opt,"ppmx",'x',&ppmxflg);
  OptionAdd(&opt,"xml",'x',&xmlflg);
  OptionAdd(&opt,"png",'x',&pngflg);
  OptionAdd(&opt,"ps",'x',&psflg); 

  OptionAdd(&opt,"xp",'f',&xpoff);
  OptionAdd(&opt,"yp",'f',&ypoff);
  OptionAdd(&opt,"wdt",'f',&wdt);
  OptionAdd(&opt,"hgt",'f',&hgt);
  OptionAdd(&opt,"pad",'f',&pad);

  OptionAdd(&opt,"bgcol",'t',&bgcol_txt);
  OptionAdd(&opt,"txtcol",'t',&txtcol_txt);

  OptionAdd(&opt,"square",'x',&sqflg);

  OptionAdd(&opt,"ortho",'x',&ortho);
  OptionAdd(&opt,"stereo",'x',&stereo);
  OptionAdd(&opt,"gvp",'x',&gvp);

  OptionAdd(&opt,"lat",'f',&lat);
  OptionAdd(&opt,"lon",'f',&lon);
  OptionAdd(&opt,"latmin",'f',&latmin);
  OptionAdd(&opt,"sf",'f',&sf);
  OptionAdd(&opt,"mag",'x',&magflg);
  OptionAdd(&opt,"rotate",'x',&rotflg);
  OptionAdd(&opt,"alt",'f',&alt);
  OptionAdd(&opt,"flip",'x',&flip);

  OptionAdd(&opt,"coast",'x',&mapflg);
  OptionAdd(&opt,"fcoast",'x',&fmapflg);
  OptionAdd(&opt,"bnd",'x',&bndflg);
  OptionAdd(&opt,"grd",'x',&grdflg);
  OptionAdd(&opt,"tmk",'x',&tmkflg);

 OptionAdd(&opt,"grdontop",'x',&grdontop);


  OptionAdd(&opt,"fov",'x',&fovflg);
  OptionAdd(&opt,"ffov",'x',&ffovflg);

  OptionAdd(&opt,"ofov",'x',&ofovflg);
  OptionAdd(&opt,"fofov",'x',&fofovflg);

  OptionAdd(&opt,"cfov",'x',&cfovflg);
  OptionAdd(&opt,"fcfov",'x',&fcfovflg);

  OptionAdd(&opt,"tmtick",'i',&tmtick);
  OptionAdd(&opt,"lst",'x',&lstflg);
  OptionAdd(&opt,"term",'x',&trmflg);
  OptionAdd(&opt,"fterm",'x',&ftrmflg);

  OptionAdd(&opt,"grdcol",'t',&grdcol_txt);
  OptionAdd(&opt,"cstcol",'t',&cstcol_txt);
  OptionAdd(&opt,"bndcol",'t',&bndcol_txt);
  OptionAdd(&opt,"lndcol",'t',&lndcol_txt);
  OptionAdd(&opt,"seacol",'t',&seacol_txt);
  OptionAdd(&opt,"trmcol",'t',&trmcol_txt);
  OptionAdd(&opt,"tmkcol",'t',&tmkcol_txt);
 
  OptionAdd(&opt,"fovcol",'t',&fovcol_txt);
  OptionAdd(&opt,"ffovcol",'t',&ffovcol_txt);
  OptionAdd(&opt,"ofovcol",'t',&ofovcol_txt);
  OptionAdd(&opt,"fofovcol",'t',&fofovcol_txt);

  OptionAdd(&opt,"cfovcol",'t',&cfovcol_txt);
  OptionAdd(&opt,"fcfovcol",'t',&fcfovcol_txt);

  OptionAdd(&opt,"st",'t',&ststr);

  OptionAdd(&opt,"t",'t',&tmetxt);
  OptionAdd(&opt,"d",'t',&dtetxt);
  
  OptionAdd(&opt,"tmlbl",'x',&tlblflg);

  OptionAdd(&opt,"fontname",'t',&fontname);
  OptionAdd(&opt,"fontsize",'f',&fontsize);
  OptionAdd(&opt,"lnewdt",'f',&width);

  OptionAdd(&opt,"dotr",'f',&dotr);
  OptionAdd(&opt,"dot",'x',&dotflg);


  arg=OptionProcess(1,argc,argv,&opt,NULL);  

  if (cfname !=NULL) { /* load the configuration file */
    int farg;
    do {
      fp=fopen(cfname,"r");
      if (fp==NULL) break;
      free(cfname);
      cfname=NULL;
      optf=OptionProcessFile(fp);
      if (optf !=NULL) {
        farg=OptionProcess(0,optf->argc,optf->argv,&opt,NULL);
        OptionFreeFile(optf);
       }   
       fclose(fp);
    } while (cfname !=NULL);
  }

  if (help==1) {
    OptionPrintInfo(stdout,hlpstr);
    exit(0);
  }

  if (option==1) {
    OptionDump(stdout,&opt);
    exit(0);
  }


  if (tmetxt !=NULL) tval=strtime(tmetxt);
  if (dtetxt !=NULL) dval=strdate(dtetxt);

  tval+=dval;
  TimeEpochToYMDHMS(tval,&yr,&mo,&dy,&hr,&mt,&sc);
  yrsec=TimeYMDHMSToYrsec(yr,mo,dy,hr,mt,sc);

  if (magflg) {
    MapModify(map,AACGMtransform,NULL);
    MapModify(bnd,AACGMtransform,NULL);
  }

  fov=make_fov(tval,network,alt); 

  if (magflg) MapModify(fov,AACGMtransform,NULL);


  if (tmtick<1) tmtick=1;
  if (tmtick>6) tmtick=6;

  if ((ortho==0) && (stereo==0)) cylind=1;

  if (grdflg) grd=make_grid(15,10,cylind);   
 
  if (tmkflg) tmk=make_grid(30*tmtick,10,cylind);

  if ((lat<0) && (latmin>0)) latmin=-latmin;
  if ((lat>0) && (latmin<0)) latmin=-latmin;

  if (trmflg || ftrmflg) {
    if ((cylind) || (ortho) | (gvp))
       trm=SZATerminator(yr,mo,dy,hr,mt,sc,0,magflg,
                           1.0,90.0);
     else if (lat>0) trm=SZATerminator(yr,mo,dy,hr,mt,sc,1,magflg,
                                     1.0,90.0);
     else trm=SZATerminator(yr,mo,dy,hr,mt,sc,-1,magflg,1.0,90.0);
  }
 
  marg[0]=lat;
  marg[1]=lon;

  tfunc=MapCylindrical;
  if (ortho) tfunc=MapOrthographic;
  if (stereo) tfunc=MapStereographic;
  if (gvp) tfunc=MapGeneralVerticalPerspective;

  if ((ortho) || (gvp)) marg[2]=sf;
  else if (stereo) marg[2]=1.25*0.5*sf*90.0/(90-fabs(latmin));
  else marg[2]=1;
  marg[3]=flip;

  strcpy(tsfx,"LT");
  if (magflg) strcpy(tsfx,"MLT");
  else if (lstflg) strcpy(tsfx,"LST");

  dec=SZASolarDec(yr,mo,dy,hr,mt,sc);
  eqt=SZAEqOfTime(yr,mo,dy,hr,mt,sc);

  if (magflg) tme_shft=-MLTConvertYrsec(yr,yrsec,0.0)*15.0; 
    else {
      if (lstflg) {
        LsoT=(hr*3600+mt*60+sc)+eqt;
        Hangle=15*(LsoT/3600);
        tme_shft=-Hangle;
      } else {
        LT=(hr*3600+mt*60+sc);
        Hangle=15*(LT/3600);
        tme_shft=-Hangle;
      }
    }
  if (lat<0) tme_shft+=180.0;

  if (rotflg)  marg[1]=lon+tme_shft;
  
  if ((cylind) || (sqflg)) clip=MapSquareClip(); 
  else clip=MapCircleClip(10); 

  if (mapflg || fmapflg) {
     nmap=MapTransform(map,2*sizeof(float),PolygonXYbbox,
                           tfunc,marg);
     if (cylind) nmap=wrap(nmap);
     pmap=PolygonClip(clip,nmap); 
  }
  if (bndflg) {
     nbnd=MapTransform(bnd,2*sizeof(float),PolygonXYbbox,
                      tfunc,marg);
     if (cylind) nbnd=wrap(nbnd);
     pbnd=PolygonClip(clip,nbnd);
  }
  if (grdflg) {
     ngrd=MapTransform(grd,2*sizeof(float),PolygonXYbbox,
                      tfunc,marg);
     if (cylind) ngrd=wrap(ngrd);
     pgrd=PolygonClip(clip,ngrd);
  }
  if (trmflg || ftrmflg) {
     ntrm=MapTransform(trm,2*sizeof(float),PolygonXYbbox,
                           tfunc,marg);
     if (cylind) ntrm=wrap(ntrm);
     ptrm=PolygonClip(clip,ntrm); 
  }

  nfov=MapTransform(fov,2*sizeof(float),PolygonXYbbox,
                     tfunc,marg);
  if (cylind) nfov=wrap(nfov);
  pfov=PolygonClip(clip,nfov);

  if (tmkflg) {
     float tmp;
     tmp=marg[1];
     if (rotflg) marg[1]=0;
     else marg[1]=lon-tme_shft;
     ntmk=MapTransform(tmk,2*sizeof(float),PolygonXYbbox,
                        tfunc,marg);
     ptmk=PolygonClip(clip,ntmk);
     marg[1]=tmp;
  }


  if (bgcol_txt !=NULL) bgcol=PlotColorStringRGBA(bgcol_txt);
  if (txtcol_txt !=NULL) txtcol=PlotColorStringRGBA(txtcol_txt);

  if (grdcol_txt !=NULL) grdcol=PlotColorStringRGBA(grdcol_txt);
  if (cstcol_txt !=NULL) cstcol=PlotColorStringRGBA(cstcol_txt);
  if (bndcol_txt !=NULL) bndcol=PlotColorStringRGBA(bndcol_txt);
  if (lndcol_txt !=NULL) lndcol=PlotColorStringRGBA(lndcol_txt);
  if (seacol_txt !=NULL) seacol=PlotColorStringRGBA(seacol_txt);
  if (trmcol_txt !=NULL) trmcol=PlotColorStringRGBA(trmcol_txt);
  if (ftrmcol_txt !=NULL) ftrmcol=PlotColorStringRGBA(ftrmcol_txt);

  if (tmkcol_txt !=NULL) tmkcol=PlotColorStringRGBA(tmkcol_txt);

  if (fovcol_txt !=NULL) fovcol=PlotColorStringRGBA(fovcol_txt);
  if (ofovcol_txt !=NULL) ofovcol=PlotColorStringRGBA(ofovcol_txt);
  if (cfovcol_txt !=NULL) cfovcol=PlotColorStringRGBA(cfovcol_txt);
 
  if (ffovcol_txt !=NULL) ffovcol=PlotColorStringRGBA(ffovcol_txt);
  if (fofovcol_txt !=NULL) fofovcol=PlotColorStringRGBA(fofovcol_txt);
  if (fcfovcol_txt !=NULL) fcfovcol=PlotColorStringRGBA(fcfovcol_txt);


  if ((wdt==0) || (hgt==0)) {
    fprintf(stderr,"invalid plot size.\n");
    exit(-1);
  }


  if (tlblflg) pad=10+fontsize;
  
  if (fontname==NULL) fontname=dfontname;

  fntdbfname=getenv("FONTDB");
  fontfp=fopen(fntdbfname,"r");
  if (fontfp !=NULL) {
   fontdb=FrameBufferFontDBLoad(fontfp);
   fclose(fontfp);
  }
 
  if (fontdb==NULL) {
   fprintf(stderr,"Could not load fonts.\n");
   exit(-1);
  }


  if (ststr !=NULL) stid=RadarGetID(network,ststr);
  for (stnum=0;stnum<network->rnum;stnum++) 
     if (stid==network->radar[stnum].id) break;  
  if (stnum==network->rnum) stnum=0;



  /* now determine our output type */

  if (psflg) pflg=1;
  if (xmlflg) gflg=1;
  if (ppmflg) gflg=1;
  if (ppmxflg) gflg=1;
  if (pngflg) gflg=1;

#ifdef _XLIB_ 
   if (xd !=0) {
     pflg=0; 
     gflg=1;
   }
#endif

  if (pflg) gflg=0;
  if ((!gflg) && (!pflg)) pflg=1;

  plot=PlotMake();
  splot=SplotMake();
  SplotSetPlot(plot,splot);

  if (gflg) SplotSetFrameBuffer(splot,&img,fontdb,NULL,NULL);
  if (pflg) {
    psdata=PostScriptMake();
    PostScriptSetText(psdata,stream,stdout);
    SplotSetPostScript(splot,psdata,0,xpoff,ypoff);
  }



  PlotDocumentStart(plot,"fov_plot",NULL,wdt,hgt,24);
  PlotPlotStart(plot,"fov_plot",wdt,hgt,24);

  PlotRectangle(plot,NULL,0,0,wdt,hgt,1,bgcol,0x0f,0,NULL);
     
  if (fmapflg) {
      if ((cylind) || (sqflg)) PlotRectangle(plot,NULL,pad,pad,
                               wdt-2*pad,hgt-2*pad,  
                             1,seacol,0x0f,0,NULL);
      PlotEllipse(plot,NULL,wdt/2,hgt/2,wdt/2-pad,hgt/2-pad,
                   1,seacol,0x0f,0,NULL);
  }

  if ((grdflg) && (!grdontop)) {
    MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,
                                grdcol,0x0f,width,NULL,
                                pgrd,1);
  }

  if (fmapflg) {
    MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1,
                   lndcol,0x0f,0,NULL,pmap,1);
  
    MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1,
                   lndcol,0x0f,0,NULL,pmap,3);
  
    MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1,
                   seacol,0x0f,0,NULL,pmap,0);
  }

  if (ftrmflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,
                             1,ftrmcol,0x0f,0,NULL,ptrm,1);

  
  if (fofovflg) {
    for (i=0;i<network->rnum;i++) {
      if (network->radar[i].id==stid) continue;
      if (network->radar[i].status !=1) continue;
      MapPlotPolygon(plot,NULL,pad,pad,
                   wdt-2*pad,hgt-2*pad,1,fofovcol,0x0f,0,NULL,pfov,i); 
    }
  }

  if (fcfovflg) {
    for (i=0;i<network->rnum;i++) {
      if (network->radar[i].id==stid) continue;
      if (network->radar[i].status!=0) continue;
      MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,1,
                       fcfovcol,0x0f,0,NULL,pfov,i); 
    }
  }


   if (ffovflg) {
    MapPlotPolygon(plot,NULL,pad,pad,
                 wdt-2*pad,hgt-2*pad,1,ffovcol,0x0f,0,NULL,pfov,stnum); 
   }
  

  if (mapflg) {
     MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,cstcol,0x0f,
                    width,NULL,
                    pmap,1);
  
     MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,cstcol,0x0f,
                    width,NULL,
                    pmap,2);
  
     MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,cstcol,0x0f,
                    width,NULL,
                    pmap,0);
  }

  if (ofovflg)  {
    for (i=0;i<network->rnum;i++) {
      if (network->radar[i].id==stid) continue;
      if (network->radar[i].status !=1) continue;
      MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,
                    ofovcol,0x0f,width,NULL,
                    pfov,i);
    } 
  }

 if (cfovflg)  {
   
    for (i=0;i<network->rnum;i++) {
      if (network->radar[i].id==stid) continue;
      if (network->radar[i].status !=0) continue;
      MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,
                    cfovcol,0x0f,width,NULL,
                    pfov,i);
    } 
  }

 if (dotflg) {
   int s=0;
   struct RadarSite *site; 
   float pnt[2]; 
   if (cfovflg | fcfovflg)  {
     for (i=0;i<network->rnum;i++) {
       if (network->radar[i].id==stid) continue;
       if (network->radar[i].status !=0) continue;
       site=RadarYMDHMSGetSite(&(network->radar[i]),yr,mo,dy,hr,mt,sc);
       pnt[0]=site->geolat;
       pnt[1]=site->geolon; 
       s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg);
       if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad),
                    pad+pnt[1]*(hgt-2*pad),dotr,dotr,
                    1,fcfovcol,0x0f,0,NULL);
           
     } 
   }
   if (ofovflg | fofovflg)  {
     for (i=0;i<network->rnum;i++) {
       if (network->radar[i].id==stid) continue;
       if (network->radar[i].status !=1) continue;
       site=RadarYMDHMSGetSite(&(network->radar[i]),yr,mo,dy,hr,mt,sc);
       pnt[0]=site->geolat;
       pnt[1]=site->geolon; 
       s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg);
       if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad),
                    pad+pnt[1]*(hgt-2*pad),dotr,dotr,
                    1,fofovcol,0x0f,0,NULL);
           
     } 
   }

   if (fovflg) {
     
     site=RadarYMDHMSGetSite(&(network->radar[stnum]),yr,mo,dy,hr,mt,sc);
     pnt[0]=site->geolat;
     pnt[1]=site->geolon; 
     s=(*tfunc)(sizeof(float)*2,pnt,2*sizeof(float),pnt,marg);
     if (s==0) PlotEllipse(plot,NULL,pad+pnt[0]*(wdt-2*pad),
                    pad+pnt[1]*(hgt-2*pad),dotr,dotr,
                    1,ffovcol,0x0f,0,NULL);
   }


 }

  if (fovflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,
                    fovcol,0x0f,width,NULL,
                    pfov,stnum);

  if (bndflg) MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,
                                bndcol,0x0f,width,NULL,
                                pbnd,-1);

  if (trmflg) MapPlotOpenPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,
                                trmcol,0x0f,width,NULL,
                                ptrm,1);

  if (tmkflg) MapPlotPolygon(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,0,
                                tmkcol,0x0f,width,NULL,
                                ptmk,1);

  if ((grdflg) && (grdontop)) {
    MapPlotPolygon(plot,NULL,0,0,wdt-2*pad,hgt-2*pad,0,
                                grdcol,0x0f,width,NULL,
                                pgrd,1);
  }


  if ((cylind) || (sqflg)) 
     PlotRectangle(plot,NULL,pad,pad,wdt-2*pad,hgt-2*pad,
               0,grdcol,0x0f,width,NULL);
  else PlotEllipse(plot,NULL,wdt/2,hgt/2,wdt/2-pad,hgt/2-pad,
               0,grdcol,0x0f,width,NULL);

  if (tlblflg){
      if (lat>0) plot_time_label(plot,pad,pad,wdt-2*pad,hgt-2*pad,
				 90,flip,tsfx,
                                 lon-tme_shft*(! rotflg),
                                 (wdt/2)-pad,6,
                                 txtcol,0x0f,fontname,fontsize,fontdb);
      else plot_time_label(plot,pad,pad,wdt-2*pad,hgt-2*pad,
			   -90,flip,tsfx,
                           lon-tme_shft*(! rotflg),
                           (wdt/2)-pad,6,
                           txtcol,0x0f,fontname,fontsize,fontdb);
  }

  PlotPlotEnd(plot);  
  PlotDocumentEnd(plot);

  if (!gflg) exit(0);
  if (img==NULL) {
    fprintf(stderr,"Nothing to plot.\n");
    exit(-1);
  }

#ifdef _XLIB_
  if (xd !=0) {
    dp=XwinOpenDisplay(display_name,&xdf);
 
    if (dp==NULL) {
      fprintf(stderr,"Could not open display.\n");
      exit(-1);
    }

    if (xdoff==-1) xdoff=(dp->wdt-img->wdt)/2;
    if (ydoff==-1) ydoff=(dp->hgt-img->hgt)/2;


    win=XwinMakeWindow(xdoff,ydoff,img->wdt,img->hgt,0,
                       dp,wname,
                       wname,argv[0],wname,argc,argv,&xdf);
    if (win==NULL) {
      fprintf(stderr,"Could not create window.\n");
      exit(-1);
    }

    XwinFrameBufferWindow(img,win);

    XwinShowWindow(win);

    XwinDisplayEvent(dp,1,&win,1,NULL);

    XwinFreeWindow(win);
    XwinCloseDisplay(dp);
  } else {
    if (xmlflg==1) FrameBufferSaveXML(img,stream,stdout);
    else if (ppmflg==1) FrameBufferSavePPM(img,stdout);
    else if (ppmxflg==1)  FrameBufferSavePPMX(img,stdout);
    else FrameBufferSavePNG(img,stdout);
  }
  #else 
    if (xmlflg==1) FrameBufferSaveXML(img,stream,stdout);
    else if (ppmflg==1) FrameBufferSavePPM(img,stdout);
    else if (ppmxflg==1) FrameBufferSavePPMX(img,stdout);
    else FrameBufferSavePNG(img,stdout); 
  #endif
    return 0;
}  
Exemplo n.º 2
0
void plot_plasma(struct Grplot *grplot,int p,struct plasmadata *plasma,
              double stime,double etime,int mode,int *pflg,
              unsigned int color,float width,char *fontname,
              float fontsize) {

 int i;
 int flg=0;
 float *V;
 float ylim=50;
 float yxlim=1000;
 float ymajor=20;
 float yxmajor=200;
 float yplim=10.0;
 float ypmajor=2;
 int o=0;
 float ox=0,oy=0,px,py;

 unsigned int gry;
 gry=PlotColor(128,128,128,255);

 if (strcmp(plasma->sat,"ge")==0) {
   ylim=150;
   ymajor=50;
 }

 if (pflg[0]) o++;
 if (pflg[1]) o++;
 if (pflg[2]) {
   GrplotYzero(grplot,p+o,-1,1,gry,0x0f,width,NULL); 
   o++;
 }
 if (pflg[3]) {
   GrplotYzero(grplot,p+o,-1,1,gry,0x0f,width,NULL); 
   o++;
 }

 o=0;

 if (pflg[0]) {
   char *title="Pressure (nPa)";
   GrplotYaxis(grplot,p,0,yplim,ypmajor,0,0x03,color,0x0f,width);
   GrplotYaxisLabel(grplot,p,0,yplim,ypmajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
   GrplotYaxisTitle(grplot,p,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
   o++;
 }
 if (pflg[1]) {
   char *title="Vx (km/s)";
   GrplotYaxis(grplot,p+o,0,yxlim,yxmajor,0,0x03,color,0x0f,width);
   GrplotYaxisLabel(grplot,p+o,0,yxlim,yxmajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
   GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
   o++;
 }
 if (pflg[2]) {
   char *title="Vy (km/s)";
   GrplotYaxis(grplot,p+o,-ylim,ylim,ymajor,0,0x03,color,0x0f,width);
   GrplotYaxisLabel(grplot,p+o,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
   GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);

   o++;
 }
 if (pflg[3]) {
   char *title="Vz (km/s)";
   GrplotYaxis(grplot,p+o,-ylim,ylim,ymajor,0,0x03,color,0x0f,width);
   GrplotYaxisLabel(grplot,p+o,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
   GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
   o++;
 }


 o=0;

 if (pflg[0]) {  
   flg=0;
   for (i=0;i<plasma->cnt;i++) {
       
      if (fabs(plasma->pre[i])<1.e6) {
        px=plasma->time[i]-stime;
        py=plasma->pre[i];
        if (py>yplim) py=yplim;
        if (flg==1) GrplotLine(grplot,p,ox,oy,px,py,
                               0,etime-stime,0,yplim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;
    }
   o++;
 }

 if (pflg[1]) {
   flg=0;
   for (i=0;i<plasma->cnt;i++) {
      if (mode==0) V=&plasma->VGSM[3*i]; 
      else V=&plasma->VGSE[3*i]; 

      if (fabs(V[0])<1.e6) {
        px=plasma->time[i]-stime;
        py=fabs(V[0]);
        if (py>yxlim) py=yxlim;
        if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,0,yxlim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;
    }
   o++;
  }
  if (pflg[2]) {
    flg=0;
    for (i=0;i<plasma->cnt;i++) {
      if (mode==0) V=&plasma->VGSM[3*i]; 
      else V=&plasma->VGSE[3*i];   

      if (fabs(V[1])<1e6) {
        px=plasma->time[i]-stime;
        py=V[1];
        if (py>ylim) py=ylim;
        if (py<-ylim) py=-ylim;
        if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,-ylim,ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;
        flg=1;  
      } else flg=0;
    }
    o++;
  }
  if (pflg[2]) {
    flg=0;
    for (i=0;i<plasma->cnt;i++) {
      if (mode==0) V=&plasma->VGSM[3*i]; 
      else V=&plasma->VGSE[3*i];   

      if (fabs(V[2])<1e6) {
        px=plasma->time[i]-stime;
        py=V[2];
        if (py>ylim) py=ylim;
        if (py<-ylim) py=-ylim;
        if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,-ylim,ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;
    }
    o++;
  }

}
Exemplo n.º 3
0
void plot_imf(struct Grplot *grplot,int p,struct imfdata *imf,
              double stime,double etime,int mode,int *pflg,
              unsigned int color,float width,char *fontname,
              float fontsize) {
   int i;
   int flg=0;  
   float *B;
   float mod;
   float ylim=0;
   double ymajor=10;  
   double y;   
   int o=0;

   float ox=0,oy=0,px=0,py=0;

   unsigned int gry;
   gry=PlotColor(128,128,128,255);

   if (pflg[0]) o++;
   if (pflg[1]) {
     GrplotYzero(grplot,p+o,-1,1,gry,0x0f,width,NULL); 
     o++;
   }
   if (pflg[2]) {
     GrplotYzero(grplot,p+o,-1,1,gry,0x0f,width,NULL); 
     o++;
   }
   if (pflg[3]) {
     GrplotYzero(grplot,p+o,-1,1,gry,0x0f,width,NULL); 
     o++;
   }

   for (i=0;i<imf->cnt;i++) {
     if (mode==0) B=&imf->BGSMc[3*i]; 
     else B=&imf->BGSEc[3*i]; 
     if (fabs(B[0])>500) continue;
     if (fabs(B[1])>500) continue;
     if (fabs(B[2])>500) continue;

     if (fabs(B[0])>ylim) ylim=fabs(B[0]);
     if (fabs(B[1])>ylim) ylim=fabs(B[1]);
     if (fabs(B[2])>ylim) ylim=fabs(B[2]);
   }

   y=0;
   while (y<ylim) y+=5;
   ylim=y;
   if (ylim>50) ylim=50; 

   o=0;

   if (pflg[0]) {
     char *title="|B| (nT)";
     GrplotYaxis(grplot,p,0,1.5*ylim,ymajor,0,0x03,color,0x0f,width);
     GrplotYaxisLabel(grplot,p,0,1.5*ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
     GrplotYaxisTitle(grplot,p,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
     o++;
   }
   if (pflg[1]) {
     char *title="Bx (nT)";
     GrplotYaxis(grplot,p+o,-ylim,ylim,ymajor,0,0x03,color,0x0f,width);
     GrplotYaxisLabel(grplot,p+o,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
     GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
     o++;
   }
   if (pflg[2]) {
     char *title="By (nT)";
     GrplotYaxis(grplot,p+o,-ylim,ylim,ymajor,0,0x03,color,0x0f,width);
     GrplotYaxisLabel(grplot,p+o,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
     GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
     o++;
   }
   if (pflg[3]) {
     char *title="Bz (nT)";
     GrplotYaxis(grplot,p+o,-ylim,ylim,ymajor,0,0x03,color,0x0f,width);
     GrplotYaxisLabel(grplot,p+o,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
     GrplotYaxisTitle(grplot,p+o,0x03,strlen(title),title,
                     fontname,fontsize,color,0x0f);
     o++;
   }



 
  o=0; 
  if (pflg[0]) {
    flg=0;
    for (i=0;i<imf->cnt;i++) {
   
      if (mode==0) B=&imf->BGSMc[3*i]; 
      else B=&imf->BGSEc[3*i];  

      mod=sqrt(B[0]*B[0]+B[1]*B[1]+B[2]*B[2]);
      if (mod<100) {
        px=imf->time[i]-stime;
        py=mod;
        if (py>1.5*ylim) py=1.5*ylim;
        if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,0,1.5*ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;   
    }
    o++;
  }
  if (pflg[1]) {
    flg=0;
    for (i=0;i<imf->cnt;i++) {
      if (mode==0) B=&imf->BGSMc[3*i]; 
      else B=&imf->BGSEc[3*i];   
      if (fabs(B[0])<500) {
         px=imf->time[i]-stime;
         py=B[0];
         if (py>ylim) py=ylim;
         if (py<-ylim) py=-ylim;
         if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,-ylim,ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;
    }
    o++;
  }
  if (pflg[2]) {
    flg=0;
    for (i=0;i<imf->cnt;i++) {
      if (mode==0) B=&imf->BGSMc[3*i]; 
      else B=&imf->BGSEc[3*i]; 

      if (fabs(B[1])<100) {
         px=imf->time[i]-stime;
         py=B[1];
         if (py>ylim) py=ylim;
         if (py<-ylim) py=-ylim;
         if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,-ylim,ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;

    }
    o++;
  }
  if (pflg[3]) {
    flg=0;
    for (i=0;i<imf->cnt;i++) {
      if (mode==0) B=&imf->BGSMc[3*i]; 
      else B=&imf->BGSEc[3*i];

      if (fabs(B[2])<100) {
        px=imf->time[i]-stime;
        py=B[2];
        if (py>ylim) py=ylim;
        if (py<-ylim) py=-ylim;
        if (flg==1) GrplotLine(grplot,p+o,ox,oy,px,py,
                               0,etime-stime,-ylim,ylim,
                               color,0x0f,width,NULL);
        ox=px;
        oy=py;  
        flg=1;
      } else flg=0;
    }
    o++;
  }

}
Exemplo n.º 4
0
void plot_pos(struct Grplot *grplot,int p,
              struct posdata *pos,double stime,double etime,int mode,
              unsigned int color,float width,char *fontname,
              float fontsize) {
 float *P;
 int i;
 int flg;
 float ylim=0;  
 double ymajor=100;
 double yminor=100/5;
 double y;   
 int km=0;
 float mult=1;
 float ox=0,oy=0,px=0,py=0;
 float tx,ty;
 unsigned int gry;
 unsigned int red;
 unsigned int blue;

 struct PlotDash *dashA;
 struct PlotDash *dashB;

 dashA=PlotMakeDashString("4 4");
 dashB=PlotMakeDashString("4 2 1 2");

 gry=PlotColor(128,128,128,255);
 red=PlotColor(255,0,0,255);
 blue=PlotColor(0,0,255,255);

 GrplotYzero(grplot,p,-1,1,gry,0x0f,width,NULL); 
 
 for (i=0;i<pos->cnt;i++) {
     if (mode==0) P=&pos->PGSM[3*i]; 
     else P=&pos->PGSE[3*i]; 
  
     if (fabs(P[0])>500) continue;
     if (fabs(P[1])>500) continue;
     if (fabs(P[2])>500) continue;

     if (fabs(P[0])>ylim) ylim=fabs(P[0]);
     if (fabs(P[1])>ylim) ylim=fabs(P[1]);
     if (fabs(P[2])>ylim) ylim=fabs(P[2]);
   }
   if (ylim<2) { /* plot in km */
     km=1;
     mult=6370.0;
     ylim=ylim*6370;
     y=0;
     while (y<ylim) y+=1000;
     ylim=y;
     ymajor=1000;
     yminor=1000/5;
     
   } else if (ylim<60) {
     y=0;
     while (y<ylim) y=y+20;
     ylim=y;
     ymajor=20;
     yminor=20/4;
   } else {
     y=0;
     while (y<ylim) y=y+50;
     ylim=y;
     ymajor=100;
     yminor=100/5;
   }

   GrplotYaxis(grplot,p,-ylim,ylim,ymajor,yminor,0x03,color,0x0f,width);
   if (km==0) {
      GrplotYaxisLabel(grplot,p,-ylim,ylim,ymajor,0x03,label_val,NULL,fontname,
                     fontsize,color,0x0f);
      GrplotYaxisTitle(grplot,p,0x03,strlen("Pos (RE)"),"Pos (RE)",
                     fontname,fontsize,color,0x0f);
   } else {
      GrplotYaxisLabel(grplot,p,-ylim,ylim,ymajor,0x03,label_km,NULL,fontname,
                     fontsize,color,0x0f);
      GrplotYaxisTitle(grplot,p,0x03,strlen("Pos (km)"),"Pos (km)",
                     fontname,fontsize,color,0x0f);
   }
   GrplotGetPoint(grplot,p,0,1,0,1,0,1,&tx,&ty);
   PlotLine(grplot->plot,tx+5,ty+5,tx+20,ty+5,color,0x0f,width,NULL);
   PlotLine(grplot->plot,tx+35,ty+5,tx+50,ty+5,red,0x0f,width,dashA);
   PlotLine(grplot->plot,tx+65,ty+5,tx+80,ty+5,blue,0x0f,width,dashB);

   PlotText(grplot->plot,NULL,fontname,fontsize,
             tx+22,ty+10,strlen("X"),"X",blue,0x0f,1);
   PlotText(grplot->plot,NULL,fontname,fontsize,
             tx+52,ty+10,strlen("Y"),"Y",blue,0x0f,1);
   PlotText(grplot->plot,NULL,fontname,fontsize,
             tx+82,ty+10,strlen("Z"),"Z",blue,0x0f,1);


  flg=0;
  for (i=0;i<pos->cnt;i++) { 
    if (mode==0) P=&pos->PGSM[3*i]; 
    else P=&pos->PGSE[3*i];  
    if (fabs(P[0])<500) {
      px=pos->time[i]-stime;
      py=P[0]*mult;
      if (flg==1) GrplotLine(grplot,p,ox,oy,px,py,
                           0,etime-stime,-ylim,ylim,
                           color,0x0f,width,NULL);
      ox=px;
      oy=py;
      flg=1;
    } else flg=0;
  }

  flg=0;
  for (i=0;i<pos->cnt;i++) { 
    if (mode==0) P=&pos->PGSM[3*i]; 
    else P=&pos->PGSE[3*i];  
    if (fabs(P[1])<500) {
      px=pos->time[i]-stime;
      py=P[1]*mult;
      if (flg==1) GrplotLine(grplot,p,ox,oy,px,py,
                           0,etime-stime,-ylim,ylim,
                           red,0x0f,width,dashA);
      ox=px;
      oy=py;
      flg=1;
    } else flg=0;
  }

  flg=0;
  for (i=0;i<pos->cnt;i++) { 
    if (mode==0) P=&pos->PGSM[3*i]; 
    else P=&pos->PGSE[3*i];  
    if (fabs(P[2])<500) {
      px=pos->time[i]-stime;
      py=P[2]*mult;
      if (flg==1) GrplotLine(grplot,p,ox,oy,px,py,
                           0,etime-stime,-ylim,ylim,
                           blue,0x0f,width,dashB);
      ox=px;
      oy=py;
      flg=1;
    } else flg=0;
  }
  PlotFreeDash(dashA);
  PlotFreeDash(dashB);

}