Revision 11322

View differences:

org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.raster.roimask.ROIMaskToolboxLibrary
0 2

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources/org/gvsig/raster/roimask/roimask_en.properties
1
applying_mask=Applying mask
2
mask_process=Mask process
3
mask=ROI mask
4
basic_raster_algorithms=Raster layers
5
alpha=Alpha
6
inverse=Inverse
0 7

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources/org/gvsig/raster/roimask/roimask.properties
1
applying_mask=Aplicando m?scara
2
mask_process=Proceso de m?scara
3
mask=M?scara por ROI
4
basic_raster_algorithms=Capas r?ster
5
alpha=Transparencia
6
inverse=Inversa
0 7

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources/help/ROIMaskSextanteAlgorithm.xml
1
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
2
<help>
3
	<element name="DESCRIPTION"
4
		text=""
5
		description="Descripci&#243;n" type="0">
6
		<!-- <image description="" file="">
7
		</image> -->
8
	</element>
9
	<element name="ADDITIONAL_INFO" text=""
10
		description="Informaci&#243;n adicional" type="0">
11
	</element>
12
	<element name="EXTENSION_AUTHOR" text=""
13
		description="Algoritmo creado por" type="0">
14
	</element>
15
	<element name="HELP_AUTHOR" text="" description="Ayuda creada por"
16
		type="0">
17
	</element>
18
	<element name="USER_NOTES" text="" description="Notas de usuario"
19
		type="0">
20
	</element>
21
</help>
0 22

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources/help/ROIMaskSextanteAlgorithm_en.xml
1
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
2
<help>
3
	<element name="DESCRIPTION"
4
		text=""
5
		description="Descripci&#243;n" type="0">
6
		<!-- <image description="" file="">
7
		</image> -->
8
	</element>
9
	<element name="ADDITIONAL_INFO" text=""
10
		description="Informaci&#243;n adicional" type="0">
11
	</element>
12
	<element name="EXTENSION_AUTHOR" text=""
13
		description="Algoritmo creado por" type="0">
14
	</element>
15
	<element name="HELP_AUTHOR" text="" description="Ayuda creada por"
16
		type="0">
17
	</element>
18
	<element name="USER_NOTES" text="" description="Notas de usuario"
19
		type="0">
20
	</element>
21
</help>
0 22

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/java/org/gvsig/raster/roimask/ROIMaskToolboxLibrary.java
1
package org.gvsig.raster.roimask;
2

  
3
import org.gvsig.i18n.Messages;
4
import org.gvsig.tools.library.AbstractLibrary;
5
import org.gvsig.tools.library.LibraryException;
6
import org.slf4j.LoggerFactory;
7

  
8
/**
9
 * Initialization of <code>ROIMaskToolboxLibrary</code> library.
10
 */
11
public class ROIMaskToolboxLibrary extends AbstractLibrary {
12

  
13
    @Override
14
    protected void doInitialize() throws LibraryException {
15
        // Nothing to do
16
    }
17

  
18
    @Override
19
    protected void doPostInitialize() throws LibraryException {
20
        Messages.addResourceFamily(
21
            "org.gvsig.raster.roimask.roimask", ROIMaskToolboxLibrary.class
22
                .getClassLoader(), ROIMaskToolboxLibrary.class.getClass().getName());
23
        try {
24
        	org.gvsig.geoprocess.lib.api.GeoProcessLocator.getGeoProcessManager().registerGeoProcess(
25
        			new ROIMaskSextanteAlgorithm());
26
        } catch (NoClassDefFoundError e) {
27
    		LoggerFactory.getLogger(ROIMaskToolboxLibrary.class).debug("", e);
28
    	}
29
    }
30

  
31
}
0 32

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/java/org/gvsig/raster/roimask/ROIMaskSextanteAlgorithm.java
1
package org.gvsig.raster.roimask;
2

  
3
import org.gvsig.fmap.dal.coverage.RasterLocator;
4
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
5
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
6
import org.gvsig.fmap.dal.coverage.exception.ROIException;
7
import org.gvsig.geoprocess.lib.sextante.AbstractSextanteGeoProcess;
8
import org.gvsig.geoprocess.lib.sextante.dataObjects.FLyrRasterIRasterLayer;
9
import org.gvsig.raster.algorithm.RasterBaseAlgorithmLibrary;
10
import org.gvsig.raster.algorithm.process.DataProcess;
11
import org.gvsig.raster.algorithm.process.ProcessException;
12
import org.gvsig.raster.fmap.layers.FLyrRaster;
13
import org.gvsig.raster.roi.ROI;
14
import org.gvsig.raster.roimask.algorithm.ROIMaskProcess;
15

  
16
import es.unex.sextante.additionalInfo.AdditionalInfoNumericalValue;
17
import es.unex.sextante.core.AnalysisExtent;
18
import es.unex.sextante.core.Sextante;
19
import es.unex.sextante.dataObjects.IRasterLayer;
20
import es.unex.sextante.exceptions.GeoAlgorithmExecutionException;
21
import es.unex.sextante.exceptions.RepeatedParameterNameException;
22

  
23
/**
24
 * ...
25
 */
