예제 #1
0
void plot_cell(struct Rplot *rplot,
               struct GridData *ptr,float latmin,int magflg,
               float xoff,float yoff,float wdt,float hgt,
               int (*trnf)(int,void *,int,void *,void *data),void *data,
               unsigned int(*cfn)(double,void *),void *cdata,
               int cprm) {


  int i,s,nlon;
  double lon,lat,lstp;
 
  unsigned int color=0;
  float px[4],py[4];
  int t[4]={0,0,0,0};

  for (i=0;i<ptr->vcnum;i++) {
    if (cfn !=NULL) {
      if (cprm==0) color=(*cfn)(ptr->data[i].pwr.median,cdata);
      else color=(*cfn)(ptr->data[i].wdt.median,cdata);
    }
    lon=ptr->data[i].mlon;
    lat=ptr->data[i].mlat;
    if (lat<latmin) continue;
    nlon=(int) (360*cos((lat-0.5)*PI/180)+0.5);
    lstp=360.0/nlon; 
    s=cell_convert(xoff,yoff,wdt,hgt,lat-0.5,lon-lstp/2,&px[0],&py[0],
                 magflg,trnf,data);
    if (s !=0) continue;
    s=cell_convert(xoff,yoff,wdt,hgt,lat-0.5,lon+lstp/2,&px[1],&py[1],
                 magflg,trnf,data);
    if (s !=0) continue;
    s=cell_convert(xoff,yoff,wdt,hgt,lat+0.5,lon+lstp/2,&px[2],&py[2],
                 magflg,trnf,data);
    if (s !=0) continue;
    s=cell_convert(xoff,yoff,wdt,hgt,lat+0.5,lon-lstp/2,&px[3],&py[3],
                 magflg,trnf,data);
    if (s !=0) continue;   
    RplotPolygon(rplot,NULL,0,0,4,px,py,t,1,color,0x0f,0,NULL);
    
        
    
  } 

}
예제 #2
0
int PlotRawBar(struct Rplot *ptr,
                float ox,float oy,float wdt,float hgt,
	        double ax,double ay,double w,double o,
		double xmin,double xmax,
	        double ymin,double ymax,int or,int fill,
                unsigned int color,unsigned char mask,float width,
                struct RplotDash *dash) {

 
  int i;
  float px[4],py[4];
  int t[4]={0,0,0,0};

  if ((or==3) || (or==4)) {
     px[0]=wdt*(ax+o-w-xmin)/(xmax-xmin);
     px[1]=wdt*(ax+o-w-xmin)/(xmax-xmin);
     px[2]=wdt*(ax+o+w-xmin)/(xmax-xmin);
     px[3]=wdt*(ax+o+w-xmin)/(xmax-xmin);
     py[1]=hgt*(ay-ymin)/(ymax-ymin);
     py[2]=hgt*(ay-ymin)/(ymax-ymin);
     if (or==3) py[0]=py[3]=0;
     else py[0]=py[3]=hgt;
  } else {
     py[0]=hgt*(ay-o-w-ymin)/(ymax-ymin);
     py[1]=hgt*(ay-o-w-ymin)/(ymax-ymin);
     py[2]=hgt*(ay-o+w-ymin)/(ymax-ymin);
     py[3]=hgt*(ay-o+w-ymin)/(ymax-ymin);
     px[1]=wdt*(ax-xmin)/(xmax-xmin);
     px[2]=wdt*(ax-xmin)/(xmax-xmin);
     if (or==1) px[0]=px[3]=0;
     else px[0]=px[3]=wdt;
  }
  
  for (i=0;i<4;i++) {
    if (px[i]<0) px[i]=0;
    if (py[i]<0) py[i]=0;
    if (px[i]>wdt) px[i]=wdt;
    if (py[i]>hgt) py[i]=hgt;
    px[i]+=ox;
    py[i]=oy+hgt-py[i];
  }
  return RplotPolygon(ptr,NULL,0,0,4,px,py,t,fill,color,mask,width,dash);
}
예제 #3
0
int PlotRawFill(struct Rplot *ptr,
                float ox,float oy,float wdt,float hgt,
                double ax,double ay,double bx,double by,
		double xmin,double xmax,
                double ymin,double ymax,int or,
                unsigned int color,unsigned char mask) {

  float px[4],py[4];
  int t[4]={0,0,0,0};

  float fax,fay,fbx,fby;
 
  fax=ox+wdt*(ax-xmin)/(xmax-xmin);
  fbx=ox+wdt*(bx-xmin)/(xmax-xmin);
  fay=oy+hgt-hgt*(ay-ymin)/(ymax-ymin);
  fby=oy+hgt-hgt*(by-ymin)/(ymax-ymin);
  
  if ((or==3) || (or==4)) {
    px[0]=fax;
    px[1]=fax;
    px[2]=fbx;
    px[3]=fbx;
    py[1]=fay;
    py[2]=fby;
    if (or==3) py[0]=py[3]=oy+hgt;
    else py[0]=py[3]=oy;
  } else {
    py[0]=fay;
    py[1]=fay;
    py[2]=fby;
    py[3]=fby;
    px[1]=fax;
    px[2]=fbx;
    if (or==1) px[0]=px[3]=ox;
    else px[0]=px[3]=ox+wdt;
  }
  return RplotPolygon(ptr,NULL,0,0,4,px,py,t,1,color,mask,0,NULL);



}
예제 #4
0
int PlotRawPolygon(struct Rplot *ptr,
                struct RplotMatrix *matrix,
                float ox,float oy,float wdt,float hgt,
		 double x,double y,int num,double *px,double *py,
                int *t,
		double xmin,double xmax,
                double ymin,double ymax,
                int fill,unsigned int color,unsigned char mask,float width,
                struct RplotDash *dash) {

  int s=0;
  float fx,fy;
  float *fpx,*fpy;
  int i;
  
  fpx=malloc(sizeof(float)*num);
  if (fpx==NULL) return -1;
  fpy=malloc(sizeof(float)*num);
  if (fpy==NULL) {
    free(fpx);
    return -1;
  }
 
  fx=ox+wdt*(x-xmin)/(xmax-xmin);
  fy=oy+hgt-hgt*(y-ymin)/(ymax-ymin);


  for (i=0;i<num;i++) {
    fpx[i]=wdt*px[i]/(xmax-xmin);
    fpy[i]=hgt*py[i]/(ymax-ymin);
  }

  s=RplotPolygon(ptr,matrix,fx,fy,num,fpx,fpy,t,fill,
                           color,mask,width,dash);
 
  free(fpx);
  free(fpy);
  return s;
}
예제 #5
0
int main(int argc,char *argv[]) {

  struct Rplot *rplot=NULL;

  float wdt=400,hgt=400;

  unsigned int bgcol=0xffffffff;
  unsigned int fgcol=0xff000000;

  int i,j,k;
  int type;
 
  float pnt[2]; 
  float *ptr;

  poly=PolygonMake(sizeof(float)*2,PolygonXYbbox);
 
  PolygonAddPolygon(poly,1);

  pnt[0]=0.1;
  pnt[1]=0.1;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.9;
  pnt[1]=0.1;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.9;
  pnt[1]=0.9;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.1;
  pnt[1]=0.9;
  PolygonAdd(poly,pnt,0);

  PolygonAddPolygon(poly,2);

  pnt[0]=0.2;
  pnt[1]=0.2;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.8;
  pnt[1]=0.2;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.5;
  pnt[1]=0.4;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.5;
  pnt[1]=0.6;
  PolygonAdd(poly,pnt,1);


  pnt[0]=0.8;
  pnt[1]=0.8;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.2;
  pnt[1]=0.8;
  PolygonAdd(poly,pnt,0);

 
  rplot=RplotMake();
  RplotSetText(rplot,stream,stdout);   
  RplotMakePlot(rplot,"MapPlotPolygon",wdt,hgt,24);

  RplotRectangle(rplot,NULL,0,0,wdt,hgt,
                  1,bgcol,0x0f,0,NULL);

  for (i=0;i<poly->polnum;i++) {
    type=PolygonReadType(poly,i);
    if (type==1) fgcol=RplotColor(255,0,0,255);
    if (type==2) fgcol=RplotColor(0,255,0,255);
    k=0;
    for (j=0;j<poly->num[i];j++) {
      if (PolygonReadOp(poly,i,j) !=0) {
        if (k !=0) RplotPolygon(rplot,NULL,0,0,k,fx,fy,t,
                  0,fgcol,0x0f,2,NULL);

	k=0;
      }
      ptr=(float *) PolygonRead(poly,i,j);
      fx[k]=ptr[0]*wdt;
      fy[k]=ptr[1]*hgt;
      t[k]=0;
      k++;
    }
    if (k !=0) RplotPolygon(rplot,NULL,0,0,k,fx,fy,t,
                  0,fgcol,0x0f,2,NULL);
  }

  RplotEndPlot(rplot);
  return 0;
}
예제 #6
0
int main(int argc,char *argv[]) {

  struct Rplot *rplot=NULL;

  float wdt=400,hgt=400;

  unsigned int bgcol=0xffffffff;
  unsigned int fgcol=0xff000000;

  int i,j;
  float x;
 
  float pnt[2]; 
  float *ptr;

  poly=PolygonMake(sizeof(float)*2,PolygonXYbbox);
 
  for (x=0.4;x>0.1;x-=0.1) {

    PolygonAddPolygon(poly,1);

    pnt[0]=0.5-x;
    pnt[1]=0.5-x;
    PolygonAdd(poly,pnt,0);

    pnt[0]=0.5-x;
    pnt[1]=0.5+x;
    PolygonAdd(poly,pnt,0);

    pnt[0]=0.5+x;
    pnt[1]=0.5+x;
    PolygonAdd(poly,pnt,0);

    pnt[0]=0.5+x;
    pnt[1]=0.5-x;
    PolygonAdd(poly,pnt,0);
  }

  copy=PolygonCopy(poly);
  PolygonFree(poly);


  rplot=RplotMake();
  RplotSetText(rplot,stream,stdout);  
  RplotMakeDocument(rplot,"PolygonCopy","1",wdt,hgt,24);
 
  RplotMakePlot(rplot,"PolygonCopy",wdt,hgt,24);

  RplotRectangle(rplot,NULL,0,0,wdt,hgt,
                  1,bgcol,0x0f,0,NULL);

  for (i=0;i<copy->polnum;i++) {
  
    fgcol=RplotColor(239-i*16,239-i*16,239-i*16,255);
    for (j=0;j<copy->num[i];j++) {
      ptr=(float *) PolygonRead(copy,i,j);
      fx[j]=ptr[0]*wdt;
      fy[j]=ptr[1]*hgt;
      t[j]=0;
    }
    RplotPolygon(rplot,NULL,0,0,copy->num[i],fx,fy,t,
                  1,fgcol,0x0f,0,NULL);


  }

  RplotEndPlot(rplot);
  RplotEndDocument(rplot);
  return 0;
}
예제 #7
0
void plot_cell(struct Rplot *rplot,struct RadarBeam *sbm,
               struct GeoLocBeam *gbm,float latmin,int magflg,
               float xoff,float yoff,float wdt,float hgt,
               int (*trnf)(int,void *,int,void *,void *data),void *data,
               unsigned int(*cfn)(double,void *),void *cdata,
               int prm,unsigned int gscol,unsigned char gsflg) {

  int rng;
  unsigned int color=0;
  float px[4],py[4];
  int s=0;
  int t[4]={0,0,0,0};
  float map[2],pnt[2];
  for (rng=0;rng<sbm->nrang;rng++) {
    if (sbm->sct[rng]==0) continue;

    if (cfn !=NULL) {
      if (prm==1) color=(*cfn)(sbm->rng[rng].p_l,cdata);
      else if (prm==2)  color=(*cfn)(sbm->rng[rng].v,cdata);
      else color=(*cfn)(sbm->rng[rng].w_l,cdata);
    }
    
    if ((prm==2) && (gsflg) && (sbm->rng[rng].gsct !=0)) color=gscol;
   
    if (magflg) {
       map[0]=gbm->mlat[rng][0];
       map[1]=gbm->mlon[rng][0];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[0]=xoff+wdt*pnt[0];
       py[0]=yoff+hgt*pnt[1];     
       map[0]=gbm->mlat[rng][2];
       map[1]=gbm->mlon[rng][2];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[1]=xoff+wdt*pnt[0];
       py[1]=yoff+hgt*pnt[1];   
       map[0]=gbm->mlat[rng+1][2];
       map[1]=gbm->mlon[rng+1][2];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[2]=xoff+wdt*pnt[0];
       py[2]=yoff+hgt*pnt[1];     
       map[0]=gbm->mlat[rng+1][0];
       map[1]=gbm->mlon[rng+1][0];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[3]=xoff+wdt*pnt[0];
       py[3]=yoff+hgt*pnt[1];     
    } else {
       map[0]=gbm->glat[rng][0];
       map[1]=gbm->glon[rng][0];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[0]=xoff+wdt*pnt[0];
       py[0]=yoff+hgt*pnt[1];     
       map[0]=gbm->glat[rng][2];
       map[1]=gbm->glon[rng][2];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[1]=xoff+wdt*pnt[0];
       py[1]=yoff+hgt*pnt[1];   
       map[0]=gbm->glat[rng+1][2];
       map[1]=gbm->glon[rng+1][2];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[2]=xoff+wdt*pnt[0];
       py[2]=yoff+hgt*pnt[1];     
       map[0]=gbm->glat[rng+1][0];
       map[1]=gbm->glon[rng+1][0];
       s=(*trnf)(2*sizeof(float),map,2*sizeof(float),pnt,data);
       if (s !=0) continue;
       px[3]=xoff+wdt*pnt[0];
       py[3]=yoff+hgt*pnt[1];  
    }
   

    RplotPolygon(rplot,NULL,0,0,4,px,py,t,1,color,0x0f,0,NULL);
    
        
    
  } 
}
예제 #8
0
int main(int argc,char *argv[]) {

  struct Rplot *rplot=NULL;

  float wdt=400,hgt=400;

  unsigned int bgcol=0xffffffff;
  unsigned int fgcol=0xff000000;

  int i,j;
  int type;
 
  float pnt[2]; 
  float *ptr;

  float arg[1];

  poly=PolygonMake(sizeof(float)*2,PolygonXYbbox);
 
  PolygonAddPolygon(poly,1);

  pnt[0]=0.1;
  pnt[1]=0.1;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.9;
  pnt[1]=0.1;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.9;
  pnt[1]=0.9;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.1;
  pnt[1]=0.9;
  PolygonAdd(poly,pnt,0);

  PolygonAddPolygon(poly,2);

  pnt[0]=0.2;
  pnt[1]=0.5;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.5;
  pnt[1]=0.2;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.8;
  pnt[1]=0.5;
  PolygonAdd(poly,pnt,0);

  pnt[0]=0.5;
  pnt[1]=0.8;
  PolygonAdd(poly,pnt,0);

  arg[0]=30.0;

  npoly=PolygonTransform(poly,sizeof(float)*2,PolygonXYbbox,rotate,arg);

 
  rplot=RplotMake();
  RplotSetText(rplot,stream,stdout);
  RplotMakeDocument(rplot,"PolygonTransform","1",wdt,hgt,24);
  RplotMakePlot(rplot,"PolygonTransform",wdt,hgt,24);

  RplotRectangle(rplot,NULL,0,0,wdt,hgt,
                  1,bgcol,0x0f,0,NULL);

  for (i=0;i<npoly->polnum;i++) {
    type=PolygonReadType(npoly,i);
    if (type==1) fgcol=RplotColor(255,0,0,255);
    if (type==2) fgcol=RplotColor(0,255,0,255);

    for (j=0;j<npoly->num[i];j++) {
      ptr=(float *) PolygonRead(npoly,i,j);
      fx[j]=ptr[0]*wdt;
      fy[j]=ptr[1]*hgt;
      t[j]=0;
    }
    RplotPolygon(rplot,NULL,0,0,npoly->num[i],fx,fy,t,
                  1,fgcol,0x0f,0,NULL);
  }

  RplotEndPlot(rplot);
  RplotEndDocument(rplot);
  return 0;
}