Revision 18264
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/Georeferencing.java | ||
---|---|---|
162 | 162 |
|
163 | 163 |
//Inicializamos la extensi?n del componente y dibujamos |
164 | 164 |
try { |
165 |
viewRequestManager.initRequest(lyrToGeoref.getFullExtent()); |
|
165 |
viewRequestManager.initRequest(lyrToGeoref.getFullExtent());/*new Rectangle2D.Double( lyrToGeoref.getFullRasterExtent().getULX(), |
|
166 |
lyrToGeoref.getFullRasterExtent().getULY(), |
|
167 |
lyrToGeoref.getFullRasterExtent().width(), |
|
168 |
lyrToGeoref.getFullRasterExtent().height()));*/ |
|
166 | 169 |
view.setZoomCursorSize(zoomPixel.getCanvasWidth() / 3, zoomPixel.getCanvasHeight() / 3); |
167 | 170 |
|
168 |
Rectangle2D ext = view.getCursorWorldCoordinates(); |
|
171 |
Rectangle2D ext = view.getCursorAdjustedWorldCoordinates(zoomPixel.getCanvasWidth(), zoomPixel.getCanvasHeight()); |
|
172 |
viewRequestManagerZoomPixel.initRequest(lyrToGeoref.getFullExtent()); |
|
173 |
//viewRequestManagerZoomPixel.setDrawParams(null, new Rectangle2D.Double(ext.getX(), ext.getY() - ext.getHeight(), ext.getWidth(), ext.getHeight())); |
|
169 | 174 |
viewRequestManagerZoomPixel.request(ext); |
170 | 175 |
} catch (InvalidRequestException e1) { |
171 | 176 |
RasterToolsUtil.messageBoxError("error_setview_preview", this); |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/view/ViewDialog.java | ||
---|---|---|
198 | 198 |
Rectangle2D r = getZoomCursorGraphicLayer().getCursorViewCoordinates(); |
199 | 199 |
|
200 | 200 |
double x = r.getX(), y = r.getY(), w = r.getWidth(), h = r.getHeight(); |
201 |
if(r.getWidth() >= r.getHeight()) { //La X y la W no varian |
|
202 |
h = (hWindow * r.getWidth()) / wWindow; |
|
203 |
y = r.getCenterY() - (h / 2); |
|
204 |
} else { //La Y y la H no varian |
|
205 |
w = (wWindow * r.getHeight()) / hWindow; |
|
206 |
x = r.getCenterX() - (r.getWidth() / 2); |
|
201 |
if(wWindow < hWindow) { //Si la de destino es m?s alta que ancha |
|
202 |
if((r.getWidth() / r.getHeight()) >= (wWindow / hWindow)) { |
|
203 |
h = (hWindow * r.getWidth()) / wWindow; |
|
204 |
y = r.getCenterY() - (h / 2); |
|
205 |
} else { |
|
206 |
w = (wWindow * r.getHeight()) / hWindow; |
|
207 |
x = r.getCenterX() - (w / 2); |
|
208 |
} |
|
209 |
} else { //Si la de destino es m?s ancha que alta |
|
210 |
if((r.getWidth() / r.getHeight()) <= (wWindow / hWindow)) { |
|
211 |
w = (wWindow * r.getHeight()) / hWindow; |
|
212 |
x = r.getCenterX() - (w / 2); |
|
213 |
} else { |
|
214 |
h = (hWindow * r.getWidth()) / wWindow; |
|
215 |
y = r.getCenterY() - (h / 2); |
|
216 |
} |
|
207 | 217 |
} |
208 |
r = new Rectangle2D.Double(x, y, w, h); |
|
218 |
r = new Rectangle2D.Double(x, y + h, w, h);
|
|
209 | 219 |
Point2D p1 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getX(), r.getY())); |
210 | 220 |
Point2D p2 = zoomPixelControl.getCanvas().viewCoordsToWorld(new Point2D.Double(r.getX() + r.getWidth(), r.getY() + r.getHeight())); |
211 | 221 |
return new Rectangle2D.Double( Math.min(p1.getX(), p2.getX()), |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/ViewRasterRequestManager.java | ||
---|---|---|
75 | 75 |
y = extent.getCenterY() - (h / 2); |
76 | 76 |
} |
77 | 77 |
Rectangle2D r = new Rectangle2D.Double(x, y, w, h); |
78 |
view.getCanvas().setCanvasExtent(new Rectangle2D.Double(x, y + h, w, h)); |
|
78 |
view.getCanvas().setCanvasExtent(new Rectangle2D.Double(x, y + h , w, h));
|
|
79 | 79 |
request(r); |
80 | 80 |
return r; |
81 | 81 |
} |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/layers/ZoomCursorGraphicLayer.java | ||
---|---|---|
51 | 51 |
private static final int MOVE_UL = 5; |
52 | 52 |
private static final int MOVE_LR = 6; |
53 | 53 |
private static final int MOVE_LL = 7; |
54 |
|
|
55 |
private final int MIN_CURSOR_SIZE = 10; |
|
54 | 56 |
private int operation = NONE; |
55 | 57 |
|
56 | 58 |
private Color color = Color.RED; |
... | ... | |
130 | 132 |
*/ |
131 | 133 |
public void draw(Graphics2D g, Rectangle2D ext, int w, int h) { |
132 | 134 |
g.setColor(Color.RED); |
135 |
wCursor = Math.max(wCursor, MIN_CURSOR_SIZE); |
|
136 |
hCursor = Math.max(hCursor, MIN_CURSOR_SIZE); |
|
133 | 137 |
g.drawRect(posX - (wCursor >> 1), posY - (hCursor >> 1), wCursor, hCursor); |
134 | 138 |
g.drawLine(posX, posY - (hCursor >> 1), posX, 0); |
135 | 139 |
g.drawLine(posX, posY + (hCursor >> 1), posX, h); |
... | ... | |
289 | 293 |
setOperation(REDIM_DOWN); |
290 | 294 |
return; |
291 | 295 |
} |
296 |
setOperation(NONE); |
|
292 | 297 |
canvas.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
293 | 298 |
} |
294 | 299 |
|
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/georeferencing/ui/zoom/CanvasZone.java | ||
---|---|---|
52 | 52 |
* ?ltimo extent aplicado. Si no ha variado el siguiente a aplicar no hace falta que releamos de nuevo |
53 | 53 |
*/ |
54 | 54 |
private Rectangle2D lastExtent = null; |
55 |
//Ultimo Image con la capa dibujada y con la transformaci?n que tiene en cuenta los desplazamientos dentro de un pixel |
|
56 |
//Este buffer no varia hasta que se hace la siguiente petici?n de setDrawParams |
|
55 | 57 |
private BufferedImage lastImage = null; |
58 |
//lastImage sobre el que se pintan las capas gr?ficas. Este buffer varia en cada repaint. El orden en el que se carga |
|
59 |
//es: se vuelva el lastImage, se pintan las capas gr?ficas, se pintan las tools. |
|
60 |
private BufferedImage lastImageWithLayers = null; |
|
56 | 61 |
|
57 | 62 |
private boolean clear = false; |
58 | 63 |
private Color background = Color.WHITE; |
... | ... | |
245 | 250 |
protected void paintComponent(Graphics g) { |
246 | 251 |
if(image == null) |
247 | 252 |
return; |
248 |
|
|
253 |
|
|
249 | 254 |
int w = getVisibleRect().width; |
250 | 255 |
int h = getVisibleRect().height; |
251 | 256 |
Rectangle2D ext = getCanvasExtent(w, h, scale); |
252 | 257 |
|
253 |
if(lastImage == null || !equal(lastExtent, ext)) |
|
258 |
if(lastImage == null || !equal(lastExtent, ext)) {
|
|
254 | 259 |
lastImage = new BufferedImage((int)w, (int)h, BufferedImage.TYPE_INT_RGB); |
255 |
|
|
260 |
lastImageWithLayers = new BufferedImage((int)w, (int)h, BufferedImage.TYPE_INT_RGB); |
|
261 |
} |
|
262 |
|
|
256 | 263 |
if(clear) { |
257 | 264 |
g.setColor(Color.WHITE); |
258 | 265 |
g.fillRect(0, 0, w, h); |
259 | 266 |
return; |
260 | 267 |
} |
261 |
|
|
268 |
|
|
262 | 269 |
//Dibujamos el buffer sobre el grafics |
263 |
draw((Graphics2D)g, ext, w, h);
|
|
264 |
|
|
270 |
Graphics graphicsDB = draw(ext, w, h);
|
|
271 |
|
|
265 | 272 |
//Dibujamos todas las capas registradas |
266 | 273 |
for (int i = 0; i < graphicLayers.size(); i++) |
267 |
((IGraphicLayer)graphicLayers.get(i)).draw((Graphics2D)g, ext, w, h); |
|
274 |
((IGraphicLayer)graphicLayers.get(i)).draw((Graphics2D)graphicsDB, ext, w, h);
|
|
268 | 275 |
|
269 | 276 |
lastExtent = ext; |
270 | 277 |
|
271 | 278 |
if(selectedTool != null) |
272 |
selectedTool.draw(g); |
|
279 |
selectedTool.draw(graphicsDB);
|
|
273 | 280 |
|
274 | 281 |
if(showInfo) |
275 |
showInfo(g); |
|
276 |
|
|
277 |
g.dispose(); |
|
282 |
showInfo(graphicsDB); |
|
283 |
|
|
284 |
g.drawImage(lastImageWithLayers, 0, 0, this); |
|
285 |
graphicsDB.dispose(); |
|
278 | 286 |
} |
279 | 287 |
|
280 | 288 |
/** |
... | ... | |
283 | 291 |
*/ |
284 | 292 |
private void showInfo(Graphics g) { |
285 | 293 |
g.setColor(Color.RED); |
286 |
g.drawString("X: " + MathUtils.tailDecimals(viewCoord.getX(), 3), 12, 10);
|
|
287 |
g.drawString("Y: " + MathUtils.tailDecimals(viewCoord.getY(), 3), 12, 24);
|
|
288 |
g.drawString("X': " + MathUtils.tailDecimals(realCoord.getX(), 3), 12, 38);
|
|
289 |
g.drawString("Y': " + MathUtils.tailDecimals(realCoord.getY(), 3), 12, 52);
|
|
294 |
g.drawString("X: " + MathUtils.tailDecimals(viewCoord.getX(), 3), 12, 12);
|
|
295 |
g.drawString("Y: " + MathUtils.tailDecimals(viewCoord.getY(), 3), 12, 26);
|
|
296 |
g.drawString("X': " + MathUtils.tailDecimals(realCoord.getX(), 3), 12, 40);
|
|
297 |
g.drawString("Y': " + MathUtils.tailDecimals(realCoord.getY(), 3), 12, 54);
|
|
290 | 298 |
} |
291 | 299 |
|
292 | 300 |
/** |
... | ... | |
333 | 341 |
* @param w |
334 | 342 |
* @param h |
335 | 343 |
*/ |
336 |
private void draw(Graphics2D g, Rectangle2D ext, double w, double h) {
|
|
344 |
private Graphics draw(Rectangle2D ext, double w, double h) {
|
|
337 | 345 |
if(!equal(lastExtent, ext)) { |
338 | 346 |
//Hallamos la coordenada pixel del buffer de la esquina superior izquierda del extent |
339 | 347 |
double pxX = ((ext.getMinX() - extent.getMinX()) * (w / scale)) / ext.getWidth(); |
... | ... | |
348 | 356 |
for (int i = 0; i < w; i++) { |
349 | 357 |
yValue = pxY; |
350 | 358 |
for (int j = 0; j < h; j++) { |
351 |
if((int)xValue >= 0 && (int)yValue >= 0 && (int)xValue < image.getWidth() && (int)yValue < image.getHeight()) |
|
359 |
if((int)xValue >= 0 && (int)yValue >= 0 && (int)xValue < image.getWidth() && (int)yValue < image.getHeight()) {
|
|
352 | 360 |
lastImage.setRGB(i, j, image.getRGB((int)xValue, (int)yValue)); |
353 |
else |
|
361 |
lastImageWithLayers.setRGB(i, j, image.getRGB((int)xValue, (int)yValue)); |
|
362 |
} else { |
|
354 | 363 |
lastImage.setRGB(i, j, 0xffffffff); |
364 |
lastImageWithLayers.setRGB(i, j, 0xffffffff); |
|
365 |
} |
|
355 | 366 |
yValue += step; |
356 | 367 |
} |
357 | 368 |
xValue += step; |
358 | 369 |
} |
359 |
} |
|
360 |
//Ahora ya podemos ordenar el dibujado con coordenadas enteras |
|
361 |
g.setColor(background); |
|
362 |
g.fillRect(0, 0, (int)w, (int)h); |
|
363 |
g.drawImage(lastImage, 0, 0, this); |
|
370 |
} else |
|
371 |
((Graphics2D)lastImageWithLayers.getGraphics()).drawImage(lastImage, 0, 0, null); |
|
372 |
|
|
373 |
return lastImageWithLayers.getGraphics(); |
|
364 | 374 |
} |
365 | 375 |
|
366 | 376 |
/* |
Also available in: Unified diff