You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Mathieu Pedrero <ma...@gmail.com> on 2009/06/16 14:30:00 UTC

Re: About setRenderingTransform() method from JSVGCanvas!

I need to be more precise:

Here is the method I call (which is supposed to
1) keep the current Affine transform applied to the canvas
2) load the "document" to the canvas (it's the same document that was
displayed before: the only changes are some svg groupments which are hidden
in this new version of the document. That's why i would like to keep the
former affine transform applied).
3) apply the Affine transform.

    public void actionPerformed(ActionEvent arg0) {
        modification();
        AffineTransform at =
Main.fenetre.getCanvas().getRenderingTransform();
        Main.fenetre.mAJCanvas(); //equivalent to a
setSVGDocument(document). mAJCanvas() is defined previously.
        Main.fenetre.getCanvas().setRenderingTransform(at);
    }


Moreover, when i try to print the Affine Transforms (as it is done in the
following method), the former affine transform is applied, but only for a
few seconds. The SVGCanvas returns to an Identyty renderingTransform.

public void actionPerformed(ActionEvent arg0) {
        modification();
        AffineTransform at =
Main.fenetre.getCanvas().getRenderingTransform();
        System.out.println(at);
        Main.fenetre.mAJCanvas();
        Main.fenetre.getCanvas().setRenderingTransform(at);
        AffineTransform test =
Main.fenetre.getCanvas().getRenderingTransform();
        System.out.println(test);
    }

Can you help me please?

Thanks

--
Mathieu

2009/6/16 Mathieu Pedrero <ma...@centraliens-lille.org>

> Hi
>
> I would like to apply an affine transform to my jsvg canvas. Unfortunately,
> when I try to use the method setRenderingTransform(newAffineTransform) of my
> canvas, the newAffineTransform is no applied!
>
> Can you help me please?
>
> Thanks!
>
> --
> Mathieu
>

RE: About setRenderingTransform() method from JSVGCanvas!

Posted by "Bishop, Michael W. CTR USJFCOM JFL" <mi...@jfcom.mil>.
Hi Mathieu,
 
A couple of things.  If you're just modifying the document, you can make your modifications in a Thread run in the JSVGCanvas's UpdateManager and have your updates be shown without having to mess with the current transform:
 
JSVGCanvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(someThread);
 
If that's not possible and you absolutely need to mess with the rendering transform you should do something like this:
 
Store the current rendering transform.
Load the (new) document.
* Wait for the GVT tree to render.
Reapply the stored rendering transform.
 
What's happening to you is that you're applying the stored transform, then the document finishes loading and the default rendering transform is applied.
 
* This is how to wait for the GVT tree to render.
 
public class GVTClass extends GVTTreeRendererAdapter {
    public void gvtRenderingCompleted(GVTTreeRendererEvent event) {
       // Set your transform to the canvas here.
    }
}
 
There may be a better solution; in this case, the default transform is briefly shown before the old one is applied.
 
Michael

________________________________

From: Mathieu Pedrero [mailto:mathieu.pedrero@gmail.com]
Sent: Tue 6/16/2009 8:30 AM
To: batik-users@xmlgraphics.apache.org
Subject: Re: About setRenderingTransform() method from JSVGCanvas!


I need to be more precise:

Here is the method I call (which is supposed to
1) keep the current Affine transform applied to the canvas
2) load the "document" to the canvas (it's the same document that was displayed before: the only changes are some svg groupments which are hidden in this new version of the document. That's why i would like to keep the former affine transform applied).
3) apply the Affine transform.

    public void actionPerformed(ActionEvent arg0) {
        modification();
        AffineTransform at = Main.fenetre.getCanvas().getRenderingTransform();
        Main.fenetre.mAJCanvas(); //equivalent to a setSVGDocument(document). mAJCanvas() is defined previously.
        Main.fenetre.getCanvas().setRenderingTransform(at);
    }


Moreover, when i try to print the Affine Transforms (as it is done in the following method), the former affine transform is applied, but only for a few seconds. The SVGCanvas returns to an Identyty renderingTransform.

public void actionPerformed(ActionEvent arg0) {
        modification();
        AffineTransform at = Main.fenetre.getCanvas().getRenderingTransform();
        System.out.println(at);
        Main.fenetre.mAJCanvas();
        Main.fenetre.getCanvas().setRenderingTransform(at);
        AffineTransform test = Main.fenetre.getCanvas().getRenderingTransform();
        System.out.println(test);
    }

Can you help me please?

Thanks

--
Mathieu


2009/6/16 Mathieu Pedrero <ma...@centraliens-lille.org>


	Hi
	
	I would like to apply an affine transform to my jsvg canvas. Unfortunately, when I try to use the method setRenderingTransform(newAffineTransform) of my canvas, the newAffineTransform is no applied!
	
	Can you help me please?
	
	Thanks!
	
	--
	Mathieu