Revision 6630 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/FMap.java
FMap.java | ||
---|---|---|
276 | 276 |
|
277 | 277 |
public void setCanceled(boolean canceled) { |
278 | 278 |
// No queremos que se pueda cancelar la impresi?n. |
279 |
|
|
279 |
|
|
280 | 280 |
} |
281 | 281 |
}; |
282 | 282 |
layers.print(g, viewPort, cancel, scale); |
... | ... | |
364 | 364 |
.getMapUnits()]); |
365 | 365 |
} |
366 | 366 |
|
367 |
return (long) proj.getScale(viewPort.getAdjustedExtent().getMinX(),
|
|
367 |
return Math.round(proj.getScale(viewPort.getAdjustedExtent().getMinX(),
|
|
368 | 368 |
viewPort.getAdjustedExtent().getMaxX(), viewPort.getImageSize() |
369 |
.getWidth(), dpi); |
|
369 |
.getWidth(), dpi));
|
|
370 | 370 |
} |
371 |
/** |
|
372 |
* Introduce un nuevo extent en la vista a partir de la escala que se pasa como par?metro. |
|
373 |
* |
|
374 |
* @return escala de la vista. |
|
375 |
*/ |
|
376 |
public void setScaleView(long scale) { |
|
377 |
// TODO falta implementar un di?logo para poder especificar el usuario |
|
378 |
// los pixels exactos de su pantalla. |
|
379 |
Toolkit kit = Toolkit.getDefaultToolkit(); |
|
380 |
double dpi = kit.getScreenResolution(); |
|
381 |
if (viewPort.getImageSize() == null) |
|
382 |
return; |
|
371 | 383 |
|
384 |
double w = ((viewPort.getImageSize().getWidth() / dpi) * 2.54); |
|
385 |
double h = ((viewPort.getImageSize().getHeight() / dpi) * 2.54); |
|
386 |
|
|
387 |
if (viewPort.getAdjustedExtent() == null) { |
|
388 |
return; |
|
389 |
} |
|
390 |
double wExtent =w * scale/ CHANGE[getViewPort().getMapUnits()]; |
|
391 |
double hExtent =h * scale/ CHANGE[getViewPort().getMapUnits()]; |
|
392 |
|
|
393 |
Rectangle2D e=getViewPort().getAdjustedExtent(); |
|
394 |
double xExtent = e.getCenterX() - wExtent/2; |
|
395 |
double yExtent = e.getCenterY() - hExtent/2; |
|
396 |
getViewPort().setExtent(new Rectangle2D.Double(xExtent,yExtent,wExtent,hExtent)); |
|
397 |
|
|
398 |
} |
|
372 | 399 |
/** |
373 | 400 |
* @see com.iver.cit.gvsig.fmap.operations.strategies.Strategy#setVectorial(com.iver.cit.gvsig.fmap.VectorialAdapter) |
374 | 401 |
*/ |
... | ... | |
527 | 554 |
* if ((viewPort.getImageWidth() <=0) || (viewPort.getImageHeight() <= |
528 | 555 |
* 0)) { return; } |
529 | 556 |
*/ |
530 |
|
|
557 |
|
|
531 | 558 |
prepareDrawing(image, g, scale); |
532 |
|
|
559 |
|
|
533 | 560 |
// M?s c?lidad al texto |
534 | 561 |
RenderingHints renderHints = new RenderingHints( |
535 | 562 |
RenderingHints.KEY_ANTIALIASING, |
... | ... | |
552 | 579 |
fireLayerDrawingEvent(afterTracLayerEvent); |
553 | 580 |
|
554 | 581 |
long t2 = System.currentTimeMillis(); |
555 |
System.err.println("Tiempo de dibujado:" + (t2 - t1) +
|
|
582 |
System.err.println("Tiempo de dibujado:" + (t2 - t1) + |
|
556 | 583 |
" mseg. Memoria libre:" + Runtime.getRuntime().freeMemory() / 1024 + " KB"); |
557 | 584 |
/* |
558 | 585 |
* g.setColor(Color.BLUE); GeneralPath shpR = new |
... | ... | |
563 | 590 |
} |
564 | 591 |
|
565 | 592 |
/** |
566 |
* En esta funci?n vamos a revisar las capas que necesitan repintarse,
|
|
593 |
* En esta funci?n vamos a revisar las capas que necesitan repintarse, |
|
567 | 594 |
* por si hay alguna que se haya guardado la imagen de las anteriores |
568 | 595 |
* y puede acelerar el dibujado. |
569 | 596 |
* @param image |
... | ... | |
571 | 598 |
* @param scale |
572 | 599 |
*/ |
573 | 600 |
private void prepareDrawing(BufferedImage image, Graphics2D g, double scale) { |
574 |
|
|
601 |
|
|
575 | 602 |
// Primera pasada: si alguna capa necesita repintarse por debajo |
576 | 603 |
// de la que tiene la cache, TODAS necesitan |
577 |
// ser repintadas.
|
|
604 |
// ser repintadas. |
|
578 | 605 |
boolean bNeedRepaint = false; |
579 | 606 |
boolean bMayExistAceleration = false; |
580 | 607 |
for (int i = 0; i < layers.getLayersCount(); i++) |
... | ... | |
597 | 624 |
else |
598 | 625 |
recursivePrepareDrawing(layers, 0); |
599 | 626 |
} |
600 |
|
|
627 |
|
|
601 | 628 |
private void validatePreviousLayers(FLayers layers, int index) |
602 | 629 |
{ |
603 | 630 |
// TODO: Aqu? quiz?s habr?a que explorar los padres de las capas |
... | ... | |
606 | 633 |
{ |
607 | 634 |
FLayer lyr = layers.getLayer(i); |
608 | 635 |
lyr.setDirty(false); |
609 |
}
|
|
636 |
} |
|
610 | 637 |
// Las de arriba las marcamos como sucias |
611 | 638 |
// for (int i = index; i < layers.getLayersCount(); i++) |
612 | 639 |
// { |
613 | 640 |
// FLayer lyr = layers.getLayer(i); |
614 | 641 |
// lyr.setDirty(true); |
615 |
// }
|
|
642 |
// } |
|
616 | 643 |
} |
617 |
|
|
644 |
|
|
618 | 645 |
private void recursivePrepareDrawing(FLayers parent, int indexInParent) |
619 | 646 |
{ |
620 | 647 |
for (int i = indexInParent; i < parent.getLayersCount(); i++) |
... | ... | |
627 | 654 |
if (lyr.isDirty()) |
628 | 655 |
validatePreviousLayers(parent, i); |
629 | 656 |
} |
630 |
|
|
657 |
|
|
631 | 658 |
if (lyr instanceof FLayers) |
632 | 659 |
{ |
633 | 660 |
recursivePrepareDrawing((FLayers)lyr, 0); |
634 | 661 |
} |
635 | 662 |
} |
636 |
|
|
663 |
|
|
637 | 664 |
} |
638 | 665 |
|
639 | 666 |
public void drawGraphics(BufferedImage image, Graphics2D g, |
... | ... | |
660 | 687 |
|
661 | 688 |
public void setCanceled(boolean canceled) { |
662 | 689 |
// TODO Auto-generated method stub |
663 |
|
|
690 |
|
|
664 | 691 |
} |
665 | 692 |
}, scale); |
666 | 693 |
} |
... | ... | |
824 | 851 |
Selectable s=null; |
825 | 852 |
try { |
826 | 853 |
s = ((AlphanumericData) lyr).getRecordset(); |
827 |
if (s!=null) {
|
|
854 |
if (s!=null) { |
|
828 | 855 |
s.addSelectionListener(eventBuffer); |
829 | 856 |
} |
830 | 857 |
} catch (DriverException e1) { |
831 | 858 |
// TODO Auto-generated catch block |
832 | 859 |
e1.printStackTrace(); |
833 | 860 |
} |
834 |
|
|
861 |
|
|
835 | 862 |
} |
836 | 863 |
} |
837 | 864 |
|
... | ... | |
911 | 938 |
public void setGraphicsLayer(GraphicLayer graphicLayer) { |
912 | 939 |
tracLayer = graphicLayer; |
913 | 940 |
} |
914 |
|
|
941 |
|
|
915 | 942 |
public boolean equals(Object arg0) { |
916 | 943 |
FMap map = (FMap) arg0; |
917 | 944 |
if (super.equals(arg0)) |
Also available in: Unified diff