26
public class ROIMaskSextanteAlgorithm extends AbstractSextanteGeoProcess {
27

  
28
    public static final String RESULT            = "RESULT";
29
    public static final String LAYER             = ROIMaskProcess.RASTER_STORE1;
30
    public static final String ALPHA             = ROIMaskProcess.ALPHA;
31
    public static final String INVERSE           = ROIMaskProcess.INVERSE;
32
    public static final String NODATA            = ROIMaskProcess.NODATA;
33

  
34

  
35
    public void defineCharacteristics() {
36
        setName(getTranslation("mask"));
37
        setGroup(getTranslation("basic_raster_algorithms"));
38
        // setGeneratesUserDefinedRasterOutput(false);
39

  
40
        try {
41
            m_Parameters.addInputRasterLayer(LAYER, getTranslation("Input_layer"), true);
42
            m_Parameters.addNumericalValue(ALPHA, getTranslation("alpha"), 0,
43
                AdditionalInfoNumericalValue.NUMERICAL_VALUE_INTEGER);
44
            m_Parameters.addBoolean(INVERSE, getTranslation("Inverse"), false);
45
        } catch (RepeatedParameterNameException e) {
46
            Sextante.addErrorToLog(e);
47
        }
48
        addOutputRasterLayer(RESULT, getTranslation("mask"));
49
    }
50

  
51
    public boolean processAlgorithm() throws GeoAlgorithmExecutionException {
52

  
53
    	if(existsOutPutFile(ROIMaskSextanteAlgorithm.RESULT, 0)) {
54
    		throw new GeoAlgorithmExecutionException(getTranslation("file_exists"));
55
    	}
56

  
57
    	IRasterLayer input = m_Parameters.getParameterValueAsRasterLayer(LAYER);
58
    	int alpha = m_Parameters.getParameterValueAsInt(ALPHA);
59
    	boolean inverse = m_Parameters.getParameterValueAsBoolean(INVERSE);
60
    	FLyrRaster lyrRaster = ((FLyrRaster)input.getBaseDataObject());
61
    	ROI[] rois = null;
62
    	IRasterLayer output = null;
63
    	DataProcess task = null;
64
    	AnalysisExtent ext = getAnalysisExtent();
65
    	Extent bbox = RasterLocator.getManager().getDataStructFactory().createExtent(
66
    			ext.getXMin(), ext.getYMax(), ext.getXMax(), ext.getYMin());
67
		try {
68
			output = getNewRORasterLayer(
69
					RESULT,
70
					Sextante.getText("Mask_image"),
71
					input.getDataType(),
72
					input.getBandsCount());
73
			rois = lyrRaster.getRois().toArray(new ROI[lyrRaster.getRois().size()]);
74
			task = RasterBaseAlgorithmLibrary.getManager().createRasterTask("ROIMaskProcess");
75
		} catch (ProcessException e1) {
76
			 Sextante.addErrorToLog(e1);
77
		} catch (ROIException e1) {
78
			 Sextante.addErrorToLog(e1);
79
		}
80

  
81
    	String fileName = ((FLyrRasterIRasterLayer)output).getName();
82
    	task.addParam(ROIMaskProcess.PATH, fileName);
83
		task.addParam(ROIMaskProcess.RASTER_STORE1, lyrRaster.getDataStore());
84
		task.addParam(ROIMaskProcess.ROIS, rois);
85
		task.addParam(ROIMaskProcess.ALPHA, alpha);
86
		task.addParam(ROIMaskProcess.INVERSE, inverse);
87
		task.addParam(ROIMaskProcess.NODATA, lyrRaster.getNoDataValue());
88
		task.addParam(ROIMaskProcess.WINDOW, bbox);
89
		task.addParam(ROIMaskProcess.OUTPUT_WIDTH, ext.getNX());
90
		task.addParam(ROIMaskProcess.OUTPUT_HEIGHT, ext.getNY());
91

  
92
		try {
93
			task.execute();
94
			((FLyrRasterIRasterLayer)output).setBaseDataObject(fileName);
95
		} catch (ProcessInterruptedException e) {
96
			Sextante.addErrorToLog(e);
97
		} catch (ProcessException e) {
98
			Sextante.addErrorToLog(e);
99
		}
100

  
101
		if(getTaskMonitor().isCanceled())
102
			return false;
103

  
104
        return true;
105
    }
106

  
107
    /*
108
     * TODO: Customized panels
109
    @Override
110
    public Class<? extends GeoAlgorithmParametersPanel> getCustomParametersPanelClass() {
111
        return BufferParametersPanel.class;
112
    }*/
113
}
0 114

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources-plugin/org/gvsig/raster/roimask/sextante/i18n/text.properties
1
basic_raster_algorithms=Capas raster
2
mask=M?scara por ROI
0 3

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/src/main/resources-plugin/org/gvsig/raster/roimask/sextante/i18n/text_en.properties
1
basic_raster_algorithms=Raster layers
2
mask=ROI mask
0 3

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.toolbox.algorithm/pom.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3

  
4
	<modelVersion>4.0.0</modelVersion>
