View Javadoc

1   package org.catacomb.interlish.content;
2   
3   import org.catacomb.be.Direction;
4   import org.catacomb.be.Position;
5   
6   
7   public class Polypoint {
8   
9       public double[] xpts;
10      public double[] ypts;
11  
12      public static final int OPEN = 0;
13      public static final int CLOSED = 1;
14      public static final int FILLED = 2;
15  
16      public String closure;
17      private int p_closure;
18      final public static String[] p_closureNames = { "open", "closed", "filled" };
19  
20  
21      public Polypoint() {
22          xpts = new double[2];
23          ypts = new double[2];
24      }
25  
26      public Polypoint(double[] xp, double[] yp) {
27          this(xp, yp, OPEN);
28      }
29  
30  
31      public Polypoint(double[] xp, double[] yp, int icl) {
32          xpts = xp;
33          ypts = yp;
34          p_closure = icl;
35      }
36  
37  
38  
39      public String exportAsString() {
40          StringBuffer sb = new StringBuffer();
41          sb.append("pp(" + xpts.length + ": ");
42          for (int i = 0; i < xpts.length; i++) {
43              sb.append(xpts[i] + ", " + ypts[i] + ", ");
44          }
45          sb.append(")");
46          return sb.toString();
47      }
48  
49  
50  
51      public int getClosure() {
52          return p_closure;
53      }
54      public void setClosure(int pc) {
55          p_closure = pc;
56          closure = p_closureNames[p_closure];
57      }
58  
59      public boolean isFilled() {
60          return (p_closure == FILLED);
61      }
62      public boolean isOpen() {
63          return (p_closure == OPEN);
64      }
65      public boolean isClosed() {
66          return (p_closure == CLOSED || p_closure == FILLED);
67      }
68  
69  
70      public void setXpts(double[] d) {
71          xpts = d;
72      }
73  
74  
75      public void setYpts(double[] d) {
76          ypts = d;
77      }
78  
79      public double[] getXPts() {
80          return xpts;
81      }
82  
83      public double[] getYPts() {
84          return ypts;
85      }
86  
87  
88      public Polypoint getCopy() {
89          int np = xpts.length;
90          double[] xp = new double[np];
91          double[] yp = new double[np];
92          for (int i = 0; i < np; i++) {
93              xp[i] = xpts[i];
94              yp[i] = ypts[i];
95          }
96          return new Polypoint(xp, yp, p_closure);
97      }
98  
99  
100 
101     public void translate(Position pos) {
102         double dx = pos.getX();
103         double dy = pos.getY();
104         for (int i = 0; i < xpts.length; i++) {
105             xpts[i] += dx;
106             ypts[i] += dy;
107         }
108     }
109 
110     public void rotate(Direction dir) {
111         double c = dir.getCosine();
112         double s = dir.getSine();
113         for (int i = 0; i < xpts.length; i++) {
114             double x = xpts[i];
115             double y = ypts[i];
116             xpts[i] = c * x - s * y;
117             ypts[i] = s * x + c * y;
118         }
119 
120     }
121 
122 }