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
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