5
	<artifactId>org.gvsig.raster.roimask.toolbox.algorithm</artifactId>
6
	<packaging>jar</packaging>
7
	<name>org.gvsig.raster.roimask.toolbox.algorithm</name>
8
	<parent>
9
		<groupId>org.gvsig</groupId>
10
		<artifactId>org.gvsig.raster.roimask</artifactId>
11
		<version>2.2.100</version>
12
	</parent>
13
	<dependencies>
14
		<dependency>
15
		    <groupId>org.gvsig</groupId>
16
   			<artifactId>org.gvsig.geoprocess.algorithm.base</artifactId>
17
            <scope>compile</scope>
18
   		</dependency>
19
   		<dependency>
20
			<groupId>org.gvsig</groupId>
21
			<artifactId>org.gvsig.raster.algorithm</artifactId>
22
			<scope>compile</scope>
23
		</dependency>
24
		<dependency>
25
			<groupId>org.gvsig</groupId>
26
			<artifactId>org.gvsig.raster.roimask.algorithm</artifactId>
27
			<scope>compile</scope>
28
		</dependency>
29
		<dependency>
30
			<groupId>org.gvsig</groupId>
31
			<artifactId>org.gvsig.geoprocess.lib.sextante</artifactId>
32
			<scope>compile</scope>
33
		</dependency>
34
		<dependency>
35
			<groupId>org.gvsig</groupId>
36
			<artifactId>org.gvsig.tools.lib</artifactId>
37
			<scope>compile</scope>
38
		</dependency>
39
		<dependency>
40
			<groupId>org.gvsig</groupId>
41
			<artifactId>org.gvsig.ui</artifactId>
42
			<scope>compile</scope>
43
		</dependency>
44
	    <dependency>
45
			<groupId>org.gvsig</groupId>
46
			<artifactId>org.gvsig.i18n</artifactId>
47
			<scope>compile</scope>
48
		</dependency>
49
		<dependency>
50
            <groupId>org.gvsig</groupId>
51
            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
52
            <scope>compile</scope>
53
        </dependency>
54
        <dependency>
55
            <groupId>org.gvsig</groupId>
56
            <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
57
            <scope>runtime</scope>
58
        </dependency>
59
		<dependency>
60
            <groupId>org.gvsig</groupId>
61
            <artifactId>org.gvsig.projection.api</artifactId>
62
            <scope>compile</scope>
63
        </dependency>
64
        <dependency>
65
            <groupId>org.gvsig</groupId>
66
            <artifactId>org.gvsig.projection.cresques.impl</artifactId>
67
            <scope>runtime</scope>
68
        </dependency>
69
   		<dependency>
70
            <groupId>org.gvsig</groupId>
71
            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
72
            <scope>compile</scope>
73
        </dependency>
74
	</dependencies>
75
</project>
0 76

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/buildNumber.properties
1
#Sat Apr 25 04:52:07 CEST 2020
2
buildNumber=107
0 3

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>.</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>${project.artifactId}/lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
      <outputDirectory>${project.artifactId}</outputDirectory>
16
    </file>
17
  </files>
18
  
19
  <fileSets>
20
    <fileSet>
21
      <directory>src/main/resources-plugin</directory>
22
      <outputDirectory>${project.artifactId}</outputDirectory>
23
    </fileSet>
24
  </fileSets>
25

  
26

  
27
  <dependencySets>
28
    <dependencySet>
29
      <useProjectArtifact>false</useProjectArtifact>
30
	  <useTransitiveDependencies>false</useTransitiveDependencies>
31
      <outputDirectory>${project.artifactId}/lib</outputDirectory>
32
      <includes> 
33
			<include>org.gvsig:org.gvsig.raster.roimask.app.client:jar</include>
34
			<include>org.gvsig:org.gvsig.raster.roimask.lib.api:jar</include>
35
			<include>org.gvsig:org.gvsig.raster.roimask.lib.impl:jar</include>
36
			<include>org.gvsig:org.gvsig.raster.roimask.swing.api:jar</include>
