/* * Created on 29.06.2005 for PIROL * * SVN header information: * $Author: LBST-PF-3\orahn $ * $Rev: 2509 $ * $Date: 2006-10-06 10:01:50 +0000 (Fr, 06 Okt 2006) $ * $Id: ExtractSelectedPartOfImage.java 2509 2006-10-06 10:01:50Z LBST-PF-3\orahn $ */ package org.openjump.core.ui.plugin.layer.pirolraster; import java.awt.image.BufferedImage; import java.awt.image.Raster; import org.openjump.core.apitools.LayerTools; import org.openjump.core.apitools.PlugInContextTools; import org.openjump.core.apitools.SelectionTools; import org.openjump.core.rasterimage.CurrentLayerIsRasterImageLayerCheck; import org.openjump.core.rasterimage.RasterImageLayer; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.workbench.WorkbenchContext; import com.vividsolutions.jump.workbench.model.Category; import com.vividsolutions.jump.workbench.model.StandardCategoryNames; import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn; import com.vividsolutions.jump.workbench.plugin.EnableCheck; import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory; import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck; import com.vividsolutions.jump.workbench.plugin.PlugInContext; /** * PlugIn that extracts a selected part (fence) of a raster image to a new raster image layer.<br> * Some parts were taken from Stefan Ostermann's SaveInterpolationAsImagePlugIn. * * @author Ole Rahn, (Stefan Ostermann) * <br> * <br>FH Osnabrück - University of Applied Sciences Osnabrück, * <br>Project: PIROL (2005), * <br>Subproject: Daten- und Wissensmanagement * * @version $Rev: 2509 $ * [sstein] - 22.Feb.2009 - modified to work in OpenJUMP */ public class ExtractSelectedPartOfImage extends AbstractPlugIn { public ExtractSelectedPartOfImage(){ //super(new PersonalLogger(DebugUserIds.OLE)); } /** *@inheritDoc */ public String getIconString() { return "extractPart.png"; //$NON-NLS-1$ } /** * @inheritDoc */ public String getName() { return I18N.get("org.openjump.core.ui.plugin.layer.pirolraster.ExtractSelectedPartOfImage.Extract-Selected-Part-Of-Image"); } /** *@inheritDoc */ public boolean execute(PlugInContext context) throws Exception { RasterImageLayer rLayer = (RasterImageLayer) LayerTools.getSelectedLayerable(context, RasterImageLayer.class); if (rLayer==null){ context.getWorkbenchFrame().warnUser(I18N.get("pirol.plugIns.EditAttributeByFormulaPlugIn.no-layer-selected")); //$NON-NLS-1$ return false; } Geometry fence = SelectionTools.getFenceGeometry(context); Envelope envWanted = fence.getEnvelopeInternal(); BufferedImage partOfImageWanted = rLayer.getTileAsImage(envWanted); Raster partOfRasterWanted = rLayer.getTileAsRaster(envWanted); //[sstein 2 Aug 2010] need to add as we have now the image for display plus the data if (partOfImageWanted==null){ context.getWorkbenchFrame().warnUser(I18N.get("org.openjump.core.ui.plugin.layer.pirolraster.ExtractSelectedPartOfImage.fence-in-wrong-region")); return false; } boolean returnVal = this.putImageIntoMap(partOfImageWanted, partOfRasterWanted, envWanted, rLayer, context); return returnVal; } protected boolean putImageIntoMap(BufferedImage partOfImage, Raster partOfRaster, Envelope envelope, RasterImageLayer rLayer, PlugInContext context){ if (partOfImage==null) return false; String newLayerName = context.getLayerManager().uniqueLayerName(I18N.get("org.openjump.core.ui.plugin.layer.pirolraster.ExtractSelectedPartOfImage.part-of") + rLayer.getName()); RasterImageLayer newRasterLayer = new RasterImageLayer(newLayerName, context.getLayerManager(), partOfImage, partOfRaster, envelope); String catName = StandardCategoryNames.WORKING; try { catName = ((Category)context.getLayerNamePanel().getSelectedCategories().toArray()[0]).getName(); } catch (RuntimeException e1) {} context.getLayerManager().addLayerable(catName, newRasterLayer); return true; } public static MultiEnableCheck createEnableCheck(final WorkbenchContext workbenchContext) { MultiEnableCheck multiEnableCheck = new MultiEnableCheck(); EnableCheckFactory checkFactory = new EnableCheckFactory(workbenchContext); multiEnableCheck.add( checkFactory.createExactlyNLayerablesMustBeSelectedCheck(1, RasterImageLayer.class) ); multiEnableCheck.add( checkFactory.createFenceMustBeDrawnCheck() ); EnableCheck enableCheck = new CurrentLayerIsRasterImageLayerCheck(PlugInContextTools.getContext(workbenchContext)); multiEnableCheck.add(enableCheck); return multiEnableCheck; } public void initialize(PlugInContext context) throws Exception {} }