Revision 267

View differences:

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