Sure, I don't give the users the ability to rotate text (yet) so that's no problem. On my glass pane, I call Graphics2D.setFont(...) and Graphics2D.drawString(...) to render the text. To transform to an Element, I manually create the tag information, including font-family, font-weight, font-style, and font-size. So if the user has 18pt font chosen, I can use the AffineTransform.getScaleY() to change the point size? That makes sense, but what about the width? I'm still shooting for having what you see on the glass pane mirror what you see when you draw to the document.
Michael Bishop -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 19, 2005 10:08 AM To: [email protected] Cc: [email protected] Subject: RE: AW: Translations with zoom in and zoom out? 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" <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: Wednesday, October 19, 2005 5:36 AM > To: [email protected] > 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" <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED] > > Gesendet: Dienstag, 18. Oktober 2005 19:02 > > An: [email protected] > > 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:[EMAIL PROTECTED] > > Sent: Tue 10/18/2005 12:57 PM > > To: [email protected] > > 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:[EMAIL PROTECTED] > > Sent: Tue 10/18/2005 7:46 AM > > To: [email protected] > > 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:[EMAIL PROTECTED] > > Gesendet: Montag, 17. Oktober 2005 20:44 > > An: [email protected] > > 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: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
