Revision 6630 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/FMap.java

View differences:

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