Coverage details for edu.uci.ics.jung.visualization.transform.shape.MagnifyShapeTransformer

LineHitsSource
1 /*
2  * Copyright (c) 2003, the JUNG Project and the Regents of the University of
3  * California All rights reserved.
4  *
5  * This software is open-source under the BSD license; see either "license.txt"
6  * or http://jung.sourceforge.net/license.txt for a description.
7  *
8  */
9 package edu.uci.ics.jung.visualization.transform.shape;
10  
11 import java.awt.Component;
12 import java.awt.Shape;
13 import java.awt.geom.GeneralPath;
14 import java.awt.geom.PathIterator;
15 import java.awt.geom.Point2D;
16  
17 import edu.uci.ics.jung.visualization.transform.MagnifyTransformer;
18 import edu.uci.ics.jung.visualization.transform.MutableTransformer;
19  
20 /**
21  * MagnifyShapeTransformer extends MagnifyTransformer and
22  * adds implementations for methods in ShapeTransformer.
23  * It modifies the shapes (Vertex, Edge, and Arrowheads) so that
24  * they are enlarged by the magnify transformation
25  *
26  * @author Tom Nelson - RABA Technologies
27  *
28  *
29  */
30 public class MagnifyShapeTransformer extends MagnifyTransformer
31     implements ShapeTransformer {
32  
33     /**
34      * Create an instance, setting values from the passed component
35      * and registering to listen for size changes on the component.
36      */
37     public MagnifyShapeTransformer(Component component) {
380        this(component, null);
390    }
40     
41     /**
42      * Create an instance, setting values from the passed component
43      * and registering to listen for size changes on the component,
44      * with a possibly shared transform <code>delegate</code>.
45      */
46     public MagnifyShapeTransformer(Component component, MutableTransformer delegate) {
470        super(component, delegate);
480   }
49     
50     /**
51      * Transform the supplied shape with the overridden transform
52      * method so that the shape is distorted by the hyperbolic
53      * transform.
54      * @param shape a shape to transform
55      * @return a GeneralPath for the transformed shape
56      */
57     public Shape transform(Shape shape) {
580        return transform(shape, 0);
59     }
60     public Shape transform(Shape shape, float flatness) {
610        GeneralPath newPath = new GeneralPath();
620        float[] coords = new float[6];
630        PathIterator iterator = null;
640        if(flatness == 0) {
650            iterator = shape.getPathIterator(null);
66         } else {
670            iterator = shape.getPathIterator(null, flatness);
68         }
69         for( ;
700            iterator.isDone() == false;
710            iterator.next()) {
720            int type = iterator.currentSegment(coords);
730            switch(type) {
74             case PathIterator.SEG_MOVETO:
750                Point2D p = transform(new Point2D.Float(coords[0], coords[1]));
760                newPath.moveTo((float)p.getX(), (float)p.getY());
770                break;
78                 
79             case PathIterator.SEG_LINETO:
800                p = transform(new Point2D.Float(coords[0], coords[1]));
810                newPath.lineTo((float)p.getX(), (float) p.getY());
820                break;
83                 
84             case PathIterator.SEG_QUADTO:
850                p = transform(new Point2D.Float(coords[0], coords[1]));
860                Point2D q = transform(new Point2D.Float(coords[2], coords[3]));
870                newPath.quadTo((float)p.getX(), (float)p.getY(), (float)q.getX(), (float)q.getY());
880                break;
89                 
90             case PathIterator.SEG_CUBICTO:
910                p = transform(new Point2D.Float(coords[0], coords[1]));
920                q = transform(new Point2D.Float(coords[2], coords[3]));
930                Point2D r = transform(new Point2D.Float(coords[4], coords[5]));
940                newPath.curveTo((float)p.getX(), (float)p.getY(),
95                         (float)q.getX(), (float)q.getY(),
96                         (float)r.getX(), (float)r.getY());
970                break;
98                 
99             case PathIterator.SEG_CLOSE:
1000                newPath.closePath();
101                 break;
102                     
103             }
104         }
1050        return newPath;
106     }
107  
108     public Shape inverseTransform(Shape shape) {
1090        GeneralPath newPath = new GeneralPath();
1100        float[] coords = new float[6];
1110        for(PathIterator iterator=shape.getPathIterator(null);
1120            iterator.isDone() == false;
1130            iterator.next()) {
1140            int type = iterator.currentSegment(coords);
1150            switch(type) {
116             case PathIterator.SEG_MOVETO:
1170                Point2D p = inverseTransform(new Point2D.Float(coords[0], coords[1]));
1180                newPath.moveTo((float)p.getX(), (float)p.getY());
1190                break;
120                 
121             case PathIterator.SEG_LINETO:
1220                p = inverseTransform(new Point2D.Float(coords[0], coords[1]));
1230                newPath.lineTo((float)p.getX(), (float) p.getY());
1240                break;
125                 
126             case PathIterator.SEG_QUADTO:
1270                p = inverseTransform(new Point2D.Float(coords[0], coords[1]));
1280                Point2D q = inverseTransform(new Point2D.Float(coords[2], coords[3]));
1290                newPath.quadTo((float)p.getX(), (float)p.getY(), (float)q.getX(), (float)q.getY());
1300                break;
131                 
132             case PathIterator.SEG_CUBICTO:
1330                p = inverseTransform(new Point2D.Float(coords[0], coords[1]));
1340                q = inverseTransform(new Point2D.Float(coords[2], coords[3]));
1350                Point2D r = inverseTransform(new Point2D.Float(coords[4], coords[5]));
1360                newPath.curveTo((float)p.getX(), (float)p.getY(),
137                         (float)q.getX(), (float)q.getY(),
138                         (float)r.getX(), (float)r.getY());
1390                break;
140                 
141             case PathIterator.SEG_CLOSE:
1420                newPath.closePath();
143                 break;
144                     
145             }
146         }
1470        return newPath;
148     }
149 }

this report was generated by version 1.0.5 of jcoverage.
visit www.jcoverage.com for updates.

copyright © 2003, jcoverage ltd. all rights reserved.
Java is a trademark of Sun Microsystems, Inc. in the United States and other countries.