37
			<include>org.gvsig:org.gvsig.raster.roimask.swing.impl:jar</include>
38
			<include>org.gvsig:org.gvsig.raster.roimask.algorithm:jar</include>
39
			<include>org.gvsig:org.gvsig.raster.roimask.toolbox.algorithm:jar</include>
40
	  </includes>
41
	</dependencySet>
42
	
43
	<!-- Copia el algoritmo de toolbox a install/files cuando se empaqueta para que el script de ant lo meta donde toca al instalar 
44
	
45
	<dependencySet>
46
      <useProjectArtifact>false</useProjectArtifact>
47
	  <useTransitiveDependencies>false</useTransitiveDependencies>
48
      <outputDirectory>${project.artifactId}/install/files</outputDirectory>
49
      <includes> 
50
			<include>org.gvsig:org.gvsig.raster.roimask.toolbox.algorithm:jar</include>
51
	  </includes>
52
	</dependencySet>-->
53
  </dependencySets>
54
</assembly>
0 55

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/MainPanel.java
1
package org.gvsig.raster.roimask.app;
2

  
3
import java.awt.GridBagConstraints;
4
import java.awt.GridBagLayout;
5

  
6
import javax.swing.JComponent;
7
import javax.swing.JPanel;
8

  
9
public class MainPanel extends JPanel {
10
	private static final long serialVersionUID = 1L;
11

  
12
	public MainPanel(JComponent panel, JComponent createLayer) {
13
		setLayout(new GridBagLayout());
14
		GridBagConstraints gbc = new GridBagConstraints();
15
		gbc.anchor = GridBagConstraints.WEST;
16
		gbc.fill = GridBagConstraints.BOTH;
17
		gbc.weightx = 1;
18
		gbc.weighty = 1;
19
		gbc.gridy = 0;
20
		add(panel, gbc);
21
		
22
		gbc.fill = GridBagConstraints.HORIZONTAL;
23
		gbc.weightx = 1;
24
		gbc.weighty = 0;
25
		gbc.gridy = 1;
26
		
27
		add(createLayer, gbc);
28
	}
29
}
0 30

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/toolbox/AbstractToolboxAction.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

  
25
package org.gvsig.raster.roimask.app.toolbox;
26

  
27
import org.gvsig.andami.PluginServices;
28
import org.gvsig.andami.ui.mdiManager.IWindow;
29
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
30
import org.gvsig.fmap.mapcontext.MapContext;
31
import org.gvsig.fmap.mapcontext.layers.FLayers;
32
import org.gvsig.geoprocess.lib.sextante.dataObjects.FLyrRasterIRasterLayer;
33
import org.gvsig.i18n.Messages;
34
import org.gvsig.raster.fmap.layers.FLyrRaster;
35
import org.gvsig.raster.swing.RasterSwingLibrary;
36

  
37
import es.unex.sextante.dataObjects.IRasterLayer;
38
import es.unex.sextante.gui.core.SextanteGUI;
39
import es.unex.sextante.gui.core.ToolboxAction;
40

  
41
/**
42
 * Base class for toolBox actions
43
 *
44
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
45
 */
46
public abstract class AbstractToolboxAction extends ToolboxAction {
47
	protected FLyrRaster             lyr = null;
48

  
49
	@Override
50
	public String getGroup() {
51
		return Messages.getText("group_tools");
52
	}
53

  
54

  
55
	@Override
56
	public boolean isActive() {
57
		IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
58
		for (int i = 0; i < windows.length; i++) {
59
			if(windows[i] instanceof AbstractViewPanel) {
60
				FLayers lyrs = ((AbstractViewPanel)windows[i]).getMapControl().getMapContext().getLayers();
61
				for (int j = 0; j < lyrs.getLayersCount(); j++) {
62
					if(lyrs.getLayer(j) instanceof FLyrRaster)
63
						return true;
64
				}
65
			}
66
		}
67
		return false;
68
	}
69

  
70
	/**
71
	 * Returns true if the plugin which gives the functionality is installed
72
	 * in gvSIG
73
	 * @return
74
	 */
75
	public abstract boolean isPluginInstalled();
76

  
77
	/**
78
	 * Loads the raster layer for the tool
79
	 * @return
80
	 */
81
	public boolean loadLayer() {
82
		if(!isPluginInstalled()) {
83
			RasterSwingLibrary.messageBoxError(Messages.getText("plugin_not_installed"), null);
84
			return false;
85
		}
86

  
87
		if(!isActive()) {
88
			RasterSwingLibrary.messageBoxError(Messages.getText("layer_not_valid"), null);
89
			return false;
90
		}
91

  
92
		boolean existsRasterButNotActive = false;
93
		lyr = null;
94
		IWindow[] windows = PluginServices.getMDIManager().getOrderedWindows();
95
		MapContext mapCtx = null;
96
		for (int i = 0; i < windows.length; i++) {
97
			if(windows[i] instanceof AbstractViewPanel) {
98
				mapCtx = ((AbstractViewPanel)windows[i]).getMapControl().getMapContext();
99
				break;
100
			}
101
		}
102

  
103
		IRasterLayer[] layers = SextanteGUI.getInputFactory().getRasterLayers();
104
		for (int i = 0; i < layers.length; i++) {
105
			FLyrRaster l = (FLyrRaster)((FLyrRasterIRasterLayer)layers[i]).getBaseDataObject();
106
			existsRasterButNotActive = true;
107
			if(l.isActive() && mapCtx == l.getMapContext()) {
108
				existsRasterButNotActive = false;
109
				lyr = l;
110
				break;
111
			}
112
		}
113

  
114
		if(existsRasterButNotActive) {
115
			RasterSwingLibrary.messageBoxError(Messages.getText("raster_layer_not_active"), null);
116
			return false;
117
		}
118

  
119
		return true;
120
	}
121

  
122
}
0 123

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/toolbox/ROIMaskToolboxAction.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

  
25

  
26
package org.gvsig.raster.roimask.app.toolbox;
27

  
28
import javax.swing.ImageIcon;
29

  
30
import org.gvsig.andami.IconThemeHelper;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.geoprocess.sextante.gui.core.GUIFactory;
33
import org.gvsig.i18n.Messages;
34
import org.gvsig.raster.roimask.app.ROIMaskTocMenuEntry;
35

  
36
/**
37
 * Input in Sextante framework for clip tool
38
 * 
39
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
40
 */
