undef("mapzoom") procedure mapzoom( plot[1]:graphic, ; XyPlot instance lat[1]:float, ; x coordinate to zoom arround lon[1]:float, ; y coordinate to zoom arround scale[1]:integer ; scale factor to zoom by ) local x0, ; holds original x coordinate of plot viewport y0, ; holds original x coordinate of plot viewport height0, ; holds original height value for the plot viewport width0, ; holds original width value for the plot viewport centerx, ; holds the NDC values of the data parameter x centery, ; holds the NDC values of the data parameter y xl, ; holds the new NDC x value for upper left corner xr, ; holds the new NDC x value for upper left corner yt, ; holds the new NDC x value for upper left corner yb, ; holds the new NDC x value for upper left corner deltax, ; NDC spacing from center point deltay, ; NDC spacing from center point new_left, ; NDC spacing from center point new_right, ; NDC spacing from center point new_top, ; NDC spacing from center point new_bottom, ; NDC spacing from center point xd_min1, ; Final minimum x data coordiante yd_min1, ; Final minimum y data coordiante xd_max1, ; Final maximum data coordiante yd_max1, ; Final maximum data coordiante x, ; Holds longitude y ; Holds latitude begin if(NhlClassName(mp).eq.mapPlotClass) x = lon y = lat ; ; First retrieve original values ; getvalues plot "vpXF" : x0 "vpYF" : y0 "vpHeightF" : height0 "vpWidthF" : width0 end getvalues ; ; Allocate temporary variables ; centerx = new(1,float) centery = new(1,float) xl = new(1,float) xr = new(1,float) yt = new(1,float) yb = new(1,float) ; ; compute NDC coordinate around which the center will ; be. datatondc(plot,x,y,centerx,centery) getvalues plot "mpCenterLatF" : cla "mpCenterLonF" : cln end getvalues ; ; Determine NDC height and width offsets ; deltax = width0 / (2.0 * scale) deltay = height0 / (2.0 * scale) ; ; Compute new NDC edges of plot ; new_left = centerx - deltax new_right = centerx + deltax new_top = centery + deltay new_bottom = centery - deltay setvalues plot "mpLimitMode" : "NDC" "mpLeftNDCF" : new_left "mpRightNDCF" : new_right "mpBottomNDCF" : new_bottom "mpTopNDCF" : new_top end setvalues end if end