Extensión de gvSIG
Paso de parámetros
La entrada de datos del proceso de recorte es una capa raster, ya que se trata de recorte de capas raster. CuttingTocMenuEntry cogerá la capa de la vista seleccionada para el recorte y la pasará a CuttingDialog con un método de asignación. De la capa se obtendrá toda la información del raster necesaria para la lectura de datos del recorte.
Incremento de la tarea
Para la barra de progreso utilizamos el objeto IncrementableTask de la librería libUIComponents. Este es un componente general para visualizar el incremento de una tarea. Tiene un interfaz IIncrementable con los métodos necesarios para actualizar el panel de incremento. IncrementableTask consultará las funciones de IIncrementable cada 100ms. En este caso el proceso de calculo de recorte debe implementar este interfaz y ser pasado a IncrementableTask en su creación.
Desde el proceso de recorte (CuttingProcess) capturaremos los eventos de la ventana de incremento para poder responder a la acción de cancelado del proceso. Para esto, nuestro CuttingProcess implementa el interfaz IncrementableListener que tiene los métodos para dar respuesta a este y otros eventos.
Proceso de cálculo
El proceso de calculo del recorte, como se ha comentado se divide en lectura de datos y escritura. La operación de lectura será realizada por la clase CuttingProcess. Al pulsar “Aceptar” o “Aplicar” en el dialogo CuttingPanelListener se recoge el evento y pasa los parámetros a CuttingProcess. Estos parámetros son obtenidos del cuadro de dialogo y de la capa. Para la creación del BufferFactory se necesita el MultiRasterDataset de entrada, las coordenadas de recorte obtenidas del dialogo y el número de bandas a leer. Se seleccionan todas las bandas en la lectura ya que será en la escritura donde se discrimine que bandas y en que raster de salida se escribe.
Una vez obtenido el IBuffer con los datos de origen se pasa a la escritura. Hay dos tipos de escritura, de un solo raster de salida o uno por cada banda. Para la escritura de uno solo se creará un GeoRasterWriter con los parámetros de escritura. Para la escritura de uno por banda se creará un GeoRasterWriter, se escribirá y se cerrará el dataset, luego se repetirá la operación para la siguiente banda. De este modo cada vez que se termine un raster de una banda se carga en el TOC y el proceso continuará hasta terminar todas las bandas.
La operación de finalización cuttingPanelListener.cutFinalize(f); cargará la capa creada en el TOC en el caso de que se haya seleccionado esta opción.