41
public class ROIMaskToolboxAction extends AbstractToolboxAction {
42
	
43
	public ROIMaskToolboxAction() {
44
		ImageIcon ico = IconThemeHelper.getImageIcon("gvsig-icon16x16");
45
		GUIFactory.registerExternalTool(Messages.getText("gv_tools"), ico, this);
46
	}
47
	
48
	@Override
49
	public void execute() {
50
		if(!super.loadLayer())
51
			return;
52
		
53
		ROIMaskTocMenuEntry.getSingleton().execute(null, new FLayer[]{lyr}); 
54
	}
55

  
56
	@Override
57
	public String getName() {
58
		return Messages.getText("roimask");
59
	}
60

  
61
	public ImageIcon getIcon() {
62
		return (ImageIcon)ROIMaskTocMenuEntry.getSingleton().getIcon();
63
	}
64
	
65
	public boolean isPluginInstalled() {
66
		try {
67
			ROIMaskTocMenuEntry.getSingleton();
68
		} catch(Exception e) {
69
			return false;
70
		} catch(Error e) {
71
			return false;
72
		}
73
		return true;
74
	}
75

  
76
}
0 77

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/toolbox/ToolboxROIMaskLoader.java
1
package org.gvsig.raster.roimask.app.toolbox;
2

  
3
import java.lang.reflect.Constructor;
4
import java.lang.reflect.InvocationTargetException;
5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
9
/**
10
 * Loader for this tool in the toolbox dialog
11
 * 
12
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
13
 */
