xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From thomas.dewe...@kodak.com
Subject RE: AW: Translations with zoom in and zoom out?
Date Wed, 19 Oct 2005 14:08:18 GMT
Hi Michael,

   If you are willing to ignore rotation you can get the X/Y scale from 
the viewBox Affine Transform
(AffineTransform.getScaleX(), AffineTransform.getScaleY()), these can then 
be used to scale the
font-size for example.

   You could also use the 'transform' attribute with a 'matrix(...)' to 
directly apply the inverse viewBox
transform to the text, which would allow you to 'skip' the mapping of the 
x & y coords (although at
some loss to the readability of the SVG).

"Bishop, Michael W. CONTR J9C880" <Michael.Bishop@je.jfcom.mil> wrote on 
10/19/2005 09:53:13 AM:

> Yeah, this seems to do the trick for points.  You lost me with
> GeneralPath, but I currently create polylines with an ArrayList of
> Point2D objects, so I can go from there and get the transform.
> 
> Still stumped on fonts though; I can get the x,y coordinate to place the
> font, but I'm not sure how to transform it properly in regards to a
> zoomed JSVGCanvas.
> 
> Michael Bishop
> 
> -----Original Message-----
> From: thomas.deweese@kodak.com [mailto:thomas.deweese@kodak.com] 
> Sent: Wednesday, October 19, 2005 5:36 AM
> To: batik-users@xmlgraphics.apache.org
> Subject: Re: AW: Translations with zoom in and zoom out?
> 
> Hi all,
> 
>    Is there a reason you don't use the 'transform' methods that are
> built 
> into 
> the AffineTransform class?  These would seem to be much easier than all
> of this:
> 
> Point2D transform(Point2D ptSrc, Point2D ptDst)
> 
>   There are also a bunch that tack arrays of source and dst points, that
> would probably be really useful for a polyline (BTW a polyline can be
> done with GeneralPath, just use lineto commands).
> 
> "Steiner, Dominik" <Dominik.Steiner@gigatronik.com> wrote on 10/19/2005 
> 02:57:07 AM:
> 
> > Hi Michael,
> > 
> > for converting a Point I do as follows:
> > 
> >   public static Float convertPointToViewBox(SVGCanvas canvas, Point 
> point) {
> >     try {
> >       AffineTransform viewBoxTranfrom = canvas.getViewBoxTransform();
> >       viewBoxTranfrom = viewBoxTranfrom.createInverse();
> >       return convertPoint(point, viewBoxTranfrom);
> >     } catch (NoninvertibleTransformException e) {
> >       e.printStackTrace();
> >     }
> >     return null;
> >   }
> > 
> >   private static Point2D.Float convertPoint(Point point,
> AffineTransform 
> 
> > viewBoxTranfrom) {
> >     double[] matrix = new double[6];
> >     viewBoxTranfrom.getMatrix(matrix);
> >     return convertPoint(point, matrix);
> >   }
> > 
> >   public static Point2D.Float convertPoint(Point point,
> >       double[] matrix) {
> >     Point2D.Float retP = new Point2D.Float();
> >     retP.x = (float) (matrix[0] * point.x + matrix[2] * point.y + 
> matrix[4]);
> >     retP.y = (float) (matrix[1] * point.x + matrix[3] * point.y + 
> matrix[5]);
> >     return retP;
> >   }
> > 
> > I hope this helps? J
> > 
> > Dominik Steiner
> > 
> > 
> > Von: Bishop, Michael W. CONTR J9C880 
> [mailto:Michael.Bishop@je.jfcom.mil] 
> > Gesendet: Dienstag, 18. Oktober 2005 19:02
> > An: batik-users@xmlgraphics.apache.org
> > Betreff: RE: Translations with zoom in and zoom out?
> > 
> > Oops, forgot Line2D falls in the Shape category.  For the text and the
> 
> > polyline, I really have the same problem; the text is a single x,y 
> coordinate 
> > and the polyline is a set of x,y coordinates.  If I can figure out how
> 
> to 
> > translate those, I should be in good shape.
> > 
> > Michael Bishop
> > 
> > 
> > From: Bishop, Michael W. CONTR J9C880 
> [mailto:Michael.Bishop@je.jfcom.mil]
> > Sent: Tue 10/18/2005 12:57 PM
> > To: batik-users@xmlgraphics.apache.org
> > Subject: RE: Translations with zoom in and zoom out?
> > That is precisely what I needed.  I was using JSVGCanvas.
> > getRenderingTransform() and that didn't quite work.  That works for my
> 
> boxes 
> > and ellipses, but is there a similar school of thought, using the 
> > AffineTransform for Line2D, a set of points (later used to create a 
> polyline) and text??
> > 
> > Michael Bishop
> > 
> > 
> > From: Steiner, Dominik [mailto:Dominik.Steiner@gigatronik.com]
> > Sent: Tue 10/18/2005 7:46 AM
> > To: batik-users@xmlgraphics.apache.org
> > Subject: AW: Translations with zoom in and zoom out?
> > Hi Michael,
> > 
> > I?m not sure if this helps you, but I would suggest that you transform
> 
> the 
> > screen coordinates to viewbox coordinates. I first let the user draw
> on 
> screen
> > coordinates and when he finished I do the transformation to viewbox 
> > coordinates as follows:
> > 
> >   public static Shape scaleShapeToViewbox(Shape shape, SVGCanvas
> canvas) 
> {
> >     try {
> >       AffineTransform at =
> canvas.getViewBoxTransform().createInverse();
> >       shape = at.createTransformedShape(shape);
> >     } catch (NoninvertibleTransformException e1) {
> >       e1.printStackTrace();
> >     }
> >     return shape;
> >   }
> > 
> > So this works for my Java2D shapes?.
> > I hope it helps?
> > 
> > Dominik
> > 
> > Von: Bishop, Michael W. CONTR J9C880 
> [mailto:Michael.Bishop@je.jfcom.mil] 
> > Gesendet: Montag, 17. Oktober 2005 20:44
> > An: batik-users@xmlgraphics.apache.org
> > Betreff: Translations with zoom in and zoom out?
> > 
> > OK, so I have the JSVGCanvas zooming in and zooming out.  Since I have
> a 
> 
> > whiteboard application, users can draw objects to the canvas.  Much
> like 
> 
> > typical art programs, you get an ?outline? of what you?re going to
> draw 
> before
> > it?s placed.  For a box, you click, drag the mouse to the desired size
> 
> and 
> > release.  I guess they call it ?rubber-banding? or whatever.
> > 
> > On to my question.  When the canvas is zoomed in/zoomed out, how can I
> 
> get the
> > translation correct on the glass pane?  The glass pane is currently 
> drawing 
> > based on the coordinates of the JSVGCanvas, but it draws as if the 
> JSVGCanvas 
> > isn?t zoomed in or out.  In short, what the glass pane is rendering is
> 
> not 
> > zoomed, but what the JSVGCanvas is rendering is.  So what you see
> isn?t 
> what 
> > you get when you let go of the mouse.  How can I translate my shapes 
> based on 
> > the zoom?  If I draw something on a canvas that is zoomed in 20%, I?d 
> like to 
> > scale the outline 20%...etc.  That degree of scaling is what I don?t 
> know how to get.
> > 
> > Michael Bishop
> 
> ---------------------------------------------------------------------
> 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