Revision 5472 org.gvsig.raster.tools/branches/org.gvsig.raster.tools_proyeccion_al_vuelo/org.gvsig.raster.tools.app.basic/src/main/java/org/gvsig/raster/tools/app/basic/tool/clip/ui/listener/ClippingPanelListener.java

View differences:

ClippingPanelListener.java
45 45
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
46 46
import org.gvsig.fmap.dal.coverage.exception.ROIException;
47 47
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
48
import org.gvsig.fmap.geom.Geometry;
49
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
50
import org.gvsig.fmap.geom.GeometryLocator;
51
import org.gvsig.fmap.geom.GeometryManager;
52
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
53
import org.gvsig.fmap.geom.operation.GeometryOperationException;
54
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
48 55
import org.gvsig.fmap.geom.primitive.Envelope;
49 56
import org.gvsig.fmap.mapcontrol.MapControl;
50 57
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
......
76 83
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingOptionsPanel;
77 84
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingResolutionPanel;
78 85
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingSelectionPanel;
86
import org.gvsig.tools.swing.api.ToolsSwingLocator;
87
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
88
import org.slf4j.Logger;
89
import org.slf4j.LoggerFactory;
79 90

  
80 91
/**
81 92
 * <code>ClippingPanelListener</code> es una clase donde se recoger?n y
......
84 95
 * @author BorSanZa - Borja S?nchez Zamorano 
85 96
 */
86 97
public class ClippingPanelListener implements ActionListener, RectangleListener, ButtonsPanelListener, CoordinatesListener, DataInputContainerListener, IProcessActions {
98
    
99
    private static final Logger LOG = LoggerFactory.getLogger(ClippingPanelListener.class);
100
    
87 101
	private Dimension             dim                     = new Dimension();
88 102
	private AffineTransform       at                      = null;
89 103
	private ClippingPanel         clippingPanel           = null;
......
558 572
			return;
559 573
		}
560 574

  
561
		double[] wcValues = data.getWcCoordinatesToClip();
562
		double[] pxValues = data.getPxCoordinatesToClip();
563
		boolean pxRound = arePixelsRound(pxValues);
564

  
565 575
		// Seleccionamos las bandas que se usaran en el recorte a partir de la tabla
566 576
		int countBands = 0;
567 577
		int rowCount = ((CheckBoxModel) getSelectionPanel().getTableContainer().getModel()).getRowCount();
......
608 618
		/**
609 619
		 * Preparacion para la generacion del proceso del recorte
610 620
		 */
611
		if (getFLayer() == null)
612
			return;
621
		if (getFLayer() == null){
622
		    return;
623
		}
624
		
625
		double[] pxValues = data.getPxCoordinatesToClip();
626
        boolean pxRound = arePixelsRound(pxValues);
627
        double[] wcValues = data.getWcCoordinatesToClip();
628
        
629
        if (getFLayer().getCoordTrans() != null) {
613 630

  
631
            GeometryManager geometryManager = GeometryLocator.getGeometryManager();
632
            Envelope envelope = null;
633
            Envelope storeEnvelope = null;
634
            Envelope projectedEnvelope = null;
635
            Extent extent = getFLayer().getDataStore().getExtent();
636

  
637
            try {
638
                // Create envelope with coordinates of clip area
639
                envelope =
640
                    geometryManager.createEnvelope(wcValues[0], wcValues[3], wcValues[2],
641
                        wcValues[1], SUBTYPES.GEOM2D);
642

  
643
            } catch (CreateEnvelopeException e) {
644
                String errorMessage =
645
                    String.format("Can not create envelope with [%1d,%1d,%1d,%1d,%1s] parameters",
646
                        wcValues[0], wcValues[3], wcValues[2], wcValues[1], SUBTYPES.GEOM2D);
647
                LOG.error(errorMessage, e);
648

  
649
                ThreadSafeDialogsManager tsdm = ToolsSwingLocator.getThreadSafeDialogsManager();
650
                tsdm.messageDialog("error_cutting", "_error",
651
                    JOptionPane.ERROR_MESSAGE);
652
                return;
653
            }
654
            
655
            // Get envelope of raster store
656
            try {
657
                storeEnvelope =
658
                    geometryManager.createEnvelope(extent.getMin().getX(), extent.getMin().getY(),
659
                        extent.getMax().getX(), extent.getMax().getY(), SUBTYPES.GEOM2D);
660
            } catch (CreateEnvelopeException e) {
661
                String errorMessage =
662
                    String.format("Can not create envelope with [%1d,%1d,%1d,%1d,%1s] parameters",
663
                        extent.getMin().getX(), extent.getMin().getY(), extent.getMax().getX(),
664
                        extent.getMax().getY(), SUBTYPES.GEOM2D);
665
                LOG.error(errorMessage, e);
666

  
667
                ThreadSafeDialogsManager tsdm = ToolsSwingLocator.getThreadSafeDialogsManager();
668
                tsdm.messageDialog("error_cutting", "_error",
669
                    JOptionPane.ERROR_MESSAGE);
670
                return;
671
            }
672
            
673
            // Reproject to store projection using layer coordinate transform 
674
            projectedEnvelope = envelope.convert(getFLayer().getCoordTrans().getInverted());
675
            try {
676
                // Get instersection to fix projected envelope
677
                Geometry intersection =
678
                    projectedEnvelope.getGeometry().intersection(storeEnvelope.getGeometry());
679
                projectedEnvelope = geometryManager.createEnvelope(SUBTYPES.GEOM2D);
680
                projectedEnvelope.add(intersection);
681
            } catch (GeometryOperationNotSupportedException | GeometryOperationException e) {
682
                String errorMessage =
683
                    String.format(
684
                        "Can not intersects [%1s] projected envelope with [%1s] store envelope",
685
                        projectedEnvelope, storeEnvelope);
686
                LOG.error(errorMessage, e);
687

  
688
                ThreadSafeDialogsManager tsdm = ToolsSwingLocator.getThreadSafeDialogsManager();
689
                tsdm.messageDialog("error_cutting", "_error",
690
                    JOptionPane.ERROR_MESSAGE);
691
                return;
692
            } catch (CreateEnvelopeException e) {
693
                String errorMessage =
694
                    String.format("Can not create envelope with [%1s] parameters", SUBTYPES.GEOM2D);
695
                LOG.error(errorMessage, e);
696

  
697
                ThreadSafeDialogsManager tsdm = ToolsSwingLocator.getThreadSafeDialogsManager();
698
                tsdm.messageDialog("error_cutting", "_error",
699
                    JOptionPane.ERROR_MESSAGE);
700
                return;
701
            }
702

  
703
            wcValues[0] = projectedEnvelope.getLowerCorner().getX();
704
            wcValues[3] = projectedEnvelope.getLowerCorner().getY();
705
            wcValues[2] = projectedEnvelope.getUpperCorner().getX();
706
            wcValues[1] = projectedEnvelope.getUpperCorner().getY();
707
        }
708

  
614 709
		AffineTransform transf = null;
615 710
		if(pxRound && 
616 711
		   ((pxValues[2] - pxValues[0]) == data.getPxWidth()) && 

Also available in: Unified diff