14
public class ToolboxROIMaskLoader {
15
	private Logger log      = LoggerFactory.getLogger(ToolboxROIMaskLoader.class); 
16
	private String errorMsg = "The tool ROIMask are not been added in the toolbox";
17

  
18
	public void registerTool() {
19
		try {
20
			Class<?> c = Class.forName("org.gvsig.raster.roimask.app.toolbox.ROIMaskToolboxAction");
21
			Constructor<?> constructor = c.getConstructor();
22
			constructor.newInstance();
23
		} catch (ClassNotFoundException e) {
24
			log.info(errorMsg, e);
25
		} catch (SecurityException e) {
26
			log.info(errorMsg, e);
27
		} catch (NoSuchMethodException e) {
28
			log.info(errorMsg, e);
29
		} catch (IllegalArgumentException e) {
30
			log.info(errorMsg, e);
31
		} catch (InstantiationException e) {
32
			log.info(errorMsg, e);
33
		} catch (IllegalAccessException e) {
34
			log.info(errorMsg, e);
35
		} catch (InvocationTargetException e) {
36
			log.info(errorMsg, e);
37
		} catch (NoClassDefFoundError e) {
38
			log.info("Geoprocess are not installed." + errorMsg, e);
39
		}
40
	}
41

  
42
}
0 43

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/ROIMaskPreview.java
1
package org.gvsig.raster.roimask.app;
2

  
3
import java.awt.Graphics2D;
4
import java.awt.geom.Rectangle2D;
5
import java.awt.image.BufferedImage;
6
import java.io.File;
7
import java.util.ArrayList;
8
import java.util.HashMap;
9
import java.util.List;
10

  
11
import org.gvsig.fmap.dal.coverage.RasterLocator;
12
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
13
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
14
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
15
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
16
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
17
import org.gvsig.fmap.dal.coverage.exception.ROIException;
18
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
19
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
20
import org.gvsig.fmap.dal.coverage.grid.render.ImageDrawer;
21
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
22
import org.gvsig.fmap.dal.coverage.store.props.Transparency;
23
import org.gvsig.gui.beans.imagenavigator.ImageUnavailableException;
24
import org.gvsig.raster.algorithm.RasterBaseAlgorithmLibrary;
25
import org.gvsig.raster.algorithm.process.DataProcess;
26
import org.gvsig.raster.algorithm.process.ProcessException;
27
import org.gvsig.raster.algorithm.process.ProcessParamsManagement;
28
import org.gvsig.raster.fmap.layers.FLyrRaster;
29
import org.gvsig.raster.roi.ROI;
30
import org.gvsig.raster.roimask.algorithm.ROIMaskProcess;
31
import org.gvsig.raster.roimask.app.ROIMaskExtension.LayerElement;
32
import org.gvsig.raster.roimask.swing.ROIMaskData;
33
import org.gvsig.raster.swing.preview.DataSourcePreview;
34
import org.gvsig.tools.task.Cancellable;
35
import org.slf4j.Logger;
36
import org.slf4j.LoggerFactory;
37

  
38
@SuppressWarnings("deprecation")
39
public class ROIMaskPreview implements DataSourcePreview {
40
	private FLyrRaster              inputLyr          = null;
41
	private Extent                  bbox              = null;
42
	private ROIMaskData             data              = null;
43
	private static final Logger     logger            = LoggerFactory.getLogger(ROIMaskPreview.class);
44
	
45
	
46
	public void setData(ROIMaskData data) {
47
		this.data = data;
48
		loadLayers();
49
	}
50
	
51
	private void loadLayers() {
52
		if(data == null)
53
			return;
54
		Object obj = data.getInputLayer();
55
		if(obj != null)
56
			inputLyr = (FLyrRaster)((LayerElement)data.getInputLayer()).getLayer();
57
		if(inputLyr != null)
58
			bbox = inputLyr.getFullRasterExtent();		
59
	}
60
	
61
	public void closePreviewLayer() {
62
		
63
	}
64

  
65
	public double getCellSize() {
66
		if(inputLyr != null)
67
			return inputLyr.getDataStore().getCellSize();
68
		return 1;
69
	}
70
	
71
	public DataSourcePreview cloneDataSourcePreview() {
72
		return this;
73
	}
74

  
75
	public void popStatus() {
76
	}
77

  
78
	public void pushStatus() {
79
	}
80
	
81
	public void draw(BufferedImage image, Graphics2D g, double[] coords, int w, int h, Cancellable cancel, double scale) throws ImageUnavailableException {
82
		//Posici?n de inicio dibujado dentro del Graphics
83
		int x = 0;
84
		int y = 0;
85
		//Coordenadas de la petici?n
86
		double iniX = coords[0];
87
		double iniY = coords[1];
88
		double endX = coords[2];
89
		double endY = coords[3];
90
		
91
		//Se ajustan las coordenadas de petici?n, ancho y alto en coordenadas p?xel, 
92
		//as? como la coordenada de inicio de dibujado 
93
		if(bbox.getULX() > coords[0]) {
94
			iniX = bbox.getULX();
95
			x = (int)(((iniX - coords[0]) * w) / Math.abs(coords[2] - coords[0]));
96
		}
97
				
98
		if(bbox.getULY() < coords[1]) {
99
			iniY = bbox.getULY();
100
			y = (int)(((coords[1] - iniY) * h) / Math.abs(coords[3] - coords[1]));
101
		}
102
		
103
		if(bbox.getLRX() < coords[2]) 
104
			endX = bbox.getLRX();
105
		
106
		if(bbox.getLRY() > coords[3]) 
107
			endY = bbox.getLRY();
108
		
109
		if(iniX != coords[0] || endX != coords[2]) {
110
			w = (int)((Math.abs(endX - iniX) * w) / Math.abs(coords[2] - coords[0]));
111
		}
112
		
113
		if(iniY != coords[1] || endY != coords[3]) {
114
			h = (int)((Math.abs(iniY - endY) * h) / Math.abs(coords[3] - coords[1]));
115
		}
116
		
117
		Extent ext = RasterLocator.getManager().getDataStructFactory().createExtent(iniX, iniY, endX, endY);
118
		BufferedImage img = throwProcess(ext, w, h);
119
		g.drawImage(img, x, y, null);
120
	}
121
	
122
	/**
123
	 * Throws the process sequentially. Since the preview is small,
124
	 * it should not taken a lot of time
125
	 * is small
126
	 * @param ext
127
	 * @param w
128
	 * @param h
129
	 * @return
130
	 */
131
	private BufferedImage throwProcess(Extent ext, int w, int h) {
132
		loadLayers();
133
		
134
		DataProcess task;
135
		try {
136
			task = RasterBaseAlgorithmLibrary.getManager().createRasterTask("ROIMaskProcess");
137
			task.addParam(ROIMaskProcess.RASTER_STORE1, inputLyr.getDataStore());
138
			
139
			task.addParam(ProcessParamsManagement.PREVIEW, true);
140
			task.addParam(ProcessParamsManagement.WINDOW, ext);
141
			task.addParam(ProcessParamsManagement.OUTPUT_WIDTH, w);
142
			task.addParam(ProcessParamsManagement.OUTPUT_HEIGHT, h);
143
			
144
			task.addParam(ROIMaskProcess.ROIS, getROIsSelected());
145
			task.addParam(ROIMaskProcess.ALPHA, data.getAlpha());
146
			task.addParam(ROIMaskProcess.INVERSE, data.isInverse());
147
			task.addParam(ROIMaskProcess.NODATA, getNoDataSelected());
148
		} catch (ProcessException e1) {
149
			logger.debug("Error creating task", e1);
150
			return null;
151
		} catch (ROIException e) {
152
			logger.debug("Error creating task", e);
153
			return null;
154
		}
155
		
156
		task.init();
157
		try {
158
			task.process();
159
		} catch (ProcessInterruptedException e1) {
160
			return null;
161
		} catch (ProcessException e) {
162
			logger.debug("Error in process");
163
			return null;
164
		}
165
		
166
		HashMap<String, Object> map = (HashMap<String, Object>)task.getResult();
167
		Buffer buf = (Buffer)map.get(ROIMaskProcess.BUFFER);
168
		buf.setDataExtent(ext.toRectangle2D());
169
		
170
		ColorInterpretation ci = inputLyr.getDataStore().getColorInterpretation();
171
		Transparency transparency = null;
172
		if(ci.isRGB() || ci.isRGBA()) {
173
			Integer alphaBandNumber = (Integer)map.get(ROIMaskProcess.ALPHA_BAND);
174
			transparency = RasterLocator.getManager().getDataStructFactory().createTransparency(buf.getBandCount());
175
			transparency.setTransparencyBand(alphaBandNumber);
176
			transparency.activeTransparency();
177
		}
178
		
179
		ImageDrawer drawer = RasterLocator.getManager().createImageDrawerService();
180
		drawer.setBuffer(buf);
181
		drawer.setLastTransparency(transparency);
182
		try {
183
			applyFiltersToPreview(drawer);
184
			
185
			return (BufferedImage)drawer.drawBufferOverImageObject();
186
		} catch (ProcessInterruptedException e) {
187
			return null;
188
		} 
189
    }
190
	
191
	/**
192
	 * Adds filters to the preview. If the original render has a color table
193
	 * , a generic enhanced will be added.
194
	 * @param drawer
195
	 */
196
	private void applyFiltersToPreview(ImageDrawer drawer) {
197
		RasterFilterList filterList = inputLyr.getRender().getFilterList();
198
		List<RasterFilter> list = new ArrayList<RasterFilter>();
199
		if(filterList.lenght() > 0) {
200
			for (int i = 0; i < filterList.lenght(); i++) {
201
				RasterFilter rf = filterList.get(i);
202
				if(rf.getName().equals("colortable")) {
203
					drawer.addEnhanced(inputLyr.getDataStore().getStatistics(), true, 0.2);
204
					return;
205
				}
206
				list.add(rf);
207
			}
208
		}
209
		try {
210
			drawer.addFilters(inputLyr.getDataStore().getStatistics(), list);
211
		} catch (FilterTypeException e) {
212
			logger.debug("Tirando sin filtros", e);
213
		}
214
	}
215
	
216
	private NoData getNoDataSelected() {
217
		NoData nodata = RasterLocator.getManager().getDataStructFactory().createDefaultNoData(
218
				inputLyr.getDataStore().getBandCount(), inputLyr.getDataStore().getDataType()[0]);
219
		nodata.setValue(data.getValueNoData());
220
		return nodata;
221
	}
222
	
223
	private ROI[] getROIsSelected() throws ROIException {
224
		List<ROI> roi = inputLyr.getRois();
225
		boolean[] roisSelected = data.getROIsSelected();
226
		List<ROI> roisToDraw = new ArrayList<ROI>(); 
227
		for (int i = 0; i < roisSelected.length; i++) {
228
			if(roisSelected[i])
229
				roisToDraw.add(roi.get(i));
230
		}
231
		return roisToDraw.toArray(new ROI[0]);
232
	}
233
	
234
	public Object getSource() {
235
		return null;
236
	}
237

  
238
	public Rectangle2D getBBoxRectangle() {
239
		if(inputLyr != null)
240
			return inputLyr.getFullRasterExtent().toRectangle2D();
241
		return new Rectangle2D.Double();
242
	}
243

  
244
	public void addParams(DataProcess task, String path, String fileName) throws ROIException {
245
		if(!fileName.matches("([*]\\.[???])")) {
246
			fileName += ".tif";
247
		}
248
		task.addParam(ROIMaskProcess.PATH, path + File.separator + fileName);
249
		task.addParam(ROIMaskProcess.RASTER_STORE1, inputLyr.getDataStore());
250
		task.addParam(ROIMaskProcess.ROIS, getROIsSelected());
251
		task.addParam(ROIMaskProcess.ALPHA, data.getAlpha());
252
		task.addParam(ROIMaskProcess.INVERSE, data.isInverse());
253
		task.addParam(ROIMaskProcess.NODATA, getNoDataSelected());
254
	}
255
}
0 256

  
org.gvsig.raster.roimask/tags/org.gvsig.raster.roimask-2.2.100/org.gvsig.raster.roimask.app/org.gvsig.raster.roimask.app.client/src/main/java/org/gvsig/raster/roimask/app/ROIMaskWindow.java
1
package org.gvsig.raster.roimask.app;
2

  
3
import java.awt.BorderLayout;
4
import java.awt.GridBagConstraints;
5
import java.awt.GridBagLayout;
6
import java.awt.event.ActionEvent;
7
import java.awt.event.ActionListener;
8

  
9
import javax.swing.JComponent;
10
import javax.swing.JPanel;
11
import javax.swing.JSplitPane;
12
import javax.swing.border.Border;
13
import javax.swing.plaf.basic.BasicSplitPaneDivider;
14
import javax.swing.plaf.basic.BasicSplitPaneUI;
15

  
16
import org.gvsig.andami.PluginServices;
17
import org.gvsig.andami.ui.mdiManager.IWindow;
18
import org.gvsig.andami.ui.mdiManager.WindowInfo;
19
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
20
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
21

  
22
public class ROIMaskWindow extends DefaultButtonsPanel implements IWindow, ActionListener {
23
    
24
    private static final long  serialVersionUID = -4401123724140025094L;
25
    private ActionListener     listener         = null;
26
    private WindowInfo         info             = null;
27

  
28
    private Object             profile = WindowInfo.EDITOR_PROFILE;
29

  
30
    public ROIMaskWindow(JComponent panel, 
31
    		JComponent preview, 
32
    		String title, 
33
    		int w, 
34
    		int h,
35
    		boolean fixedPreview,
36
    		ActionListener actionListener) {
37
    	this.listener = actionListener;
38
    	
39
    	if(fixedPreview)
40
    		fixedPreview(panel, preview);
41
    	else
42
    		redimPreview(panel, preview);
43

  
44
        getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).addActionListener(this);
45
        //Se elimina el bot?n aplicar pq la ventana es modal. Lo que ocurre es que al terminar el proceso se
46
        //lanza el dialogo de cargar la capa en el TOC que tambi?n es modal. Esto provoca una excepci?n. El bot?n
47
        //de aceptar no da problemas pq este cierra antes la ventana inferior.
48
        getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setVisible(false);
49
        //getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).addActionListener(this);
50
        getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).addActionListener(this);
