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); } }
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); }
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); }
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; }
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; }
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; }
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); } }
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; }