Revision 29277

View differences:

branches/v2_0_0_prep/libraries/libFMap_mapcontext/src/org/gvsig/fmap/mapcontext/layers/Tiling.java
3 3
 */
4 4
package org.gvsig.fmap.mapcontext.layers;
5 5

  
6
import java.awt.Rectangle;
6
import java.awt.Dimension;
7 7
import java.awt.geom.AffineTransform;
8 8
import java.awt.geom.NoninvertibleTransformException;
9
import java.awt.geom.Rectangle2D;
9 10

  
10 11
import org.gvsig.fmap.geom.GeometryLocator;
11 12
import org.gvsig.fmap.geom.GeometryManager;
......
38 39
	private int 					tileMaxWidth, tileMaxHeight;
39 40
	private int 					numRows, numCols;
40 41
	private double[][] 				srcPts;
41
	private Rectangle[] 			tile;
42
	private Rectangle2D[] 			tile;
42 43
	private double 					width = 500, height = 500;
43 44
	private AffineTransform 		mat;
44 45
	private ViewPort 				vp;
45 46

  
46 47
	public Tiling(){}
47 48

  
48
	public Tiling(int tileW, int tileH, Rectangle r) {
49
	public Tiling(int tileW, int tileH, Rectangle2D r) {
49 50
		int[] size = this.calcMaxTileSize(tileW, tileH, r);
50 51
		tileMaxWidth = size[0];
51 52
		tileMaxHeight = size[1];
......
55 56
        int altoAux, anchoAux;
56 57

  
57 58
        //Vamos a hacerlo en trozos de AxH
58
        numCols = 1+(int) (r.width) / tileMaxWidth;
59
        numRows = 1+(int) (r.height) / tileMaxHeight;
59
        numCols = 1+(int) (r.getWidth()) / tileMaxWidth;
60
        numRows = 1+(int) (r.getHeight()) / tileMaxHeight;
60 61

  
61 62
        srcPts = new double[numCols*numRows][8];
62
        tile = new Rectangle[numCols*numRows];
63
        tile = new Rectangle2D[numCols*numRows];
63 64

  
64
    	yProv = (int) r.y;
65
    	yProv = (int) r.getY();
65 66
        for (stepY=0; stepY < numRows; stepY++) {
66 67
    		if ((yProv + tileMaxHeight) > r.getMaxY())
67 68
    			altoAux = (int) r.getMaxY() - yProv;
68 69
    		else
69 70
    			altoAux = tileMaxHeight;
70 71

  
71
    		xProv = (int) r.x;
72
    		xProv = (int) r.getX();
72 73
        	for (stepX=0; stepX < numCols; stepX++) {
73 74
	    		if ((xProv + tileMaxWidth) > r.getMaxX())
74 75
	    			anchoAux = (int) r.getMaxX() - xProv;
......
87 88
        		srcPts[tileCnt][6] = xProv;
88 89
        		srcPts[tileCnt][7] = yProv + altoAux+1;
89 90

  
90
        		tile[tileCnt] = new Rectangle(xProv, yProv, anchoAux+1, altoAux+1);
91
        		tile[tileCnt] = new Rectangle2D.Float(xProv, yProv, anchoAux+1, altoAux+1);
91 92

  
92 93
				xProv += tileMaxWidth;
93 94
        	}
......
102 103
	 * @param tileH	Alto del tile
103 104
	 * @param r Rectangulo que define el area de la imagen
104 105
	 */
105
	public int[] calcMaxTileSize(int tileW, int tileH, Rectangle r){
106
		if(r.width < tileW || r.height < tileH){
106
	public int[] calcMaxTileSize(int tileW, int tileH, Rectangle2D r){
107
		
108
		if(r.getWidth() < tileW || r.getHeight() < tileH){
107 109
			int[] sizeTiles = {tileW, tileH};
108 110
			return sizeTiles;
109 111
		}
......
112 114
        tileW += MIN_SIZE;
113 115
		do{
114 116
			tileW -= MIN_SIZE;
115
	        int numCols = (int) (r.width / tileW);
117
	        int numCols = (int) (r.getWidth() / tileW);
116 118
	        int w = 0;
117 119
	        for(int i = 0; i < numCols; i++)
118 120
	        	w += tileW;
119
	        wLastCol = r.width - w;
121
	        wLastCol = ((int) r.getWidth()) - w;
120 122
		}while(wLastCol < MIN_SIZE && tileW > (MIN_SIZE * 2));
121 123

  
122 124
		int hLastRow = 0;
123 125
        tileH += MIN_SIZE;
124 126
		do{
125 127
			tileH -= MIN_SIZE;
126
	        int numRows = (int) (r.height / tileH);
128
	        int numRows = (int) (r.getHeight() / tileH);
127 129
	        int h = 0;
128 130
	        for(int i = 0; i < numRows; i++)
129 131
	        	h += tileH;
130
	        hLastRow = r.height - h;
132
	        hLastRow = ((int) r.getHeight()) - h;
131 133
		}while(hLastRow < MIN_SIZE && tileH > (MIN_SIZE * 2));
132 134

  
133 135
		tileMaxWidth = tileW;
......
144 146
		return srcPts[num];
145 147
	}
146 148

  
147
	public Rectangle getTileSz(int colNr, int rowNr) {
149
	public Rectangle2D getTileSz(int colNr, int rowNr) {
148 150
		return tile[rowNr*numCols+colNr];
149 151
	}
150 152

  
151
	public Rectangle getTile(int num) {
153
	public Rectangle2D getTile(int num) {
152 154
		return tile[num];
153 155
	}
154 156

  
......
192 194

  
193 195
	    double imgPxX = viewPort.getImageWidth();
194 196
	    double dWcX = viewPort.getAdjustedExtent().getLength(0);
195
	    double tileWcW = (getTile(vpCnt).getSize().getWidth() * dWcX) / imgPxX;
197
	    double tileWcW = (getTile(vpCnt).getWidth() * dWcX) / imgPxX;
196 198

  
197 199
	    double imgPxY = viewPort.getImageHeight();
198 200
	    double dWcY = viewPort.getAdjustedExtent().getLength(1);
199
	    double tileWcH = (getTile(vpCnt).getSize().getHeight() * dWcY) / imgPxY;
201
	    double tileWcH = (getTile(vpCnt).getHeight() * dWcY) / imgPxY;
200 202

  
201 203
	    viewPortList[0] = viewPort.cloneViewPort();
202
	    viewPortList[0].setImageSize(getTile(vpCnt).getSize());
204
	    
205
	    int auxw = (int) getTile(vpCnt).getWidth();
206
	    int auxh = (int) getTile(vpCnt).getHeight();
207
	    Dimension auxdim = new Dimension(auxw, auxh);
208
	    
209
	    viewPortList[0].setImageSize(auxdim);
203 210
	    Envelope r=viewPort.getAdjustedExtent();
204 211
	    try {
205 212
			viewPortList[0].setEnvelope(geomManager.createEnvelope(r.getMinimum(0), r.getMaximum(1) - tileWcH,r.getMinimum(0)+tileWcW, r.getMaximum(1), SUBTYPES.GEOM2D));
......
226 233
	    				wt = Math.abs(viewPort.getAdjustedExtent().getMaximum(0) - xt);
227 234

  
228 235
	    			viewPortList[vpCnt] = viewPort.cloneViewPort();
229
	    			viewPortList[vpCnt].setImageSize(getTile(vpCnt).getSize());
236
	    			
237
	    		    auxw = (int) getTile(vpCnt).getWidth();
238
	    		    auxh = (int) getTile(vpCnt).getHeight();
239
	    		    auxdim = new Dimension(auxw, auxh);
240

  
241
	    			viewPortList[vpCnt].setImageSize(auxdim);
242
	    			
230 243
	    			try {
231 244
						viewPortList[vpCnt].setEnvelope(geomManager.createEnvelope(xt, yt,xt + wt, yt + ht, SUBTYPES.GEOM2D));
232 245
					} catch (CreateEnvelopeException e) {
......
256 269

  
257 270
		double [] dstPts = new double[8];
258 271
		double [] srcPts = getTilePts(tileNr);
259
		Rectangle tile = getTile(tileNr);
272
		Rectangle2D tile = getTile(tileNr);
260 273
		//Rectangle newRect = new Rectangle((int)srcPts[0], (int)srcPts[1], tileSz[0], tileSz[1]);
261 274

  
262 275
		mat.inverseTransform(srcPts, 0, dstPts, 0, 4);
......
274 287
		//Extent extent = new Extent(rectCuadricula);
275 288

  
276 289
		ViewPort vp = viewPort.cloneViewPort();
277
		vp.setImageSize(tile.getSize());
290
		
291
		
292
	    int auxw = (int) tile.getWidth();
293
	    int auxh = (int) tile.getHeight();
294
	    Dimension auxdim = new Dimension(auxw, auxh);
295

  
296
		vp.setImageSize(auxdim);
278 297
		//vp.setOffset(tile.getLocation());
279 298
		vp.setEnvelope(rectCuadricula);
280 299
		vp.setAffineTransform(mat);

Also available in: Unified diff