Revision 267
trunk/org.gvsig.app.document.layout2.app/org.gvsig.app.document.layout2.app.mainplugin/src/main/java/org/gvsig/app/project/documents/layout/fframes/FFrameGrid.java | ||
---|---|---|
77 | 77 |
private static final String FONTSYZE_FIELD = "fontsize"; |
78 | 78 |
private static final String TEXTCOLOR_FIELD = "textColor"; |
79 | 79 |
|
80 |
private static final ViewPort viewPortI = new ViewPort(null); |
|
81 | 80 |
private double intervalX = 10000; |
82 | 81 |
private double intervalY = 10000; |
83 | 82 |
|
... | ... | |
101 | 100 |
|
102 | 101 |
Rectangle2D.Double r = getBoundingBox(at); |
103 | 102 |
Rectangle2D rView = fframeViewDependence.getBoundingBox(at); |
103 |
if (r==null || rView==null) { |
|
104 |
//extent may be null, for instance if no layer has been loaded on the view |
|
105 |
return; |
|
106 |
} |
|
104 | 107 |
|
105 | 108 |
g.rotate(Math.toRadians(getRotation()), r.x + (r.width / 2), r.y + (r.height / 2)); |
106 | 109 |
|
... | ... | |
108 | 111 |
|
109 | 112 |
double minX = envelope.getMinimum(0); |
110 | 113 |
double minY = envelope.getMinimum(1); |
111 |
double restX = (minX / intervalX) % 1; |
|
112 |
double initPointGridWCX = restX * intervalX;
|
|
113 |
double restY = (minY / intervalY) % 1;
|
|
114 |
double initPointGridWCY = restY * intervalY;
|
|
114 |
|
|
115 |
// init point, in map coordinates
|
|
116 |
double initPointGridWCX = Math.floor(minX / intervalX)*intervalX;
|
|
117 |
double initPointGridWCY = Math.floor(minY / intervalY)*intervalY;
|
|
115 | 118 |
|
116 |
double initPointGridPxX = (rView.getWidth() * initPointGridWCX) / envelope.getLength(0); |
|
117 |
double initPointGridPxY = (rView.getHeight() * initPointGridWCY) / envelope.getLength(1); |
|
119 |
// shift from the beginning of the map till the first point of the grid |
|
120 |
double shiftXMap = initPointGridWCX-minX; |
|
121 |
double shiftYMap = initPointGridWCY-minY; |
|
122 |
|
|
123 |
// init point, in screen coordinates (pixels) |
|
124 |
double initPointGridPxX = rView.getMinX() + (rView.getWidth() * shiftXMap) / envelope.getLength(0); |
|
125 |
double initPointGridPxY = rView.getMinY() + (rView.getHeight() * shiftYMap) / envelope.getLength(1); |
|
118 | 126 |
double intervalPxWidth = (rView.getWidth() * intervalX) / envelope.getLength(0); |
119 | 127 |
double intervalPxHeight = (rView.getHeight() * intervalY) / envelope.getLength(1); |
120 | 128 |
|
... | ... | |
141 | 149 |
this.font.getStyle(), |
142 | 150 |
scaledFontSize); |
143 | 151 |
|
144 |
drawMargins(rView, |
|
152 |
drawMargins(rView, |
|
153 |
initPointGridWCX, |
|
154 |
initPointGridWCY, |
|
155 |
intervalX, |
|
156 |
intervalY, |
|
145 | 157 |
initPointGridPxX, |
146 | 158 |
initPointGridPxY, |
147 | 159 |
intervalPxWidth, |
148 |
intervalPxHeight, |
|
149 |
vp, |
|
160 |
intervalPxHeight, |
|
150 | 161 |
g, |
151 | 162 |
font, |
152 | 163 |
symbolForMargins); |
... | ... | |
180 | 191 |
ViewPort viewPort, |
181 | 192 |
Graphics2D g) { |
182 | 193 |
double minX = rView.getMinX(); |
194 |
double maxX = rView.getMaxX(); |
|
183 | 195 |
double minY = rView.getMinY(); |
184 |
double x = minX - initPointGridPxX; |
|
185 |
double y = minY - initPointGridPxY; |
|
196 |
double maxY = rView.getMaxY(); |
|
197 |
double x = initPointGridPxX; |
|
198 |
double y = initPointGridPxY; |
|
186 | 199 |
|
187 |
while (x <= rView.getMaxX()) {
|
|
200 |
while (x <= maxX) {
|
|
188 | 201 |
if (x > minX) { |
189 |
while (y <= rView.getMaxY()) {
|
|
190 |
if (y >= minY) {
|
|
202 |
while (y <= maxY) {
|
|
203 |
if (y > minY) { |
|
191 | 204 |
Point2D p = new Point2D.Double(x, y); |
192 | 205 |
drawPoint(p, g); |
193 | 206 |
} |
194 | 207 |
y = y + intervalPxY; |
195 | 208 |
} |
196 |
y = minY - initPointGridPxY;
|
|
209 |
y = initPointGridPxY; |
|
197 | 210 |
} |
198 | 211 |
x = x + intervalPxX; |
199 | 212 |
} |
... | ... | |
207 | 220 |
ViewPort viewPort, |
208 | 221 |
Graphics2D g) { |
209 | 222 |
double minX = rView.getMinX(); |
223 |
double maxX = rView.getMaxX(); |
|
210 | 224 |
double minY = rView.getMinY(); |
211 |
double x = minX - initPointGridPxX; |
|
212 |
double y = minY - initPointGridPxY; |
|
225 |
double maxY = rView.getMaxY(); |
|
226 |
double x = initPointGridPxX; |
|
227 |
double y = initPointGridPxY; |
|
213 | 228 |
|
214 | 229 |
//Draw the vertical lines |
215 |
while (x < rView.getMaxX()) { |
|
216 |
Point2D antPoint = new Point2D.Double(x, minY - 5); |
|
217 |
//This if removes the first vertical line |
|
218 |
if (x > minX) { |
|
219 |
Point2D p = new Point2D.Double(x, rView.getMaxY() + 5); |
|
220 |
drawLine(antPoint, p, g, symbolLine); |
|
221 |
antPoint = (Point2D) p.clone(); |
|
222 |
} |
|
230 |
while (x < maxX) { |
|
231 |
if (x>minX) { |
|
232 |
Point2D antPoint = new Point2D.Double(x, minY - 5); |
|
233 |
Point2D p = new Point2D.Double(x, maxY + 5); |
|
234 |
drawLine(antPoint, p, g, symbolLine); |
|
235 |
antPoint = (Point2D) p.clone(); |
|
236 |
} |
|
223 | 237 |
x = x + intervalPxX; |
224 | 238 |
} |
225 | 239 |
//Draw the horizontal lines |
226 |
while (y <= rView.getMaxY()) { |
|
227 |
Point2D antPoint = new Point2D.Double(minX, y); |
|
228 |
//This if removes the first horizontal line |
|
229 |
if (y > minY) { |
|
230 |
Point2D p = new Point2D.Double(rView.getMaxX(), y); |
|
231 |
drawLine(antPoint, p, g, symbolLine); |
|
232 |
antPoint = (Point2D) p.clone(); |
|
233 |
} |
|
240 |
while (y <= maxY) { |
|
241 |
if (y > minY) { |
|
242 |
Point2D antPoint = new Point2D.Double(minX, y); |
|
243 |
Point2D p = new Point2D.Double(rView.getMaxX(), y); |
|
244 |
drawLine(antPoint, p, g, symbolLine); |
|
245 |
antPoint = (Point2D) p.clone(); |
|
246 |
} |
|
234 | 247 |
y = y + intervalPxY; |
235 | 248 |
} |
236 | 249 |
} |
237 | 250 |
|
238 |
private void drawMargins(Rectangle2D rView, |
|
251 |
private void drawMargins(Rectangle2D rView, |
|
252 |
double initPointGridMapX, |
|
253 |
double initPointGridMapY, |
|
254 |
double intervalMapX, |
|
255 |
double intervalMapY, |
|
239 | 256 |
double initPointGridPxX, |
240 | 257 |
double initPointGridPxY, |
241 | 258 |
double intervalPxX, |
242 | 259 |
double intervalPxY, |
243 |
ViewPort viewPort, |
|
244 | 260 |
Graphics2D g, |
245 |
Font font,
|
|
261 |
Font font, |
|
246 | 262 |
ISymbol |
247 | 263 |
symbolForMargins) { |
264 |
FontRenderContext frc = g.getFontRenderContext(); |
|
265 |
|
|
248 | 266 |
double minX = rView.getMinX(); |
267 |
double maxX = rView.getMaxX(); |
|
249 | 268 |
double minY = rView.getMinY(); |
250 |
double x = minX - initPointGridPxX; |
|
251 |
double y = minY - initPointGridPxY; |
|
269 |
double maxY = rView.getMaxY(); |
|
270 |
double xPx = initPointGridPxX; |
|
271 |
double xMap = initPointGridMapX; |
|
252 | 272 |
|
253 |
double restX = (minX / intervalPxX) % 1; |
|
254 |
double restY = (minY / intervalPxY) % 1; |
|
255 |
|
|
256 |
double valueIntervalX = |
|
257 |
((minX / intervalPxX) - restX) * intervalPxX - intervalPxX; |
|
258 |
|
|
259 |
double topX = minX; |
|
260 |
|
|
261 |
FontRenderContext frc = g.getFontRenderContext(); |
|
262 |
|
|
263 |
//Draw vertical margins |
|
264 |
while (x < rView.getMaxX()) { |
|
265 |
if (x > topX) { |
|
266 |
Point2D p2 = new Point2D.Double(x, minY); |
|
267 |
Point2D p1 = new Point2D.Double(x, rView.getMaxY()); |
|
273 |
// Draw vertical ticks and labels |
|
274 |
while (xPx < maxX) { |
|
275 |
if (xPx > minX) { |
|
276 |
Point2D p2 = new Point2D.Double(xPx, minY); |
|
277 |
Point2D p1 = new Point2D.Double(xPx, maxY); |
|
268 | 278 |
|
269 | 279 |
drawLine(p1.getX(), p1.getY() - OFFSET_IN_PIXELS, p1.getX() , p1.getY(), g, symbolForMargins); |
270 | 280 |
drawLine(p2.getX(), p2.getY(), p2.getX() , p2.getY() + OFFSET_IN_PIXELS, g, symbolForMargins); |
271 |
|
|
272 |
Point p = viewPort.convertToMapPoint(new Point2D.Double(valueIntervalX, minY)); |
|
273 |
TextLayout textaux = new TextLayout(String.valueOf(Math.rint(p.getCoordinateAt(0) * 10) / 10), font, frc); |
|
281 |
|
|
282 |
TextLayout textaux = new TextLayout(String.valueOf(xMap), font, frc); |
|
274 | 283 |
|
275 | 284 |
double w = textaux.getBounds().getWidth(); |
276 | 285 |
double h = textaux.getBounds().getHeight(); |
... | ... | |
280 | 289 |
textaux.draw(g, (int) (p2.getX() - w / 2), |
281 | 290 |
(int) (p2.getY() - h)); |
282 | 291 |
} |
283 |
valueIntervalX = valueIntervalX + intervalPxX;
|
|
284 |
x = x + intervalPxX;
|
|
292 |
xMap = xMap + intervalMapX;
|
|
293 |
xPx = xPx + intervalPxX;
|
|
285 | 294 |
} |
286 |
double valueIntervalY = ((minY / intervalPxY) - restY) * intervalPxY - intervalPxY;
|
|
287 |
y = y - intervalPxY;
|
|
295 |
double yPx = initPointGridPxY;
|
|
296 |
double yMap = initPointGridMapY;
|
|
288 | 297 |
|
289 |
double topY = minY; |
|
290 |
|
|
291 |
while (y < rView.getMaxY()) { |
|
292 |
if (y > topY) { |
|
293 |
Point2D p1 = new Point2D.Double(minX, y); |
|
294 |
Point2D p2 = new Point2D.Double(rView.getMaxX(), y); |
|
298 |
// horizontal ticks and labels |
|
299 |
while (yPx < maxY) { |
|
300 |
if (yPx > minY) { |
|
301 |
Point2D p1 = new Point2D.Double(minX, yPx); |
|
302 |
Point2D p2 = new Point2D.Double(rView.getMaxX(), yPx); |
|
295 | 303 |
|
296 | 304 |
drawLine(p1.getX() - OFFSET_IN_PIXELS, p1.getY(), p1.getX() , p1.getY(), g, symbolForMargins); |
297 | 305 |
drawLine(p2.getX(), p2.getY(), p2.getX() + OFFSET_IN_PIXELS, p2.getY(), g, symbolForMargins); |
298 | 306 |
|
299 |
Point p = viewPort.convertToMapPoint(new Point2D.Double(minX, valueIntervalY)); |
|
300 |
TextLayout textaux = new TextLayout(String.valueOf(Math.rint(p.getCoordinateAt(1) * 10) / 10), font, frc); |
|
307 |
TextLayout textaux = new TextLayout(String.valueOf(yMap), font, frc); |
|
301 | 308 |
|
302 | 309 |
double w = textaux.getBounds().getWidth(); |
303 | 310 |
double h = textaux.getBounds().getHeight(); |
... | ... | |
309 | 316 |
(int) p2.getX() + 10, |
310 | 317 |
(int) (p2.getY() + h / 2)); |
311 | 318 |
} |
312 |
valueIntervalY = valueIntervalY + intervalPxY;
|
|
313 |
y = y + intervalPxY;
|
|
319 |
yMap = yMap + intervalMapY;
|
|
320 |
yPx = yPx + intervalPxY;
|
|
314 | 321 |
} |
315 | 322 |
} |
316 | 323 |
|
... | ... | |
431 | 438 |
Envelope extent = |
432 | 439 |
fframeViewDependence.getMapContext().getViewPort() |
433 | 440 |
.getAdjustedEnvelope(); |
441 |
if (extent==null) { |
|
442 |
//extent may be null, for instance if no layer has been loaded on the view |
|
443 |
return null; |
|
444 |
} |
|
434 | 445 |
double extentX = extent.getMaximum(0); |
435 | 446 |
double extentY = extent.getMaximum(1); |
436 | 447 |
int lengthX = String.valueOf((long) extentX).length(); |
Also available in: Unified diff