47 |
47 |
import java.awt.image.WritableRaster;
|
48 |
48 |
import java.io.File;
|
49 |
49 |
import java.util.ArrayList;
|
|
50 |
import java.util.Collection;
|
50 |
51 |
import java.util.Collections;
|
51 |
52 |
import java.util.Iterator;
|
52 |
53 |
import java.util.List;
|
... | ... | |
75 |
76 |
import com.iver.cit.gvsig.fmap.drivers.VectorialDatabaseDriver;
|
76 |
77 |
import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
|
77 |
78 |
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
|
|
79 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
|
78 |
80 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.InfoByPoint;
|
79 |
81 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection;
|
80 |
82 |
import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
|
... | ... | |
418 |
420 |
// try
|
419 |
421 |
// {
|
420 |
422 |
boolean bNeedRecalculateCache = false;
|
|
423 |
|
|
424 |
///// CHEMA ComposedLayer
|
|
425 |
long tg1 = System.currentTimeMillis();
|
|
426 |
ComposedLayer group = null;
|
|
427 |
ArrayList pendingEvents= new ArrayList();
|
|
428 |
boolean fireAfterDrawEvent = true;
|
|
429 |
///// CHEMA ComposedLayer
|
|
430 |
|
|
431 |
|
|
432 |
|
421 |
433 |
// while (iter.hasNext())
|
422 |
434 |
// {
|
423 |
435 |
for (int i=0; i < layers.size(); i++) {
|
... | ... | |
425 |
437 |
break; // M?s que nada porque las capas raster no son interrumpibles por ahora.
|
426 |
438 |
// FLayer lyr = (FLayer) iter.next();
|
427 |
439 |
FLayer lyr = (FLayer) layers.get(i);
|
|
440 |
|
|
441 |
|
|
442 |
///// CHEMA ComposedLayer
|
|
443 |
fireAfterDrawEvent = true;
|
|
444 |
///// CHEMA ComposedLayer
|
|
445 |
|
|
446 |
|
428 |
447 |
/* if (lyr instanceof FLyrVect && ((FLyrVect)lyr).isBroken()){
|
429 |
448 |
continue;
|
430 |
449 |
}
|
... | ... | |
433 |
452 |
fmap.fireLayerDrawingEvent(beforeEvent);
|
434 |
453 |
if ((lyr.isDirty()) || (lyr.isCachingDrawnLayers() == false))
|
435 |
454 |
bNeedRecalculateCache = true;
|
436 |
|
|
|
455 |
|
437 |
456 |
if (lyr.isVisible()) {
|
438 |
457 |
|
439 |
458 |
long t1 = System.currentTimeMillis();
|
... | ... | |
460 |
479 |
{
|
461 |
480 |
//if (bNeedRecalculateCache)
|
462 |
481 |
// {
|
|
482 |
|
|
483 |
///// CHEMA ComposedLayer
|
|
484 |
if (group != null) {
|
|
485 |
//si tenemos un grupo pendiente de pintar, pintamos
|
|
486 |
// para que la cache sea fiable
|
|
487 |
group.draw(image, g, viewPort, cancel,scale);
|
|
488 |
fireLayerDrawingEvents(pendingEvents);
|
|
489 |
pendingEvents.clear();
|
|
490 |
group = null;
|
|
491 |
}
|
|
492 |
///// CHEMA ComposedLayer
|
|
493 |
|
|
494 |
|
463 |
495 |
// Copiamos la imagen actual
|
464 |
496 |
BufferedImage buff = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
|
465 |
497 |
WritableRaster w = buff.getRaster();
|
... | ... | |
477 |
509 |
// prepareDrawing de FMap.
|
478 |
510 |
if (lyr.isDirty())
|
479 |
511 |
{
|
|
512 |
|
|
513 |
|
|
514 |
///// CHEMA ComposedLayer
|
|
515 |
// Checks for draw group (ComposedLayer)
|
|
516 |
if (group != null) {
|
|
517 |
// it's going to load a cache image,
|
|
518 |
// the current draw isn't needed
|
|
519 |
fireLayerDrawingEvents(pendingEvents);
|
|
520 |
pendingEvents.clear();
|
|
521 |
group = null;
|
|
522 |
}
|
|
523 |
///// CHEMA ComposedLayer
|
|
524 |
|
|
525 |
|
480 |
526 |
g.drawImage(lyr.getCacheImageDrawnLayers(), 0, 0, null);
|
481 |
527 |
System.err.println("Pinto con acelerado lo que hab?a antes de " + lyr.getName());
|
482 |
528 |
}
|
... | ... | |
487 |
533 |
// hay que volver a dibujar.
|
488 |
534 |
if (lyr.isDirty() || bNeedRecalculateCache)
|
489 |
535 |
{
|
490 |
|
lyr.draw(image, g, viewPort, cancel,scale);
|
|
536 |
///// CHEMA ComposedLayer
|
|
537 |
//lyr.draw(image, g, viewPort, cancel,scale);
|
|
538 |
///// CHEMA ComposedLayer
|
491 |
539 |
|
492 |
|
/*
|
|
540 |
// Checks for draw group (ComposedLayer)
|
|
541 |
if (group != null) {
|
|
542 |
//If layer can be added to the group, does it
|
|
543 |
if (group.canAdd(lyr)) {
|
|
544 |
group.add(lyr);
|
|
545 |
pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
|
|
546 |
fireAfterDrawEvent=false;
|
|
547 |
} else {
|
|
548 |
// draw the 'pending to draw' layer group
|
|
549 |
group.draw(image, g, viewPort, cancel,scale);
|
|
550 |
fireLayerDrawingEvents(pendingEvents);
|
|
551 |
pendingEvents.clear();
|
|
552 |
|
|
553 |
// gets a new group instance
|
|
554 |
group = lyr.newComposedLayer();
|
|
555 |
// if layer hasn't group, draws it inmediately
|
|
556 |
if (group == null) {
|
|
557 |
lyr.draw(image, g, viewPort, cancel,scale);
|
|
558 |
} else {
|
|
559 |
// add the layer to the group
|
|
560 |
group.add(lyr);
|
|
561 |
pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
|
|
562 |
fireAfterDrawEvent=false;
|
|
563 |
}
|
|
564 |
}
|
|
565 |
} else {
|
|
566 |
// gets a new group instance
|
|
567 |
group = lyr.newComposedLayer();
|
|
568 |
// if layer hasn't group, draws it inmediately
|
|
569 |
if (group == null) {
|
|
570 |
lyr.draw(image, g, viewPort, cancel,scale);
|
|
571 |
} else {
|
|
572 |
// adds the layer to the group
|
|
573 |
group.add(lyr);
|
|
574 |
pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
|
|
575 |
fireAfterDrawEvent=false;
|
|
576 |
}
|
|
577 |
}
|
|
578 |
///// CHEMA ComposedLayer
|
|
579 |
|
|
580 |
/*
|
493 |
581 |
* (Jaume)
|
494 |
582 |
* If the layer is instance of ILabelable then it may have labels.
|
495 |
583 |
*/
|
496 |
584 |
if (lyr instanceof ILabelable && ((ILabelable) lyr).isLabeled()) {
|
|
585 |
|
|
586 |
///// CHEMA ComposedLayer
|
|
587 |
if (group != null) {
|
|
588 |
//si tenemos un grupo pendiente de pintar, pintamos
|
|
589 |
// para que se pinten correctamente las etiquetas
|
|
590 |
group.draw(image, g, viewPort, cancel,scale);
|
|
591 |
fireLayerDrawingEvents(pendingEvents);
|
|
592 |
pendingEvents.clear();
|
|
593 |
group = null;
|
|
594 |
}
|
|
595 |
///// CHEMA ComposedLayer
|
|
596 |
|
|
597 |
|
497 |
598 |
((ILabelable) lyr).drawLabels(image, g, viewPort, cancel, scale);
|
498 |
599 |
}
|
499 |
600 |
bNeedRecalculateCache = true;
|
... | ... | |
516 |
617 |
+ (t2-t1) + " milisecs.");
|
517 |
618 |
lyr.setDirty(false);
|
518 |
619 |
}
|
519 |
|
LayerDrawEvent afterEvent = new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW);
|
520 |
|
fmap.fireLayerDrawingEvent(afterEvent);
|
|
620 |
///// CHEMA ComposedLayer
|
|
621 |
if (fireAfterDrawEvent) {
|
|
622 |
///// CHEMA ComposedLayer
|
|
623 |
LayerDrawEvent afterEvent = new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW);
|
|
624 |
fmap.fireLayerDrawingEvent(afterEvent);
|
|
625 |
///// CHEMA ComposedLayer
|
|
626 |
}
|
|
627 |
///// CHEMA ComposedLayer
|
|
628 |
}
|
|
629 |
|
|
630 |
///// CHEMA ComposedLayer
|
|
631 |
if (group != null) {
|
|
632 |
//si tenemos un grupo pendiente de pintar, pintamos
|
|
633 |
group.draw(image, g, viewPort, cancel,scale);
|
|
634 |
fireLayerDrawingEvents(pendingEvents);
|
521 |
635 |
|
522 |
|
}
|
|
636 |
}
|
|
637 |
///// CHEMA ComposedLayer
|
523 |
638 |
if (getVirtualLayers() != null) {
|
524 |
639 |
getVirtualLayers().draw(image, g, viewPort, cancel,scale);
|
525 |
640 |
}
|
... | ... | |
528 |
643 |
// {
|
529 |
644 |
// System.err.println(e.getMessage());
|
530 |
645 |
// }
|
|
646 |
long tg2 = System.currentTimeMillis();
|
|
647 |
|
|
648 |
System.out.println("Draw all layer "
|
|
649 |
+ (tg2-tg1) + " milisecs.");
|
|
650 |
|
531 |
651 |
}
|
532 |
|
|
|
652 |
|
|
653 |
private void fireLayerDrawingEvents(Collection events) {
|
|
654 |
Iterator iter = events.iterator();
|
|
655 |
LayerDrawEvent afterEvent;
|
|
656 |
while (iter.hasNext()) {
|
|
657 |
afterEvent =(LayerDrawEvent)iter.next();
|
|
658 |
System.out.println("+++ evento " + afterEvent.getLayer().getName());
|
|
659 |
fmap.fireLayerDrawingEvent(afterEvent);
|
|
660 |
}
|
|
661 |
}
|
|
662 |
|
533 |
663 |
/**
|
534 |
664 |
* @see com.iver.cit.gvsig.fmap.layers.FLayer#print(java.awt.Graphics2D,
|
535 |
665 |
* com.iver.cit.gvsig.fmap.ViewPort,
|