1 package org.kite9.diagram.position;
2
3 import java.awt.Dimension;
4
5 /***
6 * This extends and is compatible with the awt dimension class, which is used for a
7 * lot of rendering.
8 * This has double precision though and has internal scaling operations, as well
9 * as actions to allow you to apply operations to a specific direction.
10 *
11 * @author robmoffat
12 *
13 */
14 public class Dimension2D extends Dimension {
15
16 private static final long serialVersionUID = -2042867297107289469L;
17
18 @Override
19 public double getHeight() {
20 return y;
21 }
22
23 @Override
24 public Dimension getSize() {
25 return this;
26 }
27
28 @Override
29 public double getWidth() {
30 return x;
31 }
32
33 @Override
34 public void setSize(Dimension arg0) {
35 this.x = arg0.getWidth();
36 this.y = arg0.getHeight();
37 setInts();
38 }
39
40 @Override
41 public void setSize(double x, double y) {
42 this.x = x;
43 this.y = y;
44 setInts();
45 }
46
47 @Override
48 public void setSize(int x, int y) {
49 this.x = x;
50 this.y = y;
51 setInts();
52 }
53
54 double x;
55 double y;
56
57 @Override
58 public boolean equals(Object obj) {
59 if (obj instanceof Dimension2D) {
60 Dimension2D d2d = (Dimension2D) obj;
61 return (x==d2d.x) && (y==d2d.y);
62 }
63 return false;
64 }
65
66 public Dimension2D() {
67
68 }
69
70 public Dimension2D(double x, double y) {
71 this.x = x;
72 this.y = y;
73 setInts();
74 }
75
76 public Dimension2D(Dimension2D clone) {
77 this(clone.x, clone.y);
78 setInts();
79 }
80
81 private void setInts() {
82 this.width = (int) x;
83 this.height = (int) y;
84 }
85
86 public Dimension2D divide(Dimension2D by) {
87 Dimension2D d2 = new Dimension2D();
88 d2.x = x / by.x;
89 d2.y = y / by.y;
90 d2.setInts();
91 return d2;
92 }
93
94 public Dimension2D multiply(Dimension2D by) {
95 Dimension2D d2 = new Dimension2D();
96 d2.x = x * by.x;
97 d2.y = y * by.y;
98 d2.setInts();
99 return d2;
100 }
101
102 public Dimension2D multiply(double by) {
103 Dimension2D d2 = new Dimension2D();
104 d2.x = x * by;
105 d2.y = y * by;
106 d2.setInts();
107 return d2;
108 }
109
110
111 public Dimension2D roundUpTo(Dimension2D factor) {
112 Dimension2D d2 = new Dimension2D();
113 d2.x = Math.ceil(x / factor.x) * factor.x;
114 d2.y = Math.ceil(y / factor.y) * factor.y;
115 d2.setInts();
116 return d2;
117 }
118
119 @Override
120 public String toString() {
121 return "["+x+","+y+"]";
122 }
123
124 public Dimension2D add(Dimension2D by) {
125 Dimension2D d2 = new Dimension2D();
126 d2.x = x + by.x;
127 d2.y = y + by.y;
128 d2.setInts();
129 return d2;
130 }
131
132 public Dimension2D minus(Dimension2D by) {
133 Dimension2D d2 = new Dimension2D();
134 d2.x = x - by.x;
135 d2.y = y - by.y;
136 d2.setInts();
137 return d2;
138 }
139
140 public double x() {
141 return x;
142 }
143
144 public double y() {
145 return y;
146 }
147
148 public void setX(double x) {
149 this.x = x;
150 setInts();
151 }
152
153 public void setY(double y) {
154 this.y = y;
155 setInts();
156 }
157
158 public void increaseY(double y) {
159 this.y += y;
160 setInts();
161 }
162
163 public void increaseX(double x) {
164 this.x += x;
165 setInts();
166 }
167 }