Opened 16 years ago

Closed 12 years ago

#518 closed defect (fixed)

Zoom Rectangle calculation assumes lower-left to upper-right dragging in AJAX Viewer

Reported by: nclayton Owned by:
Priority: medium Milestone: 2.4
Component: AJAX Viewer Version: 2.1.0
Severity: minor Keywords: Zoom Rectangle
Cc: External ID:

Description

In ajaxmappage.templ, the code assumes that users will always go lower-left to upper-right when drawing the Zoom Rectangle box.

        pt1 = ScreenToMapUnits(x1, y1); 
        pt2 = ScreenToMapUnits(x2, y2); 

        mcsW = pt2.X - pt1.X; 
        mcsH = pt2.Y - pt1.Y; 

If a user (like myself) drags from upper-right to lower-left, mcsW and/or mcsH will be a negative value which will throw off the zoom operation.

By checking for a negative value then multiplying by -1 after the assignment will give accurate width and height values for the drawn box:

if(mcsW < 0){ mcsW = mcsW * -1; }
if(mcsH < 0){ mcsH = mcsH * -1; }

Once these values are corrected, you'll need to find the lower X,Y values:

var lowX = (pt1.X < pt2.X? pt1.X: pt2.X); 
var lowY = (pt1.Y < pt2.Y? pt1.Y: pt2.Y); 

Then calculate the view by adding the width/2 and height/2 values to the lowX and lowY values:

GotoView(lowX + mcsW/2, lowY + mcsH/2, scale, true, false); 

I have set the Severity to minor, but for myself this was a major issue and I resolved it in my file.

I have not ran across it, but there may be other areas where drag direction is assumed and could sometimes be inaccurate.

Change History (4)

comment:1 by jng, 15 years ago

Resolution: fixed
Status: newclosed

I guess this got fixed somewhere along the way, because I cannot reproduce on the trunk version.

comment:2 by nclayton, 14 years ago

Resolution: fixed
Status: closedreopened
Version: 2.0.02.1.0

This was still an issue in 2.1.0

The code in question is in the ExecuteRectangleTool function in ajaxmappane.templ The issue can be seen by zooming into an area and performing a zoom rectangle across an area. The returned image will be of a smaller portion of the area than selected. In some cases, this may be acceptable but others, but for others this isn't good. The changes stated above make the zoom rectangle accurate.

comment:3 by jng, 12 years ago

Milestone: 2.4

comment:4 by jng, 12 years ago

Resolution: fixed
Status: reopenedclosed

The code in ajaxmappane.templ has changed since then

mcsW and mcsH go through Math.abs() making negative values impossible

Note: See TracTickets for help on using tickets.