1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g2d.elementclass.connection;
\r
14 import java.awt.geom.AffineTransform;
\r
15 import java.awt.geom.Path2D;
\r
16 import java.awt.geom.Point2D;
\r
17 import java.awt.geom.Rectangle2D;
\r
19 import org.simantics.g2d.element.IElement;
\r
20 import org.simantics.g2d.element.handler.InternalSize;
\r
21 import org.simantics.g2d.element.handler.BendsHandler;
\r
22 import org.simantics.g2d.element.handler.Move;
\r
23 import org.simantics.g2d.element.handler.Resize;
\r
24 import org.simantics.g2d.element.handler.Scale;
\r
25 import org.simantics.g2d.element.handler.Transform;
\r
28 * Implements Bounds, Scale, Move and Transform for edges.
\r
30 * @See {@link InternalSize}
\r
31 * @See {@link Scale}
\r
33 * @See {@link Transform}
\r
34 * @author Toni Kalajainen
\r
36 public class EdgeTransforms implements InternalSize, Resize, Scale, Move, Transform {
\r
38 private static final long serialVersionUID = -1675978959634691347L;
\r
39 public static final EdgeTransforms INSTANCE = new EdgeTransforms();
\r
42 public Rectangle2D getBounds(IElement e, Rectangle2D size) {
\r
43 if (size==null) size = new Rectangle2D.Double();
\r
44 BendsHandler bends = e.getElementClass().getSingleItem(BendsHandler.class);
\r
45 Path2D path = bends.getPath(e);
\r
46 size.setFrame(path.getBounds2D());
\r
51 public void resize(IElement e, Rectangle2D newSize) {
\r
52 BendsHandler bends = e.getElementClass().getSingleItem(BendsHandler.class);
\r
53 Path2D path = bends.getPath(e);
\r
54 Rectangle2D oldSize = path.getBounds2D();
\r
55 double sx = newSize.getWidth() / oldSize.getWidth();
\r
56 double sy = newSize.getHeight() / oldSize.getHeight();
\r
57 double tx = newSize.getMinX() + oldSize.getMinX();
\r
58 double ty = newSize.getMinY() + oldSize.getMinY();
\r
59 AffineTransform at = new AffineTransform();
\r
60 at.translate(tx, ty);
\r
62 Path2D newPath = new Path2D.Double(path, at);
\r
63 bends.setPath(e, newPath);
\r
67 public Double getFixedAspectRatio(IElement e) {
\r
72 public Rectangle2D getMaximumSize(IElement e) {
\r
77 public Rectangle2D getMinimumSize(IElement e) {
\r
82 public Point2D getMaximumScale(IElement e) {
\r
87 public Point2D getMinimumScale(IElement e) {
\r
91 private final static Point2D SCALE = new Point2D.Double(1.0, 1.0);
\r
92 private final static Point2D POSITION = new Point2D.Double(0.0, 0.0);
\r
93 private final static AffineTransform TRANSLATE = new AffineTransform();
\r
95 public Point2D getScale(IElement e) {
\r
100 public Point2D getPosition(IElement e) {
\r
105 public AffineTransform getTransform(IElement e) {
\r
110 public void moveTo(IElement e, double x, double y) {
\r
111 BendsHandler bends = e.getElementClass().getSingleItem(BendsHandler.class);
\r
112 Path2D path = bends.getPath(e);
\r
113 AffineTransform at = new AffineTransform();
\r
114 at.translate(x, y);
\r
115 Path2D newPath = new Path2D.Double(path, at);
\r
116 bends.setPath(e, newPath);
\r
120 public void setScale(IElement e, Point2D newScale) {
\r
121 BendsHandler bends = e.getElementClass().getSingleItem(BendsHandler.class);
\r
122 Path2D path = bends.getPath(e);
\r
123 AffineTransform at = new AffineTransform();
\r
124 at.scale(newScale.getX(), newScale.getY());
\r
125 Path2D newPath = new Path2D.Double(path, at);
\r
126 bends.setPath(e, newPath);
\r
131 public void setTransform(IElement e, AffineTransform at) {
\r
132 BendsHandler bends = e.getElementClass().getSingleItem(BendsHandler.class);
\r
133 Path2D path = bends.getPath(e);
\r
134 Path2D newPath = new Path2D.Double(path, at);
\r
135 bends.setPath(e, newPath);
\r