51
        
52
        info = new WindowInfo(WindowInfo.PALETTE | WindowInfo.RESIZABLE);
53
        info.setTitle(title);
54
        info.setWidth(w);
55
        info.setHeight(h);
56
    }
57
    
58
    private void fixedPreview(JComponent panel, JComponent preview) {
59
    	setLayout(new GridBagLayout());
60
		GridBagConstraints gbc = new GridBagConstraints();
61
		gbc.fill = GridBagConstraints.BOTH;
62
		gbc.weightx = 1;
63
		gbc.weighty = 1;
64
		add(panel, gbc);
65
		
66
		if(preview != null) {
67
			gbc.anchor = GridBagConstraints.NORTH;
68
			gbc.fill = GridBagConstraints.NONE;
69
			gbc.weightx = 0;
70
			gbc.weighty = 0;
71
			gbc.gridx = 1;
72
			add(preview, gbc);
73
		}
74
    }
75
    
76
    private void redimPreview(JComponent panel, JComponent preview) {
77
    	setLayout(new BorderLayout());
78
		JSplitPane splitPane = new JSplitPane();
79
		splitPane.setLeftComponent(panel);
80
		splitPane.setRightComponent(getPreviewForRedimPreviewPanel(preview));
81
		splitPane.setResizeWeight(1.0);
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff