xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas DeWeese <Thomas.DeWe...@Kodak.com>
Subject Re: mouseClick behavior with translate attribute
Date Fri, 24 Sep 2004 10:10:52 GMT
Andres Toussaint wrote:

> how do you recover the actual visual coordinates of a rotated item in 
> the canvas?

     When you talk about coordinates you need to be clearer what
coodinate system you mean.  Also it isn't clear what you mean by
'item'.

> When you click on the item, it gives you the coordinates as if the 
> object was not translated, i imagine to keep the hotspot active, 
> regardless of the transformation.

    The Click clientX/Y attributes have the location of the click
relative to the upper left of the JSVGComponent.  It sounds a bit
like you want to transform this to the coordinate system of the
root SVG element (after the viewing transform - user pan/zoom/rotate
and after the viewBox transform - width/height -> viewBox).

> I need to get the actual translated (rotated) coordinates of the click 
> location (in reference to the full canvas) as well, since i am doing 
> some graphics 2D on top of my SVG. Is there a way to get these 
> coordinates, or shall i perform my own formulas?

    Essentially you should replace 'evt.getTarget()' with
the element you want the point to be in the user coordinate
system of. In this case I think you want the root SVG element.
It is possible that you don't want the viewBox transform in which
case you would need to combine 'getScreenCTM' with 'getCTM'
(read the SVG Spec on SVGLocatable for details).

> I am retrieving my coordinates by:
> 
> public class OnMoveAction implements EventListener {
>         public void handleEvent(Event evt) {
>             //Cast the event onto a Batik Mouse event, co we can get 
> ccordinates
>             DOMMouseEvent elEvt = (DOMMouseEvent)evt;
>             int nowToX = elEvt.getClientX();
>             int nowToY = elEvt.getClientY();
>             //convert it to a point for use with the Matrix
>             SVGOMPoint pt = new SVGOMPoint(nowToX, nowToY);
>             //Get the itemĀ„s screen coordinates, and apply the 
> transformation
>             SVGMatrix mat = 
> ((SVGLocatable)evt.getTarget()).getScreenCTM();  // elem -> screen
>             mat = mat.inverse();                  // screen -> elem
>             dragpt = (SVGOMPoint)pt.matrixTransform(mat);
>        ...
>        }
> }
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> For additional commands, e-mail: batik-users-help@xml.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-users-help@xml.apache.org


Mime
View raw message