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: AW: getbbox() and update view problems
Date Tue, 02 Aug 2005 09:37:03 GMT
Steiner, Dominik wrote:

> But I'm still not sure about 1)
> 
> SVGGraphicsElement graphics = (SVGGraphicsElement) element;
> box = graphics.getBBox();
> 
> // I get the BBox of my GraphicsElement
> 
> // But how can I use the mentioned getScreenCTM?
> 
> Matrix matrix = Graphics.getScreenCTM(); // and then???

    Create SVGPoint instances for each corner of the rect
(SVGSVGElement.createSVGPoint()). Then you can call
'pt.matrixTransform(matrix)' to map those points to your
destination coordinate system.  Then if you want a simple
bbox in that coordinate system you can use the min/max in X and Y
to construct the bounding box, or perhaps just use the points
as is.

> 
> Thank you again so much for your help... :-)
> 
> Dominik
> 
> 
> Hi Dominik, Andres,
> 
> Andres Toussaint wrote:
> 
> 
>>    1.) how do you get the bounding box of a graphical element from
> 
> the
> 
>>    svg-file that includes the transform?
>>
>>To my knowledge there is no easy way to recover the bounding box (over
> 
> 
>>the x,y axis of your canvas) of a transformed shape.
> 
> 
>     Well it depends on how tight you need the bounds.  So you can
> fairly simply get the BBox of the element in it's local coordinate
> system and then use getTransformToElement or getScreenCTM to map
> that bounding box to another coordinate system.  For 99% of uses
> this is good enough and makes more sense than taking the time to
> reproject all the points and recalculate the max/min for each
> segment.
> 
> 
>>The only way i can think of doing it involves retrieving the Java2D 
>>rendering of the element (from the GVTTree), create a new Java2D shape
> 
> 
>>with affineTransform.createTransformedShape and then query the bounds
> 
> of 
> 
>>that new shape. Care should be taken that all elements remain in the 
>>same coordinate space.
>>
>>Thomas: Where would be a the appropriate package to suggest inserting 
>>this kind of utility?
> 
> 
>     This functionality already exists in the form of the
> 'getTransformedBounds' call on the batik.gvt.GraphicsNode class.
> 
> 
>>    2.) when I change a node's attributes, the display doesn't update
>>    the view, only if I'm moving the mouse e.g . How can I tell my
>>    SVGCanvas to repaint itself? Or shouldn't it note that
>>    automatically? (My SVGCanvas is
>>    setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);)
> 
> 
>     Andres is right, please take the time to read the FAQ:
> 
> 	http://xml.apache.org/batik/faqs.html
> 	
>     In particular:
> 	"When I change the document in Java it only updates if I move
> 	 the mouse over the canvas?"
>       http://xml.apache.org/batik/faqs.html#faq-22
> 
> 
>>    I tried this
>>     
>>    Element elementById = rootElement.getElementById("id1");
>>    if (elementById != null) {
>>      elementById.setAttributeNS(null, "cx", new
> 
> Double(gps.x).toString());
> 
>>      elementById.setAttributeNS(null, "cy", new
> 
> Double(gps.y).toString());
> 
>>    }
>>     
>>
>>
>>You need to do your DOM changes in the UpdateManager Thread. You can
> 
> get 
> 
>>an instance of the UpdateManager thread, once the gvtRendeingCompleted
> 
> 
>>is called:
>>
>>svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
>>public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
>>...
>>}
>>public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
>>updateM = svgCanvas.getUpdateManager();
>>}
>>});
>>
>>
>>AND you use it like this:
>>
>>updateM.getUpdateRunnableQueue().invokeLater(new Runnable() {
>>public void run() {
>>// do your DOM changes here.
>>}
>>});
>>
>>Regards,
>>
>>Andres.
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
> For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
> For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org
> 


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


Mime
View raw message