/** * Salva la tabla de color al fichero rmf. * * @param fName * @throws IOException */ private void saveToRmf(String fileName) { RasterDataset rds = null; int limitNumberOfRequests = 20; while (rds == null && limitNumberOfRequests > 0) { try { rds = rasterSE.getDataSource().getDataset(0)[0]; } catch (IndexOutOfBoundsException e) { // En ocasiones, sobre todo con servicios remotos al pedir un // datasource da una excepción de este tipo // se supone que es porque hay un refresco en el mismo momento // de la petición por lo que como es más lento de // gestionar pilla a la capa sin datasources asociados ya que // está reasignandolo. Si volvemos a pedirlo debe // haberlo cargado ya. try { Thread.sleep(200); } catch (InterruptedException e1) { } } limitNumberOfRequests--; } if (rds == null) { // RasterToolsUtil.messageBoxError("error_load_layer", this, new // Exception("Error writing RMF. limitNumberOfRequests=" + // limitNumberOfRequests)); return; } RasterFilterList rasterFilterList = rasterSE.getRenderFilterList(); // Guardamos en el RMF el valor NoData if (Configuration.getValue("nodata_transparency_enabled", Boolean.FALSE).booleanValue()) { try { RasterDataset.saveObjectToRmfFile( fileName, NoData.class, new NoData( rasterSE.getNoDataValue(), rasterSE.getNoDataType(), rasterSE.getDataType()[0])); } catch (RmfSerializerException e) { RasterToolsUtil.messageBoxError("error_salvando_rmf", this, e); } } // Guardamos en el RMF la tabla de color ColorTableFilter colorTableFilter = (ColorTableFilter) rasterFilterList.getByName(ColorTableFilter.names[0]); if (colorTableFilter != null) { GridPalette gridPalette = new GridPalette((ColorTable) colorTableFilter.getColorTable().clone()); try { RasterDataset.saveObjectToRmfFile(fileName, ColorTable.class, (ColorTable) gridPalette); } catch (RmfSerializerException e) { RasterToolsUtil.messageBoxError("error_salvando_rmf", this, e); } } }
/** * Obtiene la lista de parámetros de los filtros añadidos * * @param lyr Capa raster * @return ArrayList */ public ArrayList getParamStruct( FLyrRasterSE lyr, StretchPreviewRender prevRender, StretchData data) { RasterFilterList filterList = new RasterFilterList(); filterList.setInitDataType(lyr.getDataType()[0]); RasterFilterListManager filterManager = new RasterFilterListManager(filterList); try { prevRender.addPosterization(filterManager, lyr); } catch (FilterTypeException e1) { RasterToolsUtil.messageBoxError(RasterToolsUtil.getText(null, "noposterization"), null, e1); } return getParams(filterList); }
/** * A partir de una lista de filtros devuelve un array con sus parámetros * * @param filterList * @return ArrayList */ public ArrayList getParams(RasterFilterList filterList) { ArrayList listFilterUsed = new ArrayList(); for (int i = 0; i < filterList.lenght(); i++) { try { RasterFilter filter = (RasterFilter) filterList.get(i); Params params = (Params) filter.getUIParams(filter.getName()).clone(); ParamStruct newParam = new ParamStruct(); Class c = null; if (filter instanceof LinearStretchEnhancementFilter) c = LinearStretchEnhancementFilter.class; newParam.setFilterClass(c); newParam.setFilterName(filter.getName()); newParam.setFilterParam(params); listFilterUsed.add(newParam); } catch (CloneNotSupportedException e) { } } return listFilterUsed; }
/** * Aqui se seleccionan que filtros se van a aplicar y se devuelven en forma de ArrayList tanto * para el dibujado como cuando aceptan o aplican el panel. * * @param rendering * @return */ public ArrayList applyFilters(IRasterRendering rendering) { ArrayList listFilterUsed = new ArrayList(); RasterFilterList filterList = new RasterFilterList(); filterList.setEnv(rendering.getRenderFilterList().getEnv()); RasterFilterListManager stackManager = new RasterFilterListManager(filterList); // Conservamos filtros no visibles ya existentes ArrayList filtersInit = getFilterPanel().getLayerVisualStatus().getLast().getFilterStatus(); for (int i = 0; i < filtersInit.size(); i++) { // Si es visible no hacemos nada if (((RasterFilter) filtersInit.get(i)).isVisible()) continue; RasterFilter obj = null; for (int j = 0; j < stackManager.getRasterFilterList().size(); j++) { Class classFilter = (Class) stackManager.getRasterFilterList().get(j); try { obj = (RasterFilter) classFilter.newInstance(); if (obj.getName().equals(((RasterFilter) filtersInit.get(i)).getName())) break; } catch (InstantiationException e) { RasterToolsUtil.messageBoxError("error_creando_filtro", this, e); } catch (IllegalAccessException e) { RasterToolsUtil.messageBoxError("error_creando_filtro", this, e); } } // Si no encontramos el filtro apropiado, nos olvidamos de el if (obj == null) continue; // Si no es visible tenemos que conservar el filtro try { Params params = (Params) ((RasterFilter) filtersInit.get(i)) .getUIParams(((RasterFilter) filtersInit.get(i)).getName()) .clone(); // Añado el parametro RenderBands a los parametros del filtro String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2]; params.setParam("RenderBands", rgb, 0, null); params.setParam("alphaBand", new Integer(rendering.getAlphaBandNumber()), 0, null); ParamStruct newParam = new ParamStruct(); newParam.setFilterClass(obj.getClass()); newParam.setFilterName(((RasterFilter) filtersInit.get(i)).getName()); newParam.setFilterParam(params); listFilterUsed.add(newParam); } catch (CloneNotSupportedException e) { } } // Metemos los filtros seleccionados en el panel ListModel list = getFilterPanel().getMainPanel().getTreeListContainer().getListModel(); for (int i = 0; i < list.getSize(); i++) { Hashtable hastTable = getFilterPanel().getMainPanel().getTreeListContainer().getMap(); for (int j = 0; j < paramsList.size(); j++) { boolean active = true; Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById("enabled"); if ((param != null) && param.defaultValue instanceof Boolean && ((((Boolean) param.defaultValue).booleanValue()) == false)) active = false; if (active) { if (((ParamStruct) paramsList.get(j)) .getFilterName() .equals(hastTable.get(list.getElementAt(i)))) { try { Params params = (Params) ((ParamStruct) paramsList.get(j)).getFilterParam().clone(); // Añado el parametro RenderBands a los parametros // del filtro String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2]; params.setParam("RenderBands", rgb, 0, null); params.setParam("alphaBand", new Integer(rendering.getAlphaBandNumber()), 0, null); ParamStruct newParam = new ParamStruct(); newParam.setFilterClass(((ParamStruct) paramsList.get(j)).getFilterClass()); newParam.setFilterName(((ParamStruct) paramsList.get(j)).getFilterName()); newParam.setFilterParam(params); listFilterUsed.add(newParam); } catch (CloneNotSupportedException e) { } } } } } return listFilterUsed; }