Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_it.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_it.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_it.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+(escala_maxima)=(scala massima)
+(escala_minima)=(scala minima)
+1\:=
+_(Simbolo_unico)=(Simbolo unico)
+__proyeccion_actual=Proiezione attuale\:
+__redimensionar_texto_escala=Ridimensiona il testo alla scala della vista
+__seleccion_de_fuente=Seleziona carattere
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Basso
+abrir=Apri
+abrir_plantilla=Apri Tavola
+abrir_proyecto=Apri Progetto
+abrir_tooltip=Apri Progetto esistente
+Abrir_una_capa=Apri Layer
+Accion_Predefinida=Azione predefinita
+aceptar=Accetta
+Aceptar=Accetta
+acerca_de=Cerca...
+activar=Attiva
+activar_regla=Attiva regola
+activos=Attivi
+add_delete_edit_fields=I campi possono essere aggiunti, cancellati o rinominati.
+add_layer=Aggiungi Layer
+add_rows=Aggiungi righe
+adjust_transparency=Regola transparenza
+agrupacion=Raggruppamento
+agrupar=Raggruppa
+agrupar_capas=Raggruppa layers
+agrupar_graficos=Raggruppa grafici
+agrupar_linea=Raggruppa riquadro di contorno con i grafici 
+Ajustar_transparencia=Regola trasparenza
+ajustes_linea_grafica=Regola spessore linea
+Al_leer_la_leyenda=Leggendo la legenda
+alias=Alias
+align_center=Allinea al centro
+align_down=Allinea in basso
+align_left=Allinea a sinistra
+align_right=Allinea a destra
+align_to_layout_center=Allinea al centro del layout
+align_to_layout_down=Allinea in basso nel layout
+align_to_layout_left=Allinea a sinistra del layout
+align_to_layout_right=Allinea a destra del layout
+align_to_layout_up=Allinea in alto nel layout
+align_to_layout_vertical_center=Allinea al centro del layout verticalmente
+align_up=Allinea in alto
+align_vertical_center=Allinea al centro della verticale
+alineamiento=Allineamento
+alinear=Allinea
+alinear_graficos=Allinea grafici
+alta=Alta
+alto=Alto
+altura=Altezza\:
+Altura_fija_de_texto=Altezza fissa del testo
+ambito=Ambito
+Anadir=Aggiungi
+Anadir_al_conjunto=Aggiungi all'insieme
+Anadir_capa=Aggiungi layer
+Anadir_Capa=Aggiungi layer
+anadir_tag=Aggiungi tag
+Anadir_todos=Aggiungi tutto
+ancho=Larghezza\:
+ancho_alto=Larghezza X Altezza
+anchura=Larghezza\:
+Aplicar=Applica
+Archivo=File
+arriba=Alto
+ascending_order=Ordine crescente
+ascending_order_tooltip=Ordina il campo selezionato in ordine crescente
+Atributo=Attributo
+automatico=Automatico
+Ayuda=Aiuto
+back=Precedente
+background_color=Colore sfondo
+baja=Basso
+Bajar_capa=Abbassa layer
+bandas=Bande
+barra=Barra\:
+base=base
+base_datos=DataBases
+bmp=BMP files
+Bold=Grasseto
+borra_seleccion=Annulla/Elimina selezione
+borrador=Bozza
+borrar=Rimuovi
+box=Riquadro
+brillo=Luminosit\u00e1
+brillo_y_contraste=Luminosit\u00e0 e Contrasto
+browse=Sfoglia
+cajetin=Riquadro
+Calcular_intervalos=Calcola intervalli
+calidad=Qualit\u00e1
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Adatta altezza degli elementi selezionati al pi\u00f9 alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Adatta larghezza degli elementi selezionati al pi\u00f9 largo.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Adatta la dimensione degli elementi selezionati al maggiore.
+Cambio_Color=Cambio di colore
+cambio_nombre=Cambio di nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo di altezza del testo\:
+Campo_de_clasificacion=Campo di classificazione
+Campo_de_etiquetado=Campo di etichetta
+Campos=Campi
+cancel=Cancella
+Cancel=Cancella
+cancelar=Cancella
+Cancelar=Cancella
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Layers del localizzatore
+Centimetros=Centimetri
+cerrar=Chiudi
+Cerrar=Chiudi
+change=Modifica
+change_before=Porta avanti
+change_behind=Porta indietro
+change_height=Modifica altezza
+change_width=Modifica larghezza
+circulo=Cerchio
+clave=Password
+close=Chiudi
+coincidir_tamanyo=Adatta dimensione
+colocar_a_margenes=Colloca al margine
+colocar_alrededor_seleccionados=Colloca intorno a quanto selezionato
+colocar_alrededor_todos=Colloca intorno a tutto
+colocar_delante=Colloca davanti
+colocar_detras=Colloca dietro
+color=Colore\:
+Color_final=Colore finale\:
+Color_inicio=Colore iniziale
+color_texto=Colore testo\:
+comentarios=Commenti
+comenzar_edicion=Inizia modifica
+compleja=
+configurar=Configura
+configurar_localizador=Configura localizzatore
+Configurar_localizador=Configura localizzatore ...
+confirmar_borrar=Gli elementi saranno rimossi. Sei sicuro?
+conflicto_de_nombres_de_mapas_al_pegar=Si sta tentando di incollare mappe i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_tablas_al_pegar=Si sta tentando di incollare tabelle i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_vistas_al_pegar=Si sta tentando di incollare Viste i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflito_de_nombres_de_tablas_al_pegar=Conflitto nei nomi delle tabelle durante la copia.
+conservar_escala_visualizacion=Mantieni scala di visualizzazione
+consulta=Consulta
+Contengan=Contengono
+contraste=Contrasto
+coor_geograficas=Coordinate geografiche
+copiar=Copia
+copy=Copia
+cortar=Taglia
+creation_date=Data creazione
+Crucen_con=Si incrociano con
+cuando_activo=Quando attivo
+cut=Taglia
+Dado_un_campo_de_atributos=Dato un campo di attributi
+debera_introducir_nombres_para_las_vistas_a_pegar=E' necessario inserire nuovi nomi per le viste.
+debera_introducir_nombres_para_los_mapas_a_pegar=E' necessario inserire nuovi nomi per le mappe.
+default_projection=Proiezione predefinita
+default_value=Valore predefinito
+dehacer=Annulla
+delete_field=Elimina campo
+Derecha=Destra
+Derecho=Destro
+desagrupar=Separa
+desagrupar_capas=Separa layers
+desagrupar_graficos=Separa grafici
+descending_order=Ordine decrescente
+descending_order_tooltip=Ordina il campo selezionato in ordine decrescente
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Per utilizzare valori comuni per tutti i campi del layer lasciare i valori di default. Per personalizzare l'aspetto delle etichette selezionare i campi che contengono i valori corrispondenti.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con questo strumento \u00e8 possibile creare un layer virtuale basato su un layer esistente che permetta di realizzare un'etichettatura avanzata. Modifica la visualizzazione del layer mostrando il valore di uno dei suoi campi.</HTML>
+desde_arriba=Dall'alto\:
+desde_izquierda=Da sinistra\:
+desea_borrar_el_documento=Eliminare i domumenti selezionati?
+desea_borrar_la_capa=Eliminare i layers attivi?
+desea_continuar=Continuare?
+deshacer=Annulla
+desplaza_los_elementos_seleccionados_a_la_derecha=Sposta gli elementi selezionati a destra.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Sposta gli elementi selezionati a sinistra.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Sposta gli elementi selezionati al centro dell'asse X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Sposta gli elementi selezionati al centro dell'asse Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Sposta gli elementi selezionati in basso.
+desplaza_los_elementos_seleccionados_hacia_arriba=Sposta gli elementi selezionati in alto.
+Desplazamiento=Spostamento
+desviacion_tipica=Deviazione standard
+distance_units=Unit\u00e1 di misura
+distribuir=Distribuisci\:
+distribuir_elementos_sobre_todo_el_layout=Disponi elementi sull'intero layout
+distributes_down=Disponi dal basso
+distributes_horizontal=Disponi orizzontalmente
+distributes_left=Disponi a sinistra
+distributes_right=Disponi a destra
+distributes_to_layout_down=Disponi dalla parte inferiore del layout
+distributes_to_layout_horizontal=Disponi orizzontalmente nel layout
+distributes_to_layout_left=Distibuisci a sinistra nel layout
+distributes_to_layout_right=Disponi dalla destra del layout
+distributes_to_layout_up=Disponi dalla parte superiore del layout
+distributes_to_layout_vertical=Disponi verticalmente nel layout
+distributes_up=Disponi dall'alto
+distributes_vertical=Disponi verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Equidistanzia in orizzontale.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Equidistanzia in verticale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuisci uniformemente gli elementi selezionati dal basso verso l'alto.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuisci uniformemente gli elementi selezionati dall'alto verso il basso.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuisci uniformemente gli elementi selezionati da destra a sinistra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuisci uniformemente gli elementi selezionati da sinistra a destra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuisci uniformemente gli elementi selezionati in orizzontale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuisci uniformemente gli elementi selezionati in verticale.
+divisiones_izquierda=Separazioni a sinistra
+documento=
+documentos_existentes=Documento esistente
+draw_text_only=Disegna il solo testo
+driver=Driver
+Dxffiles=DXF Files
+edicion=Modifica
+editable=Modificabile
+Editar_leyenda=Modifica legenda
+editar_vertices=Modifica vertici
+el_numero_maximo_de_intervalos_para_este_campo_es=Il numero massimo di intervalli per questo campo \u00e8
+Elegir_Color=Seleziona Colore
+Elegir_Fuente=Seleziona Font
+elemento_ya_existe=L'elemento esiste gi\u00e0
+Elementos_seleccionados_de_la_capa=Gli elementi selezionati nel presente layer
+Eliminar=Elimina
+eliminar_capa=Elimina layer
+eliminar_columna=Elimina colonna
+eliminar_extremos=Elimina gli estremi
+eliminar_fila=Elimina riga
+en_el_mapa=Nella mappa\:
+En_metros=In metri
+En_pixels=In pixels
+en_unidades=in unit\u00e0
+Encuadre=Zoom
+Encuadre_Vista=Zoom vista
+enlace_vivo=Collegamento attivo
+Enlazar_a_fichero_de_texto=Collegamento a documento di testo
+Enlazar_a_ficheros_de_imagen=Collegamento a files d'immagine
+equal_intervals=Intevalli uguali
+Error_exportando_SLD=Errore d'esportazione SLD
+Error_guardando_la_leyenda=Errore nel salvare la legenda
+Error_guardando_la_plantilla=Errore nel salvare la tavola
+escala=Scala
+Escala=Scala
+escala_desconocida=Scala sconosciuta
+escala_maxima=Scala massima
+Escala_Maxima=Scala massima
+escala_minima=Scala minima
+Escala_Minima=Scala minima
+escala_usuario=Scala specificata dall'utente
+espaciado_horizontal=Spazitura orizzontale
+espaciado_vertical=Spaziatura verticale
+espacio=Spazio\:
+estadisticas=Statistiche
+este_por_debajo_de_=Al di sotto di
+este_por_encima_de=Al di sopra di
+Esten_contenidos_en=Sono contenuti in
+Etiqueta=Etichetta
+Etiquetados=Etichettati
+etiquetas=Etichette\:
+Etiquetas_estandar=Etichette standard
+Examinar=Cerca...
+export=Esporta
+exportar=Esporta
+exportar_pdf=Esporta come pdf
+exportar_ps=Exporta come ps
+extension=Estensione
+Extent=Estensione
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+factor_zoom_incorrecto=Fattore di zoom errato
+fallo_capas=Errore nell'accedere al layer. I layers seguenti saranno eliminati dal progetto
+family=
+fichero=file
+Fichero=File
+fichero_existe=Il file selezionato esiste gi\u00e1 come banda del layer
+fichero_incorrecto=File non corretto
+fichero_ya_existe_seguro_desea_guardarlo=Il file esiste gi\u00e0, continuare?
+field_already_exists=Il campo esiste gi\u00e0
+field_decimal_count=Precisione decimale
+field_default_value=Valore predefinito
+field_length=Lunghezza
+field_manager=Editor dei campi
+field_name=Nome del campo
+field_type=Tipo
+filtro=Filtro
+finish=Termina
+Font=Font
+formato=Formato
+Formato_de_numero_erroneo=Formato del numero errato
+formato_incorrecto=Formato non corretto
+fuente=Font
+General=Generale
+georeferenciado=Georeferenziando
+gestion_encuadre=Gestione zoom
+grados=Gradi\:
+Grados=Gradi
+Graficos=Grafici
+grosor_linea=Spessore linea\:
+group=Raggruppa
+group_graphic_line=Raggruppa bordi grafici
+grupo=Gruppo
+guardado=Salvato
+guardar=Salva
+Guardar=Salvare
+guardar_cambios=Salvare le modifiche
+guardar_como=Salva come...
+guardar_como_plantilla=Salva come tavola
+Guardar_el_zoom_actual=Salva lo zoom attuale
+Guardar_leyenda=Salva legenda
+guardar_proyecto=Salva progetto
+guardar_tooltip=Salva progetto
+Habilitar_etiquetado=Attiva etichetta
+Hiperenlace=Collegamento
+horizontal=Orizzontale
+horizontal_space=Spazio orizzontale
+Identificar_Resultados=Identifica risultati
+Igual_que_la_impresora=Uguale alla stampante
+igual_todos_lados=Uguale per tutti i lati
+imagen=Immagine
+Implimir=
+importar=Importa
+Imprimir=Stampa
+Indexando=Indicizzando...
+Indexando_espacialmente=Indicizzazione spaziale del layer
+indexar_campos=Indicizzare campi
+Inferior=Inferiore
+info=Informazione
+informacion=Informazione
+Informacion=Informazione
+Inicializando=Inizializzando
+initial_warning=<html><b>ATTENZIONE\!</b><br>Versione in via di sviluppo. Pu\u00f2 contenere errori significativi e provocare la corruzione dei file modificati.<br><br>Si consiglia l'uso di una versione stabile di gvSIG per il lavoro quotidiano.</html>
+insert_row=Inserisci riga
+Insertar=Inserisci
+insertar_cajetin=Inserisci griglia
+insertar_circulo=Inserisci Cerchio
+insertar_columna=Inserisci colonna
+insertar_escala=Inserisci Scala
+insertar_fila=Inserisci riga
+insertar_imagen=Inserisci Immagine
+insertar_leyenda=Inserisci Legenda
+insertar_linea=Inserisci Linea
+insertar_norte=Inserire Nord
+insertar_poligono=Inserisci Poligono
+insertar_polilinea=Inserisci polilinea
+insertar_punto=Inserisci Punto
+insertar_rectangulo=Inserisci Rettangolo
+insertar_texto=Inserisci Testo
+insertar_vista=Inserisci Vista
+Intersecten_con=Intersecano con
+Intervalo=Intervallo
+Intervalos=Intervalli
+introduce_nombre=Inserisci nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Inserire il nome del nuovo layer di annotazioni
+introduzca_nuevo_nombre_para_la_vista=Inserire il nuovo nome della vista
+invalid_value_for_gap=
+invert_selection=Inverti selezione
+Italic=Corsivo
+Izquierda=Sinistra
+Izquierdo=Sinistro
+join=Unisci
+jpg=JPEG files
+kilometros=Chilometri
+Kilometros=Chilometri
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Si sta utilizzando un campo dell'unione nella legenda (e/o etichettato). Cambia le legenda prima di togliere l'unione.
+Leyenda_Por_Defecto=Legenda standard
+linea=Linea
+linea_grafica=Bordo grafico
+lineal_directo=Lineare diretto
+link=Collegamento
+Link=Collegamento
+localizador=Localizzatore
+locked_element=Elemento bloccato
+locked_element_it_cannot_be_deleted=Elemento bloccato.\nNon pu\u00f2 essere eliminato.
+locked_element_it_cannot_be_renamed=Elemento bloccato.\nNon pu\u00f2 essere rimosso.
+m/pixel=metri/pixel
+malla_activada=Rete attivata
+manage_fields=Modifica struttura della tabella
+mantener_intervalo=Mantieni intervallo
+map_units=Unit\u00e1 di mappa
+mapa=Mappa
+Mapa=Mappa
+mapas=Mappe
+marco=Bordo
+marco_vista=Bordo vista
+margenes=Margini\:
+mas_de_100_simbolos=Pi\u00fa di 100 simboli non apportano informazioni al piano
+max_length_is=La lunghezza massima \u00e8
+maximo=Massimo
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+media=Media
+medir_area=Misura area
+medir_distancias=Misura distanze
+metadatos=Metadati
+metros=Metri
+Metros=Metri
+Milimetros=Millimetri
+Millas=Miglia
+minimo=Minimo
+modificar=Modifica
+modification_date=Modifica dati
+mostrar_escala_numerica=Mostra scala numerica
+Mostrar_siempre=Mostra sempre
+mostrar_unidades=Mostra unit\u00e1
+move_elements=Sposta elementi
+Muestra_atributos=Mostra gli attributi dei layers selezionati
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra gli elementi del layer usando un simbolo per ogni valore unico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra gli elementi del layer usando una gamma di colori in funzione del valore di un determinato campo di attributi
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tutti gli elementi di un layer usando lo stesso simbolo
+natural_intervals=Intervalli naturali
+navegacion=Navigazione
+navegacion_vista=Vista navigazione
+necesita_una_capa_activa=Necessario un layer attivo
+necesita_una_capa_vectorial_activa=Necessario un layer vettoriale attivo
+new_field=Nuovo campo
+new_field_properties=Propriet\u00e0 del nuovo campo
+next=Successivo
+ninguna_impresora_configurada=Nessuna stampante individuata
+Nivel_de_transparencia=Livello di trasparenza
+no=No
+no_activos=Non attivi
+No_de_intervalos=No intervalli
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=Impossibile terminare l'operazione
+No_mostrar=Non mostrare
+No_mostrar_la_capa_cuando_la_escala=Non mostrare il layer quando la scala
+no_se_pegaran_las_tablas=Non verr\u00e0 incollata alcuna tabella
+no_se_pegaran_las_vistas_del_conflicto=Le viste in conflitto nonsaranno incollate
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossibile ottenere la tabella dal layer
+no_visibles=Non visibili
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=Nome non valido
+Nombre_que_se_le_dara_al_zoom=Nome per lo zoom
+nombre_sesion=Nome sessione
+none=
+none_selected=Nessuna selezione
+normal=Normale
+north=Nord
+Nueva_tabla=Nuova tabella
+nuevo=Nuovo
+Nuevo_conjunto=Nuovo insieme
+nuevo_nombre_para_el_mapa=Scrivere il nuovo nome per il layer
+nuevo_proyecto=Nuovo progetto
+nuevo_tooltip=Crea nuovo progetto
+num_bandas=Numero delle bande
+num_columnas=Numero di colonne
+num_filas=Numero di righe
+Num_intervalos=Numero di intervalli
+numero_decimales_mostrar=Numero decimali
+numero_incorrecto=Numero non corretto
+ok=Accetta
+opacidad=Opacit\u00e1
+operacion_cancelada=Operazione cancellata
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientamento\:
+origen_de_datos=Origine dei dati
+Origen_de_datos=Origine dei dati
+Origen_de_Datos=Origine dei Dati\:
+owner=Proprietario
+paste=Incolla
+paste_elements=Inolla elementi
+path=Percorso
+pdf=
+pegar=Incolla
+pegar_mapas=Incolla mappe
+pegar_vistas=Incolla viste
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permette di etichettare gli elementi della mappa con il valore di un determinato campo
+Personalizado=Personalizzato
+personalizar_margenes=Personalizza margini
+Pies=Piedi
+pila_de_comandos=Lista dei comandi
+pixeles=Pixels
+pixels=Pixels
+Plain=Normale
+plantilla=Tavola
+please_insert_new_field_name=Inserire nuovo nome del campo
+png=PNG files
+poligono=Poligono
+polilinea=Polilinea
+poner_capas_a=Poini Layers come...
+por_debajo_de=dal basso\:
+por_encima_de=dall'alto\:
+Por_favor_active_la_capa=Attivare il layer
+posicion_linea=Posiziona della linea
+precision=Precisione
+preparar_pagina=Imposta pagina
+Preparar_pagina=Imposta pagina
+presentacion=Presentazione definitiva
+previsualizacion=Anteprima
+Previsualizacion=Anteprima
+Previsualizacion_de_simbolo=Anteprima simbolo
+propiedad=Propriet\u00e0
+propiedades=Propriet\u00e1
+propiedades_cajetin=Propriet\u00e0 riquadro
+propiedades_capa=Propriet\u00e0 del layer
+propiedades_de_la_capa=Propriet\u00e0 del layer
+Propiedades_escala_grafica=Propriet\u00e1 della scala
+propiedades_grafico=Propriet\u00e1 del grafico
+propiedades_mapa=Propriet\u00e1 della mappa
+propiedades_marco_imagenes=Propriet\u00e1 del bordo dell'Immagine
+propiedades_marco_leyenda=Propriet\u00e1 del bordo della legenda
+propiedades_marco_vista=Propriet\u00e1 del bordo della vista
+propiedades_raster=Propriet\u00e1 del raster
+propiedades_sesion=Propriet\u00e1 di sessione
+propiedades_tabla=Propriet\u00e1 tabella
+Propiedades_texto=Propriet\u00e1 del testo
+propiedades_vista=Propriet\u00e1 della vista
+Proyecciones=Proiezioni
+ps=
+puerto=Porta
+Pulgadas=Pollici
+punto=Punto
+quantile_intervals=Intervalli quantili
+quiere_continuar=Sei sicuro di voler continuare?
+Quitar=Rimuovi
+Quitar_capa=Elimina layer
+quitar_enlaces=Elimina collegamenti
+Quitar_todos=Elimina tutto
+quitar_uniones=Elimina unioni
+rango_de_escalas=Classe delle scale
+Rango_de_escalas=Classe delle scale
+realce=Ottimizzazione
+realmente_desea_guardar=Si vuole salvare realmente?
+recargar=Ricarica
+recorte_colas=Ritaglio degli estremi
+recorte_vista=Ritaglio della vista
+rectangulo=Rettangolo
+recuento=Riconto
+Recuperar_leyenda=Recupera legenda
+Recuperar_y_eliminar_otros_zoom=Recupera ed elimina gli altri zoom
+refrescar=Aggiorna
+registros_seleccionados_total=Totale registri selezionati
+rehacer=Ripeti
+rellenar_marco_vista=Riempi il bordo della vista
+relleno=Riempi\:
+remove_elements=Rimuovi elementi
+remove_fields=Rimuovi campi
+remove_row=Rimuovi riga
+remove_rows=Rimuovi righe
+rename_field=Rinomina campo
+renombrar=Rinomina
+reproyectar_aviso=La proiezione del Layer non s' la stessa della Vista.\nAVVISO\: Puo' essere incorretto in alcune trasformazioni.\nLeggere la documentazione.
+reproyectar_pregunta=Riproiettare?
+resolucion_resultado=Qualit\u00e1 di stampa\:
+resto_valores=Resto dei valori
+restore_palette=Ripristina layout di visualizzazione
+rotation_field=Campo di rotazione
+salir=Esci
+salir_tooltip=Esci
+salvar_raster=Salva raster
+Sample=Esempio
+Se_superponen_a=Si sovrappongono a
+Sean_disjuntos_a=Sono diversi da
+Sean_iguales_a=Sono uguali a
+seleccion=Selezione
+seleccion_fuente=Seleziona carattere
+Seleccion_por_capa=Selezione per layer
+selecciona_sistema_de_referencia=Seleziona sistema di riferimento
+Seleccionar=Seleziona
+seleccionar_capas=Seleziona layers
+seleccionar_capas_raster=Seleziona layer raster
+Seleccionar_de_las_capas_activas_los_elementos_que=Selezionare dai layers attivi gli elementi che\:
+Seleccionar_del_conjunto=Seleziona dall'insieme
+Seleccionar_fichero=Seleziona file
+seleccionar_por_poligono=Seleziona con poligono
+seleccionar_por_punto=Seleziona con punto
+seleccionar_por_rectangulo=Seleziona con rettangolo
+seleccionar_todos=Seleziona tutto
+seleccione_campo_enlace=Seleziona il campo da collegare
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore d'inclinazione per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di colore per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Selezionare il campo contenente il testo per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il font per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di dimensione del testo per la rappresentazione delle eichette</HTML>
+seleccione_fecha=Seleziona data
+seleccione_tabla_a_enlazar=Seleziona la tabella da collegare
+seleccione_tabla_origen=Seleziona la tabella di origine della unione
+selection_color=Seleziona colore
+selection_up=Sposta selezione in alto
+separator=Separatore
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Mostra questa finestra al prossimo avvio
+si=si
+siempre=Sempre
+simbolo=Simbolo
+Simbolo=Simbolo
+Simbolo_unico=Simbolo unico
+Simbologia=Simbologia
+simplificar_leyenda=Semplifica legenda
+simplify=Semplifica
+sin_titulo=Senza titolo
+sincronizar_color_borde_relleno=Sincronizza il colore del bordo pieno\:
+Size=Dimensiona
+sobre_la_barra=Sopra la barra
+Solo_para_capas_vectoriales=Solo per layers vettoriali
+start_edition=Inizia Editing
+statistics=Statistica
+stop_edition=Termina Editing
+Style=Stile
+Subir_capa=Layer s\u00fa
+suma=Somma
+Superior=Superiore
+symbol_selector=
+Tabla=Tabella
+Tabla_de_Atributos=Tabella degli attributi
+tablas=Tabelle
+Tablas=Tabelle
+tag=Tag
+tamano=Dimensione\:
+tamano_metros=Dimensione in metri
+tamano_pagina=Dimensione della pagina
+tamano_posicion=Dimensione e posizione
+tamanyo_borde=Dimensione del margine
+tamanyo_fuente=Dimensione del font
+tamanyo_pagina=Dimensioni della pagina
+tamPixX=Dimensione pixel X
+tamPixY=Dimensione pixel Y
+terminar=Termina
+terminar_edicion=Termina Editing
+texto=Testo
+this_table_is_not_self_editable=Tabella non modificabile
+tipo_dato=Tipo di Dato
+tipo_de_intervalo=Tipo intervallo
+tipo_de_leyenda=Tipo legenda
+tipo_fichero_proyecto=tipo di file di progetto(*.GVP)
+tipo_linea=Tipo di linea\:
+tipo_relleno=Tipo di riempimento\:
+tipo_simbolo=Tipo di simbolo\:
+tipos_de_documentos=Tipo di documento
+titulo=Gestore di progetto
+titulo_fframetext=Titolo del campo di testo
+to_annotation=Trasforma in layer annotazioni
+to_palette=Modifica layout visualizzazione
+tooltip_copiar_al_portapapeles=Copia nella clipboard
+tooltip_cortar_al_portapapeles=Taglia nella clipboard
+tooltip_pegar_desde_el_portapapeles=Incolla dalla clipboard
+Toquen=Toccano
+transparencia=Transparenza
+Transparencia=Transparenza
+transparencia_pixel=Trasparenza per pixel
+ungroup=Separa
+unidades=Unit\u00e1\:
+Unidades=Unita'
+untitled=Senza titolo
+url=url
+Usar_indice_espacial=Usa indice spaziale
+usar_marco=Usa margine
+usar_titulo=Usa titolo
+usuario=Utente
+utilizar_margenes_impresora=Utilizza i margini della stampante.
+vacia=Vuota
+Valor=Valore
+Valores=Valori
+Valores_unicos=Valori unici
+varianza=Varianza
+Ventana=Finestra
+ventana_proyecto=Finestra di progetto
+Ver=Mostra
+ver_error_capa=
+ver_tabla_atributos=Mostra tabella degli attributi
+ver_tags=Mostra tags
+ver_tooltip=Mostra la finestra di progetto
+vertical=Verticale
+vertical_space=Spazio verticale
+visible=Visibile
+visibles=Visibili
+Vista=Vista
+vistas=Viste
+visualizacion=Visualizza
+Visualizacion=Visualizza
+visualizar_cuadricula=Visualizza maglia
+warning=Attenzione
+xmax=X massima
+xmin=X minima
+Yardas=Yarde
+ymax=Y massima
+ymin=Y minima
+Zoom_a_la_capa=Zoom al layer
+Zoom_Acercar=Zoom\: avvicina
+Zoom_Alejar=Zoom\: allontana
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo della vista
+zoom_in_factor=Fattore di Zoom-in
+Zoom_Mas=Aumenta zoom
+Zoom_Mas_Vista=Aumenta zoom Vista
+Zoom_Menos=Disminuisci zoom
+Zoom_Menos_Vista=Disminuisci zoom vista
+zoom_out_factor=Fattore di Zoom-out
+Zoom_pixel=Zoom a la risoluzione del raster
+Zoom_Previo=Zoom precedente
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom selezionato

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_it.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text.properties	(revision 30230)
@@ -0,0 +1,720 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=1
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Proyecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar el texto a escala con la vista.
+__seleccion_de_fuente=Selecci\u00f3n de fuente
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abajo
+abrir=Abrir
+abrir_plantilla=Abrir plantilla
+abrir_proyecto=Abrir proyecto
+abrir_tooltip=Abre un proyecto existente
+Abrir_una_capa=Abrir una capa
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activar=Activar
+activar_regla=Activar regla
+activos=Activos
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_layer=A\u00f1adir capa
+add_rows=A\u00f1adir filas
+adjust_transparency=Ajustar transparencia
+agrupacion=Agrupaci\u00f3n
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar l\u00ednea gr\u00e1fica con gr\u00e1ficos
+Ajustar_transparencia=Ajustar transparencia
+ajustes_linea_grafica=Ajustes de l\u00ednea gr\u00e1fica
+Al_leer_la_leyenda=Al leer la leyenda
+alias=Alias
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+alineamiento=Alineamiento\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fija de texto
+ambito=\u00c1mbito
+Anadir=A\u00f1adir
+Anadir_al_conjunto=A\u00f1adir al conjunto
+Anadir_capa=A\u00f1adir capa
+Anadir_Capa=A\u00f1adir capa
+anadir_tag=A\u00f1adir etiqueta
+Anadir_todos=A\u00f1adir todos
+ancho=Ancho
+ancho_alto=Ancho x Alto
+anchura=Anchura\:
+Aplicar=Aplicar
+Archivo=Archivo
+arriba=Arriba
+ascending_order=Orden ascendente
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Ayuda
+back=Anterior
+background_color=Color de fondo
+baja=Baja
+Bajar_capa=Bajar capa
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bmp=Ficheros de tipo bmp
+Bold=Negrita
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+box=Cajet\u00edn
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+cajetin=Cajet\u00edn
+Calcular_intervalos=Calcular intervalos
+calidad=Calidad
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Cambio_Color=Cambio color
+cambio_nombre=Cambio de nombre
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas del localizador
+Centimetros=Cent\u00edmetros
+cerrar=Cerrar
+Cerrar=Cerrar
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circulo=C\u00edrculo
+clave=Clave
+close=Cerrar
+coincidir_tamanyo=Coincidir tama\u00f1o
+colocar_a_margenes=Colocar con referencia a margenes.
+colocar_alrededor_seleccionados=Colocar alrededor de los gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar alrededor de todos los gr\u00e1ficos.
+colocar_delante=Colocar delante
+colocar_detras=Colocar detr\u00e1s
+color=Color\:
+Color_final=Color final\:
+Color_inicio=Color de inicio
+color_texto=Color del texto\:
+comentarios=Comentarios
+comenzar_edicion=Comenzar edici\u00c3\u00b3n
+compleja=Compleja
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+confirmar_borrar=\u00bfSeguro que desea borrar el elemento?
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+consulta=Consulta
+Contengan=Contengan
+contraste=Contraste
+coordenadas_erroneas=Coordenadas erroneas
+coor_geograficas=Coordenadas geogr\u00e1ficas
+copiar=Copiar
+copy=Copiar
+cortar=Cortar
+creation_date=Fecha de creaci\u00f3n
+Crucen_con=Crucen con
+cuando_activo=Cuando activo
+cut=Cortar
+Dado_un_campo_de_atributos=Dado un campo de atributos
+datum=Datum
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+dehacer=Deshacer
+delete_field=Borrar campo
+Derecha=Derecha
+Derecho=Derecho
+desagrupar=Desagrupar
+desagrupar_capas=Desagrupar capas
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orden descendente
+descending_order_tooltip=Ordena por el campo seleccionado en orden descendente
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desde_arriba=Desde arriba\:
+desde_izquierda=Desde la izquierda\:
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Desplazamiento=Desplazamiento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+divisiones_izquierda=Divisiones a la izquierda
+documento=Documento
+documentos_existentes=Documentos existentes
+draw_text_only=Dibujar s\u00f3lo el texto
+driver=Driver
+Dxffiles=Ficheros .DXF
+edicion=Edici\u00f3n
+editable=Editable
+Editar_leyenda=Editar leyenda
+editar_vertices=Editar V\u00e9rtices
+el_numero_maximo_de_intervalos_para_este_campo_es=El n\u00famero m\u00e1ximo de intervalos para este campo es
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir fuente
+elemento_ya_existe=El elemento ya existe
+Elementos_seleccionados_de_la_capa=Elementos seleccionados de la capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=Eliminar columna
+eliminar_extremos=Eliminar extremos
+eliminar_fila=Eliminar fila
+en_el_mapa=En el mapa\:
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Encuadre=Encuadre
+Encuadre_Vista=Encuadre sobre la vista
+enlace_vivo=Enlace vivo
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+equal_intervals=Intervalos iguales
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_guardando_la_plantilla=Error guardando la plantilla
+escala=Escala
+Escala=Escala
+escala_desconocida=Escala desconocida
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada por el usuario
+espaciado_horizontal=Espaciado horizontal de la malla
+espaciado_vertical=Espaciado vertical de la malla
+espacio=Espacio\:
+estadisticas=Estad\u00edsticas
+este_por_debajo_de_=Est\u00e9 por debajo de
+este_por_encima_de=Est\u00e9 por encima de
+Esten_contenidos_en=Est\u00e9n contenidos en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetados
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3n
+Extent=Extensi\u00f3n
+extents_no_coincidentes=Extensiones no coincidentes
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+fallo_capas=Fallo accediendo a las capas. Las siguientes capas van a ser eliminadas del proyecto
+family=Familia
+fichero=Archivo
+Fichero=Archivo
+fichero_existe=Fichero existe
+fichero_incorrecto=Fichero incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+Filtros=Filtros
+filters=Filtros
+filtro_de=Filtro de
+filtro=Filtro
+finish=Finalizar
+Font=Fuente
+formato=Formato
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_incorrecto=Formato incorrecto
+fuente=Fuente
+General=General
+georeferenciado=Georeferenciado
+gestion_encuadre=Gesti\u00f3n de Encuadres
+grados=Grados\:
+Grados=Grados
+Graficos=Gr\u00e1ficos
+grosor_linea=Grosor de l\u00ednea\:
+group=Agrupar
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardado=Guardado en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=\u00bfQuiere guardar los cambios?
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar leyenda
+guardar_proyecto=Guardar proyecto
+guardar_tooltip=Guarda los cambios del proyecto
+Habilitar_etiquetado=Habilitar etiquetado
+Hiperenlace=Hiperenlace
+histograma=Histograma
+horizontal=Horizontal
+horizontal_space=Espacio horizontal
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual que la impresora
+igual_todos_lados=Desplazamiento igual por todos lados.
+imagen=Imagen
+Implimir=Imprimir
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+Inferior=Inferior
+info=Informaci\u00f3n
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Inicializando=Inicializando
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_row=Insertar fila
+Insertar=Insertar
+insertar_cajetin=Insertar cajet\u00edn
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=Insertar columna
+insertar_escala=Insertar escala
+insertar_fila=Insertar fila
+insertar_imagen=Insertar imagen
+insertar_leyenda=Insertar leyenda
+insertar_linea=Insertar l\u00ednea
+insertar_norte=Insertar norte
+insertar_poligono=Insertar Pol\u00edgono
+insertar_polilinea=Insertar polil\u00ednea
+insertar_punto=Insertar punto
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduce el nuevo nombre
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_value_for_gap=Valor inv\u00c3\u00a1lido para el intervalo
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+Izquierda=Izquierda
+Izquierdo=Izquierdo
+join=Unir
+jpg=Ficheros JPEG
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+leyenda=Leyenda
+Leyenda=Leyenda
+leyenda_campo_unido=Se est\u00e1 utilizando un campo de la uni\u00f3n en la leyenda (y/o etiquetado). Cambie la leyenda antes de quitar la uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Leyenda por defecto
+linea=L\u00ednea
+linea_grafica=L\u00ednea gr\u00e1fica
+lineal_directo=Lineal directo
+link=Enlace
+Link=Enlace
+localizador=Localizador
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=Modificar estructura de tabla
+mantener_intervalo=Mantener intervalo
+map_units=Unidades de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco de la vista
+margenes=M\u00e1rgenes\:
+mas_de_100_simbolos=M\u00e1s 100 de s\u00edmbolos no suelen aportar informaci\u00f3n en un plano.
+max_length_is=La longitud m\u00e1xima es
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+media=Media
+medir_area=Medir \u00e1rea
+medir_distancias=Medir distancias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+minimo=M\u00ednimo
+modificar=modificar
+modification_date=\u00daltima fecha de modificaci\u00f3n
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+Mostrar_siempre=Mostrar siempre
+mostrar_unidades=Mostrar unidades
+move_elements=Desplazar elementos
+Muestra_atributos=Muestra los atributos de las capas seleccionadas.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Muestra los elementos de la capa usando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Muestra los elementos de la capa usando una gama de colores en funci\u00f3n del valor de un determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00edmbolo
+natural_intervals=Intervalos naturales
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+next=Siguiente
+ninguna_impresora_configurada=Ninguna impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=No
+no_activos=No activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=No es posible aplicar la leyenda vac\u00eda.
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_mostrar=No mostrar la capa cuando la escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+no_visibles=No visibles
+nombre=Nombre
+Nombre=Nombre
+nombre_no_valido=Nombre no v\u00e1lido
+Nombre_que_se_le_dara_al_zoom=Nombre que se le dar\u00e1 al zoom
+nombre_sesion=Nombre de la sesi\u00f3n
+none=None
+none_selected=Ninguno seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nueva tabla
+nuevo=Nuevo
+Nuevo_conjunto=Nuevo conjunto
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+nuevo_proyecto=Nuevo proyecto
+nuevo_tooltip=Crea un nuevo proyecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+ok=Aceptar
+opacidad=Opacidad
+operacion_cancelada=Operaci\u00f3n cancelada
+options.layout.paper_properties.landscaped=Apaisado
+options.layout.paper_properties.paper_direction=Orientaci\u00f3n del papel
+options.layout.paper_properties.portrait=Normal
+options.layout.paper_properties.title=Propiedades y tama\u00f1o del papel
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de datos
+Origen_de_datos=Origen de datos
+Origen_de_Datos=Origen de datos\:
+owner=Propietario
+paleta=Tablas de color
+palette_not_create=No se ha podido crear la paleta a partir de la tabla
+paste=Pegar
+paste_elements=Pegar elementos
+path=Ruta
+pdf=Pdf
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar los elementos del mapa con el valor de un determinado campo
+Personalizado=Personalizado
+personalizar_margenes=Personalizar m\u00e1rgenes
+Pies=Pies
+pila_de_comandos=Pila de comandos
+pixeles=p\u00edxeles
+pixels=p\u00edxeles
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+png=Ficheros png
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+poner_capas_a=Poner capas a ...
+por_debajo_de=por debajo de\:
+por_encima_de=por encima de\:
+Por_favor_active_la_capa=Por favor active la capa
+posicion_linea=Posici\u00f3n de la l\u00ednea
+precision=Precisi\u00f3n
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Presentaci\u00f3n
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=Previsualizaci\u00f3n de s\u00edmbolo
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+propiedades=Propiedades
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+Propiedades_escala_grafica=Propiedades de la escala
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades del mapa
+propiedades_marco_imagenes=Propiedades del marco de im\u00e1genes
+propiedades_marco_leyenda=Propiedades del marco de la leyenda
+propiedades_marco_vista=Propiedades del marco de la vista
+propiedades_raster=Propiedades del r\u00e1ster
+propiedades_sesion=Propiedades de la sesi\u00f3n
+propiedades_tabla=Propiedades de la tabla
+Propiedades_texto=Propiedades del texto
+propiedades_vista=Propiedades de la vista
+Proyecciones=Proyecciones
+ps=Ps
+puerto=Puerto
+Pulgadas=Pulgadas
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=\u00bfEst\u00e1 seguro de que quiere continuar?
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar enlaces
+Quitar_todos=Quitar todos
+quitar_uniones=Quitar uniones
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+recargar=Recargar
+recorte=Recorte
+recorte_colas=Recorte de colas
+recorte_vista=Recorte a vista
+rectangulo=Rect\u00e1ngulo
+recuento=Recuento
+Recuperar_leyenda=Recuperar leyenda
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+reference_system=Sistema de Referencia
+refrescar=Refrescar
+registros_seleccionados_total=Total registros seleccionados
+rehacer=Rehacer
+rellenar_marco_vista=Rellenar marco de la vista
+relleno=Relleno\:
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+renombrar=Renombrar
+reproyectar_aviso=La proyecci\u00f3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00f3n.
+reproyectar_pregunta=\u00bfDesea reproyectar?
+resolucion_resultado=Resoluci\u00f3n del resultado\:
+resto_valores=Resto de valores
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotaci\u00f3n
+salir=Salir
+salir_tooltip=Salir
+salvar_raster=Salvar a raster georreferenciado.
+Sample=Ejemplo
+Se_superponen_a=Se superponen a
+Sean_disjuntos_a=sean disjuntos a
+Sean_iguales_a=sean iguales a
+seleccion=Selecci\u00f3n
+seleccion_fuente=Selecci\u00f3n de fuente
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar de las capas activas los elementos que\:
+Seleccionar_del_conjunto=Seleccionar del conjunto
+Seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione el campo por el que enlazar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_fecha=Seleccione una fecha...
+seleccione_tabla_a_enlazar=Seleccione la tabla a enlazar
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+selection_color=Color de la selecci\u00f3n
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+si=s\u00ed
+siempre=Siempre
+simbolo=S\u00edmbolo
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolog\u00eda
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+sin_titulo=Sin t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+Size=Tama\u00f1o
+sobre_la_barra=Sobre la barra
+Solo_para_capas_vectoriales=S\u00f3lo para capas vectoriales
+start_edition=Comenzar edici\u00f3n
+statistics=Estad\u00edsticas
+stop_edition=Terminar edici\u00f3n
+Style=Estilo
+Subir_capa=Subir capa
+suma=Suma
+Superior=Superior
+symbol_selector=Selector de simbolog\u00c3\u00ada
+Tabla=Tabla
+Tabla_de_Atributos=Tabla de atributos
+tablas=Tablas
+Tablas=Tablas
+table_not_create=No se ha podido crear la tabla
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros
+tamano_pagina=Tama\u00f1o de p\u00e1gina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tama\u00f1o del borde
+tamanyo_fuente=Tama\u00f1o de fuente
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+texto=Texto
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de leyenda
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.GVP)
+tipo_linea=Tipo de L\u00ednea\:
+tipo_relleno=Tipo de Relleno\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gestor de proyectos
+titulo_fframetext=T\u00edtulo del campo de texto
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Toquen=toquen
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por pixel
+ungroup=Desagrupar
+unidades=Unidades\: 
+Unidades=Unidades\: 
+untitled=Sin t\u00edtulo
+url=url
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Usar marco
+usar_titulo=Usar t\u00edtulo
+usuario=Usuario
+utilizar_margenes_impresora=Utilizar m\u00e1rgenes de la impresora.
+vacia=Vac\u00eda
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varianza
+Ventana=Ventana
+ventana_proyecto=Ventana de proyecto
+Ver=Ver
+ver_error_capa=Ver errores
+ver_tabla_atributos=Ver Tabla de atributos
+ver_tags=Ver
+ver_tooltip=Muestra la ventana de proyecto
+vertical=Vertical
+vertical_space=Espacio vertical
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+xmax=xmax
+xmin=xmin
+Yardas=Yardas
+ymax=ymax
+ymin=ymin
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acercar
+Zoom_Alejar=Zoom alejar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre la vista
+zoom_in_factor=Factor zoom m\u00e1s
+Zoom_Mas=Zoom m\u00e1s
+Zoom_Mas_Vista=Zoom m\u00e1s sobre la vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre la vista
+zoom_out_factor=Factor zoom menos
+Zoom_pixel=Zoom a la resoluci\u00f3n del r\u00e1ster
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a lo seleccionado

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/palettes.xml
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/palettes.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/palettes.xml	(revision 30230)
@@ -0,0 +1,6114 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<palettes>
+	<palette_list>
+		<name>Ninguna</name>
+		<name>purple-red+stripes</name>
+		<name>blue-white</name>
+		<name>ocean</name>
+		<name>red-temperature</name>
+		<name>16level</name>
+		<name>blue-green-red-yellow</name>
+		<name>blue-pastel-red</name>
+		<name>blue-red</name>
+		<name>blue-waves</name>
+		<name>green-red-blue</name>
+		<name>green-white-exponential</name>
+		<name>hardcandy</name>
+		<name>haze</name>
+		<name>mac-style</name>
+		<name>nature</name>
+		<name>pastels</name>
+		<name>plasma</name>
+		<name>prism</name>
+		<name>rainbow</name>
+		<name>red-purple</name>
+		<name>std-gamma-II</name>
+		<name>steps</name>
+		<name>stern-special</name>
+		<name>MDT1</name>
+		<name>MDT2</name>
+		<name>CLASIFICACION</name>
+	</palette_list>
+	<palette name="purple-red+stripes" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,127,127,127" value="2" />
+			<entry class="" argb="255,191,0,191" value="3" />
+			<entry class="" argb="255,188,0,192" value="4" />
+			<entry class="" argb="255,186,0,192" value="5" />
+			<entry class="" argb="255,184,0,193" value="6" />
+			<entry class="" argb="255,182,0,194" value="7" />
+			<entry class="" argb="255,179,0,195" value="8" />
+			<entry class="" argb="255,177,0,195" value="9" />
+			<entry class="" argb="255,140,0,157" value="10" />
+			<entry class="" argb="255,138,0,157" value="11" />
+			<entry class="" argb="255,170,0,198" value="12" />
+			<entry class="" argb="255,168,0,198" value="13" />
+			<entry class="" argb="255,165,0,199" value="14" />
+			<entry class="" argb="255,163,0,200" value="15" />
+			<entry class="" argb="255,161,0,201" value="16" />
+			<entry class="" argb="255,158,0,202" value="17" />
+			<entry class="" argb="255,156,0,202" value="18" />
+			<entry class="" argb="255,154,0,203" value="19" />
+			<entry class="" argb="255,121,0,163" value="20" />
+			<entry class="" argb="255,119,0,164" value="21" />
+			<entry class="" argb="255,147,0,205" value="22" />
+			<entry class="" argb="255,145,0,206" value="23" />
+			<entry class="" argb="255,142,0,207" value="24" />
+			<entry class="" argb="255,140,0,208" value="25" />
+			<entry class="" argb="255,138,0,208" value="26" />
+			<entry class="" argb="255,135,0,209" value="27" />
+			<entry class="" argb="255,133,0,210" value="28" />
+			<entry class="" argb="255,131,0,211" value="29" />
+			<entry class="" argb="255,103,0,169" value="30" />
+			<entry class="" argb="255,101,0,170" value="31" />
+			<entry class="" argb="255,124,0,213" value="32" />
+			<entry class="" argb="255,122,0,214" value="33" />
+			<entry class="" argb="255,119,0,215" value="34" />
+			<entry class="" argb="255,117,0,215" value="35" />
+			<entry class="" argb="255,115,0,216" value="36" />
+			<entry class="" argb="255,112,0,217" value="37" />
+			<entry class="" argb="255,110,0,218" value="38" />
+			<entry class="" argb="255,108,0,218" value="39" />
+			<entry class="" argb="255,84,0,175" value="40" />
+			<entry class="" argb="255,82,0,176" value="41" />
+			<entry class="" argb="255,101,0,221" value="42" />
+			<entry class="" argb="255,99,0,221" value="43" />
+			<entry class="" argb="255,96,0,222" value="44" />
+			<entry class="" argb="255,94,0,223" value="45" />
+			<entry class="" argb="255,92,0,224" value="46" />
+			<entry class="" argb="255,89,0,225" value="47" />
+			<entry class="" argb="255,87,0,225" value="48" />
+			<entry class="" argb="255,85,0,226" value="49" />
+			<entry class="" argb="255,66,0,181" value="50" />
+			<entry class="" argb="255,64,0,182" value="51" />
+			<entry class="" argb="255,78,0,228" value="52" />
+			<entry class="" argb="255,76,0,229" value="53" />
+			<entry class="" argb="255,73,0,230" value="54" />
+			<entry class="" argb="255,71,0,231" value="55" />
+			<entry class="" argb="255,69,0,231" value="56" />
+			<entry class="" argb="255,66,0,232" value="57" />
+			<entry class="" argb="255,64,0,233" value="58" />
+			<entry class="" argb="255,62,0,234" value="59" />
+			<entry class="" argb="255,47,0,188" value="60" />
+			<entry class="" argb="255,46,0,188" value="61" />
+			<entry class="" argb="255,55,0,236" value="62" />
+			<entry class="" argb="255,52,0,237" value="63" />
+			<entry class="" argb="255,50,0,238" value="64" />
+			<entry class="" argb="255,48,0,238" value="65" />
+			<entry class="" argb="255,46,0,239" value="66" />
+			<entry class="" argb="255,43,0,240" value="67" />
+			<entry class="" argb="255,41,0,241" value="68" />
+			<entry class="" argb="255,39,0,241" value="69" />
+			<entry class="" argb="255,29,0,194" value="70" />
+			<entry class="" argb="255,27,0,194" value="71" />
+			<entry class="" argb="255,32,0,244" value="72" />
+			<entry class="" argb="255,29,0,245" value="73" />
+			<entry class="" argb="255,27,0,245" value="74" />
+			<entry class="" argb="255,25,0,246" value="75" />
+			<entry class="" argb="255,23,0,247" value="76" />
+			<entry class="" argb="255,20,0,248" value="77" />
+			<entry class="" argb="255,18,0,248" value="78" />
+			<entry class="" argb="255,16,0,249" value="79" />
+			<entry class="" argb="255,11,0,200" value="80" />
+			<entry class="" argb="255,9,0,200" value="81" />
+			<entry class="" argb="255,9,0,251" value="82" />
+			<entry class="" argb="255,6,0,252" value="83" />
+			<entry class="" argb="255,4,0,253" value="84" />
+			<entry class="" argb="255,2,0,254" value="85" />
+			<entry class="" argb="255,0,0,255" value="86" />
+			<entry class="" argb="255,0,6,255" value="87" />
+			<entry class="" argb="255,0,12,255" value="88" />
+			<entry class="" argb="255,0,18,255" value="89" />
+			<entry class="" argb="255,0,19,204" value="90" />
+			<entry class="" argb="255,0,24,204" value="91" />
+			<entry class="" argb="255,0,36,255" value="92" />
+			<entry class="" argb="255,0,42,255" value="93" />
+			<entry class="" argb="255,0,48,255" value="94" />
+			<entry class="" argb="255,0,54,255" value="95" />
+			<entry class="" argb="255,0,60,255" value="96" />
+			<entry class="" argb="255,0,66,255" value="97" />
+			<entry class="" argb="255,0,72,255" value="98" />
+			<entry class="" argb="255,0,78,255" value="99" />
+			<entry class="" argb="255,0,68,204" value="100" />
+			<entry class="" argb="255,0,72,204" value="101" />
+			<entry class="" argb="255,0,97,255" value="102" />
+			<entry class="" argb="255,0,103,255" value="103" />
+			<entry class="" argb="255,0,109,255" value="104" />
+			<entry class="" argb="255,0,115,255" value="105" />
+			<entry class="" argb="255,0,121,255" value="106" />
+			<entry class="" argb="255,0,127,255" value="107" />
+			<entry class="" argb="255,0,133,255" value="108" />
+			<entry class="" argb="255,0,139,255" value="109" />
+			<entry class="" argb="255,0,116,204" value="110" />
+			<entry class="" argb="255,0,121,204" value="111" />
+			<entry class="" argb="255,0,157,255" value="112" />
+			<entry class="" argb="255,0,163,255" value="113" />
+			<entry class="" argb="255,0,170,255" value="114" />
+			<entry class="" argb="255,0,176,255" value="115" />
+			<entry class="" argb="255,0,182,255" value="116" />
+			<entry class="" argb="255,0,188,255" value="117" />
+			<entry class="" argb="255,0,194,255" value="118" />
+			<entry class="" argb="255,0,200,255" value="119" />
+			<entry class="" argb="255,0,165,204" value="120" />
+			<entry class="" argb="255,0,170,204" value="121" />
+			<entry class="" argb="255,0,218,255" value="122" />
+			<entry class="" argb="255,0,224,255" value="123" />
+			<entry class="" argb="255,0,230,255" value="124" />
+			<entry class="" argb="255,0,236,255" value="125" />
+			<entry class="" argb="255,0,242,255" value="126" />
+			<entry class="" argb="255,0,248,255" value="127" />
+			<entry class="" argb="255,0,255,255" value="128" />
+			<entry class="" argb="255,0,255,248" value="129" />
+			<entry class="" argb="255,0,204,194" value="130" />
+			<entry class="" argb="255,0,204,189" value="131" />
+			<entry class="" argb="255,0,255,230" value="132" />
+			<entry class="" argb="255,0,255,224" value="133" />
+			<entry class="" argb="255,0,255,218" value="134" />
+			<entry class="" argb="255,0,255,212" value="135" />
+			<entry class="" argb="255,0,255,206" value="136" />
+			<entry class="" argb="255,0,255,200" value="137" />
+			<entry class="" argb="255,0,255,194" value="138" />
+			<entry class="" argb="255,0,255,188" value="139" />
+			<entry class="" argb="255,0,204,145" value="140" />
+			<entry class="" argb="255,0,204,140" value="141" />
+			<entry class="" argb="255,0,255,169" value="142" />
+			<entry class="" argb="255,0,255,163" value="143" />
+			<entry class="" argb="255,0,255,157" value="144" />
+			<entry class="" argb="255,0,255,151" value="145" />
+			<entry class="" argb="255,0,255,145" value="146" />
+			<entry class="" argb="255,0,255,139" value="147" />
+			<entry class="" argb="255,0,255,133" value="148" />
+			<entry class="" argb="255,0,255,127" value="149" />
+			<entry class="" argb="255,0,204,97" value="150" />
+			<entry class="" argb="255,0,204,92" value="151" />
+			<entry class="" argb="255,0,255,109" value="152" />
+			<entry class="" argb="255,0,255,103" value="153" />
+			<entry class="" argb="255,0,255,97" value="154" />
+			<entry class="" argb="255,0,255,91" value="155" />
+			<entry class="" argb="255,0,255,84" value="156" />
+			<entry class="" argb="255,0,255,78" value="157" />
+			<entry class="" argb="255,0,255,72" value="158" />
+			<entry class="" argb="255,0,255,66" value="159" />
+			<entry class="" argb="255,0,204,48" value="160" />
+			<entry class="" argb="255,0,204,43" value="161" />
+			<entry class="" argb="255,0,255,48" value="162" />
+			<entry class="" argb="255,0,255,42" value="163" />
+			<entry class="" argb="255,0,255,36" value="164" />
+			<entry class="" argb="255,0,255,30" value="165" />
+			<entry class="" argb="255,0,255,24" value="166" />
+			<entry class="" argb="255,0,255,18" value="167" />
+			<entry class="" argb="255,0,255,12" value="168" />
+			<entry class="" argb="255,0,255,6" value="169" />
+			<entry class="" argb="255,0,204,0" value="170" />
+			<entry class="" argb="255,4,204,0" value="171" />
+			<entry class="" argb="255,12,255,0" value="172" />
+			<entry class="" argb="255,18,255,0" value="173" />
+			<entry class="" argb="255,24,255,0" value="174" />
+			<entry class="" argb="255,30,255,0" value="175" />
+			<entry class="" argb="255,36,255,0" value="176" />
+			<entry class="" argb="255,42,255,0" value="177" />
+			<entry class="" argb="255,48,255,0" value="178" />
+			<entry class="" argb="255,54,255,0" value="179" />
+			<entry class="" argb="255,48,204,0" value="180" />
+			<entry class="" argb="255,53,204,0" value="181" />
+			<entry class="" argb="255,72,255,0" value="182" />
+			<entry class="" argb="255,78,255,0" value="183" />
+			<entry class="" argb="255,85,255,0" value="184" />
+			<entry class="" argb="255,91,255,0" value="185" />
+			<entry class="" argb="255,97,255,0" value="186" />
+			<entry class="" argb="255,103,255,0" value="187" />
+			<entry class="" argb="255,109,255,0" value="188" />
+			<entry class="" argb="255,115,255,0" value="189" />
+			<entry class="" argb="255,97,204,0" value="190" />
+			<entry class="" argb="255,102,204,0" value="191" />
+			<entry class="" argb="255,133,255,0" value="192" />
+			<entry class="" argb="255,139,255,0" value="193" />
+			<entry class="" argb="255,145,255,0" value="194" />
+			<entry class="" argb="255,151,255,0" value="195" />
+			<entry class="" argb="255,157,255,0" value="196" />
+			<entry class="" argb="255,163,255,0" value="197" />
+			<entry class="" argb="255,170,255,0" value="198" />
+			<entry class="" argb="255,176,255,0" value="199" />
+			<entry class="" argb="255,145,204,0" value="200" />
+			<entry class="" argb="255,150,204,0" value="201" />
+			<entry class="" argb="255,194,255,0" value="202" />
+			<entry class="" argb="255,200,255,0" value="203" />
+			<entry class="" argb="255,206,255,0" value="204" />
+			<entry class="" argb="255,212,255,0" value="205" />
+			<entry class="" argb="255,218,255,0" value="206" />
+			<entry class="" argb="255,224,255,0" value="207" />
+			<entry class="" argb="255,230,255,0" value="208" />
+			<entry class="" argb="255,236,255,0" value="209" />
+			<entry class="" argb="255,194,204,0" value="210" />
+			<entry class="" argb="255,199,204,0" value="211" />
+			<entry class="" argb="255,255,255,0" value="212" />
+			<entry class="" argb="255,255,248,2" value="213" />
+			<entry class="" argb="255,255,242,5" value="214" />
+			<entry class="" argb="255,255,235,7" value="215" />
+			<entry class="" argb="255,255,229,10" value="216" />
+			<entry class="" argb="255,255,223,12" value="217" />
+			<entry class="" argb="255,255,216,15" value="218" />
+			<entry class="" argb="255,255,210,17" value="219" />
+			<entry class="" argb="255,204,163,16" value="220" />
+			<entry class="" argb="255,204,158,18" value="221" />
+			<entry class="" argb="255,255,191,25" value="222" />
+			<entry class="" argb="255,255,184,28" value="223" />
+			<entry class="" argb="255,255,178,30" value="224" />
+			<entry class="" argb="255,255,172,33" value="225" />
+			<entry class="" argb="255,255,165,35" value="226" />
+			<entry class="" argb="255,255,159,38" value="227" />
+			<entry class="" argb="255,255,153,40" value="228" />
+			<entry class="" argb="255,255,146,43" value="229" />
+			<entry class="" argb="255,204,112,36" value="230" />
+			<entry class="" argb="255,204,107,38" value="231" />
+			<entry class="" argb="255,255,127,51" value="232" />
+			<entry class="" argb="255,255,121,48" value="233" />
+			<entry class="" argb="255,255,115,46" value="234" />
+			<entry class="" argb="255,255,110,44" value="235" />
+			<entry class="" argb="255,255,104,41" value="236" />
+			<entry class="" argb="255,255,98,39" value="237" />
+			<entry class="" argb="255,255,92,37" value="238" />
+			<entry class="" argb="255,255,86,34" value="239" />
+			<entry class="" argb="255,204,64,25" value="240" />
+			<entry class="" argb="255,204,60,24" value="241" />
+			<entry class="" argb="255,255,69,27" value="242" />
+			<entry class="" argb="255,255,63,25" value="243" />
+			<entry class="" argb="255,255,57,23" value="244" />
+			<entry class="" argb="255,255,52,20" value="245" />
+			<entry class="" argb="255,255,46,18" value="246" />
+			<entry class="" argb="255,255,40,16" value="247" />
+			<entry class="" argb="255,255,34,13" value="248" />
+			<entry class="" argb="255,255,28,11" value="249" />
+			<entry class="" argb="255,204,18,7" value="250" />
+			<entry class="" argb="255,204,13,5" value="251" />
+			<entry class="" argb="255,255,11,4" value="252" />
+			<entry class="" argb="255,255,5,2" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-white" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,1" value="1" />
+			<entry class="" argb="255,0,0,2" value="2" />
+			<entry class="" argb="255,0,0,4" value="3" />
+			<entry class="" argb="255,0,0,5" value="4" />
+			<entry class="" argb="255,0,0,6" value="5" />
+			<entry class="" argb="255,0,0,8" value="6" />
+			<entry class="" argb="255,0,0,9" value="7" />
+			<entry class="" argb="255,0,0,10" value="8" />
+			<entry class="" argb="255,0,0,12" value="9" />
+			<entry class="" argb="255,0,0,13" value="10" />
+			<entry class="" argb="255,0,0,14" value="11" />
+			<entry class="" argb="255,0,0,16" value="12" />
+			<entry class="" argb="255,0,0,17" value="13" />
+			<entry class="" argb="255,0,0,18" value="14" />
+			<entry class="" argb="255,0,0,20" value="15" />
+			<entry class="" argb="255,0,0,21" value="16" />
+			<entry class="" argb="255,0,0,23" value="17" />
+			<entry class="" argb="255,0,0,24" value="18" />
+			<entry class="" argb="255,0,0,25" value="19" />
+			<entry class="" argb="255,0,0,27" value="20" />
+			<entry class="" argb="255,0,0,28" value="21" />
+			<entry class="" argb="255,0,0,29" value="22" />
+			<entry class="" argb="255,0,0,31" value="23" />
+			<entry class="" argb="255,0,0,32" value="24" />
+			<entry class="" argb="255,0,0,33" value="25" />
+			<entry class="" argb="255,0,0,35" value="26" />
+			<entry class="" argb="255,0,0,36" value="27" />
+			<entry class="" argb="255,0,0,37" value="28" />
+			<entry class="" argb="255,0,0,39" value="29" />
+			<entry class="" argb="255,0,0,40" value="30" />
+			<entry class="" argb="255,0,0,42" value="31" />
+			<entry class="" argb="255,0,0,43" value="32" />
+			<entry class="" argb="255,0,0,44" value="33" />
+			<entry class="" argb="255,0,0,46" value="34" />
+			<entry class="" argb="255,0,0,47" value="35" />
+			<entry class="" argb="255,0,0,48" value="36" />
+			<entry class="" argb="255,0,0,50" value="37" />
+			<entry class="" argb="255,0,0,51" value="38" />
+			<entry class="" argb="255,0,0,52" value="39" />
+			<entry class="" argb="255,0,0,54" value="40" />
+			<entry class="" argb="255,0,0,55" value="41" />
+			<entry class="" argb="255,0,0,56" value="42" />
+			<entry class="" argb="255,0,0,58" value="43" />
+			<entry class="" argb="255,0,0,59" value="44" />
+			<entry class="" argb="255,0,0,61" value="45" />
+			<entry class="" argb="255,0,0,62" value="46" />
+			<entry class="" argb="255,0,0,63" value="47" />
+			<entry class="" argb="255,0,0,65" value="48" />
+			<entry class="" argb="255,0,0,66" value="49" />
+			<entry class="" argb="255,0,0,67" value="50" />
+			<entry class="" argb="255,0,0,69" value="51" />
+			<entry class="" argb="255,0,0,70" value="52" />
+			<entry class="" argb="255,0,0,71" value="53" />
+			<entry class="" argb="255,0,0,73" value="54" />
+			<entry class="" argb="255,0,0,74" value="55" />
+			<entry class="" argb="255,0,0,75" value="56" />
+			<entry class="" argb="255,0,0,77" value="57" />
+			<entry class="" argb="255,0,0,78" value="58" />
+			<entry class="" argb="255,0,0,80" value="59" />
+			<entry class="" argb="255,0,0,81" value="60" />
+			<entry class="" argb="255,0,0,82" value="61" />
+			<entry class="" argb="255,0,0,84" value="62" />
+			<entry class="" argb="255,0,0,85" value="63" />
+			<entry class="" argb="255,0,0,86" value="64" />
+			<entry class="" argb="255,0,0,88" value="65" />
+			<entry class="" argb="255,0,0,89" value="66" />
+			<entry class="" argb="255,0,0,90" value="67" />
+			<entry class="" argb="255,0,0,92" value="68" />
+			<entry class="" argb="255,0,0,93" value="69" />
+			<entry class="" argb="255,0,0,94" value="70" />
+			<entry class="" argb="255,0,0,96" value="71" />
+			<entry class="" argb="255,0,0,97" value="72" />
+			<entry class="" argb="255,0,0,99" value="73" />
+			<entry class="" argb="255,0,0,100" value="74" />
+			<entry class="" argb="255,0,0,101" value="75" />
+			<entry class="" argb="255,0,0,103" value="76" />
+			<entry class="" argb="255,0,0,104" value="77" />
+			<entry class="" argb="255,0,0,105" value="78" />
+			<entry class="" argb="255,0,0,107" value="79" />
+			<entry class="" argb="255,0,0,108" value="80" />
+			<entry class="" argb="255,0,0,109" value="81" />
+			<entry class="" argb="255,0,0,111" value="82" />
+			<entry class="" argb="255,0,0,112" value="83" />
+			<entry class="" argb="255,0,0,113" value="84" />
+			<entry class="" argb="255,0,0,115" value="85" />
+			<entry class="" argb="255,0,0,116" value="86" />
+			<entry class="" argb="255,0,0,118" value="87" />
+			<entry class="" argb="255,0,0,119" value="88" />
+			<entry class="" argb="255,0,0,120" value="89" />
+			<entry class="" argb="255,0,0,122" value="90" />
+			<entry class="" argb="255,0,0,123" value="91" />
+			<entry class="" argb="255,0,0,124" value="92" />
+			<entry class="" argb="255,0,0,126" value="93" />
+			<entry class="" argb="255,0,0,127" value="94" />
+			<entry class="" argb="255,0,0,128" value="95" />
+			<entry class="" argb="255,0,0,130" value="96" />
+			<entry class="" argb="255,0,2,131" value="97" />
+			<entry class="" argb="255,0,4,132" value="98" />
+			<entry class="" argb="255,0,5,134" value="99" />
+			<entry class="" argb="255,0,7,135" value="100" />
+			<entry class="" argb="255,0,9,136" value="101" />
+			<entry class="" argb="255,0,10,138" value="102" />
+			<entry class="" argb="255,0,12,139" value="103" />
+			<entry class="" argb="255,0,13,141" value="104" />
+			<entry class="" argb="255,0,15,142" value="105" />
+			<entry class="" argb="255,0,17,143" value="106" />
+			<entry class="" argb="255,0,18,145" value="107" />
+			<entry class="" argb="255,0,20,146" value="108" />
+			<entry class="" argb="255,0,21,147" value="109" />
+			<entry class="" argb="255,0,23,149" value="110" />
+			<entry class="" argb="255,0,25,150" value="111" />
+			<entry class="" argb="255,0,26,151" value="112" />
+			<entry class="" argb="255,0,28,153" value="113" />
+			<entry class="" argb="255,0,29,154" value="114" />
+			<entry class="" argb="255,0,31,155" value="115" />
+			<entry class="" argb="255,0,33,157" value="116" />
+			<entry class="" argb="255,0,34,158" value="117" />
+			<entry class="" argb="255,0,36,160" value="118" />
+			<entry class="" argb="255,0,37,161" value="119" />
+			<entry class="" argb="255,0,39,162" value="120" />
+			<entry class="" argb="255,0,41,164" value="121" />
+			<entry class="" argb="255,0,42,165" value="122" />
+			<entry class="" argb="255,0,44,166" value="123" />
+			<entry class="" argb="255,0,45,168" value="124" />
+			<entry class="" argb="255,0,47,169" value="125" />
+			<entry class="" argb="255,0,49,170" value="126" />
+			<entry class="" argb="255,0,50,172" value="127" />
+			<entry class="" argb="255,0,52,173" value="128" />
+			<entry class="" argb="255,0,53,174" value="129" />
+			<entry class="" argb="255,0,55,176" value="130" />
+			<entry class="" argb="255,0,57,177" value="131" />
+			<entry class="" argb="255,0,58,179" value="132" />
+			<entry class="" argb="255,0,60,180" value="133" />
+			<entry class="" argb="255,0,61,181" value="134" />
+			<entry class="" argb="255,0,63,183" value="135" />
+			<entry class="" argb="255,0,65,184" value="136" />
+			<entry class="" argb="255,0,66,185" value="137" />
+			<entry class="" argb="255,0,68,187" value="138" />
+			<entry class="" argb="255,0,69,188" value="139" />
+			<entry class="" argb="255,0,71,189" value="140" />
+			<entry class="" argb="255,0,73,191" value="141" />
+			<entry class="" argb="255,0,74,192" value="142" />
+			<entry class="" argb="255,0,76,193" value="143" />
+			<entry class="" argb="255,0,77,195" value="144" />
+			<entry class="" argb="255,0,79,196" value="145" />
+			<entry class="" argb="255,0,81,198" value="146" />
+			<entry class="" argb="255,0,82,199" value="147" />
+			<entry class="" argb="255,0,84,200" value="148" />
+			<entry class="" argb="255,0,85,202" value="149" />
+			<entry class="" argb="255,0,87,203" value="150" />
+			<entry class="" argb="255,0,89,204" value="151" />
+			<entry class="" argb="255,0,90,206" value="152" />
+			<entry class="" argb="255,0,92,207" value="153" />
+			<entry class="" argb="255,0,94,208" value="154" />
+			<entry class="" argb="255,0,95,210" value="155" />
+			<entry class="" argb="255,0,97,211" value="156" />
+			<entry class="" argb="255,0,98,212" value="157" />
+			<entry class="" argb="255,0,100,214" value="158" />
+			<entry class="" argb="255,0,102,215" value="159" />
+			<entry class="" argb="255,0,103,217" value="160" />
+			<entry class="" argb="255,0,105,218" value="161" />
+			<entry class="" argb="255,0,106,219" value="162" />
+			<entry class="" argb="255,0,108,221" value="163" />
+			<entry class="" argb="255,0,110,222" value="164" />
+			<entry class="" argb="255,0,111,223" value="165" />
+			<entry class="" argb="255,0,113,225" value="166" />
+			<entry class="" argb="255,0,114,226" value="167" />
+			<entry class="" argb="255,0,116,227" value="168" />
+			<entry class="" argb="255,0,118,229" value="169" />
+			<entry class="" argb="255,0,119,230" value="170" />
+			<entry class="" argb="255,0,121,231" value="171" />
+			<entry class="" argb="255,0,122,233" value="172" />
+			<entry class="" argb="255,0,124,234" value="173" />
+			<entry class="" argb="255,0,126,236" value="174" />
+			<entry class="" argb="255,0,127,237" value="175" />
+			<entry class="" argb="255,0,129,238" value="176" />
+			<entry class="" argb="255,0,130,240" value="177" />
+			<entry class="" argb="255,0,132,241" value="178" />
+			<entry class="" argb="255,0,134,242" value="179" />
+			<entry class="" argb="255,0,135,244" value="180" />
+			<entry class="" argb="255,0,137,245" value="181" />
+			<entry class="" argb="255,0,138,246" value="182" />
+			<entry class="" argb="255,0,140,248" value="183" />
+			<entry class="" argb="255,0,142,249" value="184" />
+			<entry class="" argb="255,0,143,250" value="185" />
+			<entry class="" argb="255,0,145,252" value="186" />
+			<entry class="" argb="255,0,146,253" value="187" />
+			<entry class="" argb="255,0,148,255" value="188" />
+			<entry class="" argb="255,0,150,255" value="189" />
+			<entry class="" argb="255,0,151,255" value="190" />
+			<entry class="" argb="255,0,153,255" value="191" />
+			<entry class="" argb="255,0,154,255" value="192" />
+			<entry class="" argb="255,5,156,255" value="193" />
+			<entry class="" argb="255,9,158,255" value="194" />
+			<entry class="" argb="255,13,159,255" value="195" />
+			<entry class="" argb="255,17,161,255" value="196" />
+			<entry class="" argb="255,21,162,255" value="197" />
+			<entry class="" argb="255,25,164,255" value="198" />
+			<entry class="" argb="255,29,166,255" value="199" />
+			<entry class="" argb="255,33,167,255" value="200" />
+			<entry class="" argb="255,37,169,255" value="201" />
+			<entry class="" argb="255,41,170,255" value="202" />
+			<entry class="" argb="255,45,172,255" value="203" />
+			<entry class="" argb="255,49,174,255" value="204" />
+			<entry class="" argb="255,53,175,255" value="205" />
+			<entry class="" argb="255,57,177,255" value="206" />
+			<entry class="" argb="255,61,179,255" value="207" />
+			<entry class="" argb="255,65,180,255" value="208" />
+			<entry class="" argb="255,69,182,255" value="209" />
+			<entry class="" argb="255,73,183,255" value="210" />
+			<entry class="" argb="255,77,185,255" value="211" />
+			<entry class="" argb="255,81,187,255" value="212" />
+			<entry class="" argb="255,85,188,255" value="213" />
+			<entry class="" argb="255,90,190,255" value="214" />
+			<entry class="" argb="255,94,191,255" value="215" />
+			<entry class="" argb="255,98,193,255" value="216" />
+			<entry class="" argb="255,102,195,255" value="217" />
+			<entry class="" argb="255,106,196,255" value="218" />
+			<entry class="" argb="255,110,198,255" value="219" />
+			<entry class="" argb="255,114,199,255" value="220" />
+			<entry class="" argb="255,118,201,255" value="221" />
+			<entry class="" argb="255,122,203,255" value="222" />
+			<entry class="" argb="255,126,204,255" value="223" />
+			<entry class="" argb="255,130,206,255" value="224" />
+			<entry class="" argb="255,134,207,255" value="225" />
+			<entry class="" argb="255,138,209,255" value="226" />
+			<entry class="" argb="255,142,211,255" value="227" />
+			<entry class="" argb="255,146,212,255" value="228" />
+			<entry class="" argb="255,150,214,255" value="229" />
+			<entry class="" argb="255,154,215,255" value="230" />
+			<entry class="" argb="255,158,217,255" value="231" />
+			<entry class="" argb="255,162,219,255" value="232" />
+			<entry class="" argb="255,166,220,255" value="233" />
+			<entry class="" argb="255,170,222,255" value="234" />
+			<entry class="" argb="255,175,223,255" value="235" />
+			<entry class="" argb="255,179,225,255" value="236" />
+			<entry class="" argb="255,183,227,255" value="237" />
+			<entry class="" argb="255,187,228,255" value="238" />
+			<entry class="" argb="255,191,230,255" value="239" />
+			<entry class="" argb="255,195,231,255" value="240" />
+			<entry class="" argb="255,199,233,255" value="241" />
+			<entry class="" argb="255,203,235,255" value="242" />
+			<entry class="" argb="255,207,236,255" value="243" />
+			<entry class="" argb="255,211,238,255" value="244" />
+			<entry class="" argb="255,215,239,255" value="245" />
+			<entry class="" argb="255,219,241,255" value="246" />
+			<entry class="" argb="255,223,243,255" value="247" />
+			<entry class="" argb="255,227,244,255" value="248" />
+			<entry class="" argb="255,231,246,255" value="249" />
+			<entry class="" argb="255,235,247,255" value="250" />
+			<entry class="" argb="255,239,249,255" value="251" />
+			<entry class="" argb="255,243,251,255" value="252" />
+			<entry class="" argb="255,247,252,255" value="253" />
+			<entry class="" argb="255,251,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="ocean" interpolate="false">
+		<table>
+			<entry class="" argb="255,54,67,141" value="0" />
+			<entry class="" argb="255,54,67,141" value="1" />
+			<entry class="" argb="255,59,67,153" value="2" />
+			<entry class="" argb="255,63,67,165" value="3" />
+			<entry class="" argb="255,68,67,177" value="4" />
+			<entry class="" argb="255,73,67,189" value="5" />
+			<entry class="" argb="255,77,67,202" value="6" />
+			<entry class="" argb="255,82,66,214" value="7" />
+			<entry class="" argb="255,82,66,214" value="8" />
+			<entry class="" argb="255,87,66,227" value="9" />
+			<entry class="" argb="255,91,65,239" value="10" />
+			<entry class="" argb="255,96,64,251" value="11" />
+			<entry class="" argb="255,100,64,246" value="12" />
+			<entry class="" argb="255,105,63,234" value="13" />
+			<entry class="" argb="255,110,62,222" value="14" />
+			<entry class="" argb="255,114,61,210" value="15" />
+			<entry class="" argb="255,119,60,198" value="16" />
+			<entry class="" argb="255,123,59,186" value="17" />
+			<entry class="" argb="255,127,57,175" value="18" />
+			<entry class="" argb="255,131,56,164" value="19" />
+			<entry class="" argb="255,135,55,153" value="20" />
+			<entry class="" argb="255,139,54,142" value="21" />
+			<entry class="" argb="255,143,53,132" value="22" />
+			<entry class="" argb="255,143,53,132" value="23" />
+			<entry class="" argb="255,147,52,122" value="24" />
+			<entry class="" argb="255,150,51,113" value="25" />
+			<entry class="" argb="255,154,49,104" value="26" />
+			<entry class="" argb="255,157,48,95" value="27" />
+			<entry class="" argb="255,160,47,87" value="28" />
+			<entry class="" argb="255,163,47,79" value="29" />
+			<entry class="" argb="255,165,46,72" value="30" />
+			<entry class="" argb="255,168,45,66" value="31" />
+			<entry class="" argb="255,170,44,59" value="32" />
+			<entry class="" argb="255,172,44,54" value="33" />
+			<entry class="" argb="255,174,44,49" value="34" />
+			<entry class="" argb="255,176,43,44" value="35" />
+			<entry class="" argb="255,177,43,40" value="36" />
+			<entry class="" argb="255,177,43,40" value="37" />
+			<entry class="" argb="255,179,43,37" value="38" />
+			<entry class="" argb="255,180,43,34" value="39" />
+			<entry class="" argb="255,180,44,32" value="40" />
+			<entry class="" argb="255,181,44,31" value="41" />
+			<entry class="" argb="255,181,45,30" value="42" />
+			<entry class="" argb="255,182,46,29" value="43" />
+			<entry class="" argb="255,181,47,30" value="44" />
+			<entry class="" argb="255,181,48,31" value="45" />
+			<entry class="" argb="255,180,50,32" value="46" />
+			<entry class="" argb="255,180,51,34" value="47" />
+			<entry class="" argb="255,179,53,37" value="48" />
+			<entry class="" argb="255,177,55,40" value="49" />
+			<entry class="" argb="255,176,57,44" value="50" />
+			<entry class="" argb="255,174,60,49" value="51" />
+			<entry class="" argb="255,174,60,49" value="52" />
+			<entry class="" argb="255,172,62,54" value="53" />
+			<entry class="" argb="255,170,65,59" value="54" />
+			<entry class="" argb="255,168,68,66" value="55" />
+			<entry class="" argb="255,165,71,72" value="56" />
+			<entry class="" argb="255,163,74,79" value="57" />
+			<entry class="" argb="255,160,78,87" value="58" />
+			<entry class="" argb="255,157,81,95" value="59" />
+			<entry class="" argb="255,154,85,104" value="60" />
+			<entry class="" argb="255,150,88,113" value="61" />
+			<entry class="" argb="255,147,92,122" value="62" />
+			<entry class="" argb="255,143,96,132" value="63" />
+			<entry class="" argb="255,139,100,142" value="64" />
+			<entry class="" argb="255,135,104,153" value="65" />
+			<entry class="" argb="255,131,108,164" value="66" />
+			<entry class="" argb="255,131,108,164" value="67" />
+			<entry class="" argb="255,127,112,175" value="68" />
+			<entry class="" argb="255,123,116,186" value="69" />
+			<entry class="" argb="255,119,120,198" value="70" />
+			<entry class="" argb="255,114,124,210" value="71" />
+			<entry class="" argb="255,110,128,222" value="72" />
+			<entry class="" argb="255,105,132,234" value="73" />
+			<entry class="" argb="255,100,136,246" value="74" />
+			<entry class="" argb="255,96,140,251" value="75" />
+			<entry class="" argb="255,91,144,239" value="76" />
+			<entry class="" argb="255,86,148,226" value="77" />
+			<entry class="" argb="255,82,151,214" value="78" />
+			<entry class="" argb="255,77,154,202" value="79" />
+			<entry class="" argb="255,73,158,189" value="80" />
+			<entry class="" argb="255,68,161,177" value="81" />
+			<entry class="" argb="255,68,161,177" value="82" />
+			<entry class="" argb="255,63,164,165" value="83" />
+			<entry class="" argb="255,59,166,153" value="84" />
+			<entry class="" argb="255,54,169,141" value="85" />
+			<entry class="" argb="255,50,171,129" value="86" />
+			<entry class="" argb="255,46,173,118" value="87" />
+			<entry class="" argb="255,42,175,107" value="88" />
+			<entry class="" argb="255,38,176,96" value="89" />
+			<entry class="" argb="255,34,178,85" value="90" />
+			<entry class="" argb="255,30,179,75" value="91" />
+			<entry class="" argb="255,26,180,65" value="92" />
+			<entry class="" argb="255,23,180,56" value="93" />
+			<entry class="" argb="255,19,180,47" value="94" />
+			<entry class="" argb="255,16,180,38" value="95" />
+			<entry class="" argb="255,13,180,30" value="96" />
+			<entry class="" argb="255,13,180,30" value="97" />
+			<entry class="" argb="255,13,179,22" value="98" />
+			<entry class="" argb="255,8,179,15" value="99" />
+			<entry class="" argb="255,5,178,9" value="100" />
+			<entry class="" argb="255,3,176,2" value="101" />
+			<entry class="" argb="255,1,175,2" value="102" />
+			<entry class="" argb="255,0,173,7" value="103" />
+			<entry class="" argb="255,2,171,12" value="104" />
+			<entry class="" argb="255,3,169,16" value="105" />
+			<entry class="" argb="255,5,166,19" value="106" />
+			<entry class="" argb="255,6,164,22" value="107" />
+			<entry class="" argb="255,6,161,24" value="108" />
+			<entry class="" argb="255,7,158,25" value="109" />
+			<entry class="" argb="255,7,155,26" value="110" />
+			<entry class="" argb="255,8,152,27" value="111" />
+			<entry class="" argb="255,8,152,27" value="112" />
+			<entry class="" argb="255,7,148,26" value="113" />
+			<entry class="" argb="255,7,145,25" value="114" />
+			<entry class="" argb="255,6,141,24" value="115" />
+			<entry class="" argb="255,6,138,22" value="116" />
+			<entry class="" argb="255,5,134,19" value="117" />
+			<entry class="" argb="255,3,131,16" value="118" />
+			<entry class="" argb="255,2,127,12" value="119" />
+			<entry class="" argb="255,0,124,7" value="120" />
+			<entry class="" argb="255,1,120,2" value="121" />
+			<entry class="" argb="255,3,117,2" value="122" />
+			<entry class="" argb="255,5,113,9" value="123" />
+			<entry class="" argb="255,8,110,15" value="124" />
+			<entry class="" argb="255,13,107,22" value="125" />
+			<entry class="" argb="255,13,104,30" value="126" />
+			<entry class="" argb="255,13,104,30" value="127" />
+			<entry class="" argb="255,16,101,38" value="128" />
+			<entry class="" argb="255,19,99,47" value="129" />
+			<entry class="" argb="255,23,97,56" value="130" />
+			<entry class="" argb="255,26,95,65" value="131" />
+			<entry class="" argb="255,30,93,75" value="132" />
+			<entry class="" argb="255,34,91,85" value="133" />
+			<entry class="" argb="255,38,90,96" value="134" />
+			<entry class="" argb="255,42,89,107" value="135" />
+			<entry class="" argb="255,46,88,118" value="136" />
+			<entry class="" argb="255,50,88,129" value="137" />
+			<entry class="" argb="255,54,88,141" value="138" />
+			<entry class="" argb="255,59,88,153" value="139" />
+			<entry class="" argb="255,63,88,165" value="140" />
+			<entry class="" argb="255,68,89,177" value="141" />
+			<entry class="" argb="255,68,89,177" value="142" />
+			<entry class="" argb="255,73,91,189" value="143" />
+			<entry class="" argb="255,77,92,202" value="144" />
+			<entry class="" argb="255,82,94,214" value="145" />
+			<entry class="" argb="255,87,96,227" value="146" />
+			<entry class="" argb="255,91,99,239" value="147" />
+			<entry class="" argb="255,96,102,251" value="148" />
+			<entry class="" argb="255,100,105,246" value="149" />
+			<entry class="" argb="255,105,109,234" value="150" />
+			<entry class="" argb="255,110,113,222" value="151" />
+			<entry class="" argb="255,114,117,210" value="152" />
+			<entry class="" argb="255,119,122,198" value="153" />
+			<entry class="" argb="255,123,127,186" value="154" />
+			<entry class="" argb="255,127,132,175" value="155" />
+			<entry class="" argb="255,131,137,164" value="156" />
+			<entry class="" argb="255,131,137,164" value="157" />
+			<entry class="" argb="255,135,142,153" value="158" />
+			<entry class="" argb="255,139,148,142" value="159" />
+			<entry class="" argb="255,143,154,132" value="160" />
+			<entry class="" argb="255,147,160,122" value="161" />
+			<entry class="" argb="255,150,166,113" value="162" />
+			<entry class="" argb="255,154,173,104" value="163" />
+			<entry class="" argb="255,157,179,95" value="164" />
+			<entry class="" argb="255,160,186,87" value="165" />
+			<entry class="" argb="255,163,192,79" value="166" />
+			<entry class="" argb="255,165,199,72" value="167" />
+			<entry class="" argb="255,168,205,66" value="168" />
+			<entry class="" argb="255,170,212,59" value="169" />
+			<entry class="" argb="255,172,218,54" value="170" />
+			<entry class="" argb="255,172,218,54" value="171" />
+			<entry class="" argb="255,174,225,49" value="172" />
+			<entry class="" argb="255,176,231,44" value="173" />
+			<entry class="" argb="255,177,237,40" value="174" />
+			<entry class="" argb="255,179,243,37" value="175" />
+			<entry class="" argb="255,180,248,34" value="176" />
+			<entry class="" argb="255,180,254,32" value="177" />
+			<entry class="" argb="255,181,251,31" value="178" />
+			<entry class="" argb="255,181,246,30" value="179" />
+			<entry class="" argb="255,182,241,29" value="180" />
+			<entry class="" argb="255,181,237,30" value="181" />
+			<entry class="" argb="255,181,233,31" value="182" />
+			<entry class="" argb="255,180,229,32" value="183" />
+			<entry class="" argb="255,180,226,34" value="184" />
+			<entry class="" argb="255,179,223,37" value="185" />
+			<entry class="" argb="255,179,223,37" value="186" />
+			<entry class="" argb="255,177,220,40" value="187" />
+			<entry class="" argb="255,176,218,44" value="188" />
+			<entry class="" argb="255,174,216,49" value="189" />
+			<entry class="" argb="255,172,215,54" value="190" />
+			<entry class="" argb="255,170,214,59" value="191" />
+			<entry class="" argb="255,168,213,66" value="192" />
+			<entry class="" argb="255,165,213,72" value="193" />
+			<entry class="" argb="255,163,214,79" value="194" />
+			<entry class="" argb="255,160,214,87" value="195" />
+			<entry class="" argb="255,157,216,95" value="196" />
+			<entry class="" argb="255,154,217,104" value="197" />
+			<entry class="" argb="255,150,219,113" value="198" />
+			<entry class="" argb="255,147,222,122" value="199" />
+			<entry class="" argb="255,143,224,132" value="200" />
+			<entry class="" argb="255,143,224,132" value="201" />
+			<entry class="" argb="255,139,228,142" value="202" />
+			<entry class="" argb="255,135,231,153" value="203" />
+			<entry class="" argb="255,131,235,164" value="204" />
+			<entry class="" argb="255,127,239,175" value="205" />
+			<entry class="" argb="255,123,244,186" value="206" />
+			<entry class="" argb="255,119,248,198" value="207" />
+			<entry class="" argb="255,114,253,210" value="208" />
+			<entry class="" argb="255,110,251,222" value="209" />
+			<entry class="" argb="255,105,246,234" value="210" />
+			<entry class="" argb="255,105,246,234" value="211" />
+			<entry class="" argb="255,105,246,234" value="212" />
+			<entry class="" argb="255,105,246,234" value="213" />
+			<entry class="" argb="255,105,246,234" value="214" />
+			<entry class="" argb="255,105,246,234" value="215" />
+			<entry class="" argb="255,105,246,234" value="216" />
+			<entry class="" argb="255,105,246,234" value="217" />
+			<entry class="" argb="255,105,246,234" value="218" />
+			<entry class="" argb="255,105,246,234" value="219" />
+			<entry class="" argb="255,105,246,234" value="220" />
+			<entry class="" argb="255,105,246,234" value="221" />
+			<entry class="" argb="255,105,246,234" value="222" />
+			<entry class="" argb="255,105,246,234" value="223" />
+			<entry class="" argb="255,105,246,234" value="224" />
+			<entry class="" argb="255,105,246,234" value="225" />
+			<entry class="" argb="255,105,246,234" value="226" />
+			<entry class="" argb="255,105,246,234" value="227" />
+			<entry class="" argb="255,105,246,234" value="228" />
+			<entry class="" argb="255,105,246,234" value="229" />
+			<entry class="" argb="255,105,246,234" value="230" />
+			<entry class="" argb="255,105,246,234" value="231" />
+			<entry class="" argb="255,105,246,234" value="232" />
+			<entry class="" argb="255,105,246,234" value="233" />
+			<entry class="" argb="255,105,246,234" value="234" />
+			<entry class="" argb="255,105,246,234" value="235" />
+			<entry class="" argb="255,105,246,234" value="236" />
+			<entry class="" argb="255,105,246,234" value="237" />
+			<entry class="" argb="255,105,246,234" value="238" />
+			<entry class="" argb="255,105,246,234" value="239" />
+			<entry class="" argb="255,105,246,234" value="240" />
+			<entry class="" argb="255,105,246,234" value="241" />
+			<entry class="" argb="255,105,246,234" value="242" />
+			<entry class="" argb="255,105,246,234" value="243" />
+			<entry class="" argb="255,105,246,234" value="244" />
+			<entry class="" argb="255,105,246,234" value="245" />
+			<entry class="" argb="255,105,246,234" value="246" />
+			<entry class="" argb="255,105,246,234" value="247" />
+			<entry class="" argb="255,105,246,234" value="248" />
+			<entry class="" argb="255,105,246,234" value="249" />
+			<entry class="" argb="255,105,246,234" value="250" />
+			<entry class="" argb="255,105,246,234" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-temperature" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,2,0,0" value="2" />
+			<entry class="" argb="255,4,0,0" value="3" />
+			<entry class="" argb="255,5,0,0" value="4" />
+			<entry class="" argb="255,7,0,0" value="5" />
+			<entry class="" argb="255,8,0,0" value="6" />
+			<entry class="" argb="255,10,0,0" value="7" />
+			<entry class="" argb="255,11,0,0" value="8" />
+			<entry class="" argb="255,13,0,0" value="9" />
+			<entry class="" argb="255,14,0,0" value="10" />
+			<entry class="" argb="255,15,0,0" value="11" />
+			<entry class="" argb="255,17,0,0" value="12" />
+			<entry class="" argb="255,18,0,0" value="13" />
+			<entry class="" argb="255,20,0,0" value="14" />
+			<entry class="" argb="255,21,0,0" value="15" />
+			<entry class="" argb="255,23,0,0" value="16" />
+			<entry class="" argb="255,24,0,0" value="17" />
+			<entry class="" argb="255,26,0,0" value="18" />
+			<entry class="" argb="255,27,0,0" value="19" />
+			<entry class="" argb="255,28,0,0" value="20" />
+			<entry class="" argb="255,30,0,0" value="21" />
+			<entry class="" argb="255,31,0,0" value="22" />
+			<entry class="" argb="255,33,0,0" value="23" />
+			<entry class="" argb="255,34,0,0" value="24" />
+			<entry class="" argb="255,36,0,0" value="25" />
+			<entry class="" argb="255,37,0,0" value="26" />
+			<entry class="" argb="255,39,0,0" value="27" />
+			<entry class="" argb="255,40,0,0" value="28" />
+			<entry class="" argb="255,42,0,0" value="29" />
+			<entry class="" argb="255,43,0,0" value="30" />
+			<entry class="" argb="255,44,0,0" value="31" />
+			<entry class="" argb="255,46,0,0" value="32" />
+			<entry class="" argb="255,47,0,0" value="33" />
+			<entry class="" argb="255,49,0,0" value="34" />
+			<entry class="" argb="255,50,0,0" value="35" />
+			<entry class="" argb="255,52,0,0" value="36" />
+			<entry class="" argb="255,53,0,0" value="37" />
+			<entry class="" argb="255,55,0,0" value="38" />
+			<entry class="" argb="255,56,0,0" value="39" />
+			<entry class="" argb="255,57,0,0" value="40" />
+			<entry class="" argb="255,59,0,0" value="41" />
+			<entry class="" argb="255,60,0,0" value="42" />
+			<entry class="" argb="255,62,0,0" value="43" />
+			<entry class="" argb="255,63,0,0" value="44" />
+			<entry class="" argb="255,65,0,0" value="45" />
+			<entry class="" argb="255,66,0,0" value="46" />
+			<entry class="" argb="255,68,0,0" value="47" />
+			<entry class="" argb="255,69,0,0" value="48" />
+			<entry class="" argb="255,70,0,0" value="49" />
+			<entry class="" argb="255,72,0,0" value="50" />
+			<entry class="" argb="255,73,0,0" value="51" />
+			<entry class="" argb="255,75,0,0" value="52" />
+			<entry class="" argb="255,76,0,0" value="53" />
+			<entry class="" argb="255,78,0,0" value="54" />
+			<entry class="" argb="255,79,0,0" value="55" />
+			<entry class="" argb="255,81,0,0" value="56" />
+			<entry class="" argb="255,82,0,0" value="57" />
+			<entry class="" argb="255,84,0,0" value="58" />
+			<entry class="" argb="255,85,0,0" value="59" />
+			<entry class="" argb="255,86,0,0" value="60" />
+			<entry class="" argb="255,88,0,0" value="61" />
+			<entry class="" argb="255,89,0,0" value="62" />
+			<entry class="" argb="255,91,0,0" value="63" />
+			<entry class="" argb="255,92,0,0" value="64" />
+			<entry class="" argb="255,94,0,0" value="65" />
+			<entry class="" argb="255,95,0,0" value="66" />
+			<entry class="" argb="255,97,0,0" value="67" />
+			<entry class="" argb="255,98,0,0" value="68" />
+			<entry class="" argb="255,99,0,0" value="69" />
+			<entry class="" argb="255,101,0,0" value="70" />
+			<entry class="" argb="255,102,0,0" value="71" />
+			<entry class="" argb="255,104,0,0" value="72" />
+			<entry class="" argb="255,105,0,0" value="73" />
+			<entry class="" argb="255,107,0,0" value="74" />
+			<entry class="" argb="255,108,0,0" value="75" />
+			<entry class="" argb="255,110,0,0" value="76" />
+			<entry class="" argb="255,111,0,0" value="77" />
+			<entry class="" argb="255,113,0,0" value="78" />
+			<entry class="" argb="255,114,0,0" value="79" />
+			<entry class="" argb="255,115,0,0" value="80" />
+			<entry class="" argb="255,117,0,0" value="81" />
+			<entry class="" argb="255,118,0,0" value="82" />
+			<entry class="" argb="255,120,0,0" value="83" />
+			<entry class="" argb="255,121,0,0" value="84" />
+			<entry class="" argb="255,123,0,0" value="85" />
+			<entry class="" argb="255,124,0,0" value="86" />
+			<entry class="" argb="255,126,0,0" value="87" />
+			<entry class="" argb="255,127,0,0" value="88" />
+			<entry class="" argb="255,128,0,0" value="89" />
+			<entry class="" argb="255,130,0,0" value="90" />
+			<entry class="" argb="255,131,0,0" value="91" />
+			<entry class="" argb="255,133,0,0" value="92" />
+			<entry class="" argb="255,134,0,0" value="93" />
+			<entry class="" argb="255,136,0,0" value="94" />
+			<entry class="" argb="255,137,0,0" value="95" />
+			<entry class="" argb="255,139,0,0" value="96" />
+			<entry class="" argb="255,140,0,0" value="97" />
+			<entry class="" argb="255,141,0,0" value="98" />
+			<entry class="" argb="255,143,0,0" value="99" />
+			<entry class="" argb="255,144,0,0" value="100" />
+			<entry class="" argb="255,146,0,0" value="101" />
+			<entry class="" argb="255,147,0,0" value="102" />
+			<entry class="" argb="255,149,0,0" value="103" />
+			<entry class="" argb="255,150,0,0" value="104" />
+			<entry class="" argb="255,152,0,0" value="105" />
+			<entry class="" argb="255,153,0,0" value="106" />
+			<entry class="" argb="255,155,0,0" value="107" />
+			<entry class="" argb="255,156,0,0" value="108" />
+			<entry class="" argb="255,157,0,0" value="109" />
+			<entry class="" argb="255,159,0,0" value="110" />
+			<entry class="" argb="255,160,0,0" value="111" />
+			<entry class="" argb="255,162,0,0" value="112" />
+			<entry class="" argb="255,163,0,0" value="113" />
+			<entry class="" argb="255,165,0,0" value="114" />
+			<entry class="" argb="255,166,0,0" value="115" />
+			<entry class="" argb="255,168,0,0" value="116" />
+			<entry class="" argb="255,169,0,0" value="117" />
+			<entry class="" argb="255,170,0,0" value="118" />
+			<entry class="" argb="255,172,0,0" value="119" />
+			<entry class="" argb="255,173,0,0" value="120" />
+			<entry class="" argb="255,175,1,0" value="121" />
+			<entry class="" argb="255,176,3,0" value="122" />
+			<entry class="" argb="255,178,5,0" value="123" />
+			<entry class="" argb="255,179,7,0" value="124" />
+			<entry class="" argb="255,181,9,0" value="125" />
+			<entry class="" argb="255,182,11,0" value="126" />
+			<entry class="" argb="255,184,13,0" value="127" />
+			<entry class="" argb="255,185,15,0" value="128" />
+			<entry class="" argb="255,186,17,0" value="129" />
+			<entry class="" argb="255,188,18,0" value="130" />
+			<entry class="" argb="255,189,20,0" value="131" />
+			<entry class="" argb="255,191,22,0" value="132" />
+			<entry class="" argb="255,192,24,0" value="133" />
+			<entry class="" argb="255,194,26,0" value="134" />
+			<entry class="" argb="255,195,28,0" value="135" />
+			<entry class="" argb="255,197,30,0" value="136" />
+			<entry class="" argb="255,198,32,0" value="137" />
+			<entry class="" argb="255,199,34,0" value="138" />
+			<entry class="" argb="255,201,35,0" value="139" />
+			<entry class="" argb="255,202,37,0" value="140" />
+			<entry class="" argb="255,204,39,0" value="141" />
+			<entry class="" argb="255,205,41,0" value="142" />
+			<entry class="" argb="255,207,43,0" value="143" />
+			<entry class="" argb="255,208,45,0" value="144" />
+			<entry class="" argb="255,210,47,0" value="145" />
+			<entry class="" argb="255,211,49,0" value="146" />
+			<entry class="" argb="255,212,51,0" value="147" />
+			<entry class="" argb="255,214,52,0" value="148" />
+			<entry class="" argb="255,215,54,0" value="149" />
+			<entry class="" argb="255,217,56,0" value="150" />
+			<entry class="" argb="255,218,58,0" value="151" />
+			<entry class="" argb="255,220,60,0" value="152" />
+			<entry class="" argb="255,221,62,0" value="153" />
+			<entry class="" argb="255,223,64,0" value="154" />
+			<entry class="" argb="255,224,66,0" value="155" />
+			<entry class="" argb="255,226,68,0" value="156" />
+			<entry class="" argb="255,227,69,0" value="157" />
+			<entry class="" argb="255,228,71,0" value="158" />
+			<entry class="" argb="255,230,73,0" value="159" />
+			<entry class="" argb="255,231,75,0" value="160" />
+			<entry class="" argb="255,233,77,0" value="161" />
+			<entry class="" argb="255,234,79,0" value="162" />
+			<entry class="" argb="255,236,81,0" value="163" />
+			<entry class="" argb="255,237,83,0" value="164" />
+			<entry class="" argb="255,239,85,0" value="165" />
+			<entry class="" argb="255,240,86,0" value="166" />
+			<entry class="" argb="255,241,88,0" value="167" />
+			<entry class="" argb="255,243,90,0" value="168" />
+			<entry class="" argb="255,244,92,0" value="169" />
+			<entry class="" argb="255,246,94,0" value="170" />
+			<entry class="" argb="255,247,96,0" value="171" />
+			<entry class="" argb="255,249,98,0" value="172" />
+			<entry class="" argb="255,250,100,0" value="173" />
+			<entry class="" argb="255,252,102,0" value="174" />
+			<entry class="" argb="255,253,103,0" value="175" />
+			<entry class="" argb="255,255,105,0" value="176" />
+			<entry class="" argb="255,255,107,0" value="177" />
+			<entry class="" argb="255,255,109,0" value="178" />
+			<entry class="" argb="255,255,111,0" value="179" />
+			<entry class="" argb="255,255,113,0" value="180" />
+			<entry class="" argb="255,255,115,0" value="181" />
+			<entry class="" argb="255,255,117,0" value="182" />
+			<entry class="" argb="255,255,119,0" value="183" />
+			<entry class="" argb="255,255,120,0" value="184" />
+			<entry class="" argb="255,255,122,0" value="185" />
+			<entry class="" argb="255,255,124,0" value="186" />
+			<entry class="" argb="255,255,126,0" value="187" />
+			<entry class="" argb="255,255,128,0" value="188" />
+			<entry class="" argb="255,255,130,0" value="189" />
+			<entry class="" argb="255,255,132,0" value="190" />
+			<entry class="" argb="255,255,134,3" value="191" />
+			<entry class="" argb="255,255,136,7" value="192" />
+			<entry class="" argb="255,255,137,11" value="193" />
+			<entry class="" argb="255,255,139,15" value="194" />
+			<entry class="" argb="255,255,141,19" value="195" />
+			<entry class="" argb="255,255,143,23" value="196" />
+			<entry class="" argb="255,255,145,27" value="197" />
+			<entry class="" argb="255,255,147,31" value="198" />
+			<entry class="" argb="255,255,149,35" value="199" />
+			<entry class="" argb="255,255,151,39" value="200" />
+			<entry class="" argb="255,255,153,43" value="201" />
+			<entry class="" argb="255,255,154,47" value="202" />
+			<entry class="" argb="255,255,156,51" value="203" />
+			<entry class="" argb="255,255,158,54" value="204" />
+			<entry class="" argb="255,255,160,58" value="205" />
+			<entry class="" argb="255,255,162,62" value="206" />
+			<entry class="" argb="255,255,164,66" value="207" />
+			<entry class="" argb="255,255,166,70" value="208" />
+			<entry class="" argb="255,255,168,74" value="209" />
+			<entry class="" argb="255,255,170,78" value="210" />
+			<entry class="" argb="255,255,171,82" value="211" />
+			<entry class="" argb="255,255,173,86" value="212" />
+			<entry class="" argb="255,255,175,90" value="213" />
+			<entry class="" argb="255,255,177,94" value="214" />
+			<entry class="" argb="255,255,179,98" value="215" />
+			<entry class="" argb="255,255,181,102" value="216" />
+			<entry class="" argb="255,255,183,105" value="217" />
+			<entry class="" argb="255,255,185,109" value="218" />
+			<entry class="" argb="255,255,187,113" value="219" />
+			<entry class="" argb="255,255,188,117" value="220" />
+			<entry class="" argb="255,255,190,121" value="221" />
+			<entry class="" argb="255,255,192,125" value="222" />
+			<entry class="" argb="255,255,194,129" value="223" />
+			<entry class="" argb="255,255,196,133" value="224" />
+			<entry class="" argb="255,255,198,137" value="225" />
+			<entry class="" argb="255,255,200,141" value="226" />
+			<entry class="" argb="255,255,202,145" value="227" />
+			<entry class="" argb="255,255,204,149" value="228" />
+			<entry class="" argb="255,255,205,153" value="229" />
+			<entry class="" argb="255,255,207,156" value="230" />
+			<entry class="" argb="255,255,209,160" value="231" />
+			<entry class="" argb="255,255,211,164" value="232" />
+			<entry class="" argb="255,255,213,168" value="233" />
+			<entry class="" argb="255,255,215,172" value="234" />
+			<entry class="" argb="255,255,217,176" value="235" />
+			<entry class="" argb="255,255,219,180" value="236" />
+			<entry class="" argb="255,255,221,184" value="237" />
+			<entry class="" argb="255,255,222,188" value="238" />
+			<entry class="" argb="255,255,224,192" value="239" />
+			<entry class="" argb="255,255,226,196" value="240" />
+			<entry class="" argb="255,255,228,200" value="241" />
+			<entry class="" argb="255,255,230,204" value="242" />
+			<entry class="" argb="255,255,232,207" value="243" />
+			<entry class="" argb="255,255,234,211" value="244" />
+			<entry class="" argb="255,255,236,215" value="245" />
+			<entry class="" argb="255,255,238,219" value="246" />
+			<entry class="" argb="255,255,239,223" value="247" />
+			<entry class="" argb="255,255,241,227" value="248" />
+			<entry class="" argb="255,255,243,231" value="249" />
+			<entry class="" argb="255,255,245,235" value="250" />
+			<entry class="" argb="255,255,247,239" value="251" />
+			<entry class="" argb="255,255,249,243" value="252" />
+			<entry class="" argb="255,255,251,247" value="253" />
+			<entry class="" argb="255,255,253,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="16level" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,84,0" value="1" />
+			<entry class="" argb="255,0,84,0" value="2" />
+			<entry class="" argb="255,0,84,0" value="3" />
+			<entry class="" argb="255,0,84,0" value="4" />
+			<entry class="" argb="255,0,84,0" value="5" />
+			<entry class="" argb="255,0,84,0" value="6" />
+			<entry class="" argb="255,0,84,0" value="7" />
+			<entry class="" argb="255,0,84,0" value="8" />
+			<entry class="" argb="255,0,84,0" value="9" />
+			<entry class="" argb="255,0,84,0" value="10" />
+			<entry class="" argb="255,0,84,0" value="11" />
+			<entry class="" argb="255,0,84,0" value="12" />
+			<entry class="" argb="255,0,84,0" value="13" />
+			<entry class="" argb="255,0,84,0" value="14" />
+			<entry class="" argb="255,0,84,0" value="15" />
+			<entry class="" argb="255,0,168,0" value="16" />
+			<entry class="" argb="255,0,168,0" value="17" />
+			<entry class="" argb="255,0,168,0" value="18" />
+			<entry class="" argb="255,0,168,0" value="19" />
+			<entry class="" argb="255,0,168,0" value="20" />
+			<entry class="" argb="255,0,168,0" value="21" />
+			<entry class="" argb="255,0,168,0" value="22" />
+			<entry class="" argb="255,0,168,0" value="23" />
+			<entry class="" argb="255,0,168,0" value="24" />
+			<entry class="" argb="255,0,168,0" value="25" />
+			<entry class="" argb="255,0,168,0" value="26" />
+			<entry class="" argb="255,0,168,0" value="27" />
+			<entry class="" argb="255,0,168,0" value="28" />
+			<entry class="" argb="255,0,168,0" value="29" />
+			<entry class="" argb="255,0,168,0" value="30" />
+			<entry class="" argb="255,0,168,0" value="31" />
+			<entry class="" argb="255,0,255,0" value="32" />
+			<entry class="" argb="255,0,255,0" value="33" />
+			<entry class="" argb="255,0,255,0" value="34" />
+			<entry class="" argb="255,0,255,0" value="35" />
+			<entry class="" argb="255,0,255,0" value="36" />
+			<entry class="" argb="255,0,255,0" value="37" />
+			<entry class="" argb="255,0,255,0" value="38" />
+			<entry class="" argb="255,0,255,0" value="39" />
+			<entry class="" argb="255,0,255,0" value="40" />
+			<entry class="" argb="255,0,255,0" value="41" />
+			<entry class="" argb="255,0,255,0" value="42" />
+			<entry class="" argb="255,0,255,0" value="43" />
+			<entry class="" argb="255,0,255,0" value="44" />
+			<entry class="" argb="255,0,255,0" value="45" />
+			<entry class="" argb="255,0,255,0" value="46" />
+			<entry class="" argb="255,0,255,0" value="47" />
+			<entry class="" argb="255,0,255,84" value="48" />
+			<entry class="" argb="255,0,255,84" value="49" />
+			<entry class="" argb="255,0,255,84" value="50" />
+			<entry class="" argb="255,0,255,84" value="51" />
+			<entry class="" argb="255,0,255,84" value="52" />
+			<entry class="" argb="255,0,255,84" value="53" />
+			<entry class="" argb="255,0,255,84" value="54" />
+			<entry class="" argb="255,0,255,84" value="55" />
+			<entry class="" argb="255,0,255,84" value="56" />
+			<entry class="" argb="255,0,255,84" value="57" />
+			<entry class="" argb="255,0,255,84" value="58" />
+			<entry class="" argb="255,0,255,84" value="59" />
+			<entry class="" argb="255,0,255,84" value="60" />
+			<entry class="" argb="255,0,255,84" value="61" />
+			<entry class="" argb="255,0,255,84" value="62" />
+			<entry class="" argb="255,0,255,84" value="63" />
+			<entry class="" argb="255,0,255,168" value="64" />
+			<entry class="" argb="255,0,255,168" value="65" />
+			<entry class="" argb="255,0,255,168" value="66" />
+			<entry class="" argb="255,0,255,168" value="67" />
+			<entry class="" argb="255,0,255,168" value="68" />
+			<entry class="" argb="255,0,255,168" value="69" />
+			<entry class="" argb="255,0,255,168" value="70" />
+			<entry class="" argb="255,0,255,168" value="71" />
+			<entry class="" argb="255,0,255,168" value="72" />
+			<entry class="" argb="255,0,255,168" value="73" />
+			<entry class="" argb="255,0,255,168" value="74" />
+			<entry class="" argb="255,0,255,168" value="75" />
+			<entry class="" argb="255,0,255,168" value="76" />
+			<entry class="" argb="255,0,255,168" value="77" />
+			<entry class="" argb="255,0,255,168" value="78" />
+			<entry class="" argb="255,0,255,168" value="79" />
+			<entry class="" argb="255,0,255,255" value="80" />
+			<entry class="" argb="255,0,255,255" value="81" />
+			<entry class="" argb="255,0,255,255" value="82" />
+			<entry class="" argb="255,0,255,255" value="83" />
+			<entry class="" argb="255,0,255,255" value="84" />
+			<entry class="" argb="255,0,255,255" value="85" />
+			<entry class="" argb="255,0,255,255" value="86" />
+			<entry class="" argb="255,0,255,255" value="87" />
+			<entry class="" argb="255,0,255,255" value="88" />
+			<entry class="" argb="255,0,255,255" value="89" />
+			<entry class="" argb="255,0,255,255" value="90" />
+			<entry class="" argb="255,0,255,255" value="91" />
+			<entry class="" argb="255,0,255,255" value="92" />
+			<entry class="" argb="255,0,255,255" value="93" />
+			<entry class="" argb="255,0,255,255" value="94" />
+			<entry class="" argb="255,0,255,255" value="95" />
+			<entry class="" argb="255,0,0,255" value="96" />
+			<entry class="" argb="255,0,0,255" value="97" />
+			<entry class="" argb="255,0,0,255" value="98" />
+			<entry class="" argb="255,0,0,255" value="99" />
+			<entry class="" argb="255,0,0,255" value="100" />
+			<entry class="" argb="255,0,0,255" value="101" />
+			<entry class="" argb="255,0,0,255" value="102" />
+			<entry class="" argb="255,0,0,255" value="103" />
+			<entry class="" argb="255,0,0,255" value="104" />
+			<entry class="" argb="255,0,0,255" value="105" />
+			<entry class="" argb="255,0,0,255" value="106" />
+			<entry class="" argb="255,0,0,255" value="107" />
+			<entry class="" argb="255,0,0,255" value="108" />
+			<entry class="" argb="255,0,0,255" value="109" />
+			<entry class="" argb="255,0,0,255" value="110" />
+			<entry class="" argb="255,0,0,255" value="111" />
+			<entry class="" argb="255,128,0,255" value="112" />
+			<entry class="" argb="255,128,0,255" value="113" />
+			<entry class="" argb="255,128,0,255" value="114" />
+			<entry class="" argb="255,128,0,255" value="115" />
+			<entry class="" argb="255,128,0,255" value="116" />
+			<entry class="" argb="255,128,0,255" value="117" />
+			<entry class="" argb="255,128,0,255" value="118" />
+			<entry class="" argb="255,128,0,255" value="119" />
+			<entry class="" argb="255,128,0,255" value="120" />
+			<entry class="" argb="255,128,0,255" value="121" />
+			<entry class="" argb="255,128,0,255" value="122" />
+			<entry class="" argb="255,128,0,255" value="123" />
+			<entry class="" argb="255,128,0,255" value="124" />
+			<entry class="" argb="255,128,0,255" value="125" />
+			<entry class="" argb="255,128,0,255" value="126" />
+			<entry class="" argb="255,128,0,255" value="127" />
+			<entry class="" argb="255,255,0,220" value="128" />
+			<entry class="" argb="255,255,0,220" value="129" />
+			<entry class="" argb="255,255,0,220" value="130" />
+			<entry class="" argb="255,255,0,220" value="131" />
+			<entry class="" argb="255,255,0,220" value="132" />
+			<entry class="" argb="255,255,0,220" value="133" />
+			<entry class="" argb="255,255,0,220" value="134" />
+			<entry class="" argb="255,255,0,220" value="135" />
+			<entry class="" argb="255,255,0,220" value="136" />
+			<entry class="" argb="255,255,0,220" value="137" />
+			<entry class="" argb="255,255,0,220" value="138" />
+			<entry class="" argb="255,255,0,220" value="139" />
+			<entry class="" argb="255,255,0,220" value="140" />
+			<entry class="" argb="255,255,0,220" value="141" />
+			<entry class="" argb="255,255,0,220" value="142" />
+			<entry class="" argb="255,255,0,220" value="143" />
+			<entry class="" argb="255,255,0,180" value="144" />
+			<entry class="" argb="255,255,0,180" value="145" />
+			<entry class="" argb="255,255,0,180" value="146" />
+			<entry class="" argb="255,255,0,180" value="147" />
+			<entry class="" argb="255,255,0,180" value="148" />
+			<entry class="" argb="255,255,0,180" value="149" />
+			<entry class="" argb="255,255,0,180" value="150" />
+			<entry class="" argb="255,255,0,180" value="151" />
+			<entry class="" argb="255,255,0,180" value="152" />
+			<entry class="" argb="255,255,0,180" value="153" />
+			<entry class="" argb="255,255,0,180" value="154" />
+			<entry class="" argb="255,255,0,180" value="155" />
+			<entry class="" argb="255,255,0,180" value="156" />
+			<entry class="" argb="255,255,0,180" value="157" />
+			<entry class="" argb="255,255,0,180" value="158" />
+			<entry class="" argb="255,255,0,180" value="159" />
+			<entry class="" argb="255,255,0,128" value="160" />
+			<entry class="" argb="255,255,0,128" value="161" />
+			<entry class="" argb="255,255,0,128" value="162" />
+			<entry class="" argb="255,255,0,128" value="163" />
+			<entry class="" argb="255,255,0,128" value="164" />
+			<entry class="" argb="255,255,0,128" value="165" />
+			<entry class="" argb="255,255,0,128" value="166" />
+			<entry class="" argb="255,255,0,128" value="167" />
+			<entry class="" argb="255,255,0,128" value="168" />
+			<entry class="" argb="255,255,0,128" value="169" />
+			<entry class="" argb="255,255,0,128" value="170" />
+			<entry class="" argb="255,255,0,128" value="171" />
+			<entry class="" argb="255,255,0,128" value="172" />
+			<entry class="" argb="255,255,0,128" value="173" />
+			<entry class="" argb="255,255,0,128" value="174" />
+			<entry class="" argb="255,255,0,128" value="175" />
+			<entry class="" argb="255,255,0,64" value="176" />
+			<entry class="" argb="255,255,0,64" value="177" />
+			<entry class="" argb="255,255,0,64" value="178" />
+			<entry class="" argb="255,255,0,64" value="179" />
+			<entry class="" argb="255,255,0,64" value="180" />
+			<entry class="" argb="255,255,0,64" value="181" />
+			<entry class="" argb="255,255,0,64" value="182" />
+			<entry class="" argb="255,255,0,64" value="183" />
+			<entry class="" argb="255,255,0,64" value="184" />
+			<entry class="" argb="255,255,0,64" value="185" />
+			<entry class="" argb="255,255,0,64" value="186" />
+			<entry class="" argb="255,255,0,64" value="187" />
+			<entry class="" argb="255,255,0,64" value="188" />
+			<entry class="" argb="255,255,0,64" value="189" />
+			<entry class="" argb="255,255,0,64" value="190" />
+			<entry class="" argb="255,255,0,64" value="191" />
+			<entry class="" argb="255,255,0,0" value="192" />
+			<entry class="" argb="255,255,0,0" value="193" />
+			<entry class="" argb="255,255,0,0" value="194" />
+			<entry class="" argb="255,255,0,0" value="195" />
+			<entry class="" argb="255,255,0,0" value="196" />
+			<entry class="" argb="255,255,0,0" value="197" />
+			<entry class="" argb="255,255,0,0" value="198" />
+			<entry class="" argb="255,255,0,0" value="199" />
+			<entry class="" argb="255,255,0,0" value="200" />
+			<entry class="" argb="255,255,0,0" value="201" />
+			<entry class="" argb="255,255,0,0" value="202" />
+			<entry class="" argb="255,255,0,0" value="203" />
+			<entry class="" argb="255,255,0,0" value="204" />
+			<entry class="" argb="255,255,0,0" value="205" />
+			<entry class="" argb="255,255,0,0" value="206" />
+			<entry class="" argb="255,255,0,0" value="207" />
+			<entry class="" argb="255,220,190,190" value="208" />
+			<entry class="" argb="255,220,190,190" value="209" />
+			<entry class="" argb="255,220,190,190" value="210" />
+			<entry class="" argb="255,220,190,190" value="211" />
+			<entry class="" argb="255,220,190,190" value="212" />
+			<entry class="" argb="255,221,190,190" value="213" />
+			<entry class="" argb="255,221,190,190" value="214" />
+			<entry class="" argb="255,221,190,190" value="215" />
+			<entry class="" argb="255,221,190,190" value="216" />
+			<entry class="" argb="255,221,190,190" value="217" />
+			<entry class="" argb="255,222,190,190" value="218" />
+			<entry class="" argb="255,222,190,190" value="219" />
+			<entry class="" argb="255,222,190,190" value="220" />
+			<entry class="" argb="255,222,190,190" value="221" />
+			<entry class="" argb="255,222,190,190" value="222" />
+			<entry class="" argb="255,223,190,190" value="223" />
+			<entry class="" argb="255,220,220,220" value="224" />
+			<entry class="" argb="255,220,220,220" value="225" />
+			<entry class="" argb="255,220,220,220" value="226" />
+			<entry class="" argb="255,220,220,220" value="227" />
+			<entry class="" argb="255,220,220,220" value="228" />
+			<entry class="" argb="255,220,220,220" value="229" />
+			<entry class="" argb="255,220,220,220" value="230" />
+			<entry class="" argb="255,220,220,220" value="231" />
+			<entry class="" argb="255,220,220,220" value="232" />
+			<entry class="" argb="255,220,220,220" value="233" />
+			<entry class="" argb="255,220,220,220" value="234" />
+			<entry class="" argb="255,220,220,220" value="235" />
+			<entry class="" argb="255,220,220,220" value="236" />
+			<entry class="" argb="255,220,220,220" value="237" />
+			<entry class="" argb="255,220,220,220" value="238" />
+			<entry class="" argb="255,220,220,220" value="239" />
+			<entry class="" argb="255,255,255,255" value="240" />
+			<entry class="" argb="255,255,255,255" value="241" />
+			<entry class="" argb="255,255,255,255" value="242" />
+			<entry class="" argb="255,255,255,255" value="243" />
+			<entry class="" argb="255,255,255,255" value="244" />
+			<entry class="" argb="255,255,255,255" value="245" />
+			<entry class="" argb="255,255,255,255" value="246" />
+			<entry class="" argb="255,255,255,255" value="247" />
+			<entry class="" argb="255,255,255,255" value="248" />
+			<entry class="" argb="255,255,255,255" value="249" />
+			<entry class="" argb="255,255,255,255" value="250" />
+			<entry class="" argb="255,255,255,255" value="251" />
+			<entry class="" argb="255,255,255,255" value="252" />
+			<entry class="" argb="255,255,255,255" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-green-red-yellow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,2" value="1" />
+			<entry class="" argb="255,0,0,4" value="2" />
+			<entry class="" argb="255,0,0,6" value="3" />
+			<entry class="" argb="255,0,0,8" value="4" />
+			<entry class="" argb="255,0,0,10" value="5" />
+			<entry class="" argb="255,0,0,12" value="6" />
+			<entry class="" argb="255,0,0,14" value="7" />
+			<entry class="" argb="255,0,0,16" value="8" />
+			<entry class="" argb="255,0,0,18" value="9" />
+			<entry class="" argb="255,0,0,20" value="10" />
+			<entry class="" argb="255,0,0,22" value="11" />
+			<entry class="" argb="255,0,0,25" value="12" />
+			<entry class="" argb="255,0,0,27" value="13" />
+			<entry class="" argb="255,0,0,29" value="14" />
+			<entry class="" argb="255,0,0,31" value="15" />
+			<entry class="" argb="255,0,0,33" value="16" />
+			<entry class="" argb="255,0,0,35" value="17" />
+			<entry class="" argb="255,0,0,37" value="18" />
+			<entry class="" argb="255,0,0,39" value="19" />
+			<entry class="" argb="255,0,0,41" value="20" />
+			<entry class="" argb="255,0,0,43" value="21" />
+			<entry class="" argb="255,0,0,45" value="22" />
+			<entry class="" argb="255,0,0,47" value="23" />
+			<entry class="" argb="255,0,0,50" value="24" />
+			<entry class="" argb="255,0,0,52" value="25" />
+			<entry class="" argb="255,0,0,54" value="26" />
+			<entry class="" argb="255,0,0,56" value="27" />
+			<entry class="" argb="255,0,0,58" value="28" />
+			<entry class="" argb="255,0,0,60" value="29" />
+			<entry class="" argb="255,0,0,62" value="30" />
+			<entry class="" argb="255,0,0,64" value="31" />
+			<entry class="" argb="255,0,0,66" value="32" />
+			<entry class="" argb="255,0,3,68" value="33" />
+			<entry class="" argb="255,0,6,70" value="34" />
+			<entry class="" argb="255,0,9,72" value="35" />
+			<entry class="" argb="255,0,12,75" value="36" />
+			<entry class="" argb="255,0,15,77" value="37" />
+			<entry class="" argb="255,0,18,79" value="38" />
+			<entry class="" argb="255,0,21,81" value="39" />
+			<entry class="" argb="255,0,25,83" value="40" />
+			<entry class="" argb="255,0,28,85" value="41" />
+			<entry class="" argb="255,0,31,87" value="42" />
+			<entry class="" argb="255,0,34,89" value="43" />
+			<entry class="" argb="255,0,37,91" value="44" />
+			<entry class="" argb="255,0,40,93" value="45" />
+			<entry class="" argb="255,0,43,95" value="46" />
+			<entry class="" argb="255,0,46,97" value="47" />
+			<entry class="" argb="255,0,50,100" value="48" />
+			<entry class="" argb="255,0,53,100" value="49" />
+			<entry class="" argb="255,0,56,100" value="50" />
+			<entry class="" argb="255,0,59,100" value="51" />
+			<entry class="" argb="255,0,62,100" value="52" />
+			<entry class="" argb="255,0,65,100" value="53" />
+			<entry class="" argb="255,0,68,100" value="54" />
+			<entry class="" argb="255,0,71,100" value="55" />
+			<entry class="" argb="255,0,75,100" value="56" />
+			<entry class="" argb="255,0,78,100" value="57" />
+			<entry class="" argb="255,0,81,100" value="58" />
+			<entry class="" argb="255,0,84,100" value="59" />
+			<entry class="" argb="255,0,87,100" value="60" />
+			<entry class="" argb="255,0,90,100" value="61" />
+			<entry class="" argb="255,0,93,100" value="62" />
+			<entry class="" argb="255,0,96,100" value="63" />
+			<entry class="" argb="255,0,100,100" value="64" />
+			<entry class="" argb="255,0,103,100" value="65" />
+			<entry class="" argb="255,0,106,100" value="66" />
+			<entry class="" argb="255,0,109,100" value="67" />
+			<entry class="" argb="255,0,112,100" value="68" />
+			<entry class="" argb="255,0,115,100" value="69" />
+			<entry class="" argb="255,0,118,100" value="70" />
+			<entry class="" argb="255,0,121,100" value="71" />
+			<entry class="" argb="255,0,125,100" value="72" />
+			<entry class="" argb="255,0,128,100" value="73" />
+			<entry class="" argb="255,0,131,100" value="74" />
+			<entry class="" argb="255,0,134,100" value="75" />
+			<entry class="" argb="255,0,137,100" value="76" />
+			<entry class="" argb="255,0,140,100" value="77" />
+			<entry class="" argb="255,0,143,100" value="78" />
+			<entry class="" argb="255,0,146,100" value="79" />
+			<entry class="" argb="255,0,150,100" value="80" />
+			<entry class="" argb="255,0,150,96" value="81" />
+			<entry class="" argb="255,0,150,93" value="82" />
+			<entry class="" argb="255,0,150,90" value="83" />
+			<entry class="" argb="255,0,150,87" value="84" />
+			<entry class="" argb="255,0,150,84" value="85" />
+			<entry class="" argb="255,0,150,81" value="86" />
+			<entry class="" argb="255,0,150,78" value="87" />
+			<entry class="" argb="255,0,150,75" value="88" />
+			<entry class="" argb="255,0,150,71" value="89" />
+			<entry class="" argb="255,0,150,68" value="90" />
+			<entry class="" argb="255,0,150,65" value="91" />
+			<entry class="" argb="255,0,150,62" value="92" />
+			<entry class="" argb="255,0,150,59" value="93" />
+			<entry class="" argb="255,0,150,56" value="94" />
+			<entry class="" argb="255,0,150,53" value="95" />
+			<entry class="" argb="255,0,150,50" value="96" />
+			<entry class="" argb="255,0,149,46" value="97" />
+			<entry class="" argb="255,0,148,43" value="98" />
+			<entry class="" argb="255,0,148,40" value="99" />
+			<entry class="" argb="255,0,147,37" value="100" />
+			<entry class="" argb="255,0,146,34" value="101" />
+			<entry class="" argb="255,0,146,31" value="102" />
+			<entry class="" argb="255,0,145,28" value="103" />
+			<entry class="" argb="255,0,145,25" value="104" />
+			<entry class="" argb="255,0,144,21" value="105" />
+			<entry class="" argb="255,0,143,18" value="106" />
+			<entry class="" argb="255,0,143,15" value="107" />
+			<entry class="" argb="255,0,142,12" value="108" />
+			<entry class="" argb="255,0,141,9" value="109" />
+			<entry class="" argb="255,0,141,6" value="110" />
+			<entry class="" argb="255,0,140,3" value="111" />
+			<entry class="" argb="255,0,140,0" value="112" />
+			<entry class="" argb="255,7,137,0" value="113" />
+			<entry class="" argb="255,15,135,0" value="114" />
+			<entry class="" argb="255,22,132,0" value="115" />
+			<entry class="" argb="255,30,130,0" value="116" />
+			<entry class="" argb="255,37,127,0" value="117" />
+			<entry class="" argb="255,45,125,0" value="118" />
+			<entry class="" argb="255,52,122,0" value="119" />
+			<entry class="" argb="255,60,120,0" value="120" />
+			<entry class="" argb="255,67,117,0" value="121" />
+			<entry class="" argb="255,75,115,0" value="122" />
+			<entry class="" argb="255,82,112,0" value="123" />
+			<entry class="" argb="255,90,110,0" value="124" />
+			<entry class="" argb="255,97,107,0" value="125" />
+			<entry class="" argb="255,105,105,0" value="126" />
+			<entry class="" argb="255,112,102,0" value="127" />
+			<entry class="" argb="255,120,100,0" value="128" />
+			<entry class="" argb="255,125,93,0" value="129" />
+			<entry class="" argb="255,130,87,0" value="130" />
+			<entry class="" argb="255,135,81,0" value="131" />
+			<entry class="" argb="255,140,75,0" value="132" />
+			<entry class="" argb="255,145,68,0" value="133" />
+			<entry class="" argb="255,150,62,0" value="134" />
+			<entry class="" argb="255,155,56,0" value="135" />
+			<entry class="" argb="255,160,50,0" value="136" />
+			<entry class="" argb="255,165,43,0" value="137" />
+			<entry class="" argb="255,170,37,0" value="138" />
+			<entry class="" argb="255,175,31,0" value="139" />
+			<entry class="" argb="255,180,25,0" value="140" />
+			<entry class="" argb="255,185,18,0" value="141" />
+			<entry class="" argb="255,190,12,0" value="142" />
+			<entry class="" argb="255,195,6,0" value="143" />
+			<entry class="" argb="255,200,0,0" value="144" />
+			<entry class="" argb="255,200,2,0" value="145" />
+			<entry class="" argb="255,201,4,0" value="146" />
+			<entry class="" argb="255,201,6,0" value="147" />
+			<entry class="" argb="255,202,9,0" value="148" />
+			<entry class="" argb="255,202,11,0" value="149" />
+			<entry class="" argb="255,203,13,0" value="150" />
+			<entry class="" argb="255,203,16,0" value="151" />
+			<entry class="" argb="255,204,18,0" value="152" />
+			<entry class="" argb="255,204,20,0" value="153" />
+			<entry class="" argb="255,205,23,0" value="154" />
+			<entry class="" argb="255,205,25,0" value="155" />
+			<entry class="" argb="255,206,27,0" value="156" />
+			<entry class="" argb="255,206,29,0" value="157" />
+			<entry class="" argb="255,207,32,0" value="158" />
+			<entry class="" argb="255,207,34,0" value="159" />
+			<entry class="" argb="255,208,36,0" value="160" />
+			<entry class="" argb="255,208,39,0" value="161" />
+			<entry class="" argb="255,209,41,0" value="162" />
+			<entry class="" argb="255,209,43,0" value="163" />
+			<entry class="" argb="255,210,46,0" value="164" />
+			<entry class="" argb="255,210,48,0" value="165" />
+			<entry class="" argb="255,211,50,0" value="166" />
+			<entry class="" argb="255,211,53,0" value="167" />
+			<entry class="" argb="255,212,55,0" value="168" />
+			<entry class="" argb="255,212,57,0" value="169" />
+			<entry class="" argb="255,213,59,0" value="170" />
+			<entry class="" argb="255,213,62,0" value="171" />
+			<entry class="" argb="255,214,64,0" value="172" />
+			<entry class="" argb="255,214,66,0" value="173" />
+			<entry class="" argb="255,215,69,0" value="174" />
+			<entry class="" argb="255,215,71,0" value="175" />
+			<entry class="" argb="255,216,73,0" value="176" />
+			<entry class="" argb="255,216,76,0" value="177" />
+			<entry class="" argb="255,217,78,0" value="178" />
+			<entry class="" argb="255,217,80,0" value="179" />
+			<entry class="" argb="255,218,83,0" value="180" />
+			<entry class="" argb="255,218,85,0" value="181" />
+			<entry class="" argb="255,219,87,0" value="182" />
+			<entry class="" argb="255,219,89,0" value="183" />
+			<entry class="" argb="255,220,92,0" value="184" />
+			<entry class="" argb="255,220,94,0" value="185" />
+			<entry class="" argb="255,221,96,0" value="186" />
+			<entry class="" argb="255,221,99,0" value="187" />
+			<entry class="" argb="255,222,101,0" value="188" />
+			<entry class="" argb="255,222,103,0" value="189" />
+			<entry class="" argb="255,223,106,0" value="190" />
+			<entry class="" argb="255,223,108,0" value="191" />
+			<entry class="" argb="255,224,110,0" value="192" />
+			<entry class="" argb="255,224,113,0" value="193" />
+			<entry class="" argb="255,225,115,0" value="194" />
+			<entry class="" argb="255,225,117,0" value="195" />
+			<entry class="" argb="255,226,119,0" value="196" />
+			<entry class="" argb="255,226,122,0" value="197" />
+			<entry class="" argb="255,227,124,0" value="198" />
+			<entry class="" argb="255,227,126,0" value="199" />
+			<entry class="" argb="255,228,129,0" value="200" />
+			<entry class="" argb="255,228,131,0" value="201" />
+			<entry class="" argb="255,229,133,0" value="202" />
+			<entry class="" argb="255,229,136,0" value="203" />
+			<entry class="" argb="255,230,138,0" value="204" />
+			<entry class="" argb="255,230,140,0" value="205" />
+			<entry class="" argb="255,231,142,0" value="206" />
+			<entry class="" argb="255,231,145,0" value="207" />
+			<entry class="" argb="255,232,147,0" value="208" />
+			<entry class="" argb="255,232,149,0" value="209" />
+			<entry class="" argb="255,233,152,0" value="210" />
+			<entry class="" argb="255,233,154,0" value="211" />
+			<entry class="" argb="255,234,156,0" value="212" />
+			<entry class="" argb="255,234,159,0" value="213" />
+			<entry class="" argb="255,235,161,0" value="214" />
+			<entry class="" argb="255,235,163,0" value="215" />
+			<entry class="" argb="255,236,166,0" value="216" />
+			<entry class="" argb="255,236,168,0" value="217" />
+			<entry class="" argb="255,237,170,0" value="218" />
+			<entry class="" argb="255,237,172,0" value="219" />
+			<entry class="" argb="255,238,175,0" value="220" />
+			<entry class="" argb="255,238,177,0" value="221" />
+			<entry class="" argb="255,239,179,0" value="222" />
+			<entry class="" argb="255,239,182,0" value="223" />
+			<entry class="" argb="255,240,184,0" value="224" />
+			<entry class="" argb="255,240,186,0" value="225" />
+			<entry class="" argb="255,241,189,0" value="226" />
+			<entry class="" argb="255,241,191,0" value="227" />
+			<entry class="" argb="255,242,193,0" value="228" />
+			<entry class="" argb="255,242,196,0" value="229" />
+			<entry class="" argb="255,243,198,0" value="230" />
+			<entry class="" argb="255,243,200,0" value="231" />
+			<entry class="" argb="255,244,202,0" value="232" />
+			<entry class="" argb="255,244,205,0" value="233" />
+			<entry class="" argb="255,245,207,0" value="234" />
+			<entry class="" argb="255,245,209,0" value="235" />
+			<entry class="" argb="255,246,212,0" value="236" />
+			<entry class="" argb="255,246,214,0" value="237" />
+			<entry class="" argb="255,247,216,0" value="238" />
+			<entry class="" argb="255,247,219,0" value="239" />
+			<entry class="" argb="255,248,221,0" value="240" />
+			<entry class="" argb="255,248,223,0" value="241" />
+			<entry class="" argb="255,249,226,0" value="242" />
+			<entry class="" argb="255,249,228,0" value="243" />
+			<entry class="" argb="255,250,230,0" value="244" />
+			<entry class="" argb="255,250,232,0" value="245" />
+			<entry class="" argb="255,251,235,0" value="246" />
+			<entry class="" argb="255,251,237,0" value="247" />
+			<entry class="" argb="255,252,239,0" value="248" />
+			<entry class="" argb="255,252,242,0" value="249" />
+			<entry class="" argb="255,253,244,0" value="250" />
+			<entry class="" argb="255,253,246,0" value="251" />
+			<entry class="" argb="255,254,249,0" value="252" />
+			<entry class="" argb="255,254,251,0" value="253" />
+			<entry class="" argb="255,255,253,0" value="254" />
+			<entry class="" argb="255,255,255,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-pastel-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,33,0,96" value="0" />
+			<entry class="" argb="255,33,0,96" value="1" />
+			<entry class="" argb="255,32,0,97" value="2" />
+			<entry class="" argb="255,31,0,99" value="3" />
+			<entry class="" argb="255,31,0,100" value="4" />
+			<entry class="" argb="255,30,0,101" value="5" />
+			<entry class="" argb="255,29,0,102" value="6" />
+			<entry class="" argb="255,28,0,104" value="7" />
+			<entry class="" argb="255,27,0,105" value="8" />
+			<entry class="" argb="255,26,0,106" value="9" />
+			<entry class="" argb="255,25,0,107" value="10" />
+			<entry class="" argb="255,24,0,108" value="11" />
+			<entry class="" argb="255,23,0,110" value="12" />
+			<entry class="" argb="255,22,0,111" value="13" />
+			<entry class="" argb="255,21,0,112" value="14" />
+			<entry class="" argb="255,20,0,113" value="15" />
+			<entry class="" argb="255,19,0,115" value="16" />
+			<entry class="" argb="255,17,0,116" value="17" />
+			<entry class="" argb="255,16,0,117" value="18" />
+			<entry class="" argb="255,15,0,118" value="19" />
+			<entry class="" argb="255,14,0,119" value="20" />
+			<entry class="" argb="255,12,0,121" value="21" />
+			<entry class="" argb="255,11,0,122" value="22" />
+			<entry class="" argb="255,13,0,123" value="23" />
+			<entry class="" argb="255,8,0,124" value="24" />
+			<entry class="" argb="255,7,0,125" value="25" />
+			<entry class="" argb="255,5,0,127" value="26" />
+			<entry class="" argb="255,4,0,128" value="27" />
+			<entry class="" argb="255,2,0,129" value="28" />
+			<entry class="" argb="255,1,0,130" value="29" />
+			<entry class="" argb="255,0,0,132" value="30" />
+			<entry class="" argb="255,0,1,133" value="31" />
+			<entry class="" argb="255,0,3,134" value="32" />
+			<entry class="" argb="255,0,5,135" value="33" />
+			<entry class="" argb="255,0,6,136" value="34" />
+			<entry class="" argb="255,0,8,138" value="35" />
+			<entry class="" argb="255,0,13,139" value="36" />
+			<entry class="" argb="255,0,12,140" value="37" />
+			<entry class="" argb="255,0,13,141" value="38" />
+			<entry class="" argb="255,0,15,143" value="39" />
+			<entry class="" argb="255,0,17,144" value="40" />
+			<entry class="" argb="255,0,19,145" value="41" />
+			<entry class="" argb="255,0,21,146" value="42" />
+			<entry class="" argb="255,0,23,147" value="43" />
+			<entry class="" argb="255,0,25,149" value="44" />
+			<entry class="" argb="255,0,27,150" value="45" />
+			<entry class="" argb="255,0,29,151" value="46" />
+			<entry class="" argb="255,0,31,152" value="47" />
+			<entry class="" argb="255,0,33,154" value="48" />
+			<entry class="" argb="255,0,35,155" value="49" />
+			<entry class="" argb="255,0,37,156" value="50" />
+			<entry class="" argb="255,0,39,157" value="51" />
+			<entry class="" argb="255,0,42,158" value="52" />
+			<entry class="" argb="255,0,44,160" value="53" />
+			<entry class="" argb="255,0,46,161" value="54" />
+			<entry class="" argb="255,0,49,162" value="55" />
+			<entry class="" argb="255,0,51,163" value="56" />
+			<entry class="" argb="255,0,53,164" value="57" />
+			<entry class="" argb="255,0,56,166" value="58" />
+			<entry class="" argb="255,0,58,167" value="59" />
+			<entry class="" argb="255,0,60,168" value="60" />
+			<entry class="" argb="255,0,63,169" value="61" />
+			<entry class="" argb="255,0,65,171" value="62" />
+			<entry class="" argb="255,0,68,172" value="63" />
+			<entry class="" argb="255,0,71,173" value="64" />
+			<entry class="" argb="255,0,73,174" value="65" />
+			<entry class="" argb="255,0,76,175" value="66" />
+			<entry class="" argb="255,0,78,177" value="67" />
+			<entry class="" argb="255,0,81,178" value="68" />
+			<entry class="" argb="255,0,84,179" value="69" />
+			<entry class="" argb="255,0,87,180" value="70" />
+			<entry class="" argb="255,0,89,182" value="71" />
+			<entry class="" argb="255,0,92,183" value="72" />
+			<entry class="" argb="255,0,95,184" value="73" />
+			<entry class="" argb="255,0,98,185" value="74" />
+			<entry class="" argb="255,0,101,186" value="75" />
+			<entry class="" argb="255,0,104,188" value="76" />
+			<entry class="" argb="255,0,107,189" value="77" />
+			<entry class="" argb="255,0,110,190" value="78" />
+			<entry class="" argb="255,0,113,191" value="79" />
+			<entry class="" argb="255,0,116,193" value="80" />
+			<entry class="" argb="255,0,119,194" value="81" />
+			<entry class="" argb="255,0,122,195" value="82" />
+			<entry class="" argb="255,0,125,196" value="83" />
+			<entry class="" argb="255,0,128,197" value="84" />
+			<entry class="" argb="255,0,131,199" value="85" />
+			<entry class="" argb="255,0,134,200" value="86" />
+			<entry class="" argb="255,0,138,201" value="87" />
+			<entry class="" argb="255,0,141,202" value="88" />
+			<entry class="" argb="255,0,144,203" value="89" />
+			<entry class="" argb="255,0,148,205" value="90" />
+			<entry class="" argb="255,0,151,206" value="91" />
+			<entry class="" argb="255,0,154,207" value="92" />
+			<entry class="" argb="255,0,158,208" value="93" />
+			<entry class="" argb="255,0,161,210" value="94" />
+			<entry class="" argb="255,0,165,211" value="95" />
+			<entry class="" argb="255,0,168,212" value="96" />
+			<entry class="" argb="255,0,172,213" value="97" />
+			<entry class="" argb="255,0,175,214" value="98" />
+			<entry class="" argb="255,0,179,216" value="99" />
+			<entry class="" argb="255,0,182,217" value="100" />
+			<entry class="" argb="255,0,186,218" value="101" />
+			<entry class="" argb="255,0,190,219" value="102" />
+			<entry class="" argb="255,0,193,221" value="103" />
+			<entry class="" argb="255,0,197,222" value="104" />
+			<entry class="" argb="255,0,201,223" value="105" />
+			<entry class="" argb="255,0,205,224" value="106" />
+			<entry class="" argb="255,0,209,225" value="107" />
+			<entry class="" argb="255,0,212,227" value="108" />
+			<entry class="" argb="255,0,216,228" value="109" />
+			<entry class="" argb="255,0,220,229" value="110" />
+			<entry class="" argb="255,0,224,230" value="111" />
+			<entry class="" argb="255,0,228,232" value="112" />
+			<entry class="" argb="255,0,232,233" value="113" />
+			<entry class="" argb="255,0,234,232" value="114" />
+			<entry class="" argb="255,0,235,230" value="115" />
+			<entry class="" argb="255,0,236,229" value="116" />
+			<entry class="" argb="255,0,238,227" value="117" />
+			<entry class="" argb="255,0,239,225" value="118" />
+			<entry class="" argb="255,0,240,223" value="119" />
+			<entry class="" argb="255,0,241,222" value="120" />
+			<entry class="" argb="255,0,243,220" value="121" />
+			<entry class="" argb="255,0,244,218" value="122" />
+			<entry class="" argb="255,0,245,216" value="123" />
+			<entry class="" argb="255,0,246,214" value="124" />
+			<entry class="" argb="255,0,247,212" value="125" />
+			<entry class="" argb="255,0,249,210" value="126" />
+			<entry class="" argb="255,0,249,208" value="127" />
+			<entry class="" argb="255,0,246,149" value="128" />
+			<entry class="" argb="255,0,244,142" value="129" />
+			<entry class="" argb="255,0,241,135" value="130" />
+			<entry class="" argb="255,0,237,127" value="131" />
+			<entry class="" argb="255,2,232,118" value="132" />
+			<entry class="" argb="255,4,227,111" value="133" />
+			<entry class="" argb="255,5,223,103" value="134" />
+			<entry class="" argb="255,7,218,95" value="135" />
+			<entry class="" argb="255,8,214,88" value="136" />
+			<entry class="" argb="255,13,209,81" value="137" />
+			<entry class="" argb="255,11,205,74" value="138" />
+			<entry class="" argb="255,13,201,67" value="139" />
+			<entry class="" argb="255,14,196,60" value="140" />
+			<entry class="" argb="255,15,192,53" value="141" />
+			<entry class="" argb="255,17,188,47" value="142" />
+			<entry class="" argb="255,18,184,40" value="143" />
+			<entry class="" argb="255,19,180,34" value="144" />
+			<entry class="" argb="255,20,175,28" value="145" />
+			<entry class="" argb="255,21,171,22" value="146" />
+			<entry class="" argb="255,29,167,22" value="147" />
+			<entry class="" argb="255,36,163,23" value="148" />
+			<entry class="" argb="255,42,160,24" value="149" />
+			<entry class="" argb="255,48,156,25" value="150" />
+			<entry class="" argb="255,53,152,26" value="151" />
+			<entry class="" argb="255,58,148,27" value="152" />
+			<entry class="" argb="255,61,144,28" value="153" />
+			<entry class="" argb="255,65,141,28" value="154" />
+			<entry class="" argb="255,68,137,29" value="155" />
+			<entry class="" argb="255,70,133,30" value="156" />
+			<entry class="" argb="255,72,130,30" value="157" />
+			<entry class="" argb="255,73,126,31" value="158" />
+			<entry class="" argb="255,74,123,31" value="159" />
+			<entry class="" argb="255,74,119,32" value="160" />
+			<entry class="" argb="255,74,116,32" value="161" />
+			<entry class="" argb="255,75,116,29" value="162" />
+			<entry class="" argb="255,75,115,28" value="163" />
+			<entry class="" argb="255,76,113,26" value="164" />
+			<entry class="" argb="255,76,112,25" value="165" />
+			<entry class="" argb="255,76,110,23" value="166" />
+			<entry class="" argb="255,77,109,22" value="167" />
+			<entry class="" argb="255,76,104,20" value="168" />
+			<entry class="" argb="255,77,104,18" value="169" />
+			<entry class="" argb="255,78,103,17" value="170" />
+			<entry class="" argb="255,79,102,16" value="171" />
+			<entry class="" argb="255,80,101,15" value="172" />
+			<entry class="" argb="255,81,100,14" value="173" />
+			<entry class="" argb="255,83,99,13" value="174" />
+			<entry class="" argb="255,84,98,12" value="175" />
+			<entry class="" argb="255,85,97,11" value="176" />
+			<entry class="" argb="255,86,96,13" value="177" />
+			<entry class="" argb="255,88,95,9" value="178" />
+			<entry class="" argb="255,89,94,8" value="179" />
+			<entry class="" argb="255,91,93,7" value="180" />
+			<entry class="" argb="255,92,92,6" value="181" />
+			<entry class="" argb="255,91,88,5" value="182" />
+			<entry class="" argb="255,94,88,5" value="183" />
+			<entry class="" argb="255,96,88,4" value="184" />
+			<entry class="" argb="255,98,87,3" value="185" />
+			<entry class="" argb="255,100,86,3" value="186" />
+			<entry class="" argb="255,102,85,2" value="187" />
+			<entry class="" argb="255,104,85,1" value="188" />
+			<entry class="" argb="255,106,84,0" value="189" />
+			<entry class="" argb="255,108,83,0" value="190" />
+			<entry class="" argb="255,109,82,0" value="191" />
+			<entry class="" argb="255,111,80,0" value="192" />
+			<entry class="" argb="255,112,79,0" value="193" />
+			<entry class="" argb="255,113,78,0" value="194" />
+			<entry class="" argb="255,115,76,0" value="195" />
+			<entry class="" argb="255,116,75,0" value="196" />
+			<entry class="" argb="255,117,74,0" value="197" />
+			<entry class="" argb="255,119,73,0" value="198" />
+			<entry class="" argb="255,120,71,0" value="199" />
+			<entry class="" argb="255,121,70,0" value="200" />
+			<entry class="" argb="255,123,69,0" value="201" />
+			<entry class="" argb="255,124,68,0" value="202" />
+			<entry class="" argb="255,125,67,0" value="203" />
+			<entry class="" argb="255,127,66,0" value="204" />
+			<entry class="" argb="255,128,64,0" value="205" />
+			<entry class="" argb="255,129,63,0" value="206" />
+			<entry class="" argb="255,131,61,0" value="207" />
+			<entry class="" argb="255,132,58,0" value="208" />
+			<entry class="" argb="255,133,56,0" value="209" />
+			<entry class="" argb="255,135,54,0" value="210" />
+			<entry class="" argb="255,136,52,0" value="211" />
+			<entry class="" argb="255,137,49,0" value="212" />
+			<entry class="" argb="255,138,47,0" value="213" />
+			<entry class="" argb="255,140,45,0" value="214" />
+			<entry class="" argb="255,141,43,0" value="215" />
+			<entry class="" argb="255,142,41,0" value="216" />
+			<entry class="" argb="255,144,40,0" value="217" />
+			<entry class="" argb="255,145,38,0" value="218" />
+			<entry class="" argb="255,146,36,0" value="219" />
+			<entry class="" argb="255,148,34,0" value="220" />
+			<entry class="" argb="255,149,33,0" value="221" />
+			<entry class="" argb="255,150,31,0" value="222" />
+			<entry class="" argb="255,152,29,0" value="223" />
+			<entry class="" argb="255,153,28,0" value="224" />
+			<entry class="" argb="255,154,26,0" value="225" />
+			<entry class="" argb="255,156,25,0" value="226" />
+			<entry class="" argb="255,157,23,0" value="227" />
+			<entry class="" argb="255,158,22,0" value="228" />
+			<entry class="" argb="255,160,21,0" value="229" />
+			<entry class="" argb="255,161,19,0" value="230" />
+			<entry class="" argb="255,162,18,0" value="231" />
+			<entry class="" argb="255,164,17,0" value="232" />
+			<entry class="" argb="255,165,16,0" value="233" />
+			<entry class="" argb="255,166,14,0" value="234" />
+			<entry class="" argb="255,168,13,0" value="235" />
+			<entry class="" argb="255,169,12,0" value="236" />
+			<entry class="" argb="255,170,11,0" value="237" />
+			<entry class="" argb="255,172,13,0" value="238" />
+			<entry class="" argb="255,173,9,0" value="239" />
+			<entry class="" argb="255,174,8,0" value="240" />
+			<entry class="" argb="255,175,7,0" value="241" />
+			<entry class="" argb="255,177,7,0" value="242" />
+			<entry class="" argb="255,178,6,0" value="243" />
+			<entry class="" argb="255,179,5,0" value="244" />
+			<entry class="" argb="255,181,4,0" value="245" />
+			<entry class="" argb="255,182,4,0" value="246" />
+			<entry class="" argb="255,183,3,0" value="247" />
+			<entry class="" argb="255,185,2,0" value="248" />
+			<entry class="" argb="255,186,2,0" value="249" />
+			<entry class="" argb="255,187,1,0" value="250" />
+			<entry class="" argb="255,189,1,0" value="251" />
+			<entry class="" argb="255,190,0,0" value="252" />
+			<entry class="" argb="255,191,0,0" value="253" />
+			<entry class="" argb="255,193,0,0" value="254" />
+			<entry class="" argb="255,193,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,1,1" value="1" />
+			<entry class="" argb="255,0,2,2" value="2" />
+			<entry class="" argb="255,0,3,3" value="3" />
+			<entry class="" argb="255,0,4,4" value="4" />
+			<entry class="" argb="255,0,8,8" value="5" />
+			<entry class="" argb="255,0,12,12" value="6" />
+			<entry class="" argb="255,0,16,16" value="7" />
+			<entry class="" argb="255,0,21,21" value="8" />
+			<entry class="" argb="255,0,25,25" value="9" />
+			<entry class="" argb="255,0,29,29" value="10" />
+			<entry class="" argb="255,0,33,33" value="11" />
+			<entry class="" argb="255,0,38,38" value="12" />
+			<entry class="" argb="255,0,42,42" value="13" />
+			<entry class="" argb="255,0,46,46" value="14" />
+			<entry class="" argb="255,0,50,50" value="15" />
+			<entry class="" argb="255,0,55,55" value="16" />
+			<entry class="" argb="255,0,59,59" value="17" />
+			<entry class="" argb="255,0,63,63" value="18" />
+			<entry class="" argb="255,0,67,67" value="19" />
+			<entry class="" argb="255,0,72,72" value="20" />
+			<entry class="" argb="255,0,76,76" value="21" />
+			<entry class="" argb="255,0,80,80" value="22" />
+			<entry class="" argb="255,0,84,84" value="23" />
+			<entry class="" argb="255,0,89,89" value="24" />
+			<entry class="" argb="255,0,93,93" value="25" />
+			<entry class="" argb="255,0,97,97" value="26" />
+			<entry class="" argb="255,0,101,101" value="27" />
+			<entry class="" argb="255,0,106,106" value="28" />
+			<entry class="" argb="255,0,110,110" value="29" />
+			<entry class="" argb="255,0,114,114" value="30" />
+			<entry class="" argb="255,0,118,118" value="31" />
+			<entry class="" argb="255,0,123,123" value="32" />
+			<entry class="" argb="255,0,127,127" value="33" />
+			<entry class="" argb="255,0,131,131" value="34" />
+			<entry class="" argb="255,0,135,135" value="35" />
+			<entry class="" argb="255,0,140,140" value="36" />
+			<entry class="" argb="255,0,144,144" value="37" />
+			<entry class="" argb="255,0,148,148" value="38" />
+			<entry class="" argb="255,0,152,152" value="39" />
+			<entry class="" argb="255,0,157,157" value="40" />
+			<entry class="" argb="255,0,161,161" value="41" />
+			<entry class="" argb="255,0,165,165" value="42" />
+			<entry class="" argb="255,0,169,169" value="43" />
+			<entry class="" argb="255,0,174,174" value="44" />
+			<entry class="" argb="255,0,178,178" value="45" />
+			<entry class="" argb="255,0,182,182" value="46" />
+			<entry class="" argb="255,0,186,186" value="47" />
+			<entry class="" argb="255,0,191,191" value="48" />
+			<entry class="" argb="255,0,195,195" value="49" />
+			<entry class="" argb="255,0,199,199" value="50" />
+			<entry class="" argb="255,0,203,203" value="51" />
+			<entry class="" argb="255,0,208,208" value="52" />
+			<entry class="" argb="255,0,212,212" value="53" />
+			<entry class="" argb="255,0,216,216" value="54" />
+			<entry class="" argb="255,0,220,220" value="55" />
+			<entry class="" argb="255,0,225,225" value="56" />
+			<entry class="" argb="255,0,229,229" value="57" />
+			<entry class="" argb="255,0,233,233" value="58" />
+			<entry class="" argb="255,0,237,237" value="59" />
+			<entry class="" argb="255,0,242,242" value="60" />
+			<entry class="" argb="255,0,246,246" value="61" />
+			<entry class="" argb="255,0,250,250" value="62" />
+			<entry class="" argb="255,0,255,255" value="63" />
+			<entry class="" argb="255,0,255,255" value="64" />
+			<entry class="" argb="255,0,251,255" value="65" />
+			<entry class="" argb="255,0,247,255" value="66" />
+			<entry class="" argb="255,0,243,255" value="67" />
+			<entry class="" argb="255,0,239,255" value="68" />
+			<entry class="" argb="255,0,235,255" value="69" />
+			<entry class="" argb="255,0,231,255" value="70" />
+			<entry class="" argb="255,0,227,255" value="71" />
+			<entry class="" argb="255,0,223,255" value="72" />
+			<entry class="" argb="255,0,219,255" value="73" />
+			<entry class="" argb="255,0,215,255" value="74" />
+			<entry class="" argb="255,0,211,255" value="75" />
+			<entry class="" argb="255,0,207,255" value="76" />
+			<entry class="" argb="255,0,203,255" value="77" />
+			<entry class="" argb="255,0,199,255" value="78" />
+			<entry class="" argb="255,0,195,255" value="79" />
+			<entry class="" argb="255,0,191,255" value="80" />
+			<entry class="" argb="255,0,187,255" value="81" />
+			<entry class="" argb="255,0,183,255" value="82" />
+			<entry class="" argb="255,0,179,255" value="83" />
+			<entry class="" argb="255,0,175,255" value="84" />
+			<entry class="" argb="255,0,170,255" value="85" />
+			<entry class="" argb="255,0,166,255" value="86" />
+			<entry class="" argb="255,0,162,255" value="87" />
+			<entry class="" argb="255,0,158,255" value="88" />
+			<entry class="" argb="255,0,154,255" value="89" />
+			<entry class="" argb="255,0,150,255" value="90" />
+			<entry class="" argb="255,0,146,255" value="91" />
+			<entry class="" argb="255,0,142,255" value="92" />
+			<entry class="" argb="255,0,138,255" value="93" />
+			<entry class="" argb="255,0,134,255" value="94" />
+			<entry class="" argb="255,0,130,255" value="95" />
+			<entry class="" argb="255,0,126,255" value="96" />
+			<entry class="" argb="255,0,122,255" value="97" />
+			<entry class="" argb="255,0,118,255" value="98" />
+			<entry class="" argb="255,0,114,255" value="99" />
+			<entry class="" argb="255,0,110,255" value="100" />
+			<entry class="" argb="255,0,106,255" value="101" />
+			<entry class="" argb="255,0,102,255" value="102" />
+			<entry class="" argb="255,0,98,255" value="103" />
+			<entry class="" argb="255,0,94,255" value="104" />
+			<entry class="" argb="255,0,90,255" value="105" />
+			<entry class="" argb="255,0,85,255" value="106" />
+			<entry class="" argb="255,0,81,255" value="107" />
+			<entry class="" argb="255,0,77,255" value="108" />
+			<entry class="" argb="255,0,73,255" value="109" />
+			<entry class="" argb="255,0,69,255" value="110" />
+			<entry class="" argb="255,0,65,255" value="111" />
+			<entry class="" argb="255,0,61,255" value="112" />
+			<entry class="" argb="255,0,57,255" value="113" />
+			<entry class="" argb="255,0,53,255" value="114" />
+			<entry class="" argb="255,0,49,255" value="115" />
+			<entry class="" argb="255,0,45,255" value="116" />
+			<entry class="" argb="255,0,41,255" value="117" />
+			<entry class="" argb="255,0,37,255" value="118" />
+			<entry class="" argb="255,0,33,255" value="119" />
+			<entry class="" argb="255,0,29,255" value="120" />
+			<entry class="" argb="255,0,25,255" value="121" />
+			<entry class="" argb="255,0,21,255" value="122" />
+			<entry class="" argb="255,0,17,255" value="123" />
+			<entry class="" argb="255,0,13,255" value="124" />
+			<entry class="" argb="255,0,9,255" value="125" />
+			<entry class="" argb="255,0,5,255" value="126" />
+			<entry class="" argb="255,0,0,255" value="127" />
+			<entry class="" argb="255,0,0,255" value="128" />
+			<entry class="" argb="255,4,0,255" value="129" />
+			<entry class="" argb="255,8,0,255" value="130" />
+			<entry class="" argb="255,12,0,255" value="131" />
+			<entry class="" argb="255,16,0,255" value="132" />
+			<entry class="" argb="255,20,0,255" value="133" />
+			<entry class="" argb="255,24,0,255" value="134" />
+			<entry class="" argb="255,28,0,255" value="135" />
+			<entry class="" argb="255,32,0,255" value="136" />
+			<entry class="" argb="255,36,0,255" value="137" />
+			<entry class="" argb="255,40,0,255" value="138" />
+			<entry class="" argb="255,44,0,255" value="139" />
+			<entry class="" argb="255,48,0,255" value="140" />
+			<entry class="" argb="255,52,0,255" value="141" />
+			<entry class="" argb="255,56,0,255" value="142" />
+			<entry class="" argb="255,60,0,255" value="143" />
+			<entry class="" argb="255,64,0,255" value="144" />
+			<entry class="" argb="255,68,0,255" value="145" />
+			<entry class="" argb="255,72,0,255" value="146" />
+			<entry class="" argb="255,76,0,255" value="147" />
+			<entry class="" argb="255,80,0,255" value="148" />
+			<entry class="" argb="255,85,0,255" value="149" />
+			<entry class="" argb="255,89,0,255" value="150" />
+			<entry class="" argb="255,93,0,255" value="151" />
+			<entry class="" argb="255,97,0,255" value="152" />
+			<entry class="" argb="255,101,0,255" value="153" />
+			<entry class="" argb="255,105,0,255" value="154" />
+			<entry class="" argb="255,109,0,255" value="155" />
+			<entry class="" argb="255,113,0,255" value="156" />
+			<entry class="" argb="255,117,0,255" value="157" />
+			<entry class="" argb="255,121,0,255" value="158" />
+			<entry class="" argb="255,125,0,255" value="159" />
+			<entry class="" argb="255,129,0,255" value="160" />
+			<entry class="" argb="255,133,0,255" value="161" />
+			<entry class="" argb="255,137,0,255" value="162" />
+			<entry class="" argb="255,141,0,255" value="163" />
+			<entry class="" argb="255,145,0,255" value="164" />
+			<entry class="" argb="255,149,0,255" value="165" />
+			<entry class="" argb="255,153,0,255" value="166" />
+			<entry class="" argb="255,157,0,255" value="167" />
+			<entry class="" argb="255,161,0,255" value="168" />
+			<entry class="" argb="255,165,0,255" value="169" />
+			<entry class="" argb="255,170,0,255" value="170" />
+			<entry class="" argb="255,174,0,255" value="171" />
+			<entry class="" argb="255,178,0,255" value="172" />
+			<entry class="" argb="255,182,0,255" value="173" />
+			<entry class="" argb="255,186,0,255" value="174" />
+			<entry class="" argb="255,190,0,255" value="175" />
+			<entry class="" argb="255,194,0,255" value="176" />
+			<entry class="" argb="255,198,0,255" value="177" />
+			<entry class="" argb="255,202,0,255" value="178" />
+			<entry class="" argb="255,206,0,255" value="179" />
+			<entry class="" argb="255,210,0,255" value="180" />
+			<entry class="" argb="255,214,0,255" value="181" />
+			<entry class="" argb="255,218,0,255" value="182" />
+			<entry class="" argb="255,222,0,255" value="183" />
+			<entry class="" argb="255,226,0,255" value="184" />
+			<entry class="" argb="255,230,0,255" value="185" />
+			<entry class="" argb="255,234,0,255" value="186" />
+			<entry class="" argb="255,238,0,255" value="187" />
+			<entry class="" argb="255,242,0,255" value="188" />
+			<entry class="" argb="255,246,0,255" value="189" />
+			<entry class="" argb="255,250,0,255" value="190" />
+			<entry class="" argb="255,255,0,255" value="191" />
+			<entry class="" argb="255,255,0,255" value="192" />
+			<entry class="" argb="255,255,0,251" value="193" />
+			<entry class="" argb="255,255,0,247" value="194" />
+			<entry class="" argb="255,255,0,243" value="195" />
+			<entry class="" argb="255,255,0,239" value="196" />
+			<entry class="" argb="255,255,0,235" value="197" />
+			<entry class="" argb="255,255,0,231" value="198" />
+			<entry class="" argb="255,255,0,227" value="199" />
+			<entry class="" argb="255,255,0,223" value="200" />
+			<entry class="" argb="255,255,0,218" value="201" />
+			<entry class="" argb="255,255,0,214" value="202" />
+			<entry class="" argb="255,255,0,210" value="203" />
+			<entry class="" argb="255,255,0,206" value="204" />
+			<entry class="" argb="255,255,0,202" value="205" />
+			<entry class="" argb="255,255,0,198" value="206" />
+			<entry class="" argb="255,255,0,194" value="207" />
+			<entry class="" argb="255,255,0,190" value="208" />
+			<entry class="" argb="255,255,0,186" value="209" />
+			<entry class="" argb="255,255,0,181" value="210" />
+			<entry class="" argb="255,255,0,177" value="211" />
+			<entry class="" argb="255,255,0,173" value="212" />
+			<entry class="" argb="255,255,0,169" value="213" />
+			<entry class="" argb="255,255,0,165" value="214" />
+			<entry class="" argb="255,255,0,161" value="215" />
+			<entry class="" argb="255,255,0,157" value="216" />
+			<entry class="" argb="255,255,0,153" value="217" />
+			<entry class="" argb="255,255,0,149" value="218" />
+			<entry class="" argb="255,255,0,144" value="219" />
+			<entry class="" argb="255,255,0,140" value="220" />
+			<entry class="" argb="255,255,0,136" value="221" />
+			<entry class="" argb="255,255,0,132" value="222" />
+			<entry class="" argb="255,255,0,128" value="223" />
+			<entry class="" argb="255,255,0,124" value="224" />
+			<entry class="" argb="255,255,0,120" value="225" />
+			<entry class="" argb="255,255,0,116" value="226" />
+			<entry class="" argb="255,255,0,112" value="227" />
+			<entry class="" argb="255,255,0,107" value="228" />
+			<entry class="" argb="255,255,0,103" value="229" />
+			<entry class="" argb="255,255,0,99" value="230" />
+			<entry class="" argb="255,255,0,95" value="231" />
+			<entry class="" argb="255,255,0,91" value="232" />
+			<entry class="" argb="255,255,0,87" value="233" />
+			<entry class="" argb="255,255,0,83" value="234" />
+			<entry class="" argb="255,255,0,79" value="235" />
+			<entry class="" argb="255,255,0,75" value="236" />
+			<entry class="" argb="255,255,0,70" value="237" />
+			<entry class="" argb="255,255,0,66" value="238" />
+			<entry class="" argb="255,255,0,62" value="239" />
+			<entry class="" argb="255,255,0,58" value="240" />
+			<entry class="" argb="255,255,0,54" value="241" />
+			<entry class="" argb="255,255,0,50" value="242" />
+			<entry class="" argb="255,255,0,46" value="243" />
+			<entry class="" argb="255,255,0,42" value="244" />
+			<entry class="" argb="255,255,0,38" value="245" />
+			<entry class="" argb="255,255,0,33" value="246" />
+			<entry class="" argb="255,255,0,29" value="247" />
+			<entry class="" argb="255,255,0,25" value="248" />
+			<entry class="" argb="255,255,0,21" value="249" />
+			<entry class="" argb="255,255,0,17" value="250" />
+			<entry class="" argb="255,255,0,13" value="251" />
+			<entry class="" argb="255,255,0,9" value="252" />
+			<entry class="" argb="255,255,0,5" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-waves" interpolate="false">
+		<table>
+			<entry class="" argb="255,82,0,214" value="0" />
+			<entry class="" argb="255,82,0,214" value="1" />
+			<entry class="" argb="255,77,1,202" value="2" />
+			<entry class="" argb="255,73,1,189" value="3" />
+			<entry class="" argb="255,68,2,177" value="4" />
+			<entry class="" argb="255,63,2,165" value="5" />
+			<entry class="" argb="255,59,3,153" value="6" />
+			<entry class="" argb="255,54,4,141" value="7" />
+			<entry class="" argb="255,50,4,129" value="8" />
+			<entry class="" argb="255,46,5,118" value="9" />
+			<entry class="" argb="255,42,6,107" value="10" />
+			<entry class="" argb="255,38,6,96" value="11" />
+			<entry class="" argb="255,34,7,85" value="12" />
+			<entry class="" argb="255,30,8,75" value="13" />
+			<entry class="" argb="255,26,9,65" value="14" />
+			<entry class="" argb="255,23,13,56" value="15" />
+			<entry class="" argb="255,19,11,47" value="16" />
+			<entry class="" argb="255,16,12,38" value="17" />
+			<entry class="" argb="255,13,13,30" value="18" />
+			<entry class="" argb="255,13,15,22" value="19" />
+			<entry class="" argb="255,8,16,15" value="20" />
+			<entry class="" argb="255,5,17,9" value="21" />
+			<entry class="" argb="255,3,19,2" value="22" />
+			<entry class="" argb="255,1,20,2" value="23" />
+			<entry class="" argb="255,0,22,7" value="24" />
+			<entry class="" argb="255,2,23,12" value="25" />
+			<entry class="" argb="255,3,25,16" value="26" />
+			<entry class="" argb="255,5,27,19" value="27" />
+			<entry class="" argb="255,6,28,22" value="28" />
+			<entry class="" argb="255,6,30,24" value="29" />
+			<entry class="" argb="255,7,32,25" value="30" />
+			<entry class="" argb="255,7,34,26" value="31" />
+			<entry class="" argb="255,8,35,27" value="32" />
+			<entry class="" argb="255,7,37,26" value="33" />
+			<entry class="" argb="255,7,39,25" value="34" />
+			<entry class="" argb="255,6,41,24" value="35" />
+			<entry class="" argb="255,6,43,22" value="36" />
+			<entry class="" argb="255,5,45,19" value="37" />
+			<entry class="" argb="255,3,46,16" value="38" />
+			<entry class="" argb="255,2,48,12" value="39" />
+			<entry class="" argb="255,0,50,7" value="40" />
+			<entry class="" argb="255,1,51,2" value="41" />
+			<entry class="" argb="255,3,53,2" value="42" />
+			<entry class="" argb="255,5,55,9" value="43" />
+			<entry class="" argb="255,8,56,15" value="44" />
+			<entry class="" argb="255,13,58,22" value="45" />
+			<entry class="" argb="255,13,59,30" value="46" />
+			<entry class="" argb="255,16,60,38" value="47" />
+			<entry class="" argb="255,19,61,47" value="48" />
+			<entry class="" argb="255,23,62,56" value="49" />
+			<entry class="" argb="255,26,63,65" value="50" />
+			<entry class="" argb="255,30,64,75" value="51" />
+			<entry class="" argb="255,34,65,85" value="52" />
+			<entry class="" argb="255,38,66,96" value="53" />
+			<entry class="" argb="255,42,66,107" value="54" />
+			<entry class="" argb="255,46,67,118" value="55" />
+			<entry class="" argb="255,50,67,129" value="56" />
+			<entry class="" argb="255,54,67,141" value="57" />
+			<entry class="" argb="255,59,67,153" value="58" />
+			<entry class="" argb="255,63,67,165" value="59" />
+			<entry class="" argb="255,68,67,177" value="60" />
+			<entry class="" argb="255,73,67,189" value="61" />
+			<entry class="" argb="255,77,67,202" value="62" />
+			<entry class="" argb="255,82,66,214" value="63" />
+			<entry class="" argb="255,87,66,227" value="64" />
+			<entry class="" argb="255,91,65,239" value="65" />
+			<entry class="" argb="255,96,64,251" value="66" />
+			<entry class="" argb="255,100,64,246" value="67" />
+			<entry class="" argb="255,105,63,234" value="68" />
+			<entry class="" argb="255,110,62,222" value="69" />
+			<entry class="" argb="255,114,61,210" value="70" />
+			<entry class="" argb="255,119,60,198" value="71" />
+			<entry class="" argb="255,123,59,186" value="72" />
+			<entry class="" argb="255,127,57,175" value="73" />
+			<entry class="" argb="255,131,56,164" value="74" />
+			<entry class="" argb="255,135,55,153" value="75" />
+			<entry class="" argb="255,139,54,142" value="76" />
+			<entry class="" argb="255,143,53,132" value="77" />
+			<entry class="" argb="255,147,52,122" value="78" />
+			<entry class="" argb="255,150,51,113" value="79" />
+			<entry class="" argb="255,154,49,104" value="80" />
+			<entry class="" argb="255,157,48,95" value="81" />
+			<entry class="" argb="255,160,47,87" value="82" />
+			<entry class="" argb="255,163,47,79" value="83" />
+			<entry class="" argb="255,165,46,72" value="84" />
+			<entry class="" argb="255,168,45,66" value="85" />
+			<entry class="" argb="255,170,44,59" value="86" />
+			<entry class="" argb="255,172,44,54" value="87" />
+			<entry class="" argb="255,174,44,49" value="88" />
+			<entry class="" argb="255,176,43,44" value="89" />
+			<entry class="" argb="255,177,43,40" value="90" />
+			<entry class="" argb="255,179,43,37" value="91" />
+			<entry class="" argb="255,180,43,34" value="92" />
+			<entry class="" argb="255,180,44,32" value="93" />
+			<entry class="" argb="255,181,44,31" value="94" />
+			<entry class="" argb="255,181,45,30" value="95" />
+			<entry class="" argb="255,182,46,29" value="96" />
+			<entry class="" argb="255,181,47,30" value="97" />
+			<entry class="" argb="255,181,48,31" value="98" />
+			<entry class="" argb="255,180,50,32" value="99" />
+			<entry class="" argb="255,180,51,34" value="100" />
+			<entry class="" argb="255,179,53,37" value="101" />
+			<entry class="" argb="255,177,55,40" value="102" />
+			<entry class="" argb="255,176,57,44" value="103" />
+			<entry class="" argb="255,174,60,49" value="104" />
+			<entry class="" argb="255,172,62,54" value="105" />
+			<entry class="" argb="255,170,65,59" value="106" />
+			<entry class="" argb="255,168,68,66" value="107" />
+			<entry class="" argb="255,165,71,72" value="108" />
+			<entry class="" argb="255,163,74,79" value="109" />
+			<entry class="" argb="255,160,78,87" value="110" />
+			<entry class="" argb="255,157,81,95" value="111" />
+			<entry class="" argb="255,154,85,104" value="112" />
+			<entry class="" argb="255,150,88,113" value="113" />
+			<entry class="" argb="255,147,92,122" value="114" />
+			<entry class="" argb="255,143,96,132" value="115" />
+			<entry class="" argb="255,139,100,142" value="116" />
+			<entry class="" argb="255,135,104,153" value="117" />
+			<entry class="" argb="255,131,108,164" value="118" />
+			<entry class="" argb="255,127,112,175" value="119" />
+			<entry class="" argb="255,123,116,186" value="120" />
+			<entry class="" argb="255,119,120,198" value="121" />
+			<entry class="" argb="255,114,124,210" value="122" />
+			<entry class="" argb="255,110,128,222" value="123" />
+			<entry class="" argb="255,105,132,234" value="124" />
+			<entry class="" argb="255,100,136,246" value="125" />
+			<entry class="" argb="255,96,140,251" value="126" />
+			<entry class="" argb="255,91,144,239" value="127" />
+			<entry class="" argb="255,86,148,226" value="128" />
+			<entry class="" argb="255,82,151,214" value="129" />
+			<entry class="" argb="255,77,154,202" value="130" />
+			<entry class="" argb="255,73,158,189" value="131" />
+			<entry class="" argb="255,68,161,177" value="132" />
+			<entry class="" argb="255,63,164,165" value="133" />
+			<entry class="" argb="255,59,166,153" value="134" />
+			<entry class="" argb="255,54,169,141" value="135" />
+			<entry class="" argb="255,50,171,129" value="136" />
+			<entry class="" argb="255,46,173,118" value="137" />
+			<entry class="" argb="255,42,175,107" value="138" />
+			<entry class="" argb="255,38,176,96" value="139" />
+			<entry class="" argb="255,34,178,85" value="140" />
+			<entry class="" argb="255,30,179,75" value="141" />
+			<entry class="" argb="255,26,180,65" value="142" />
+			<entry class="" argb="255,23,180,56" value="143" />
+			<entry class="" argb="255,19,180,47" value="144" />
+			<entry class="" argb="255,16,180,38" value="145" />
+			<entry class="" argb="255,13,180,30" value="146" />
+			<entry class="" argb="255,13,179,22" value="147" />
+			<entry class="" argb="255,8,179,15" value="148" />
+			<entry class="" argb="255,5,178,9" value="149" />
+			<entry class="" argb="255,3,176,2" value="150" />
+			<entry class="" argb="255,1,175,2" value="151" />
+			<entry class="" argb="255,0,173,7" value="152" />
+			<entry class="" argb="255,2,171,12" value="153" />
+			<entry class="" argb="255,3,169,16" value="154" />
+			<entry class="" argb="255,5,166,19" value="155" />
+			<entry class="" argb="255,6,164,22" value="156" />
+			<entry class="" argb="255,6,161,24" value="157" />
+			<entry class="" argb="255,7,158,25" value="158" />
+			<entry class="" argb="255,7,155,26" value="159" />
+			<entry class="" argb="255,8,152,27" value="160" />
+			<entry class="" argb="255,7,148,26" value="161" />
+			<entry class="" argb="255,7,145,25" value="162" />
+			<entry class="" argb="255,6,141,24" value="163" />
+			<entry class="" argb="255,6,138,22" value="164" />
+			<entry class="" argb="255,5,134,19" value="165" />
+			<entry class="" argb="255,3,131,16" value="166" />
+			<entry class="" argb="255,2,127,12" value="167" />
+			<entry class="" argb="255,0,124,7" value="168" />
+			<entry class="" argb="255,1,120,2" value="169" />
+			<entry class="" argb="255,3,117,2" value="170" />
+			<entry class="" argb="255,5,113,9" value="171" />
+			<entry class="" argb="255,8,110,15" value="172" />
+			<entry class="" argb="255,13,107,22" value="173" />
+			<entry class="" argb="255,13,104,30" value="174" />
+			<entry class="" argb="255,16,101,38" value="175" />
+			<entry class="" argb="255,19,99,47" value="176" />
+			<entry class="" argb="255,23,97,56" value="177" />
+			<entry class="" argb="255,26,95,65" value="178" />
+			<entry class="" argb="255,30,93,75" value="179" />
+			<entry class="" argb="255,34,91,85" value="180" />
+			<entry class="" argb="255,38,90,96" value="181" />
+			<entry class="" argb="255,42,89,107" value="182" />
+			<entry class="" argb="255,46,88,118" value="183" />
+			<entry class="" argb="255,50,88,129" value="184" />
+			<entry class="" argb="255,54,88,141" value="185" />
+			<entry class="" argb="255,59,88,153" value="186" />
+			<entry class="" argb="255,63,88,165" value="187" />
+			<entry class="" argb="255,68,89,177" value="188" />
+			<entry class="" argb="255,73,91,189" value="189" />
+			<entry class="" argb="255,77,92,202" value="190" />
+			<entry class="" argb="255,82,94,214" value="191" />
+			<entry class="" argb="255,87,96,227" value="192" />
+			<entry class="" argb="255,91,99,239" value="193" />
+			<entry class="" argb="255,96,102,251" value="194" />
+			<entry class="" argb="255,100,105,246" value="195" />
+			<entry class="" argb="255,105,109,234" value="196" />
+			<entry class="" argb="255,110,113,222" value="197" />
+			<entry class="" argb="255,114,117,210" value="198" />
+			<entry class="" argb="255,119,122,198" value="199" />
+			<entry class="" argb="255,123,127,186" value="200" />
+			<entry class="" argb="255,127,132,175" value="201" />
+			<entry class="" argb="255,131,137,164" value="202" />
+			<entry class="" argb="255,135,142,153" value="203" />
+			<entry class="" argb="255,139,148,142" value="204" />
+			<entry class="" argb="255,143,154,132" value="205" />
+			<entry class="" argb="255,147,160,122" value="206" />
+			<entry class="" argb="255,150,166,113" value="207" />
+			<entry class="" argb="255,154,173,104" value="208" />
+			<entry class="" argb="255,157,179,95" value="209" />
+			<entry class="" argb="255,160,186,87" value="210" />
+			<entry class="" argb="255,163,192,79" value="211" />
+			<entry class="" argb="255,165,199,72" value="212" />
+			<entry class="" argb="255,168,205,66" value="213" />
+			<entry class="" argb="255,170,212,59" value="214" />
+			<entry class="" argb="255,172,218,54" value="215" />
+			<entry class="" argb="255,174,225,49" value="216" />
+			<entry class="" argb="255,176,231,44" value="217" />
+			<entry class="" argb="255,177,237,40" value="218" />
+			<entry class="" argb="255,179,243,37" value="219" />
+			<entry class="" argb="255,180,248,34" value="220" />
+			<entry class="" argb="255,180,254,32" value="221" />
+			<entry class="" argb="255,181,251,31" value="222" />
+			<entry class="" argb="255,181,246,30" value="223" />
+			<entry class="" argb="255,182,241,29" value="224" />
+			<entry class="" argb="255,181,237,30" value="225" />
+			<entry class="" argb="255,181,233,31" value="226" />
+			<entry class="" argb="255,180,229,32" value="227" />
+			<entry class="" argb="255,180,226,34" value="228" />
+			<entry class="" argb="255,179,223,37" value="229" />
+			<entry class="" argb="255,177,220,40" value="230" />
+			<entry class="" argb="255,176,218,44" value="231" />
+			<entry class="" argb="255,174,216,49" value="232" />
+			<entry class="" argb="255,172,215,54" value="233" />
+			<entry class="" argb="255,170,214,59" value="234" />
+			<entry class="" argb="255,168,213,66" value="235" />
+			<entry class="" argb="255,165,213,72" value="236" />
+			<entry class="" argb="255,163,214,79" value="237" />
+			<entry class="" argb="255,160,214,87" value="238" />
+			<entry class="" argb="255,157,216,95" value="239" />
+			<entry class="" argb="255,154,217,104" value="240" />
+			<entry class="" argb="255,150,219,113" value="241" />
+			<entry class="" argb="255,147,222,122" value="242" />
+			<entry class="" argb="255,143,224,132" value="243" />
+			<entry class="" argb="255,139,228,142" value="244" />
+			<entry class="" argb="255,135,231,153" value="245" />
+			<entry class="" argb="255,131,235,164" value="246" />
+			<entry class="" argb="255,127,239,175" value="247" />
+			<entry class="" argb="255,123,244,186" value="248" />
+			<entry class="" argb="255,119,248,198" value="249" />
+			<entry class="" argb="255,114,253,210" value="250" />
+			<entry class="" argb="255,110,251,222" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,100,240,246" value="253" />
+			<entry class="" argb="255,96,234,251" value="254" />
+			<entry class="" argb="255,96,234,251" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-red-blue" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,36,0" value="1" />
+			<entry class="" argb="255,0,72,0" value="2" />
+			<entry class="" argb="255,0,75,0" value="3" />
+			<entry class="" argb="255,0,79,0" value="4" />
+			<entry class="" argb="255,0,82,0" value="5" />
+			<entry class="" argb="255,0,86,0" value="6" />
+			<entry class="" argb="255,0,90,0" value="7" />
+			<entry class="" argb="255,0,93,0" value="8" />
+			<entry class="" argb="255,0,97,0" value="9" />
+			<entry class="" argb="255,0,100,0" value="10" />
+			<entry class="" argb="255,0,104,0" value="11" />
+			<entry class="" argb="255,0,108,0" value="12" />
+			<entry class="" argb="255,0,117,0" value="13" />
+			<entry class="" argb="255,0,126,0" value="14" />
+			<entry class="" argb="255,0,135,0" value="15" />
+			<entry class="" argb="255,0,144,0" value="16" />
+			<entry class="" argb="255,0,153,0" value="17" />
+			<entry class="" argb="255,0,162,0" value="18" />
+			<entry class="" argb="255,0,171,0" value="19" />
+			<entry class="" argb="255,0,180,0" value="20" />
+			<entry class="" argb="255,0,189,0" value="21" />
+			<entry class="" argb="255,0,198,0" value="22" />
+			<entry class="" argb="255,0,207,0" value="23" />
+			<entry class="" argb="255,0,216,0" value="24" />
+			<entry class="" argb="255,0,225,0" value="25" />
+			<entry class="" argb="255,0,234,0" value="26" />
+			<entry class="" argb="255,0,243,0" value="27" />
+			<entry class="" argb="255,0,252,0" value="28" />
+			<entry class="" argb="255,6,249,0" value="29" />
+			<entry class="" argb="255,12,246,0" value="30" />
+			<entry class="" argb="255,18,243,0" value="31" />
+			<entry class="" argb="255,24,240,0" value="32" />
+			<entry class="" argb="255,30,234,0" value="33" />
+			<entry class="" argb="255,36,228,0" value="34" />
+			<entry class="" argb="255,42,222,0" value="35" />
+			<entry class="" argb="255,48,216,0" value="36" />
+			<entry class="" argb="255,54,210,0" value="37" />
+			<entry class="" argb="255,60,204,0" value="38" />
+			<entry class="" argb="255,66,198,0" value="39" />
+			<entry class="" argb="255,72,192,0" value="40" />
+			<entry class="" argb="255,78,186,0" value="41" />
+			<entry class="" argb="255,84,180,0" value="42" />
+			<entry class="" argb="255,90,174,0" value="43" />
+			<entry class="" argb="255,96,168,0" value="44" />
+			<entry class="" argb="255,102,162,0" value="45" />
+			<entry class="" argb="255,108,156,0" value="46" />
+			<entry class="" argb="255,114,150,0" value="47" />
+			<entry class="" argb="255,120,144,0" value="48" />
+			<entry class="" argb="255,126,138,0" value="49" />
+			<entry class="" argb="255,132,132,0" value="50" />
+			<entry class="" argb="255,138,126,0" value="51" />
+			<entry class="" argb="255,144,120,0" value="52" />
+			<entry class="" argb="255,150,114,0" value="53" />
+			<entry class="" argb="255,156,108,0" value="54" />
+			<entry class="" argb="255,162,102,0" value="55" />
+			<entry class="" argb="255,168,96,0" value="56" />
+			<entry class="" argb="255,174,90,0" value="57" />
+			<entry class="" argb="255,180,84,0" value="58" />
+			<entry class="" argb="255,186,78,0" value="59" />
+			<entry class="" argb="255,192,72,0" value="60" />
+			<entry class="" argb="255,198,66,0" value="61" />
+			<entry class="" argb="255,204,60,0" value="62" />
+			<entry class="" argb="255,210,54,0" value="63" />
+			<entry class="" argb="255,216,48,0" value="64" />
+			<entry class="" argb="255,222,42,0" value="65" />
+			<entry class="" argb="255,228,36,0" value="66" />
+			<entry class="" argb="255,234,30,0" value="67" />
+			<entry class="" argb="255,240,24,0" value="68" />
+			<entry class="" argb="255,243,18,0" value="69" />
+			<entry class="" argb="255,246,12,0" value="70" />
+			<entry class="" argb="255,249,6,0" value="71" />
+			<entry class="" argb="255,252,0,0" value="72" />
+			<entry class="" argb="255,252,0,0" value="73" />
+			<entry class="" argb="255,252,0,0" value="74" />
+			<entry class="" argb="255,252,0,0" value="75" />
+			<entry class="" argb="255,252,0,1" value="76" />
+			<entry class="" argb="255,251,0,3" value="77" />
+			<entry class="" argb="255,250,0,5" value="78" />
+			<entry class="" argb="255,249,0,7" value="79" />
+			<entry class="" argb="255,248,0,9" value="80" />
+			<entry class="" argb="255,248,0,10" value="81" />
+			<entry class="" argb="255,248,0,12" value="82" />
+			<entry class="" argb="255,248,0,14" value="83" />
+			<entry class="" argb="255,248,0,16" value="84" />
+			<entry class="" argb="255,247,0,18" value="85" />
+			<entry class="" argb="255,246,0,20" value="86" />
+			<entry class="" argb="255,245,0,22" value="87" />
+			<entry class="" argb="255,244,0,25" value="88" />
+			<entry class="" argb="255,243,0,27" value="89" />
+			<entry class="" argb="255,242,0,29" value="90" />
+			<entry class="" argb="255,241,0,31" value="91" />
+			<entry class="" argb="255,240,0,34" value="92" />
+			<entry class="" argb="255,240,0,35" value="93" />
+			<entry class="" argb="255,239,0,37" value="94" />
+			<entry class="" argb="255,238,0,39" value="95" />
+			<entry class="" argb="255,237,0,41" value="96" />
+			<entry class="" argb="255,236,0,43" value="97" />
+			<entry class="" argb="255,236,0,45" value="98" />
+			<entry class="" argb="255,236,0,47" value="99" />
+			<entry class="" argb="255,236,0,50" value="100" />
+			<entry class="" argb="255,235,0,52" value="101" />
+			<entry class="" argb="255,234,0,54" value="102" />
+			<entry class="" argb="255,233,0,56" value="103" />
+			<entry class="" argb="255,232,0,59" value="104" />
+			<entry class="" argb="255,231,0,61" value="105" />
+			<entry class="" argb="255,230,0,63" value="106" />
+			<entry class="" argb="255,229,0,65" value="107" />
+			<entry class="" argb="255,228,0,67" value="108" />
+			<entry class="" argb="255,228,0,68" value="109" />
+			<entry class="" argb="255,228,0,70" value="110" />
+			<entry class="" argb="255,228,0,72" value="111" />
+			<entry class="" argb="255,228,0,74" value="112" />
+			<entry class="" argb="255,227,0,76" value="113" />
+			<entry class="" argb="255,226,0,78" value="114" />
+			<entry class="" argb="255,225,0,80" value="115" />
+			<entry class="" argb="255,224,0,83" value="116" />
+			<entry class="" argb="255,223,0,85" value="117" />
+			<entry class="" argb="255,222,0,87" value="118" />
+			<entry class="" argb="255,221,0,89" value="119" />
+			<entry class="" argb="255,220,1,92" value="120" />
+			<entry class="" argb="255,219,1,94" value="121" />
+			<entry class="" argb="255,218,1,96" value="122" />
+			<entry class="" argb="255,217,1,98" value="123" />
+			<entry class="" argb="255,216,0,101" value="124" />
+			<entry class="" argb="255,216,0,102" value="125" />
+			<entry class="" argb="255,216,0,104" value="126" />
+			<entry class="" argb="255,216,0,106" value="127" />
+			<entry class="" argb="255,216,0,108" value="128" />
+			<entry class="" argb="255,215,0,110" value="129" />
+			<entry class="" argb="255,214,0,112" value="130" />
+			<entry class="" argb="255,213,0,114" value="131" />
+			<entry class="" argb="255,212,0,116" value="132" />
+			<entry class="" argb="255,211,0,118" value="133" />
+			<entry class="" argb="255,210,0,120" value="134" />
+			<entry class="" argb="255,209,0,122" value="135" />
+			<entry class="" argb="255,208,0,125" value="136" />
+			<entry class="" argb="255,207,0,127" value="137" />
+			<entry class="" argb="255,206,0,129" value="138" />
+			<entry class="" argb="255,205,0,131" value="139" />
+			<entry class="" argb="255,204,0,134" value="140" />
+			<entry class="" argb="255,204,0,135" value="141" />
+			<entry class="" argb="255,204,0,137" value="142" />
+			<entry class="" argb="255,204,0,139" value="143" />
+			<entry class="" argb="255,204,0,141" value="144" />
+			<entry class="" argb="255,203,0,143" value="145" />
+			<entry class="" argb="255,202,0,145" value="146" />
+			<entry class="" argb="255,201,0,147" value="147" />
+			<entry class="" argb="255,200,0,150" value="148" />
+			<entry class="" argb="255,199,0,152" value="149" />
+			<entry class="" argb="255,198,0,154" value="150" />
+			<entry class="" argb="255,197,0,156" value="151" />
+			<entry class="" argb="255,196,0,159" value="152" />
+			<entry class="" argb="255,196,0,160" value="153" />
+			<entry class="" argb="255,196,0,162" value="154" />
+			<entry class="" argb="255,196,0,163" value="155" />
+			<entry class="" argb="255,196,0,165" value="156" />
+			<entry class="" argb="255,195,0,167" value="157" />
+			<entry class="" argb="255,194,0,169" value="158" />
+			<entry class="" argb="255,193,0,171" value="159" />
+			<entry class="" argb="255,192,0,174" value="160" />
+			<entry class="" argb="255,191,0,176" value="161" />
+			<entry class="" argb="255,190,0,178" value="162" />
+			<entry class="" argb="255,189,0,180" value="163" />
+			<entry class="" argb="255,188,0,183" value="164" />
+			<entry class="" argb="255,187,0,185" value="165" />
+			<entry class="" argb="255,186,0,187" value="166" />
+			<entry class="" argb="255,185,0,189" value="167" />
+			<entry class="" argb="255,184,0,192" value="168" />
+			<entry class="" argb="255,184,0,193" value="169" />
+			<entry class="" argb="255,184,0,195" value="170" />
+			<entry class="" argb="255,184,0,197" value="171" />
+			<entry class="" argb="255,184,0,199" value="172" />
+			<entry class="" argb="255,183,0,201" value="173" />
+			<entry class="" argb="255,182,0,203" value="174" />
+			<entry class="" argb="255,181,0,205" value="175" />
+			<entry class="" argb="255,180,0,208" value="176" />
+			<entry class="" argb="255,179,0,210" value="177" />
+			<entry class="" argb="255,178,0,212" value="178" />
+			<entry class="" argb="255,177,0,214" value="179" />
+			<entry class="" argb="255,176,0,216" value="180" />
+			<entry class="" argb="255,176,0,217" value="181" />
+			<entry class="" argb="255,176,0,219" value="182" />
+			<entry class="" argb="255,176,0,221" value="183" />
+			<entry class="" argb="255,176,0,223" value="184" />
+			<entry class="" argb="255,175,0,225" value="185" />
+			<entry class="" argb="255,174,0,227" value="186" />
+			<entry class="" argb="255,173,0,229" value="187" />
+			<entry class="" argb="255,172,0,232" value="188" />
+			<entry class="" argb="255,171,0,234" value="189" />
+			<entry class="" argb="255,170,0,236" value="190" />
+			<entry class="" argb="255,169,0,238" value="191" />
+			<entry class="" argb="255,168,0,241" value="192" />
+			<entry class="" argb="255,167,0,243" value="193" />
+			<entry class="" argb="255,166,0,245" value="194" />
+			<entry class="" argb="255,165,0,247" value="195" />
+			<entry class="" argb="255,164,0,250" value="196" />
+			<entry class="" argb="255,164,0,251" value="197" />
+			<entry class="" argb="255,164,0,252" value="198" />
+			<entry class="" argb="255,164,0,253" value="199" />
+			<entry class="" argb="255,164,0,255" value="200" />
+			<entry class="" argb="255,163,0,255" value="201" />
+			<entry class="" argb="255,162,0,255" value="202" />
+			<entry class="" argb="255,161,0,255" value="203" />
+			<entry class="" argb="255,160,0,255" value="204" />
+			<entry class="" argb="255,159,0,255" value="205" />
+			<entry class="" argb="255,158,0,255" value="206" />
+			<entry class="" argb="255,157,0,255" value="207" />
+			<entry class="" argb="255,156,0,255" value="208" />
+			<entry class="" argb="255,155,0,255" value="209" />
+			<entry class="" argb="255,154,0,255" value="210" />
+			<entry class="" argb="255,153,0,255" value="211" />
+			<entry class="" argb="255,152,0,255" value="212" />
+			<entry class="" argb="255,152,0,255" value="213" />
+			<entry class="" argb="255,152,0,255" value="214" />
+			<entry class="" argb="255,152,0,255" value="215" />
+			<entry class="" argb="255,152,0,255" value="216" />
+			<entry class="" argb="255,151,0,255" value="217" />
+			<entry class="" argb="255,150,0,255" value="218" />
+			<entry class="" argb="255,149,0,255" value="219" />
+			<entry class="" argb="255,148,0,255" value="220" />
+			<entry class="" argb="255,151,8,255" value="221" />
+			<entry class="" argb="255,154,16,255" value="222" />
+			<entry class="" argb="255,157,24,255" value="223" />
+			<entry class="" argb="255,160,32,255" value="224" />
+			<entry class="" argb="255,163,40,255" value="225" />
+			<entry class="" argb="255,166,48,255" value="226" />
+			<entry class="" argb="255,169,56,255" value="227" />
+			<entry class="" argb="255,172,64,255" value="228" />
+			<entry class="" argb="255,176,72,255" value="229" />
+			<entry class="" argb="255,180,80,255" value="230" />
+			<entry class="" argb="255,184,88,255" value="231" />
+			<entry class="" argb="255,188,96,255" value="232" />
+			<entry class="" argb="255,191,104,255" value="233" />
+			<entry class="" argb="255,194,112,255" value="234" />
+			<entry class="" argb="255,197,120,255" value="235" />
+			<entry class="" argb="255,200,128,255" value="236" />
+			<entry class="" argb="255,203,135,255" value="237" />
+			<entry class="" argb="255,206,142,255" value="238" />
+			<entry class="" argb="255,209,149,255" value="239" />
+			<entry class="" argb="255,212,156,255" value="240" />
+			<entry class="" argb="255,215,164,255" value="241" />
+			<entry class="" argb="255,218,172,255" value="242" />
+			<entry class="" argb="255,221,180,255" value="243" />
+			<entry class="" argb="255,224,188,255" value="244" />
+			<entry class="" argb="255,228,196,255" value="245" />
+			<entry class="" argb="255,232,204,255" value="246" />
+			<entry class="" argb="255,236,212,255" value="247" />
+			<entry class="" argb="255,240,220,255" value="248" />
+			<entry class="" argb="255,243,228,255" value="249" />
+			<entry class="" argb="255,246,236,255" value="250" />
+			<entry class="" argb="255,249,244,255" value="251" />
+			<entry class="" argb="255,252,252,255" value="252" />
+			<entry class="" argb="255,253,253,255" value="253" />
+			<entry class="" argb="255,254,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-white-exponential" interpolate="false">
+		<table>
+			<entry class="" argb="255,1,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,1,1,0" value="2" />
+			<entry class="" argb="255,2,2,0" value="3" />
+			<entry class="" argb="255,2,2,1" value="4" />
+			<entry class="" argb="255,2,3,1" value="5" />
+			<entry class="" argb="255,3,4,1" value="6" />
+			<entry class="" argb="255,3,4,1" value="7" />
+			<entry class="" argb="255,4,5,2" value="8" />
+			<entry class="" argb="255,4,6,2" value="9" />
+			<entry class="" argb="255,4,6,2" value="10" />
+			<entry class="" argb="255,5,7,2" value="11" />
+			<entry class="" argb="255,5,8,3" value="12" />
+			<entry class="" argb="255,5,8,3" value="13" />
+			<entry class="" argb="255,6,9,3" value="14" />
+			<entry class="" argb="255,6,10,3" value="15" />
+			<entry class="" argb="255,7,10,4" value="16" />
+			<entry class="" argb="255,7,11,4" value="17" />
+			<entry class="" argb="255,7,12,4" value="18" />
+			<entry class="" argb="255,8,12,5" value="19" />
+			<entry class="" argb="255,8,13,5" value="20" />
+			<entry class="" argb="255,9,14,5" value="21" />
+			<entry class="" argb="255,9,14,5" value="22" />
+			<entry class="" argb="255,9,15,6" value="23" />
+			<entry class="" argb="255,10,16,6" value="24" />
+			<entry class="" argb="255,10,16,6" value="25" />
+			<entry class="" argb="255,10,17,6" value="26" />
+			<entry class="" argb="255,11,18,7" value="27" />
+			<entry class="" argb="255,11,18,7" value="28" />
+			<entry class="" argb="255,12,19,7" value="29" />
+			<entry class="" argb="255,12,20,7" value="30" />
+			<entry class="" argb="255,12,20,8" value="31" />
+			<entry class="" argb="255,13,21,8" value="32" />
+			<entry class="" argb="255,13,22,8" value="33" />
+			<entry class="" argb="255,13,22,8" value="34" />
+			<entry class="" argb="255,14,23,9" value="35" />
+			<entry class="" argb="255,14,24,9" value="36" />
+			<entry class="" argb="255,15,24,9" value="37" />
+			<entry class="" argb="255,15,25,10" value="38" />
+			<entry class="" argb="255,15,26,10" value="39" />
+			<entry class="" argb="255,16,26,10" value="40" />
+			<entry class="" argb="255,16,27,10" value="41" />
+			<entry class="" argb="255,17,28,11" value="42" />
+			<entry class="" argb="255,17,28,11" value="43" />
+			<entry class="" argb="255,17,29,11" value="44" />
+			<entry class="" argb="255,18,30,11" value="45" />
+			<entry class="" argb="255,18,30,12" value="46" />
+			<entry class="" argb="255,18,31,12" value="47" />
+			<entry class="" argb="255,19,32,12" value="48" />
+			<entry class="" argb="255,19,32,12" value="49" />
+			<entry class="" argb="255,20,33,13" value="50" />
+			<entry class="" argb="255,20,34,13" value="51" />
+			<entry class="" argb="255,20,34,13" value="52" />
+			<entry class="" argb="255,21,35,13" value="53" />
+			<entry class="" argb="255,21,36,14" value="54" />
+			<entry class="" argb="255,21,36,14" value="55" />
+			<entry class="" argb="255,22,37,14" value="56" />
+			<entry class="" argb="255,22,38,15" value="57" />
+			<entry class="" argb="255,23,38,15" value="58" />
+			<entry class="" argb="255,23,39,15" value="59" />
+			<entry class="" argb="255,23,40,15" value="60" />
+			<entry class="" argb="255,24,40,16" value="61" />
+			<entry class="" argb="255,24,41,16" value="62" />
+			<entry class="" argb="255,25,42,16" value="63" />
+			<entry class="" argb="255,25,42,16" value="64" />
+			<entry class="" argb="255,25,43,17" value="65" />
+			<entry class="" argb="255,26,44,17" value="66" />
+			<entry class="" argb="255,26,44,17" value="67" />
+			<entry class="" argb="255,26,45,17" value="68" />
+			<entry class="" argb="255,27,46,18" value="69" />
+			<entry class="" argb="255,27,46,18" value="70" />
+			<entry class="" argb="255,28,47,18" value="71" />
+			<entry class="" argb="255,28,48,18" value="72" />
+			<entry class="" argb="255,28,48,19" value="73" />
+			<entry class="" argb="255,29,49,19" value="74" />
+			<entry class="" argb="255,29,50,19" value="75" />
+			<entry class="" argb="255,29,50,20" value="76" />
+			<entry class="" argb="255,30,51,20" value="77" />
+			<entry class="" argb="255,30,52,20" value="78" />
+			<entry class="" argb="255,31,52,20" value="79" />
+			<entry class="" argb="255,31,53,21" value="80" />
+			<entry class="" argb="255,31,54,21" value="81" />
+			<entry class="" argb="255,32,54,21" value="82" />
+			<entry class="" argb="255,32,55,21" value="83" />
+			<entry class="" argb="255,33,56,22" value="84" />
+			<entry class="" argb="255,33,56,22" value="85" />
+			<entry class="" argb="255,33,57,22" value="86" />
+			<entry class="" argb="255,34,58,22" value="87" />
+			<entry class="" argb="255,34,58,23" value="88" />
+			<entry class="" argb="255,34,59,23" value="89" />
+			<entry class="" argb="255,35,60,23" value="90" />
+			<entry class="" argb="255,35,60,23" value="91" />
+			<entry class="" argb="255,36,61,24" value="92" />
+			<entry class="" argb="255,36,62,24" value="93" />
+			<entry class="" argb="255,36,62,24" value="94" />
+			<entry class="" argb="255,37,63,25" value="95" />
+			<entry class="" argb="255,37,64,25" value="96" />
+			<entry class="" argb="255,37,64,25" value="97" />
+			<entry class="" argb="255,38,65,25" value="98" />
+			<entry class="" argb="255,38,66,26" value="99" />
+			<entry class="" argb="255,39,66,26" value="100" />
+			<entry class="" argb="255,39,67,26" value="101" />
+			<entry class="" argb="255,39,68,26" value="102" />
+			<entry class="" argb="255,40,68,27" value="103" />
+			<entry class="" argb="255,40,69,27" value="104" />
+			<entry class="" argb="255,41,70,27" value="105" />
+			<entry class="" argb="255,41,70,27" value="106" />
+			<entry class="" argb="255,41,71,28" value="107" />
+			<entry class="" argb="255,42,72,28" value="108" />
+			<entry class="" argb="255,42,72,28" value="109" />
+			<entry class="" argb="255,42,73,28" value="110" />
+			<entry class="" argb="255,43,74,29" value="111" />
+			<entry class="" argb="255,43,74,29" value="112" />
+			<entry class="" argb="255,44,75,29" value="113" />
+			<entry class="" argb="255,44,76,30" value="114" />
+			<entry class="" argb="255,44,76,30" value="115" />
+			<entry class="" argb="255,45,77,30" value="116" />
+			<entry class="" argb="255,45,78,30" value="117" />
+			<entry class="" argb="255,45,78,31" value="118" />
+			<entry class="" argb="255,46,79,31" value="119" />
+			<entry class="" argb="255,46,80,31" value="120" />
+			<entry class="" argb="255,47,80,31" value="121" />
+			<entry class="" argb="255,47,81,32" value="122" />
+			<entry class="" argb="255,47,82,32" value="123" />
+			<entry class="" argb="255,48,82,32" value="124" />
+			<entry class="" argb="255,48,83,32" value="125" />
+			<entry class="" argb="255,49,84,33" value="126" />
+			<entry class="" argb="255,49,84,33" value="127" />
+			<entry class="" argb="255,49,85,33" value="128" />
+			<entry class="" argb="255,50,86,33" value="129" />
+			<entry class="" argb="255,50,87,34" value="130" />
+			<entry class="" argb="255,50,88,34" value="131" />
+			<entry class="" argb="255,51,90,34" value="132" />
+			<entry class="" argb="255,51,91,35" value="133" />
+			<entry class="" argb="255,52,92,35" value="134" />
+			<entry class="" argb="255,52,94,35" value="135" />
+			<entry class="" argb="255,52,95,35" value="136" />
+			<entry class="" argb="255,54,96,36" value="137" />
+			<entry class="" argb="255,54,98,36" value="138" />
+			<entry class="" argb="255,55,99,36" value="139" />
+			<entry class="" argb="255,56,100,36" value="140" />
+			<entry class="" argb="255,56,102,37" value="141" />
+			<entry class="" argb="255,57,103,37" value="142" />
+			<entry class="" argb="255,58,104,37" value="143" />
+			<entry class="" argb="255,58,106,37" value="144" />
+			<entry class="" argb="255,59,107,38" value="145" />
+			<entry class="" argb="255,60,108,38" value="146" />
+			<entry class="" argb="255,60,110,38" value="147" />
+			<entry class="" argb="255,61,111,38" value="148" />
+			<entry class="" argb="255,62,112,39" value="149" />
+			<entry class="" argb="255,62,114,39" value="150" />
+			<entry class="" argb="255,63,115,39" value="151" />
+			<entry class="" argb="255,64,116,40" value="152" />
+			<entry class="" argb="255,64,118,40" value="153" />
+			<entry class="" argb="255,66,119,40" value="154" />
+			<entry class="" argb="255,68,120,40" value="155" />
+			<entry class="" argb="255,70,122,41" value="156" />
+			<entry class="" argb="255,71,123,41" value="157" />
+			<entry class="" argb="255,73,124,41" value="158" />
+			<entry class="" argb="255,75,126,41" value="159" />
+			<entry class="" argb="255,77,127,42" value="160" />
+			<entry class="" argb="255,79,128,42" value="161" />
+			<entry class="" argb="255,81,130,42" value="162" />
+			<entry class="" argb="255,83,131,42" value="163" />
+			<entry class="" argb="255,85,132,43" value="164" />
+			<entry class="" argb="255,86,134,43" value="165" />
+			<entry class="" argb="255,88,135,43" value="166" />
+			<entry class="" argb="255,90,136,43" value="167" />
+			<entry class="" argb="255,92,138,44" value="168" />
+			<entry class="" argb="255,94,139,44" value="169" />
+			<entry class="" argb="255,96,140,44" value="170" />
+			<entry class="" argb="255,98,142,45" value="171" />
+			<entry class="" argb="255,99,143,45" value="172" />
+			<entry class="" argb="255,101,145,45" value="173" />
+			<entry class="" argb="255,103,146,45" value="174" />
+			<entry class="" argb="255,105,147,46" value="175" />
+			<entry class="" argb="255,107,149,46" value="176" />
+			<entry class="" argb="255,109,150,46" value="177" />
+			<entry class="" argb="255,111,151,46" value="178" />
+			<entry class="" argb="255,113,153,47" value="179" />
+			<entry class="" argb="255,114,154,47" value="180" />
+			<entry class="" argb="255,116,155,47" value="181" />
+			<entry class="" argb="255,118,157,47" value="182" />
+			<entry class="" argb="255,120,158,48" value="183" />
+			<entry class="" argb="255,122,159,47" value="184" />
+			<entry class="" argb="255,124,161,49" value="185" />
+			<entry class="" argb="255,126,162,52" value="186" />
+			<entry class="" argb="255,127,163,55" value="187" />
+			<entry class="" argb="255,129,165,58" value="188" />
+			<entry class="" argb="255,131,166,61" value="189" />
+			<entry class="" argb="255,133,167,64" value="190" />
+			<entry class="" argb="255,135,169,67" value="191" />
+			<entry class="" argb="255,137,170,70" value="192" />
+			<entry class="" argb="255,139,171,73" value="193" />
+			<entry class="" argb="255,141,173,76" value="194" />
+			<entry class="" argb="255,142,174,79" value="195" />
+			<entry class="" argb="255,144,175,82" value="196" />
+			<entry class="" argb="255,146,177,85" value="197" />
+			<entry class="" argb="255,148,178,88" value="198" />
+			<entry class="" argb="255,150,179,90" value="199" />
+			<entry class="" argb="255,152,181,93" value="200" />
+			<entry class="" argb="255,154,182,96" value="201" />
+			<entry class="" argb="255,156,183,99" value="202" />
+			<entry class="" argb="255,157,185,102" value="203" />
+			<entry class="" argb="255,159,186,105" value="204" />
+			<entry class="" argb="255,161,187,108" value="205" />
+			<entry class="" argb="255,163,189,111" value="206" />
+			<entry class="" argb="255,165,190,114" value="207" />
+			<entry class="" argb="255,167,191,117" value="208" />
+			<entry class="" argb="255,169,193,120" value="209" />
+			<entry class="" argb="255,170,194,123" value="210" />
+			<entry class="" argb="255,172,195,126" value="211" />
+			<entry class="" argb="255,174,197,129" value="212" />
+			<entry class="" argb="255,176,198,131" value="213" />
+			<entry class="" argb="255,178,200,134" value="214" />
+			<entry class="" argb="255,180,201,137" value="215" />
+			<entry class="" argb="255,182,202,140" value="216" />
+			<entry class="" argb="255,184,204,143" value="217" />
+			<entry class="" argb="255,185,205,146" value="218" />
+			<entry class="" argb="255,187,206,149" value="219" />
+			<entry class="" argb="255,189,208,152" value="220" />
+			<entry class="" argb="255,191,209,155" value="221" />
+			<entry class="" argb="255,193,210,158" value="222" />
+			<entry class="" argb="255,195,212,161" value="223" />
+			<entry class="" argb="255,197,213,164" value="224" />
+			<entry class="" argb="255,198,214,167" value="225" />
+			<entry class="" argb="255,200,216,170" value="226" />
+			<entry class="" argb="255,202,217,172" value="227" />
+			<entry class="" argb="255,204,218,175" value="228" />
+			<entry class="" argb="255,206,220,178" value="229" />
+			<entry class="" argb="255,208,221,181" value="230" />
+			<entry class="" argb="255,210,222,184" value="231" />
+			<entry class="" argb="255,212,224,187" value="232" />
+			<entry class="" argb="255,213,225,190" value="233" />
+			<entry class="" argb="255,215,226,193" value="234" />
+			<entry class="" argb="255,217,228,196" value="235" />
+			<entry class="" argb="255,219,229,199" value="236" />
+			<entry class="" argb="255,221,230,202" value="237" />
+			<entry class="" argb="255,223,232,205" value="238" />
+			<entry class="" argb="255,225,233,208" value="239" />
+			<entry class="" argb="255,226,234,211" value="240" />
+			<entry class="" argb="255,228,236,213" value="241" />
+			<entry class="" argb="255,230,237,216" value="242" />
+			<entry class="" argb="255,232,238,219" value="243" />
+			<entry class="" argb="255,234,240,222" value="244" />
+			<entry class="" argb="255,236,241,225" value="245" />
+			<entry class="" argb="255,238,242,228" value="246" />
+			<entry class="" argb="255,240,244,231" value="247" />
+			<entry class="" argb="255,241,245,234" value="248" />
+			<entry class="" argb="255,243,246,237" value="249" />
+			<entry class="" argb="255,245,248,240" value="250" />
+			<entry class="" argb="255,247,249,243" value="251" />
+			<entry class="" argb="255,249,250,246" value="252" />
+			<entry class="" argb="255,251,252,249" value="253" />
+			<entry class="" argb="255,253,253,252" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="hardcandy" interpolate="false">
+		<table>
+			<entry class="" argb="255,4,51,116" value="0" />
+			<entry class="" argb="255,4,51,116" value="1" />
+			<entry class="" argb="255,5,58,105" value="2" />
+			<entry class="" argb="255,7,65,94" value="3" />
+			<entry class="" argb="255,9,72,84" value="4" />
+			<entry class="" argb="255,11,79,74" value="5" />
+			<entry class="" argb="255,12,85,64" value="6" />
+			<entry class="" argb="255,14,92,55" value="7" />
+			<entry class="" argb="255,15,99,46" value="8" />
+			<entry class="" argb="255,16,105,38" value="9" />
+			<entry class="" argb="255,17,111,30" value="10" />
+			<entry class="" argb="255,17,117,24" value="11" />
+			<entry class="" argb="255,18,124,18" value="12" />
+			<entry class="" argb="255,18,129,12" value="13" />
+			<entry class="" argb="255,18,135,8" value="14" />
+			<entry class="" argb="255,17,141,5" value="15" />
+			<entry class="" argb="255,16,146,2" value="16" />
+			<entry class="" argb="255,15,152,0" value="17" />
+			<entry class="" argb="255,14,157,0" value="18" />
+			<entry class="" argb="255,13,162,0" value="19" />
+			<entry class="" argb="255,11,167,1" value="20" />
+			<entry class="" argb="255,13,171,3" value="21" />
+			<entry class="" argb="255,8,176,6" value="22" />
+			<entry class="" argb="255,5,180,13" value="23" />
+			<entry class="" argb="255,3,184,14" value="24" />
+			<entry class="" argb="255,1,188,20" value="25" />
+			<entry class="" argb="255,0,191,26" value="26" />
+			<entry class="" argb="255,3,195,33" value="27" />
+			<entry class="" argb="255,5,198,41" value="28" />
+			<entry class="" argb="255,7,201,50" value="29" />
+			<entry class="" argb="255,13,203,59" value="30" />
+			<entry class="" argb="255,12,206,68" value="31" />
+			<entry class="" argb="255,13,208,78" value="32" />
+			<entry class="" argb="255,15,210,88" value="33" />
+			<entry class="" argb="255,17,212,99" value="34" />
+			<entry class="" argb="255,18,213,109" value="35" />
+			<entry class="" argb="255,19,214,120" value="36" />
+			<entry class="" argb="255,19,215,131" value="37" />
+			<entry class="" argb="255,19,216,142" value="38" />
+			<entry class="" argb="255,19,216,153" value="39" />
+			<entry class="" argb="255,19,216,163" value="40" />
+			<entry class="" argb="255,18,216,174" value="41" />
+			<entry class="" argb="255,16,216,184" value="42" />
+			<entry class="" argb="255,14,215,193" value="43" />
+			<entry class="" argb="255,12,215,202" value="44" />
+			<entry class="" argb="255,9,213,211" value="45" />
+			<entry class="" argb="255,5,212,218" value="46" />
+			<entry class="" argb="255,2,210,226" value="47" />
+			<entry class="" argb="255,2,209,232" value="48" />
+			<entry class="" argb="255,6,206,238" value="49" />
+			<entry class="" argb="255,11,204,243" value="50" />
+			<entry class="" argb="255,17,201,247" value="51" />
+			<entry class="" argb="255,23,199,250" value="52" />
+			<entry class="" argb="255,29,195,252" value="53" />
+			<entry class="" argb="255,36,192,253" value="54" />
+			<entry class="" argb="255,42,189,253" value="55" />
+			<entry class="" argb="255,49,185,253" value="56" />
+			<entry class="" argb="255,56,181,251" value="57" />
+			<entry class="" argb="255,64,177,249" value="58" />
+			<entry class="" argb="255,71,172,246" value="59" />
+			<entry class="" argb="255,78,168,241" value="60" />
+			<entry class="" argb="255,85,163,236" value="61" />
+			<entry class="" argb="255,93,158,230" value="62" />
+			<entry class="" argb="255,100,153,224" value="63" />
+			<entry class="" argb="255,106,148,216" value="64" />
+			<entry class="" argb="255,113,142,208" value="65" />
+			<entry class="" argb="255,119,137,200" value="66" />
+			<entry class="" argb="255,125,131,190" value="67" />
+			<entry class="" argb="255,130,125,181" value="68" />
+			<entry class="" argb="255,135,119,171" value="69" />
+			<entry class="" argb="255,139,113,160" value="70" />
+			<entry class="" argb="255,143,106,150" value="71" />
+			<entry class="" argb="255,146,100,139" value="72" />
+			<entry class="" argb="255,149,93,128" value="73" />
+			<entry class="" argb="255,150,87,117" value="74" />
+			<entry class="" argb="255,151,80,106" value="75" />
+			<entry class="" argb="255,152,73,96" value="76" />
+			<entry class="" argb="255,151,67,85" value="77" />
+			<entry class="" argb="255,150,60,75" value="78" />
+			<entry class="" argb="255,148,53,65" value="79" />
+			<entry class="" argb="255,145,46,56" value="80" />
+			<entry class="" argb="255,142,39,47" value="81" />
+			<entry class="" argb="255,138,32,39" value="82" />
+			<entry class="" argb="255,133,25,31" value="83" />
+			<entry class="" argb="255,127,18,24" value="84" />
+			<entry class="" argb="255,121,11,18" value="85" />
+			<entry class="" argb="255,114,4,13" value="86" />
+			<entry class="" argb="255,107,2,9" value="87" />
+			<entry class="" argb="255,99,9,5" value="88" />
+			<entry class="" argb="255,90,16,2" value="89" />
+			<entry class="" argb="255,82,22,0" value="90" />
+			<entry class="" argb="255,73,29,0" value="91" />
+			<entry class="" argb="255,63,36,0" value="92" />
+			<entry class="" argb="255,54,42,1" value="93" />
+			<entry class="" argb="255,44,49,3" value="94" />
+			<entry class="" argb="255,35,55,5" value="95" />
+			<entry class="" argb="255,25,61,9" value="96" />
+			<entry class="" argb="255,16,68,14" value="97" />
+			<entry class="" argb="255,6,74,19" value="98" />
+			<entry class="" argb="255,1,79,25" value="99" />
+			<entry class="" argb="255,13,85,32" value="100" />
+			<entry class="" argb="255,18,91,40" value="101" />
+			<entry class="" argb="255,25,96,48" value="102" />
+			<entry class="" argb="255,32,101,57" value="103" />
+			<entry class="" argb="255,38,106,67" value="104" />
+			<entry class="" argb="255,44,111,76" value="105" />
+			<entry class="" argb="255,48,116,87" value="106" />
+			<entry class="" argb="255,52,120,97" value="107" />
+			<entry class="" argb="255,55,125,108" value="108" />
+			<entry class="" argb="255,56,129,119" value="109" />
+			<entry class="" argb="255,57,133,130" value="110" />
+			<entry class="" argb="255,57,136,140" value="111" />
+			<entry class="" argb="255,56,140,151" value="112" />
+			<entry class="" argb="255,53,143,162" value="113" />
+			<entry class="" argb="255,50,146,172" value="114" />
+			<entry class="" argb="255,45,149,182" value="115" />
+			<entry class="" argb="255,39,151,192" value="116" />
+			<entry class="" argb="255,33,153,201" value="117" />
+			<entry class="" argb="255,25,155,209" value="118" />
+			<entry class="" argb="255,16,157,217" value="119" />
+			<entry class="" argb="255,6,159,225" value="120" />
+			<entry class="" argb="255,3,160,231" value="121" />
+			<entry class="" argb="255,15,161,237" value="122" />
+			<entry class="" argb="255,27,162,242" value="123" />
+			<entry class="" argb="255,40,162,246" value="124" />
+			<entry class="" argb="255,53,162,249" value="125" />
+			<entry class="" argb="255,67,162,252" value="126" />
+			<entry class="" argb="255,81,162,253" value="127" />
+			<entry class="" argb="255,96,162,254" value="128" />
+			<entry class="" argb="255,111,161,253" value="129" />
+			<entry class="" argb="255,126,160,252" value="130" />
+			<entry class="" argb="255,141,159,249" value="131" />
+			<entry class="" argb="255,156,157,246" value="132" />
+			<entry class="" argb="255,170,155,242" value="133" />
+			<entry class="" argb="255,185,153,237" value="134" />
+			<entry class="" argb="255,199,151,231" value="135" />
+			<entry class="" argb="255,212,148,225" value="136" />
+			<entry class="" argb="255,225,146,217" value="137" />
+			<entry class="" argb="255,237,143,209" value="138" />
+			<entry class="" argb="255,248,139,201" value="139" />
+			<entry class="" argb="255,252,136,192" value="140" />
+			<entry class="" argb="255,242,132,182" value="141" />
+			<entry class="" argb="255,234,128,172" value="142" />
+			<entry class="" argb="255,227,124,162" value="143" />
+			<entry class="" argb="255,222,120,151" value="144" />
+			<entry class="" argb="255,217,115,140" value="145" />
+			<entry class="" argb="255,214,111,130" value="146" />
+			<entry class="" argb="255,212,106,119" value="147" />
+			<entry class="" argb="255,212,101,108" value="148" />
+			<entry class="" argb="255,213,95,97" value="149" />
+			<entry class="" argb="255,216,90,87" value="150" />
+			<entry class="" argb="255,220,84,76" value="151" />
+			<entry class="" argb="255,225,79,67" value="152" />
+			<entry class="" argb="255,232,73,57" value="153" />
+			<entry class="" argb="255,240,67,48" value="154" />
+			<entry class="" argb="255,249,61,40" value="155" />
+			<entry class="" argb="255,251,54,32" value="156" />
+			<entry class="" argb="255,239,48,25" value="157" />
+			<entry class="" argb="255,226,42,19" value="158" />
+			<entry class="" argb="255,213,35,14" value="159" />
+			<entry class="" argb="255,198,28,9" value="160" />
+			<entry class="" argb="255,183,22,5" value="161" />
+			<entry class="" argb="255,167,15,3" value="162" />
+			<entry class="" argb="255,150,8,1" value="163" />
+			<entry class="" argb="255,133,1,0" value="164" />
+			<entry class="" argb="255,116,5,0" value="165" />
+			<entry class="" argb="255,98,12,0" value="166" />
+			<entry class="" argb="255,81,19,2" value="167" />
+			<entry class="" argb="255,64,26,5" value="168" />
+			<entry class="" argb="255,47,33,9" value="169" />
+			<entry class="" argb="255,30,40,13" value="170" />
+			<entry class="" argb="255,14,47,18" value="171" />
+			<entry class="" argb="255,1,54,24" value="172" />
+			<entry class="" argb="255,15,61,31" value="173" />
+			<entry class="" argb="255,29,67,39" value="174" />
+			<entry class="" argb="255,42,74,47" value="175" />
+			<entry class="" argb="255,54,81,56" value="176" />
+			<entry class="" argb="255,64,88,65" value="177" />
+			<entry class="" argb="255,73,94,75" value="178" />
+			<entry class="" argb="255,81,101,85" value="179" />
+			<entry class="" argb="255,87,107,96" value="180" />
+			<entry class="" argb="255,91,113,106" value="181" />
+			<entry class="" argb="255,94,120,117" value="182" />
+			<entry class="" argb="255,95,126,128" value="183" />
+			<entry class="" argb="255,95,131,139" value="184" />
+			<entry class="" argb="255,92,137,150" value="185" />
+			<entry class="" argb="255,88,143,160" value="186" />
+			<entry class="" argb="255,82,148,171" value="187" />
+			<entry class="" argb="255,75,154,181" value="188" />
+			<entry class="" argb="255,66,159,190" value="189" />
+			<entry class="" argb="255,55,164,200" value="190" />
+			<entry class="" argb="255,42,168,208" value="191" />
+			<entry class="" argb="255,28,173,216" value="192" />
+			<entry class="" argb="255,13,177,224" value="193" />
+			<entry class="" argb="255,3,181,230" value="194" />
+			<entry class="" argb="255,21,185,236" value="195" />
+			<entry class="" argb="255,40,189,241" value="196" />
+			<entry class="" argb="255,60,193,246" value="197" />
+			<entry class="" argb="255,81,196,249" value="198" />
+			<entry class="" argb="255,103,199,251" value="199" />
+			<entry class="" argb="255,125,202,253" value="200" />
+			<entry class="" argb="255,147,204,253" value="201" />
+			<entry class="" argb="255,170,207,253" value="202" />
+			<entry class="" argb="255,193,209,252" value="203" />
+			<entry class="" argb="255,216,211,250" value="204" />
+			<entry class="" argb="255,239,212,247" value="205" />
+			<entry class="" argb="255,249,214,243" value="206" />
+			<entry class="" argb="255,228,215,238" value="207" />
+			<entry class="" argb="255,207,216,232" value="208" />
+			<entry class="" argb="255,187,216,226" value="209" />
+			<entry class="" argb="255,168,216,218" value="210" />
+			<entry class="" argb="255,151,216,211" value="211" />
+			<entry class="" argb="255,134,216,202" value="212" />
+			<entry class="" argb="255,119,216,193" value="213" />
+			<entry class="" argb="255,106,215,184" value="214" />
+			<entry class="" argb="255,95,214,174" value="215" />
+			<entry class="" argb="255,85,213,163" value="216" />
+			<entry class="" argb="255,77,212,153" value="217" />
+			<entry class="" argb="255,71,210,142" value="218" />
+			<entry class="" argb="255,67,208,131" value="219" />
+			<entry class="" argb="255,65,206,120" value="220" />
+			<entry class="" argb="255,66,203,109" value="221" />
+			<entry class="" argb="255,68,201,99" value="222" />
+			<entry class="" argb="255,72,198,88" value="223" />
+			<entry class="" argb="255,79,194,78" value="224" />
+			<entry class="" argb="255,87,191,68" value="225" />
+			<entry class="" argb="255,98,187,59" value="226" />
+			<entry class="" argb="255,110,184,50" value="227" />
+			<entry class="" argb="255,124,180,41" value="228" />
+			<entry class="" argb="255,140,175,33" value="229" />
+			<entry class="" argb="255,158,171,26" value="230" />
+			<entry class="" argb="255,177,166,20" value="231" />
+			<entry class="" argb="255,197,161,14" value="232" />
+			<entry class="" argb="255,219,156,13" value="233" />
+			<entry class="" argb="255,241,151,6" value="234" />
+			<entry class="" argb="255,245,146,3" value="235" />
+			<entry class="" argb="255,221,140,1" value="236" />
+			<entry class="" argb="255,196,135,0" value="237" />
+			<entry class="" argb="255,171,129,0" value="238" />
+			<entry class="" argb="255,145,123,0" value="239" />
+			<entry class="" argb="255,120,117,2" value="240" />
+			<entry class="" argb="255,95,111,5" value="241" />
+			<entry class="" argb="255,70,104,8" value="242" />
+			<entry class="" argb="255,46,98,12" value="243" />
+			<entry class="" argb="255,23,91,18" value="244" />
+			<entry class="" argb="255,1,85,24" value="245" />
+			<entry class="" argb="255,19,78,30" value="246" />
+			<entry class="" argb="255,39,71,38" value="247" />
+			<entry class="" argb="255,57,64,46" value="248" />
+			<entry class="" argb="255,74,57,55" value="249" />
+			<entry class="" argb="255,89,50,64" value="250" />
+			<entry class="" argb="255,102,44,74" value="251" />
+			<entry class="" argb="255,112,37,84" value="252" />
+			<entry class="" argb="255,121,30,94" value="253" />
+			<entry class="" argb="255,127,23,105" value="254" />
+			<entry class="" argb="255,127,23,105" value="255" />
+		</table>
+	</palette>
+
+	<palette name="haze" interpolate="false">
+		<table>
+			<entry class="" argb="255,167,112,255" value="0" />
+			<entry class="" argb="255,167,112,255" value="1" />
+			<entry class="" argb="255,255,213,254" value="2" />
+			<entry class="" argb="255,254,212,251" value="3" />
+			<entry class="" argb="255,249,210,250" value="4" />
+			<entry class="" argb="255,247,209,249" value="5" />
+			<entry class="" argb="255,245,208,248" value="6" />
+			<entry class="" argb="255,243,206,247" value="7" />
+			<entry class="" argb="255,242,205,246" value="8" />
+			<entry class="" argb="255,240,203,245" value="9" />
+			<entry class="" argb="255,238,202,244" value="10" />
+			<entry class="" argb="255,236,200,243" value="11" />
+			<entry class="" argb="255,234,199,242" value="12" />
+			<entry class="" argb="255,232,198,241" value="13" />
+			<entry class="" argb="255,230,196,240" value="14" />
+			<entry class="" argb="255,228,195,239" value="15" />
+			<entry class="" argb="255,226,193,238" value="16" />
+			<entry class="" argb="255,224,192,237" value="17" />
+			<entry class="" argb="255,222,191,236" value="18" />
+			<entry class="" argb="255,220,189,235" value="19" />
+			<entry class="" argb="255,218,188,234" value="20" />
+			<entry class="" argb="255,216,186,233" value="21" />
+			<entry class="" argb="255,214,185,232" value="22" />
+			<entry class="" argb="255,212,183,231" value="23" />
+			<entry class="" argb="255,210,182,230" value="24" />
+			<entry class="" argb="255,208,181,229" value="25" />
+			<entry class="" argb="255,206,179,228" value="26" />
+			<entry class="" argb="255,204,178,227" value="27" />
+			<entry class="" argb="255,202,176,226" value="28" />
+			<entry class="" argb="255,200,175,225" value="29" />
+			<entry class="" argb="255,198,174,224" value="30" />
+			<entry class="" argb="255,196,172,223" value="31" />
+			<entry class="" argb="255,194,171,222" value="32" />
+			<entry class="" argb="255,192,169,221" value="33" />
+			<entry class="" argb="255,190,168,220" value="34" />
+			<entry class="" argb="255,188,166,219" value="35" />
+			<entry class="" argb="255,186,165,218" value="36" />
+			<entry class="" argb="255,184,164,217" value="37" />
+			<entry class="" argb="255,182,162,216" value="38" />
+			<entry class="" argb="255,180,161,215" value="39" />
+			<entry class="" argb="255,178,159,214" value="40" />
+			<entry class="" argb="255,176,158,213" value="41" />
+			<entry class="" argb="255,174,157,212" value="42" />
+			<entry class="" argb="255,172,155,211" value="43" />
+			<entry class="" argb="255,170,154,210" value="44" />
+			<entry class="" argb="255,168,152,209" value="45" />
+			<entry class="" argb="255,166,151,208" value="46" />
+			<entry class="" argb="255,164,150,207" value="47" />
+			<entry class="" argb="255,162,148,206" value="48" />
+			<entry class="" argb="255,160,147,205" value="49" />
+			<entry class="" argb="255,158,145,204" value="50" />
+			<entry class="" argb="255,156,144,203" value="51" />
+			<entry class="" argb="255,154,142,202" value="52" />
+			<entry class="" argb="255,152,141,201" value="53" />
+			<entry class="" argb="255,150,140,200" value="54" />
+			<entry class="" argb="255,148,138,199" value="55" />
+			<entry class="" argb="255,146,137,198" value="56" />
+			<entry class="" argb="255,144,135,197" value="57" />
+			<entry class="" argb="255,142,134,196" value="58" />
+			<entry class="" argb="255,141,133,195" value="59" />
+			<entry class="" argb="255,139,131,194" value="60" />
+			<entry class="" argb="255,137,130,193" value="61" />
+			<entry class="" argb="255,135,128,192" value="62" />
+			<entry class="" argb="255,133,127,191" value="63" />
+			<entry class="" argb="255,131,125,190" value="64" />
+			<entry class="" argb="255,129,124,189" value="65" />
+			<entry class="" argb="255,127,123,188" value="66" />
+			<entry class="" argb="255,125,121,187" value="67" />
+			<entry class="" argb="255,123,120,186" value="68" />
+			<entry class="" argb="255,121,118,185" value="69" />
+			<entry class="" argb="255,119,117,184" value="70" />
+			<entry class="" argb="255,117,116,183" value="71" />
+			<entry class="" argb="255,115,114,182" value="72" />
+			<entry class="" argb="255,113,113,181" value="73" />
+			<entry class="" argb="255,111,111,180" value="74" />
+			<entry class="" argb="255,109,110,179" value="75" />
+			<entry class="" argb="255,107,109,178" value="76" />
+			<entry class="" argb="255,105,107,177" value="77" />
+			<entry class="" argb="255,103,106,176" value="78" />
+			<entry class="" argb="255,101,104,175" value="79" />
+			<entry class="" argb="255,99,103,174" value="80" />
+			<entry class="" argb="255,97,101,173" value="81" />
+			<entry class="" argb="255,95,100,172" value="82" />
+			<entry class="" argb="255,93,99,171" value="83" />
+			<entry class="" argb="255,91,97,170" value="84" />
+			<entry class="" argb="255,89,96,169" value="85" />
+			<entry class="" argb="255,87,94,168" value="86" />
+			<entry class="" argb="255,85,93,167" value="87" />
+			<entry class="" argb="255,83,92,166" value="88" />
+			<entry class="" argb="255,81,90,165" value="89" />
+			<entry class="" argb="255,79,89,164" value="90" />
+			<entry class="" argb="255,77,87,163" value="91" />
+			<entry class="" argb="255,75,86,162" value="92" />
+			<entry class="" argb="255,73,84,161" value="93" />
+			<entry class="" argb="255,71,83,160" value="94" />
+			<entry class="" argb="255,69,82,159" value="95" />
+			<entry class="" argb="255,67,80,158" value="96" />
+			<entry class="" argb="255,65,79,157" value="97" />
+			<entry class="" argb="255,63,77,156" value="98" />
+			<entry class="" argb="255,61,76,155" value="99" />
+			<entry class="" argb="255,59,75,154" value="100" />
+			<entry class="" argb="255,57,73,153" value="101" />
+			<entry class="" argb="255,55,72,152" value="102" />
+			<entry class="" argb="255,53,70,151" value="103" />
+			<entry class="" argb="255,51,69,150" value="104" />
+			<entry class="" argb="255,49,68,149" value="105" />
+			<entry class="" argb="255,47,66,148" value="106" />
+			<entry class="" argb="255,45,65,147" value="107" />
+			<entry class="" argb="255,43,63,146" value="108" />
+			<entry class="" argb="255,41,62,145" value="109" />
+			<entry class="" argb="255,40,60,144" value="110" />
+			<entry class="" argb="255,38,59,143" value="111" />
+			<entry class="" argb="255,36,58,142" value="112" />
+			<entry class="" argb="255,34,56,141" value="113" />
+			<entry class="" argb="255,32,55,140" value="114" />
+			<entry class="" argb="255,30,53,139" value="115" />
+			<entry class="" argb="255,28,52,138" value="116" />
+			<entry class="" argb="255,26,51,137" value="117" />
+			<entry class="" argb="255,24,49,136" value="118" />
+			<entry class="" argb="255,22,48,135" value="119" />
+			<entry class="" argb="255,20,46,134" value="120" />
+			<entry class="" argb="255,18,45,133" value="121" />
+			<entry class="" argb="255,16,43,132" value="122" />
+			<entry class="" argb="255,14,42,131" value="123" />
+			<entry class="" argb="255,12,41,130" value="124" />
+			<entry class="" argb="255,13,39,129" value="125" />
+			<entry class="" argb="255,8,38,128" value="126" />
+			<entry class="" argb="255,6,36,127" value="127" />
+			<entry class="" argb="255,4,35,126" value="128" />
+			<entry class="" argb="255,4,34,125" value="129" />
+			<entry class="" argb="255,6,32,124" value="130" />
+			<entry class="" argb="255,7,31,123" value="131" />
+			<entry class="" argb="255,9,32,122" value="132" />
+			<entry class="" argb="255,11,33,121" value="133" />
+			<entry class="" argb="255,13,34,120" value="134" />
+			<entry class="" argb="255,15,36,119" value="135" />
+			<entry class="" argb="255,17,37,118" value="136" />
+			<entry class="" argb="255,19,38,117" value="137" />
+			<entry class="" argb="255,21,40,116" value="138" />
+			<entry class="" argb="255,23,41,115" value="139" />
+			<entry class="" argb="255,25,42,114" value="140" />
+			<entry class="" argb="255,27,44,113" value="141" />
+			<entry class="" argb="255,29,45,112" value="142" />
+			<entry class="" argb="255,31,46,111" value="143" />
+			<entry class="" argb="255,33,48,110" value="144" />
+			<entry class="" argb="255,35,49,109" value="145" />
+			<entry class="" argb="255,37,50,108" value="146" />
+			<entry class="" argb="255,39,52,107" value="147" />
+			<entry class="" argb="255,41,53,106" value="148" />
+			<entry class="" argb="255,43,54,105" value="149" />
+			<entry class="" argb="255,45,56,104" value="150" />
+			<entry class="" argb="255,47,57,103" value="151" />
+			<entry class="" argb="255,49,58,102" value="152" />
+			<entry class="" argb="255,51,60,101" value="153" />
+			<entry class="" argb="255,53,61,100" value="154" />
+			<entry class="" argb="255,55,62,99" value="155" />
+			<entry class="" argb="255,57,64,98" value="156" />
+			<entry class="" argb="255,59,65,97" value="157" />
+			<entry class="" argb="255,61,66,96" value="158" />
+			<entry class="" argb="255,63,68,95" value="159" />
+			<entry class="" argb="255,65,69,94" value="160" />
+			<entry class="" argb="255,67,70,93" value="161" />
+			<entry class="" argb="255,69,72,92" value="162" />
+			<entry class="" argb="255,71,73,91" value="163" />
+			<entry class="" argb="255,73,75,90" value="164" />
+			<entry class="" argb="255,75,76,89" value="165" />
+			<entry class="" argb="255,77,77,88" value="166" />
+			<entry class="" argb="255,79,79,87" value="167" />
+			<entry class="" argb="255,81,80,86" value="168" />
+			<entry class="" argb="255,83,81,85" value="169" />
+			<entry class="" argb="255,85,83,84" value="170" />
+			<entry class="" argb="255,87,84,83" value="171" />
+			<entry class="" argb="255,89,85,82" value="172" />
+			<entry class="" argb="255,91,87,81" value="173" />
+			<entry class="" argb="255,93,88,80" value="174" />
+			<entry class="" argb="255,95,89,79" value="175" />
+			<entry class="" argb="255,97,91,78" value="176" />
+			<entry class="" argb="255,99,92,77" value="177" />
+			<entry class="" argb="255,101,93,76" value="178" />
+			<entry class="" argb="255,103,95,75" value="179" />
+			<entry class="" argb="255,105,96,74" value="180" />
+			<entry class="" argb="255,107,97,73" value="181" />
+			<entry class="" argb="255,108,99,72" value="182" />
+			<entry class="" argb="255,110,100,71" value="183" />
+			<entry class="" argb="255,112,101,70" value="184" />
+			<entry class="" argb="255,114,103,69" value="185" />
+			<entry class="" argb="255,116,104,68" value="186" />
+			<entry class="" argb="255,118,105,67" value="187" />
+			<entry class="" argb="255,120,107,66" value="188" />
+			<entry class="" argb="255,122,108,65" value="189" />
+			<entry class="" argb="255,124,109,64" value="190" />
+			<entry class="" argb="255,126,111,63" value="191" />
+			<entry class="" argb="255,128,112,62" value="192" />
+			<entry class="" argb="255,130,113,61" value="193" />
+			<entry class="" argb="255,132,115,60" value="194" />
+			<entry class="" argb="255,134,116,59" value="195" />
+			<entry class="" argb="255,136,117,58" value="196" />
+			<entry class="" argb="255,138,119,57" value="197" />
+			<entry class="" argb="255,140,120,56" value="198" />
+			<entry class="" argb="255,142,121,55" value="199" />
+			<entry class="" argb="255,144,123,54" value="200" />
+			<entry class="" argb="255,146,124,53" value="201" />
+			<entry class="" argb="255,148,125,52" value="202" />
+			<entry class="" argb="255,150,127,51" value="203" />
+			<entry class="" argb="255,152,128,50" value="204" />
+			<entry class="" argb="255,154,129,49" value="205" />
+			<entry class="" argb="255,156,131,48" value="206" />
+			<entry class="" argb="255,158,132,47" value="207" />
+			<entry class="" argb="255,160,133,46" value="208" />
+			<entry class="" argb="255,162,135,45" value="209" />
+			<entry class="" argb="255,164,136,44" value="210" />
+			<entry class="" argb="255,166,137,43" value="211" />
+			<entry class="" argb="255,168,139,42" value="212" />
+			<entry class="" argb="255,170,140,41" value="213" />
+			<entry class="" argb="255,172,141,40" value="214" />
+			<entry class="" argb="255,174,143,39" value="215" />
+			<entry class="" argb="255,176,144,38" value="216" />
+			<entry class="" argb="255,178,145,37" value="217" />
+			<entry class="" argb="255,180,147,36" value="218" />
+			<entry class="" argb="255,182,148,35" value="219" />
+			<entry class="" argb="255,184,149,34" value="220" />
+			<entry class="" argb="255,186,151,33" value="221" />
+			<entry class="" argb="255,188,152,32" value="222" />
+			<entry class="" argb="255,190,153,31" value="223" />
+			<entry class="" argb="255,192,155,30" value="224" />
+			<entry class="" argb="255,194,156,29" value="225" />
+			<entry class="" argb="255,196,157,28" value="226" />
+			<entry class="" argb="255,198,159,27" value="227" />
+			<entry class="" argb="255,200,160,26" value="228" />
+			<entry class="" argb="255,202,161,25" value="229" />
+			<entry class="" argb="255,204,163,24" value="230" />
+			<entry class="" argb="255,206,164,23" value="231" />
+			<entry class="" argb="255,208,165,22" value="232" />
+			<entry class="" argb="255,210,167,21" value="233" />
+			<entry class="" argb="255,211,168,20" value="234" />
+			<entry class="" argb="255,213,169,19" value="235" />
+			<entry class="" argb="255,215,171,18" value="236" />
+			<entry class="" argb="255,217,172,17" value="237" />
+			<entry class="" argb="255,219,173,16" value="238" />
+			<entry class="" argb="255,221,175,15" value="239" />
+			<entry class="" argb="255,223,176,14" value="240" />
+			<entry class="" argb="255,225,177,13" value="241" />
+			<entry class="" argb="255,227,179,12" value="242" />
+			<entry class="" argb="255,229,180,11" value="243" />
+			<entry class="" argb="255,231,181,13" value="244" />
+			<entry class="" argb="255,233,183,9" value="245" />
+			<entry class="" argb="255,235,184,8" value="246" />
+			<entry class="" argb="255,237,185,7" value="247" />
+			<entry class="" argb="255,239,187,6" value="248" />
+			<entry class="" argb="255,241,188,5" value="249" />
+			<entry class="" argb="255,243,189,4" value="250" />
+			<entry class="" argb="255,245,191,3" value="251" />
+			<entry class="" argb="255,247,192,2" value="252" />
+			<entry class="" argb="255,249,193,1" value="253" />
+			<entry class="" argb="255,251,195,0" value="254" />
+			<entry class="" argb="255,251,195,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="mac-style" interpolate="false">
+		<table>
+			<entry class="" argb="255,124,0,255" value="0" />
+			<entry class="" argb="255,124,0,255" value="1" />
+			<entry class="" argb="255,120,0,254" value="2" />
+			<entry class="" argb="255,115,0,255" value="3" />
+			<entry class="" argb="255,111,0,254" value="4" />
+			<entry class="" argb="255,106,0,255" value="5" />
+			<entry class="" argb="255,102,0,254" value="6" />
+			<entry class="" argb="255,97,0,255" value="7" />
+			<entry class="" argb="255,93,0,254" value="8" />
+			<entry class="" argb="255,88,0,255" value="9" />
+			<entry class="" argb="255,84,0,254" value="10" />
+			<entry class="" argb="255,79,0,255" value="11" />
+			<entry class="" argb="255,75,0,254" value="12" />
+			<entry class="" argb="255,70,0,255" value="13" />
+			<entry class="" argb="255,66,0,254" value="14" />
+			<entry class="" argb="255,61,0,255" value="15" />
+			<entry class="" argb="255,57,0,254" value="16" />
+			<entry class="" argb="255,52,0,255" value="17" />
+			<entry class="" argb="255,48,0,254" value="18" />
+			<entry class="" argb="255,43,0,255" value="19" />
+			<entry class="" argb="255,39,0,254" value="20" />
+			<entry class="" argb="255,34,0,255" value="21" />
+			<entry class="" argb="255,30,0,254" value="22" />
+			<entry class="" argb="255,25,0,255" value="23" />
+			<entry class="" argb="255,21,0,254" value="24" />
+			<entry class="" argb="255,16,0,255" value="25" />
+			<entry class="" argb="255,12,0,254" value="26" />
+			<entry class="" argb="255,7,0,255" value="27" />
+			<entry class="" argb="255,3,0,254" value="28" />
+			<entry class="" argb="255,0,2,255" value="29" />
+			<entry class="" argb="255,0,6,254" value="30" />
+			<entry class="" argb="255,0,11,255" value="31" />
+			<entry class="" argb="255,0,15,254" value="32" />
+			<entry class="" argb="255,0,20,255" value="33" />
+			<entry class="" argb="255,0,24,254" value="34" />
+			<entry class="" argb="255,0,29,255" value="35" />
+			<entry class="" argb="255,0,33,254" value="36" />
+			<entry class="" argb="255,0,38,255" value="37" />
+			<entry class="" argb="255,0,42,254" value="38" />
+			<entry class="" argb="255,0,47,255" value="39" />
+			<entry class="" argb="255,0,51,254" value="40" />
+			<entry class="" argb="255,0,56,255" value="41" />
+			<entry class="" argb="255,0,60,254" value="42" />
+			<entry class="" argb="255,0,65,255" value="43" />
+			<entry class="" argb="255,0,69,254" value="44" />
+			<entry class="" argb="255,0,74,255" value="45" />
+			<entry class="" argb="255,0,78,254" value="46" />
+			<entry class="" argb="255,0,83,255" value="47" />
+			<entry class="" argb="255,0,87,254" value="48" />
+			<entry class="" argb="255,0,92,255" value="49" />
+			<entry class="" argb="255,0,96,254" value="50" />
+			<entry class="" argb="255,0,101,255" value="51" />
+			<entry class="" argb="255,0,105,254" value="52" />
+			<entry class="" argb="255,0,110,255" value="53" />
+			<entry class="" argb="255,0,114,254" value="54" />
+			<entry class="" argb="255,0,119,255" value="55" />
+			<entry class="" argb="255,0,122,254" value="56" />
+			<entry class="" argb="255,0,128,255" value="57" />
+			<entry class="" argb="255,0,131,254" value="58" />
+			<entry class="" argb="255,0,137,255" value="59" />
+			<entry class="" argb="255,0,140,254" value="60" />
+			<entry class="" argb="255,0,146,255" value="61" />
+			<entry class="" argb="255,0,149,254" value="62" />
+			<entry class="" argb="255,0,155,255" value="63" />
+			<entry class="" argb="255,0,158,254" value="64" />
+			<entry class="" argb="255,0,164,255" value="65" />
+			<entry class="" argb="255,0,167,254" value="66" />
+			<entry class="" argb="255,0,173,255" value="67" />
+			<entry class="" argb="255,0,176,254" value="68" />
+			<entry class="" argb="255,0,182,255" value="69" />
+			<entry class="" argb="255,0,185,254" value="70" />
+			<entry class="" argb="255,0,191,255" value="71" />
+			<entry class="" argb="255,0,194,254" value="72" />
+			<entry class="" argb="255,0,200,255" value="73" />
+			<entry class="" argb="255,0,203,254" value="74" />
+			<entry class="" argb="255,0,209,255" value="75" />
+			<entry class="" argb="255,0,212,254" value="76" />
+			<entry class="" argb="255,0,218,255" value="77" />
+			<entry class="" argb="255,0,221,254" value="78" />
+			<entry class="" argb="255,0,227,255" value="79" />
+			<entry class="" argb="255,0,230,254" value="80" />
+			<entry class="" argb="255,0,236,255" value="81" />
+			<entry class="" argb="255,0,240,254" value="82" />
+			<entry class="" argb="255,0,245,255" value="83" />
+			<entry class="" argb="255,0,249,254" value="84" />
+			<entry class="" argb="255,0,254,255" value="85" />
+			<entry class="" argb="255,0,254,250" value="86" />
+			<entry class="" argb="255,0,255,247" value="87" />
+			<entry class="" argb="255,0,254,241" value="88" />
+			<entry class="" argb="255,0,255,238" value="89" />
+			<entry class="" argb="255,0,254,232" value="90" />
+			<entry class="" argb="255,0,255,229" value="91" />
+			<entry class="" argb="255,0,254,223" value="92" />
+			<entry class="" argb="255,0,255,220" value="93" />
+			<entry class="" argb="255,0,254,214" value="94" />
+			<entry class="" argb="255,0,255,211" value="95" />
+			<entry class="" argb="255,0,254,205" value="96" />
+			<entry class="" argb="255,0,255,202" value="97" />
+			<entry class="" argb="255,0,254,196" value="98" />
+			<entry class="" argb="255,0,255,193" value="99" />
+			<entry class="" argb="255,0,254,187" value="100" />
+			<entry class="" argb="255,0,255,184" value="101" />
+			<entry class="" argb="255,0,254,178" value="102" />
+			<entry class="" argb="255,0,255,175" value="103" />
+			<entry class="" argb="255,0,254,169" value="104" />
+			<entry class="" argb="255,0,255,166" value="105" />
+			<entry class="" argb="255,0,254,160" value="106" />
+			<entry class="" argb="255,0,255,157" value="107" />
+			<entry class="" argb="255,0,254,151" value="108" />
+			<entry class="" argb="255,0,255,148" value="109" />
+			<entry class="" argb="255,0,254,142" value="110" />
+			<entry class="" argb="255,0,255,139" value="111" />
+			<entry class="" argb="255,0,254,133" value="112" />
+			<entry class="" argb="255,0,255,130" value="113" />
+			<entry class="" argb="255,0,254,125" value="114" />
+			<entry class="" argb="255,0,255,121" value="115" />
+			<entry class="" argb="255,0,254,116" value="116" />
+			<entry class="" argb="255,0,255,112" value="117" />
+			<entry class="" argb="255,0,254,107" value="118" />
+			<entry class="" argb="255,0,255,103" value="119" />
+			<entry class="" argb="255,0,254,98" value="120" />
+			<entry class="" argb="255,0,255,94" value="121" />
+			<entry class="" argb="255,0,254,89" value="122" />
+			<entry class="" argb="255,0,255,85" value="123" />
+			<entry class="" argb="255,0,254,80" value="124" />
+			<entry class="" argb="255,0,255,76" value="125" />
+			<entry class="" argb="255,0,254,71" value="126" />
+			<entry class="" argb="255,0,255,67" value="127" />
+			<entry class="" argb="255,0,254,62" value="128" />
+			<entry class="" argb="255,0,255,58" value="129" />
+			<entry class="" argb="255,0,254,53" value="130" />
+			<entry class="" argb="255,0,255,49" value="131" />
+			<entry class="" argb="255,0,254,44" value="132" />
+			<entry class="" argb="255,0,255,40" value="133" />
+			<entry class="" argb="255,0,254,35" value="134" />
+			<entry class="" argb="255,0,255,31" value="135" />
+			<entry class="" argb="255,0,254,26" value="136" />
+			<entry class="" argb="255,0,255,22" value="137" />
+			<entry class="" argb="255,0,254,17" value="138" />
+			<entry class="" argb="255,0,255,13" value="139" />
+			<entry class="" argb="255,0,254,8" value="140" />
+			<entry class="" argb="255,0,255,4" value="141" />
+			<entry class="" argb="255,1,254,0" value="142" />
+			<entry class="" argb="255,5,255,0" value="143" />
+			<entry class="" argb="255,13,254,0" value="144" />
+			<entry class="" argb="255,14,255,0" value="145" />
+			<entry class="" argb="255,19,254,0" value="146" />
+			<entry class="" argb="255,23,255,0" value="147" />
+			<entry class="" argb="255,28,254,0" value="148" />
+			<entry class="" argb="255,32,255,0" value="149" />
+			<entry class="" argb="255,37,254,0" value="150" />
+			<entry class="" argb="255,41,255,0" value="151" />
+			<entry class="" argb="255,46,254,0" value="152" />
+			<entry class="" argb="255,50,255,0" value="153" />
+			<entry class="" argb="255,55,254,0" value="154" />
+			<entry class="" argb="255,59,255,0" value="155" />
+			<entry class="" argb="255,64,254,0" value="156" />
+			<entry class="" argb="255,68,255,0" value="157" />
+			<entry class="" argb="255,73,254,0" value="158" />
+			<entry class="" argb="255,77,255,0" value="159" />
+			<entry class="" argb="255,82,254,0" value="160" />
+			<entry class="" argb="255,86,255,0" value="161" />
+			<entry class="" argb="255,91,254,0" value="162" />
+			<entry class="" argb="255,95,255,0" value="163" />
+			<entry class="" argb="255,100,254,0" value="164" />
+			<entry class="" argb="255,104,255,0" value="165" />
+			<entry class="" argb="255,109,254,0" value="166" />
+			<entry class="" argb="255,113,255,0" value="167" />
+			<entry class="" argb="255,118,254,0" value="168" />
+			<entry class="" argb="255,123,255,0" value="169" />
+			<entry class="" argb="255,126,254,0" value="170" />
+			<entry class="" argb="255,132,255,0" value="171" />
+			<entry class="" argb="255,135,254,0" value="172" />
+			<entry class="" argb="255,141,255,0" value="173" />
+			<entry class="" argb="255,144,254,0" value="174" />
+			<entry class="" argb="255,150,255,0" value="175" />
+			<entry class="" argb="255,153,254,0" value="176" />
+			<entry class="" argb="255,159,255,0" value="177" />
+			<entry class="" argb="255,162,254,0" value="178" />
+			<entry class="" argb="255,168,255,0" value="179" />
+			<entry class="" argb="255,171,254,0" value="180" />
+			<entry class="" argb="255,177,255,0" value="181" />
+			<entry class="" argb="255,180,254,0" value="182" />
+			<entry class="" argb="255,186,255,0" value="183" />
+			<entry class="" argb="255,189,254,0" value="184" />
+			<entry class="" argb="255,195,255,0" value="185" />
+			<entry class="" argb="255,198,254,0" value="186" />
+			<entry class="" argb="255,204,255,0" value="187" />
+			<entry class="" argb="255,207,254,0" value="188" />
+			<entry class="" argb="255,213,255,0" value="189" />
+			<entry class="" argb="255,216,254,0" value="190" />
+			<entry class="" argb="255,222,255,0" value="191" />
+			<entry class="" argb="255,225,254,0" value="192" />
+			<entry class="" argb="255,231,255,0" value="193" />
+			<entry class="" argb="255,234,254,0" value="194" />
+			<entry class="" argb="255,240,255,0" value="195" />
+			<entry class="" argb="255,243,254,0" value="196" />
+			<entry class="" argb="255,249,255,0" value="197" />
+			<entry class="" argb="255,252,254,0" value="198" />
+			<entry class="" argb="255,255,252,0" value="199" />
+			<entry class="" argb="255,254,247,0" value="200" />
+			<entry class="" argb="255,255,243,0" value="201" />
+			<entry class="" argb="255,254,238,0" value="202" />
+			<entry class="" argb="255,255,234,0" value="203" />
+			<entry class="" argb="255,254,229,0" value="204" />
+			<entry class="" argb="255,255,225,0" value="205" />
+			<entry class="" argb="255,254,220,0" value="206" />
+			<entry class="" argb="255,255,216,0" value="207" />
+			<entry class="" argb="255,254,211,0" value="208" />
+			<entry class="" argb="255,255,207,0" value="209" />
+			<entry class="" argb="255,254,202,0" value="210" />
+			<entry class="" argb="255,255,198,0" value="211" />
+			<entry class="" argb="255,254,193,0" value="212" />
+			<entry class="" argb="255,255,189,0" value="213" />
+			<entry class="" argb="255,254,184,0" value="214" />
+			<entry class="" argb="255,255,180,0" value="215" />
+			<entry class="" argb="255,254,175,0" value="216" />
+			<entry class="" argb="255,255,171,0" value="217" />
+			<entry class="" argb="255,254,166,0" value="218" />
+			<entry class="" argb="255,255,162,0" value="219" />
+			<entry class="" argb="255,254,157,0" value="220" />
+			<entry class="" argb="255,255,153,0" value="221" />
+			<entry class="" argb="255,254,148,0" value="222" />
+			<entry class="" argb="255,255,144,0" value="223" />
+			<entry class="" argb="255,254,139,0" value="224" />
+			<entry class="" argb="255,255,135,0" value="225" />
+			<entry class="" argb="255,254,131,0" value="226" />
+			<entry class="" argb="255,255,126,0" value="227" />
+			<entry class="" argb="255,254,122,0" value="228" />
+			<entry class="" argb="255,255,117,0" value="229" />
+			<entry class="" argb="255,254,113,0" value="230" />
+			<entry class="" argb="255,255,108,0" value="231" />
+			<entry class="" argb="255,254,104,0" value="232" />
+			<entry class="" argb="255,255,99,0" value="233" />
+			<entry class="" argb="255,254,95,0" value="234" />
+			<entry class="" argb="255,255,90,0" value="235" />
+			<entry class="" argb="255,254,86,0" value="236" />
+			<entry class="" argb="255,255,81,0" value="237" />
+			<entry class="" argb="255,254,77,0" value="238" />
+			<entry class="" argb="255,255,72,0" value="239" />
+			<entry class="" argb="255,254,68,0" value="240" />
+			<entry class="" argb="255,255,63,0" value="241" />
+			<entry class="" argb="255,254,59,0" value="242" />
+			<entry class="" argb="255,255,54,0" value="243" />
+			<entry class="" argb="255,254,50,0" value="244" />
+			<entry class="" argb="255,255,45,0" value="245" />
+			<entry class="" argb="255,254,41,0" value="246" />
+			<entry class="" argb="255,255,36,0" value="247" />
+			<entry class="" argb="255,254,32,0" value="248" />
+			<entry class="" argb="255,255,27,0" value="249" />
+			<entry class="" argb="255,254,23,0" value="250" />
+			<entry class="" argb="255,255,18,0" value="251" />
+			<entry class="" argb="255,254,14,0" value="252" />
+			<entry class="" argb="255,255,9,0" value="253" />
+			<entry class="" argb="255,255,5,0" value="254" />
+			<entry class="" argb="255,255,5,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="nature" interpolate="false">
+		<table>
+			<entry class="" argb="255,105,246,234" value="0" />
+			<entry class="" argb="255,105,246,234" value="1" />
+			<entry class="" argb="255,105,246,234" value="2" />
+			<entry class="" argb="255,105,246,234" value="3" />
+			<entry class="" argb="255,105,246,234" value="4" />
+			<entry class="" argb="255,105,246,234" value="5" />
+			<entry class="" argb="255,105,246,234" value="6" />
+			<entry class="" argb="255,105,246,234" value="7" />
+			<entry class="" argb="255,105,246,234" value="8" />
+			<entry class="" argb="255,110,251,222" value="9" />
+			<entry class="" argb="255,114,253,210" value="10" />
+			<entry class="" argb="255,123,244,186" value="11" />
+			<entry class="" argb="255,127,239,175" value="12" />
+			<entry class="" argb="255,131,235,164" value="13" />
+			<entry class="" argb="255,135,231,153" value="14" />
+			<entry class="" argb="255,143,224,132" value="15" />
+			<entry class="" argb="255,147,222,122" value="16" />
+			<entry class="" argb="255,150,219,113" value="17" />
+			<entry class="" argb="255,157,216,95" value="18" />
+			<entry class="" argb="255,160,214,87" value="19" />
+			<entry class="" argb="255,163,214,79" value="20" />
+			<entry class="" argb="255,165,213,72" value="21" />
+			<entry class="" argb="255,170,214,59" value="22" />
+			<entry class="" argb="255,172,215,54" value="23" />
+			<entry class="" argb="255,174,216,49" value="24" />
+			<entry class="" argb="255,176,218,44" value="25" />
+			<entry class="" argb="255,179,223,37" value="26" />
+			<entry class="" argb="255,180,226,34" value="27" />
+			<entry class="" argb="255,180,229,32" value="28" />
+			<entry class="" argb="255,181,237,30" value="29" />
+			<entry class="" argb="255,182,241,29" value="30" />
+			<entry class="" argb="255,181,246,30" value="31" />
+			<entry class="" argb="255,181,251,31" value="32" />
+			<entry class="" argb="255,180,248,34" value="33" />
+			<entry class="" argb="255,179,243,37" value="34" />
+			<entry class="" argb="255,177,237,40" value="35" />
+			<entry class="" argb="255,174,225,49" value="36" />
+			<entry class="" argb="255,172,218,54" value="37" />
+			<entry class="" argb="255,170,212,59" value="38" />
+			<entry class="" argb="255,168,205,66" value="39" />
+			<entry class="" argb="255,163,192,79" value="40" />
+			<entry class="" argb="255,160,186,87" value="41" />
+			<entry class="" argb="255,157,179,95" value="42" />
+			<entry class="" argb="255,154,173,104" value="43" />
+			<entry class="" argb="255,147,160,122" value="44" />
+			<entry class="" argb="255,143,154,132" value="45" />
+			<entry class="" argb="255,139,148,142" value="46" />
+			<entry class="" argb="255,131,137,164" value="47" />
+			<entry class="" argb="255,127,132,175" value="48" />
+			<entry class="" argb="255,123,127,186" value="49" />
+			<entry class="" argb="255,119,122,198" value="50" />
+			<entry class="" argb="255,110,113,222" value="51" />
+			<entry class="" argb="255,105,109,234" value="52" />
+			<entry class="" argb="255,100,105,246" value="53" />
+			<entry class="" argb="255,96,102,251" value="54" />
+			<entry class="" argb="255,87,96,227" value="55" />
+			<entry class="" argb="255,82,94,214" value="56" />
+			<entry class="" argb="255,77,92,202" value="57" />
+			<entry class="" argb="255,68,89,177" value="58" />
+			<entry class="" argb="255,63,88,165" value="59" />
+			<entry class="" argb="255,59,88,153" value="60" />
+			<entry class="" argb="255,54,88,141" value="61" />
+			<entry class="" argb="255,46,88,118" value="62" />
+			<entry class="" argb="255,42,89,107" value="63" />
+			<entry class="" argb="255,38,90,96" value="64" />
+			<entry class="" argb="255,30,93,75" value="65" />
+			<entry class="" argb="255,26,95,65" value="66" />
+			<entry class="" argb="255,23,97,56" value="67" />
+			<entry class="" argb="255,19,99,47" value="68" />
+			<entry class="" argb="255,13,104,30" value="69" />
+			<entry class="" argb="255,13,107,22" value="70" />
+			<entry class="" argb="255,8,110,15" value="71" />
+			<entry class="" argb="255,5,113,9" value="72" />
+			<entry class="" argb="255,1,120,2" value="73" />
+			<entry class="" argb="255,0,124,7" value="74" />
+			<entry class="" argb="255,2,127,12" value="75" />
+			<entry class="" argb="255,5,134,19" value="76" />
+			<entry class="" argb="255,6,138,22" value="77" />
+			<entry class="" argb="255,6,141,24" value="78" />
+			<entry class="" argb="255,7,145,25" value="79" />
+			<entry class="" argb="255,8,152,27" value="80" />
+			<entry class="" argb="255,7,155,26" value="81" />
+			<entry class="" argb="255,7,158,25" value="82" />
+			<entry class="" argb="255,6,164,22" value="83" />
+			<entry class="" argb="255,5,166,19" value="84" />
+			<entry class="" argb="255,3,169,16" value="85" />
+			<entry class="" argb="255,2,171,12" value="86" />
+			<entry class="" argb="255,1,175,2" value="87" />
+			<entry class="" argb="255,3,176,2" value="88" />
+			<entry class="" argb="255,5,178,9" value="89" />
+			<entry class="" argb="255,8,179,15" value="90" />
+			<entry class="" argb="255,13,180,30" value="91" />
+			<entry class="" argb="255,16,180,38" value="92" />
+			<entry class="" argb="255,19,180,47" value="93" />
+			<entry class="" argb="255,26,180,65" value="94" />
+			<entry class="" argb="255,30,179,75" value="95" />
+			<entry class="" argb="255,34,178,85" value="96" />
+			<entry class="" argb="255,38,176,96" value="97" />
+			<entry class="" argb="255,46,173,118" value="98" />
+			<entry class="" argb="255,50,171,129" value="99" />
+			<entry class="" argb="255,54,169,141" value="100" />
+			<entry class="" argb="255,59,166,153" value="101" />
+			<entry class="" argb="255,68,161,177" value="102" />
+			<entry class="" argb="255,73,158,189" value="103" />
+			<entry class="" argb="255,77,154,202" value="104" />
+			<entry class="" argb="255,86,148,226" value="105" />
+			<entry class="" argb="255,91,144,239" value="106" />
+			<entry class="" argb="255,96,140,251" value="107" />
+			<entry class="" argb="255,100,136,246" value="108" />
+			<entry class="" argb="255,110,128,222" value="109" />
+			<entry class="" argb="255,114,124,210" value="110" />
+			<entry class="" argb="255,119,120,198" value="111" />
+			<entry class="" argb="255,127,112,175" value="112" />
+			<entry class="" argb="255,131,108,164" value="113" />
+			<entry class="" argb="255,135,104,153" value="114" />
+			<entry class="" argb="255,139,100,142" value="115" />
+			<entry class="" argb="255,147,92,122" value="116" />
+			<entry class="" argb="255,150,88,113" value="117" />
+			<entry class="" argb="255,154,85,104" value="118" />
+			<entry class="" argb="255,157,81,95" value="119" />
+			<entry class="" argb="255,163,74,79" value="120" />
+			<entry class="" argb="255,165,71,72" value="121" />
+			<entry class="" argb="255,168,68,66" value="122" />
+			<entry class="" argb="255,172,62,54" value="123" />
+			<entry class="" argb="255,174,60,49" value="124" />
+			<entry class="" argb="255,176,57,44" value="125" />
+			<entry class="" argb="255,177,55,40" value="126" />
+			<entry class="" argb="255,180,51,34" value="127" />
+			<entry class="" argb="255,180,50,32" value="128" />
+			<entry class="" argb="255,181,48,31" value="129" />
+			<entry class="" argb="255,182,46,29" value="130" />
+			<entry class="" argb="255,181,45,30" value="131" />
+			<entry class="" argb="255,181,44,31" value="132" />
+			<entry class="" argb="255,180,44,32" value="133" />
+			<entry class="" argb="255,179,43,37" value="134" />
+			<entry class="" argb="255,177,43,40" value="135" />
+			<entry class="" argb="255,176,43,44" value="136" />
+			<entry class="" argb="255,174,44,49" value="137" />
+			<entry class="" argb="255,170,44,59" value="138" />
+			<entry class="" argb="255,168,45,66" value="139" />
+			<entry class="" argb="255,165,46,72" value="140" />
+			<entry class="" argb="255,160,47,87" value="141" />
+			<entry class="" argb="255,157,48,95" value="142" />
+			<entry class="" argb="255,154,49,104" value="143" />
+			<entry class="" argb="255,150,51,113" value="144" />
+			<entry class="" argb="255,143,53,132" value="145" />
+			<entry class="" argb="255,139,54,142" value="146" />
+			<entry class="" argb="255,135,55,153" value="147" />
+			<entry class="" argb="255,127,57,175" value="148" />
+			<entry class="" argb="255,123,59,186" value="149" />
+			<entry class="" argb="255,119,60,198" value="150" />
+			<entry class="" argb="255,114,61,210" value="151" />
+			<entry class="" argb="255,105,63,234" value="152" />
+			<entry class="" argb="255,100,64,246" value="153" />
+			<entry class="" argb="255,96,64,251" value="154" />
+			<entry class="" argb="255,91,65,239" value="155" />
+			<entry class="" argb="255,82,66,214" value="156" />
+			<entry class="" argb="255,77,67,202" value="157" />
+			<entry class="" argb="255,73,67,189" value="158" />
+			<entry class="" argb="255,63,67,165" value="159" />
+			<entry class="" argb="255,59,67,153" value="160" />
+			<entry class="" argb="255,54,67,141" value="161" />
+			<entry class="" argb="255,50,67,129" value="162" />
+			<entry class="" argb="255,42,66,107" value="163" />
+			<entry class="" argb="255,38,66,96" value="164" />
+			<entry class="" argb="255,34,65,85" value="165" />
+			<entry class="" argb="255,30,64,75" value="166" />
+			<entry class="" argb="255,23,62,56" value="167" />
+			<entry class="" argb="255,19,61,47" value="168" />
+			<entry class="" argb="255,16,60,38" value="169" />
+			<entry class="" argb="255,13,58,22" value="170" />
+			<entry class="" argb="255,8,56,15" value="171" />
+			<entry class="" argb="255,5,55,9" value="172" />
+			<entry class="" argb="255,3,53,2" value="173" />
+			<entry class="" argb="255,0,50,7" value="174" />
+			<entry class="" argb="255,2,48,12" value="175" />
+			<entry class="" argb="255,3,46,16" value="176" />
+			<entry class="" argb="255,6,43,22" value="177" />
+			<entry class="" argb="255,6,41,24" value="178" />
+			<entry class="" argb="255,7,39,25" value="179" />
+			<entry class="" argb="255,7,37,26" value="180" />
+			<entry class="" argb="255,7,34,26" value="181" />
+			<entry class="" argb="255,7,32,25" value="182" />
+			<entry class="" argb="255,6,30,24" value="183" />
+			<entry class="" argb="255,6,28,22" value="184" />
+			<entry class="" argb="255,3,25,16" value="185" />
+			<entry class="" argb="255,2,23,12" value="186" />
+			<entry class="" argb="255,0,22,7" value="187" />
+			<entry class="" argb="255,3,19,2" value="188" />
+			<entry class="" argb="255,5,17,9" value="189" />
+			<entry class="" argb="255,8,16,15" value="190" />
+			<entry class="" argb="255,13,15,22" value="191" />
+			<entry class="" argb="255,16,12,38" value="192" />
+			<entry class="" argb="255,19,11,47" value="193" />
+			<entry class="" argb="255,23,13,56" value="194" />
+			<entry class="" argb="255,30,8,75" value="195" />
+			<entry class="" argb="255,34,7,85" value="196" />
+			<entry class="" argb="255,38,6,96" value="197" />
+			<entry class="" argb="255,42,6,107" value="198" />
+			<entry class="" argb="255,50,4,129" value="199" />
+			<entry class="" argb="255,54,4,141" value="200" />
+			<entry class="" argb="255,59,3,153" value="201" />
+			<entry class="" argb="255,63,2,165" value="202" />
+			<entry class="" argb="255,73,1,189" value="203" />
+			<entry class="" argb="255,77,1,202" value="204" />
+			<entry class="" argb="255,82,0,214" value="205" />
+			<entry class="" argb="255,82,0,214" value="206" />
+			<entry class="" argb="255,82,0,214" value="207" />
+			<entry class="" argb="255,82,0,214" value="208" />
+			<entry class="" argb="255,82,0,214" value="209" />
+			<entry class="" argb="255,82,0,214" value="210" />
+			<entry class="" argb="255,82,0,214" value="211" />
+			<entry class="" argb="255,82,0,214" value="212" />
+			<entry class="" argb="255,82,0,214" value="213" />
+			<entry class="" argb="255,82,0,214" value="214" />
+			<entry class="" argb="255,82,0,214" value="215" />
+			<entry class="" argb="255,82,0,214" value="216" />
+			<entry class="" argb="255,82,0,214" value="217" />
+			<entry class="" argb="255,82,0,214" value="218" />
+			<entry class="" argb="255,82,0,214" value="219" />
+			<entry class="" argb="255,82,0,214" value="220" />
+			<entry class="" argb="255,82,0,214" value="221" />
+			<entry class="" argb="255,82,0,214" value="222" />
+			<entry class="" argb="255,82,0,214" value="223" />
+			<entry class="" argb="255,82,0,214" value="224" />
+			<entry class="" argb="255,82,0,214" value="225" />
+			<entry class="" argb="255,82,0,214" value="226" />
+			<entry class="" argb="255,82,0,214" value="227" />
+			<entry class="" argb="255,82,0,214" value="228" />
+			<entry class="" argb="255,82,0,214" value="229" />
+			<entry class="" argb="255,82,0,214" value="230" />
+			<entry class="" argb="255,82,0,214" value="231" />
+			<entry class="" argb="255,82,0,214" value="232" />
+			<entry class="" argb="255,82,0,214" value="233" />
+			<entry class="" argb="255,82,0,214" value="234" />
+			<entry class="" argb="255,82,0,214" value="235" />
+			<entry class="" argb="255,82,0,214" value="236" />
+			<entry class="" argb="255,82,0,214" value="237" />
+			<entry class="" argb="255,82,0,214" value="238" />
+			<entry class="" argb="255,82,0,214" value="239" />
+			<entry class="" argb="255,82,0,214" value="240" />
+			<entry class="" argb="255,82,0,214" value="241" />
+			<entry class="" argb="255,82,0,214" value="242" />
+			<entry class="" argb="255,82,0,214" value="243" />
+			<entry class="" argb="255,82,0,214" value="244" />
+			<entry class="" argb="255,82,0,214" value="245" />
+			<entry class="" argb="255,82,0,214" value="246" />
+			<entry class="" argb="255,82,0,214" value="247" />
+			<entry class="" argb="255,82,0,214" value="248" />
+			<entry class="" argb="255,82,0,214" value="249" />
+			<entry class="" argb="255,82,0,214" value="250" />
+			<entry class="" argb="255,82,0,214" value="251" />
+			<entry class="" argb="255,82,0,214" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="pastels" interpolate="false">
+		<table>
+			<entry class="" argb="255,255,0,72" value="0" />
+			<entry class="" argb="255,255,0,72" value="1" />
+			<entry class="" argb="255,255,0,74" value="2" />
+			<entry class="" argb="255,255,0,76" value="3" />
+			<entry class="" argb="255,255,0,78" value="4" />
+			<entry class="" argb="255,255,0,80" value="5" />
+			<entry class="" argb="255,255,0,82" value="6" />
+			<entry class="" argb="255,255,0,84" value="7" />
+			<entry class="" argb="255,255,0,86" value="8" />
+			<entry class="" argb="255,255,0,88" value="9" />
+			<entry class="" argb="255,255,0,90" value="10" />
+			<entry class="" argb="255,255,0,91" value="11" />
+			<entry class="" argb="255,255,0,93" value="12" />
+			<entry class="" argb="255,255,0,95" value="13" />
+			<entry class="" argb="255,255,0,97" value="14" />
+			<entry class="" argb="255,255,0,99" value="15" />
+			<entry class="" argb="255,255,0,101" value="16" />
+			<entry class="" argb="255,255,0,103" value="17" />
+			<entry class="" argb="255,255,0,105" value="18" />
+			<entry class="" argb="255,255,0,107" value="19" />
+			<entry class="" argb="255,255,0,109" value="20" />
+			<entry class="" argb="255,255,0,111" value="21" />
+			<entry class="" argb="255,255,0,113" value="22" />
+			<entry class="" argb="255,255,0,115" value="23" />
+			<entry class="" argb="255,255,0,117" value="24" />
+			<entry class="" argb="255,255,0,119" value="25" />
+			<entry class="" argb="255,255,0,121" value="26" />
+			<entry class="" argb="255,255,0,123" value="27" />
+			<entry class="" argb="255,255,0,125" value="28" />
+			<entry class="" argb="255,255,0,127" value="29" />
+			<entry class="" argb="255,255,0,129" value="30" />
+			<entry class="" argb="255,255,0,131" value="31" />
+			<entry class="" argb="255,255,0,133" value="32" />
+			<entry class="" argb="255,255,0,135" value="33" />
+			<entry class="" argb="255,255,0,137" value="34" />
+			<entry class="" argb="255,255,0,139" value="35" />
+			<entry class="" argb="255,255,0,141" value="36" />
+			<entry class="" argb="255,255,0,142" value="37" />
+			<entry class="" argb="255,255,0,144" value="38" />
+			<entry class="" argb="255,255,0,146" value="39" />
+			<entry class="" argb="255,255,0,148" value="40" />
+			<entry class="" argb="255,255,0,150" value="41" />
+			<entry class="" argb="255,255,0,152" value="42" />
+			<entry class="" argb="255,255,0,154" value="43" />
+			<entry class="" argb="255,255,0,156" value="44" />
+			<entry class="" argb="255,255,0,158" value="45" />
+			<entry class="" argb="255,255,0,160" value="46" />
+			<entry class="" argb="255,255,0,162" value="47" />
+			<entry class="" argb="255,255,0,164" value="48" />
+			<entry class="" argb="255,255,0,166" value="49" />
+			<entry class="" argb="255,255,0,168" value="50" />
+			<entry class="" argb="255,255,0,170" value="51" />
+			<entry class="" argb="255,255,0,172" value="52" />
+			<entry class="" argb="255,255,0,174" value="53" />
+			<entry class="" argb="255,255,0,176" value="54" />
+			<entry class="" argb="255,255,0,178" value="55" />
+			<entry class="" argb="255,255,0,180" value="56" />
+			<entry class="" argb="255,255,0,182" value="57" />
+			<entry class="" argb="255,255,0,184" value="58" />
+			<entry class="" argb="255,255,0,186" value="59" />
+			<entry class="" argb="255,255,0,188" value="60" />
+			<entry class="" argb="255,255,0,190" value="61" />
+			<entry class="" argb="255,255,0,191" value="62" />
+			<entry class="" argb="255,255,0,193" value="63" />
+			<entry class="" argb="255,255,0,195" value="64" />
+			<entry class="" argb="255,255,0,197" value="65" />
+			<entry class="" argb="255,255,0,199" value="66" />
+			<entry class="" argb="255,255,0,201" value="67" />
+			<entry class="" argb="255,255,0,203" value="68" />
+			<entry class="" argb="255,255,0,205" value="69" />
+			<entry class="" argb="255,255,0,207" value="70" />
+			<entry class="" argb="255,255,0,209" value="71" />
+			<entry class="" argb="255,255,0,211" value="72" />
+			<entry class="" argb="255,255,0,213" value="73" />
+			<entry class="" argb="255,255,0,215" value="74" />
+			<entry class="" argb="255,255,0,217" value="75" />
+			<entry class="" argb="255,255,0,219" value="76" />
+			<entry class="" argb="255,255,0,221" value="77" />
+			<entry class="" argb="255,255,0,223" value="78" />
+			<entry class="" argb="255,255,0,225" value="79" />
+			<entry class="" argb="255,255,0,227" value="80" />
+			<entry class="" argb="255,255,0,229" value="81" />
+			<entry class="" argb="255,255,0,231" value="82" />
+			<entry class="" argb="255,255,0,233" value="83" />
+			<entry class="" argb="255,255,0,235" value="84" />
+			<entry class="" argb="255,255,0,237" value="85" />
+			<entry class="" argb="255,255,0,239" value="86" />
+			<entry class="" argb="255,255,0,241" value="87" />
+			<entry class="" argb="255,255,0,242" value="88" />
+			<entry class="" argb="255,255,0,244" value="89" />
+			<entry class="" argb="255,255,0,246" value="90" />
+			<entry class="" argb="255,255,0,248" value="91" />
+			<entry class="" argb="255,255,0,250" value="92" />
+			<entry class="" argb="255,255,0,252" value="93" />
+			<entry class="" argb="255,255,0,254" value="94" />
+			<entry class="" argb="255,253,0,255" value="95" />
+			<entry class="" argb="255,251,0,255" value="96" />
+			<entry class="" argb="255,249,0,255" value="97" />
+			<entry class="" argb="255,247,0,255" value="98" />
+			<entry class="" argb="255,245,0,255" value="99" />
+			<entry class="" argb="255,243,0,255" value="100" />
+			<entry class="" argb="255,241,0,255" value="101" />
+			<entry class="" argb="255,239,0,255" value="102" />
+			<entry class="" argb="255,237,0,255" value="103" />
+			<entry class="" argb="255,235,0,255" value="104" />
+			<entry class="" argb="255,233,0,255" value="105" />
+			<entry class="" argb="255,231,0,255" value="106" />
+			<entry class="" argb="255,229,0,255" value="107" />
+			<entry class="" argb="255,227,0,255" value="108" />
+			<entry class="" argb="255,225,0,255" value="109" />
+			<entry class="" argb="255,223,0,255" value="110" />
+			<entry class="" argb="255,221,0,255" value="111" />
+			<entry class="" argb="255,219,0,255" value="112" />
+			<entry class="" argb="255,217,0,255" value="113" />
+			<entry class="" argb="255,216,0,255" value="114" />
+			<entry class="" argb="255,214,0,255" value="115" />
+			<entry class="" argb="255,212,0,255" value="116" />
+			<entry class="" argb="255,210,0,255" value="117" />
+			<entry class="" argb="255,208,0,255" value="118" />
+			<entry class="" argb="255,206,0,255" value="119" />
+			<entry class="" argb="255,204,0,255" value="120" />
+			<entry class="" argb="255,202,0,255" value="121" />
+			<entry class="" argb="255,200,0,255" value="122" />
+			<entry class="" argb="255,198,0,255" value="123" />
+			<entry class="" argb="255,196,0,255" value="124" />
+			<entry class="" argb="255,194,0,255" value="125" />
+			<entry class="" argb="255,192,0,255" value="126" />
+			<entry class="" argb="255,190,0,255" value="127" />
+			<entry class="" argb="255,188,0,255" value="128" />
+			<entry class="" argb="255,186,0,255" value="129" />
+			<entry class="" argb="255,0,140,255" value="130" />
+			<entry class="" argb="255,0,146,255" value="131" />
+			<entry class="" argb="255,0,152,255" value="132" />
+			<entry class="" argb="255,0,157,255" value="133" />
+			<entry class="" argb="255,0,163,255" value="134" />
+			<entry class="" argb="255,0,169,255" value="135" />
+			<entry class="" argb="255,0,174,255" value="136" />
+			<entry class="" argb="255,0,180,255" value="137" />
+			<entry class="" argb="255,0,186,255" value="138" />
+			<entry class="" argb="255,0,192,255" value="139" />
+			<entry class="" argb="255,0,197,255" value="140" />
+			<entry class="" argb="255,0,203,255" value="141" />
+			<entry class="" argb="255,0,209,255" value="142" />
+			<entry class="" argb="255,0,214,255" value="143" />
+			<entry class="" argb="255,0,220,255" value="144" />
+			<entry class="" argb="255,0,226,255" value="145" />
+			<entry class="" argb="255,0,232,255" value="146" />
+			<entry class="" argb="255,0,237,255" value="147" />
+			<entry class="" argb="255,0,243,255" value="148" />
+			<entry class="" argb="255,0,249,255" value="149" />
+			<entry class="" argb="255,0,255,255" value="150" />
+			<entry class="" argb="255,0,255,249" value="151" />
+			<entry class="" argb="255,0,255,243" value="152" />
+			<entry class="" argb="255,0,255,237" value="153" />
+			<entry class="" argb="255,0,255,232" value="154" />
+			<entry class="" argb="255,0,255,226" value="155" />
+			<entry class="" argb="255,0,255,220" value="156" />
+			<entry class="" argb="255,0,255,214" value="157" />
+			<entry class="" argb="255,0,255,209" value="158" />
+			<entry class="" argb="255,0,255,203" value="159" />
+			<entry class="" argb="255,0,255,197" value="160" />
+			<entry class="" argb="255,0,255,192" value="161" />
+			<entry class="" argb="255,0,255,186" value="162" />
+			<entry class="" argb="255,0,255,180" value="163" />
+			<entry class="" argb="255,0,255,174" value="164" />
+			<entry class="" argb="255,0,255,169" value="165" />
+			<entry class="" argb="255,0,255,163" value="166" />
+			<entry class="" argb="255,0,255,157" value="167" />
+			<entry class="" argb="255,0,255,152" value="168" />
+			<entry class="" argb="255,0,255,146" value="169" />
+			<entry class="" argb="255,0,255,140" value="170" />
+			<entry class="" argb="255,0,255,134" value="171" />
+			<entry class="" argb="255,0,255,129" value="172" />
+			<entry class="" argb="255,0,255,123" value="173" />
+			<entry class="" argb="255,0,255,117" value="174" />
+			<entry class="" argb="255,0,255,112" value="175" />
+			<entry class="" argb="255,0,255,106" value="176" />
+			<entry class="" argb="255,0,255,100" value="177" />
+			<entry class="" argb="255,0,255,94" value="178" />
+			<entry class="" argb="255,0,255,89" value="179" />
+			<entry class="" argb="255,0,255,83" value="180" />
+			<entry class="" argb="255,0,255,77" value="181" />
+			<entry class="" argb="255,0,255,71" value="182" />
+			<entry class="" argb="255,0,255,66" value="183" />
+			<entry class="" argb="255,0,255,60" value="184" />
+			<entry class="" argb="255,0,255,54" value="185" />
+			<entry class="" argb="255,0,255,49" value="186" />
+			<entry class="" argb="255,0,255,43" value="187" />
+			<entry class="" argb="255,0,255,37" value="188" />
+			<entry class="" argb="255,0,255,31" value="189" />
+			<entry class="" argb="255,0,255,26" value="190" />
+			<entry class="" argb="255,0,255,20" value="191" />
+			<entry class="" argb="255,0,255,14" value="192" />
+			<entry class="" argb="255,0,255,9" value="193" />
+			<entry class="" argb="255,0,255,3" value="194" />
+			<entry class="" argb="255,2,255,0" value="195" />
+			<entry class="" argb="255,8,255,0" value="196" />
+			<entry class="" argb="255,13,255,0" value="197" />
+			<entry class="" argb="255,19,255,0" value="198" />
+			<entry class="" argb="255,25,255,0" value="199" />
+			<entry class="" argb="255,30,255,0" value="200" />
+			<entry class="" argb="255,36,255,0" value="201" />
+			<entry class="" argb="255,42,255,0" value="202" />
+			<entry class="" argb="255,48,255,0" value="203" />
+			<entry class="" argb="255,53,255,0" value="204" />
+			<entry class="" argb="255,59,255,0" value="205" />
+			<entry class="" argb="255,65,255,0" value="206" />
+			<entry class="" argb="255,71,255,0" value="207" />
+			<entry class="" argb="255,76,255,0" value="208" />
+			<entry class="" argb="255,82,255,0" value="209" />
+			<entry class="" argb="255,88,255,0" value="210" />
+			<entry class="" argb="255,93,255,0" value="211" />
+			<entry class="" argb="255,99,255,0" value="212" />
+			<entry class="" argb="255,105,255,0" value="213" />
+			<entry class="" argb="255,111,255,0" value="214" />
+			<entry class="" argb="255,116,255,0" value="215" />
+			<entry class="" argb="255,122,255,0" value="216" />
+			<entry class="" argb="255,128,255,0" value="217" />
+			<entry class="" argb="255,133,255,0" value="218" />
+			<entry class="" argb="255,139,255,0" value="219" />
+			<entry class="" argb="255,145,255,0" value="220" />
+			<entry class="" argb="255,151,255,0" value="221" />
+			<entry class="" argb="255,156,255,0" value="222" />
+			<entry class="" argb="255,162,255,0" value="223" />
+			<entry class="" argb="255,168,255,0" value="224" />
+			<entry class="" argb="255,173,255,0" value="225" />
+			<entry class="" argb="255,179,255,0" value="226" />
+			<entry class="" argb="255,185,255,0" value="227" />
+			<entry class="" argb="255,191,255,0" value="228" />
+			<entry class="" argb="255,196,255,0" value="229" />
+			<entry class="" argb="255,202,255,0" value="230" />
+			<entry class="" argb="255,208,255,0" value="231" />
+			<entry class="" argb="255,214,255,0" value="232" />
+			<entry class="" argb="255,219,255,0" value="233" />
+			<entry class="" argb="255,225,255,0" value="234" />
+			<entry class="" argb="255,231,255,0" value="235" />
+			<entry class="" argb="255,236,255,0" value="236" />
+			<entry class="" argb="255,242,255,0" value="237" />
+			<entry class="" argb="255,248,255,0" value="238" />
+			<entry class="" argb="255,254,255,0" value="239" />
+			<entry class="" argb="255,255,250,0" value="240" />
+			<entry class="" argb="255,255,244,0" value="241" />
+			<entry class="" argb="255,255,238,0" value="242" />
+			<entry class="" argb="255,255,233,0" value="243" />
+			<entry class="" argb="255,255,227,0" value="244" />
+			<entry class="" argb="255,255,221,0" value="245" />
+			<entry class="" argb="255,255,215,0" value="246" />
+			<entry class="" argb="255,255,210,0" value="247" />
+			<entry class="" argb="255,255,204,0" value="248" />
+			<entry class="" argb="255,255,198,0" value="249" />
+			<entry class="" argb="255,255,193,0" value="250" />
+			<entry class="" argb="255,255,187,0" value="251" />
+			<entry class="" argb="255,255,181,0" value="252" />
+			<entry class="" argb="255,255,175,0" value="253" />
+			<entry class="" argb="255,255,170,0" value="254" />
+			<entry class="" argb="255,255,170,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="plasma" interpolate="false">
+		<table>
+			<entry class="" argb="255,2,19,7" value="0" />
+			<entry class="" argb="255,2,19,7" value="1" />
+			<entry class="" argb="255,3,20,11" value="2" />
+			<entry class="" argb="255,4,22,15" value="3" />
+			<entry class="" argb="255,5,25,19" value="4" />
+			<entry class="" argb="255,6,29,22" value="5" />
+			<entry class="" argb="255,7,33,26" value="6" />
+			<entry class="" argb="255,8,38,30" value="7" />
+			<entry class="" argb="255,9,44,34" value="8" />
+			<entry class="" argb="255,13,51,39" value="9" />
+			<entry class="" argb="255,11,58,43" value="10" />
+			<entry class="" argb="255,13,65,47" value="11" />
+			<entry class="" argb="255,14,73,51" value="12" />
+			<entry class="" argb="255,15,81,55" value="13" />
+			<entry class="" argb="255,16,89,59" value="14" />
+			<entry class="" argb="255,17,98,63" value="15" />
+			<entry class="" argb="255,18,106,67" value="16" />
+			<entry class="" argb="255,19,115,71" value="17" />
+			<entry class="" argb="255,21,124,75" value="18" />
+			<entry class="" argb="255,22,132,78" value="19" />
+			<entry class="" argb="255,23,140,82" value="20" />
+			<entry class="" argb="255,24,148,86" value="21" />
+			<entry class="" argb="255,25,155,90" value="22" />
+			<entry class="" argb="255,26,162,93" value="23" />
+			<entry class="" argb="255,27,169,97" value="24" />
+			<entry class="" argb="255,28,175,100" value="25" />
+			<entry class="" argb="255,30,180,103" value="26" />
+			<entry class="" argb="255,31,184,107" value="27" />
+			<entry class="" argb="255,32,188,110" value="28" />
+			<entry class="" argb="255,33,191,113" value="29" />
+			<entry class="" argb="255,34,193,116" value="30" />
+			<entry class="" argb="255,35,194,119" value="31" />
+			<entry class="" argb="255,36,195,122" value="32" />
+			<entry class="" argb="255,37,194,125" value="33" />
+			<entry class="" argb="255,38,193,128" value="34" />
+			<entry class="" argb="255,39,191,130" value="35" />
+			<entry class="" argb="255,39,188,133" value="36" />
+			<entry class="" argb="255,40,184,136" value="37" />
+			<entry class="" argb="255,41,180,139" value="38" />
+			<entry class="" argb="255,42,175,141" value="39" />
+			<entry class="" argb="255,43,169,144" value="40" />
+			<entry class="" argb="255,44,162,147" value="41" />
+			<entry class="" argb="255,45,155,150" value="42" />
+			<entry class="" argb="255,46,148,153" value="43" />
+			<entry class="" argb="255,46,140,156" value="44" />
+			<entry class="" argb="255,47,132,159" value="45" />
+			<entry class="" argb="255,48,124,162" value="46" />
+			<entry class="" argb="255,49,115,165" value="47" />
+			<entry class="" argb="255,50,107,169" value="48" />
+			<entry class="" argb="255,51,98,172" value="49" />
+			<entry class="" argb="255,52,89,176" value="50" />
+			<entry class="" argb="255,53,81,180" value="51" />
+			<entry class="" argb="255,54,73,184" value="52" />
+			<entry class="" argb="255,55,65,188" value="53" />
+			<entry class="" argb="255,56,58,192" value="54" />
+			<entry class="" argb="255,57,51,196" value="55" />
+			<entry class="" argb="255,58,44,201" value="56" />
+			<entry class="" argb="255,59,38,205" value="57" />
+			<entry class="" argb="255,60,33,210" value="58" />
+			<entry class="" argb="255,61,29,215" value="59" />
+			<entry class="" argb="255,62,25,220" value="60" />
+			<entry class="" argb="255,63,22,225" value="61" />
+			<entry class="" argb="255,65,20,230" value="62" />
+			<entry class="" argb="255,66,19,235" value="63" />
+			<entry class="" argb="255,67,19,241" value="64" />
+			<entry class="" argb="255,68,19,246" value="65" />
+			<entry class="" argb="255,70,20,251" value="66" />
+			<entry class="" argb="255,71,22,253" value="67" />
+			<entry class="" argb="255,72,25,248" value="68" />
+			<entry class="" argb="255,74,29,243" value="69" />
+			<entry class="" argb="255,75,33,237" value="70" />
+			<entry class="" argb="255,77,38,232" value="71" />
+			<entry class="" argb="255,78,44,227" value="72" />
+			<entry class="" argb="255,79,51,222" value="73" />
+			<entry class="" argb="255,81,58,217" value="74" />
+			<entry class="" argb="255,82,65,212" value="75" />
+			<entry class="" argb="255,84,73,207" value="76" />
+			<entry class="" argb="255,85,81,202" value="77" />
+			<entry class="" argb="255,86,89,198" value="78" />
+			<entry class="" argb="255,88,98,194" value="79" />
+			<entry class="" argb="255,89,107,190" value="80" />
+			<entry class="" argb="255,90,115,186" value="81" />
+			<entry class="" argb="255,92,124,182" value="82" />
+			<entry class="" argb="255,93,132,179" value="83" />
+			<entry class="" argb="255,94,140,176" value="84" />
+			<entry class="" argb="255,95,148,172" value="85" />
+			<entry class="" argb="255,97,155,170" value="86" />
+			<entry class="" argb="255,98,162,167" value="87" />
+			<entry class="" argb="255,99,169,165" value="88" />
+			<entry class="" argb="255,100,175,162" value="89" />
+			<entry class="" argb="255,101,180,160" value="90" />
+			<entry class="" argb="255,102,184,158" value="91" />
+			<entry class="" argb="255,103,188,157" value="92" />
+			<entry class="" argb="255,103,191,155" value="93" />
+			<entry class="" argb="255,104,193,154" value="94" />
+			<entry class="" argb="255,105,194,152" value="95" />
+			<entry class="" argb="255,106,195,151" value="96" />
+			<entry class="" argb="255,107,194,150" value="97" />
+			<entry class="" argb="255,107,193,148" value="98" />
+			<entry class="" argb="255,108,191,147" value="99" />
+			<entry class="" argb="255,108,188,146" value="100" />
+			<entry class="" argb="255,109,184,144" value="101" />
+			<entry class="" argb="255,110,180,143" value="102" />
+			<entry class="" argb="255,110,175,141" value="103" />
+			<entry class="" argb="255,111,169,140" value="104" />
+			<entry class="" argb="255,111,162,138" value="105" />
+			<entry class="" argb="255,112,155,136" value="106" />
+			<entry class="" argb="255,113,148,134" value="107" />
+			<entry class="" argb="255,113,140,132" value="108" />
+			<entry class="" argb="255,114,132,129" value="109" />
+			<entry class="" argb="255,114,124,126" value="110" />
+			<entry class="" argb="255,115,115,123" value="111" />
+			<entry class="" argb="255,116,106,120" value="112" />
+			<entry class="" argb="255,117,98,116" value="113" />
+			<entry class="" argb="255,117,89,113" value="114" />
+			<entry class="" argb="255,118,81,108" value="115" />
+			<entry class="" argb="255,119,73,104" value="116" />
+			<entry class="" argb="255,120,65,99" value="117" />
+			<entry class="" argb="255,121,58,94" value="118" />
+			<entry class="" argb="255,122,51,89" value="119" />
+			<entry class="" argb="255,123,44,83" value="120" />
+			<entry class="" argb="255,124,38,78" value="121" />
+			<entry class="" argb="255,125,33,72" value="122" />
+			<entry class="" argb="255,127,29,65" value="123" />
+			<entry class="" argb="255,128,25,59" value="124" />
+			<entry class="" argb="255,129,22,53" value="125" />
+			<entry class="" argb="255,131,20,46" value="126" />
+			<entry class="" argb="255,132,19,39" value="127" />
+			<entry class="" argb="255,134,19,32" value="128" />
+			<entry class="" argb="255,135,19,25" value="129" />
+			<entry class="" argb="255,137,20,18" value="130" />
+			<entry class="" argb="255,138,22,11" value="131" />
+			<entry class="" argb="255,140,25,5" value="132" />
+			<entry class="" argb="255,142,29,253" value="133" />
+			<entry class="" argb="255,143,33,246" value="134" />
+			<entry class="" argb="255,145,38,239" value="135" />
+			<entry class="" argb="255,147,44,233" value="136" />
+			<entry class="" argb="255,149,51,227" value="137" />
+			<entry class="" argb="255,150,58,221" value="138" />
+			<entry class="" argb="255,152,65,215" value="139" />
+			<entry class="" argb="255,154,73,210" value="140" />
+			<entry class="" argb="255,155,81,205" value="141" />
+			<entry class="" argb="255,157,89,200" value="142" />
+			<entry class="" argb="255,158,98,195" value="143" />
+			<entry class="" argb="255,160,107,191" value="144" />
+			<entry class="" argb="255,161,115,188" value="145" />
+			<entry class="" argb="255,163,124,184" value="146" />
+			<entry class="" argb="255,164,132,181" value="147" />
+			<entry class="" argb="255,166,140,178" value="148" />
+			<entry class="" argb="255,167,148,176" value="149" />
+			<entry class="" argb="255,168,155,174" value="150" />
+			<entry class="" argb="255,169,162,172" value="151" />
+			<entry class="" argb="255,170,169,171" value="152" />
+			<entry class="" argb="255,171,175,170" value="153" />
+			<entry class="" argb="255,172,180,169" value="154" />
+			<entry class="" argb="255,173,184,169" value="155" />
+			<entry class="" argb="255,174,188,168" value="156" />
+			<entry class="" argb="255,174,191,168" value="157" />
+			<entry class="" argb="255,175,193,168" value="158" />
+			<entry class="" argb="255,175,194,168" value="159" />
+			<entry class="" argb="255,176,195,169" value="160" />
+			<entry class="" argb="255,176,194,169" value="161" />
+			<entry class="" argb="255,177,193,169" value="162" />
+			<entry class="" argb="255,177,191,169" value="163" />
+			<entry class="" argb="255,178,188,170" value="164" />
+			<entry class="" argb="255,178,184,170" value="165" />
+			<entry class="" argb="255,178,180,170" value="166" />
+			<entry class="" argb="255,178,175,169" value="167" />
+			<entry class="" argb="255,179,169,169" value="168" />
+			<entry class="" argb="255,179,162,168" value="169" />
+			<entry class="" argb="255,179,155,167" value="170" />
+			<entry class="" argb="255,180,148,166" value="171" />
+			<entry class="" argb="255,180,140,164" value="172" />
+			<entry class="" argb="255,180,132,162" value="173" />
+			<entry class="" argb="255,181,124,160" value="174" />
+			<entry class="" argb="255,181,115,157" value="175" />
+			<entry class="" argb="255,182,106,154" value="176" />
+			<entry class="" argb="255,182,98,150" value="177" />
+			<entry class="" argb="255,183,89,146" value="178" />
+			<entry class="" argb="255,184,81,141" value="179" />
+			<entry class="" argb="255,184,73,136" value="180" />
+			<entry class="" argb="255,185,65,131" value="181" />
+			<entry class="" argb="255,186,58,125" value="182" />
+			<entry class="" argb="255,187,51,119" value="183" />
+			<entry class="" argb="255,188,44,112" value="184" />
+			<entry class="" argb="255,190,38,106" value="185" />
+			<entry class="" argb="255,191,33,98" value="186" />
+			<entry class="" argb="255,192,29,91" value="187" />
+			<entry class="" argb="255,194,25,83" value="188" />
+			<entry class="" argb="255,195,22,75" value="189" />
+			<entry class="" argb="255,197,20,67" value="190" />
+			<entry class="" argb="255,198,19,58" value="191" />
+			<entry class="" argb="255,200,19,50" value="192" />
+			<entry class="" argb="255,202,19,41" value="193" />
+			<entry class="" argb="255,204,20,33" value="194" />
+			<entry class="" argb="255,206,22,24" value="195" />
+			<entry class="" argb="255,208,25,16" value="196" />
+			<entry class="" argb="255,210,29,8" value="197" />
+			<entry class="" argb="255,212,33,255" value="198" />
+			<entry class="" argb="255,214,38,247" value="199" />
+			<entry class="" argb="255,216,44,239" value="200" />
+			<entry class="" argb="255,218,51,232" value="201" />
+			<entry class="" argb="255,220,58,225" value="202" />
+			<entry class="" argb="255,222,65,219" value="203" />
+			<entry class="" argb="255,224,73,213" value="204" />
+			<entry class="" argb="255,225,81,207" value="205" />
+			<entry class="" argb="255,227,89,202" value="206" />
+			<entry class="" argb="255,229,98,197" value="207" />
+			<entry class="" argb="255,231,107,193" value="208" />
+			<entry class="" argb="255,232,115,189" value="209" />
+			<entry class="" argb="255,234,124,186" value="210" />
+			<entry class="" argb="255,236,132,183" value="211" />
+			<entry class="" argb="255,237,140,181" value="212" />
+			<entry class="" argb="255,238,148,179" value="213" />
+			<entry class="" argb="255,239,155,178" value="214" />
+			<entry class="" argb="255,241,162,177" value="215" />
+			<entry class="" argb="255,242,169,177" value="216" />
+			<entry class="" argb="255,242,175,177" value="217" />
+			<entry class="" argb="255,243,180,178" value="218" />
+			<entry class="" argb="255,244,184,179" value="219" />
+			<entry class="" argb="255,245,188,180" value="220" />
+			<entry class="" argb="255,245,191,181" value="221" />
+			<entry class="" argb="255,246,193,183" value="222" />
+			<entry class="" argb="255,246,194,184" value="223" />
+			<entry class="" argb="255,246,195,186" value="224" />
+			<entry class="" argb="255,246,194,188" value="225" />
+			<entry class="" argb="255,246,193,190" value="226" />
+			<entry class="" argb="255,247,191,192" value="227" />
+			<entry class="" argb="255,247,188,193" value="228" />
+			<entry class="" argb="255,247,184,195" value="229" />
+			<entry class="" argb="255,247,180,196" value="230" />
+			<entry class="" argb="255,247,175,197" value="231" />
+			<entry class="" argb="255,247,169,198" value="232" />
+			<entry class="" argb="255,247,162,198" value="233" />
+			<entry class="" argb="255,247,155,198" value="234" />
+			<entry class="" argb="255,247,148,198" value="235" />
+			<entry class="" argb="255,247,140,197" value="236" />
+			<entry class="" argb="255,247,132,195" value="237" />
+			<entry class="" argb="255,247,124,193" value="238" />
+			<entry class="" argb="255,247,115,191" value="239" />
+			<entry class="" argb="255,248,106,188" value="240" />
+			<entry class="" argb="255,248,98,184" value="241" />
+			<entry class="" argb="255,248,89,180" value="242" />
+			<entry class="" argb="255,249,81,175" value="243" />
+			<entry class="" argb="255,250,73,169" value="244" />
+			<entry class="" argb="255,251,65,163" value="245" />
+			<entry class="" argb="255,251,58,156" value="246" />
+			<entry class="" argb="255,252,51,149" value="247" />
+			<entry class="" argb="255,254,44,142" value="248" />
+			<entry class="" argb="255,255,38,133" value="249" />
+			<entry class="" argb="255,254,33,125" value="250" />
+			<entry class="" argb="255,252,29,116" value="251" />
+			<entry class="" argb="255,251,25,107" value="252" />
+			<entry class="" argb="255,249,22,97" value="253" />
+			<entry class="" argb="255,247,20,87" value="254" />
+			<entry class="" argb="255,247,20,87" value="255" />
+		</table>
+	</palette>
+
+	<palette name="prism" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,3,0,0" value="1" />
+			<entry class="" argb="255,7,0,0" value="2" />
+			<entry class="" argb="255,11,0,0" value="3" />
+			<entry class="" argb="255,15,0,0" value="4" />
+			<entry class="" argb="255,19,0,0" value="5" />
+			<entry class="" argb="255,22,0,0" value="6" />
+			<entry class="" argb="255,26,0,0" value="7" />
+			<entry class="" argb="255,30,0,0" value="8" />
+			<entry class="" argb="255,34,0,0" value="9" />
+			<entry class="" argb="255,38,0,0" value="10" />
+			<entry class="" argb="255,41,0,0" value="11" />
+			<entry class="" argb="255,45,0,0" value="12" />
+			<entry class="" argb="255,49,0,0" value="13" />
+			<entry class="" argb="255,53,0,0" value="14" />
+			<entry class="" argb="255,57,0,0" value="15" />
+			<entry class="" argb="255,60,0,0" value="16" />
+			<entry class="" argb="255,64,0,0" value="17" />
+			<entry class="" argb="255,68,0,0" value="18" />
+			<entry class="" argb="255,72,0,0" value="19" />
+			<entry class="" argb="255,76,0,0" value="20" />
+			<entry class="" argb="255,79,0,0" value="21" />
+			<entry class="" argb="255,83,0,0" value="22" />
+			<entry class="" argb="255,87,0,0" value="23" />
+			<entry class="" argb="255,91,0,0" value="24" />
+			<entry class="" argb="255,95,0,0" value="25" />
+			<entry class="" argb="255,98,0,0" value="26" />
+			<entry class="" argb="255,102,0,0" value="27" />
+			<entry class="" argb="255,106,0,0" value="28" />
+			<entry class="" argb="255,110,0,0" value="29" />
+			<entry class="" argb="255,114,0,0" value="30" />
+			<entry class="" argb="255,117,0,0" value="31" />
+			<entry class="" argb="255,121,0,0" value="32" />
+			<entry class="" argb="255,125,0,0" value="33" />
+			<entry class="" argb="255,129,0,0" value="34" />
+			<entry class="" argb="255,133,0,0" value="35" />
+			<entry class="" argb="255,137,0,0" value="36" />
+			<entry class="" argb="255,140,0,0" value="37" />
+			<entry class="" argb="255,144,0,0" value="38" />
+			<entry class="" argb="255,148,0,0" value="39" />
+			<entry class="" argb="255,152,0,0" value="40" />
+			<entry class="" argb="255,156,0,0" value="41" />
+			<entry class="" argb="255,159,0,0" value="42" />
+			<entry class="" argb="255,163,0,0" value="43" />
+			<entry class="" argb="255,167,0,0" value="44" />
+			<entry class="" argb="255,171,0,0" value="45" />
+			<entry class="" argb="255,175,0,0" value="46" />
+			<entry class="" argb="255,178,0,0" value="47" />
+			<entry class="" argb="255,182,0,0" value="48" />
+			<entry class="" argb="255,186,0,0" value="49" />
+			<entry class="" argb="255,190,0,0" value="50" />
+			<entry class="" argb="255,194,0,0" value="51" />
+			<entry class="" argb="255,197,0,0" value="52" />
+			<entry class="" argb="255,201,0,0" value="53" />
+			<entry class="" argb="255,205,0,0" value="54" />
+			<entry class="" argb="255,209,0,0" value="55" />
+			<entry class="" argb="255,213,0,0" value="56" />
+			<entry class="" argb="255,216,0,0" value="57" />
+			<entry class="" argb="255,220,0,0" value="58" />
+			<entry class="" argb="255,224,0,0" value="59" />
+			<entry class="" argb="255,228,0,0" value="60" />
+			<entry class="" argb="255,232,0,0" value="61" />
+			<entry class="" argb="255,235,0,0" value="62" />
+			<entry class="" argb="255,239,0,0" value="63" />
+			<entry class="" argb="255,243,0,0" value="64" />
+			<entry class="" argb="255,247,3,0" value="65" />
+			<entry class="" argb="255,251,7,0" value="66" />
+			<entry class="" argb="255,255,11,0" value="67" />
+			<entry class="" argb="255,251,15,0" value="68" />
+			<entry class="" argb="255,247,19,0" value="69" />
+			<entry class="" argb="255,243,23,0" value="70" />
+			<entry class="" argb="255,239,27,0" value="71" />
+			<entry class="" argb="255,235,31,0" value="72" />
+			<entry class="" argb="255,230,35,0" value="73" />
+			<entry class="" argb="255,226,39,0" value="74" />
+			<entry class="" argb="255,222,43,0" value="75" />
+			<entry class="" argb="255,218,47,0" value="76" />
+			<entry class="" argb="255,214,51,0" value="77" />
+			<entry class="" argb="255,210,55,0" value="78" />
+			<entry class="" argb="255,205,59,0" value="79" />
+			<entry class="" argb="255,201,63,0" value="80" />
+			<entry class="" argb="255,197,67,0" value="81" />
+			<entry class="" argb="255,193,71,0" value="82" />
+			<entry class="" argb="255,189,75,0" value="83" />
+			<entry class="" argb="255,184,79,0" value="84" />
+			<entry class="" argb="255,180,83,0" value="85" />
+			<entry class="" argb="255,176,87,0" value="86" />
+			<entry class="" argb="255,172,91,0" value="87" />
+			<entry class="" argb="255,168,95,0" value="88" />
+			<entry class="" argb="255,164,99,0" value="89" />
+			<entry class="" argb="255,159,103,0" value="90" />
+			<entry class="" argb="255,155,107,0" value="91" />
+			<entry class="" argb="255,151,111,0" value="92" />
+			<entry class="" argb="255,147,115,0" value="93" />
+			<entry class="" argb="255,143,119,0" value="94" />
+			<entry class="" argb="255,138,123,0" value="95" />
+			<entry class="" argb="255,134,127,0" value="96" />
+			<entry class="" argb="255,130,131,0" value="97" />
+			<entry class="" argb="255,126,135,0" value="98" />
+			<entry class="" argb="255,122,139,0" value="99" />
+			<entry class="" argb="255,118,143,0" value="100" />
+			<entry class="" argb="255,113,147,0" value="101" />
+			<entry class="" argb="255,109,151,0" value="102" />
+			<entry class="" argb="255,105,155,0" value="103" />
+			<entry class="" argb="255,101,159,0" value="104" />
+			<entry class="" argb="255,97,163,0" value="105" />
+			<entry class="" argb="255,92,167,0" value="106" />
+			<entry class="" argb="255,88,171,0" value="107" />
+			<entry class="" argb="255,84,175,0" value="108" />
+			<entry class="" argb="255,80,179,0" value="109" />
+			<entry class="" argb="255,76,183,0" value="110" />
+			<entry class="" argb="255,72,187,0" value="111" />
+			<entry class="" argb="255,67,191,0" value="112" />
+			<entry class="" argb="255,63,195,0" value="113" />
+			<entry class="" argb="255,59,199,0" value="114" />
+			<entry class="" argb="255,55,203,0" value="115" />
+			<entry class="" argb="255,51,207,0" value="116" />
+			<entry class="" argb="255,46,211,0" value="117" />
+			<entry class="" argb="255,42,215,0" value="118" />
+			<entry class="" argb="255,38,219,0" value="119" />
+			<entry class="" argb="255,34,223,0" value="120" />
+			<entry class="" argb="255,30,227,0" value="121" />
+			<entry class="" argb="255,26,231,0" value="122" />
+			<entry class="" argb="255,21,235,0" value="123" />
+			<entry class="" argb="255,17,239,0" value="124" />
+			<entry class="" argb="255,13,243,0" value="125" />
+			<entry class="" argb="255,9,247,0" value="126" />
+			<entry class="" argb="255,5,251,3" value="127" />
+			<entry class="" argb="255,0,255,7" value="128" />
+			<entry class="" argb="255,0,251,11" value="129" />
+			<entry class="" argb="255,0,247,15" value="130" />
+			<entry class="" argb="255,0,243,19" value="131" />
+			<entry class="" argb="255,0,239,23" value="132" />
+			<entry class="" argb="255,0,235,27" value="133" />
+			<entry class="" argb="255,0,231,30" value="134" />
+			<entry class="" argb="255,0,227,34" value="135" />
+			<entry class="" argb="255,0,223,38" value="136" />
+			<entry class="" argb="255,0,219,42" value="137" />
+			<entry class="" argb="255,0,215,46" value="138" />
+			<entry class="" argb="255,0,211,50" value="139" />
+			<entry class="" argb="255,0,207,54" value="140" />
+			<entry class="" argb="255,0,203,57" value="141" />
+			<entry class="" argb="255,0,199,61" value="142" />
+			<entry class="" argb="255,0,195,65" value="143" />
+			<entry class="" argb="255,0,191,69" value="144" />
+			<entry class="" argb="255,0,187,73" value="145" />
+			<entry class="" argb="255,0,183,77" value="146" />
+			<entry class="" argb="255,0,179,81" value="147" />
+			<entry class="" argb="255,0,175,85" value="148" />
+			<entry class="" argb="255,0,170,88" value="149" />
+			<entry class="" argb="255,0,166,92" value="150" />
+			<entry class="" argb="255,0,162,96" value="151" />
+			<entry class="" argb="255,0,158,100" value="152" />
+			<entry class="" argb="255,0,154,104" value="153" />
+			<entry class="" argb="255,0,150,108" value="154" />
+			<entry class="" argb="255,0,146,112" value="155" />
+			<entry class="" argb="255,0,142,115" value="156" />
+			<entry class="" argb="255,0,138,119" value="157" />
+			<entry class="" argb="255,0,134,123" value="158" />
+			<entry class="" argb="255,0,130,127" value="159" />
+			<entry class="" argb="255,0,126,131" value="160" />
+			<entry class="" argb="255,0,122,135" value="161" />
+			<entry class="" argb="255,0,118,139" value="162" />
+			<entry class="" argb="255,0,114,142" value="163" />
+			<entry class="" argb="255,0,110,146" value="164" />
+			<entry class="" argb="255,0,106,150" value="165" />
+			<entry class="" argb="255,0,102,154" value="166" />
+			<entry class="" argb="255,0,98,158" value="167" />
+			<entry class="" argb="255,0,94,162" value="168" />
+			<entry class="" argb="255,0,90,166" value="169" />
+			<entry class="" argb="255,0,85,170" value="170" />
+			<entry class="" argb="255,0,81,173" value="171" />
+			<entry class="" argb="255,0,77,177" value="172" />
+			<entry class="" argb="255,0,73,181" value="173" />
+			<entry class="" argb="255,0,69,185" value="174" />
+			<entry class="" argb="255,0,65,189" value="175" />
+			<entry class="" argb="255,0,61,193" value="176" />
+			<entry class="" argb="255,0,57,197" value="177" />
+			<entry class="" argb="255,0,53,200" value="178" />
+			<entry class="" argb="255,0,49,204" value="179" />
+			<entry class="" argb="255,0,45,208" value="180" />
+			<entry class="" argb="255,0,41,212" value="181" />
+			<entry class="" argb="255,0,37,216" value="182" />
+			<entry class="" argb="255,0,33,220" value="183" />
+			<entry class="" argb="255,0,29,224" value="184" />
+			<entry class="" argb="255,0,25,227" value="185" />
+			<entry class="" argb="255,0,21,231" value="186" />
+			<entry class="" argb="255,0,17,235" value="187" />
+			<entry class="" argb="255,0,13,239" value="188" />
+			<entry class="" argb="255,0,9,243" value="189" />
+			<entry class="" argb="255,0,5,247" value="190" />
+			<entry class="" argb="255,0,0,251" value="191" />
+			<entry class="" argb="255,0,0,255" value="192" />
+			<entry class="" argb="255,0,0,251" value="193" />
+			<entry class="" argb="255,0,0,247" value="194" />
+			<entry class="" argb="255,0,0,243" value="195" />
+			<entry class="" argb="255,0,0,239" value="196" />
+			<entry class="" argb="255,0,0,235" value="197" />
+			<entry class="" argb="255,0,0,231" value="198" />
+			<entry class="" argb="255,0,0,227" value="199" />
+			<entry class="" argb="255,0,0,223" value="200" />
+			<entry class="" argb="255,0,0,219" value="201" />
+			<entry class="" argb="255,0,0,215" value="202" />
+			<entry class="" argb="255,0,0,211" value="203" />
+			<entry class="" argb="255,0,0,207" value="204" />
+			<entry class="" argb="255,0,0,203" value="205" />
+			<entry class="" argb="255,0,0,199" value="206" />
+			<entry class="" argb="255,0,0,195" value="207" />
+			<entry class="" argb="255,0,0,191" value="208" />
+			<entry class="" argb="255,0,0,187" value="209" />
+			<entry class="" argb="255,0,0,183" value="210" />
+			<entry class="" argb="255,0,0,179" value="211" />
+			<entry class="" argb="255,0,0,175" value="212" />
+			<entry class="" argb="255,0,0,170" value="213" />
+			<entry class="" argb="255,0,0,166" value="214" />
+			<entry class="" argb="255,0,0,162" value="215" />
+			<entry class="" argb="255,0,0,158" value="216" />
+			<entry class="" argb="255,0,0,154" value="217" />
+			<entry class="" argb="255,0,0,150" value="218" />
+			<entry class="" argb="255,0,0,146" value="219" />
+			<entry class="" argb="255,0,0,142" value="220" />
+			<entry class="" argb="255,0,0,138" value="221" />
+			<entry class="" argb="255,0,0,134" value="222" />
+			<entry class="" argb="255,0,0,130" value="223" />
+			<entry class="" argb="255,0,0,126" value="224" />
+			<entry class="" argb="255,0,0,122" value="225" />
+			<entry class="" argb="255,0,0,118" value="226" />
+			<entry class="" argb="255,0,0,114" value="227" />
+			<entry class="" argb="255,0,0,110" value="228" />
+			<entry class="" argb="255,0,0,106" value="229" />
+			<entry class="" argb="255,0,0,102" value="230" />
+			<entry class="" argb="255,0,0,98" value="231" />
+			<entry class="" argb="255,0,0,94" value="232" />
+			<entry class="" argb="255,0,0,90" value="233" />
+			<entry class="" argb="255,0,0,85" value="234" />
+			<entry class="" argb="255,0,0,81" value="235" />
+			<entry class="" argb="255,0,0,77" value="236" />
+			<entry class="" argb="255,0,0,73" value="237" />
+			<entry class="" argb="255,0,0,69" value="238" />
+			<entry class="" argb="255,0,0,65" value="239" />
+			<entry class="" argb="255,0,0,61" value="240" />
+			<entry class="" argb="255,0,0,57" value="241" />
+			<entry class="" argb="255,0,0,53" value="242" />
+			<entry class="" argb="255,0,0,49" value="243" />
+			<entry class="" argb="255,0,0,45" value="244" />
+			<entry class="" argb="255,0,0,41" value="245" />
+			<entry class="" argb="255,0,0,37" value="246" />
+			<entry class="" argb="255,0,0,33" value="247" />
+			<entry class="" argb="255,0,0,29" value="248" />
+			<entry class="" argb="255,0,0,25" value="249" />
+			<entry class="" argb="255,0,0,21" value="250" />
+			<entry class="" argb="255,0,0,17" value="251" />
+			<entry class="" argb="255,0,0,13" value="252" />
+			<entry class="" argb="255,0,0,9" value="253" />
+			<entry class="" argb="255,0,0,5" value="254" />
+			<entry class="" argb="255,0,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="rainbow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,4,0,3" value="1" />
+			<entry class="" argb="255,9,0,7" value="2" />
+			<entry class="" argb="255,13,0,10" value="3" />
+			<entry class="" argb="255,18,0,14" value="4" />
+			<entry class="" argb="255,22,0,19" value="5" />
+			<entry class="" argb="255,27,0,23" value="6" />
+			<entry class="" argb="255,31,0,28" value="7" />
+			<entry class="" argb="255,36,0,32" value="8" />
+			<entry class="" argb="255,40,0,38" value="9" />
+			<entry class="" argb="255,45,0,43" value="10" />
+			<entry class="" argb="255,50,0,48" value="11" />
+			<entry class="" argb="255,54,0,53" value="12" />
+			<entry class="" argb="255,58,0,59" value="13" />
+			<entry class="" argb="255,61,0,63" value="14" />
+			<entry class="" argb="255,64,0,68" value="15" />
+			<entry class="" argb="255,68,0,72" value="16" />
+			<entry class="" argb="255,69,0,77" value="17" />
+			<entry class="" argb="255,72,0,81" value="18" />
+			<entry class="" argb="255,74,0,86" value="19" />
+			<entry class="" argb="255,77,0,91" value="20" />
+			<entry class="" argb="255,79,0,95" value="21" />
+			<entry class="" argb="255,80,0,100" value="22" />
+			<entry class="" argb="255,82,0,104" value="23" />
+			<entry class="" argb="255,83,0,109" value="24" />
+			<entry class="" argb="255,85,0,113" value="25" />
+			<entry class="" argb="255,84,0,118" value="26" />
+			<entry class="" argb="255,86,0,122" value="27" />
+			<entry class="" argb="255,87,0,127" value="28" />
+			<entry class="" argb="255,88,0,132" value="29" />
+			<entry class="" argb="255,86,0,136" value="30" />
+			<entry class="" argb="255,87,0,141" value="31" />
+			<entry class="" argb="255,87,0,145" value="32" />
+			<entry class="" argb="255,87,0,150" value="33" />
+			<entry class="" argb="255,85,0,154" value="34" />
+			<entry class="" argb="255,84,0,159" value="35" />
+			<entry class="" argb="255,84,0,163" value="36" />
+			<entry class="" argb="255,84,0,168" value="37" />
+			<entry class="" argb="255,83,0,173" value="38" />
+			<entry class="" argb="255,79,0,177" value="39" />
+			<entry class="" argb="255,78,0,182" value="40" />
+			<entry class="" argb="255,77,0,186" value="41" />
+			<entry class="" argb="255,76,0,191" value="42" />
+			<entry class="" argb="255,71,0,195" value="43" />
+			<entry class="" argb="255,70,0,200" value="44" />
+			<entry class="" argb="255,68,0,204" value="45" />
+			<entry class="" argb="255,66,0,209" value="46" />
+			<entry class="" argb="255,60,0,214" value="47" />
+			<entry class="" argb="255,58,0,218" value="48" />
+			<entry class="" argb="255,55,0,223" value="49" />
+			<entry class="" argb="255,53,0,227" value="50" />
+			<entry class="" argb="255,46,0,232" value="51" />
+			<entry class="" argb="255,43,0,236" value="52" />
+			<entry class="" argb="255,40,0,241" value="53" />
+			<entry class="" argb="255,36,0,245" value="54" />
+			<entry class="" argb="255,33,0,250" value="55" />
+			<entry class="" argb="255,25,0,255" value="56" />
+			<entry class="" argb="255,21,0,255" value="57" />
+			<entry class="" argb="255,16,0,255" value="58" />
+			<entry class="" argb="255,12,0,255" value="59" />
+			<entry class="" argb="255,4,0,255" value="60" />
+			<entry class="" argb="255,0,0,255" value="61" />
+			<entry class="" argb="255,0,4,255" value="62" />
+			<entry class="" argb="255,0,8,255" value="63" />
+			<entry class="" argb="255,0,16,255" value="64" />
+			<entry class="" argb="255,0,21,255" value="65" />
+			<entry class="" argb="255,0,25,255" value="66" />
+			<entry class="" argb="255,0,29,255" value="67" />
+			<entry class="" argb="255,0,38,255" value="68" />
+			<entry class="" argb="255,0,42,255" value="69" />
+			<entry class="" argb="255,0,46,255" value="70" />
+			<entry class="" argb="255,0,51,255" value="71" />
+			<entry class="" argb="255,0,55,255" value="72" />
+			<entry class="" argb="255,0,63,255" value="73" />
+			<entry class="" argb="255,0,67,255" value="74" />
+			<entry class="" argb="255,0,72,255" value="75" />
+			<entry class="" argb="255,0,76,255" value="76" />
+			<entry class="" argb="255,0,84,255" value="77" />
+			<entry class="" argb="255,0,89,255" value="78" />
+			<entry class="" argb="255,0,93,255" value="79" />
+			<entry class="" argb="255,0,97,255" value="80" />
+			<entry class="" argb="255,0,106,255" value="81" />
+			<entry class="" argb="255,0,110,255" value="82" />
+			<entry class="" argb="255,0,114,255" value="83" />
+			<entry class="" argb="255,0,119,255" value="84" />
+			<entry class="" argb="255,0,127,255" value="85" />
+			<entry class="" argb="255,0,131,255" value="86" />
+			<entry class="" argb="255,0,135,255" value="87" />
+			<entry class="" argb="255,0,140,255" value="88" />
+			<entry class="" argb="255,0,144,255" value="89" />
+			<entry class="" argb="255,0,152,255" value="90" />
+			<entry class="" argb="255,0,157,255" value="91" />
+			<entry class="" argb="255,0,161,255" value="92" />
+			<entry class="" argb="255,0,165,255" value="93" />
+			<entry class="" argb="255,0,174,255" value="94" />
+			<entry class="" argb="255,0,178,255" value="95" />
+			<entry class="" argb="255,0,182,255" value="96" />
+			<entry class="" argb="255,0,187,255" value="97" />
+			<entry class="" argb="255,0,195,255" value="98" />
+			<entry class="" argb="255,0,199,255" value="99" />
+			<entry class="" argb="255,0,203,255" value="100" />
+			<entry class="" argb="255,0,208,255" value="101" />
+			<entry class="" argb="255,0,216,255" value="102" />
+			<entry class="" argb="255,0,220,255" value="103" />
+			<entry class="" argb="255,0,225,255" value="104" />
+			<entry class="" argb="255,0,229,255" value="105" />
+			<entry class="" argb="255,0,233,255" value="106" />
+			<entry class="" argb="255,0,242,255" value="107" />
+			<entry class="" argb="255,0,246,255" value="108" />
+			<entry class="" argb="255,0,250,255" value="109" />
+			<entry class="" argb="255,0,255,255" value="110" />
+			<entry class="" argb="255,0,255,246" value="111" />
+			<entry class="" argb="255,0,255,242" value="112" />
+			<entry class="" argb="255,0,255,238" value="113" />
+			<entry class="" argb="255,0,255,233" value="114" />
+			<entry class="" argb="255,0,255,225" value="115" />
+			<entry class="" argb="255,0,255,220" value="116" />
+			<entry class="" argb="255,0,255,216" value="117" />
+			<entry class="" argb="255,0,255,212" value="118" />
+			<entry class="" argb="255,0,255,203" value="119" />
+			<entry class="" argb="255,0,255,199" value="120" />
+			<entry class="" argb="255,0,255,195" value="121" />
+			<entry class="" argb="255,0,255,191" value="122" />
+			<entry class="" argb="255,0,255,187" value="123" />
+			<entry class="" argb="255,0,255,178" value="124" />
+			<entry class="" argb="255,0,255,174" value="125" />
+			<entry class="" argb="255,0,255,170" value="126" />
+			<entry class="" argb="255,0,255,165" value="127" />
+			<entry class="" argb="255,0,255,157" value="128" />
+			<entry class="" argb="255,0,255,152" value="129" />
+			<entry class="" argb="255,0,255,148" value="130" />
+			<entry class="" argb="255,0,255,144" value="131" />
+			<entry class="" argb="255,0,255,135" value="132" />
+			<entry class="" argb="255,0,255,131" value="133" />
+			<entry class="" argb="255,0,255,127" value="134" />
+			<entry class="" argb="255,0,255,123" value="135" />
+			<entry class="" argb="255,0,255,114" value="136" />
+			<entry class="" argb="255,0,255,110" value="137" />
+			<entry class="" argb="255,0,255,106" value="138" />
+			<entry class="" argb="255,0,255,102" value="139" />
+			<entry class="" argb="255,0,255,97" value="140" />
+			<entry class="" argb="255,0,255,89" value="141" />
+			<entry class="" argb="255,0,255,84" value="142" />
+			<entry class="" argb="255,0,255,80" value="143" />
+			<entry class="" argb="255,0,255,76" value="144" />
+			<entry class="" argb="255,0,255,67" value="145" />
+			<entry class="" argb="255,0,255,63" value="146" />
+			<entry class="" argb="255,0,255,59" value="147" />
+			<entry class="" argb="255,0,255,55" value="148" />
+			<entry class="" argb="255,0,255,46" value="149" />
+			<entry class="" argb="255,0,255,42" value="150" />
+			<entry class="" argb="255,0,255,38" value="151" />
+			<entry class="" argb="255,0,255,34" value="152" />
+			<entry class="" argb="255,0,255,25" value="153" />
+			<entry class="" argb="255,0,255,21" value="154" />
+			<entry class="" argb="255,0,255,16" value="155" />
+			<entry class="" argb="255,0,255,12" value="156" />
+			<entry class="" argb="255,0,255,8" value="157" />
+			<entry class="" argb="255,0,255,0" value="158" />
+			<entry class="" argb="255,4,255,0" value="159" />
+			<entry class="" argb="255,8,255,0" value="160" />
+			<entry class="" argb="255,12,255,0" value="161" />
+			<entry class="" argb="255,21,255,0" value="162" />
+			<entry class="" argb="255,25,255,0" value="163" />
+			<entry class="" argb="255,29,255,0" value="164" />
+			<entry class="" argb="255,33,255,0" value="165" />
+			<entry class="" argb="255,42,255,0" value="166" />
+			<entry class="" argb="255,46,255,0" value="167" />
+			<entry class="" argb="255,51,255,0" value="168" />
+			<entry class="" argb="255,55,255,0" value="169" />
+			<entry class="" argb="255,63,255,0" value="170" />
+			<entry class="" argb="255,67,255,0" value="171" />
+			<entry class="" argb="255,72,255,0" value="172" />
+			<entry class="" argb="255,76,255,0" value="173" />
+			<entry class="" argb="255,80,255,0" value="174" />
+			<entry class="" argb="255,89,255,0" value="175" />
+			<entry class="" argb="255,93,255,0" value="176" />
+			<entry class="" argb="255,97,255,0" value="177" />
+			<entry class="" argb="255,101,255,0" value="178" />
+			<entry class="" argb="255,110,255,0" value="179" />
+			<entry class="" argb="255,114,255,0" value="180" />
+			<entry class="" argb="255,119,255,0" value="181" />
+			<entry class="" argb="255,123,255,0" value="182" />
+			<entry class="" argb="255,131,255,0" value="183" />
+			<entry class="" argb="255,135,255,0" value="184" />
+			<entry class="" argb="255,140,255,0" value="185" />
+			<entry class="" argb="255,144,255,0" value="186" />
+			<entry class="" argb="255,153,255,0" value="187" />
+			<entry class="" argb="255,157,255,0" value="188" />
+			<entry class="" argb="255,161,255,0" value="189" />
+			<entry class="" argb="255,165,255,0" value="190" />
+			<entry class="" argb="255,169,255,0" value="191" />
+			<entry class="" argb="255,178,255,0" value="192" />
+			<entry class="" argb="255,182,255,0" value="193" />
+			<entry class="" argb="255,187,255,0" value="194" />
+			<entry class="" argb="255,191,255,0" value="195" />
+			<entry class="" argb="255,199,255,0" value="196" />
+			<entry class="" argb="255,203,255,0" value="197" />
+			<entry class="" argb="255,208,255,0" value="198" />
+			<entry class="" argb="255,212,255,0" value="199" />
+			<entry class="" argb="255,221,255,0" value="200" />
+			<entry class="" argb="255,225,255,0" value="201" />
+			<entry class="" argb="255,229,255,0" value="202" />
+			<entry class="" argb="255,233,255,0" value="203" />
+			<entry class="" argb="255,242,255,0" value="204" />
+			<entry class="" argb="255,246,255,0" value="205" />
+			<entry class="" argb="255,250,255,0" value="206" />
+			<entry class="" argb="255,255,255,0" value="207" />
+			<entry class="" argb="255,255,250,0" value="208" />
+			<entry class="" argb="255,255,242,0" value="209" />
+			<entry class="" argb="255,255,238,0" value="210" />
+			<entry class="" argb="255,255,233,0" value="211" />
+			<entry class="" argb="255,255,229,0" value="212" />
+			<entry class="" argb="255,255,221,0" value="213" />
+			<entry class="" argb="255,255,216,0" value="214" />
+			<entry class="" argb="255,255,212,0" value="215" />
+			<entry class="" argb="255,255,208,0" value="216" />
+			<entry class="" argb="255,255,199,0" value="217" />
+			<entry class="" argb="255,255,195,0" value="218" />
+			<entry class="" argb="255,255,191,0" value="219" />
+			<entry class="" argb="255,255,187,0" value="220" />
+			<entry class="" argb="255,255,178,0" value="221" />
+			<entry class="" argb="255,255,174,0" value="222" />
+			<entry class="" argb="255,255,170,0" value="223" />
+			<entry class="" argb="255,255,165,0" value="224" />
+			<entry class="" argb="255,255,161,0" value="225" />
+			<entry class="" argb="255,255,153,0" value="226" />
+			<entry class="" argb="255,255,148,0" value="227" />
+			<entry class="" argb="255,255,144,0" value="228" />
+			<entry class="" argb="255,255,140,0" value="229" />
+			<entry class="" argb="255,255,131,0" value="230" />
+			<entry class="" argb="255,255,127,0" value="231" />
+			<entry class="" argb="255,255,123,0" value="232" />
+			<entry class="" argb="255,255,119,0" value="233" />
+			<entry class="" argb="255,255,110,0" value="234" />
+			<entry class="" argb="255,255,106,0" value="235" />
+			<entry class="" argb="255,255,102,0" value="236" />
+			<entry class="" argb="255,255,97,0" value="237" />
+			<entry class="" argb="255,255,89,0" value="238" />
+			<entry class="" argb="255,255,85,0" value="239" />
+			<entry class="" argb="255,255,80,0" value="240" />
+			<entry class="" argb="255,255,76,0" value="241" />
+			<entry class="" argb="255,255,72,0" value="242" />
+			<entry class="" argb="255,255,63,0" value="243" />
+			<entry class="" argb="255,255,59,0" value="244" />
+			<entry class="" argb="255,255,55,0" value="245" />
+			<entry class="" argb="255,255,51,0" value="246" />
+			<entry class="" argb="255,255,42,0" value="247" />
+			<entry class="" argb="255,255,38,0" value="248" />
+			<entry class="" argb="255,255,34,0" value="249" />
+			<entry class="" argb="255,255,29,0" value="250" />
+			<entry class="" argb="255,255,21,0" value="251" />
+			<entry class="" argb="255,255,17,0" value="252" />
+			<entry class="" argb="255,255,12,0" value="253" />
+			<entry class="" argb="255,255,8,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-purple" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,3,0,0" value="2" />
+			<entry class="" argb="255,6,0,0" value="3" />
+			<entry class="" argb="255,10,0,0" value="4" />
+			<entry class="" argb="255,13,0,0" value="5" />
+			<entry class="" argb="255,17,0,0" value="6" />
+			<entry class="" argb="255,20,0,0" value="7" />
+			<entry class="" argb="255,24,0,1" value="8" />
+			<entry class="" argb="255,27,0,1" value="9" />
+			<entry class="" argb="255,30,0,1" value="10" />
+			<entry class="" argb="255,33,0,1" value="11" />
+			<entry class="" argb="255,36,0,2" value="12" />
+			<entry class="" argb="255,39,0,2" value="13" />
+			<entry class="" argb="255,42,0,2" value="14" />
+			<entry class="" argb="255,45,0,2" value="15" />
+			<entry class="" argb="255,48,0,2" value="16" />
+			<entry class="" argb="255,51,0,2" value="17" />
+			<entry class="" argb="255,54,0,2" value="18" />
+			<entry class="" argb="255,57,0,2" value="19" />
+			<entry class="" argb="255,60,0,3" value="20" />
+			<entry class="" argb="255,63,0,3" value="21" />
+			<entry class="" argb="255,66,0,3" value="22" />
+			<entry class="" argb="255,69,0,3" value="23" />
+			<entry class="" argb="255,72,0,4" value="24" />
+			<entry class="" argb="255,75,0,4" value="25" />
+			<entry class="" argb="255,78,0,4" value="26" />
+			<entry class="" argb="255,81,0,4" value="27" />
+			<entry class="" argb="255,84,0,4" value="28" />
+			<entry class="" argb="255,85,0,5" value="29" />
+			<entry class="" argb="255,86,0,6" value="30" />
+			<entry class="" argb="255,87,0,7" value="31" />
+			<entry class="" argb="255,88,0,9" value="32" />
+			<entry class="" argb="255,90,0,9" value="33" />
+			<entry class="" argb="255,92,0,10" value="34" />
+			<entry class="" argb="255,94,0,11" value="35" />
+			<entry class="" argb="255,96,0,12" value="36" />
+			<entry class="" argb="255,97,0,13" value="37" />
+			<entry class="" argb="255,98,0,14" value="38" />
+			<entry class="" argb="255,99,0,15" value="39" />
+			<entry class="" argb="255,100,0,17" value="40" />
+			<entry class="" argb="255,102,0,17" value="41" />
+			<entry class="" argb="255,104,0,18" value="42" />
+			<entry class="" argb="255,106,0,18" value="43" />
+			<entry class="" argb="255,108,0,19" value="44" />
+			<entry class="" argb="255,109,0,20" value="45" />
+			<entry class="" argb="255,110,0,22" value="46" />
+			<entry class="" argb="255,111,0,23" value="47" />
+			<entry class="" argb="255,112,0,25" value="48" />
+			<entry class="" argb="255,114,0,25" value="49" />
+			<entry class="" argb="255,116,0,26" value="50" />
+			<entry class="" argb="255,118,0,26" value="51" />
+			<entry class="" argb="255,120,0,27" value="52" />
+			<entry class="" argb="255,121,0,28" value="53" />
+			<entry class="" argb="255,122,0,29" value="54" />
+			<entry class="" argb="255,123,0,30" value="55" />
+			<entry class="" argb="255,124,0,32" value="56" />
+			<entry class="" argb="255,126,0,32" value="57" />
+			<entry class="" argb="255,128,0,33" value="58" />
+			<entry class="" argb="255,130,0,33" value="59" />
+			<entry class="" argb="255,132,0,34" value="60" />
+			<entry class="" argb="255,133,0,35" value="61" />
+			<entry class="" argb="255,134,0,36" value="62" />
+			<entry class="" argb="255,135,0,37" value="63" />
+			<entry class="" argb="255,136,0,39" value="64" />
+			<entry class="" argb="255,138,1,39" value="65" />
+			<entry class="" argb="255,140,2,40" value="66" />
+			<entry class="" argb="255,142,3,40" value="67" />
+			<entry class="" argb="255,144,4,41" value="68" />
+			<entry class="" argb="255,145,4,42" value="69" />
+			<entry class="" argb="255,146,4,43" value="70" />
+			<entry class="" argb="255,147,4,44" value="71" />
+			<entry class="" argb="255,148,4,46" value="72" />
+			<entry class="" argb="255,150,4,46" value="73" />
+			<entry class="" argb="255,152,4,47" value="74" />
+			<entry class="" argb="255,154,4,48" value="75" />
+			<entry class="" argb="255,156,4,49" value="76" />
+			<entry class="" argb="255,157,4,50" value="77" />
+			<entry class="" argb="255,158,4,51" value="78" />
+			<entry class="" argb="255,159,4,52" value="79" />
+			<entry class="" argb="255,160,4,54" value="80" />
+			<entry class="" argb="255,162,5,54" value="81" />
+			<entry class="" argb="255,164,6,53" value="82" />
+			<entry class="" argb="255,166,7,53" value="83" />
+			<entry class="" argb="255,168,8,52" value="84" />
+			<entry class="" argb="255,169,8,54" value="85" />
+			<entry class="" argb="255,170,8,56" value="86" />
+			<entry class="" argb="255,171,8,58" value="87" />
+			<entry class="" argb="255,172,8,60" value="88" />
+			<entry class="" argb="255,174,8,60" value="89" />
+			<entry class="" argb="255,176,8,61" value="90" />
+			<entry class="" argb="255,178,8,62" value="91" />
+			<entry class="" argb="255,180,8,63" value="92" />
+			<entry class="" argb="255,181,8,64" value="93" />
+			<entry class="" argb="255,182,8,65" value="94" />
+			<entry class="" argb="255,183,8,66" value="95" />
+			<entry class="" argb="255,184,8,68" value="96" />
+			<entry class="" argb="255,185,8,69" value="97" />
+			<entry class="" argb="255,186,8,70" value="98" />
+			<entry class="" argb="255,187,8,71" value="99" />
+			<entry class="" argb="255,188,8,73" value="100" />
+			<entry class="" argb="255,189,8,74" value="101" />
+			<entry class="" argb="255,190,8,75" value="102" />
+			<entry class="" argb="255,191,8,76" value="103" />
+			<entry class="" argb="255,192,8,77" value="104" />
+			<entry class="" argb="255,193,8,78" value="105" />
+			<entry class="" argb="255,194,8,79" value="106" />
+			<entry class="" argb="255,195,8,80" value="107" />
+			<entry class="" argb="255,196,8,82" value="108" />
+			<entry class="" argb="255,198,9,82" value="109" />
+			<entry class="" argb="255,200,10,83" value="110" />
+			<entry class="" argb="255,202,11,83" value="111" />
+			<entry class="" argb="255,204,12,84" value="112" />
+			<entry class="" argb="255,205,12,85" value="113" />
+			<entry class="" argb="255,206,12,86" value="114" />
+			<entry class="" argb="255,207,12,87" value="115" />
+			<entry class="" argb="255,208,12,89" value="116" />
+			<entry class="" argb="255,209,12,90" value="117" />
+			<entry class="" argb="255,210,12,91" value="118" />
+			<entry class="" argb="255,211,12,92" value="119" />
+			<entry class="" argb="255,212,12,94" value="120" />
+			<entry class="" argb="255,213,12,95" value="121" />
+			<entry class="" argb="255,214,12,96" value="122" />
+			<entry class="" argb="255,215,12,97" value="123" />
+			<entry class="" argb="255,216,12,98" value="124" />
+			<entry class="" argb="255,217,12,99" value="125" />
+			<entry class="" argb="255,218,12,100" value="126" />
+			<entry class="" argb="255,219,12,101" value="127" />
+			<entry class="" argb="255,220,12,103" value="128" />
+			<entry class="" argb="255,222,12,103" value="129" />
+			<entry class="" argb="255,224,12,104" value="130" />
+			<entry class="" argb="255,226,12,105" value="131" />
+			<entry class="" argb="255,228,12,106" value="132" />
+			<entry class="" argb="255,229,13,107" value="133" />
+			<entry class="" argb="255,230,14,108" value="134" />
+			<entry class="" argb="255,231,15,109" value="135" />
+			<entry class="" argb="255,232,16,110" value="136" />
+			<entry class="" argb="255,233,16,111" value="137" />
+			<entry class="" argb="255,234,16,112" value="138" />
+			<entry class="" argb="255,235,16,113" value="139" />
+			<entry class="" argb="255,236,16,115" value="140" />
+			<entry class="" argb="255,237,16,116" value="141" />
+			<entry class="" argb="255,238,16,117" value="142" />
+			<entry class="" argb="255,239,16,118" value="143" />
+			<entry class="" argb="255,240,16,119" value="144" />
+			<entry class="" argb="255,241,16,120" value="145" />
+			<entry class="" argb="255,242,16,121" value="146" />
+			<entry class="" argb="255,243,16,122" value="147" />
+			<entry class="" argb="255,244,16,124" value="148" />
+			<entry class="" argb="255,246,16,124" value="149" />
+			<entry class="" argb="255,248,16,125" value="150" />
+			<entry class="" argb="255,250,16,125" value="151" />
+			<entry class="" argb="255,252,16,126" value="152" />
+			<entry class="" argb="255,252,17,127" value="153" />
+			<entry class="" argb="255,252,18,129" value="154" />
+			<entry class="" argb="255,252,19,131" value="155" />
+			<entry class="" argb="255,252,20,133" value="156" />
+			<entry class="" argb="255,252,20,134" value="157" />
+			<entry class="" argb="255,252,20,136" value="158" />
+			<entry class="" argb="255,252,20,138" value="159" />
+			<entry class="" argb="255,252,20,140" value="160" />
+			<entry class="" argb="255,252,21,141" value="161" />
+			<entry class="" argb="255,252,22,143" value="162" />
+			<entry class="" argb="255,252,23,144" value="163" />
+			<entry class="" argb="255,252,24,146" value="164" />
+			<entry class="" argb="255,252,24,147" value="165" />
+			<entry class="" argb="255,252,24,149" value="166" />
+			<entry class="" argb="255,252,24,151" value="167" />
+			<entry class="" argb="255,252,24,153" value="168" />
+			<entry class="" argb="255,252,25,154" value="169" />
+			<entry class="" argb="255,252,26,156" value="170" />
+			<entry class="" argb="255,252,27,157" value="171" />
+			<entry class="" argb="255,252,28,159" value="172" />
+			<entry class="" argb="255,252,30,160" value="173" />
+			<entry class="" argb="255,252,32,161" value="174" />
+			<entry class="" argb="255,252,34,162" value="175" />
+			<entry class="" argb="255,252,36,164" value="176" />
+			<entry class="" argb="255,252,38,165" value="177" />
+			<entry class="" argb="255,252,40,166" value="178" />
+			<entry class="" argb="255,252,42,167" value="179" />
+			<entry class="" argb="255,252,44,169" value="180" />
+			<entry class="" argb="255,252,46,170" value="181" />
+			<entry class="" argb="255,252,48,172" value="182" />
+			<entry class="" argb="255,252,50,173" value="183" />
+			<entry class="" argb="255,252,52,175" value="184" />
+			<entry class="" argb="255,252,54,176" value="185" />
+			<entry class="" argb="255,252,56,177" value="186" />
+			<entry class="" argb="255,252,58,178" value="187" />
+			<entry class="" argb="255,252,60,180" value="188" />
+			<entry class="" argb="255,252,61,181" value="189" />
+			<entry class="" argb="255,252,62,183" value="190" />
+			<entry class="" argb="255,252,63,184" value="191" />
+			<entry class="" argb="255,252,64,186" value="192" />
+			<entry class="" argb="255,252,66,187" value="193" />
+			<entry class="" argb="255,252,68,188" value="194" />
+			<entry class="" argb="255,252,70,189" value="195" />
+			<entry class="" argb="255,252,72,191" value="196" />
+			<entry class="" argb="255,252,74,192" value="197" />
+			<entry class="" argb="255,252,76,193" value="198" />
+			<entry class="" argb="255,252,78,194" value="199" />
+			<entry class="" argb="255,252,80,196" value="200" />
+			<entry class="" argb="255,252,82,197" value="201" />
+			<entry class="" argb="255,252,84,199" value="202" />
+			<entry class="" argb="255,252,86,200" value="203" />
+			<entry class="" argb="255,252,88,202" value="204" />
+			<entry class="" argb="255,252,90,203" value="205" />
+			<entry class="" argb="255,252,92,204" value="206" />
+			<entry class="" argb="255,252,94,205" value="207" />
+			<entry class="" argb="255,252,96,207" value="208" />
+			<entry class="" argb="255,252,98,208" value="209" />
+			<entry class="" argb="255,252,100,209" value="210" />
+			<entry class="" argb="255,252,102,210" value="211" />
+			<entry class="" argb="255,252,104,212" value="212" />
+			<entry class="" argb="255,252,107,213" value="213" />
+			<entry class="" argb="255,252,110,214" value="214" />
+			<entry class="" argb="255,252,113,215" value="215" />
+			<entry class="" argb="255,252,116,217" value="216" />
+			<entry class="" argb="255,252,119,218" value="217" />
+			<entry class="" argb="255,252,122,219" value="218" />
+			<entry class="" argb="255,252,125,220" value="219" />
+			<entry class="" argb="255,252,128,221" value="220" />
+			<entry class="" argb="255,252,131,222" value="221" />
+			<entry class="" argb="255,252,134,223" value="222" />
+			<entry class="" argb="255,252,137,224" value="223" />
+			<entry class="" argb="255,252,140,226" value="224" />
+			<entry class="" argb="255,252,143,227" value="225" />
+			<entry class="" argb="255,252,146,228" value="226" />
+			<entry class="" argb="255,252,149,229" value="227" />
+			<entry class="" argb="255,252,152,230" value="228" />
+			<entry class="" argb="255,252,155,231" value="229" />
+			<entry class="" argb="255,252,158,232" value="230" />
+			<entry class="" argb="255,252,161,233" value="231" />
+			<entry class="" argb="255,252,164,235" value="232" />
+			<entry class="" argb="255,252,167,236" value="233" />
+			<entry class="" argb="255,252,170,237" value="234" />
+			<entry class="" argb="255,252,173,238" value="235" />
+			<entry class="" argb="255,252,176,239" value="236" />
+			<entry class="" argb="255,252,180,240" value="237" />
+			<entry class="" argb="255,252,184,241" value="238" />
+			<entry class="" argb="255,252,188,242" value="239" />
+			<entry class="" argb="255,252,192,243" value="240" />
+			<entry class="" argb="255,252,197,243" value="241" />
+			<entry class="" argb="255,252,202,244" value="242" />
+			<entry class="" argb="255,252,207,245" value="243" />
+			<entry class="" argb="255,252,212,246" value="244" />
+			<entry class="" argb="255,252,217,246" value="245" />
+			<entry class="" argb="255,252,222,247" value="246" />
+			<entry class="" argb="255,252,227,248" value="247" />
+			<entry class="" argb="255,252,232,249" value="248" />
+			<entry class="" argb="255,252,237,249" value="249" />
+			<entry class="" argb="255,252,242,250" value="250" />
+			<entry class="" argb="255,252,247,251" value="251" />
+			<entry class="" argb="255,252,252,252" value="252" />
+			<entry class="" argb="255,252,252,252" value="253" />
+			<entry class="" argb="255,253,253,253" value="254" />
+			<entry class="" argb="255,254,254,254" value="255" />
+		</table>
+	</palette>
+
+	<palette name="std-gamma-II" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,5" value="1" />
+			<entry class="" argb="255,0,0,10" value="2" />
+			<entry class="" argb="255,0,0,15" value="3" />
+			<entry class="" argb="255,0,0,20" value="4" />
+			<entry class="" argb="255,0,0,26" value="5" />
+			<entry class="" argb="255,0,0,31" value="6" />
+			<entry class="" argb="255,0,0,36" value="7" />
+			<entry class="" argb="255,0,0,41" value="8" />
+			<entry class="" argb="255,0,0,46" value="9" />
+			<entry class="" argb="255,0,0,52" value="10" />
+			<entry class="" argb="255,0,0,57" value="11" />
+			<entry class="" argb="255,0,0,62" value="12" />
+			<entry class="" argb="255,0,0,67" value="13" />
+			<entry class="" argb="255,0,0,72" value="14" />
+			<entry class="" argb="255,0,0,78" value="15" />
+			<entry class="" argb="255,0,0,83" value="16" />
+			<entry class="" argb="255,0,0,88" value="17" />
+			<entry class="" argb="255,0,0,93" value="18" />
+			<entry class="" argb="255,0,0,98" value="19" />
+			<entry class="" argb="255,0,0,104" value="20" />
+			<entry class="" argb="255,0,0,109" value="21" />
+			<entry class="" argb="255,0,0,114" value="22" />
+			<entry class="" argb="255,0,0,119" value="23" />
+			<entry class="" argb="255,0,0,124" value="24" />
+			<entry class="" argb="255,0,0,130" value="25" />
+			<entry class="" argb="255,0,0,135" value="26" />
+			<entry class="" argb="255,0,0,140" value="27" />
+			<entry class="" argb="255,0,0,145" value="28" />
+			<entry class="" argb="255,0,0,150" value="29" />
+			<entry class="" argb="255,0,0,156" value="30" />
+			<entry class="" argb="255,0,0,161" value="31" />
+			<entry class="" argb="255,0,0,166" value="32" />
+			<entry class="" argb="255,0,0,171" value="33" />
+			<entry class="" argb="255,0,0,176" value="34" />
+			<entry class="" argb="255,0,0,182" value="35" />
+			<entry class="" argb="255,0,0,187" value="36" />
+			<entry class="" argb="255,0,0,192" value="37" />
+			<entry class="" argb="255,0,0,197" value="38" />
+			<entry class="" argb="255,0,0,202" value="39" />
+			<entry class="" argb="255,0,0,208" value="40" />
+			<entry class="" argb="255,0,0,213" value="41" />
+			<entry class="" argb="255,0,0,218" value="42" />
+			<entry class="" argb="255,0,0,223" value="43" />
+			<entry class="" argb="255,0,0,228" value="44" />
+			<entry class="" argb="255,0,0,234" value="45" />
+			<entry class="" argb="255,0,0,239" value="46" />
+			<entry class="" argb="255,0,0,244" value="47" />
+			<entry class="" argb="255,4,0,249" value="48" />
+			<entry class="" argb="255,9,0,255" value="49" />
+			<entry class="" argb="255,14,0,250" value="50" />
+			<entry class="" argb="255,19,0,245" value="51" />
+			<entry class="" argb="255,23,0,239" value="52" />
+			<entry class="" argb="255,28,0,234" value="53" />
+			<entry class="" argb="255,33,0,228" value="54" />
+			<entry class="" argb="255,38,0,223" value="55" />
+			<entry class="" argb="255,42,0,218" value="56" />
+			<entry class="" argb="255,47,0,212" value="57" />
+			<entry class="" argb="255,52,0,207" value="58" />
+			<entry class="" argb="255,57,0,201" value="59" />
+			<entry class="" argb="255,61,0,196" value="60" />
+			<entry class="" argb="255,66,0,190" value="61" />
+			<entry class="" argb="255,71,0,185" value="62" />
+			<entry class="" argb="255,76,0,180" value="63" />
+			<entry class="" argb="255,81,0,174" value="64" />
+			<entry class="" argb="255,81,0,169" value="65" />
+			<entry class="" argb="255,81,0,163" value="66" />
+			<entry class="" argb="255,81,0,158" value="67" />
+			<entry class="" argb="255,81,0,152" value="68" />
+			<entry class="" argb="255,81,0,147" value="69" />
+			<entry class="" argb="255,81,0,142" value="70" />
+			<entry class="" argb="255,81,0,136" value="71" />
+			<entry class="" argb="255,80,0,131" value="72" />
+			<entry class="" argb="255,80,0,125" value="73" />
+			<entry class="" argb="255,80,0,120" value="74" />
+			<entry class="" argb="255,80,0,114" value="75" />
+			<entry class="" argb="255,80,0,109" value="76" />
+			<entry class="" argb="255,80,0,104" value="77" />
+			<entry class="" argb="255,80,0,98" value="78" />
+			<entry class="" argb="255,79,0,93" value="79" />
+			<entry class="" argb="255,84,0,87" value="80" />
+			<entry class="" argb="255,89,0,82" value="81" />
+			<entry class="" argb="255,94,0,76" value="82" />
+			<entry class="" argb="255,99,0,71" value="83" />
+			<entry class="" argb="255,104,0,66" value="84" />
+			<entry class="" argb="255,109,0,60" value="85" />
+			<entry class="" argb="255,114,0,55" value="86" />
+			<entry class="" argb="255,119,0,49" value="87" />
+			<entry class="" argb="255,124,0,44" value="88" />
+			<entry class="" argb="255,129,0,38" value="89" />
+			<entry class="" argb="255,134,0,33" value="90" />
+			<entry class="" argb="255,139,0,28" value="91" />
+			<entry class="" argb="255,144,0,22" value="92" />
+			<entry class="" argb="255,149,0,17" value="93" />
+			<entry class="" argb="255,154,0,11" value="94" />
+			<entry class="" argb="255,159,0,6" value="95" />
+			<entry class="" argb="255,164,0,0" value="96" />
+			<entry class="" argb="255,169,0,0" value="97" />
+			<entry class="" argb="255,174,0,0" value="98" />
+			<entry class="" argb="255,180,0,0" value="99" />
+			<entry class="" argb="255,185,0,0" value="100" />
+			<entry class="" argb="255,190,0,0" value="101" />
+			<entry class="" argb="255,196,0,0" value="102" />
+			<entry class="" argb="255,201,0,0" value="103" />
+			<entry class="" argb="255,206,0,0" value="104" />
+			<entry class="" argb="255,212,0,0" value="105" />
+			<entry class="" argb="255,217,0,0" value="106" />
+			<entry class="" argb="255,222,0,0" value="107" />
+			<entry class="" argb="255,228,0,0" value="108" />
+			<entry class="" argb="255,233,0,0" value="109" />
+			<entry class="" argb="255,255,0,0" value="110" />
+			<entry class="" argb="255,255,0,0" value="111" />
+			<entry class="" argb="255,255,0,0" value="112" />
+			<entry class="" argb="255,255,0,0" value="113" />
+			<entry class="" argb="255,255,5,0" value="114" />
+			<entry class="" argb="255,255,10,0" value="115" />
+			<entry class="" argb="255,255,16,0" value="116" />
+			<entry class="" argb="255,255,21,0" value="117" />
+			<entry class="" argb="255,255,27,0" value="118" />
+			<entry class="" argb="255,255,32,0" value="119" />
+			<entry class="" argb="255,255,37,0" value="120" />
+			<entry class="" argb="255,255,43,0" value="121" />
+			<entry class="" argb="255,255,48,0" value="122" />
+			<entry class="" argb="255,255,54,0" value="123" />
+			<entry class="" argb="255,255,59,0" value="124" />
+			<entry class="" argb="255,255,64,0" value="125" />
+			<entry class="" argb="255,255,70,0" value="126" />
+			<entry class="" argb="255,255,75,0" value="127" />
+			<entry class="" argb="255,255,81,0" value="128" />
+			<entry class="" argb="255,255,85,4" value="129" />
+			<entry class="" argb="255,255,90,9" value="130" />
+			<entry class="" argb="255,255,95,14" value="131" />
+			<entry class="" argb="255,255,100,19" value="132" />
+			<entry class="" argb="255,255,105,24" value="133" />
+			<entry class="" argb="255,255,109,28" value="134" />
+			<entry class="" argb="255,255,114,33" value="135" />
+			<entry class="" argb="255,255,119,38" value="136" />
+			<entry class="" argb="255,255,124,43" value="137" />
+			<entry class="" argb="255,255,129,48" value="138" />
+			<entry class="" argb="255,255,134,53" value="139" />
+			<entry class="" argb="255,255,138,57" value="140" />
+			<entry class="" argb="255,255,143,62" value="141" />
+			<entry class="" argb="255,255,148,67" value="142" />
+			<entry class="" argb="255,255,153,72" value="143" />
+			<entry class="" argb="255,255,158,77" value="144" />
+			<entry class="" argb="255,255,163,82" value="145" />
+			<entry class="" argb="255,255,163,77" value="146" />
+			<entry class="" argb="255,255,163,71" value="147" />
+			<entry class="" argb="255,255,163,65" value="148" />
+			<entry class="" argb="255,255,163,59" value="149" />
+			<entry class="" argb="255,255,163,53" value="150" />
+			<entry class="" argb="255,255,163,47" value="151" />
+			<entry class="" argb="255,255,163,41" value="152" />
+			<entry class="" argb="255,255,163,36" value="153" />
+			<entry class="" argb="255,255,163,30" value="154" />
+			<entry class="" argb="255,255,163,24" value="155" />
+			<entry class="" argb="255,255,163,18" value="156" />
+			<entry class="" argb="255,255,163,12" value="157" />
+			<entry class="" argb="255,255,163,6" value="158" />
+			<entry class="" argb="255,255,163,0" value="159" />
+			<entry class="" argb="255,255,163,0" value="160" />
+			<entry class="" argb="255,255,163,0" value="161" />
+			<entry class="" argb="255,255,163,0" value="162" />
+			<entry class="" argb="255,248,163,0" value="163" />
+			<entry class="" argb="255,240,163,0" value="164" />
+			<entry class="" argb="255,232,163,0" value="165" />
+			<entry class="" argb="255,225,163,0" value="166" />
+			<entry class="" argb="255,217,163,0" value="167" />
+			<entry class="" argb="255,209,163,0" value="168" />
+			<entry class="" argb="255,202,163,0" value="169" />
+			<entry class="" argb="255,194,163,0" value="170" />
+			<entry class="" argb="255,186,163,0" value="171" />
+			<entry class="" argb="255,179,163,0" value="172" />
+			<entry class="" argb="255,171,163,0" value="173" />
+			<entry class="" argb="255,163,163,0" value="174" />
+			<entry class="" argb="255,168,163,0" value="175" />
+			<entry class="" argb="255,173,163,0" value="176" />
+			<entry class="" argb="255,178,169,3" value="177" />
+			<entry class="" argb="255,183,175,6" value="178" />
+			<entry class="" argb="255,188,181,9" value="179" />
+			<entry class="" argb="255,193,187,12" value="180" />
+			<entry class="" argb="255,198,193,16" value="181" />
+			<entry class="" argb="255,203,199,19" value="182" />
+			<entry class="" argb="255,209,205,22" value="183" />
+			<entry class="" argb="255,214,212,25" value="184" />
+			<entry class="" argb="255,219,218,29" value="185" />
+			<entry class="" argb="255,224,224,32" value="186" />
+			<entry class="" argb="255,229,230,35" value="187" />
+			<entry class="" argb="255,234,236,38" value="188" />
+			<entry class="" argb="255,239,242,41" value="189" />
+			<entry class="" argb="255,244,248,45" value="190" />
+			<entry class="" argb="255,249,255,48" value="191" />
+			<entry class="" argb="255,255,255,51" value="192" />
+			<entry class="" argb="255,255,255,54" value="193" />
+			<entry class="" argb="255,255,255,58" value="194" />
+			<entry class="" argb="255,255,255,61" value="195" />
+			<entry class="" argb="255,255,255,64" value="196" />
+			<entry class="" argb="255,255,255,67" value="197" />
+			<entry class="" argb="255,255,255,71" value="198" />
+			<entry class="" argb="255,255,255,74" value="199" />
+			<entry class="" argb="255,255,255,77" value="200" />
+			<entry class="" argb="255,255,255,80" value="201" />
+			<entry class="" argb="255,255,255,83" value="202" />
+			<entry class="" argb="255,255,255,87" value="203" />
+			<entry class="" argb="255,255,255,90" value="204" />
+			<entry class="" argb="255,255,255,93" value="205" />
+			<entry class="" argb="255,255,255,96" value="206" />
+			<entry class="" argb="255,255,255,100" value="207" />
+			<entry class="" argb="255,255,255,103" value="208" />
+			<entry class="" argb="255,255,255,106" value="209" />
+			<entry class="" argb="255,255,255,109" value="210" />
+			<entry class="" argb="255,255,255,112" value="211" />
+			<entry class="" argb="255,255,255,116" value="212" />
+			<entry class="" argb="255,255,255,119" value="213" />
+			<entry class="" argb="255,255,255,122" value="214" />
+			<entry class="" argb="255,255,255,125" value="215" />
+			<entry class="" argb="255,255,255,129" value="216" />
+			<entry class="" argb="255,255,255,132" value="217" />
+			<entry class="" argb="255,255,255,135" value="218" />
+			<entry class="" argb="255,255,255,138" value="219" />
+			<entry class="" argb="255,255,255,142" value="220" />
+			<entry class="" argb="255,255,255,145" value="221" />
+			<entry class="" argb="255,255,255,148" value="222" />
+			<entry class="" argb="255,255,255,151" value="223" />
+			<entry class="" argb="255,255,255,154" value="224" />
+			<entry class="" argb="255,255,255,158" value="225" />
+			<entry class="" argb="255,255,255,161" value="226" />
+			<entry class="" argb="255,255,255,164" value="227" />
+			<entry class="" argb="255,255,255,167" value="228" />
+			<entry class="" argb="255,255,255,171" value="229" />
+			<entry class="" argb="255,255,255,174" value="230" />
+			<entry class="" argb="255,255,255,177" value="231" />
+			<entry class="" argb="255,255,255,180" value="232" />
+			<entry class="" argb="255,255,255,183" value="233" />
+			<entry class="" argb="255,255,255,187" value="234" />
+			<entry class="" argb="255,255,255,190" value="235" />
+			<entry class="" argb="255,255,255,193" value="236" />
+			<entry class="" argb="255,255,255,196" value="237" />
+			<entry class="" argb="255,255,255,200" value="238" />
+			<entry class="" argb="255,255,255,203" value="239" />
+			<entry class="" argb="255,255,255,206" value="240" />
+			<entry class="" argb="255,255,255,209" value="241" />
+			<entry class="" argb="255,255,255,213" value="242" />
+			<entry class="" argb="255,255,255,216" value="243" />
+			<entry class="" argb="255,255,255,219" value="244" />
+			<entry class="" argb="255,255,255,222" value="245" />
+			<entry class="" argb="255,255,255,225" value="246" />
+			<entry class="" argb="255,255,255,229" value="247" />
+			<entry class="" argb="255,255,255,232" value="248" />
+			<entry class="" argb="255,255,255,235" value="249" />
+			<entry class="" argb="255,255,255,238" value="250" />
+			<entry class="" argb="255,255,255,242" value="251" />
+			<entry class="" argb="255,255,255,245" value="252" />
+			<entry class="" argb="255,255,255,248" value="253" />
+			<entry class="" argb="255,255,255,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="steps" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,42,0" value="1" />
+			<entry class="" argb="255,0,85,0" value="2" />
+			<entry class="" argb="255,0,127,0" value="3" />
+			<entry class="" argb="255,0,170,0" value="4" />
+			<entry class="" argb="255,0,212,0" value="5" />
+			<entry class="" argb="255,0,255,0" value="6" />
+			<entry class="" argb="255,0,246,0" value="7" />
+			<entry class="" argb="255,0,236,0" value="8" />
+			<entry class="" argb="255,0,226,0" value="9" />
+			<entry class="" argb="255,0,216,0" value="10" />
+			<entry class="" argb="255,0,206,0" value="11" />
+			<entry class="" argb="255,0,197,0" value="12" />
+			<entry class="" argb="255,0,187,0" value="13" />
+			<entry class="" argb="255,0,177,0" value="14" />
+			<entry class="" argb="255,0,167,0" value="15" />
+			<entry class="" argb="255,0,157,0" value="16" />
+			<entry class="" argb="255,0,148,0" value="17" />
+			<entry class="" argb="255,0,138,0" value="18" />
+			<entry class="" argb="255,0,128,0" value="19" />
+			<entry class="" argb="255,0,118,0" value="20" />
+			<entry class="" argb="255,0,108,0" value="21" />
+			<entry class="" argb="255,0,99,0" value="22" />
+			<entry class="" argb="255,0,89,0" value="23" />
+			<entry class="" argb="255,0,79,0" value="24" />
+			<entry class="" argb="255,0,69,0" value="25" />
+			<entry class="" argb="255,0,59,0" value="26" />
+			<entry class="" argb="255,0,50,0" value="27" />
+			<entry class="" argb="255,0,40,0" value="28" />
+			<entry class="" argb="255,0,30,0" value="29" />
+			<entry class="" argb="255,0,20,0" value="30" />
+			<entry class="" argb="255,0,10,0" value="31" />
+			<entry class="" argb="255,0,0,0" value="32" />
+			<entry class="" argb="255,0,0,8" value="33" />
+			<entry class="" argb="255,0,0,16" value="34" />
+			<entry class="" argb="255,0,0,24" value="35" />
+			<entry class="" argb="255,0,0,32" value="36" />
+			<entry class="" argb="255,0,0,41" value="37" />
+			<entry class="" argb="255,0,0,49" value="38" />
+			<entry class="" argb="255,0,0,57" value="39" />
+			<entry class="" argb="255,0,0,65" value="40" />
+			<entry class="" argb="255,0,0,74" value="41" />
+			<entry class="" argb="255,0,0,82" value="42" />
+			<entry class="" argb="255,0,0,90" value="43" />
+			<entry class="" argb="255,0,0,98" value="44" />
+			<entry class="" argb="255,0,0,106" value="45" />
+			<entry class="" argb="255,0,0,115" value="46" />
+			<entry class="" argb="255,0,0,123" value="47" />
+			<entry class="" argb="255,0,0,131" value="48" />
+			<entry class="" argb="255,0,0,139" value="49" />
+			<entry class="" argb="255,0,0,148" value="50" />
+			<entry class="" argb="255,0,0,156" value="51" />
+			<entry class="" argb="255,0,0,164" value="52" />
+			<entry class="" argb="255,0,0,172" value="53" />
+			<entry class="" argb="255,0,0,180" value="54" />
+			<entry class="" argb="255,0,0,189" value="55" />
+			<entry class="" argb="255,0,0,197" value="56" />
+			<entry class="" argb="255,0,0,205" value="57" />
+			<entry class="" argb="255,0,0,213" value="58" />
+			<entry class="" argb="255,0,0,222" value="59" />
+			<entry class="" argb="255,0,0,230" value="60" />
+			<entry class="" argb="255,0,0,238" value="61" />
+			<entry class="" argb="255,0,0,246" value="62" />
+			<entry class="" argb="255,0,0,255" value="63" />
+			<entry class="" argb="255,0,0,0" value="64" />
+			<entry class="" argb="255,7,0,5" value="65" />
+			<entry class="" argb="255,15,0,10" value="66" />
+			<entry class="" argb="255,23,0,15" value="67" />
+			<entry class="" argb="255,31,0,21" value="68" />
+			<entry class="" argb="255,39,0,26" value="69" />
+			<entry class="" argb="255,47,0,31" value="70" />
+			<entry class="" argb="255,55,0,37" value="71" />
+			<entry class="" argb="255,63,0,42" value="72" />
+			<entry class="" argb="255,70,0,47" value="73" />
+			<entry class="" argb="255,78,0,53" value="74" />
+			<entry class="" argb="255,86,0,58" value="75" />
+			<entry class="" argb="255,94,0,63" value="76" />
+			<entry class="" argb="255,102,0,69" value="77" />
+			<entry class="" argb="255,110,0,74" value="78" />
+			<entry class="" argb="255,118,0,79" value="79" />
+			<entry class="" argb="255,126,0,85" value="80" />
+			<entry class="" argb="255,134,0,89" value="81" />
+			<entry class="" argb="255,142,0,94" value="82" />
+			<entry class="" argb="255,151,0,98" value="83" />
+			<entry class="" argb="255,159,0,103" value="84" />
+			<entry class="" argb="255,168,0,108" value="85" />
+			<entry class="" argb="255,176,0,112" value="86" />
+			<entry class="" argb="255,184,0,117" value="87" />
+			<entry class="" argb="255,193,0,121" value="88" />
+			<entry class="" argb="255,201,0,126" value="89" />
+			<entry class="" argb="255,210,0,131" value="90" />
+			<entry class="" argb="255,218,0,135" value="91" />
+			<entry class="" argb="255,226,0,140" value="92" />
+			<entry class="" argb="255,235,0,144" value="93" />
+			<entry class="" argb="255,243,0,149" value="94" />
+			<entry class="" argb="255,252,0,154" value="95" />
+			<entry class="" argb="255,0,0,0" value="96" />
+			<entry class="" argb="255,1,0,0" value="97" />
+			<entry class="" argb="255,2,0,0" value="98" />
+			<entry class="" argb="255,3,0,0" value="99" />
+			<entry class="" argb="255,4,0,0" value="100" />
+			<entry class="" argb="255,5,0,0" value="101" />
+			<entry class="" argb="255,6,0,0" value="102" />
+			<entry class="" argb="255,7,0,0" value="103" />
+			<entry class="" argb="255,8,0,0" value="104" />
+			<entry class="" argb="255,9,0,0" value="105" />
+			<entry class="" argb="255,10,0,0" value="106" />
+			<entry class="" argb="255,11,0,0" value="107" />
+			<entry class="" argb="255,12,0,0" value="108" />
+			<entry class="" argb="255,14,0,0" value="109" />
+			<entry class="" argb="255,16,0,0" value="110" />
+			<entry class="" argb="255,18,0,0" value="111" />
+			<entry class="" argb="255,20,0,0" value="112" />
+			<entry class="" argb="255,23,0,0" value="113" />
+			<entry class="" argb="255,25,0,0" value="114" />
+			<entry class="" argb="255,27,0,0" value="115" />
+			<entry class="" argb="255,29,0,0" value="116" />
+			<entry class="" argb="255,32,0,0" value="117" />
+			<entry class="" argb="255,34,0,0" value="118" />
+			<entry class="" argb="255,36,0,0" value="119" />
+			<entry class="" argb="255,38,0,0" value="120" />
+			<entry class="" argb="255,41,0,0" value="121" />
+			<entry class="" argb="255,44,0,0" value="122" />
+			<entry class="" argb="255,47,0,0" value="123" />
+			<entry class="" argb="255,50,0,0" value="124" />
+			<entry class="" argb="255,53,0,0" value="125" />
+			<entry class="" argb="255,56,0,0" value="126" />
+			<entry class="" argb="255,59,0,0" value="127" />
+			<entry class="" argb="255,63,0,0" value="128" />
+			<entry class="" argb="255,66,0,0" value="129" />
+			<entry class="" argb="255,69,0,0" value="130" />
+			<entry class="" argb="255,72,0,0" value="131" />
+			<entry class="" argb="255,75,0,0" value="132" />
+			<entry class="" argb="255,78,0,0" value="133" />
+			<entry class="" argb="255,82,0,1" value="134" />
+			<entry class="" argb="255,85,0,1" value="135" />
+			<entry class="" argb="255,89,0,1" value="136" />
+			<entry class="" argb="255,93,0,1" value="137" />
+			<entry class="" argb="255,97,0,1" value="138" />
+			<entry class="" argb="255,101,0,1" value="139" />
+			<entry class="" argb="255,105,0,1" value="140" />
+			<entry class="" argb="255,108,0,1" value="141" />
+			<entry class="" argb="255,112,0,1" value="142" />
+			<entry class="" argb="255,116,0,1" value="143" />
+			<entry class="" argb="255,120,0,1" value="144" />
+			<entry class="" argb="255,124,0,1" value="145" />
+			<entry class="" argb="255,128,1,1" value="146" />
+			<entry class="" argb="255,131,1,1" value="147" />
+			<entry class="" argb="255,135,1,1" value="148" />
+			<entry class="" argb="255,139,1,1" value="149" />
+			<entry class="" argb="255,143,1,1" value="150" />
+			<entry class="" argb="255,147,1,1" value="151" />
+			<entry class="" argb="255,151,1,1" value="152" />
+			<entry class="" argb="255,155,1,1" value="153" />
+			<entry class="" argb="255,159,1,1" value="154" />
+			<entry class="" argb="255,163,1,1" value="155" />
+			<entry class="" argb="255,167,1,1" value="156" />
+			<entry class="" argb="255,171,1,1" value="157" />
+			<entry class="" argb="255,175,1,1" value="158" />
+			<entry class="" argb="255,178,1,1" value="159" />
+			<entry class="" argb="255,181,1,1" value="160" />
+			<entry class="" argb="255,185,1,1" value="161" />
+			<entry class="" argb="255,188,1,1" value="162" />
+			<entry class="" argb="255,192,1,1" value="163" />
+			<entry class="" argb="255,195,1,1" value="164" />
+			<entry class="" argb="255,198,1,1" value="165" />
+			<entry class="" argb="255,202,1,1" value="166" />
+			<entry class="" argb="255,205,1,1" value="167" />
+			<entry class="" argb="255,209,1,1" value="168" />
+			<entry class="" argb="255,212,1,1" value="169" />
+			<entry class="" argb="255,216,1,2" value="170" />
+			<entry class="" argb="255,218,1,2" value="171" />
+			<entry class="" argb="255,220,1,2" value="172" />
+			<entry class="" argb="255,223,1,2" value="173" />
+			<entry class="" argb="255,225,1,2" value="174" />
+			<entry class="" argb="255,227,1,2" value="175" />
+			<entry class="" argb="255,230,1,2" value="176" />
+			<entry class="" argb="255,232,1,2" value="177" />
+			<entry class="" argb="255,234,1,2" value="178" />
+			<entry class="" argb="255,237,1,2" value="179" />
+			<entry class="" argb="255,239,1,2" value="180" />
+			<entry class="" argb="255,241,1,2" value="181" />
+			<entry class="" argb="255,244,2,2" value="182" />
+			<entry class="" argb="255,244,2,2" value="183" />
+			<entry class="" argb="255,245,2,2" value="184" />
+			<entry class="" argb="255,246,2,2" value="185" />
+			<entry class="" argb="255,247,2,2" value="186" />
+			<entry class="" argb="255,247,2,2" value="187" />
+			<entry class="" argb="255,248,2,2" value="188" />
+			<entry class="" argb="255,249,2,2" value="189" />
+			<entry class="" argb="255,250,2,2" value="190" />
+			<entry class="" argb="255,250,2,2" value="191" />
+			<entry class="" argb="255,251,2,2" value="192" />
+			<entry class="" argb="255,252,2,2" value="193" />
+			<entry class="" argb="255,253,2,2" value="194" />
+			<entry class="" argb="255,254,1,2" value="195" />
+			<entry class="" argb="255,254,1,2" value="196" />
+			<entry class="" argb="255,254,3,2" value="197" />
+			<entry class="" argb="255,254,5,2" value="198" />
+			<entry class="" argb="255,254,8,2" value="199" />
+			<entry class="" argb="255,254,10,2" value="200" />
+			<entry class="" argb="255,254,12,2" value="201" />
+			<entry class="" argb="255,254,15,2" value="202" />
+			<entry class="" argb="255,254,17,2" value="203" />
+			<entry class="" argb="255,254,19,2" value="204" />
+			<entry class="" argb="255,254,22,2" value="205" />
+			<entry class="" argb="255,254,24,2" value="206" />
+			<entry class="" argb="255,254,26,2" value="207" />
+			<entry class="" argb="255,254,29,2" value="208" />
+			<entry class="" argb="255,254,31,2" value="209" />
+			<entry class="" argb="255,254,33,2" value="210" />
+			<entry class="" argb="255,254,36,2" value="211" />
+			<entry class="" argb="255,254,36,2" value="212" />
+			<entry class="" argb="255,254,38,3" value="213" />
+			<entry class="" argb="255,254,40,4" value="214" />
+			<entry class="" argb="255,254,42,5" value="215" />
+			<entry class="" argb="255,255,45,7" value="216" />
+			<entry class="" argb="255,255,48,9" value="217" />
+			<entry class="" argb="255,255,51,12" value="218" />
+			<entry class="" argb="255,255,54,14" value="219" />
+			<entry class="" argb="255,255,58,17" value="220" />
+			<entry class="" argb="255,255,61,20" value="221" />
+			<entry class="" argb="255,255,64,23" value="222" />
+			<entry class="" argb="255,255,67,27" value="223" />
+			<entry class="" argb="255,255,70,30" value="224" />
+			<entry class="" argb="255,255,73,34" value="225" />
+			<entry class="" argb="255,255,77,39" value="226" />
+			<entry class="" argb="255,255,82,44" value="227" />
+			<entry class="" argb="255,255,87,49" value="228" />
+			<entry class="" argb="255,255,92,55" value="229" />
+			<entry class="" argb="255,255,96,60" value="230" />
+			<entry class="" argb="255,255,100,65" value="231" />
+			<entry class="" argb="255,255,104,71" value="232" />
+			<entry class="" argb="255,255,108,76" value="233" />
+			<entry class="" argb="255,255,113,82" value="234" />
+			<entry class="" argb="255,255,119,89" value="235" />
+			<entry class="" argb="255,255,125,97" value="236" />
+			<entry class="" argb="255,255,131,104" value="237" />
+			<entry class="" argb="255,255,138,112" value="238" />
+			<entry class="" argb="255,255,144,120" value="239" />
+			<entry class="" argb="255,255,151,128" value="240" />
+			<entry class="" argb="255,255,157,136" value="241" />
+			<entry class="" argb="255,255,164,145" value="242" />
+			<entry class="" argb="255,255,171,153" value="243" />
+			<entry class="" argb="255,255,178,162" value="244" />
+			<entry class="" argb="255,255,185,171" value="245" />
+			<entry class="" argb="255,255,193,180" value="246" />
+			<entry class="" argb="255,255,200,189" value="247" />
+			<entry class="" argb="255,255,208,198" value="248" />
+			<entry class="" argb="255,255,215,207" value="249" />
+			<entry class="" argb="255,255,223,217" value="250" />
+			<entry class="" argb="255,255,229,224" value="251" />
+			<entry class="" argb="255,255,235,232" value="252" />
+			<entry class="" argb="255,255,242,239" value="253" />
+			<entry class="" argb="255,255,248,247" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="stern-special" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,18,1,1" value="1" />
+			<entry class="" argb="255,36,2,3" value="2" />
+			<entry class="" argb="255,54,3,5" value="3" />
+			<entry class="" argb="255,72,4,7" value="4" />
+			<entry class="" argb="255,90,5,9" value="5" />
+			<entry class="" argb="255,108,6,11" value="6" />
+			<entry class="" argb="255,127,7,13" value="7" />
+			<entry class="" argb="255,145,8,15" value="8" />
+			<entry class="" argb="255,163,9,17" value="9" />
+			<entry class="" argb="255,181,10,19" value="10" />
+			<entry class="" argb="255,199,11,21" value="11" />
+			<entry class="" argb="255,217,12,23" value="12" />
+			<entry class="" argb="255,235,13,25" value="13" />
+			<entry class="" argb="255,254,14,27" value="14" />
+			<entry class="" argb="255,249,15,29" value="15" />
+			<entry class="" argb="255,244,16,31" value="16" />
+			<entry class="" argb="255,239,17,33" value="17" />
+			<entry class="" argb="255,234,18,35" value="18" />
+			<entry class="" argb="255,229,19,37" value="19" />
+			<entry class="" argb="255,223,20,39" value="20" />
+			<entry class="" argb="255,218,21,41" value="21" />
+			<entry class="" argb="255,213,22,43" value="22" />
+			<entry class="" argb="255,208,23,45" value="23" />
+			<entry class="" argb="255,203,24,47" value="24" />
+			<entry class="" argb="255,197,25,49" value="25" />
+			<entry class="" argb="255,192,26,51" value="26" />
+			<entry class="" argb="255,187,27,53" value="27" />
+			<entry class="" argb="255,182,28,55" value="28" />
+			<entry class="" argb="255,177,29,57" value="29" />
+			<entry class="" argb="255,172,30,59" value="30" />
+			<entry class="" argb="255,166,31,61" value="31" />
+			<entry class="" argb="255,161,32,63" value="32" />
+			<entry class="" argb="255,156,33,65" value="33" />
+			<entry class="" argb="255,151,34,67" value="34" />
+			<entry class="" argb="255,146,35,69" value="35" />
+			<entry class="" argb="255,140,36,71" value="36" />
+			<entry class="" argb="255,135,37,73" value="37" />
+			<entry class="" argb="255,130,38,75" value="38" />
+			<entry class="" argb="255,125,39,77" value="39" />
+			<entry class="" argb="255,120,40,79" value="40" />
+			<entry class="" argb="255,115,41,81" value="41" />
+			<entry class="" argb="255,109,42,83" value="42" />
+			<entry class="" argb="255,104,43,85" value="43" />
+			<entry class="" argb="255,99,44,87" value="44" />
+			<entry class="" argb="255,94,45,89" value="45" />
+			<entry class="" argb="255,89,46,91" value="46" />
+			<entry class="" argb="255,83,47,93" value="47" />
+			<entry class="" argb="255,78,48,95" value="48" />
+			<entry class="" argb="255,73,49,97" value="49" />
+			<entry class="" argb="255,68,50,99" value="50" />
+			<entry class="" argb="255,63,51,101" value="51" />
+			<entry class="" argb="255,58,52,103" value="52" />
+			<entry class="" argb="255,52,53,105" value="53" />
+			<entry class="" argb="255,47,54,107" value="54" />
+			<entry class="" argb="255,42,55,109" value="55" />
+			<entry class="" argb="255,37,56,111" value="56" />
+			<entry class="" argb="255,32,57,113" value="57" />
+			<entry class="" argb="255,26,58,115" value="58" />
+			<entry class="" argb="255,21,59,117" value="59" />
+			<entry class="" argb="255,16,60,119" value="60" />
+			<entry class="" argb="255,11,61,121" value="61" />
+			<entry class="" argb="255,6,62,123" value="62" />
+			<entry class="" argb="255,0,63,125" value="63" />
+			<entry class="" argb="255,64,64,127" value="64" />
+			<entry class="" argb="255,65,65,129" value="65" />
+			<entry class="" argb="255,66,66,131" value="66" />
+			<entry class="" argb="255,67,67,133" value="67" />
+			<entry class="" argb="255,68,68,135" value="68" />
+			<entry class="" argb="255,69,69,137" value="69" />
+			<entry class="" argb="255,70,70,139" value="70" />
+			<entry class="" argb="255,71,71,141" value="71" />
+			<entry class="" argb="255,72,72,143" value="72" />
+			<entry class="" argb="255,73,73,145" value="73" />
+			<entry class="" argb="255,74,74,147" value="74" />
+			<entry class="" argb="255,75,75,149" value="75" />
+			<entry class="" argb="255,76,76,151" value="76" />
+			<entry class="" argb="255,77,77,153" value="77" />
+			<entry class="" argb="255,78,78,155" value="78" />
+			<entry class="" argb="255,79,79,157" value="79" />
+			<entry class="" argb="255,80,80,159" value="80" />
+			<entry class="" argb="255,81,81,161" value="81" />
+			<entry class="" argb="255,82,82,163" value="82" />
+			<entry class="" argb="255,83,83,165" value="83" />
+			<entry class="" argb="255,84,84,167" value="84" />
+			<entry class="" argb="255,85,85,169" value="85" />
+			<entry class="" argb="255,86,86,171" value="86" />
+			<entry class="" argb="255,87,87,173" value="87" />
+			<entry class="" argb="255,88,88,175" value="88" />
+			<entry class="" argb="255,89,89,177" value="89" />
+			<entry class="" argb="255,90,90,179" value="90" />
+			<entry class="" argb="255,91,91,181" value="91" />
+			<entry class="" argb="255,92,92,183" value="92" />
+			<entry class="" argb="255,93,93,185" value="93" />
+			<entry class="" argb="255,94,94,187" value="94" />
+			<entry class="" argb="255,95,95,189" value="95" />
+			<entry class="" argb="255,96,96,191" value="96" />
+			<entry class="" argb="255,97,97,193" value="97" />
+			<entry class="" argb="255,98,98,195" value="98" />
+			<entry class="" argb="255,99,99,197" value="99" />
+			<entry class="" argb="255,100,100,199" value="100" />
+			<entry class="" argb="255,101,101,201" value="101" />
+			<entry class="" argb="255,102,102,203" value="102" />
+			<entry class="" argb="255,103,103,205" value="103" />
+			<entry class="" argb="255,104,104,207" value="104" />
+			<entry class="" argb="255,105,105,209" value="105" />
+			<entry class="" argb="255,106,106,211" value="106" />
+			<entry class="" argb="255,107,107,213" value="107" />
+			<entry class="" argb="255,108,108,215" value="108" />
+			<entry class="" argb="255,109,109,217" value="109" />
+			<entry class="" argb="255,110,110,219" value="110" />
+			<entry class="" argb="255,111,111,221" value="111" />
+			<entry class="" argb="255,112,112,223" value="112" />
+			<entry class="" argb="255,113,113,225" value="113" />
+			<entry class="" argb="255,114,114,227" value="114" />
+			<entry class="" argb="255,115,115,229" value="115" />
+			<entry class="" argb="255,116,116,231" value="116" />
+			<entry class="" argb="255,117,117,233" value="117" />
+			<entry class="" argb="255,118,118,235" value="118" />
+			<entry class="" argb="255,119,119,237" value="119" />
+			<entry class="" argb="255,120,120,239" value="120" />
+			<entry class="" argb="255,121,121,241" value="121" />
+			<entry class="" argb="255,122,122,243" value="122" />
+			<entry class="" argb="255,123,123,245" value="123" />
+			<entry class="" argb="255,124,124,247" value="124" />
+			<entry class="" argb="255,125,125,249" value="125" />
+			<entry class="" argb="255,126,126,251" value="126" />
+			<entry class="" argb="255,127,127,253" value="127" />
+			<entry class="" argb="255,128,128,255" value="128" />
+			<entry class="" argb="255,129,129,251" value="129" />
+			<entry class="" argb="255,130,130,247" value="130" />
+			<entry class="" argb="255,131,131,243" value="131" />
+			<entry class="" argb="255,132,132,238" value="132" />
+			<entry class="" argb="255,133,133,234" value="133" />
+			<entry class="" argb="255,134,134,230" value="134" />
+			<entry class="" argb="255,135,135,226" value="135" />
+			<entry class="" argb="255,136,136,221" value="136" />
+			<entry class="" argb="255,137,137,217" value="137" />
+			<entry class="" argb="255,138,138,213" value="138" />
+			<entry class="" argb="255,139,139,209" value="139" />
+			<entry class="" argb="255,140,140,204" value="140" />
+			<entry class="" argb="255,141,141,200" value="141" />
+			<entry class="" argb="255,142,142,196" value="142" />
+			<entry class="" argb="255,143,143,192" value="143" />
+			<entry class="" argb="255,144,144,187" value="144" />
+			<entry class="" argb="255,145,145,183" value="145" />
+			<entry class="" argb="255,146,146,179" value="146" />
+			<entry class="" argb="255,147,147,175" value="147" />
+			<entry class="" argb="255,148,148,170" value="148" />
+			<entry class="" argb="255,149,149,166" value="149" />
+			<entry class="" argb="255,150,150,162" value="150" />
+			<entry class="" argb="255,151,151,158" value="151" />
+			<entry class="" argb="255,152,152,153" value="152" />
+			<entry class="" argb="255,153,153,149" value="153" />
+			<entry class="" argb="255,154,154,145" value="154" />
+			<entry class="" argb="255,155,155,141" value="155" />
+			<entry class="" argb="255,156,156,136" value="156" />
+			<entry class="" argb="255,157,157,132" value="157" />
+			<entry class="" argb="255,158,158,128" value="158" />
+			<entry class="" argb="255,159,159,124" value="159" />
+			<entry class="" argb="255,160,160,119" value="160" />
+			<entry class="" argb="255,161,161,115" value="161" />
+			<entry class="" argb="255,162,162,111" value="162" />
+			<entry class="" argb="255,163,163,107" value="163" />
+			<entry class="" argb="255,164,164,102" value="164" />
+			<entry class="" argb="255,165,165,98" value="165" />
+			<entry class="" argb="255,166,166,94" value="166" />
+			<entry class="" argb="255,167,167,90" value="167" />
+			<entry class="" argb="255,168,168,85" value="168" />
+			<entry class="" argb="255,169,169,81" value="169" />
+			<entry class="" argb="255,170,170,77" value="170" />
+			<entry class="" argb="255,171,171,73" value="171" />
+			<entry class="" argb="255,172,172,68" value="172" />
+			<entry class="" argb="255,173,173,64" value="173" />
+			<entry class="" argb="255,174,174,60" value="174" />
+			<entry class="" argb="255,175,175,56" value="175" />
+			<entry class="" argb="255,176,176,51" value="176" />
+			<entry class="" argb="255,177,177,47" value="177" />
+			<entry class="" argb="255,178,178,43" value="178" />
+			<entry class="" argb="255,179,179,39" value="179" />
+			<entry class="" argb="255,180,180,34" value="180" />
+			<entry class="" argb="255,181,181,30" value="181" />
+			<entry class="" argb="255,182,182,26" value="182" />
+			<entry class="" argb="255,183,183,22" value="183" />
+			<entry class="" argb="255,184,184,17" value="184" />
+			<entry class="" argb="255,185,185,13" value="185" />
+			<entry class="" argb="255,186,186,9" value="186" />
+			<entry class="" argb="255,187,187,5" value="187" />
+			<entry class="" argb="255,188,188,0" value="188" />
+			<entry class="" argb="255,189,189,3" value="189" />
+			<entry class="" argb="255,190,190,7" value="190" />
+			<entry class="" argb="255,191,191,11" value="191" />
+			<entry class="" argb="255,192,192,15" value="192" />
+			<entry class="" argb="255,193,193,19" value="193" />
+			<entry class="" argb="255,194,194,22" value="194" />
+			<entry class="" argb="255,195,195,26" value="195" />
+			<entry class="" argb="255,196,196,30" value="196" />
+			<entry class="" argb="255,197,197,34" value="197" />
+			<entry class="" argb="255,198,198,38" value="198" />
+			<entry class="" argb="255,199,199,41" value="199" />
+			<entry class="" argb="255,200,200,45" value="200" />
+			<entry class="" argb="255,201,201,49" value="201" />
+			<entry class="" argb="255,202,202,53" value="202" />
+			<entry class="" argb="255,203,203,57" value="203" />
+			<entry class="" argb="255,204,204,60" value="204" />
+			<entry class="" argb="255,205,205,64" value="205" />
+			<entry class="" argb="255,206,206,68" value="206" />
+			<entry class="" argb="255,207,207,72" value="207" />
+			<entry class="" argb="255,208,208,76" value="208" />
+			<entry class="" argb="255,209,209,79" value="209" />
+			<entry class="" argb="255,210,210,83" value="210" />
+			<entry class="" argb="255,211,211,87" value="211" />
+			<entry class="" argb="255,212,212,91" value="212" />
+			<entry class="" argb="255,213,213,95" value="213" />
+			<entry class="" argb="255,214,214,98" value="214" />
+			<entry class="" argb="255,215,215,102" value="215" />
+			<entry class="" argb="255,216,216,106" value="216" />
+			<entry class="" argb="255,217,217,110" value="217" />
+			<entry class="" argb="255,218,218,114" value="218" />
+			<entry class="" argb="255,219,219,117" value="219" />
+			<entry class="" argb="255,220,220,121" value="220" />
+			<entry class="" argb="255,221,221,125" value="221" />
+			<entry class="" argb="255,222,222,129" value="222" />
+			<entry class="" argb="255,223,223,133" value="223" />
+			<entry class="" argb="255,224,224,137" value="224" />
+			<entry class="" argb="255,225,225,140" value="225" />
+			<entry class="" argb="255,226,226,144" value="226" />
+			<entry class="" argb="255,227,227,148" value="227" />
+			<entry class="" argb="255,228,228,152" value="228" />
+			<entry class="" argb="255,229,229,156" value="229" />
+			<entry class="" argb="255,230,230,159" value="230" />
+			<entry class="" argb="255,231,231,163" value="231" />
+			<entry class="" argb="255,232,232,167" value="232" />
+			<entry class="" argb="255,233,233,171" value="233" />
+			<entry class="" argb="255,234,234,175" value="234" />
+			<entry class="" argb="255,235,235,178" value="235" />
+			<entry class="" argb="255,236,236,182" value="236" />
+			<entry class="" argb="255,237,237,186" value="237" />
+			<entry class="" argb="255,238,238,190" value="238" />
+			<entry class="" argb="255,239,239,194" value="239" />
+			<entry class="" argb="255,240,240,197" value="240" />
+			<entry class="" argb="255,241,241,201" value="241" />
+			<entry class="" argb="255,242,242,205" value="242" />
+			<entry class="" argb="255,243,243,209" value="243" />
+			<entry class="" argb="255,244,244,213" value="244" />
+			<entry class="" argb="255,245,245,216" value="245" />
+			<entry class="" argb="255,246,246,220" value="246" />
+			<entry class="" argb="255,247,247,224" value="247" />
+			<entry class="" argb="255,248,248,228" value="248" />
+			<entry class="" argb="255,249,249,232" value="249" />
+			<entry class="" argb="255,250,250,235" value="250" />
+			<entry class="" argb="255,251,251,239" value="251" />
+			<entry class="" argb="255,252,252,243" value="252" />
+			<entry class="" argb="255,253,253,247" value="253" />
+			<entry class="" argb="255,254,254,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="MDT1" interpolate="false">
+		<table>
+			<entry class="C21" argb="255,255,255,255" value="6000" />
+			<entry class="C20" argb="255,226,246,246" value="5000" />
+			<entry class="C19" argb="255,201,232,232" value="4000" />
+			<entry class="C10" argb="255,179,231,217" value="3500" />
+			<entry class="C9" argb="255,179,227,205" value="3000" />
+			<entry class="C8" argb="255,173,221,193" value="2500" />
+			<entry class="C7" argb="255,96,214,136" value="2000" />
+			<entry class="C6" argb="255,54,198,24" value="1500" />
+			<entry class="C5" argb="255,110,213,37" value="1000" />
+			<entry class="C4" argb="255,138,138,11" value="500" />
+			<entry class="C17" argb="255,163,163,10" value="250" />
+			<entry class="C11" argb="255,0,204,255" value="0" />
+			<entry class="C18" argb="255,0,204,255" value="-250" />
+			<entry class="C3" argb="255,0,153,255" value="-500" />
+			<entry class="C2" argb="255,0,51,255" value="-1000" />
+			<entry class="C1" argb="255,51,0,255" value="-1500" />
+			<entry class="C0" argb="255,0,0,204" value="-2000" />
+			<entry class="C12" argb="255,0,51,153" value="-2500" />
+			<entry class="C13" argb="255,0,0,102" value="-3000" />
+			<entry class="C16" argb="255,6,6,73" value="-3500" />
+			<entry class="C15" argb="255,4,22,40" value="-4000" />
+			<entry class="C14" argb="255,0,0,0" value="-10896" />
+		</table>
+	</palette>
+
+	<palette name="MDT2" interpolate="false">
+		<table>
+			<entry class="C21" argb="255,255,255,255" value="6000" />
+			<entry class="C20" argb="255,226,246,246" value="5000" />
+			<entry class="C19" argb="255,201,232,232" value="4000" />
+			<entry class="C10" argb="255,179,231,217" value="3500" />
+			<entry class="C9" argb="255,179,227,205" value="3000" />
+			<entry class="C8" argb="255,173,221,193" value="2500" />
+			<entry class="C7" argb="255,96,214,136" value="2000" />
+			<entry class="C6" argb="255,32,175,83" value="1500" />
+			<entry class="C5" argb="255,90,199,14" value="1000" />
+			<entry class="C4" argb="255,110,138,11" value="500" />
+			<entry class="C17" argb="255,147,163,10" value="250" />
+			<entry class="C11" argb="255,0,204,255" value="0" />
+			<entry class="C18" argb="255,0,204,255" value="-250" />
+			<entry class="C3" argb="255,0,153,255" value="-500" />
+			<entry class="C2" argb="255,30,74,251" value="-1000" />
+			<entry class="C1" argb="255,51,0,255" value="-1500" />
+			<entry class="C0" argb="255,0,0,219" value="-2000" />
+			<entry class="C12" argb="255,15,15,168" value="-2500" />
+			<entry class="C13" argb="255,15,15,153" value="-3000" />
+			<entry class="C16" argb="255,17,17,128" value="-3500" />
+			<entry class="C15" argb="255,14,16,108" value="-4000" />
+			<entry class="C22" argb="255,4,6,78" value="-5000" />
+			<entry class="C23" argb="255,0,0,68" value="-6000" />
+			<entry class="C24" argb="255,0,0,58" value="-7000" />
+			<entry class="C14" argb="255,0,0,0" value="-8000" />
+		</table>
+	</palette>
+	
+	<palette name="CLASIFICACION" interpolate="false">
+		<table>
+			<entry class="C18" argb="255,0,102,255" value="18" />
+			<entry class="C17" argb="255,153,0,255" value="17" />
+			<entry class="C16" argb="255,153,0,153" value="16" />
+			<entry class="C15" argb="255,204,153,255" value="15" />
+			<entry class="C14" argb="255,204,80,17" value="14" />
+			<entry class="C13" argb="255,255,175,0" value="13" />
+			<entry class="C12" argb="255,255,153,102" value="12" />
+			<entry class="C11" argb="255,204,255,51" value="11" />
+			<entry class="C10" argb="255,204,204,0" value="10" />
+			<entry class="C9" argb="255,153,153,0" value="9" />
+			<entry class="C8" argb="255,204,0,102" value="8" />
+			<entry class="C7" argb="255,0,153,51" value="7" />
+			<entry class="C6" argb="255,51,204,0" value="6" />
+			<entry class="C5" argb="255,231,231,12" value="5" />
+			<entry class="C4" argb="255,12,118,119" value="4" />
+			<entry class="C3" argb="255,174,177,7" value="3" />
+			<entry class="C2" argb="255,67,97,69" value="2" />
+			<entry class="C1" argb="255,4,126,4" value="1" />
+		</table>
+	</palette>
+</palettes>

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/palettes.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_zh.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_zh.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_zh.properties	(revision 30230)
@@ -0,0 +1,691 @@
+#Translations for language [en]
+#Thu Sep 28 13:19:48 CEST 2006
+(escala_maxima)=(\u6700\u5927\u6bd4\u4f8b)
+(escala_minima)=(\u6700\u5c0f\u6bd4\u4f8b)
+1\:=
+_(Simbolo_unico)=(\u552f\u4e00\u7b26\u53f7)
+__proyeccion_actual=\u76ee\u524d\u6295\u5f71\:
+__redimensionar_texto_escala=\u5c06\u6b63\u6587\u8c03\u6574\u5230\u89c6\u56fe\u6bd4\u4f8b
+__seleccion_de_fuente=\u5b57\u7b26\u9009\u62e9
+A0=A0
+A1=A1
+A2=A2
+A3=A3\
+A4=A4
+abajo=\u5411\u4e0b
+abrir=\u6253\u5f00
+abrir_plantilla=\u6253\u5f00\u6a21\u677f
+abrir_proyecto=\u6253\u5f00\u9879\u76ee
+abrir_tooltip=\u6253\u5f00\u5df2\u6709\u7684\u9879\u76ee
+Abrir_una_capa=\u6253\u5f00\u56fe\u5c42
+Accion_Predefinida=\u9884\u5b9a\u4f5c\u7528
+aceptar=\u786e\u5b9a
+Aceptar=\u786e\u5b9a
+acerca_de=\u5173\u4e8e...
+activar=\u6fc0\u6d3b
+activar_regla=\u6fc0\u6d3b\u6807\u5c3a
+activos=\u6fc0\u6d3b
+add_delete_edit_fields=\u5b57\u6bb5\u53ef\u52a0\u5165\uff0c\u5220\u9664 \u6216 \u91cd\u547d\u540d
+add_rows=\u52a0\u884c
+adjust_transparency=\u8bbe\u7f6e\u900f\u660e
+agrupacion=\u7ec4\u5408
+agrupar=\u96c6\u5408
+agrupar_capas=\u96c6\u5408\u56fe\u5c42
+agrupar_graficos=\u96c6\u5408\u56fe\u8868
+agrupar_linea=\u5c06\u7ebf\u6761\u548c\u56fe\u7247\u5408\u5e76
+Ajustar_transparencia=\u8c03\u6574\u900f\u660e
+ajustes_linea_grafica=\u56fe\u7ebf\u8bbe\u7f6e
+Al_leer_la_leyenda=\u6b63\u5728\u8bfb\u53d6\u56fe\u4f8b\u4e2d
+alias=\u522b\u53f7
+align_center=\u5411\u4e2d\u5bf9\u9f50
+align_down=\u5411\u4e0b\u5bf9\u9f50
+align_left=\u5411\u5de6\u5bf9\u9f50
+align_right=\u5411\u53f3\u5bf9\u9f50
+align_to_layout_center=\u5411\u9875\u9762\u4e2d\u95f4\u5bf9\u9f50
+align_to_layout_down=\u5411\u9875\u9762\u4e0b\u9762\u5bf9\u9f50
+align_to_layout_left=\u5411\u9875\u9762\u5de6\u8fb9\u5bf9\u9f50
+align_to_layout_right=\u5411\u9875\u9762\u53f3\u8fb9\u5bf9\u9f50
+align_to_layout_up=\u5411\u9875\u9762\u4e0a\u9762\u5bf9\u9f50
+align_to_layout_vertical_center=\u5411\u9875\u9762\u5782\u7ebf\u4e2d\u95f4\u5bf9\u9f50
+align_up=\u5411\u4e0a\u5bf9\u9f50
+align_vertical_center=\u5411\u5782\u7ebf\u4e2d\u95f4\u5bf9\u9f50
+alineamiento=\u5bf9\u9f50\:
+alinear=\u5bf9\u9f50
+alinear_graficos=\u5bf9\u9f50\u56fe\u7247
+alta=\u9ad8
+alto=\u9ad8\u5ea6
+altura=\u9ad8\u5ea6\:
+Altura_fija_de_texto=\u56fa\u5b9a\u6587\u672c\u7684\u9ad8\u5ea6
+ambito=\u8303\u56f4
+Anadir=\u6dfb\u52a0
+Anadir_al_conjunto=\u6dfb\u52a0\u5230\u7cfb\u5217\u91cc
+Anadir_capa=\u6dfb\u52a0\u56fe\u5c42
+Anadir_Capa=\u6dfb\u52a0\u56fe\u5c42
+anadir_tag=\u6dfb\u52a0\u6807\u8bb0
+Anadir_todos=\u6dfb\u52a0\u5168\u90e8
+ancho=\u5bbd\u5ea6
+ancho_alto=\u5bbd\u5ea6 X \u9ad8\u5ea6
+anchura=\u5bbd\u5ea6\:
+Aplicar=\u8fd0\u7528
+Archivo=\u6587\u4ef6
+arriba=\u4e0a\u9762
+ascending_order=\u4e0a\u5347\u987a\u5e8f
+ascending_order_tooltip=\u6309\u9009\u62e9\u7684\u5b57\u6bb5\u4e0a\u5347\u987a\u5e8f\u6392\u5217
+Atributo=\u7279\u6027
+automatico=\u81ea\u52a8
+Ayuda=\u5e2e\u52a9
+back=\u540e\u9000
+background_color=\u80cc\u666f\u989c\u8272
+baja=\u4f4e
+Bajar_capa=\u628a\u56fe\u5c42\u5411\u4e0b\u79fb
+bandas=\u6ce2\u6bb5
+barra=\u6bd4\u4f8b\u5c3a\:
+base=\u57fa\u7840
+base_datos=\u6570\u636e\u5e93
+bmp=BMP \u6587\u4ef6
+Bold=\u7c97\u4f53
+borra_seleccion=\u5220\u9664\u5df2\u9009\u7684
+borrador=\u8349\u7a3f
+borrar=\u5220\u9664
+box=\u6846\u5b50
+brillo=\u4eae\u5ea6
+brillo_y_contraste=\u4eae\u5ea6\u548c\u5bf9\u6bd4\u5ea6
+browse=\u6d4f\u89c8
+cajetin=\u6846\u5b50
+Calcular_intervalos=\u8ba1\u7b97\u8ddd\u79bb
+calidad=\u8d28\u91cf
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=\u628a\u5df2\u9009\u90e8\u5206\u7684\u9ad8\u5ea6\u66f4\u6539\u6210\u548c\u6700\u9ad8\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=\u628a\u5df2\u9009\u90e8\u5206\u7684\u5bbd\u5ea6\u66f4\u6539\u6210\u548c\u6700\u5bbd\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=\u628a\u5df2\u9009\u90e8\u5206\u7684\u5927\u5c0f\u66f4\u6539\u6210\u548c\u6700\u5927\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+Cambio_Color=\u66f4\u6539\u989c\u8272
+cambio_nombre=\u91cd\u547d\u540d
+campo=\u5b57\u6bb5
+Campo=\u5b57\u6bb5
+campo_altura_texto=\u6587\u672c\u5b57\u6bb5\u7684\u9ad8\u5ea6\:
+Campo_de_clasificacion=\u5b57\u6bb5\u5206\u7ea7
+Campo_de_etiquetado=\u6807\u7b7e\u5b57\u6bb5
+Campos=\u5b57\u6bb5
+cancel=\u53d6\u6d88
+Cancel=\u53d6\u6d88
+cancelar=\u53d6\u6d88
+Cancelar=\u53d6\u6d88
+Capa=\u56fe\u5c42
+Capas=\u56fe\u5c42
+Capas_del_localizador=\u641c\u7d22\u5668\u7684\u56fe\u5c42
+Centimetros=\u5398\u7c73
+cerrar=\u5173\u95ed
+Cerrar=\u5173\u95ed
+change=\u66f4\u6539
+change_before=\u5728\u5bf9\u8c61\u4e4b\u524d
+change_behind=\u5728\u5bf9\u8c61\u4e4b\u540e
+change_height=\u66f4\u6539\u9ad8\u5ea6
+change_width=\u66f4\u6539\u5bbd\u5ea6
+circulo=\u5706\u5f62
+clave=\u5bc6\u7801
+coincidir_tamanyo=\u4f7f\u5927\u5c0f\u76f8\u914d
+colocar_a_margenes=\u653e\u5728\u4e0e\u8fb9\u8ddd\u6709\u5173\u3002
+colocar_alrededor_seleccionados=\u653e\u5728\u5df2\u9009\u56fe\u7247\u7684\u5468\u56f4\u3002
+colocar_alrededor_todos=\u653e\u5728\u6240\u6709\u56fe\u7247\u7684\u5468\u56f4\u3002
+colocar_delante=\u79fb\u5230\u6700\u4e0a\u9762
+colocar_detras=\u79fb\u5230\u5e95\u5c42
+color=\u989c\u8272\:
+Color_final=\u989c\u8272(\u81f3)\:
+Color_inicio=\u989c\u8272(\u4ece)\:
+color_texto=\u6587\u672c\u989c\u8272\:
+comentarios=\u8bf4\u660e
+comenzar_edicion=
+configurar=\u914d\u7f6e
+configurar_localizador=\u914d\u7f6e\u641c\u7d22\u5668
+Configurar_localizador=\u914d\u7f6e\u641c\u7d22\u5668 ...
+confirmar_borrar=\u8fd9\u4e2a\u5143\u4ef6\u5c06\u88ab\u5220\u9664\uff0c\u540c\u610f\u5417?
+conflicto_de_nombres_de_mapas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u5730\u56fe\u3002
+conflicto_de_nombres_de_tablas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u8868\u683c\u3002
+conflicto_de_nombres_de_vistas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u89c6\u56fe\u3002
+conflito_de_nombres_de_tablas_al_pegar=\u5728\u7c98\u8d34\u65f6\u8868\u683c\u547d\u540d\u53d1\u751f\u51b2\u7a81
+conservar_escala_visualizacion=\u4fdd\u6301\u89c6\u56fe\u6bd4\u4f8b
+consulta=\u67e5\u8be2
+Contengan=\u5305\u62ec
+contraste=\u5bf9\u6bd4\u5ea6
+coor_geograficas=\u5730\u7406\u5750\u6807
+copiar=\u590d\u5236
+copy=\u590d\u5236
+cortar=\u526a\u5207
+creation_date=\u521b\u5efa\u65e5\u671f
+Crucen_con=\u4e8e .. \u4ea4\u53c9
+cuando_activo=\u6fc0\u6d3b\u65f6
+cut=\u526a\u5207
+Dado_un_campo_de_atributos=\u5df2\u77e5\u7684\u7279\u6027\u5b57\u6bb5
+datum=\u8d44\u6599
+debera_introducir_nombres_para_las_vistas_a_pegar=\u4f60\u9700\u8981\u7ed9\u89c6\u56fe\u8f93\u5165\u65b0\u540d\u79f0
+debera_introducir_nombres_para_los_mapas_a_pegar=\u4f60\u9700\u8981\u7ed9\u5730\u56fe\u8f93\u5165\u65b0\u547d\u540d
+default_projection=\u9ed8\u8ba4\u6295\u5f71
+default_value=\u9ed8\u8ba4\u503c
+dehacer=\u53d6\u6d88
+delete_field=\u5220\u9664\u5b57\u6bb5
+Derecha=\u53f3
+Derecho=\u53f3\u8fb9
+desagrupar=\u53d6\u6d88\u7ec4\u5408
+desagrupar_capas=\u628a\u56fe\u5c42\u53d6\u6d88\u7ec4\u5408
+desagrupar_graficos=\u628a\u56fe\u7247\u53d6\u6d88\u7ec4\u5408
+descending_order=\u4e0b\u964d\u987a\u5e8f
+descending_order_tooltip=\u6309\u9009\u62e9\u7684\u5b57\u6bb5\u4e0b\u964d\u987a\u5e8f\u6392\u5217
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>\u60a8\u8981\u662f\u5bf9\u56fe\u5c42\u7684\u6240\u6709\u7279\u6027\u4f7f\u7528\u5171\u540c\u503c\u7684\u8bdd\uff0c\u5c06\u8981\u4fdd\u6301\u9ed8\u8ba4\u503c\u3002\u5982\u679c\u60a8\u8981\u5b9a\u5236\u6807\u7b7e\u8bf7\u9009\u62e9\u6709\u5173\u5b57\u6bb5\u3002</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>\u6b64\u5de5\u5177\u5c06\u53ef\u4ee5\u521b\u5efa\u57fa\u4e8e\u5df2\u6709\u56fe\u5c42\u7684\u65b0\u865a\u62df\u5c42\uff0c\u8fd9\u6837\u5c31\u5141\u8bb8\u60a8\u5236\u4f5c\u9ad8\u7ea7\u6807\u7b7e\u3002 \u6539\u53d8\u5df2\u9009\u56fe\u5c42\u89c6\u56fe\uff0c\u663e\u793a\u5b57\u6bb5\u6570\u636e\u4e4b\u4e00\u3002</HTML>
+desde_arriba=\u4ece\u4e0a\:
+desde_izquierda=\u4ece\u5de6\:
+desea_borrar_el_documento=\u786e\u5b9e\u8981\u628a\u5df2\u9009\u7684\u6587\u6863\u5220\u9664\u4e86\u5417?
+desea_borrar_la_capa=\u786e\u5b9e\u8981\u628a\u6fc0\u6d3b\u7684\u56fe\u5c42\u5220\u9664\u4e86\u5417?
+desea_continuar=\u8981\u7ee7\u7eed\u5417?
+deshacer=\u53d6\u6d88
+desplaza_los_elementos_seleccionados_a_la_derecha=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u53f3\u8fb9\u3002
+desplaza_los_elementos_seleccionados_a_la_izquierda=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u5de6\u8fb9\u3002
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=\u5c06\u5df2\u9009\u90e8\u5206\u5728X\u8f74\u4e0a\u79fb\u5230\u4e2d\u95f4\u3002
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=\u5c06\u5df2\u9009\u90e8\u5206\u5728Y\u8f74\u4e0a\u79fb\u5230\u4e2d\u95f4\u3002
+desplaza_los_elementos_seleccionados_hacia_abajo=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u4e0b\u9762\u3002
+desplaza_los_elementos_seleccionados_hacia_arriba=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u4e0a\u9762\u3002
+Desplazamiento=\u624b\u5f62\u5de5\u5177
+desviacion_tipica=\u6807\u51c6\u5dee
+distance_units=\u6d4b\u91cf\u5355\u4f4d
+distribuir=\u5206\u914d\:
+distribuir_elementos_sobre_todo_el_layout=\u5c06\u6240\u6709\u90e8\u5206\u6392\u5217\u5728\u6574\u4e2a\u9875\u9762\u3002
+distributes_down=\u6392\u5217\u5230\u4e0b\u9762
+distributes_horizontal=\u6c34\u5e73\u5730\u6392\u5217
+distributes_left=\u6392\u5217\u5230\u5de6\u8fb9
+distributes_right=\u6392\u5217\u5230\u53f3\u8fb9
+distributes_to_layout_down=\u4ece\u9875\u9762\u4e0b\u9762\u6392\u5217
+distributes_to_layout_horizontal=\u4ece\u9875\u9762\u6c34\u5e73\u5730\u6392\u5217
+distributes_to_layout_left=\u4ece\u9875\u9762\u5de6\u8fb9\u6392\u5217
+distributes_to_layout_right=\u4ece\u9875\u9762\u53f3\u8fb9\u6392\u5217
+distributes_to_layout_up=\u4ece\u9875\u9762\u4e0a\u9762\u6392\u5217
+distributes_to_layout_vertical=\u4ece\u9875\u9762\u5782\u76f4\u5730\u6392\u5217
+distributes_up=\u6392\u5217\u5230\u4e0a\u9762
+distributes_vertical=\u5782\u76f4\u5730\u6392\u5217
+distribuye_el_espacio_entre_los_elementos_en_horizontal=\u628a\u7a7a\u95f4\u5728\u90e8\u5206\u4e2d\u6c34\u5e73\u5730\u6392\u5217\u3002
+distribuye_el_espacio_entre_los_elementos_en_vertical=\u628a\u7a7a\u95f4\u5728\u90e8\u5206\u4e2d\u5782\u76f4\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u4e0b\u5f80\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u4e0a\u5f80\u4e0b\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u53f3\u5f80\u5de6\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u5de6\u5f80\u53f3\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u6c34\u5e73\u7ebf\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u5782\u76f4\u7ebf\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+divisiones_izquierda=\u5de6\u8fb9\u7684\u95f4\u9694
+documentos_existentes=\u5df2\u5b58\u7684\u6587\u6863
+draw_text_only=\u53ea\u5199\u6b63\u6587
+driver=\u9a71\u52a8\u7a0b\u5e8f
+Dxffiles=DXF \u6587\u4ef6
+edicion=\u7248\u672c
+editable=\u53ef\u7f16\u8f91\u7684
+Editar_leyenda=\u7f16\u8f91\u6837\u5f0f
+editar_vertices=\u7f16\u8f91\u9876\u70b9
+el_numero_maximo_de_intervalos_para_este_campo_es=\u5728\u8fd9\u4e2a\u5b57\u6bb5\u91cc\u7684\u6700\u5927\u95f4\u9694\u6570\u662f
+Elegir_Color=\u9009\u62e9\u989c\u8272
+Elegir_Fuente=\u9009\u62e9\u5b57\u4f53
+elemento_ya_existe=\u5143\u4ef6\u5df2\u5b58\u5728
+Elementos_seleccionados_de_la_capa=\u56fe\u5c42\u5df2\u9009\u7684\u9879\u76ee
+Eliminar=\u5220\u9664
+eliminar_capa=\u5220\u9664\u56fe\u5c42
+eliminar_columna=\u5220\u9664\u5217
+eliminar_extremos=\u5220\u9664\u8fb9\u7f18
+eliminar_fila=\u5220\u9664\u884c
+en_el_mapa=\u5728\u8bbe\u8ba1\u56fe\:
+En_metros=\u5398\u7c73
+En_pixels=\u50cf\u7d20
+en_unidades=\u5355\u4f4d
+Encuadre=\u624b\u5f62\u5de5\u5177
+Encuadre_Vista=\u624b\u5f62\u5de5\u5177
+enlace_vivo=\u6d3b\u52a8\u94fe\u63a5
+Enlazar_a_fichero_de_texto=\u8fde\u63a5\u5230\u6587\u672c\u6587\u6863
+Enlazar_a_ficheros_de_imagen=\u8fde\u63a5\u5230\u56fe\u50cf\u6587\u6863
+equal_intervals=\u8ddd\u79bb\u76f8\u7b49
+Error_exportando_SLD=\u8f93\u51fa SLD \u65f6\u51fa\u9519
+Error_guardando_la_leyenda=\u5b58\u56fe\u4f8b\u65f6\u51fa\u9519
+Error_guardando_la_plantilla=\u5b58\u6a21\u677f\u65f6\u51fa\u9519
+escala=\u6bd4\u4f8b
+Escala=\u6bd4\u4f8b
+escala_desconocida=\u672a\u77e5\u6bd4\u4f8b
+escala_maxima=\u6700\u5927\u6bd4\u4f8b
+Escala_Maxima=\u6700\u5927\u6bd4\u4f8b
+escala_minima=\u6700\u5c0f\u6bd4\u4f8b
+Escala_Minima=\u6700\u5c0f\u6bd4\u4f8b
+escala_usuario=\u7528\u6237\u6307\u5b9a\u7684\u6bd4\u4f8b
+espaciado_horizontal=\u6805\u683c\u6c34\u5e73\u7a7a\u95f4
+espaciado_vertical=\u6805\u683c\u5782\u76f4\u7a7a\u95f4
+espacio=\u7a7a\u95f4\:
+estadisticas=\u7edf\u8ba1
+este_por_debajo_de_=\u5728...\u4e0b
+este_por_encima_de=\u5728...\u4e0a
+Esten_contenidos_en=\u5305\u542b\u5728...\u4e2d
+Etiqueta=\u6807\u7b7e
+Etiquetados=\u6807\u7b7e
+etiquetas=\u6807\u7b7e\:
+Etiquetas_estandar=\u6807\u51c6\u6807\u8bb0
+Examinar=\u6d4f\u89c8
+export=\u8f93\u51fa
+exportar=\u8f93\u51fa
+exportar_pdf=\u8f93\u51fa\u6210 PDF
+exportar_ps=\u8f93\u51fa\u6210 PS
+extension=\u6269\u5c55\u540d
+Extent=\u56fe\u5c42\u6846\u67b6
+extents_no_coincidentes=\u6269\u5c55\u540d\u4e0d\u4e00\u81f4\u3002
+factor_zoom_incorrecto=\u7f29\u653e\u56e0\u5b50\u4e0d\u6b63\u786e
+fallo_capas=\u8fdb\u5165\u56fe\u5c42\u65f6\u51fa\u9519\u3002  \u4e0b\u5217\u56fe\u5c42\u5c06\u4ece\u9879\u76ee\u4e2d\u5220\u9664\u6389\u3002
+fichero=\u6587\u4ef6
+Fichero=\u6587\u4ef6
+fichero_existe=\u6587\u4ef6\u5df2\u5b58\u5728
+fichero_incorrecto=\u65e0\u6548\u7684\u6587\u4ef6
+fichero_ya_existe_seguro_desea_guardarlo=\u6587\u4ef6\u5df2\u5b58\u5728\uff0c\u60a8\u8981\u7ee7\u7eed\u5417?
+field_already_exists=\u5b57\u6bb5\u5df2\u5b58\u5728
+field_decimal_count=\u5c0f\u6570\u70b9\u4f4d\u6570
+field_default_value=\u9ed8\u8ba4\u503c
+field_length=\u957f\u5ea6
+field_manager=\u5b57\u6bb5\u7ba1\u7406\u5668
+field_name=\u5b57\u6bb5\u547d\u540d
+field_type=\u6837\u5f0f
+filtro=\u7b5b\u9009
+finish=\u5b8c\u6210
+Font=\u5b57\u4f53
+formato=\u683c\u5f0f
+Formato_de_numero_erroneo=\u6570\u5b57\u683c\u5f0f\u65e0\u6548
+formato_incorrecto=\u65e0\u6548\u7684\u683c\u5f0f
+fuente=\u5b57\u4f53
+General=\u57fa\u672c\u8bbe\u7f6e
+georeferenciado=\u5730\u7406\u53c2\u8003
+gestion_encuadre=\u653e\u5927\u7ba1\u7406\u5668
+grados=\u89d2\u5ea6\:
+Grados=\u89d2\u5ea6
+Graficos=\u56fe\u7247
+grosor_linea=\u7ebf\u6761\u5bbd\u5ea6\:
+group=\u5408\u5e76
+group_graphic_line=\u56fe\u7247\u7ebf\u6761\u5408\u5e76
+grupo=\u7ec4
+guardado=\u5b58\u76d8\u5728
+guardar=\u5b58\u76d8
+Guardar=\u5b58\u76d8
+guardar_cambios=\u8981\u5b58\u76d8\u8fd9\u4e9b\u66f4\u6539\u5417?
+guardar_como=\u53e6\u5b58\u4e3a...
+guardar_como_plantilla=\u53e6\u5b58\u4e3a\u6a21\u677f
+Guardar_el_zoom_actual=\u5b58\u76d8\u76ee\u524d\u7684\u7f29\u653e
+Guardar_leyenda=\u4fdd\u5b58\u56fe\u4f8b
+guardar_proyecto=\u4fdd\u5b58\u9879\u76ee
+guardar_tooltip=\u4fdd\u5b58\u9879\u76ee\u4fee\u6539
+Habilitar_etiquetado=\u663e\u793a\u6807\u7b7e
+Hiperenlace=\u8d85\u7ea7\u8fde\u63a5
+horizontal=\u6c34\u5e73\u7684
+horizontal_space=\u6c34\u5e73\u7684\u7a7a\u95f4
+Identificar_Resultados=\u786e\u8ba4\u7ed3\u679c
+Igual_que_la_impresora=\u8ddf\u6253\u5370\u673a\u4e00\u81f4
+igual_todos_lados=\u5411\u6bcf\u8fb9\u4e00\u81f4\u5730\u79fb\u52a8\u3002
+imagen=\u56fe\u7247
+importar=\u8f93\u5165
+Imprimir=\u6253\u5370
+Indexando=\u7d22\u5f15...
+Indexando_espacialmente=\u56fe\u5c42\u7a7a\u95f4\u7d22\u5f15
+indexar_campos=\u5b57\u6bb5\u7d22\u5f15
+Inferior=\u4e0b
+info=\u4fe1\u606f
+informacion=\u4fe1\u606f
+Informacion=\u4fe1\u606f
+Inicializando=\u542f\u52a8\u4e2d
+initial_warning=<html><b>\u6ce8\u610f\!</b><br>\u5f00\u53d1\u7248\u3002 \u53ef\u80fd\u542b\u6709\u91cd\u8981\u9519\u8bef\uff0c\u5e76\u4e14\u5c06\u4f1a\u628a\u5df2\u7f16\u8f91\u597d\u7684\u6587\u4ef6\u4f24\u5bb3\u3002<br><br>\u5411\u60a8\u4eec\u63a8\u8350\u6700\u65b0\u7a33\u5b9a\u7684\u7248\u672c\u3002</html>
+insert_row=\u63d2\u5165\u884c
+Insertar=\u63d2\u5165
+insertar_cajetin=\u63d2\u5165\u6805\u683c
+insertar_circulo=\u63d2\u5165\u5706\u5f62
+insertar_columna=\u63d2\u5165\u5217
+insertar_escala=\u63d2\u5165\u6bd4\u4f8b
+insertar_fila=\u63d2\u5165\u884c
+insertar_imagen=\u63d2\u5165\u56fe\u7247
+insertar_leyenda=\u63d2\u5165\u56fe\u4f8b
+insertar_linea=\u63d2\u5165\u7ebf\u6761
+insertar_norte=\u63d2\u5165\u5317\u65b9
+insertar_poligono=\u63d2\u5165\u591a\u8fb9\u5f62
+insertar_polilinea=\u63d2\u5165\u6298\u7ebf
+insertar_punto=\u63d2\u5165\u6807\u70b9
+insertar_rectangulo=\u63d2\u5165\u65b9\u5f62
+insertar_texto=\u63d2\u5165\u6587\u5b57
+insertar_vista=\u63d2\u5165\u89c6\u56fe
+Intersecten_con=\u4e8e...\u4ea4\u53c9
+Intervalo=\u95f4\u9694
+Intervalos=\u95f4\u9694
+introduce_nombre=\u8bf7\u8f93\u5165\u65b0\u540d\u79f0
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=\u8bf7\u7ed9\u65b0\u5efa\u6ce8\u89e3\u5c42\u8f93\u5165\u65b0\u540d\u79f0
+introduzca_nuevo_nombre_para_la_vista=\u8bf7\u7ed9\u65b0\u5efa\u89c6\u56fe\u8f93\u5165\u65b0\u540d\u79f0
+invert_selection=\u8f6c\u5316\u9009\u62e9
+Italic=\u659c\u4f53
+Izquierda=\u5de6
+Izquierdo=\u5de6\u8fb9
+join=\u8054\u63a5
+jpg=JPEG \u6587\u4ef6
+kilometros=\u516c\u91cc
+Kilometros=\u516c\u91cc
+leyenda=\u56fe\u4f8b
+Leyenda=\u56fe\u4f8b
+leyenda_campo_unido=\u60a8\u5728\u56fe\u4f8b\uff08\u548c/\u6216 \u6807\u7b7e\uff09\u4e0a\u4f7f\u7528\u4e00\u4e2a\u5408\u5e76\u7684\u5b57\u6bb5\u3002\u8bf7\u5728\u53d6\u6d88\u5408\u5e76\u4e4b\u524d\u66f4\u6539\u56fe\u4f8b\u3002
+Leyenda_Por_Defecto=\u9ed8\u8ba4\u56fe\u4f8b
+linea=\u7ebf\u6761
+linea_grafica=\u56fe\u7247\u7ebf\u6761
+lineal_directo=\u76f4\u63a5\u7ebf\u6027
+link=\u94fe\u63a5
+Link=\u94fe\u63a5
+localizador=\u5b9a\u4f4d\u5668
+locked_element=\u5143\u7d20\u88ab\u9501\u5b9a
+locked_element_it_cannot_be_deleted=\u5143\u7d20\u88ab\u9501\u5b9a\u3002\n\u65e0\u6cd5\u5220\u9664\u5b83\u3002
+locked_element_it_cannot_be_renamed=\u5143\u7d20\u88ab\u9501\u5b9a\u3002\n\u65e0\u6cd5\u91cd\u547d\u540d\u3002
+m/pixel=\u7c73/\u50cf\u7d20
+malla_activada=\u6fc0\u6d3b\u6805\u683c
+manage_fields=\u66f4\u6539\u8868\u683c\u7684\u7ed3\u6784
+mantener_intervalo=\u4fdd\u6301\u5dee\u8ddd
+map_units=\u5730\u56fe\u5355\u4f4d
+mapa=\u5730\u56fe
+Mapa=\u5730\u56fe
+mapas=\u5730\u56fe
+marco=\u6846\u67b6
+marco_vista=\u89c6\u56fe\u6846\u67b6
+margenes=\u8fb9\u8ddd\:
+mas_de_100_simbolos=\u6709100\u591a\u4e2a\u7b26\u53f7\u4e00\u822c\u5728\u5730\u56fe\u4e0a\u4e0d\u4f1a\u663e\u793a\u4fe1\u606f
+max_length_is=\u6700\u5927\u957f\u5ea6\u662f
+maximo=\u6700\u5927\u503c
+MDIFrame.quiere_salir=\u9000\u51fa gvSIG?
+MDIFrame.salir=\u9000\u51fa
+media=\u5e73\u5747\u503c
+medir_area=\u9762\u79ef\u6d4b\u91cf
+medir_distancias=\u8ddd\u79bb\u6d4b\u91cf
+metadatos=\u5143\u6570\u636e
+metros=\u7c73
+Metros=\u7c73
+Milimetros=\u6beb\u7c73
+Millas=\u82f1\u91cc
+minimo=\u6700\u5c0f\u503c
+modificar=\u66f4\u6539
+modification_date=\u66f4\u6539\u65e5\u671f
+mostrar_escala_numerica=\u663e\u793a\u6570\u5b57\u6bd4\u4f8b
+Mostrar_siempre=\u59cb\u7ec8\u663e\u793a
+mostrar_unidades=\u663e\u793a\u5355\u4f4d
+move_elements=\u90e8\u5206\u79fb\u52a8
+Muestra_atributos=\u663e\u793a\u5df2\u9009\u56fe\u5c42\u7684\u7279\u6027\u3002
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=\u4f7f\u7528\u6bcf\u4e2a\u5355\u503c\u56fe\u7684\u7b26\u53f7\u663e\u793a\u56fe\u5c42\u5143\u7d20
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=\u4f7f\u7528\u591a\u79cd\u989c\u8272\u5e76\u6839\u636e\u67d0\u4e00\u4e2a\u5b57\u6bb5\u7279\u6027\u663e\u793a\u56fe\u5c42\u5143\u7d20
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=\u4f7f\u7528\u552f\u4e00\u7b26\u53f7\u663e\u793a\u56fe\u5c42\u6240\u6709\u5143\u7d20
+natural_intervals=\u81ea\u7136\u5212\u5206 (Natural Break)
+navegacion=\u6d4f\u89c8
+navegacion_vista=\u5728\u89c6\u56fe\u4e0a\u6d4f\u89c8
+necesita_una_capa_activa=\u9700\u8981\u4e00\u5c42\u6fc0\u6d3b\u7684\u56fe\u5c42
+necesita_una_capa_vectorial_activa=\u9700\u8981\u4e00\u5c42\u6fc0\u6d3b\u7684 Vectorial \u56fe\u5c42
+new_field=\u65b0\u5efa\u5b57\u6bb5
+new_field_properties=\u65b0\u5efa\u5b57\u6bb5\u5c5e\u6027
+next=\u524d\u8fdb
+ninguna_impresora_configurada=\u65e0\u6253\u5370\u673a\u8bbe\u7f6e
+Nivel_de_transparencia=\u900f\u660e\u5ea6
+no=\u820d\u5f03
+no_activos=\u672a\u6fc0\u6d3b
+No_de_intervalos=\u95f4\u9694\u6570
+No_ha_sido_posible_realizar_la_operacion=\u64cd\u4f5c\u65e0\u6cd5\u8fd0\u884c\u3002
+No_mostrar=\u4e0d\u663e\u793a\u56fe\u5c42\u5f53\u56fe\u4f8b
+No_mostrar_la_capa_cuando_la_escala=\u4e0d\u663e\u793a\u56fe\u5c42\u5f53\u56fe\u4f8b
+no_se_pegaran_las_tablas=\u4e0d\u4f1a\u7c98\u8d34\u4efb\u4f55\u8868\u683c
+no_se_pegaran_las_vistas_del_conflicto=\u4e0d\u4f1a\u7c98\u8d34\u6709\u51b2\u7a81\u7684\u89c6
+No_se_pudo_obtener_la_tabla_de_la_capa=\u65e0\u6cd5\u4ece\u56fe\u5c42\u4e2d\u63d0\u53d6\u8868\u683c
+no_visibles=\u83ab\u663e\u793a
+nombre=\u6587\u4ef6\u540d
+Nombre=\u6587\u4ef6\u540d
+nombre_no_valido=\u6587\u4ef6\u540d\u65e0\u6548
+Nombre_que_se_le_dara_al_zoom=\u7ed9\u7f29\u653e\u7684\u540d\u79f0
+nombre_sesion=\u540d\u79f0
+normal=Normal
+north=\u5317\u65b9
+Nueva_tabla=\u65b0\u5efa\u8868\u683c
+nuevo=\u65b0\u5efa
+Nuevo_conjunto=\u65b0\u5efa\u7cfb\u5217
+nuevo_nombre_para_el_mapa=\u7ed9\u56fe\u5c42\u8f93\u5165\u65b0\u540d\u79f0
+nuevo_proyecto=\u65b0\u5efa\u9879\u76ee
+nuevo_tooltip=\u5236\u9020\u65b0\u9879\u76ee
+num_bandas=\u5e26\u6570
+num_columnas=\u5217\u6570
+num_filas=\u884c\u6570
+Num_intervalos=\u95f4\u9694\u6570
+numero_decimales_mostrar=
+numero_incorrecto=\u65e0\u6548\u6570\u636e
+ok=\u786e\u5b9a
+opacidad=\u4e0d\u900f\u660e\u5ea6
+operacion_cancelada=\u53d6\u6d88\u4efb\u52a1
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=\u65b9\u5411\:
+origen_de_datos=\u6570\u636e\u6765\u6e90
+Origen_de_datos=\u6570\u636e\u6765\u6e90
+Origen_de_Datos=\u6570\u636e\u6765\u6e90\:
+owner=\u6240\u6709\u8005
+paste=\u7c98\u8d34
+paste_elements=\u7c98\u8d34\u90e8\u5206
+path=\u8def\u5f84
+pdf=
+pegar=\u7c98\u8d34
+pegar_mapas=\u7c98\u8d34\u5730\u56fe
+pegar_vistas=\u7c98\u8d34\u89c6\u56fe
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=\u5141\u8bb8\u5229\u7528\u67d0\u5b57\u6bb5\u7684\u6570\u503c\u7ed9\u5730\u56fe\u5143\u7d20\u5b89\u7f6e\u6807\u7b7e\u3002
+Personalizado=\u81ea\u5b9a\u4e49
+personalizar_margenes=\u81ea\u5b9a\u4e49\u8fb9\u8ddd
+Pies=\u82f1\u5c3a
+pila_de_comandos=\u547d\u4ee4\u8868
+pixeles=\u50cf\u7d20
+pixels=\u50cf\u7d20
+Plain=\u6b63\u5e38
+plantilla=\u6a21\u677f
+please_insert_new_field_name=\u8bf7\u7ed9\u5b57\u6bb5\u8f93\u5165\u65b0\u540d\u79f0
+png=PNG \u6587\u4ef6
+poligono=\u591a\u8fb9\u5f62
+polilinea=\u6298\u7ebf
+poner_capas_a=\u5c06...\u6dfb\u52a0\u56fe\u5c42
+por_debajo_de=\u5728...\u4e0b\u9762\:
+por_encima_de=\u5728...\u4e0a\u9762\:
+Por_favor_active_la_capa=\u8bf7\u6fc0\u6d3b\u56fe\u5c42
+posicion_linea=\u7ebf\u6761\u7684\u4f4d\u7f6e
+precision=\u7cbe\u786e\u5ea6
+preparar_pagina=\u9875\u9762\u8bbe\u7f6e
+Preparar_pagina=\u9875\u9762\u8bbe\u7f6e
+presentacion=\u6f14\u793a
+previsualizacion=\u9884\u89c8
+Previsualizacion=\u9884\u89c8
+Previsualizacion_de_simbolo=\u7b26\u53f7\u9884\u89c8
+projection=\u6295\u5f71
+propiedad=\u5c5e\u6027
+propiedades=\u5c5e\u6027
+propiedades_cajetin=\u65b9\u6846\u5c5e\u6027
+propiedades_capa=\u56fe\u5c42\u5c5e\u6027
+propiedades_de_la_capa=\u56fe\u5c42\u5c5e\u6027
+Propiedades_escala_grafica=\u6bd4\u4f8b\u5c3a\u5c5e\u6027
+propiedades_grafico=\u56fe\u7247\u5c5e\u6027
+propiedades_mapa=\u5730\u56fe\u5c5e\u6027
+propiedades_marco_imagenes=\u56fe\u7247\u6846\u67b6\u5c5e\u6027
+propiedades_marco_leyenda=\u56fe\u4f8b\u6846\u67b6\u5c5e\u6027
+propiedades_marco_vista=\u89c6\u56fe\u6846\u67b6\u5c5e\u6027
+propiedades_raster=Raster \u5c5e\u6027
+propiedades_sesion=\u5c5e\u6027
+propiedades_tabla=\u8868\u683c\u5c5e\u6027
+Propiedades_texto=\u6587\u5b57\u5c5e\u6027
+propiedades_vista=\u89c6\u56fe\u5c5e\u6027
+Proyecciones=\u6295\u5f71
+ps=
+puerto=\u8fde\u63a5\u53e3
+Pulgadas=\u82f1\u5bf8
+punto=\u6807\u70b9
+quantile_intervals=\u5206\u4f4d\u6570 \uff08Quantile\uff09
+quiere_continuar=\u60a8\u8981\u7ee7\u7eed\u5417?
+Quitar=\u5220\u9664
+Quitar_capa=\u5220\u9664\u56fe\u5c42
+quitar_enlaces=\u5220\u9664\u94fe\u63a5
+Quitar_todos=\u5168\u90e8\u5220\u9664
+quitar_uniones=\u5220\u9664\u5408\u5e76
+rango_de_escalas=\u6bd4\u4f8b\u503c\u57df
+Rango_de_escalas=\u6bd4\u4f8b\u503c\u57df
+realce=\u589e\u5f3a
+realmente_desea_guardar=\u786e\u5b9a\u8981\u5b58\u76d8\u5417?
+recargar=\u91cd\u8f7d
+recorte_colas=\u4fee\u526a\u5c3e\u90e8
+recorte_vista=Cut to view
+rectangulo=\u65b9\u5f62
+recuento=\u91cd\u6570
+Recuperar_leyenda=\u8f7d\u5165\u56fe\u4f8b
+Recuperar_y_eliminar_otros_zoom=\u6062\u590d\u4ee5\u53ca\u5220\u9664\u53e6\u5916\u7684\u7f29\u653e
+reference_system=\u53c2\u8003\u7cfb\u7edf
+refrescar=\u5237\u65b0
+registros_seleccionados_total=\u5171\u9009\u5b9a\u8bb0\u5f55
+rehacer=\u6062\u590d
+rellenar_marco_vista=\u5145\u586b\u89c6\u56fe\u6846\u67b6
+relleno=\u5145\u586b\:
+remove_elements=\u5220\u9664\u90e8\u5206
+remove_fields=\u5220\u9664\u5b57\u6bb5
+remove_row=\u5220\u9664\u884c
+remove_rows=\u5220\u9664\u884c
+rename_field=\u5b57\u6bb5\u91cd\u65b0\u547d\u540d
+renombrar=\u91cd\u547d\u540d
+reproyectar_aviso=\u56fe\u5c42\u6295\u5f71\u8ddf\u89c6\u56fe\u6295\u5f71\u4e0d\u4e00\u81f4\u3002\n\u6ce8\u610f\: \u5c06\u4f1a\u5728\u4e00\u4e9b\u8f6c\u6362\u65f6\u4e0d\u7cbe\u786e\u3002\n\u8bf7\u9605\u8bfb\u8bf4\u660e
+reproyectar_pregunta=\u60a8\u8981\u91cd\u65b0\u6295\u5f71\u5417?
+resolucion_resultado=\u51b3\u8bae\u7ed3\u679c\:
+resto_valores=\u5176\u4ed6\u503c
+restore_palette=\u56de\u590dpalette
+rotation_field=\u65cb\u8f6c\u5b57\u6bb5
+salir=\u9000\u51fa
+salir_tooltip=\u9000\u51fa
+salvar_raster=\u53e6\u5b58\u4e3a Raster
+Sample=\u793a\u4f8b
+Se_superponen_a=\u5728...\u4e0a\u9762
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=\u8ddf...\u4e00\u6837
+seleccion=\u9009\u62e9
+seleccion_fuente=\u5b57\u4f53\u9009\u62e9
+Seleccion_por_capa=\u6839\u636e\u56fe\u5c42\u9009\u62e9
+selecciona_sistema_de_referencia=\u53c2\u8003\u7cfb\u7edf\u9009\u62e9
+Seleccionar=\u9009\u62e9
+seleccionar_capas=\u56fe\u5c42\u9009\u62e9
+seleccionar_capas_raster=Raster \u56fe\u5c42\u9009\u62e9
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_fichero=\u6587\u4ef6\u9009\u62e9
+seleccionar_por_poligono=\u591a\u8fb9\u5f62\u9009\u62e9
+seleccionar_por_punto=\u6807\u70b9\u9009\u62e9
+seleccionar_por_rectangulo=\u65b9\u5f62\u9009\u62e9
+seleccionar_todos=\u9009\u62e9\u5168\u90e8
+seleccione_campo_enlace=\u9009\u62e9\u8fde\u63a5\u5b57\u6bb5
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u7684\u6b63\u6587\u89d2\u5ea6\u7684\u5b57\u6bb5</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u989c\u8272\u7684\u5b57\u6bb5</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>\u9009\u62e9\u5728\u65b0\u5efa\u865a\u62df\u5c42\u4e0a\u663e\u793a\u7684\u6b63\u6587\u5b57\u6bb5\u3002</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u5b57\u7b26\u7684\u5b57\u6bb5C</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u9ad8\u5ea6\u7684\u5b57\u6bb5</HTML>
+seleccione_fecha=\u9009\u62e9\u65e5\u671f...
+seleccione_tabla_a_enlazar=\u9009\u62e9\u8fde\u63a5\u8868\u683c
+seleccione_tabla_origen=\u9009\u62e9\u8054\u63a5\u7684\u6765\u6e90\u8868\u683c
+selection_color=\u9009\u62e9\u989c\u8272
+selection_up=\u5c06\u5df2\u9009\u7684\u79fb\u5230\u6700\u4e0a\u9762
+separator=\u5206\u9694\u7b26
+Servidor=\u670d\u52a1\u5668
+Shapefile=Shapefile
+show_this_dialog_next_startup=\u5c06\u6b64\u63d0\u793a\u5728\u4e0b\u6b21\u542f\u52a8\u65f6\u663e\u793a
+si=\u786e\u5b9a
+siempre=\u59cb\u7ec8
+simbolo=\u7b26\u53f7
+Simbolo=\u7b26\u53f7
+Simbolo_unico=\u552f\u4e00\u7b26\u53f7
+Simbologia=\u6807\u7b7e
+simplificar_leyenda=\u7b80\u5316\u56fe\u4f8b
+simplify=\u7b80\u5316
+sin_titulo=\u672a\u547d\u540d
+sincronizar_color_borde_relleno=\u628a\u8fb9\u6846\u4e0e\u5145\u586b\u7684\u989c\u8272\u6539\u53d8\u6210\u4e00\u81f4\:
+Size=\u5927\u5c0f
+sobre_la_barra=\u5728\u6bd4\u4f8b\u5c3a\u4e0a
+Solo_para_capas_vectoriales=\u53ea\u53ef\u7528\u5728 Vectorial \u56fe\u5c42
+start_edition=\u5f00\u59cb\u7f16\u8f91
+statistics=\u7edf\u8ba1
+stop_edition=\u7ed3\u675f\u7f16\u8f91
+Style=\u98ce\u683c
+Subir_capa=\u5c06\u56fe\u5c42\u5f80\u4e0a\u79fb
+suma=\u603b\u8ba1
+Superior=\u4e0a
+Tabla=\u8868\u683c
+Tabla_de_Atributos=\u7279\u6027\u8868
+tablas=\u8868\u683c
+Tablas=\u8868\u683c
+tag=\u6807\u7b7e
+tamano=\u5927\u5c0f\:
+tamano_metros=\u5927\u5c0f\uff08\u7c73\uff09
+tamano_pagina=\u9875\u9762\u5927\u5c0f
+tamano_posicion=\u5927\u5c0f/\u4f4d\u7f6e
+tamanyo_borde=\u8fb9\u6846\u5927\u5c0f
+tamanyo_fuente=\u5b57\u5934\u5927\u5c0f
+tamanyo_pagina=\u9875\u9762\u5927\u5c0f
+tamPixX=X\u50cf\u7d20\u5927\u5c0f
+tamPixY=Y\u50cf\u7d20\u5927\u5c0f
+terminar=\u5b8c\u6210
+terminar_edicion=\u5b8c\u6210\u7f16\u8f91
+texto=\u6b63\u6587
+this_table_is_not_self_editable=\u4e0d\u53ef\u7f16\u8f91\u7684\u8868\u683c
+tipo_dato=\u6570\u636e\u7c7b\u578b
+tipo_de_intervalo=\u95f4\u9694\u7c7b\u578b
+tipo_de_leyenda=\u56fe\u4f8b\u7c7b\u578b
+tipo_fichero_proyecto=gvSIG \u6587\u4ef6(*.GVP)
+tipo_linea=\u7ebf\u6761\u7c7b\u578b\:
+tipo_relleno=\u5145\u586b\u7c7b\u578b\:
+tipo_simbolo=\u7b26\u53f7\u7c7b\u578b\:
+tipos_de_documentos=\u6587\u6863\u7c7b\u578b
+titulo=\u9879\u76ee\u7ba1\u7406\u5668
+titulo_fframetext=\u6b63\u6587\u5b57\u6bb5\u6807\u9898
+to_annotation=\u53d8\u6362\u6210\u6ce8\u89e3\u5c42
+to_palette=\u53d8\u6362\u6210 palette
+tooltip_copiar_al_portapapeles=\u590d\u5236\u5230\u526a\u8d34\u677f\u4e0a
+tooltip_cortar_al_portapapeles=\u526a\u5207\u5230\u526a\u8d34\u677f\u4e0a
+tooltip_pegar_desde_el_portapapeles=\u4ece\u526a\u8d34\u677f\u91cc\u7c98\u8d34
+Toquen=\u4e0e...\u63a5\u89e6
+transparencia=\u900f\u660e\u5ea6
+Transparencia=\u900f\u660e\u5ea6
+transparencia_pixel=\u6bcf\u4e2a\u50cf\u7d20\u7684\u900f\u660e\u5ea6
+ungroup=\u53d6\u6d88\u5408\u5e76
+unidades=\u5355\u4f4d\:
+untitled=\u672a\u547d\u540d
+url=URL
+Usar_indice_espacial=\u4f7f\u7528\u7a7a\u95f4\u7d22\u5f15
+usar_marco=\u4f7f\u7528\u6846\u67b6
+usar_titulo=\u4f7f\u7528\u6807\u9898
+usuario=\u7528\u6237
+utilizar_margenes_impresora=\u4f7f\u7528\u6253\u5370\u8fb9\u8ddd
+vacia=\u7a7a\u7684
+Valor=\u6570\u636e
+Valores=\u6570\u636e
+Valores_unicos=\u5355\u503c\u56fe
+varianza=\u65b9\u5dee
+Ventana=\u7a97\u53e3
+ventana_proyecto=\u9879\u76ee\u7a97\u53e3
+Ver=\u663e\u793a
+ver_tabla_atributos=\u67e5\u770b\u7279\u6027\u8868
+ver_tags=
+ver_tooltip=\u663e\u793a\u9879\u76ee\u7a97\u53e3
+vertical=\u5782\u76f4\u7684
+vertical_space=\u5782\u76f4\u7a7a\u95f4
+visible=\u660e\u663e\u7684
+visibles=\u660e\u663e\u7684
+Vista=\u89c6\u56fe
+vistas=\u89c6\u56fe
+visualizacion=\u89c6\u56fe\u4e2d
+Visualizacion=\u89c6\u56fe\u4e2d
+visualizar_cuadricula=\u663e\u793a\u6805\u683c
+warning=\u6ce8\u610f
+xmax=X \u8f74\u6700\u5927
+xmin=X \u8f74\u6700\u5c0f
+Yardas=\u7801
+ymax=Y \u8f74\u6700\u5927
+ymin=Y \u8f74\u6700\u5c0f
+zone=\u533a\u57df
+Zoom_a_la_capa=\u56fe\u5c42\u653e\u5927
+Zoom_Acercar=\u653e\u5927
+Zoom_Alejar=\u7f29\u5c0f
+Zoom_Completo=\u5168\u90e8\u7f29\u653e
+Zoom_Completo_Vista=\u5168\u90e8\u7f29\u653e
+zoom_in_factor=\u653e\u5927\u56e0\u5b50
+Zoom_Mas=\u653e\u5927
+Zoom_Mas_Vista=\u89c6\u56fe\u6846\u67b6\u653e\u5927
+Zoom_Menos=\u7f29\u5c0f
+Zoom_Menos_Vista=\u89c6\u56fe\u6846\u67b6\u7f29\u5c0f
+zoom_out_factor=\u7f29\u5c0f\u56e0\u5b50
+Zoom_pixel=\u7f29\u653e\u5230 Raster \u56fe\u5f62\u5206\u8fa8\u7387
+Zoom_Previo=\u4ee5\u524d\u7f29\u653e
+Zoom_Real=1\:1 \u7f29\u653e
+Zoom_Select=\u7f29\u653e\u5df2\u9009

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_zh.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/about.htm
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/about.htm	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/about.htm	(revision 30230)
@@ -0,0 +1,28 @@
+<html>
+  <head>
+    <title>Extesión del Piloto de Raster</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+<table width="60%" border="0">
+  <tr>
+    <td width="64%"><img src="images/logo_horiz_bicolor_gva.png" width="329" height="50"></td>
+    <td width="36%"><div align="right"><img src="images/logoIver.png" width="87" height="50"></div></td>
+  </tr>
+  <tr>
+    <td colspan="2"><font face="Arial, Helvetica, sans-serif">&copy; Copyright
+      Generalitat Valenciana, IVER T.I and other contributors 2005.</font></td>
+  </tr>
+</table>
+  <h3>Extesión del Piloto de Raster</h3>
+  <p>Aplicaci&oacute;n ganadora del concurso de raster. Incorpora funcionalidades de:</p> 
+  <ul>
+     <li>histograma</li> 
+     <li>paletas de color</li> 
+     <li>recorte de raster</li>
+     <li>apertura de nuevos formatos</li>
+  </ul>
+  <p><br><br><b> Build Number: #build.number#</b></p>
+  </body>
+</html>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/about.htm
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_en.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_en.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_en.properties	(revision 30230)
@@ -0,0 +1,711 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(maximum scale)
+(escala_minima)=(minimum scale)
+1\:=
+_(Simbolo_unico)=(Unique symbols)
+__proyeccion_actual=Current projection\:
+__redimensionar_texto_escala=Resize the text to the view scale
+__seleccion_de_fuente=Font selection
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Down
+abrir=Open
+abrir_plantilla=Open template
+abrir_proyecto=Open project
+abrir_tooltip=Open an existing project
+Abrir_una_capa=Open layer
+Accion_Predefinida=Predefined action
+aceptar=Accept
+Aceptar=Accept
+acerca_de=About...
+activar=Activate
+activar_regla=Activate ruler
+activos=Active
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_layer=Add layer
+add_rows=Add rows
+adjust_transparency=Set transparency
+agrupacion=Grouping
+agrupar=Group
+agrupar_capas=Group layers
+agrupar_graficos=Group graphics
+agrupar_linea=Group graphic line with graphics
+Ajustar_transparencia=Adjust transparency
+ajustes_linea_grafica=Graphic line settings
+Al_leer_la_leyenda=Reading legend
+alias=Alias
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+alineamiento=Alignment\:
+alinear=Align
+alinear_graficos=Align graphics
+alta=High
+alto=Height
+altura=Height\:
+Altura_fija_de_texto=Fixed text height
+ambito=Scope
+Anadir=Add
+Anadir_al_conjunto=Add to set
+Anadir_capa=Add layer
+Anadir_Capa=Add layer
+anadir_tag=Add tag
+Anadir_todos=Add all
+ancho=Width
+ancho_alto=Width x Height
+anchura=Width\:
+Aplicar=Apply
+Archivo=File
+arriba=Up
+ascending_order=Ascending order
+ascending_order_tooltip=Sort by selected field in ascending order
+Atributo=Attribute
+automatico=Automatic
+Ayuda=Help
+back=Previous
+background_color=Background color
+baja=Low
+Bajar_capa=Move layer down
+bandas=Bands
+barra=Bar\:
+base=base
+base_datos=Data base
+bmp=BMP files
+Bold=Bold
+borra_seleccion=Clear selection
+borrador=Draft
+borrar=Delete
+box=box
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+cajetin=Box
+Calcular_intervalos=Compute intervals
+calidad=Quality
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Cambio_Color=Change color
+cambio_nombre=Rename
+campo=Field
+Campo=Field
+campo_altura_texto=Text field heigth\:
+Campo_de_clasificacion=Classification field
+Campo_de_etiquetado=Labelling field
+Campos=Fields
+cancel=Cancel
+Cancel=Cancel
+cancelar=Cancel
+Cancelar=Cancel
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Locator layers
+Centimetros=Centimeters
+cerrar=Close
+Cerrar=Close
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circulo=Circle
+clave=Code
+close=Close
+coincidir_tamanyo=Match size
+colocar_a_margenes=Place with reference to margins.
+colocar_alrededor_seleccionados=Place around the graphics selected.
+colocar_alrededor_todos=Place around all the graphics.
+colocar_delante=Bring to front
+colocar_detras=Place back
+color=Color\:
+Color_final=End color\:
+Color_inicio=Begin color
+color_texto=Text color\:
+comentarios=Comments
+comenzar_edicion=Start edition
+compleja=Complex
+configurar=Configure
+configurar_localizador=Configure locator map
+Configurar_localizador=Configure locator ...
+confirmar_borrar=The element will be removed. Are you sure?
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+conservar_escala_visualizacion=Maintain viewing scale
+consulta=Query
+Contengan=Contain
+contraste=Contrast
+coor_geograficas=Geographic coordinates
+copiar=Copy
+copy=Copy
+cortar=Cut
+creation_date=Creation date
+Crucen_con=Cross over
+cuando_activo=When active
+cut=Cut
+Dado_un_campo_de_atributos=Given a attribute field
+datum=Datum
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+dehacer=Undo
+delete_field=Delete field
+Derecha=Right
+Derecho=Right
+desagrupar=Ungroup
+desagrupar_capas=Ungroup layers
+desagrupar_graficos=Ungroup graphics
+descending_order=Descending order
+descending_order_tooltip=Sort by selected field in descending order
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desde_arriba=From top\:
+desde_izquierda=From left\:
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Desplazamiento=Panning
+desviacion_tipica=Standard deviation
+distance_units=Measuring units
+distribuir=Distributing\:
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+divisiones_izquierda=Divisions to the left
+documento=Document
+documentos_existentes=Existing documents
+draw_text_only=Draw text only
+driver=Driver
+Dxffiles=DXFFiles
+edicion=Edition
+editable=Editable
+Editar_leyenda=Edit style
+editar_vertices=Edit vertex
+el_numero_maximo_de_intervalos_para_este_campo_es=The maximum number of intervals for this field is
+Elegir_Color=Select color
+Elegir_Fuente=Select font
+elemento_ya_existe=The element already exists
+Elementos_seleccionados_de_la_capa=Selected items of a layer
+Eliminar=Delete
+eliminar_capa=Delete layer
+eliminar_columna=Remove column
+eliminar_extremos=Remove edges
+eliminar_fila=Remove row
+en_el_mapa=In the layout\:
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in units
+Encuadre=Zoom Manager
+Encuadre_Vista=View frame pan
+enlace_vivo=Active link
+Enlazar_a_fichero_de_texto=Link to text files
+Enlazar_a_ficheros_de_imagen=Link to image files
+equal_intervals=Equal intervals
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_leyenda=Error saving legend
+Error_guardando_la_plantilla=Error saving the template
+escala=Scale
+Escala=Scale
+escala_desconocida=Unknown scale
+escala_maxima=Maximum scale
+Escala_Maxima=Maximum scale
+escala_minima=Minimum scale
+Escala_Minima=Minimum scale
+escala_usuario=Scale specified by the user
+espaciado_horizontal=Horizontal grid spacing
+espaciado_vertical=Vertical grid spacing
+espacio=Space\:
+estadisticas=Statistics
+este_por_debajo_de_=To be under
+este_por_encima_de=To be over
+Esten_contenidos_en=Contained in
+Etiqueta=Label
+Etiquetados=Labelling
+etiquetas=Lables\:
+Etiquetas_estandar=Standard labels
+Examinar=Browse
+export=Export
+exportar=Export
+exportar_pdf=Export to pdf
+exportar_ps=Export to ps
+extension=Extension
+Extent=Extent
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+factor_zoom_incorrecto=Incorrect zoom factor.
+fallo_capas=Layer access error.  The following layers will be deleted from the proyect.
+family=Family
+fichero=file
+Fichero=File
+fichero_existe=Selected file already exists as layer band
+fichero_incorrecto=Invalid file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filtro=Filter
+finish=Finish
+Font=Font
+formato=Format
+Formato_de_numero_erroneo=Incorrect number format
+formato_incorrecto=Invalid format
+fuente=Font
+General=General
+georeferenciado=Georeferenced
+gestion_encuadre=Zoom Manager
+grados=Degrees\:
+Grados=Degrees
+Graficos=Graphics
+grosor_linea=Line width\:
+group=Group
+group_graphic_line=Group graphic line
+grupo=group
+guardado=Saved in
+guardar=Save
+Guardar=Save
+guardar_cambios=Save changes?
+guardar_como=Save as...
+guardar_como_plantilla=Save as template
+Guardar_el_zoom_actual=Save current zoom
+Guardar_leyenda=Save legend
+guardar_proyecto=Save project
+guardar_tooltip=Save changes to project
+Habilitar_etiquetado=Enable labelling
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=Horizontal space
+Identificar_Resultados=Identify results
+Igual_que_la_impresora=Same as printer
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Implimir=Print
+importar=Import
+Imprimir=Print
+Indexando=Indexing...
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+Inferior=Lower
+info=Information
+informacion=Information
+Informacion=Information
+Inicializando=Initializing
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_row=Insert row
+Insertar=Insert
+insertar_cajetin=Insert grid
+insertar_circulo=Insert circle
+insertar_columna=Insert column
+insertar_escala=Insert scale
+insertar_fila=Insert row
+insertar_imagen=Insert image
+insertar_leyenda=Insert legend
+insertar_linea=Insert line
+insertar_norte=Insert north
+insertar_poligono=Insert polygon
+insertar_polilinea=Insert polyline
+insertar_punto=Insert point
+insertar_rectangulo=Insert rectangle
+insertar_texto=Insert text
+insertar_vista=Insert view
+Intersecten_con=Intersected with
+Intervalo=Interval
+Intervalos=Intervals
+introduce_nombre=Type the new name
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_value_for_gap=Invalid value for gap
+invert_selection=Invert selection
+Italic=Italic
+Izquierda=Left
+Izquierdo=Left
+join=Join
+jpg=JPEG files
+kilometros=Kilometers
+Kilometros=Kilometers
+leyenda=Legend
+Leyenda=Legend
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labelling. Please, change the legend before removing the union.
+Leyenda_Por_Defecto=Default legend
+linea=Line
+linea_grafica=Graphic line
+lineal_directo=Direct linear
+link=Link
+Link=Link
+localizador=Locator
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+m/pixel=metros/pixel
+malla_activada=Active grid
+manage_fields=Manage fields
+mantener_intervalo=Keep interval
+map_units=Map units
+mapa=Map
+Mapa=Map
+mapas=Maps
+marco=Frame
+marco_vista=Framework of the view
+margenes=Margins\:
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+max_length_is=Max length is
+maximo=Maximum
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+media=Mean
+medir_area=Measure area
+medir_distancias=Measure distances
+metadatos=Metadatos
+metros=Meters
+Metros=Meters
+Milimetros=Milimeters
+Millas=Miles
+minimo=Minimum
+modificar=modify
+modification_date=Modification date
+mostrar_escala_numerica=Show numeric scale.
+Mostrar_siempre=To show always
+mostrar_unidades=Show units
+move_elements=Move elements
+Muestra_atributos=Show attributes of selected layers.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Show the layers features using a each unique value symbol
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Show the layers features using a range of color according to values of a attribute field
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Show all the items of a layer using the same symbol
+natural_intervals=Natural intervals
+navegacion=Navigation
+navegacion_vista=Navegation in a view
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_field=New field
+new_field_properties=New field properties
+next=Next
+ninguna_impresora_configurada=No printer set
+Nivel_de_transparencia=Transparency level
+no=No
+no_activos=Not active
+No_de_intervalos=Nr of intervals
+no_es_posible_aplicar_leyenda_vacia=It's imposible to apply empty legend.
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_mostrar=Do not show the layer when the scale
+No_mostrar_la_capa_cuando_la_escala=Don't show the layer when the scale
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+no_visibles=Not visible
+nombre=Name
+Nombre=Name
+nombre_no_valido=Invalid name
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+nombre_sesion=Session name
+none=none
+none_selected=None selected
+normal=Normal
+north=North
+Nueva_tabla=New table
+nuevo=New
+Nuevo_conjunto=New set
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+nuevo_proyecto=New project
+nuevo_tooltip=Create a new project
+num_bandas=Band count
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+numero_decimales_mostrar=Number of decimals
+numero_incorrecto=Invalid value
+ok=Ok
+opacidad=Opacity
+operacion_cancelada=Cancelled operation
+options.layout.paper_properties.landscaped=Lands scaped
+options.layout.paper_properties.paper_direction=Paper direction
+options.layout.paper_properties.portrait=Portrait
+options.layout.paper_properties.title=Properties
+options.view.default_map_overview_back_color=Default map overview back color
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=Default view back color
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+orientacion=Orientation\:
+origen_de_datos=Data origin
+Origen_de_datos=Data origin
+Origen_de_Datos=Data origin\:
+owner=Owner
+paste=Paste
+paste_elements=Paste elements
+path=Path
+pdf=Pdf
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Allows to set label of the map elements with the value of a particular field
+Personalizado=Custom
+personalizar_margenes=Customize margins
+Pies=Feet
+pila_de_comandos=commands stack
+pixeles=pixels
+pixels=pixels
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+png=PNG files
+poligono=Polygon
+polilinea=polyline
+poner_capas_a=Set layers as
+por_debajo_de=below\:
+por_encima_de=above\:
+Por_favor_active_la_capa=Please, activate the layer
+posicion_linea=Position of the line
+precision=Precision
+preparar_pagina=Prepare page
+Preparar_pagina=Prepare page
+presentacion=Presentation
+previsualizacion=Preview
+Previsualizacion=Preview
+Previsualizacion_de_simbolo=Symbol preview
+projection=Projection
+propiedad=Oroperty
+propiedades=Properties
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+Propiedades_escala_grafica=Properties of the scale bar
+propiedades_grafico=Graphic properties
+propiedades_mapa=Map properties
+propiedades_marco_imagenes=Properties of Image framework
+propiedades_marco_leyenda=Properties of legend framework
+propiedades_marco_vista=Properties of view framework
+propiedades_raster=Raster properties
+propiedades_sesion=Session properties
+propiedades_tabla=Table properties
+Propiedades_texto=Properties of text
+propiedades_vista=View properties
+Proyecciones=Projections
+ps=Ps
+puerto=Port
+Pulgadas=Inches
+punto=Point
+quantile_intervals=Quantile interval
+quiere_continuar=Would you like to continue?
+Quitar=Remove
+Quitar_capa=Remove layer
+quitar_enlaces=Remove links
+Quitar_todos=Remove all
+quitar_uniones=Remove joins
+rango_de_escalas=Scale range
+Rango_de_escalas=Rank of scales
+realce=Enhance
+realmente_desea_guardar=Would you really like to save?
+recargar=Reload
+recorte_colas=Tail trimming
+recorte_vista=Cut to view
+rectangulo=Rectangle
+recuento=Recount
+Recuperar_leyenda=Load legend
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+reference_system=Reference System
+refrescar=Refresh
+registros_seleccionados_total=Total of selected records
+rehacer=Redo
+rellenar_marco_vista=Fill view framework
+relleno=Fill\:
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+renombrar=Rename
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+reproyectar_pregunta=Do you want to reproject?
+resolucion_resultado=Resolution of the result\:
+resto_valores=Other values
+restore_palette=Restore palette
+rotation_field=Rotation field
+salir=Exit
+salir_tooltip=Exit
+salvar_raster=Save as raster
+Sample=Sample
+Se_superponen_a=Over
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=same as
+seleccion=Selection
+seleccion_fuente=Font selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+Seleccionar=Select
+seleccionar_capas=Select Layers
+seleccionar_capas_raster=Select raster layers
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccionar_por_punto=Select by point
+seleccionar_por_rectangulo=Select by rectangle
+seleccionar_todos=Select all
+seleccione_campo_enlace=Select field to use for link
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+seleccione_fecha=Select date...
+seleccione_tabla_a_enlazar=Select table to link
+seleccione_tabla_origen=Select origin table of the join
+selection_color=Color selection
+selection_up=Move selection to top
+separator=Separator
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Show this dialog on next startup
+si=yes
+siempre=Always
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Unique symbols
+Simbologia=Symbols
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+sin_titulo=Untitled
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+Size=Size
+sobre_la_barra=On the scale bar
+Solo_para_capas_vectoriales=Only for vector layers
+start_edition=Start edition
+statistics=Statistics
+stop_edition=Finish edition
+Style=Style
+Subir_capa=Move layer up
+suma=Sum
+Superior=Upper
+symbol_selector=Symbol selector
+Tabla=Table
+Tabla_de_Atributos=Table of attributes
+tablas=Tables
+Tablas=Tables
+tag=tag
+tamano=Size\:
+tamano_metros=Size in meters
+tamano_pagina=Page Size
+tamano_posicion=size/position
+tamanyo_borde=Border size
+tamanyo_fuente=Font size
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+texto=Text
+this_table_is_not_self_editable=Table not editable
+tipo_dato=Data type
+tipo_de_intervalo=Interval type
+tipo_de_leyenda=Type of legend
+tipo_fichero_proyecto=gvSIG project file(*.GVP)
+tipo_linea=Stroke\:
+tipo_relleno=Fill\:
+tipo_simbolo=Type of symbol\:
+tipos_de_documentos=Document types
+titulo=Project manager
+titulo_fframetext=Text field title
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Toquen=in contact with
+transparencia=Transparency
+Transparencia=Transparency
+transparencia_pixel=Transparency per pixel
+ungroup=Ungroup
+unidades=Units\: 
+Unidades=Units\: 
+untitled=Untitled
+url=url
+Usar_indice_espacial=Use spatial index
+usar_marco=Use frame
+usar_titulo=Use title
+usuario=User
+utilizar_margenes_impresora=Use printer margins
+vacia=Empty
+Valor=Value
+Valores=Values
+Valores_unicos=Unique values
+varianza=Variance
+Ventana=Window
+ventana_proyecto=Project window
+Ver=Show
+ver_error_capa=Show errors
+ver_tabla_atributos=See table of attributes
+ver_tags=Show tags
+ver_tooltip=Show project window
+vertical=Vertical
+vertical_space=Vertical space
+visible=Visible
+visibles=Visible
+Vista=View
+vistas=Views
+visualizacion=Viewing
+Visualizacion=Visualization
+visualizar_cuadricula=Visualize grid
+warning=Warning
+xmax=Maximum X
+xmin=Minimum X
+Yardas=Yards
+ymax=Maximum Y
+ymin=Minimum Y
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+Zoom_Acercar=Zoom in
+Zoom_Alejar=Zoom out
+Zoom_Completo=Full extent
+Zoom_Completo_Vista=View frame full extent
+zoom_in_factor=Zoom in factor
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom In view frame
+Zoom_Menos=Zoom out
+Zoom_Menos_Vista=View frame zoom out
+zoom_out_factor=Zoom out factor
+Zoom_pixel=Zoom to raster resolution
+Zoom_Previo=Previous zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom to selection

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_en.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_gl.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_gl.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_gl.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Proxecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar o texto a escala coa vista.
+__seleccion_de_fuente=Selecci\u00f3n de fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abaixo
+abrir=Abrir
+abrir_plantilla=Abrir modelo
+abrir_proyecto=Abrir proxecto
+abrir_tooltip=Abre un proxecto existente
+Abrir_una_capa=Abrir capa
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activar=Activate
+activar_regla=Activar regra
+activos=Activos
+add_delete_edit_fields=
+add_layer=Engadir capa
+add_rows=
+adjust_transparency=Axustar transparencia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar li\u00f1a gr\u00e1fica con gr\u00e1ficos
+Ajustar_transparencia=Axustar transparencia
+ajustes_linea_grafica=Axustes de li\u00f1a gr\u00e1fica
+Al_leer_la_leyenda=\u00d3 l\u00e9r a lenda
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ali\u00f1amento\:
+alinear=Ali\u00f1ar
+alinear_graficos=Ali\u00f1ar gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa do texto
+ambito=\u00c1mbeto
+Anadir=Engadir
+Anadir_al_conjunto=Engadir ao conxunto
+Anadir_capa=Engadir capa
+Anadir_Capa=Engadir capa
+anadir_tag=
+Anadir_todos=Engadir todos
+ancho=Largo
+ancho_alto=Ancho alto
+anchura=Largo\:
+Aplicar=Aplicar
+Archivo=Arquivo
+arriba=Arriba
+ascending_order=Orde ascendente
+ascending_order_tooltip=Ordena polo campo seleccionado en orde ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Axuda
+back=Anterior
+background_color=C\u00f3r de fondo
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bmp=Arquivos de tipo bmp
+Bold=
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+box=
+brillo=Brillo
+brillo_y_contraste=Brillo e Contraste
+browse=Examinar
+cajetin=
+Calcular_intervalos=Calcular intervalos
+calidad=Calidade
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Cambio c\u00f3r
+cambio_nombre=Cambio de nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas do localizador
+Centimetros=Cent\u00edmetros
+cerrar=Pechar
+Cerrar=Pechar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=C\u00edrculo
+clave=Clave
+close=Pechar
+coincidir_tamanyo=
+colocar_a_margenes=Colocar con referencia a marxes.
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de t\u00f3dolos gr\u00e1ficos
+colocar_delante=Colocar diante
+colocar_detras=Colocar detr\u00e1s
+color=Cor\:
+Color_final=Cor final
+Color_inicio=Cor de inicio
+color_texto=Cor do texto
+comentarios=Comentarios
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador
+confirmar_borrar=Seguro que desexa borrar o elemento?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+consulta=Consulta
+Contengan=Conte\u00f1an
+contraste=Contraste
+coor_geograficas=Coordenadas xeogr\u00e1ficas
+copiar=
+copy=Copiar
+cortar=
+creation_date=Data de creaci\u00f3n
+Crucen_con=Crucen con
+cuando_activo=Cando activo
+cut=
+Dado_un_campo_de_atributos=Dado un campo de atributos
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desfacer
+delete_field=Borrar campo
+Derecha=Dereita
+Derecho=Dereito
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orde descendente
+descending_order_tooltip=Ordena polo campo seleccionado en orde descendente
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Dende arriba\:
+desde_izquierda=Dende a esquerda
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desfacer
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Desprazamento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribu\u00edr\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisi\u00f3ns \u00e1 esquerda
+documento=
+documentos_existentes=Documentos existentes
+draw_text_only=
+driver=Driver
+Dxffiles=Arquivos .DXF
+edicion=Edici\u00f3n
+editable=
+Editar_leyenda=Editar lenda
+editar_vertices=Editar v\u00e9rtices
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo \u00e9
+Elegir_Color=Elixir Cor
+Elegir_Fuente=Elixir fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=
+eliminar_extremos=Eliminar extremos
+eliminar_fila=
+en_el_mapa=No mapa\:
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=
+Encuadre=Encadre
+Encuadre_Vista=Encadre sobre a vista
+enlace_vivo=Ligaz\u00f3n viva
+Enlazar_a_fichero_de_texto=Ligar a arquivo de texto
+Enlazar_a_ficheros_de_imagen=Ligar a arquivos de imaxe
+equal_intervals=Intervalos iguais
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erro ao gardar a lenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada polo usuario
+espaciado_horizontal=Espaciado horizontal da malla
+espaciado_vertical=Espaciado vertical da malla
+espacio=Espazo\:
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Estea por debaixo de
+este_por_encima_de=Estea por riba de
+Esten_contenidos_en=Estean contidos en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetados
+etiquetas=Etiquetas
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3n
+Extent=Extent
+extents_no_coincidentes=Extensi\u00f3ns non coincidentes
+factor_zoom_incorrecto=
+fallo_capas=Erro accedendo \u00e1s capas. As seguintes capas van ser eliminadas do proxecto
+family=
+fichero=
+Fichero=Arquivo
+fichero_existe=Arquivo existe
+fichero_incorrecto=Arquivo incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtro
+finish=Rematar
+Font=Fonte
+formato=Formato
+Formato_de_numero_erroneo=
+formato_incorrecto=Formato incorrecto
+fuente=Fonte
+General=Xeral
+georeferenciado=
+gestion_encuadre=Xesti\u00f3n de Encadre
+grados=Graos\:
+Grados=Graos
+Graficos=Gr\u00e1ficos
+grosor_linea=Grosor de li\u00f1a\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Gardado en
+guardar=Gardar
+Guardar=Gardar
+guardar_cambios=\u00bfQuere gardar os cambios?
+guardar_como=Gardar como
+guardar_como_plantilla=Gardar como dese\u00f1o
+Guardar_el_zoom_actual=Gardar o zoom
+Guardar_leyenda=Gardar lenda
+guardar_proyecto=Gardar proxecto
+guardar_tooltip=Gardar os cambios ao proxecto
+Habilitar_etiquetado=Habilitar etiquetado
+Hiperenlace=Hiperligaz\u00f3n
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual que a impresora
+igual_todos_lados=Desprazamento igual por t\u00f3dolos lados
+imagen=Imaxe
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente a capa
+indexar_campos=
+Inferior=Inferior
+info=Informaci\u00f3n
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Inicializando=Inicializando
+initial_warning=
+insert_row=Inserir fila
+Insertar=Insertar
+insertar_cajetin=Inserir cadro de rotulaci\u00f3n
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imaxe
+insertar_leyenda=Insertar lenda
+insertar_linea=Insertar li\u00f1a
+insertar_norte=Insertar norte
+insertar_poligono=Insertar pol\u00edgono
+insertar_polilinea=Inserir polili\u00f1a
+insertar_punto=Insertar punto
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduce o novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Empalmar
+jpg=Arquivos JPEG
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+leyenda=Lenda
+Leyenda=Lenda
+leyenda_campo_unido=Estase a utilizar un campo da uni\u00f3n na lenda (e/ou etiquetado). Cambie a lenda antes de quitar a uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Lenda por defecto
+linea=Li\u00f1a
+linea_grafica=Li\u00f1a gr\u00e1fica
+lineal_directo=Lineal directo
+link=Ligazon
+Link=Ligaz\u00f3n
+localizador=Localizador
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=
+mantener_intervalo=Manter intervalo
+map_units=Unidades de mapa
+mapa=
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=M\u00e1rxenes\:
+mas_de_100_simbolos=M\u00e1is de 100 s\u00edmbolos non adoitan aportar informaci\u00f3n nun plano
+max_length_is=
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=Est\u00e1 seguro de que quere sa\u00edr?
+MDIFrame.salir=Sa\u00edr
+media=Media
+medir_area=Medir \u00c1rea
+medir_distancias=Medir distancias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+minimo=M\u00ednimo
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3n
+mostrar_escala_numerica=
+Mostrar_siempre=Amosar sempre
+mostrar_unidades=Amosar unidades
+move_elements=
+Muestra_atributos=Amosa os atributos das capas seleccionadas
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Amosa os elementos da capa empregando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Amosa os elementos da capa empregando unha gama de cores en funci\u00f3n do valor dun determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Amosa todolos elementos dunha capa empregando o mesmo s\u00edmbolo
+natural_intervals=Intervalos naturais
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=Necesita unha capa vectorial activa
+new_field=Novo campo
+new_field_properties=
+next=Seguinte
+ninguna_impresora_configurada=Ningunha impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=Non
+no_activos=Non activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Non amosar a capa cando a escala
+No_mostrar_la_capa_cuando_la_escala=Non amosar a capa cando a escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Non se puido obter a t\u00e1boa da capa
+no_visibles=Non visibles
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nome que se lle dar\u00e1 ao zoom
+nombre_sesion=Nome da sesi\u00f3n
+none=
+none_selected=Ning\u00fan seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nova t\u00e1boa
+nuevo=Novo
+Nuevo_conjunto=Novo conxunto
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Novo proxecto
+nuevo_tooltip=Crea un novo proxecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Aceptar
+opacidad=Opacidade
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Orixe dos datos
+Origen_de_Datos=Orixe dos datos\:
+owner=Propietario
+paste=Pegar
+paste_elements=
+path=Ruta
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa c\u00f3 valor dun determinado campo
+Personalizado=Persoalizado
+personalizar_margenes=
+Pies=P\u00e9s
+pila_de_comandos=P\u00eda de comandos
+pixeles=p\u00edxeles
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=Arquivos png
+poligono=Pol\u00edgono
+polilinea=polili\u00f1a
+poner_capas_a=
+por_debajo_de=por debaixo de\:
+por_encima_de=por riba de\:
+Por_favor_active_la_capa=Por favor active a capa
+posicion_linea=Posici\u00f3n da li\u00f1a
+precision=
+preparar_pagina=Prepara p\u00e1xina
+Preparar_pagina=Prepara p\u00e1xina
+presentacion=Presentaci\u00f3n
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=
+propiedad=
+propiedades=Propiedades
+propiedades_cajetin=Propiedades da cadro de rotulaci\u00f3n
+propiedades_capa=Propiedades da capa
+propiedades_de_la_capa=Propiedades da capa
+Propiedades_escala_grafica=Propiedades da escala gr\u00e1fica
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades do mapa
+propiedades_marco_imagenes=Propiedades do marco de imaxes
+propiedades_marco_leyenda=Propiedades do marco de lenda
+propiedades_marco_vista=Propiedades do marco de vista
+propiedades_raster=Propiedades do raster
+propiedades_sesion=Propiedades da sesi\u00f3n
+propiedades_tabla=Propiedades da t\u00e1boa
+Propiedades_texto=Propiedades do texto
+propiedades_vista=Propiedades da vista
+Proyecciones=
+ps=
+puerto=Porto
+Pulgadas=Pulgadas
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=Est\u00e1 seguro de que quere continuar?
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar ligaz\u00f3ns
+Quitar_todos=Quitar todos
+quitar_uniones=Quitar uni\u00f3ns
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=Realmente desexa gardar?
+recargar=
+recorte_colas=Recorte colas
+recorte_vista=Recorte a vista
+rectangulo=Rect\u00e1ngulo
+recuento=Reconto
+Recuperar_leyenda=Recuperar lenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+refrescar=Refrescar
+registros_seleccionados_total=Total rexistros seleccionados
+rehacer=Refacer
+rellenar_marco_vista=Rechear marco da vista
+relleno=Reenchido\:
+remove_elements=
+remove_fields=
+remove_row=Elimina fila
+remove_rows=
+rename_field=
+renombrar=Renomear
+reproyectar_aviso=A proxecci\u00f3n da capa non \u00e9 igual que a da vista\nAVISO\: Pode ser inexacto con algunhas transformaci\u00f3ns.\nPor favor, lea a documentaci\u00f3n
+reproyectar_pregunta=Desexa reproxectar?
+resolucion_resultado=Resoluci\u00f3n do resultado\:
+resto_valores=Resto de valores
+restore_palette=
+rotation_field=
+salir=Sa\u00edr
+salir_tooltip=Sa\u00edr
+salvar_raster=Gardar a raster xeoreferenciado
+Sample=Exemplo
+Se_superponen_a=Sobrep\u00f3\u00f1ense a
+Sean_disjuntos_a=sexan disxuntos a
+Sean_iguales_a=sexan iguais a
+seleccion=Selecci\u00f3n
+seleccion_fuente=Selecci\u00f3n de fonte
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar das capas activas os elementos que\:
+Seleccionar_del_conjunto=Seleccionar do conxunto
+Seleccionar_fichero=Seleccionar arquivo
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccionar o campo polo que ligar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione unha data...
+seleccione_tabla_a_enlazar=Seleccione a t\u00e1boa a ligar
+seleccione_tabla_origen=Selecciona a t\u00e1boa de orixe da join
+selection_color=Cor da selecci\u00f3n
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolox\u00eda
+simplificar_leyenda=
+simplify=
+sin_titulo=Sen t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do bordo coa de reenchido\:
+Size=
+sobre_la_barra=Sobre a barra
+Solo_para_capas_vectoriales=S\u00f3 para capas vectoriais
+start_edition=Comenzar edici\u00f3n
+statistics=Estat\u00edsticas
+stop_edition=Rematar edici\u00f3n
+Style=Estilo
+Subir_capa=Subir capa
+suma=Suma
+Superior=Superior
+symbol_selector=
+Tabla=T\u00e1boa
+Tabla_de_Atributos=T\u00e1boa de atributos
+tablas=T\u00e1boas
+Tablas=Taules
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros\:
+tamano_pagina=Tama\u00f1o da p\u00e1xina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tam\u00f1o do bordo
+tamanyo_fuente=Tama\u00f1o da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texto
+this_table_is_not_self_editable=
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de lenda
+tipo_fichero_proyecto=Arquivo de proxecto gvSIG (*.GVP)
+tipo_linea=Tipo de Li\u00f1a\:
+tipo_relleno=Tipo de Reenchido\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Xestor de proxectos
+titulo_fframetext=T\u00edtulo do campo de texto
+to_annotation=Transforma a capa de anotaci\u00f3ns
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquen
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por p\u00edxel
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+untitled=Sen t\u00edtulo
+url=
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Empregar marco
+usar_titulo=Empregar t\u00edtulo
+usuario=Usuario
+utilizar_margenes_impresora=Empregar m\u00e1rxenes de impresora
+vacia=Baleira
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varianza
+Ventana=Fiestra
+ventana_proyecto=Vent\u00e1 de proxecto
+Ver=Ver
+ver_error_capa=
+ver_tabla_atributos=Ver T\u00e1boa de atributos
+ver_tags=
+ver_tooltip=Amosa a vent\u00e1 de proxecto
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Vis\u00edbeis
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+xmax=xmax
+xmin=xmin
+Yardas=Yardas
+ymax=ymax
+ymin=ymin
+Zoom_a_la_capa=Zoom \u00e1 capa
+Zoom_Acercar=Zoom acercar
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+zoom_in_factor=
+Zoom_Mas=Zoom m\u00e1is
+Zoom_Mas_Vista=Zoom m\u00e1is sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+zoom_out_factor=
+Zoom_pixel=Zoom pixel
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom ao seleccionado

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_gl.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_ca.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_ca.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_ca.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e0xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbol \u00fanic)
+__proyeccion_actual=Projecci\u00f3 actual\:
+__redimensionar_texto_escala=Redimensione el text a escala amb la vista
+__seleccion_de_fuente=Selecci\u00f3 de font
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Avall
+abrir=Obrir
+abrir_plantilla=Obrir plantilla
+abrir_proyecto=Obrir projecte
+abrir_tooltip=Obri un projecte existent
+Abrir_una_capa=Obrir una capa
+Accion_Predefinida=Acci\u00f3 predefinida
+aceptar=Acceptar
+Aceptar=Acceptar
+acerca_de=Sobre...
+activar=Activar
+activar_regla=Activar regla
+activos=Actius
+add_delete_edit_fields=
+add_layer=Afegir capa
+add_rows=
+adjust_transparency=Ajustar transpar\u00e8ncia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capes
+agrupar_graficos=Agrupar gr\u00e0fics
+agrupar_linea=Agrupar l\u00ednia gr\u00e0fica amb gr\u00e0fics
+Ajustar_transparencia=Ajustar transpar\u00e8ncia
+ajustes_linea_grafica=Ajustos de l\u00ednia gr\u00e0fica
+Al_leer_la_leyenda=En llegir la llegenda
+alias=\u00c0lies
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alineament\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e0fics
+alta=Alta
+alto=Alt
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa de text
+ambito=\u00c0mbit
+Anadir=Afegir
+Anadir_al_conjunto=Afegir al conjunt
+Anadir_capa=Afegir capa
+Anadir_Capa=Afegir capa
+anadir_tag=
+Anadir_todos=Afegir tots
+ancho=Ample
+ancho_alto=Amplada al\u00e7ada
+anchura=Ampl\u00e0ria\:
+Aplicar=Aplicar
+Archivo=Fitxer
+arriba=Amunt
+ascending_order=Orde ascendent
+ascending_order_tooltip=S'ordena pel camp seleccionat en orde ascendent
+Atributo=Atribut
+automatico=Autom\u00e0tic
+Ayuda=Ajuda
+back=Anterior
+background_color=Color de fons
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandes
+barra=Barra
+base=base
+base_datos=Base de dades
+bmp=Fitxers de tipus bmp
+Bold=
+borra_seleccion=Esborrar selecci\u00f3
+borrador=Esborrany
+borrar=Esborrar
+box=
+brillo=Brillantor
+brillo_y_contraste=Brillantor i contrast
+browse=Examinar
+cajetin=
+Calcular_intervalos=Calcular intervals
+calidad=Qualitat
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Canvi color
+cambio_nombre=Canvi de nom
+campo=Camp
+Campo=Camp
+campo_altura_texto=Camp d'altura de text\:
+Campo_de_clasificacion=Camp de classificaci\u00f3
+Campo_de_etiquetado=Camp d'etiquetat
+Campos=Camps
+cancel=Cancel\u00b7lar
+Cancel=Cancel\u00b7lar
+cancelar=Cancel\u00b7lar
+Cancelar=Cancel\u00b7lar
+Capa=Capa
+Capas=Capes
+Capas_del_localizador=Capes del localitzador
+Centimetros=Cent\u00edmetres
+cerrar=Tancar
+Cerrar=Tancar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=Cambiar ampl\u00e0ria
+circulo=Cercle
+clave=Clau
+close=Tancar
+coincidir_tamanyo=
+colocar_a_margenes=Col\u00b7locar amb refer\u00e8ncia a m\u00e0rgens.
+colocar_alrededor_seleccionados=Col\u00b7locar al voltant dels gr\u00e0fics seleccionats.
+colocar_alrededor_todos=Col\u00b7locar al voltant de tots els gr\u00e0fics.
+colocar_delante=Col\u00b7locar davant
+colocar_detras=Col\u00b7locar darrere
+color=Color\:
+Color_final=Color final\:
+Color_inicio=Color d'inici
+color_texto=Color del text\:
+comentarios=Comentaris
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localitzador
+Configurar_localizador=Configurar localitzador ...
+confirmar_borrar=Est\u00e0 segur que desitja esborrar l'element?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conservar escala de visualitzaci\u00f3
+consulta=Consulta
+Contengan=Ontinguen
+contraste=Contrast
+coor_geograficas=Coordenades geogr\u00e0fiques
+copiar=Copiar
+copy=Copiar
+cortar=Retallar
+creation_date=Data de creaci\u00f3
+Crucen_con=Encreuen amb
+cuando_activo=Si est\u00e0 Actiu
+cut=Retallar
+Dado_un_campo_de_atributos=Donat un camp d'atributs
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desfer
+delete_field=Esborrar el camp
+Derecha=Dreta
+Derecho=Dret
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e0fics
+descending_order=Orde descendent
+descending_order_tooltip=S'ordena pel camp seleccionat en orde descendent
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Des de Dalt\:
+desde_izquierda=Des de l'esquerra\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desfer
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Despla\u00e7ament
+desviacion_tipica=Desviaci\u00f3 t\u00edpica
+distance_units=Unitats de mesura
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisions a l'esquerra
+documento=
+documentos_existentes=Documents existents
+draw_text_only=
+driver=Driver
+Dxffiles=Fitxers .DXF
+edicion=Edici\u00f3
+editable=
+Editar_leyenda=Editar legenda
+editar_vertices=Editar v\u00e8rtex
+el_numero_maximo_de_intervalos_para_este_campo_es=El nombre m\u00e0xim d'intervals per a este camps \u00e9s
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir font
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=elements seleccionats de la capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=
+eliminar_extremos=Eliminar extrems
+eliminar_fila=
+en_el_mapa=En el mapa\:
+En_metros=En metres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Enquadre
+Encuadre_Vista=Enquadre sobre la vista
+enlace_vivo=Enlla\u00e7 viu
+Enlazar_a_fichero_de_texto=Enlla\u00e7ar a fitxer de text
+Enlazar_a_ficheros_de_imagen=Enlla\u00e7ar a fitxers d'imatge
+equal_intervals=Intervals iguals
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Error guardant la llegenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e0xima
+Escala_Maxima=Escala m\u00e0xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada per l'usuari
+espaciado_horizontal=Espaiat horitzontal de la malla
+espaciado_vertical=Espaiat vertical de la malla
+espacio=Espai\:
+estadisticas=Estad\u00edstiques
+este_por_debajo_de_=Que estiga por davall de
+este_por_encima_de=Que estiga per damunt de
+Esten_contenidos_en=Estiguen continguts en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetats
+etiquetas=Etiquetes
+Etiquetas_estandar=Etiquetes est\u00e0ndard
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3
+Extent=Extensi\u00f3
+extents_no_coincidentes=Extensions no coincidents
+factor_zoom_incorrecto=
+fallo_capas=Fallada en l'acc\u00e9s a les capes. Les capes seg\u00fcents seran eliminades del projecte.
+family=
+fichero=
+Fichero=Fitxer
+fichero_existe=Hi ha fitxer
+fichero_incorrecto=Fitxer incorrecte
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtre
+finish=Finalitzar
+Font=Font
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Format incorrecte
+fuente=Font
+General=General
+georeferenciado=
+gestion_encuadre=Gesti\u00f3 d'Enquadres
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e0fics
+grosor_linea=Gruix de l\u00ednia\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Guardat en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=Vol guardar els canvis?
+guardar_como=Guardar com a...
+guardar_como_plantilla=Guardar com a plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar llegenda
+guardar_proyecto=Guardar projecte
+guardar_tooltip=Guarda els canvis del projecte
+Habilitar_etiquetado=Habilitar etiquetat
+Hiperenlace=Hiperenlla\u00e7
+horizontal=Horitzontal
+horizontal_space=
+Identificar_Resultados=Identificar resultats
+Igual_que_la_impresora=Igual que la impressora
+igual_todos_lados=Despla\u00e7ament igual per tots els costats.
+imagen=Imatge
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=S'est\u00e0 indexant...
+Indexando_espacialmente=S'est\u00e0 indexant espacialment la capa
+indexar_campos=
+Inferior=Inferior
+info=Informaci\u00f3
+informacion=Informaci\u00f3
+Informacion=Informaci\u00f3
+Inicializando=Inicialitzant
+initial_warning=
+insert_row=Inserix fila
+Insertar=Inserir
+insertar_cajetin=Inserir caixet\u00ed
+insertar_circulo=Insertar cercle
+insertar_columna=
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imatge
+insertar_leyenda=Insertar llegenda
+insertar_linea=Insertar l\u00ednia
+insertar_norte=Insertar nord
+insertar_poligono=Insertar pol\u00edgon
+insertar_polilinea=Inserir polil\u00ednia
+insertar_punto=Insertar punt
+insertar_rectangulo=Insertar rectangle
+insertar_texto=Insertar text
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten amb
+Intervalo=Interval
+Intervalos=Intervals
+introduce_nombre=Introdu\u00efx el nou nom
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Esquerra
+Izquierdo=Esquerre
+join=Unir
+jpg=Fitxers JPEG
+kilometros=Kil\u00f2metres
+Kilometros=Kil\u00f2metres
+leyenda=Llegenda
+Leyenda=Llegenda
+leyenda_campo_unido=S'est\u00e0 utilitzant un camp de la uni\u00f3 en la llegenda (i/o etiquetatge). Canvie la llegenda abans de llevar la uni\u00f3, per favor.
+Leyenda_Por_Defecto=Llegenda per defecte
+linea=L\u00ednia
+linea_grafica=L\u00ednia gr\u00e0fica
+lineal_directo=Lineal directe
+link=Enlla\u00e7
+Link=Enlla\u00e7
+localizador=localitzador
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=
+mantener_intervalo=Mantindre interval
+map_units=Unitats de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapes
+marco=Marc
+marco_vista=Marc de la vista
+margenes=M\u00e0rgens\:
+mas_de_100_simbolos=M\u00e9s de 100 s\u00edmbols no solen aportar informaci\u00f3 en un pla
+max_length_is=
+maximo=M\u00e0xim
+MDIFrame.quiere_salir=Est\u00e0 segur que vol eixir?
+MDIFrame.salir=Eixir
+media=Media
+medir_area=Mesurar \u00e1rea
+medir_distancias=Mesurar dist\u00e0ncies
+metadatos=Metadatos
+metros=Metres
+Metros=Metres
+Milimetros=Mil\u00b7l\u00edmetres
+Millas=Milles
+minimo=M\u00ednim
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3
+mostrar_escala_numerica=
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unitats
+move_elements=
+Muestra_atributos=Mostra els atributs de les capes seleccionades.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra els elements de la capa usant un s\u00edmbol per cada valor \u00fanic
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra els elements de la capa usant una gamma de colors en funci\u00f3 del valor d'un determinat camp d'atributs
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tots els elements d'una capa usant el mateix s\u00edmbol
+natural_intervals=Intervals naturals
+navegacion=Navegaci\u00f3
+navegacion_vista=Navegaci\u00f3 vista
+necesita_una_capa_activa=Necessita una capa activa
+necesita_una_capa_vectorial_activa=Necessita una capa vectorial activa
+new_field=Nou camp
+new_field_properties=
+next=Seg\u00fcent
+ninguna_impresora_configurada=Cap impressora configurada
+Nivel_de_transparencia=Nivell de transpar\u00e8ncia
+no=No
+no_activos=No actius
+No_de_intervalos=Nr. d'intervals
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=No mostrar la capa quan l'escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa quan l'escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=No s'ha pogut obtindre la taula de la capa
+no_visibles=No visibles
+nombre=Nom
+Nombre=Nom
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nom que se li donar\u00e0 al zoom
+nombre_sesion=Nom de la sessi\u00f3
+none=
+none_selected=Cap seleccionat
+normal=Normal
+north=Nord
+Nueva_tabla=Nova taula
+nuevo=Nou
+Nuevo_conjunto=Nou conjunt
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Nou projecte
+nuevo_tooltip=Crea un nou projecte
+num_bandas=Nombre de bandes
+num_columnas=Nombre de columnes
+num_filas=Nombre de files
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=N\u00famero incorrecte
+ok=D'acord
+opacidad=Opacitat
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientaci\u00f3\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Origen de dades
+Origen_de_Datos=Origen de les dades\:
+owner=Propietari
+paste=Apegar
+paste_elements=
+path=Ruta
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet etiquetar els elements del mapa amb el valor d'un determinat camp
+Personalizado=Personalitzat
+personalizar_margenes=
+Pies=Peus
+pila_de_comandos=Pila de comandaments
+pixeles=p\u00edxels
+pixels=pixels
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=
+png=Fitxers png
+poligono=Pol\u00edgon
+polilinea=polil\u00ednia
+poner_capas_a=Posar capes a
+por_debajo_de=per davall de\:
+por_encima_de=per damunt de\:
+Por_favor_active_la_capa=Per favor active la capa
+posicion_linea=Posici\u00f3 de la l\u00ednia
+precision=
+preparar_pagina=Preparar p\u00e0gina
+Preparar_pagina=Preparar p\u00e0gina
+presentacion=Presentaci\u00f3
+previsualizacion=Previsualitzaci\u00f3
+Previsualizacion=Previsualitzaci\u00f3
+Previsualizacion_de_simbolo=Previsualitzaci\u00f3 de s\u00edmbol
+propiedad=
+propiedades=Propietats
+propiedades_cajetin=Propietats del caixet\u00ed
+propiedades_capa=Propietats de la capa
+propiedades_de_la_capa=Propietats de la capa
+Propiedades_escala_grafica=Propietats de l'escala
+propiedades_grafico=Propietats gr\u00e0fic
+propiedades_mapa=Propietats del mapa
+propiedades_marco_imagenes=Propietats del marc d'im\u00e0tgens
+propiedades_marco_leyenda=Propietats del marc de la llegenda
+propiedades_marco_vista=Propietats del marc de la vista
+propiedades_raster=Propietats del raster
+propiedades_sesion=Propietats de la sessi\u00f3
+propiedades_tabla=Propietats de la taula
+Propiedades_texto=Propietats del text
+propiedades_vista=Propietats de la vista
+Proyecciones=
+ps=
+puerto=
+Pulgadas=Polsades
+punto=Punt
+quantile_intervals=Intervals quantils
+quiere_continuar=Est\u00e0 segur que vol continuar?
+Quitar=Llevar
+Quitar_capa=Llevar capa
+quitar_enlaces=LLevar enlla\u00e7os
+Quitar_todos=Llevar tots
+quitar_uniones=Llevar unions
+rango_de_escalas=Rang d'escales
+Rango_de_escalas=Rang d'escales
+realce=Relleu
+realmente_desea_guardar=Realment desitja guardar?
+recargar=
+recorte_colas=Retall de cues
+recorte_vista=Retall a vista
+rectangulo=Rectangle
+recuento=Recompte
+Recuperar_leyenda=Recuperar llegenda
+Recuperar_y_eliminar_otros_zoom=Recuperar i eliminar altres zooms
+refrescar=Refrescar
+registros_seleccionados_total=Total registres seleccionats
+rehacer=Refer
+rellenar_marco_vista=Reomplir marc de la vista
+relleno=Farciment\:
+remove_elements=
+remove_fields=
+remove_row=Eliminia fila
+remove_rows=
+rename_field=
+renombrar=Renomenar
+reproyectar_aviso=La projecci\u00f3 de la capa no \u00e9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00f3
+reproyectar_pregunta=Vol reprojectar-la?
+resolucion_resultado=Resoluci\u00f3 del resultat\:
+resto_valores=Resta de valors
+restore_palette=
+rotation_field=
+salir=Eixir
+salir_tooltip=Eixir
+salvar_raster=Salvar el raster georeferenciat
+Sample=Exemple
+Se_superponen_a=Se superposen a
+Sean_disjuntos_a=siguen disjunts a
+Sean_iguales_a=siguen iguals a
+seleccion=Selecci\u00f3
+seleccion_fuente=Selecci\u00f3 de font
+Seleccion_por_capa=Selecci\u00f3 per capa
+selecciona_sistema_de_referencia=Seleccioneu sistema de refer\u00e8ncia
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capes
+seleccionar_capas_raster=Seleccionar capes r\u00e0ster
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccione de les capes actives els elements que\:
+Seleccionar_del_conjunto=Seleccionar del conjunt
+Seleccionar_fichero=Seleccionar fitxer
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar per punt
+seleccionar_por_rectangulo=Seleccionar per rectangle
+seleccionar_todos=Seleccionar tots
+seleccione_campo_enlace=Seleccioneu el camp a trav\u00e9s del qual cal enlla\u00e7ar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione una data...
+seleccione_tabla_a_enlazar=Seleccioneu la taula que cal enlla\u00e7ar
+seleccione_tabla_origen=Seleccioneu la taula d'origen de la uni\u00f3
+selection_color=Color de la selecci\u00f3
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Sempre
+simbolo=S\u00edmbol
+Simbolo=S\u00edmbol
+Simbolo_unico=S\u00edmbol \u00fanic
+Simbologia=Simbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Sense t\u00edtol
+sincronizar_color_borde_relleno=Sincronitzar el color de la vora amb el del farciment\:
+Size=Dimensi\u00f3
+sobre_la_barra=Sobre la barra
+Solo_para_capas_vectoriales=Sols per a capes vectorials
+start_edition=Comen\u00e7ar l'edici\u00f3
+statistics=Estad\u00edstiques
+stop_edition=Acabar l'edici\u00f3
+Style=Estil
+Subir_capa=Pujar capa
+suma=Suma
+Superior=Superior
+symbol_selector=
+Tabla=Taula
+Tabla_de_Atributos=Taula d'Atributs
+tablas=Taules
+Tablas=Taules
+tag=tag
+tamano=Dimensi\u00f3\:
+tamano_metros=Dimensi\u00f3 en metres
+tamano_pagina=Dimensi\u00f3 de p\u00e0gina\:
+tamano_posicion=dimensi\u00f3/posici\u00f3
+tamanyo_borde=Grand\u00e0ria de la vora
+tamanyo_fuente=Grand\u00e0ria de font
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=
+this_table_is_not_self_editable=
+tipo_dato=Tipus de dada
+tipo_de_intervalo=Tipus d'interval
+tipo_de_leyenda=Tipus de llegenda
+tipo_fichero_proyecto=Fitxer de projecte gvSIG (*.GVP)
+tipo_linea=Tipus de L\u00ednia\:
+tipo_relleno=Tipus de Farciment\:
+tipo_simbolo=Tipus de s\u00edmbol\:
+tipos_de_documentos=Tipus de documents
+titulo=Gestor de projectes
+titulo_fframetext=T\u00edtol del camp de text
+to_annotation=Transformar a capa d'anotacions
+to_palette=Canviar a paleta
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquen
+transparencia=Transpar\u00e8ncia
+Transparencia=Transpar\u00e8ncia
+transparencia_pixel=Transpar\u00e8ncia per p\u00edxel
+ungroup=Desagrupar
+unidades=Unitats\:
+Unidades=Unitats\:
+untitled=Sense t\u00edtol
+url=
+Usar_indice_espacial=Usar \u00edndex espacial
+usar_marco=Usar marc
+usar_titulo=Usar t\u00edtol
+usuario=Usuari
+utilizar_margenes_impresora=Utilitzar m\u00e0rgens de la impressora.
+vacia=Buida
+Valor=Valor
+Valores=Valors
+Valores_unicos=Valors \u00fanics
+varianza=Varian\u00e7a
+Ventana=Finestra
+ventana_proyecto=Finestra de projecte
+Ver=Veure
+ver_error_capa=
+ver_tabla_atributos=Veure Taula d'atributs
+ver_tags=
+ver_tooltip=Mostra la finestra de projecte
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistes
+visualizacion=Visualitzaci\u00f3
+Visualizacion=Visualitzaci\u00f3
+visualizar_cuadricula=Visualitzeu malla
+warning=Av\u00eds
+xmax=X m\u00e0xima
+xmin=X m\u00ednima
+Yardas=Lardes
+ymax=Y m\u00e0xima
+ymin=Y m\u00ednima
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acostar
+Zoom_Alejar=Zoom allunyar
+Zoom_Completo=Zoom complet
+Zoom_Completo_Vista=Zoom complet sobre la vista
+zoom_in_factor=
+Zoom_Mas=Zoom m\u00e9s
+Zoom_Mas_Vista=Zoom m\u00e9s sobre la vista
+Zoom_Menos=Zoom menys
+Zoom_Menos_Vista=Zoom menys sobre la vista
+zoom_out_factor=
+Zoom_pixel=Zoom a la resoluci\u00f3 del raster
+Zoom_Previo=Zoom previ
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a la part seleccionada

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_ca.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_pt.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_pt.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_pt.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Projec\u00e7\u00e3o actual\:
+__redimensionar_texto_escala=Redimensionar o texto de acordo com a escala da vista
+__seleccion_de_fuente=Selec\u00e7\u00e3o da fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abaixo
+abrir=Abrir
+abrir_plantilla=Abrir molde
+abrir_proyecto=Abrir projecto
+abrir_tooltip=Abrir um projecto existente
+Abrir_una_capa=Abrir uma capa
+Accion_Predefinida=Ac\u00e7\u00e3o predefinida
+aceptar=Aceitar
+Aceptar=Aceitar
+acerca_de=Sobre...
+activar=Activate
+activar_regla=Activar r\u00e9gua
+activos=Activos
+add_delete_edit_fields=
+add_layer=Adicionar capa
+add_rows=
+adjust_transparency=Configurar transpar\u00eancia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar linha gr\u00e1fica com gr\u00e1ficos
+Ajustar_transparencia=Ajustar transpar\u00eancia
+ajustes_linea_grafica=Ajustes de linha gr\u00e1fica
+Al_leer_la_leyenda=Ao ler a legenda
+alias=Ali\u00e1s
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alinhamento\:
+alinear=Alinhar
+alinear_graficos=Alinhar gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Tamanho fixo de texto
+ambito=\u00c2mbito
+Anadir=Adicionar
+Anadir_al_conjunto=Adicionar ao conjunto
+Anadir_capa=Adicionar capa
+Anadir_Capa=Adicionar capa
+anadir_tag=
+Anadir_todos=Adicionar todos
+ancho=Largura
+ancho_alto=Largura X altura
+anchura=Grossura\:
+Aplicar=Aplicar
+Archivo=Ficheiro
+arriba=Acima
+ascending_order=Ordem ascendente
+ascending_order_tooltip=Ordenar segundo o campo seleccionado por ordem ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Ajuda
+back=Anterior
+background_color=Cor de fundo
+baja=Baixa
+Bajar_capa=Mover capa para baixo
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de dados
+bmp=Ficheiros do tipo bmp
+Bold=Negrito
+borra_seleccion=Apagar selec\u00e7\u00e3o
+borrador=Rascunho
+borrar=Apagar
+box=
+brillo=Brightness
+brillo_y_contraste=
+browse=
+cajetin=
+Calcular_intervalos=Calcular intervalos
+calidad=Qualidade
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Mudar de cor
+cambio_nombre=Mudar de nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Altura do campo de texto\:
+Campo_de_clasificacion=Campo de classifica\u00e7\u00e3o
+Campo_de_etiquetado=Campo da etiqueta
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Localizador de capas
+Centimetros=Cent\u00edmetros
+cerrar=Fechar
+Cerrar=Fechar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=C\u00edrculo
+clave=Senha
+close=Fechar
+coincidir_tamanyo=
+colocar_a_margenes=Colocar com referencia \u00e0s margens
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de todos os gr\u00e1ficos.
+colocar_delante=Colocar \u00e0 frente
+colocar_detras=Colocar atr\u00e1s
+color=Cor\:
+Color_final=Cor final\:
+Color_inicio=Cor inicial
+color_texto=Cor do texto\:
+comentarios=Coment\u00e1rios
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+confirmar_borrar=Aceita apagar o elemento ?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Manter escala de vis\u00e3o
+consulta=Consulta
+Contengan=Contenham
+contraste=Contrast
+coor_geograficas=Coordenadas geogr\u00e1ficas
+copiar=
+copy=
+cortar=
+creation_date=Data de cria\u00e7\u00e3o
+Crucen_con=Cruzem com
+cuando_activo=Quando activo
+cut=
+Dado_un_campo_de_atributos=Dado de um campo de atributos
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=
+delete_field=
+Derecha=Direita
+Derecho=Direito
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Ordem descendente
+descending_order_tooltip=Ordenar segundo o campo seleccionado por ordem descendente
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Desde cima\:
+desde_izquierda=Desde a esquerda\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Movimenta\u00e7\u00e3o
+desviacion_tipica=Desvia\u00e7\u00e3o t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divis\u00f5es para a esquerda
+documento=
+documentos_existentes=Documentos existentes
+draw_text_only=
+driver=Driver
+Dxffiles=Ficheiros dxf
+edicion=
+editable=Editav\u00e9l
+Editar_leyenda=Editar legenda
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo s\u00e3o
+Elegir_Color=Seleccionar cor
+Elegir_Fuente=Seleccionar fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Eliminar=Remover
+eliminar_capa=Remover capa
+eliminar_columna=
+eliminar_extremos=Remover extremos
+eliminar_fila=
+en_el_mapa=No mapa\:
+En_metros=Em metros
+En_pixels=Em pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=Enquadrar vista
+enlace_vivo=Hiperliga\u00e7\u00e3o viva
+Enlazar_a_fichero_de_texto=Hiperliga\u00e7\u00e3o para ficheiros de texto
+Enlazar_a_ficheros_de_imagen=Hiperliga\u00e7\u00e3o para ficheiros de imagem
+equal_intervals=Intervalos iguais
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada pelo usu\u00e1rio
+espaciado_horizontal=Espa\u00e7o horizontal da malha
+espaciado_vertical=Espa\u00e7o vertical da malha
+espacio=Espa\u00e7o\:
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Esteja por debaixo de
+este_por_encima_de=Esteja por em cima de
+Esten_contenidos_en=Estejam dentro de
+Etiqueta=Etiqueta
+Etiquetados=Etiquetas
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas padr\u00e3o
+Examinar=Procurar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extens\u00e3o
+Extent=Extens\u00e3o
+extents_no_coincidentes=A extens\u00e3o da imagem seleccionada n\u00e3o coincide com a imagem de origem.
+factor_zoom_incorrecto=
+fallo_capas=Erro ao aceder \u00e0s capas. As siguientes capas v\u00e3o ser eliminadas do projecto
+family=
+fichero=
+Fichero=Ficheiro
+fichero_existe=O ficheiro seleccionado j\u00e1 existe como banda da capa
+fichero_incorrecto=Ficheiro incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtro
+finish=Terminar
+Font=Fonte
+formato=Formato
+Formato_de_numero_erroneo=
+formato_incorrecto=Formato incorrecto
+fuente=Fonte
+General=Geral
+georeferenciado=
+gestion_encuadre=Gest\u00e3o de enfoque
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e1ficos
+grosor_linea=Grossura da linha\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Guardado em
+guardar=
+Guardar=Guardar
+guardar_cambios=Guardar as altera\u00e7\u00f5es?
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como molde
+Guardar_el_zoom_actual=Guardar zoom actual
+Guardar_leyenda=Guardar legenda
+guardar_proyecto=Guardar projecto
+guardar_tooltip=Guardar as altera\u00e7\u00f5es do projeto
+Habilitar_etiquetado=Activar etiquetas
+Hiperenlace=Hiperliga\u00e7\u00e3o
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual \u00e0 impressora
+igual_todos_lados=Igual em todos os lados.
+imagen=Imagem
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexing...
+Indexando_espacialmente=
+indexar_campos=
+Inferior=Abaixo
+info=Informa\u00e7\u00e3o
+informacion=Informa\u00e7\u00e3o
+Informacion=Informa\u00e7\u00e3o
+Inicializando=A iniciar
+initial_warning=
+insert_row=
+Insertar=Inserir
+insertar_cajetin=
+insertar_circulo=Inserir c\u00edrculo
+insertar_columna=
+insertar_escala=Inserir escala
+insertar_fila=
+insertar_imagen=Inserir imagem
+insertar_leyenda=Inserir legenda
+insertar_linea=Inserir linha
+insertar_norte=Inserir rosa-dos-ventos
+insertar_poligono=Inserir pol\u00edgono
+insertar_polilinea=
+insertar_punto=Inserir ponto
+insertar_rectangulo=Inserir rect\u00e2ngulo
+insertar_texto=Inserir texto
+insertar_vista=Inserir vista
+Intersecten_con=Intersectam com
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduzir novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=It\u00e1lico
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Uni\u00e3o
+jpg=Ficheiros jpeg
+kilometros=Quil\u00f3metros
+Kilometros=Quil\u00f3metros
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Se est\u00e1 a utilizar um campo da uni\u00e3o na legenda (e/ou etiquetas). Mude a legenda antes de retirar a uni\u00e3o, por favor.
+Leyenda_Por_Defecto=Legenda por defeito
+linea=Linha
+linea_grafica=Linha gr\u00e1fica
+lineal_directo=Lineal direito
+link=Hiperliga\u00e7\u00e3o
+Link=Hiperliga\u00e7\u00e3o
+localizador=Locator
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malha activada
+manage_fields=
+mantener_intervalo=Manter intervalo
+map_units=Unidades do mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=Margens\:
+mas_de_100_simbolos=Mais de 100 s\u00edmbolos n\u00e3o contribuem para uma clara informa\u00e7\u00e3o de um mapa.
+max_length_is=
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=Fechar gvSIG?
+MDIFrame.salir=Fechar
+media=M\u00e9dia
+medir_area=Medir \u00e1rea
+medir_distancias=Medir dist\u00e2ncias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Milhas
+minimo=M\u00ednimo
+modificar=
+modification_date=Data de modifica\u00e7\u00e3o
+mostrar_escala_numerica=
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unidades
+move_elements=
+Muestra_atributos=Mostrar atributos das capas seleccionadas.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra os elementos da capa usando um s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra os elementos da capa usando uma gama de cores em fun\u00e7\u00e3o do valor de um determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra todos os elementos de uma capa usando o mesmo s\u00edmbolo
+natural_intervals=Intervalos naturais
+navegacion=Navega\u00e7\u00e3o
+navegacion_vista=Vista modo navega\u00e7\u00e3o
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_field=
+new_field_properties=
+next=Seguinte
+ninguna_impresora_configurada=Nenhuma impressora configurada
+Nivel_de_transparencia=N\u00edvel de transpar\u00eancia
+no=No
+no_activos=N\u00e3o activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=N\u00e3o mostrar a capa quando a escala
+No_mostrar_la_capa_cuando_la_escala=N\u00e3o mostrar a capa quando a escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+no_visibles=N\u00e3o vis\u00edvel
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nome para o zoom
+nombre_sesion=Nome da sess\u00e3o
+none=
+none_selected=Nenhum seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nova tabela
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Novo projecto
+nuevo_tooltip=Criar novo projecto
+num_bandas=N\u00famero de bandas
+num_columnas=
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Aceitar
+opacidad=Opacidade
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orienta\u00e7\u00e3o\:
+origen_de_datos=Origem de dados
+Origen_de_datos=Origem dos dados
+Origen_de_Datos=Origem dos dados\:
+owner=Propriet\u00e1rio
+paste=Paste
+paste_elements=
+path=Rota
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa com o valor de um determinado campo
+Personalizado=Personalizado
+personalizar_margenes=
+Pies=P\u00e9s
+pila_de_comandos=
+pixeles=pixels
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=Ficheiros png
+poligono=
+polilinea=
+poner_capas_a=
+por_debajo_de=Por debaixo de\:
+por_encima_de=Por em cima de\:
+Por_favor_active_la_capa=
+posicion_linea=Posi\u00e7\u00e3o da linha
+precision=
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Apresenta\u00e7\u00e3o
+previsualizacion=
+Previsualizacion=Pr\u00e9-visualizar
+Previsualizacion_de_simbolo=Pr\u00e9-visualiza\u00e7\u00e3o do s\u00edmbolo
+propiedad=
+propiedades=Propriedades
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+Propiedades_escala_grafica=Propriedades da escala
+propiedades_grafico=Propriedades gr\u00e1ficas
+propiedades_mapa=Propriedades do mapa
+propiedades_marco_imagenes=Propriedades do marco das imagens
+propiedades_marco_leyenda=Propriedades do marco da legenda
+propiedades_marco_vista=Propriedades do marco da vista
+propiedades_raster=Propiedades da cobertura
+propiedades_sesion=Propriedades da sess\u00e3o
+propiedades_tabla=Propriedades de tabela
+Propiedades_texto=Propriedades do texto
+propiedades_vista=Propriedades da vista
+Proyecciones=
+ps=
+puerto=Porta
+Pulgadas=Polegadas
+punto=Ponto
+quantile_intervals=Intervalos quartis
+quiere_continuar=Tem a certeza de que quer continuar?
+Quitar=Remover
+Quitar_capa=Remover capa
+quitar_enlaces=Remover hiperliga\u00e7\u00f5es
+Quitar_todos=Remover todos
+quitar_uniones=Remover uni\u00f5es
+rango_de_escalas=Amplitude de escalas
+Rango_de_escalas=Amplitude de escalas
+realce=Realce
+realmente_desea_guardar=
+recargar=
+recorte_colas=Recorte de filas
+recorte_vista=Recortar a vista
+rectangulo=Rect\u00e2ngulo
+recuento=Recontar
+Recuperar_leyenda=Recuperar legenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+refrescar=Actualizar
+registros_seleccionados_total=Total de registos seleccionados
+rehacer=
+rellenar_marco_vista=Preencher espa\u00e7o da vista
+relleno=Preencher\:
+remove_elements=
+remove_fields=
+remove_row=
+remove_rows=
+rename_field=
+renombrar=Mudar de nome
+reproyectar_aviso=A projec\u00e7\u00e3o da capa n\u00e3o \u00e9 a mesma da que a vista.\nAVISO\: Isto pode gerar imprecis\u00e3o com algumas transforma\u00e7\u00f5es.\nPor favor, leia a documenta\u00e7\u00e3o
+reproyectar_pregunta=Deseja voltar a projectar?
+resolucion_resultado=Resolu\u00e7\u00e3o do resultado\:
+resto_valores=Resto de valores
+restore_palette=
+rotation_field=
+salir=Fechar
+salir_tooltip=Fechar
+salvar_raster=Guardar como raster
+Sample=Exemplo
+Se_superponen_a=Se sobrep\u00f5em a
+Sean_disjuntos_a=sejam disjuntos a
+Sean_iguales_a=sejam iguais a
+seleccion=Selec\u00e7\u00e3o
+seleccion_fuente=Selec\u00e7\u00e3o de fonte
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar as capas activas dos elementos que\:
+Seleccionar_del_conjunto=Seleccionar o conjunto
+Seleccionar_fichero=Seleccionar ficheiro
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar por ponto
+seleccionar_por_rectangulo=Seleccioar por rect\u00e2ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione o campo a juntar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccionar uma data...
+seleccione_tabla_a_enlazar=Seleccione a tabela a juntar
+seleccione_tabla_origen=Seleccione a tabela de origem do join
+selection_color=Cor de selec\u00e7\u00e3o
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Ficheiro shp
+show_this_dialog_next_startup=
+si=
+siempre=
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Sem t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do borde com a de preenchimento\:
+Size=Tamanho
+sobre_la_barra=Sobre a barra
+Solo_para_capas_vectoriales=S\u00f3 para capas (vectoriais)
+start_edition=
+statistics=Estat\u00edsticas
+stop_edition=
+Style=Estilo
+Subir_capa=Mover capa para cima
+suma=Soma
+Superior=Superior
+symbol_selector=
+Tabla=Tabela
+Tabla_de_Atributos=Tabela de atributos
+tablas=Tabelas
+Tablas=Tabelas
+tag=tag
+tamano=Tamanho\:
+tamano_metros=Tamanho em metros
+tamano_pagina=Tamanho da p\u00e1gina
+tamano_posicion=Tamanho e posi\u00e7\u00e3o
+tamanyo_borde=Tamanho do borde
+tamanyo_fuente=Tamanho da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texto
+this_table_is_not_self_editable=
+tipo_dato=Tipo de dado
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de legenda
+tipo_fichero_proyecto=Ficheiros de projecto gvSIG (*.gvp)
+tipo_linea=Tipo de linha\:
+tipo_relleno=Tipo de preenchimento\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gestor de projectos
+titulo_fframetext=T\u00edtulo do campo de texto
+to_annotation=
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquem
+transparencia=Transpar\u00eancia
+Transparencia=Transpar\u00eancia
+transparencia_pixel=
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+untitled=Sem t\u00edtulo
+url=
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Usar marco
+usar_titulo=Usar t\u00edtulo
+usuario=Usu\u00e1rio
+utilizar_margenes_impresora=Utilizar m\u00e1rgens da impressora.
+vacia=Vazia
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varia\u00e7\u00e3o
+Ventana=Janela
+ventana_proyecto=Janela de projecto
+Ver=Ver
+ver_error_capa=
+ver_tabla_atributos=Ver tabela de atributos
+ver_tags=
+ver_tooltip=Ver janela de projecto
+vertical=Vertical
+vertical_space=
+visible=Vis\u00edvel
+visibles=Vis\u00edveis
+Vista=Vista
+vistas=Vis\u00f5es
+visualizacion=Visualiza\u00e7\u00e3o
+Visualizacion=Visualiza\u00e7\u00e3o
+visualizar_cuadricula=Visualizar malha
+warning=
+xmax=X m\u00e1xima
+xmin=X m\u00ednima
+Yardas=Jardas
+ymax=Y m\u00e1xima
+ymin=Y m\u00ednima
+Zoom_a_la_capa=
+Zoom_Acercar=Zoom aproximar
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+zoom_in_factor=
+Zoom_Mas=Zoom mais
+Zoom_Mas_Vista=Zoom mais sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+zoom_out_factor=
+Zoom_pixel=Zoom \u00e0 resolu\u00e7\u00e3o do raster
+Zoom_Previo=Zoom anterior
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 selec\u00e7\u00e3o

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_pt.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/config.xml
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/config.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/config.xml	(revision 30230)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="com.iver.cit.gvsig"/>
+	<libraries library-dir="."/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="com.iver.cit.gvsig.pilotoraster.PilotoRasterModule" 
+			description="Extensión encargada de añadir los menús para el piloto de raster."
+			active="true" 
+			priority="1">
+		</extension>
+	    <extension class-name="com.iver.cit.gvsig.pilotoraster.RasterAbout"
+		   description="Extensión encargada de abrir una ventana con la información relativa al programa."
+		   active="true">
+        </extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/config.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_cs.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_cs.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_cs.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+(escala_maxima)=(maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+(escala_minima)=(minim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+1\:=
+_(Simbolo_unico)=(Unik\u00e1tn\u00ed symboly)
+__proyeccion_actual=Aktu\u00e1ln\u00ed projekce\:
+__redimensionar_texto_escala=Zm\u011bna velikosti textu dle zobrazovac\u00edho m\u011b\u0159\u00edtka
+__seleccion_de_fuente=V\u00fdb\u011br p\u00edsma
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Dol\u016f
+abrir=Otev\u0159\u00edt
+abrir_plantilla=Otev\u0159\u00edt \u0161ablonu
+abrir_proyecto=Otev\u0159\u00edt projekt
+abrir_tooltip=Otev\u0159\u00edt existuj\u00edc\u00ed projekt
+Abrir_una_capa=Otev\u0159\u00edt vrstvu
+Accion_Predefinida=P\u0159eddefinovan\u00e1 akce
+aceptar=Budi\u017e
+Aceptar=Budi\u017e
+acerca_de=O programu...
+activar=Activate
+activar_regla=Aktivace prav\u00edtka
+activos=Aktivn\u00ed
+add_delete_edit_fields=Atribut m\u016f\u017ee b\u00fdt vlo\u017een, smaz\u00e1n nebo p\u0159ejmenov\u00e1n.
+add_layer=P\u0159idat vrstvu
+add_rows=P\u0159idej z\u00e1znam
+adjust_transparency=Nastaven\u00ed pr\u016fhlednosti
+agrupacion=Seskupen\u00ed
+agrupar=Seskupit
+agrupar_capas=Seskupen\u00ed vrstev
+agrupar_graficos=Seskupen\u00ed prvk\u016f
+agrupar_linea=Seskupen\u00ed lini\u00ed s grafick\u00fdmi prvky
+Ajustar_transparencia=Nastavit pr\u016fhlednost
+ajustes_linea_grafica=Nastaven\u00ed lini\u00ed
+Al_leer_la_leyenda=na\u010d\u00edt\u00e1n\u00ed legendy
+alias=Alias
+align_center=Zarovnej na st\u0159ed
+align_down=Zarovnej dol\u016f
+align_left=Zarovnej vlevo
+align_right=Zarovnej vpravo
+align_to_layout_center=Zarovnej na st\u0159ed mapy
+align_to_layout_down=Zarovnej k spodn\u00edmu okraji mapy
+align_to_layout_left=Zarovnej k lev\u00e9mu okraji mapy
+align_to_layout_right=Zarovnej k prav\u00e9mu okraji mapy
+align_to_layout_up=Zarovnej k horn\u00edmu okraji mapy
+align_to_layout_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed mapy
+align_up=Zarovnej nahoru
+align_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed
+alineamiento=Zarovn\u00e1n\u00ed\:
+alinear=Zarovn\u00e1n\u00ed
+alinear_graficos=Zarovnat prvek
+alta=Vysok\u00fd
+alto=V\u00fd\u0161ka
+altura=V\u00fd\u0161ka\:
+Altura_fija_de_texto=Pevn\u00e1 v\u00fd\u0161ka textu
+ambito=Rozsah
+Anadir=P\u0159idat
+Anadir_al_conjunto=P\u0159idat do mno\u017einy
+Anadir_capa=P\u0159idat vrstvu
+Anadir_Capa=P\u0159idat vrstvu
+anadir_tag=P\u010didej tag
+Anadir_todos=P\u0159idat v\u0161e
+ancho=\u0160\u00ed\u0159ka
+ancho_alto=\u0160\u00ed\u0159ka X v\u00fd\u0161ka
+anchura=\u0160\u00ed\u0159ka\:
+Aplicar=Pou\u017e\u00edt
+Archivo=Soubor
+arriba=Nahoru
+ascending_order=Vzestupn\u00e9 po\u0159ad\u00ed
+ascending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky vzestupn\u011b
+Atributo=Atribut
+automatico=Automaticky
+Ayuda=N\u00e1pov\u011bda
+back=P\u0159edchoz\u00ed
+background_color=Barva pozad\u00ed
+baja=Spodn\u00ed
+Bajar_capa=P\u0159esun vrstvy dol\u016f
+bandas=Okraje
+barra=Sloupec\:
+base=base
+base_datos=Datab\u00e1ze
+bmp=BMP soubory
+Bold=Tu\u010dn\u00fd
+borra_seleccion=Vymazat vybran\u00e9
+borrador=Koncept
+borrar=Smazat/Zru\u0161it
+box=box
+brillo=Jas
+brillo_y_contraste=Jas a kontrats
+browse=Vyhledej
+cajetin=Box
+Calcular_intervalos=V\u00fdpo\u010det intervalu
+calidad=Kvalita
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Zm\u011b\u0148 v\u00fd\u0161ku vybran\u00e9ho elementu na v\u00fd\u0161ku nejvy\u0161\u0161\u00edho elementu.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Zm\u011b\u0148 \u0161\u00ed\u0159ku vybran\u00e9ho elementu na \u0161\u00ed\u0159ku nej\u0161i\u0159\u0161\u00edho elementu.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Zm\u011b\u0148 velikost vybran\u00e9ho elementu na velikost nejv\u011bt\u0161\u00edho elementu.
+Cambio_Color=Zm\u011bna barvy
+cambio_nombre=Zm\u011bna n\u00e1zvu
+campo=Pole
+Campo=Pole
+campo_altura_texto=V\u00fd\u0161ka textov\u00e9ho pole\:
+Campo_de_clasificacion=Kl\u00ed\u010dov\u00e1 polo\u017eka
+Campo_de_etiquetado=Popisn\u00e9 pole
+Campos=Pole
+cancel=Zru\u0161it
+Cancel=Zru\u0161it
+cancelar=Zru\u0161it
+Cancelar=Zru\u0161it
+Capa=Vrstva
+Capas=Vrstvy
+Capas_del_localizador=Lokalizace vrstev
+Centimetros=Centimetry
+cerrar=Zav\u0159\u00edt
+Cerrar=Zav\u0159\u00edt
+change=
+change_before=P\u0159en\u00e9st do pop\u0159ed\u00ed
+change_behind=Poslad do pozad\u00ed
+change_height=Zm\u011bnit v\u00fd\u0161ku
+change_width=Zm\u011bnit \u0161\u00ed\u0159ku
+circulo=Kru\u017enice
+clave=K\u00f3d
+close=zav\u0159\u00edt
+coincidir_tamanyo=Srovnej velikost
+colocar_a_margenes=Um\u00edstit s referenc\u00ed k okraji
+colocar_alrededor_seleccionados=Um\u00edstit kolem vybran\u00e9 polo\u017eky
+colocar_alrededor_todos=Um\u00edstit kolem v\u0161ech polo\u017eek
+colocar_delante=P\u0159en\u00e9st dop\u0159edu
+colocar_detras=P\u0159en\u00e9st do pozad\u00ed
+color=Barva\:
+Color_final=Koncov\u00e1 barva\:
+Color_inicio=Po\u010d\u00e1te\u010dn\u00ed barva
+color_texto=Barva textu\:
+comentarios=Koment\u00e1\u0159e
+comenzar_edicion=Zahaj editaci
+compleja=
+configurar=Konfigurace
+configurar_localizador=Konfikurace mapy lok\u00e1toru
+Configurar_localizador=Konfigurace lok\u00e1toru
+confirmar_borrar=Prvek bude odstran\u011bn. Jste si jist\u00fd?
+conflicto_de_nombres_de_mapas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit mapu jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_tablas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit tabulku jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_vistas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit pohled jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflito_de_nombres_de_tablas_al_pegar=konflikt se jm\u00e9nem tabulek p\u0159i vkl\u00e1d\u00e1n\u00ed
+conservar_escala_visualizacion=Nastaven\u00ed zobrazovac\u00edho m\u011b\u0159\u00edtka
+consulta=Query
+Contengan=Obsahuje
+contraste=Contrast
+coor_geograficas=Geografick\u00e9 sou\u0159adnice
+copiar=Kop\u00edrovat
+copy=Kop\u00edrovat
+cortar=P\u0159esu\u0148
+creation_date=Datum vytvo\u0159en\u00ed
+Crucen_con=P\u0159ek\u0159\u00ed\u017een\u00fd s
+cuando_activo=Kdy\u017e je aktivn\u00ed
+cut=Vyst\u0159ihnout
+Dado_un_campo_de_atributos=Zadan\u00fd atribut
+debera_introducir_nombres_para_las_vistas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy pohled\u016f
+debera_introducir_nombres_para_los_mapas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy map
+default_projection=
+default_value=Implicitn\u00ed hodnota
+dehacer=Zp\u011bt
+delete_field=Smazat polo\u017eku
+Derecha=Prav\u00e1 strana
+Derecho=Prav\u00fd
+desagrupar=Odskupit
+desagrupar_capas=Odskupit vrstvy
+desagrupar_graficos=Odskupit prvky
+descending_order=Sestupn\u00e9 po\u0159ad\u00ed
+descending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky sestupn\u011b
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Nechte implicitn\u00ed hodnoty, kter\u00e9 jsou sd\u00edlen\u00e9 v\u0161emi atributy vrstvy. Zvolte pole, kter\u00e1 obsahuj\u00ed hodnoty pro \u00fapavu popisu.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Nov\u00e1 virtu\u00e1ln\u00ed vrstva m\u016f\u017ee b\u00fdt vytvo\u0159ena pomoc\u00ed tohoto n\u00e1stroje na z\u00e1klad\u011b existuj\u00edc\u00ed vrstvy, kter\u00e1 umo\u017e\u0148uje pokro\u010dil\u00e9 popisy. Zm\u011bn\u00ed se zobrazen\u00ed <br> zvolen\u00e9 vrstvy na zobrazen\u00ed hodnot sv\u00fdch polo\u017eek.</HTML>
+desde_arriba=Shora\:
+desde_izquierda=Z leva\:
+desea_borrar_el_documento=Opravdu chcete smazat vybran\u00e9 dokumenty?
+desea_borrar_la_capa=Opravdu chcete smazat vybran\u00e9 vrstvy?
+desea_continuar=Chcete pokra\u010dovat?
+deshacer=Zp\u011bt
+desplaza_los_elementos_seleccionados_a_la_derecha=P\u0159esunout zvolen\u00e9 vrstvy doprava
+desplaza_los_elementos_seleccionados_a_la_izquierda=P\u0159esunout zvolen\u00e9 vrstvy doleva
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy X
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy Y
+desplaza_los_elementos_seleccionados_hacia_abajo=P\u0159esunout zvolen\u00e9 prvky dospodu
+desplaza_los_elementos_seleccionados_hacia_arriba=P\u0159esunout zvolen\u00e9 prvky nahoru
+Desplazamiento=P\u0159em\u00edst\u011bn\u00ed
+desviacion_tipica=Standardn\u00ed odchylka
+distance_units=Jednotky vzd\u00e1lenosti
+distribuir=Rozm\u00edstit\:
+distribuir_elementos_sobre_todo_el_layout=Uspo\u0159\u00e1dej elementy p\u0159es celou mapu.
+distributes_down=Uspo\u0159\u00e1dej ze spodu
+distributes_horizontal=Uspo\u0159\u00e1dej elementy horizont\u00e1ln\u011b
+distributes_left=Uspo\u0159\u00e1dej zleva
+distributes_right=Uspo\u0159\u00e1dej zprava
+distributes_to_layout_down=Uspo\u0159\u00e1dej ze spodu mapy
+distributes_to_layout_horizontal=Uspo\u0159\u00e1dej mapu horizont\u00e1ln\u011b
+distributes_to_layout_left=Uspo\u0159\u00e1dej mapu z leva
+distributes_to_layout_right=Uspo\u0159\u00e1dej mapu z prava
+distributes_to_layout_up=Uspo\u0159\u00e1dej mapu shora
+distributes_to_layout_vertical=Uspo\u0159\u00e1dej mapu vertik\u00e1ln\u011b
+distributes_up=Uspo\u0159\u00e1dej shora
+distributes_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Uspo\u0159\u00e1dej horizont\u00e1ln\u011b mezery mezi elementy.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b mezery mezi elementy.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b ze spodu nahoru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b shora dolu.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zprava do leva.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zleva do prava.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy v horizont\u00e1ln\u00edm sm\u011bru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy ve vertik\u00e1\u00edln\u00edm sm\u011bru.
+divisiones_izquierda=D\u011blen\u00ed doleva
+documento=
+documentos_existentes=Existuj\u00edc\u00ed dokumenty
+draw_text_only=Vykresl\u00ed jenom text
+driver=Ovlada\u010d
+Dxffiles=DXF soubory
+edicion=Editace
+editable=Editovateln\u00fd
+Editar_leyenda=Upravit styl
+editar_vertices=Edituj vrchol
+el_numero_maximo_de_intervalos_para_este_campo_es=Maxim\u00e1ln\u00ed po\u010det interval\u016f pro tuto polo\u017eku je
+Elegir_Color=Select Barva
+Elegir_Fuente=Vybrat p\u00edsmo
+elemento_ya_existe=Element u\u017e existuje
+Elementos_seleccionados_de_la_capa=Vybran\u00e9 polo\u017eky z vrstvy
+Eliminar=Smazat
+eliminar_capa=Smazat vrstvu
+eliminar_columna=Odstra\u0148 sloupec
+eliminar_extremos=Odstranit hrany
+eliminar_fila=Odstra\u0148 z\u00e1znam
+en_el_mapa=Ve vrstv\u011b\:
+En_metros=V metrech
+En_pixels=V pixelech
+en_unidades=v jednotk\u00e1ch
+Encuadre=Zoom
+Encuadre_Vista=Zobrazit posunova\u010d
+enlace_vivo=Aktivn\u00ed odkaz
+Enlazar_a_fichero_de_texto=Odkaz na textov\u00e9 soubory
+Enlazar_a_ficheros_de_imagen=Odkaz na soubory s obr\u00e1zky
+equal_intervals=Shodn\u00e9 intervaly
+Error_exportando_SLD=Chyba p\u0159i exportu do SLD
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed legendy
+Error_guardando_la_plantilla=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed \u0161ablony
+escala=M\u011b\u0159\u00edtko
+Escala=M\u011b\u0159\u00edtko
+escala_desconocida=Nezn\u00e1m\u00e9 m\u011b\u0159\u00edtko
+escala_maxima=Maxim\u00edln\u00ed m\u011b\u0159\u00edtko
+Escala_Maxima=Maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+Escala_Minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_usuario=M\u011b\u0159\u00edtko specifikov\u00e1no u\u017eivatelem
+espaciado_horizontal=Velikost horizont\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espaciado_vertical=Velikost vertik\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espacio=Mezera\:
+estadisticas=Statistika
+este_por_debajo_de_=B\u00fdt pod
+este_por_encima_de=B\u00fdt nad
+Esten_contenidos_en=Obsa\u017een\u00fd v
+Etiqueta=Popis
+Etiquetados=Popisov\u00e1n\u00ed
+etiquetas=Popisky\:
+Etiquetas_estandar=Standardn\u00ed popisky
+Examinar=Proch\u00e1zet
+export=Exportovat
+exportar=Exportovat
+exportar_pdf=Exportovat jako pdf
+exportar_ps=Exportovat jako ps
+extension=Roz\u0161\u00ed\u0159en\u00ed
+Extent=Oblast
+extents_no_coincidentes=Zvolen\u00e1 hranice nesouhlas\u00ed s p\u016fvodn\u00edm obr\u00e1zkem.
+factor_zoom_incorrecto=Chybn\u00e1 \u00farove\u0148 zv\u011bt\u0161en\u00ed.
+fallo_capas=Chyba  p\u0159\u00edstupu k vrstv\u011b.  N\u00e1sleduj\u00edc\u00ed vrstvy budou vymaz\u00e1ny z projektu.
+family=
+fichero=soubor
+Fichero=Soubor
+fichero_existe=Zvolen\u00fd soubor ji\u017e existuje jako vrstva
+fichero_incorrecto=Chybn\u00fd soubor
+fichero_ya_existe_seguro_desea_guardarlo=Soubor u\u017e existuje, chcete pokra\u010dovat?
+field_already_exists=Polo\u017eka ji\u017e existuje
+field_decimal_count=Des\u00edtkov\u00fd po\u010det
+field_default_value=Implicitn\u00ed hodnota
+field_length=D\u00e9lka
+field_manager=Spr\u00e1vce polo\u017eek
+field_name=N\u00e1zev polo\u017eky
+field_type=Typ
+filtro=Filtr
+finish=Konec
+Font=P\u00edsmo
+formato=Form\u00e1t
+Formato_de_numero_erroneo=Neplatn\u00e9 \u010d\u00edslo form\u00e1tu
+formato_incorrecto=Chybn\u00fd form\u00e1t
+fuente=P\u00edsmo
+General=Obecn\u00fd
+georeferenciado=Georeferencovan\u00fd
+gestion_encuadre=Spr\u00e1va z\u00e1znamu pracovn\u00edch oblast\u00ed
+grados=Stupn\u011b
+Grados=Stupn\u011b
+Graficos=Prvky
+grosor_linea=\u0161\u00ed\u0159ka \u010d\u00e1ry\:
+group=Seskupit
+group_graphic_line=Seskupit grafick\u00e9 linie
+grupo=skupina
+guardado=Ulo\u017een do
+guardar=Ulo\u017eit
+Guardar=Ulo\u017eit
+guardar_cambios=Ulo\u017eit zm\u011bny?
+guardar_como=Ulo\u017eit jako...
+guardar_como_plantilla=Ulo\u017eit jako \u0161ablonu
+Guardar_el_zoom_actual=Ulo\u017eit aktu\u00e1ln\u00ed v\u00fd\u0159ez
+Guardar_leyenda=Ulo\u017eit styl
+guardar_proyecto=Ulo\u017eit projekt
+guardar_tooltip=Ulo\u017eit zm\u011bny do projektu
+Habilitar_etiquetado=Povolit popisov\u00e1n\u00ed
+Hiperenlace=Hyperlink
+horizontal=Horizont\u00e1ln\u00ed
+horizontal_space=Horizont\u00e1ln\u00ed mezera
+Identificar_Resultados=Identifikovat v\u00fdsledky
+Igual_que_la_impresora=Stejn\u00e9 jako tisk\u00e1rna
+igual_todos_lados=Stejn\u00fd posun pro v\u0161echny strany
+imagen=Obr\u00e1zek
+Implimir=
+importar=Import
+Imprimir=Tisk
+Indexando=Indexing...
+Indexando_espacialmente=Prostorov\u00e1 indexace vrstvy
+indexar_campos=
+Inferior=Ni\u017e\u0161\u00ed
+info=Informace
+informacion=Informace
+Informacion=Informace
+Inicializando=Initializace
+initial_warning=<html><b>WAROV\u00c1N\u00cd\!</b>V\u00fdvojov\u00e1 verze. M\u016f\u017ee obsahovat z\u00e1va\u017en\u00e9 chyby a zp\u016fsobit po\u0161kozen\u00ed editovan\u00fdch soubor\u016f.<br><br>Pro b\u011b\u017enou pr\u00e1ci je doporu\u010dov\u00e1na posledn\u00ed stabiln\u00ed verze gvSIG.</html>
+insert_row=Vlo\u017e z\u00e1znam
+Insertar=Vlo\u017eit
+insertar_cajetin=Vlo\u017e grid
+insertar_circulo=Vlo\u017eit kru\u017enici
+insertar_columna=Vlo\u017e atribut
+insertar_escala=Vlo\u017eit m\u011b\u0159\u00edtko
+insertar_fila=Vlo\u017e \u0159\u00e1dek
+insertar_imagen=Vlo\u017eit obr\u00e1zek
+insertar_leyenda=Vlo\u017eit legendu
+insertar_linea=Vlo\u017eit linii
+insertar_norte=Vlo\u017eit sever
+insertar_poligono=Vlo\u017eit polygon
+insertar_polilinea=Vlo\u017e l\u00ednie
+insertar_punto=Vlo\u017eit bod
+insertar_rectangulo=Vlo\u017eit obd\u00e9ln\u00edk
+insertar_texto=Vlo\u017eit text
+insertar_vista=Vlo\u017eit pohled
+Intersecten_con=Protnut\u00e9 s
+Intervalo=Interval
+Intervalos=Intervaly
+introduce_nombre=Zadat nov\u00fd n\u00e1zev.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Vlo\u017ete n\u00e1zev nov\u00e9 vrstvy pozn\u00e1mek
+introduzca_nuevo_nombre_para_la_vista=Napi\u0161te nov\u00fd n\u00e1zev pohledu
+invalid_value_for_gap=
+invert_selection=
+Italic=Kurz\u00edva
+Izquierda=Vlevo
+Izquierdo=Vlevo
+join=spojit
+jpg=JPEG soubor
+kilometros=Kilometr\u016f
+Kilometros=Kilometr\u016f
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Pou\u017e\u00edv\u00e1te stejnou polo\u017eku bu\u010f v legend\u011b nebo popisc\u00edch. Pros\u00edm zm\u011b\u0148te \nlegendu p\u0159ed odebr\u00e1n\u00edm spojen\u00ed.
+Leyenda_Por_Defecto=Implicitn\u00ed legenda
+linea=Linie
+linea_grafica=Linie
+lineal_directo=P\u0159\u00edmo line\u00e1rn\u00ed
+link=Propojit
+Link=Odkaz
+localizador=Locator
+locked_element=Uzam\u010den\u00fd element
+locked_element_it_cannot_be_deleted=Uzam\u010den\u00fd element.\nNelze smazat.
+locked_element_it_cannot_be_renamed=Uzam\u010den\u00fd element.\nNelze odstranit.
+m/pixel=metros/pixel
+malla_activada=Aktivovat grid
+manage_fields=Spravovat polo\u017eky
+mantener_intervalo=Zachovat interval
+map_units=Mapov\u00e9 jednotky
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapy
+marco=R\u00e1mec
+marco_vista=Framework pro zobrazen\u00ed
+margenes=Okraje\:
+mas_de_100_simbolos=V\u00edce ne\u017e 100 symbol\u016f obvykle nevn\u00e1\u0161\u00ed do mapy \u017e\u00e1dn\u00e9 informace
+max_length_is=
+maximo=Maximum
+MDIFrame.quiere_salir=Ukon\u010dit gvSIG?
+MDIFrame.salir=Konec
+media=V\u00fdznam
+medir_area=M\u011b\u0159it plochy
+medir_distancias=M\u011b\u0159it vzd\u00e1lenosti
+metadatos=Metadatos
+metros=Metry
+Metros=Metry
+Milimetros=Milimetry
+Millas=M\u00edle
+minimo=Minimum
+modificar=upravit
+modification_date=Datum zm\u011bny
+mostrar_escala_numerica=Sobrazit \u010d\u00edselnou \u0159adu.
+Mostrar_siempre=Zobrazit v\u017edy
+mostrar_unidades=Zobrazen\u00ed jednotek
+move_elements=P\u0159esunout prvky
+Muestra_atributos=Zobrazit atributy vybran\u00fdch vrstev.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed jedine\u010dnou hodnotu symbolu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed rozsah barev podle hodnot atribut\u016f
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zobraz v\u0161echny prvky vrstvy, kter\u00e9 maj\u00ed stejn\u00fd symbol
+natural_intervals=P\u0159irozen\u00e9 intervaly
+navegacion=Navigace
+navegacion_vista=Navigace v pohledu
+necesita_una_capa_activa=Aktivn\u00ed vrstva je pot\u0159ebn\u00e1
+necesita_una_capa_vectorial_activa=
+new_field=Nov\u00fd atribut
+new_field_properties=Vlastnosti nov\u00e9ho atributu
+next=Dal\u0161\u00ed
+ninguna_impresora_configurada=Nen\u00ed nastavena \u017e\u00e1dn\u00e1 tisk\u00e1rna
+Nivel_de_transparencia=\u00darov\u011b\u00f2 pr\u016fhlednosti
+no=No
+no_activos=Neaktivn\u00ed
+No_de_intervalos=Po\u010det interval\u016f
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=Nen\u00ed mo\u017en\u00e9 vykonat operaci
+No_mostrar=Nezobrazit vrstvu v p\u0159\u00edpad\u011b m\u011b\u0159\u00edtka
+No_mostrar_la_capa_cuando_la_escala=Ezobrazovat vrstvu, kdy\u017e je m\u011b\u0159\u00edtko
+no_se_pegaran_las_tablas=Nebude vlo\u017eena \u017e\u00e1dn\u00e1 tabulka
+no_se_pegaran_las_vistas_del_conflicto=Pohled zp\u016fsobuj\u00edc\u00ed konflikt nebude vlo\u017een
+No_se_pudo_obtener_la_tabla_de_la_capa=Nebylo mo\u017en\u00e9 z\u00edskat z vrstvy
+no_visibles=Nevidiln\u00e9
+nombre=Jm\u00e9no
+Nombre=Jm\u00e9no
+nombre_no_valido=\u0160patn\u00e9 jm\u00e9no
+Nombre_que_se_le_dara_al_zoom=N\u00e1zev pro zoom
+nombre_sesion=N\u00e1zev sezen\u00ed
+none=
+none_selected=Nic nezvoleno
+normal=Normal
+north=Sever
+Nueva_tabla=Nov\u00e1 tabulka
+nuevo=Nov\u00fd
+Nuevo_conjunto=Nov\u00e1 skupina
+nuevo_nombre_para_el_mapa=Zadejte n\u00e1zev nov\u00e9 vrstvy
+nuevo_proyecto=Nov\u00fd projekt
+nuevo_tooltip=Vytvo\u0159it nov\u00fd projekt
+num_bandas=Okrajov\u00e9 hodnoty
+num_columnas=Po\u010det sloupc\u016f
+num_filas=Po\u010det \u0159\u00e1dk\u016f
+Num_intervalos=Po\u010det interval\u016f
+numero_decimales_mostrar=
+numero_incorrecto=Neplatn\u00e1 hodnota
+ok=Budi\u017e
+opacidad=Stupe\u0148 pr\u016fsvitnosti
+operacion_cancelada=Zru\u0161 operaci
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientace\:
+origen_de_datos=P\u016fvod dat
+Origen_de_datos=P\u016fvod dat
+Origen_de_Datos=Vznik dat\:
+owner=Vlastn\u00edk
+paste=Paste
+paste_elements=Vlo\u017eit element
+path=Cesta
+pdf=
+pegar=Vlo\u017eit
+pegar_mapas=Vlo\u017eit mapy
+pegar_vistas=Vlo\u017eit podled
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mo\u017en\u00ed nastavit popisek mapov\u00fdch prvk\u016f hodnotou jednotliv\u00fdch pol\u00ed
+Personalizado=U\u017eivatelsky
+personalizar_margenes=
+Pies=Stopy
+pila_de_comandos=z\u00e1sobn\u00edk p\u0159\u00edkaz\u016f
+pixeles=pixely
+pixels=pixels
+Plain=Pravideln\u00fd
+plantilla=\u0161ablona
+please_insert_new_field_name=Prosim vlo\u017ete nov\u00e9 jm\u00e9no atributu.
+png=PNG soubory
+poligono=Polygon
+polilinea=l\u00ednie
+poner_capas_a=Nastav  vrstvu jako
+por_debajo_de=pod\:
+por_encima_de=nad\:
+Por_favor_active_la_capa=
+posicion_linea=Pozice linie
+precision=P\u0159esnost
+preparar_pagina=P\u0159ipravit str\u00e1nku
+Preparar_pagina=P\u0159ipravit str\u00e1nku
+presentacion=Prezentace
+previsualizacion=Preview
+Previsualizacion=N\u00e1hled
+Previsualizacion_de_simbolo=N\u00e1hled symbol\u016f
+propiedad=Vlastnost
+propiedades=Vlastnosti
+propiedades_cajetin=
+propiedades_capa=Vlastnosti vrstvy
+propiedades_de_la_capa=Vlastnosti vrstvy
+Propiedades_escala_grafica=Vlastnosti m\u011b\u0159\u00edtka
+propiedades_grafico=Nastaven\u00ed grafiky
+propiedades_mapa=Nastaven\u00ed mapy
+propiedades_marco_imagenes=Vlastnosti obrazov\u00e9ho r\u00e1mu
+propiedades_marco_leyenda=Vlastnosti r\u00e1mu legendy
+propiedades_marco_vista=Vlastnosti r\u00e1mu pohledu
+propiedades_raster=Vlastnosti rastru
+propiedades_sesion=Vlastnosti sezen\u00ed
+propiedades_tabla=Vlastnosti tabulky
+Propiedades_texto=Vlastnosti textu
+propiedades_vista=Vlastnosti pohledu
+Proyecciones=Projekce
+ps=
+puerto=Port
+Pulgadas=Palce
+punto=Bod
+quantile_intervals=Interval kvantilu
+quiere_continuar=Chcete pokra\u010dovat?
+Quitar=Odstranit
+Quitar_capa=Odstranit vrstvu
+quitar_enlaces=Odebrat spojen\u00ed
+Quitar_todos=Odstranit v\u0161e
+quitar_uniones=odebrat spojen\u00ed
+rango_de_escalas=Rozsah m\u011b\u0159\u00edtka
+Rango_de_escalas=Velikost m\u011b\u0159\u00edtka
+realce=vylep\u0161en\u00ed
+realmente_desea_guardar=Upravdu si p\u0159ejete ulo\u017eit?
+recargar=Nahraj znovu
+recorte_colas=O\u0159ez fronty
+recorte_vista=Vy\u0159\u00edznout dle pohledu
+rectangulo=Obd\u00e9ln\u00edk
+recuento=p\u0159epo\u010det
+Recuperar_leyenda=Nahr\u00e1t legendu
+Recuperar_y_eliminar_otros_zoom=Obnovit a zru\u0161it p\u0159ibl\u00ed\u017een\u00ed
+refrescar=Obnovit
+registros_seleccionados_total=Celkem zvolen\u00fdch z\u00e1znam\u016f
+rehacer=Znovu
+rellenar_marco_vista=Zaplnit r\u00e1m pohledu
+relleno=Zaplnit\:
+remove_elements=Odstra\u0148 element
+remove_fields=Odstra\u0148 atribut
+remove_row=Odstra\u0148 z\u00e1znam
+remove_rows=Odstra\u0148 z\u00e1znamy
+rename_field=P\u0159ejmenuj atribut
+renombrar=P\u0159ejmenovat
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ed pohledu.\nUpozorn\u011bn\u00ed\: N\u011bkter\u00e9 transformace mohou b\u00fdt nep\u0159esn\u00e9.\nPros\u00edm prostudujte dokumentaci
+reproyectar_pregunta=Chcete p\u0159ev\u00e9st projekci?
+resolucion_resultado=Rozli\u0161en\u00ed v\u00fdsledku\:
+resto_valores=Ostatn\u00ed hodnoty
+restore_palette=Obnov paletu
+rotation_field=Atribut oto\u010den\u00ed
+salir=Konec
+salir_tooltip=Konec
+salvar_raster=Ulo\u017eit jako rastr
+Sample=Vzor
+Se_superponen_a=P\u0159es
+Sean_disjuntos_a=rozpojit jako
+Sean_iguales_a=stejn\u00e9 jako
+seleccion=V\u00fdb\u011br
+seleccion_fuente=Vybrat font
+Seleccion_por_capa=V\u00fdb\u011br podle vrstvy
+selecciona_sistema_de_referencia=Vyber prostorov\u00fd referen\u010dn\u00ed syst\u00e9m
+Seleccionar=Vybrat
+seleccionar_capas=Vybrat vrstvu
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Vybrat polo\u017eky z aktivn\u00edch vrstev kter\u00e9 jsou\:
+Seleccionar_del_conjunto=Vybrat ze sady
+Seleccionar_fichero=Vybrat soubor
+seleccionar_por_poligono=
+seleccionar_por_punto=Vybrat po bodech
+seleccionar_por_rectangulo=Vybrat obd\u00e9ln\u00edkem
+seleccionar_todos=Vybrat v\u0161e
+seleccione_campo_enlace=Zvolte propojovac\u00ed polo\u017eku
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Vyber atribut pou\u017e\u00edvan\u00fd pro ulo\u017een\u00ed \u00faklonu textov\u00e9ho popisku</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Vyberte polo\u017eku pro ulo\u017een\u00ed barvy popisu</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Vyberte textov\u00e9 pole, kter\u00e9 by m\u011blo b\u00fdt pou\u017eito k zobrazen\u00ed nev\u00e9 virtu\u00e1ln\u00ed vrstvy.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed fontu p\u00edsma.</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed velikosti popisu.</HTML>
+seleccione_fecha=Vybrat datum...
+seleccione_tabla_a_enlazar=Zvolte tabulku k propojen\u00ed
+seleccione_tabla_origen=Zvolte p\u016fvodn\u00ed tabulku spojen\u00ed
+selection_color=Vybrat barvu
+selection_up=P\u0159esu\u0148 v\u00fdb\u011br nahoru??? 
+separator=
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Zobraz tento dialog p\u0159i dal\u0161\u00edm startu
+si=ano
+siempre=V\u017edy
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Jedine\u010dn\u00fd symbol
+Simbologia=Symboly
+simplificar_leyenda=Zjednodu\u0161 legendu
+simplify=Zjednodu\u0161
+sin_titulo=Nepojmenovan\u00fd
+sincronizar_color_borde_relleno=Sjednotit barvu obrysu a v\u00fdpln\u011b\:
+Size=Velikost
+sobre_la_barra=Na sloupci s m\u011b\u0159\u00edtkem
+Solo_para_capas_vectoriales=Jen pro vektory
+start_edition=Zahaj editaci
+statistics=Statistika
+stop_edition=Ukon\u010di editaci
+Style=Styl
+Subir_capa=P\u0159esunout vrstvu v\u00fd\u0161e
+suma=Sou\u010det
+Superior=Vy\u0161\u0161\u00ed
+symbol_selector=
+Tabla=Tabulka
+Tabla_de_Atributos=Tabulka atribut\u016f
+tablas=Tabulky
+Tablas=Tabulky
+tag=tag
+tamano=Velikost\:
+tamano_metros=Velikost v metrech
+tamano_pagina=Velikost str\u00e1nky
+tamano_posicion=Velikost a um\u00edst\u011bn\u00ed
+tamanyo_borde=Velikost okraje
+tamanyo_fuente=Velikost p\u00edsma
+tamanyo_pagina=Velikost str\u00e1nky
+tamPixX=Velikost pixlu X
+tamPixY=Velikost pixlu Y  
+terminar=Ukon\u010di
+terminar_edicion=Ukon\u010di editaci
+texto=Text
+this_table_is_not_self_editable=Tabulka nen\u00ed editovateln\u00e1
+tipo_dato=Datov\u00fd typ
+tipo_de_intervalo=Druh intervalu
+tipo_de_leyenda=Druh legendy
+tipo_fichero_proyecto=Soubor projektu gvSIG(*.GVP)
+tipo_linea=Druh obrysu\:
+tipo_relleno=V\u00fdpl\u0148\:
+tipo_simbolo=Druh symbolu\:
+tipos_de_documentos=Druhy dokument\u016f
+titulo=Spr\u00e1vce projektu
+titulo_fframetext=N\u00e1zev textov\u00e9ho pole
+to_annotation=Zm\u011b\u0148 na vrstvu popisk\u016f
+to_palette=Zm\u011b\u0148 na paletu
+tooltip_copiar_al_portapapeles=Zkop\u00edruj do schr\u00e1nky
+tooltip_cortar_al_portapapeles=P\u0159em\u00edsti do schr\u00e1nky
+tooltip_pegar_desde_el_portapapeles=Vlo\u017e ze schr\u00e1nky
+Toquen=dot\u00fdkaj\u00edc\u00ed se s
+transparencia=Pr\u016fhlednost
+Transparencia=Pr\u016fhlednost
+transparencia_pixel=Pr\u016fhlednost po pixlech
+ungroup=Odskupit
+unidades=Jednotky\:
+Unidades=Jednotky\:
+untitled=Nepojmenovan\u00fd
+url=url
+Usar_indice_espacial=Pou\u017e\u00edt prostorov\u00fd index
+usar_marco=Pou\u017e\u00edt r\u00e1mec
+usar_titulo=Pou\u017e\u00edt n\u00e1zev
+usuario=U\u017eivatel
+utilizar_margenes_impresora=Pou\u017e\u00edt okraje tisk\u00e1rny
+vacia=Pr\u00e1zdn\u00fd
+Valor=Hodnota
+Valores=Hodnoty
+Valores_unicos=Jednoduch\u00e9 hodnoty
+varianza=Odchylka
+Ventana=Okno
+ventana_proyecto=Okno projektu
+Ver=Pohled
+ver_error_capa=
+ver_tabla_atributos=Zkontrolujte tabulku atribut\u016f
+ver_tags=
+ver_tooltip=Uk\u00e1zat okno projektu
+vertical=Vertik\u00e1ln\u00ed
+vertical_space=Vertik\u00e1ln\u00ed mezera
+visible=Viditeln\u00fd
+visibles=Viditeln\u00fd
+Vista=Pohled
+vistas=Pohledy
+visualizacion=Zobrazit
+Visualizacion=Zobrazit
+visualizar_cuadricula=Zobrazit grid
+warning=Varov\u00e1n\u00ed
+xmax=maximum X
+xmin=minimum X
+Yardas=Yardy
+ymax=maximum Y
+ymin=minimum Y
+Zoom_a_la_capa=P\u0159ibli\u017e na vrstvu
+Zoom_Acercar=P\u0159ibl\u00ed\u017eit
+Zoom_Alejar=Odd\u00e1lit
+Zoom_Completo=Zobraz v\u0161e
+Zoom_Completo_Vista=Zobrazit r\u00e1m ve full extent
+zoom_in_factor=P\u0159ibl\u00ed\u017eit
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom in v r\u00e1mu pohledu
+Zoom_Menos=Odd\u00e1lit
+Zoom_Menos_Vista=Zoom out v r\u00e1mu pohledu
+zoom_out_factor=\u00darove\u0148 zv\u011bt\u0161en\u00ed
+Zoom_pixel=Zoom na rozli\u0161en\u00ed rastru
+Zoom_Previo=P\u0159edchoz\u00ed zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom na v\u00fdb\u011br

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_cs.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_fr.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_fr.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_fr.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(\u00e9chelle maximum)
+(escala_minima)=(\u00e9chelle maximum)
+1\:=
+_(Simbolo_unico)=(Symbole unique)
+__proyeccion_actual=Projection actuelle\:
+__redimensionar_texto_escala=Redimensionner le texte suivant l'\u00e9chelle de la vue
+__seleccion_de_fuente=S\u00e9lection d'une fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Descendre
+abrir=Ouvrir
+abrir_plantilla=Ouvrir police
+abrir_proyecto=Ouvrir un projet
+abrir_tooltip=Ouvrir un projet existant
+Abrir_una_capa=Ouvrir une couche
+Accion_Predefinida=Action pr\u00e9d\u00e9finie
+aceptar=Accepter
+Aceptar=Accepter
+acerca_de=A propos de...
+activar=Activate
+activar_regla=Afficher la r\u00e8gle
+activos=Toutes actives
+add_delete_edit_fields=
+add_layer=Ajouter une couche
+add_rows=
+adjust_transparency=Ajuster la transparence
+agrupacion=
+agrupar=Grouper
+agrupar_capas=Grouper les couches
+agrupar_graficos=Grouper les graphiques
+agrupar_linea=Grouper les lignes graphiques
+Ajustar_transparencia=Ajuster la transparence
+ajustes_linea_grafica=Ajuster la ligne graphique
+Al_leer_la_leyenda=A la lecture de la l\u00e9gende
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alignement
+alinear=Aligner
+alinear_graficos=Aligner les graphiques
+alta=Hauteur
+alto=Hauteur
+altura=Hauteur
+Altura_fija_de_texto=Fixe la hauteur du texte
+ambito=Cadre
+Anadir=Ajouter
+Anadir_al_conjunto=Ajouter \u00e0 la s\u00e9lection
+Anadir_capa=Ajouter une couche g\u00e9ographique
+Anadir_Capa=Ajouter une couche g\u00e9ographique
+anadir_tag=
+Anadir_todos=Tout ajouter
+ancho=Largeur
+ancho_alto=Largeur X hauteur
+anchura=Largeur\:
+Aplicar=Appliquer
+Archivo=Fichier
+arriba=Monter
+ascending_order=Ordre ascendant
+ascending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre ascendant
+Atributo=Attribut
+automatico=Automatique
+Ayuda=Aide
+back=Pr\u00e9c\u00e9dent
+background_color=Colour d'arri\u00e8re plan
+baja=Basse
+Bajar_capa=Descendre la couche
+bandas=Bandes
+barra=Barre
+base=Base
+base_datos=Base de donn\u00e9es
+bmp=Fichiers BMP
+Bold=Gras
+borra_seleccion=Effacer une s\u00e9lection
+borrador=Brouillon
+borrar=Supprimer
+box=rectangle
+brillo=Luminosit\u00e9
+brillo_y_contraste=Luminosit\u00e9 et contrate
+browse=
+cajetin=
+Calcular_intervalos=Calculer les intervalles
+calidad=Qualit\u00e9
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Changer la couleur
+cambio_nombre=Changement de nom
+campo=Champ
+Campo=Champ
+campo_altura_texto=Taille du champ textuel\:
+Campo_de_clasificacion=Champ de classification
+Campo_de_etiquetado=Etiqueter \u00e0 partir d'un champ
+Campos=Champs
+cancel=Annuler
+Cancel=Annuler
+cancelar=Annuler
+Cancelar=Annuler
+Capa=Couche
+Capas=Couches g\u00e9ographiques
+Capas_del_localizador=Couches de localisation
+Centimetros=Centim\u00e8tres
+cerrar=Fermer
+Cerrar=Fermer
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Cercle
+clave=Clef
+close=Fermer
+coincidir_tamanyo=
+colocar_a_margenes=Positionner par rapport aux marges.
+colocar_alrededor_seleccionados=Positionner autour des graphiques s\u00e9lectionn\u00e9s.
+colocar_alrededor_todos=Positionner autour de tous les graphiques.
+colocar_delante=Avant
+colocar_detras=Apr\u00e8s
+color=Couleur \:
+Color_final=Couleur d'arriv\u00e9e \:
+Color_inicio=Couleur de d\u00e9part
+color_texto=Couleur du texte\:
+comentarios=Commentaires
+comenzar_edicion=
+compleja=
+configurar=Configurer
+configurar_localizador=Configurer la vue d'ensemble
+Configurar_localizador=Configurer la vue d'ensemble...
+confirmar_borrar=Confirmer la suppression ?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conserver l'\u00e9chelle de la vue
+consulta=Requ\u00eate
+Contengan=Contiennent
+contraste=Contraste
+coor_geograficas=Coordonn\u00e9es g\u00e9ographiques
+copiar=
+copy=Copier
+cortar=
+creation_date=Date de cr\u00e9ation
+Crucen_con=Croisent avec
+cuando_activo=Quand active
+cut=Couper
+Dado_un_campo_de_atributos=Champs d'attributs donn\u00e9
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=d\u00e9faire
+delete_field=Supprimer une colonne
+Derecha=Droite
+Derecho=Droit
+desagrupar=Dissocier
+desagrupar_capas=
+desagrupar_graficos=Dissocier les graphiques
+descending_order=Ordre descendant
+descending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre descendant
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Depuis le haut\:
+desde_izquierda=Depuis la gauche\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=d\u00e9faire
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=D\u00e9placer
+desviacion_tipica=Ecart type
+distance_units=Unit\u00e9s de distance
+distribuir=Distribuer \:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisions \u00e0 partir de la gauche
+documento=
+documentos_existentes=Documents existants
+draw_text_only=
+driver=Driver
+Dxffiles=Fichiers DXF
+edicion=\u00e9dition
+editable=
+Editar_leyenda=Editer la l\u00e9gende
+editar_vertices=\u00e9diter les sommets
+el_numero_maximo_de_intervalos_para_este_campo_es=Le nombre maximum d'intervalles pour ce champ est
+Elegir_Color=Selectionner la couleur
+Elegir_Fuente=Choisir la fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Entit\u00e9s s\u00e9lectionn\u00e9es de la couches
+Eliminar=Supprimer
+eliminar_capa=Supprimer une couche
+eliminar_columna=
+eliminar_extremos=Eliminer les extr\u00eames
+eliminar_fila=
+en_el_mapa=Dans la carte\:
+En_metros=En m\u00e8tres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=D\u00e9placer
+enlace_vivo=Lien dynamique
+Enlazar_a_fichero_de_texto=Lier \u00e0 un fichier texte
+Enlazar_a_ficheros_de_imagen=Lier \u00e0 un fichier image
+equal_intervals=Intervalles \u00e9gaux
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00e9gende
+Error_guardando_la_plantilla=
+escala=Echelle
+Escala=Echelle
+escala_desconocida=
+escala_maxima=Echelle maximum
+Escala_Maxima=Echelle maximum
+escala_minima=echelle minimum
+Escala_Minima=Echelle minimum
+escala_usuario=Echelle d\u00e9finie par l'utilisateur
+espaciado_horizontal=Pas horizontal de la grille
+espaciado_vertical=Pas vertical de la grille
+espacio=Espace\:
+estadisticas=Statistiques
+este_por_debajo_de_=Soit en dessous de
+este_por_encima_de=Soit au dessus de
+Esten_contenidos_en=Sont contenus dans
+Etiqueta=Etiquette
+Etiquetados=Etiquettages
+etiquetas=Etiquettes\:
+Etiquetas_estandar=Etiquettes standard
+Examinar=Parcourir
+export=Exporter
+exportar=Exporter
+exportar_pdf=Exporter en pdf
+exportar_ps=Exportar a ps
+extension=Extension
+Extent=Extension
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00e9e ne co\u00efncident pas avec celles de l'image d'origine.
+factor_zoom_incorrecto=
+fallo_capas=Erreurs d'acc\u00e8s aux couches. Les couches suivantes seront supprim\u00e9es du projet.
+family=
+fichero=
+Fichero=Fichier
+fichero_existe=Le fichier selectionn\u00e9 existe d\u00e9j\u00e0
+fichero_incorrecto=Fichier incorrect
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtre
+finish=Finaliser
+Font=Fonte
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Format incorrect
+fuente=Fonte
+General=G\u00e9n\u00e9ral
+georeferenciado=
+gestion_encuadre=Gestionnaire de positionnement
+grados=Degr\u00e9es\:
+Grados=Degr\u00e9es
+Graficos=Graphiques
+grosor_linea=Largeur de la ligne
+group=Grouper
+group_graphic_line=
+grupo=
+guardado=Enregister sous
+guardar=Enregistrer
+Guardar=Enregistrer
+guardar_cambios=Enregistrer les changements ?
+guardar_como=Enregistrer comme...
+guardar_como_plantilla=Garder comme police
+Guardar_el_zoom_actual=Enregistrer le zoom actif
+Guardar_leyenda=Enregistrer une l\u00e9gende
+guardar_proyecto=Enregistrer un projet
+guardar_tooltip=Enregistrer le projet
+Habilitar_etiquetado=Etiqueter
+Hiperenlace=Hyperlien
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identifier les r\u00e9sultats
+Igual_que_la_impresora=Identique que l'impression
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Implimir=
+importar=Importer
+Imprimir=Imprimer
+Indexando=Indexation...
+Indexando_espacialmente=Indexation spatiale de la couche g\u00e9ographique
+indexar_campos=
+Inferior=Inf\u00e9rieur
+info=Information
+informacion=Propri\u00e9t\u00e9s de l'entit\u00e9 cliqu\u00e9e
+Informacion=
+Inicializando=Initialisation
+initial_warning=
+insert_row=Ins\u00e9rer une ligne
+Insertar=Ins\u00e9rer
+insertar_cajetin=insertar cajetin
+insertar_circulo=Ins\u00e9rer un cercle
+insertar_columna=
+insertar_escala=Ins\u00e9rer une \u00e9chelle
+insertar_fila=
+insertar_imagen=Ins\u00e9rer une image
+insertar_leyenda=Ins\u00e9rer une l\u00e9gende
+insertar_linea=Ins\u00e9rer une ligne
+insertar_norte=Ins\u00e9rer  nord
+insertar_poligono=Ins\u00e9rer un polygone
+insertar_polilinea=Ins\u00e9rer une polyligne
+insertar_punto=Ins\u00e9rer un point
+insertar_rectangulo=Ins\u00e9rer un rectangle
+insertar_texto=Ins\u00e9rer du texte
+insertar_vista=Ins\u00e9rer une vue
+Intersecten_con=S\u2019intersectent avec
+Intervalo=Intervalle
+Intervalos=Intervalles
+introduce_nombre=Nouveau type
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=Italique
+Izquierda=Gauche
+Izquierdo=Gauche
+join=Joindre
+jpg=Fichiers JPEG
+kilometros=Kilom\u00e8tres
+Kilometros=Kilom\u00e8tres
+leyenda=L\u00e9gende
+Leyenda=L\u00e9gende
+leyenda_campo_unido=Un champs d'une table en jointure est utilis\u00e9  dans la l\u00e9gende (et /ou l'\u00e9tiquetage). Changez la l\u00e9gende avant d'enlever la jointure svp.
+Leyenda_Por_Defecto=L\u00e9gende par d\u00e9faut
+linea=Ligne
+linea_grafica=Ligne graphique
+lineal_directo=Lin\u00e9aire direct
+link=Lien
+Link=Lien
+localizador=Localisateur
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Activer la grille
+manage_fields=
+mantener_intervalo=Maintenir l'intervalle
+map_units=Unit\u00e9s de la carte
+mapa=carte
+Mapa=Carte
+mapas=Mises en page
+marco=Cadre
+marco_vista=Espace de travail de la vue
+margenes=Marges\:
+mas_de_100_simbolos=Plus de 100  symboles n'apportent plus d'information dans un plan
+max_length_is=
+maximo=Maximum
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+media=Moyenne
+medir_area=Mesurer une surface
+medir_distancias=Mesurer les distances
+metadatos=Metadatos
+metros=M\u00e8tres
+Metros=M\u00e8tres
+Milimetros=Millim\u00e8tres
+Millas=Miles
+minimo=Minimum
+modificar=
+modification_date=Date de modification
+mostrar_escala_numerica=
+Mostrar_siempre=Tout afficher
+mostrar_unidades=Montrer unit\u00e9s
+move_elements=
+Muestra_atributos=Afficher les attributs de la couche s\u00e9lectionn\u00e9e.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Afficher les \u00e9l\u00e9ments de la couche en utilisant un symbole pour chaque valeur unique
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Afficher les \u00e9l\u00e9ments de la couche en utilisant une gamme de couleurs en fonction de la valeur d'un champs d'attributs d\u00e9termin\u00e9
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Afficher tous les \u00e9l\u00e9ments d'une couche en utilisant le m\u00eame symbole
+natural_intervals=Intervalles naturels
+navegacion=Navigation
+navegacion_vista=Navigation vue
+necesita_una_capa_activa=N\u00e9cessite une couche g\u00e9ographique active
+necesita_una_capa_vectorial_activa=N\u00e9cessite une couche g\u00e9ographique vectorielle active
+new_field=Nouvelle colonne
+new_field_properties=
+next=Suivant
+ninguna_impresora_configurada=Aucune imprimante configur\u00e9e
+Nivel_de_transparencia=Niveau de transparence
+no=Non
+no_activos=Toutes inactives
+No_de_intervalos=Nombre d'intervalles
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Ne pas afficher la couche lorsque l'\u00e9chelle est
+No_mostrar_la_capa_cuando_la_escala=Ne pas afficher la couche lorsque l'\u00e9chelle
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossible d'obtenir la table de la couche g\u00e9ographiqueS
+no_visibles=Toutes invisibles
+nombre=Nom
+Nombre=Nom
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nom pour le zoom
+nombre_sesion=Nom du projet
+none=
+none_selected=Aucune selection
+normal=Normal
+north=Nord
+Nueva_tabla=Nouvelle table
+nuevo=Nouveau
+Nuevo_conjunto=Nouvelle s\u00e9lection
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Nouveau projet
+nuevo_tooltip=Cr\u00e9er un nouveau projet
+num_bandas=Nombre de bandes
+num_columnas=Nombre de colonnes
+num_filas=Nombres de lignes
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Accepter
+opacidad=Opacit\u00e9
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientation\:
+origen_de_datos=Origine des donn\u00e9es
+Origen_de_datos=Origine des donn\u00e9es
+Origen_de_Datos=Origine des donn\u00e9es\:
+owner=Propri\u00e9taire
+paste=Copier
+paste_elements=
+path=Chemin
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet d'\u00e9tiquetter les \u00e9l\u00e9ments de la carte avec la valeur d'un champs d\u00e9termin\u00e9
+Personalizado=Personnalisation
+personalizar_margenes=
+Pies=Pieds
+pila_de_comandos=historique des commandes
+pixeles=pixels
+pixels=pixels
+Plain=Normal
+plantilla=
+please_insert_new_field_name=
+png=Fichiers PNG
+poligono=Polygone
+polilinea=polyligne
+poner_capas_a=Ajouter les couches ...
+por_debajo_de=en dessous de\:
+por_encima_de=au del\u00e0 de\:
+Por_favor_active_la_capa=Veuillez activer la couche
+posicion_linea=Position de la ligne
+precision=
+preparar_pagina=Pr\u00e9parer la page
+Preparar_pagina=Pr\u00e9parer la page
+presentacion=Pr\u00e9sentation
+previsualizacion=Pr\u00e9visualisation.
+Previsualizacion=Pr\u00e9visualisation
+Previsualizacion_de_simbolo=Pr\u00e9visualisation du symbole
+propiedad=
+propiedades=Propri\u00e9t\u00e9s
+propiedades_cajetin=Propri\u00e9t\u00e9s du cadre
+propiedades_capa=Propri\u00e9t\u00e9s de la couche
+propiedades_de_la_capa=Propri\u00e9t\u00e9s de la couche\n
+Propiedades_escala_grafica=Propri\u00e9t\u00e9s de la barre d'\u00e9chelle
+propiedades_grafico=Propri\u00e9t\u00e9s du graphique
+propiedades_mapa=Propri\u00e9t\u00e9s de la carte
+propiedades_marco_imagenes=Propri\u00e9t\u00e9s du bloc image
+propiedades_marco_leyenda=Propri\u00e9t\u00e9s du bloc de l\u00e9gende
+propiedades_marco_vista=Propri\u00e9t\u00e9s du bloc de vue
+propiedades_raster=Propri\u00e9t\u00e9s du raster
+propiedades_sesion=Propri\u00e9t\u00e9s du project
+propiedades_tabla=Propri\u00e9t\u00e9s de la table
+Propiedades_texto=Propri\u00e9t\u00e9s du texte
+propiedades_vista=Propri\u00e9t\u00e9s de la vue
+Proyecciones=
+ps=
+puerto=Port
+Pulgadas=Pouces
+punto=Point
+quantile_intervals=Intervalles quantiles
+quiere_continuar=S\u00fbr de vouloir continuer?
+Quitar=Quitter
+Quitar_capa=Supprimer une couche
+quitar_enlaces=Enlever liens
+Quitar_todos=Tout supprimer
+quitar_uniones=Enlever unions
+rango_de_escalas=Niveau d'\u00e9chelle
+Rango_de_escalas=Classes d'\u00e9chelles
+realce=R\u00e9heussement
+realmente_desea_guardar=Voulez-vous sauvegarder ?
+recargar=
+recorte_colas=Couper les r\u00e9sidus
+recorte_vista=Couper la vue
+rectangulo=Rectangle
+recuento=Recomptage
+Recuperar_leyenda=Charger une l\u00e9gende
+Recuperar_y_eliminar_otros_zoom=R\u00e9cuperer et \u00e9liminer les autres zooms
+refrescar=Rafra\u00eechir
+registros_seleccionados_total=Total registres s\u00e9lectionn\u00e9s
+rehacer=refaire
+rellenar_marco_vista=Remplir le cadre de la vue
+relleno=Remplir \:
+remove_elements=
+remove_fields=
+remove_row=Supprimer une ligne
+remove_rows=
+rename_field=
+renombrar=Renomer
+reproyectar_aviso=Le syst\u00e8me de projection de la couche est diff\u00e9rent de la vue.\nAVISO\: \=Des probl\u00e8mes peuvent \u00eatre rencontr\u00e9s avec certaines projections. Lisez la documentation
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+resolucion_resultado=R\u00e9solution du r\u00e9sultat\:
+resto_valores=Reste des valeurs
+restore_palette=
+rotation_field=
+salir=Quitter
+salir_tooltip=Quitter
+salvar_raster=Enregistrer le raster g\u00e9or\u00e9f\u00e9renc\u00e9.
+Sample=Exemple
+Se_superponen_a=Se superposent \u00e0
+Sean_disjuntos_a=sont disjoints de
+Sean_iguales_a=sont identiques \u00e0
+seleccion=S\u00e9lection
+seleccion_fuente=S\u00e9lection d'une fonte
+Seleccion_por_capa=S\u00e9lection par couche
+selecciona_sistema_de_referencia=
+Seleccionar=S\u00e9lectionner
+seleccionar_capas=S\u00e9lectionner des couches
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=S\u00e9lectionner dans la couche active les entit\u00e9s qui\:
+Seleccionar_del_conjunto=Mettre ce texte sur plusieurs lignes
+Seleccionar_fichero=S\u00e9lectionner un fichier
+seleccionar_por_poligono=
+seleccionar_por_punto=S\u00e9lection
+seleccionar_por_rectangulo=S\u00e9lection \u00e0 partir d'un rectangle
+seleccionar_todos=Tout s\u00e9lectionner
+seleccione_campo_enlace=S\u00e9lectionner le champs \u00e0 relier
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=S\u00e9lection d'une date...
+seleccione_tabla_a_enlazar=S\u00e9lectionner la table a relier
+seleccione_tabla_origen=S\u00e9lectionner la  origine de la jointure
+selection_color=Couleur de s\u00e9lection
+selection_up=
+separator=
+Servidor=Serveur
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Toujours
+simbolo=
+Simbolo=Symbole
+Simbolo_unico=Symbole unique
+Simbologia=Symbologie
+simplificar_leyenda=
+simplify=
+sin_titulo=Sans titre
+sincronizar_color_borde_relleno=Synchroniser la couleur de contour avec le fond \:
+Size=Taille
+sobre_la_barra=Sur la barre
+Solo_para_capas_vectoriales=Seulement pour les couches vectorielles
+start_edition=Commencer l'\u00e9dition
+statistics=Statistiques
+stop_edition=Terminer l'\u00e9dition
+Style=Style
+Subir_capa=Monter une couche
+suma=Somme
+Superior=Sup\u00e9rieure
+symbol_selector=
+Tabla=Table
+Tabla_de_Atributos=Table d'attributs
+tablas=Tables
+Tablas=Tables
+tag=tag
+tamano=Taille\:
+tamano_metros=Taille en m\u00e8tres
+tamano_pagina=Taille de la page\:
+tamano_posicion=Taille et position
+tamanyo_borde=Taille du bord
+tamanyo_fuente=Taille de la source
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texte
+this_table_is_not_self_editable=
+tipo_dato=Type de donn\u00e9e
+tipo_de_intervalo=Type d'intervalle
+tipo_de_leyenda=Type de l\u00e9gende
+tipo_fichero_proyecto=Fichier de projet gvSIG (*.GVP)
+tipo_linea=Type de Ligne\:
+tipo_relleno=Remplir\:
+tipo_simbolo=Type de symbole\:
+tipos_de_documentos=Type de documents
+titulo=Gestionnaire de projet
+titulo_fframetext=Titre du champs texte
+to_annotation=Transformer la couche en etiquettes
+to_palette=Changer la palette
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=touchent
+transparencia=Transparence
+Transparencia=Transparence
+transparencia_pixel=Transparence des pixels
+ungroup=Dissocier
+unidades=Unit\u00e9s\:
+Unidades=Unit\u00e9s\:
+untitled=Sans titre
+url=
+Usar_indice_espacial=Utiliser indice spatial
+usar_marco=Utiliser le cadre
+usar_titulo=Utiliser titre
+usuario=Utilisateur
+utilizar_margenes_impresora=Utiliser les marges de l'imprimante.
+vacia=Vide
+Valor=Valeur
+Valores=Valeurs
+Valores_unicos=Valeurs uniques
+varianza=Variance
+Ventana=Fen\u00eatre
+ventana_proyecto=Fen\u00eatre de projet
+Ver=Afficher
+ver_error_capa=
+ver_tabla_atributos=Voir la table des attributs
+ver_tags=
+ver_tooltip=Afficher la fen\u00eatre de projet
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Toutes visibles
+Vista=Vue
+vistas=Vues
+visualizacion=Vues
+Visualizacion=Visualiser
+visualizar_cuadricula=Afficher la grille
+warning=
+xmax=X minimum
+xmin=X minimum
+Yardas=Yards
+ymax=Y minimum
+ymin=Y minimum
+Zoom_a_la_capa=Zoom \u00e0 la couche
+Zoom_Acercar=Zoom rapprocher
+Zoom_Alejar=Zoom \u00e9loigner
+Zoom_Completo=Vue g\u00e9n\u00e9rale
+Zoom_Completo_Vista=Zoom complet dans le cadre
+zoom_in_factor=
+Zoom_Mas=Zoom avant.
+Zoom_Mas_Vista=Zoom arri\u00e8re dans le cadre
+Zoom_Menos=Zoom avant
+Zoom_Menos_Vista=Zoom avant dans le cadre
+zoom_out_factor=
+Zoom_pixel=Zoom a la r\u00e9solution du raster
+Zoom_Previo=Zoom pr\u00e9c\u00e9dent
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 la s\u00e9lection

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_fr.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_de.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_de.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_de.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(Gr\u00f6\u00dfter Ma\u00dfstab)
+(escala_minima)=(Kleinster Ma\u00dfstab)
+1\:=
+_(Simbolo_unico)=(Einmaliges symbol)
+__proyeccion_actual=Aktuelle projektion\:
+__redimensionar_texto_escala=Textgr\u00f6\u00dfe an den ansichtsma\u00dfstab anpassen
+__seleccion_de_fuente=Auswahl der Schriftart
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Nach unten
+abrir=\u00d6ffnen
+abrir_plantilla=Vorlage \u00f6ffnen
+abrir_proyecto=Projekt \u00f6ffnen
+abrir_tooltip=Vorhandenes Projekt \u00f6ffnen
+Abrir_una_capa=Layer \u00f6ffnen
+Accion_Predefinida=Vordefinierte aktion
+aceptar=OK
+Aceptar=OK
+acerca_de=\u00dcber...
+activar=Activate
+activar_regla=Lineal aktivieren
+activos=Aktiv
+add_delete_edit_fields=
+add_layer=Layer hinzuf\u00fcgen
+add_rows=
+adjust_transparency=Transparenz anpassen
+agrupacion=
+agrupar=Gruppieren
+agrupar_capas=Layer gruppieren
+agrupar_graficos=Grafiken gruppieren
+agrupar_linea=Grafiklinie mit grafiken gruppieren
+Ajustar_transparencia=Transparenz anpassen
+ajustes_linea_grafica=Anpassung grafiklinie
+Al_leer_la_leyenda=Beim lesen der legende
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ausrichtung\:
+alinear=Ausrichtung
+alinear_graficos=Grafiken ausrichten
+alta=Hoch
+alto=Hoch
+altura=H\u00f6he\:
+Altura_fija_de_texto=Fixierte texth\u00f6he
+ambito=Bereich
+Anadir=Hinzuf\u00fcgen
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00fcgen
+Anadir_capa=Layer hinzuf\u00fcgen
+Anadir_Capa=Layer hinzuf\u00fcgen
+anadir_tag=
+Anadir_todos=Alle hinzuf\u00fcgen
+ancho=Breite
+ancho_alto=Breite x h\u00f6he
+anchura=Breite\:
+Aplicar=Anwenden
+Archivo=Datei
+arriba=Nach oben
+ascending_order=Aufsteigende ordnung
+ascending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in aufsteigender Ordnung.
+Atributo=Attribut
+automatico=Automatisch
+Ayuda=Hilfe
+back=Zur\u00fcck
+background_color=Hintergrundfarbe
+baja=Niedrig
+Bajar_capa=Layer nach unten
+bandas=Farbstreifen
+barra=Balken\:
+base=base
+base_datos=Datenbank
+bmp=BMP-Dateien
+Bold=Fett
+borra_seleccion=Auswahl l\u00f6schen
+borrador=Entwurf
+borrar=L\u00f6schen
+box=
+brillo=
+brillo_y_contraste=
+browse=
+cajetin=
+Calcular_intervalos=Intervalle berechnen
+calidad=Qualit\u00e4t
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Farbe \u00e4ndern
+cambio_nombre=Namen \u00e4ndern
+campo=Feld
+Campo=Feld
+campo_altura_texto=H\u00f6he textfeld\:
+Campo_de_clasificacion=Klassifikationsfeld
+Campo_de_etiquetado=Etikettierfeld
+Campos=Felder
+cancel=Abbrechen
+Cancel=Abbrechen
+cancelar=Abbrechen
+Cancelar=Abbrechen
+Capa=Layer
+Capas=
+Capas_del_localizador=Navigatorlayer
+Centimetros=Zentimeter
+cerrar=Schlie\u00dfen
+Cerrar=Schlie\u00dfen
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Kreis
+clave=Passwort
+close=schlie\u00dfen
+coincidir_tamanyo=
+colocar_a_margenes=Zu den r\u00e4ndern anordnen
+colocar_alrededor_seleccionados=Um ausgew\u00e4hlte graphiken anordnen.
+colocar_alrededor_todos=Um alle grafiken anordnen.
+colocar_delante=Nach vorn
+colocar_detras=Nach hinten
+color=Farbe\:
+Color_final=Endfarbe\:
+Color_inicio=Anfangsfarbe
+color_texto=Textfarbe\:
+comentarios=Kommentare
+comenzar_edicion=
+compleja=
+configurar=Konfigurieren
+configurar_localizador=Navigator konfigurieren
+Configurar_localizador=Navigator konfigurieren ...
+confirmar_borrar=Sind Sie sicher, dass Sie dieses element l\u00f6schen wollen?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Darstellungsma\u00dfstab beibehalten
+consulta=Abfrage
+Contengan=Beinhalten
+contraste=Contrast
+coor_geograficas=Geografische koordinaten
+copiar=
+copy=
+cortar=
+creation_date=Erstellungsdatum
+Crucen_con=Sich kreuzen mit
+cuando_activo=Wenn aktiv
+cut=
+Dado_un_campo_de_atributos=Bei vorgegebenen attributfeld\:
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=
+delete_field=
+Derecha=Rechts
+Derecho=Rechts
+desagrupar=Gruppe aufl\u00f6sen
+desagrupar_capas=
+desagrupar_graficos=Grafikgruppe aufl\u00f6sen
+descending_order=Absteigende ordnung
+descending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in absteigender Ordnung.
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Von oben\:
+desde_izquierda=Von links\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Verschieben
+desviacion_tipica=Typische Abweichung
+distance_units=Ma\u00dfeinheiten
+distribuir=Verteilen\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Teilungen auf der linken Seite
+documento=
+documentos_existentes=Vorhandene dokumente
+draw_text_only=
+driver=Treiber
+Dxffiles=DXF-Dateien
+edicion=
+editable=Editierbar
+Editar_leyenda=Legende editieren
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=Die maximal Intervallenummer f\u00fcr dieses Feld ist
+Elegir_Color=Farbe ausw\u00e4hlen
+Elegir_Fuente=Schriftart ausw\u00e4hlen
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Ausgew\u00e4hlte elemente des layers
+Eliminar=L\u00f6schen
+eliminar_capa=Layer l\u00f6schen
+eliminar_columna=
+eliminar_extremos=Extreme l\u00f6schen
+eliminar_fila=
+en_el_mapa=Auf der karte\:
+En_metros=In Metern
+En_pixels=In pixeln
+en_unidades=
+Encuadre=Bildausschnitt
+Encuadre_Vista=Ansicht im bildausschnitt verschieben
+enlace_vivo=Aktiver link zum original
+Enlazar_a_fichero_de_texto=Link zu textdateien
+Enlazar_a_ficheros_de_imagen=Link zu bilddateien
+equal_intervals=Gleiche intervalle
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+Error_guardando_la_plantilla=
+escala=Ma\u00dfstab
+Escala=Ma\u00dfstab
+escala_desconocida=
+escala_maxima=Maximalma\u00dfstab
+Escala_Maxima=Gr\u00f6\u00dfter ma\u00dfstab
+escala_minima=Minimalma\u00dfstab
+Escala_Minima=Kleinster ma\u00dfstab
+escala_usuario=Benutzerdefinierter Ma\u00dfstab
+espaciado_horizontal=Horizontaler rasterabstand
+espaciado_vertical=Vertikaler Rasterabstand
+espacio=Leerzeichen\:
+estadisticas=Statistiken
+este_por_debajo_de_=Kleiner ist als
+este_por_encima_de=Gr\u00f6\u00dfer ist als
+Esten_contenidos_en=Enthalten sind in
+Etiqueta=Etikett
+Etiquetados=Etikettierung
+etiquetas=Etiketten\:
+Etiquetas_estandar=Standard-Etiketten
+Examinar=Browse
+export=Exportieren
+exportar=Exportieren
+exportar_pdf=Als pdf exportieren
+exportar_ps=Als ps exportieren
+extension=Verl\u00e4ngerung
+Extent=Bildbereich
+extents_no_coincidentes=Die ausgew\u00e4hlte Bildgr\u00f6\u00dfe stimmt nicht mit dem Originalbild \u00fcberein.
+factor_zoom_incorrecto=
+fallo_capas=Fehler beim Zugriff auf die Layer. Die folgenden Layer werden aus dem Projekt entfernt
+family=
+fichero=
+Fichero=Datei
+fichero_existe=Ausgew\u00e4hlte datei existiert schon als layergruppe.
+fichero_incorrecto=Unrichtige datei
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filter
+finish=Beenden
+Font=Schriftart
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Unrichtig Format
+fuente=Schriftart
+General=Allgemein
+georeferenciado=
+gestion_encuadre=Verwaltung der Bildausschnitte
+grados=Grad\:
+Grados=Grad
+Graficos=Grafiken
+grosor_linea=Strichst\u00e4rke
+group=Gruppieren
+group_graphic_line=
+grupo=
+guardado=Gespeichert in
+guardar=
+Guardar=Speichern
+guardar_cambios=\u00c4nderungen speichern?
+guardar_como=Speichern unter ...
+guardar_como_plantilla=als Vorlage speichern
+Guardar_el_zoom_actual=Aktuellen zoom speichern
+Guardar_leyenda=Legende speichern
+guardar_proyecto=Projekt speichern
+guardar_tooltip=Speichert die \u00c4nderungen des Projekts
+Habilitar_etiquetado=Etikettierung aktivieren
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Ergebnisse identifizieren
+Igual_que_la_impresora=Wie drucker
+igual_todos_lados=Gleiche Verschiebung in alle richtungen
+imagen=Bild
+Implimir=
+importar=Importieren
+Imprimir=Drucken
+Indexando=Indexing...
+Indexando_espacialmente=
+indexar_campos=
+Inferior=Unten
+info=Information
+informacion=Information
+Informacion=Information
+Inicializando=Initialisiert
+initial_warning=
+insert_row=
+Insertar=Einf\u00fcgen
+insertar_cajetin=
+insertar_circulo=Kreis einf\u00fcgen
+insertar_columna=
+insertar_escala=Ma\u00dfstab einf\u00fcgen
+insertar_fila=
+insertar_imagen=Bild einf\u00fcgen
+insertar_leyenda=Legende einf\u00fcgen
+insertar_linea=Linie einf\u00fcgen
+insertar_norte=Nordung einf\u00fcgen
+insertar_poligono=Polygon einf\u00fcgen
+insertar_polilinea=
+insertar_punto=Punkt einf\u00fcgen
+insertar_rectangulo=Rechteck einf\u00fcgen
+insertar_texto=Text einf\u00fcgen
+insertar_vista=Ansicht einf\u00fcgen
+Intersecten_con=Sich \u00fcberschneiden mit
+Intervalo=Intervall
+Intervalos=Intervalle
+introduce_nombre=Geben Sie den neuen Namen ein.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=Kursiv
+Izquierda=Links
+Izquierdo=Links
+join=Verbindung
+jpg=JPEG-Datei
+kilometros=Kilometer
+Kilometros=Kilometer
+leyenda=Legende
+Leyenda=Legende
+leyenda_campo_unido=Man verwendt ein Field der Verbindung in der Legende (und/oder Etikettierung). Tauschen Sie die Legende vorher aus, die Verbindung aufzul\u00f6sen.
+Leyenda_Por_Defecto=Legende nach vorgabe
+linea=Linie
+linea_grafica=Grafiklinie
+lineal_directo=Direktlineal
+link=Link
+Link=Link
+localizador=Locator
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Raster aktiviert
+manage_fields=
+mantener_intervalo=Intervall beibehalten
+map_units=Karteneinheiten
+mapa=
+Mapa=Karte
+mapas=Karten
+marco=Rahmen
+marco_vista=Ansichtsrahmen
+margenes=R\u00e4nder\:
+mas_de_100_simbolos=Mehr als 100 Symbols liefern keine Information zu der Karte
+max_length_is=
+maximo=Maximal
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+media=Mittel
+medir_area=Fl\u00e4che messen
+medir_distancias=Abst\u00e4nde messen
+metadatos=
+metros=Meter
+Metros=Meter
+Milimetros=Milimeter
+Millas=Meilen
+minimo=Minimal
+modificar=
+modification_date=Letzte \u00c4nderung
+mostrar_escala_numerica=
+Mostrar_siempre=Immer zeigen
+mostrar_unidades=Einheiten anzeigen
+move_elements=
+Muestra_atributos=Zeigt die attribute der ausgew\u00e4hlten Layer.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zeigt Elemente des Layers mit je einem symbol pro Wert.
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zeigt die Elemente des Layers mit der gleichen Farbpalette, abh\u00e4ngig vom Wert eines bestimmten Attributfelds.
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zeigt alle elemente des layers mit dem gleichen symbol.
+natural_intervals=Nat\u00fcrliche Intervalle
+navegacion=\u00dcbersicht
+navegacion_vista=\u00dcbersicht der Ansicht
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_field=
+new_field_properties=
+next=Weiter
+ninguna_impresora_configurada=Kein Drucker konfiguriert
+Nivel_de_transparencia=Transparenzgrad
+no=No
+no_activos=inaktiv
+No_de_intervalos=Anzahl intervalle
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Den Layer nicht zeigen, wenn der Ma\u00dfstab ...
+No_mostrar_la_capa_cuando_la_escala=Den layer nicht zeigen, wenn der ma\u00dfstab ...
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+no_visibles=Unsichtbar
+nombre=Name
+Nombre=Name
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Name des zooms
+nombre_sesion=Name der session
+none=
+none_selected=keiner ausgew\u00e4hlt
+normal=Normal
+north=Nord
+Nueva_tabla=Neue tabelle
+nuevo=Neu
+Nuevo_conjunto=Neuer datensatz
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Neues projekt
+nuevo_tooltip=Erstellt ein neues projekt
+num_bandas=Anzahl farbstreifen
+num_columnas=
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=Unrichtig nummer
+ok=OK
+opacidad=Lichtundurchl\u00e4ssigkeit
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Ausrichtung
+origen_de_datos=Herkunft der daten
+Origen_de_datos=Herkunft der daten
+Origen_de_Datos=Herkunft der daten\:
+owner=Besitzer
+paste=Paste
+paste_elements=
+path=Pfad
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Erm\u00f6glicht das etiketieren von elementen der karte, mit dem wert eines bestimmten felds.
+Personalizado=Benutzerdefiniert
+personalizar_margenes=
+Pies=Feet
+pila_de_comandos=
+pixeles=pixel
+pixels=pixels
+Plain=Einfach
+plantilla=
+please_insert_new_field_name=
+png=PNG-Datei
+poligono=
+polilinea=
+poner_capas_a=
+por_debajo_de=unter\:
+por_encima_de=\u00fcber\:
+Por_favor_active_la_capa=
+posicion_linea=Position der Linie
+precision=
+preparar_pagina=Seite einrichten
+Preparar_pagina=Seite einrichten
+presentacion=Pr\u00e4sentation
+previsualizacion=
+Previsualizacion=Voransicht
+Previsualizacion_de_simbolo=Symbolvoransicht
+propiedad=
+propiedades=Eigenschaften
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=Eigenschaften des Layers
+Propiedades_escala_grafica=Eigenschaften des Ma\u00dfstabsbalkens
+propiedades_grafico=Eigenschaften der grafik
+propiedades_mapa=Eigenschaften der Karte
+propiedades_marco_imagenes=Eigenschaften des bildrahmens
+propiedades_marco_leyenda=Eigenschaften des Legenderahmens
+propiedades_marco_vista=Eigenschaften des ansichtsrahmens
+propiedades_raster=Eigenschaften der rasterung
+propiedades_sesion=Eigenschaften der session
+propiedades_tabla=Eigenschaften der tabelle
+Propiedades_texto=Eigenschaften des textes
+propiedades_vista=Eigenschaften der ansicht
+Proyecciones=
+ps=
+puerto=
+Pulgadas=Inches
+punto=Punkt
+quantile_intervals=Quantile Intervalle
+quiere_continuar=W\u00f6llen Sie wietermachen?
+Quitar=Entfernen
+Quitar_capa=Layer entfernen
+quitar_enlaces=Links aufl\u00f6sen
+Quitar_todos=Alle entfernen
+quitar_uniones=Verbindungen aufl\u00f6sen
+rango_de_escalas=Ma\u00dfstabsbereich
+Rango_de_escalas=Ma\u00dfstabsbereich
+realce=Heraushebung
+realmente_desea_guardar=
+recargar=
+recorte_colas=Zuschnitt der Randbereiche
+recorte_vista=Ausschneiden nach Augenma\u00df
+rectangulo=Rechteck
+recuento=Nachz\u00e4hlung
+Recuperar_leyenda=Legende laden
+Recuperar_y_eliminar_otros_zoom=Andere zooms laden oder l\u00f6schen
+refrescar=Aktualisieren
+registros_seleccionados_total=Alle ausgew\u00e4hlten register
+rehacer=
+rellenar_marco_vista=Ansichtsrahmen f\u00fcllen
+relleno=F\u00fcllung\:
+remove_elements=
+remove_fields=
+remove_row=
+remove_rows=
+rename_field=
+renombrar=Umbenennen
+reproyectar_aviso=Die Layerprojektion deckt sich nicht mit der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00f6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+reproyectar_pregunta=W\u00fcnschen Sie eine neue Projektion?
+resolucion_resultado=Ausgabeauf\u00f6sung\:
+resto_valores=Andere werte
+restore_palette=
+rotation_field=
+salir=Schlie\u00dfen
+salir_tooltip=Schlie\u00dfen
+salvar_raster=Als Rasterung sichern
+Sample=Beispiel
+Se_superponen_a=Sich \u00fcberlagern \u00fcber
+Sean_disjuntos_a=getrennt sind von
+Sean_iguales_a=gleich sind wie
+seleccion=Auswahl
+seleccion_fuente=Schriftart w\u00e4hlen
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=ausw\u00e4hlen
+seleccionar_capas=Layer ausw\u00e4hlen
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=In den aktiven layern nach elementen suchen, die\:
+Seleccionar_del_conjunto=Aus dem datensatz ausw\u00e4hlen
+Seleccionar_fichero=Datei ausw\u00e4hlen
+seleccionar_por_poligono=
+seleccionar_por_punto=\u00dcber Punkt ausw\u00e4hlen
+seleccionar_por_rectangulo=Auswahlrahmen
+seleccionar_todos=Alle ausw\u00e4hlen
+seleccione_campo_enlace=W\u00e4hlen Sie das Feld aus, \u00fcber das sie verlinken wollen.
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=W\u00e4hlen sie ein Datum aus ...
+seleccione_tabla_a_enlazar=W\u00e4hlen Sie die Tabelle aus, die Sie verlinken wollen.
+seleccione_tabla_origen=W\u00e4hlen Sie die Originaltabelle f\u00fcr die Verbindung aus.
+selection_color=Farbe der Auswahl
+selection_up=
+separator=
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Immer
+simbolo=
+Simbolo=Symbol
+Simbolo_unico=Einmaliges symbol
+Simbologia=Symbole
+simplificar_leyenda=
+simplify=
+sin_titulo=Ohne Titel
+sincronizar_color_borde_relleno=Die randfarbe mit der f\u00fcllung synchronisieren\:
+Size=Gr\u00f6\u00dfe
+sobre_la_barra=Auf dem Balken
+Solo_para_capas_vectoriales=Nur f\u00fcr Vektorlayer
+start_edition=
+statistics=Statistiken
+stop_edition=
+Style=Stil
+Subir_capa=Layer nach oben
+suma=Summe
+Superior=Oben
+symbol_selector=
+Tabla=Tabelle
+Tabla_de_Atributos=Attributtabelle
+tablas=Tabellen
+Tablas=Tabellen
+tag=tag
+tamano=Gr\u00f6\u00dfe\:
+tamano_metros=Gr\u00f6\u00dfe in Metern
+tamano_pagina=Seitenformat\:
+tamano_posicion=Gr\u00f6\u00dfe und Position
+tamanyo_borde=Randgr\u00f6\u00dfe
+tamanyo_fuente=Schriftgr\u00f6\u00dfe
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=
+this_table_is_not_self_editable=
+tipo_dato=Datentyp
+tipo_de_intervalo=Intervallesart
+tipo_de_leyenda=Legendentyp
+tipo_fichero_proyecto=Projektdatei gvSIG (*.GVP)
+tipo_linea=Strichtyp\:
+tipo_relleno=F\u00fcllstil\:
+tipo_simbolo=Symboltyp\:
+tipos_de_documentos=Dokumenttyp
+titulo=Projektverwalter
+titulo_fframetext=Titel des Textfelds
+to_annotation=
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=fassen an
+transparencia=Transparenz
+Transparencia=Transparenz
+transparencia_pixel=
+ungroup=Gruppe aufl\u00f6sen
+unidades=Einheiten\:
+Unidades=Einheiten\:
+untitled=Ohne Titel
+url=
+Usar_indice_espacial=R\u00e4umlichen Index benutzen
+usar_marco=Rahmen verwenden
+usar_titulo=Titel verwenden
+usuario=Benutzer
+utilizar_margenes_impresora=Randbegrenzung des Druckers verwenden
+vacia=
+Valor=Wert
+Valores=Werte
+Valores_unicos=Einmalige werte
+varianza=Varianz
+Ventana=Fenster
+ventana_proyecto=Projektfenster
+Ver=Sehen
+ver_error_capa=
+ver_tabla_atributos=Attributtabelle sehen
+ver_tags=
+ver_tooltip=Zeigt das Projektfenster
+vertical=Vertikal
+vertical_space=
+visible=Sichtbar
+visibles=Sichtbar
+Vista=Ansicht
+vistas=Ansichten
+visualizacion=Darstellung
+Visualizacion=Visualisierung
+visualizar_cuadricula=Raster darstellen
+warning=
+xmax=Maximalwert x
+xmin=Minimalwert x
+Yardas=Yards
+ymax=Maximalwert y
+ymin=Minimalwert y
+Zoom_a_la_capa=
+Zoom_Acercar=Heranzoomen
+Zoom_Alejar=Wegzoomen
+Zoom_Completo=Zoom auf alles
+Zoom_Completo_Vista=Zoom auf alles im bildausschnitt
+zoom_in_factor=
+Zoom_Mas=Gr\u00f6\u00dfer zoomen
+Zoom_Mas_Vista=Im bildausschnitt gr\u00f6\u00dfer zoomen
+Zoom_Menos=Kleiner zoomen
+Zoom_Menos_Vista=Im bildausschnitt kleiner zoomen
+zoom_out_factor=
+Zoom_pixel=Zoom zur Rasteraufl\u00f6sung
+Zoom_Previo=Letzter zoom
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zur auswahl zoomen

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_de.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/plugin.dtd
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/plugin.dtd	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/plugin.dtd	(revision 30230)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO_8859-1"?>
+<!ELEMENT class EMPTY >
+<!ATTLIST class name NMTOKEN #REQUIRED >
+
+<!ELEMENT extension ( class | menu | toolBar | toolBoxItem | popupMenu)* >
+<!ATTLIST extension enabled NMTOKEN #IMPLIED >
+<!ATTLIST extension position NMTOKEN #IMPLIED >
+
+<!ELEMENT fileExtension ( class ) >
+<!ATTLIST fileExtension description CDATA #REQUIRED >
+<!ATTLIST fileExtension enabled NMTOKEN #IMPLIED >
+<!ATTLIST fileExtension endsWith CDATA #REQUIRED >
+<!ATTLIST fileExtension dialog CDATA #REQUIRED >
+
+<!ELEMENT import EMPTY >
+<!ATTLIST import plugin NMTOKEN #REQUIRED >
+
+<!ELEMENT libraries ( library+ ) >
+
+<!ELEMENT library EMPTY >
+<!ATTLIST library file NMTOKEN #REQUIRED >
+
+<!ELEMENT menu EMPTY >
+<!ATTLIST menu actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST menu enableText CDATA #IMPLIED >
+<!ATTLIST menu key NMTOKEN #IMPLIED >
+<!ATTLIST menu mnemonic NMTOKEN #IMPLIED >
+<!ATTLIST menu icon CDATA #IMPLIED >
+<!ATTLIST menu text CDATA #REQUIRED >
+<!ATTLIST menu tooltip CDATA #IMPLIED >
+
+<!ELEMENT plugin ( import*, libraries, resourceBundle, labelSet*, extension*, fileExtension*, icon*) >
+
+<!ELEMENT icon EMPTY >
+<!ATTLIST icon src CDATA #REQUIRED >
+<!ATTLIST icon text CDATA #REQUIRED >
+
+<!ELEMENT resourceBundle EMPTY >
+<!ATTLIST resourceBundle name NMTOKEN #REQUIRED >
+
+<!ELEMENT tool EMPTY >
+<!ATTLIST tool actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST tool enableText CDATA #IMPLIED >
+<!ATTLIST tool icon CDATA #IMPLIED >
+<!ATTLIST tool text NMTOKEN #IMPLIED >
+<!ATTLIST tool tooltip CDATA #IMPLIED >
+
+<!ELEMENT toolBar ( tool+ ) >
+<!ATTLIST toolBar name NMTOKEN #IMPLIED >
+
+<!ELEMENT entry EMPTY >
+<!ATTLIST entry text CDATA #IMPLIED >
+<!ATTLIST entry enableText CDATA #IMPLIED >
+<!ATTLIST entry tooltip CDATA #IMPLIED >
+<!ATTLIST entry actionCommand NMTOKEN #IMPLIED >
+
+<!ELEMENT popupMenu ( entry+ ) >
+<!ATTLIST popupMenu name NMTOKEN #IMPLIED >
+
+<!ELEMENT labelSet ( label+ ) >
+<!ATTLIST labelSet class NMTOKEN #REQUIRED >
+
+<!ELEMENT label EMPTY >
+<!ATTLIST label text NMTOKEN #REQUIRED >
+<!ATTLIST label size NMTOKEN #IMPLIED>
+
+<!ELEMENT toolBoxItem EMPTY >
+<!ATTLIST toolBoxItem default NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem icon CDATA #IMPLIED >
+<!ATTLIST toolBoxItem text CDATA #IMPLIED >
+<!ATTLIST toolBoxItem tooltip CDATA #IMPLIED >
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/plugin.dtd
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_eu.properties
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_eu.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_eu.properties	(revision 30230)
@@ -0,0 +1,707 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(eskala handiena)
+(escala_minima)=(eskala txikiena)
+1\:=
+_(Simbolo_unico)=(Ikur bakarra)
+__proyeccion_actual=Egungo proiekzioa\:
+__redimensionar_texto_escala=Testua bistaren eskalara egokitu.
+__seleccion_de_fuente=Letra-tipoa aukeratu
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Behera
+abrir=Ireki
+abrir_plantilla=Ireki txantiloia
+abrir_proyecto=Proiektua ireki
+abrir_tooltip=Aurreko proiektu bat irekitzen du
+Abrir_una_capa=
+Accion_Predefinida=Aurretik zehaztutako ekintza
+aceptar=Ados
+Aceptar=Ados
+acerca_de=Honi buruz\:
+activar=Activate
+activar_regla=Erregela aktibatu
+activos=Aktiboak
+add_delete_edit_fields=
+add_layer=Gehitu geruza
+add_rows=
+adjust_transparency=Doitu gardentasuna
+agrupacion=
+agrupar=Multzokatu
+agrupar_capas=Multzokatu geruzak
+agrupar_graficos=Multzokatu grafikoak
+agrupar_linea=Lerro grafikoa grafikoekin multzokatu.
+Ajustar_transparencia=Doitu gardentasuna
+ajustes_linea_grafica=Lerro grafikoaren doitzeak
+Al_leer_la_leyenda=Legenda irakurtzean
+alias=Ezizena
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Lerrokadura
+alinear=Lerrokatu
+alinear_graficos=Grafikoak lerrokatu
+alta=Goi
+alto=Goi
+altura=Altura\:
+Altura_fija_de_texto=Testuaren altura finkoa
+ambito=Esparrua
+Anadir=Gehitu
+Anadir_al_conjunto=Gehitu multzoari
+Anadir_capa=Gehitu geruza
+Anadir_Capa=Gehitu geruza
+anadir_tag=
+Anadir_todos=Gehitu guztiak
+ancho=Zabalera
+ancho_alto=Zabalera altuera
+anchura=Zabalera\:
+Aplicar=Aplikatu
+Archivo=Fitxategia
+arriba=Gora
+ascending_order=Goranzko hurrenkera
+ascending_order_tooltip=Ordenatu hautatutako eremua goranzko hurrenkeran
+Atributo=Atributua
+automatico=Automatikoa
+Ayuda=Laguntza
+back=Aurrekoa
+background_color=Atzeko kolorea
+baja=Behe
+Bajar_capa=Jaitsi geruza
+bandas=Bandak
+barra=Barra\:
+base=base
+base_datos=Datu-baseak
+bmp=BMP motako fitxategiak
+Bold=
+borra_seleccion=Ezabatu aukeraketa
+borrador=Zirriborroa
+borrar=Ezabatu
+box=
+brillo=Distira
+brillo_y_contraste=Distira eta kontrastea
+browse=Aztertu
+cajetin=
+Calcular_intervalos=Kalkulatu bitarteak
+calidad=Kalitatea
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Kolore aldaketa
+cambio_nombre=Izen aldaketa
+campo=Eremua
+Campo=Eremua
+campo_altura_texto=Testuaren altura eremua\:
+Campo_de_clasificacion=Sailkapen eremua
+Campo_de_etiquetado=Etiketatze eremua
+Campos=Eremuak
+cancel=Utzi
+Cancel=Utzi
+cancelar=Utzi
+Cancelar=Utzi
+Capa=Geruza
+Capas=Geruzak
+Capas_del_localizador=Bilagailuaren geruzak
+Centimetros=Zentimetroak
+cerrar=Itxi
+Cerrar=Itxi
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Zirkulua
+clave=Gakoa
+close=Itxi
+coincidir_tamanyo=
+colocar_a_margenes=Jarri marjinak kontuan hartuta.
+colocar_alrededor_seleccionados=Jarri hautatutako grafikoen inguruan.
+colocar_alrededor_todos=Jarri grafiko guztien inguruan.
+colocar_delante=Jarri aurrean
+colocar_detras=Jarri atzean
+color=Kolorea\:
+Color_final=Amaierako kolorea\:
+Color_inicio=Hasierako kolorea
+color_texto=Testuaren kolorea\:
+comentarios=Iruzkinak
+comenzar_edicion=
+compleja=
+configurar=Konfiguratu
+configurar_localizador=Konfiguratu bilagailua
+Configurar_localizador=Konfiguratu bilagailua...
+confirmar_borrar=Ziur al zaude osagaia ezabatu nahi duzula?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Gorde bistaratze eskala
+consulta=Kontsulta
+Contengan=Honakoak dituztenak
+contraste=Kontrastea
+coor_geograficas=Koordenatu geografikoak
+copiar=
+copy=Kopiatu
+cortar=
+creation_date=Sortze data
+Crucen_con=Hauekin gurutzatzen direnak
+cuando_activo=Aktibo dagoenean
+cut=Ebaki
+Dado_un_campo_de_atributos=Atributu eremua emanda dago
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desegin
+delete_field=Ezabatu eremua
+Derecha=Eskuina
+Derecho=Eskuina
+desagrupar=Desegin multzoak
+desagrupar_capas=
+desagrupar_graficos=Desegin grafikoen multzoak
+descending_order=Beheranzko hurrenkera
+descending_order_tooltip=Ordenatu hautatutako eremua beheranzko hurrenkeran
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Goitik\:
+desde_izquierda=Ezkerretik\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desegin
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Lekualdaketa
+desviacion_tipica=Ohiko desbideratzea
+distance_units=Neurri unitateak
+distribuir=Banatu\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Zatiketak ezkerrean
+documento=
+documentos_existentes=Aurretik dauden dokumentuak
+draw_text_only=
+driver=Driver
+Dxffiles=.DFX fitxategiak
+edicion=Edizioa
+editable=Editagarria
+Editar_leyenda=Editatu legenda
+editar_vertices=Editatu erpinak
+el_numero_maximo_de_intervalos_para_este_campo_es=Eremu honek izan dezakeen tarte kopuru handiena hau da
+Elegir_Color=Hautatu kolorea
+Elegir_Fuente=Hautatu letra-tipoa
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Geruzatik hautatu diren osagaiak
+Eliminar=Ezabatu
+eliminar_capa=Ezabatu geruza
+eliminar_columna=
+eliminar_extremos=Ezabatu muturrak
+eliminar_fila=
+en_el_mapa=Mapan\:
+En_metros=Metrotan
+En_pixels=Pixeletan
+en_unidades=
+Encuadre=Enkoadraketa
+Encuadre_Vista=Bistaren gaineko enkoadraketa
+enlace_vivo=Lotura bizia
+Enlazar_a_fichero_de_texto=Testu fitxategietara estekatu
+Enlazar_a_ficheros_de_imagen=Irudi fitxategietara estekatu
+equal_intervals=Tarte berdinak
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+Error_guardando_la_plantilla=
+escala=Eskala
+Escala=Eskala
+escala_desconocida=
+escala_maxima=Eskala handiena
+Escala_Maxima=Eskala handiena
+escala_minima=Eskala txikiena
+Escala_Minima=Eskala txikiena
+escala_usuario=Erabiltzaileak zehaztutako eskala
+espaciado_horizontal=Sarearen tarte horizontala
+espaciado_vertical=Sarearen tarte bertikala
+espacio=Espazioa\:
+estadisticas=Estatistikak
+este_por_debajo_de_=Honen azpitik egotea\:
+este_por_encima_de=Honen gainetik egotea\:
+Esten_contenidos_en=Hemen daudenak
+Etiqueta=Etiketa
+Etiquetados=Etiketatuak
+etiquetas=Etiketak\:
+Etiquetas_estandar=Etiketa estandarrak
+Examinar=Aztertu
+export=Esportatu
+exportar=Esportatu
+exportar_pdf=Esportatu pdf batera
+exportar_ps=Exportar a ps
+extension=Luzapena
+Extent=Extent
+extents_no_coincidentes=Hedadurak ez datoz bat
+factor_zoom_incorrecto=
+fallo_capas=Hutsegitea geruzetara iristean. Hurrengo geruzak proiektutik ezabatuko dira
+family=
+fichero=
+Fichero=Fitxategia
+fichero_existe=Fitxategia badago
+fichero_incorrecto=Fitxategia ez da zuzena
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Iragazkia
+finish=Bukatu
+Font=Letra-tipoa
+formato=Formatua
+Formato_de_numero_erroneo=
+formato_incorrecto=Formatoa ez da zuzena
+fuente=Letra-tipoa
+General=Orokorra
+georeferenciado=
+gestion_encuadre=Enkoadraketen kudeaketa
+grados=Graduak\:
+Grados=Graduak
+Graficos=Grafikoak
+grosor_linea=Lerroaren lodiera\:
+group=Multzokatu
+group_graphic_line=
+grupo=
+guardado=Hemen gorde da\:
+guardar=Gorde
+Guardar=Gorde
+guardar_cambios=Aldaketak gorde nahi dituzu?
+guardar_como=Gorde honela\:
+guardar_como_plantilla=Gorde txantiloi moduan
+Guardar_el_zoom_actual=Gorde zooma
+Guardar_leyenda=Gorde legenda
+guardar_proyecto=Gorde proiektua
+guardar_tooltip=Gorde proiektuaren aldaketak
+Habilitar_etiquetado=Gaitu etiketak
+Hiperenlace=Hiperesteka
+horizontal=Horizontala
+horizontal_space=
+Identificar_Resultados=Identifikatu emaitzak
+Igual_que_la_impresora=Inprimagailuaren neurrira
+igual_todos_lados=Alde guztietatik berdin mugitzea.
+imagen=Irudia
+Implimir=
+importar=Inportatu
+Imprimir=Inprimatu
+Indexando=Indexatzen...
+Indexando_espacialmente=Geruza espazioan indexatzen ari da
+indexar_campos=
+Inferior=Behean
+info=Informazioa
+informacion=Informazioa
+Informacion=Informazioa
+Inicializando=Hasten
+initial_warning=
+insert_row=Txertatu ilara
+Insertar=Txertatu
+insertar_cajetin=Txertatu inskripzio-laukia
+insertar_circulo=Txertatu zirkulua
+insertar_columna=
+insertar_escala=Txertatu eskala
+insertar_fila=
+insertar_imagen=Txertatu irudia
+insertar_leyenda=Txertatu legenda
+insertar_linea=Txertatu lerroa
+insertar_norte=Iparraldea txertatu
+insertar_poligono=Txertatu poligonoa
+insertar_polilinea=Txertatu polilinea
+insertar_punto=Txertatu puntua
+insertar_rectangulo=Txertatu laukizuzena
+insertar_texto=Txertatu testua
+insertar_vista=Txertatu bista
+Intersecten_con=Hauekin ebakitzen direnak
+Intervalo=Tartea
+Intervalos=Tarteak
+introduce_nombre=Sartu izen berria
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Ezkerra
+Izquierdo=Ezkerra
+join=Lotu
+jpg=JPEG fitxategiak
+kilometros=Kilometroak
+Kilometros=Kilometroak
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Legendan (eta/edo etiketan)loturaren eremu bat erabiltzen ari zara. Mesedez, aldatu legenda lotunea kendu aurretik.
+Leyenda_Por_Defecto=Legenda lehenetsia
+linea=Lerroa
+linea_grafica=Lerro grafikoa
+lineal_directo=Zuzeneko lineala
+link=Lotura
+Link=Lotura
+localizador=Bilagailua
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Sarea aktibatuta
+manage_fields=
+mantener_intervalo=Tartea mantendu
+map_units=Maparen unitateak
+mapa=
+Mapa=Mapa
+mapas=Mapak
+marco=Markoa
+marco_vista=Bista-eremua
+margenes=Marjinak
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+max_length_is=
+maximo=Gehienez
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+media=Batez beste
+medir_area=Azalera neurtu
+medir_distancias=Distantziak neurtu
+metadatos=Metadatos
+metros=Metroak
+Metros=Metroak
+Milimetros=Milimetroak
+Millas=Miliak
+minimo=Gutxienez
+modificar=
+modification_date=Aldatu zen azken eguna
+mostrar_escala_numerica=
+Mostrar_siempre=Erakutsi beti
+mostrar_unidades=Bistaratu unitateak
+move_elements=
+Muestra_atributos=Hautatutako geruzen atributuak erakusten ditu.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Geruzaren elementuak atributu eremu jakin bateko koloreak erabiliz erakusten ditu
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu
+natural_intervals=Tarte naturalak
+navegacion=Nabigazioa
+navegacion_vista=Nabigazio Ikuspegia
+necesita_una_capa_activa=Geruza bat aktibo egon behar da
+necesita_una_capa_vectorial_activa=Bektore-geruza bat aktibo egon behar da
+new_field=Eremu berria
+new_field_properties=
+next=Hurrengoa
+ninguna_impresora_configurada=Ez dago konfiguratutako inprimagailurik
+Nivel_de_transparencia=Gardentasun maila
+no=Ez
+no_activos=Ez daude aktibo
+No_de_intervalos=Tarte kop.
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Ez erakutsi geruza eskala horrelakoa bada
+No_mostrar_la_capa_cuando_la_escala=Ez erakutsi geruza eskala horrelakoa bada\:
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Ezin izan da geruzaren taula eskuratu
+no_visibles=Ez dago ikusgai
+nombre=Izena
+Nombre=Izena
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Zoomari emango zaion izena
+nombre_sesion=Saioaren izena
+none=
+none_selected=Ez da bat ere ez hautatu
+normal=Normala
+north=Iparraldea
+Nueva_tabla=Taula berria
+nuevo=Berria
+Nuevo_conjunto=Multzo berria
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Proiektu berria
+nuevo_tooltip=Beste proiektu bat sortu
+num_bandas=Banda kopurua
+num_columnas=Zutabe kopurua
+num_filas=Lerro kopurua
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=Zenbakia ez da zuzena
+ok=Ados
+opacidad=Opakotasuna
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientazioa\:
+origen_de_datos=Datu-iturburua
+Origen_de_datos=Datu-iturburua
+Origen_de_Datos=Datu-iturburua\:
+owner=Jabea
+paste=Itsatsi
+paste_elements=
+path=Bidea
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mapako elementuak eremu jakin baten balioarekin etiketatzea ahalbidetzen du
+Personalizado=Pertsonalizatua
+personalizar_margenes=
+Pies=Oinak
+pila_de_comandos=Komando-pila
+pixeles=pixelak
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=png fitxategiak
+poligono=Poligonoa
+polilinea=polilinea
+poner_capas_a=Jarri geruzak hemen\:
+por_debajo_de=Honen azpitik\:
+por_encima_de=Honen gainetik\:
+Por_favor_active_la_capa=Mesedez, aktibatu geruza
+posicion_linea=Lerroaren kokalekua
+precision=
+preparar_pagina=Prestatu orria
+Preparar_pagina=Prestatu orria
+presentacion=Aurkezpena
+previsualizacion=Aurrebista
+Previsualizacion=Aurrebista
+Previsualizacion_de_simbolo=Ikurraren aurrebista
+propiedad=
+propiedades=Ezaugarriak
+propiedades_cajetin=Inskripzio-laukiaren ezaugarriak
+propiedades_capa=Geruzaren ezaugarriak
+propiedades_de_la_capa=Geruzaren ezaugarriak
+Propiedades_escala_grafica=Eskala grafikoaren ezaugarriak
+propiedades_grafico=Grafikoaren ezaugarriak
+propiedades_mapa=Maparen ezaugarriak
+propiedades_marco_imagenes=Irudi-markoaren ezaugarriak
+propiedades_marco_leyenda=Legenda-markoaren ezaugarriak
+propiedades_marco_vista=Bista-markoaren ezaugarriak
+propiedades_raster=Raster-aren ezaugarriak
+propiedades_sesion=Saioaren ezaugarriak
+propiedades_tabla=Taularen ezaugarriak
+Propiedades_texto=Testuaren ezaugarriak
+propiedades_vista=Bistaren ezaugarriak
+Proyecciones=
+ps=
+puerto=Ataka
+Pulgadas=Hazbeteak
+punto=Puntua
+quantile_intervals=Tarte koantilak
+quiere_continuar=Ziur zaude irten nahi duzula?
+Quitar=Kendu
+Quitar_capa=Kendu geruza
+quitar_enlaces=Kendu lotuneak
+Quitar_todos=Kendu denak
+quitar_uniones=Kendu loturak
+rango_de_escalas=Eskala-maila
+Rango_de_escalas=Eskala-maila
+realce=Irtengunea
+realmente_desea_guardar=Ziur zaude gorde nahi duzula?
+recargar=
+recorte_colas=Ilarak ebaki
+recorte_vista=Bistarako murrizketa
+rectangulo=Laukizuzena
+recuento=Zenbaketa
+Recuperar_leyenda=Berreskuratu legenda
+Recuperar_y_eliminar_otros_zoom=Beste zoom batzuk berreskuratu eta ezabatu
+refrescar=Eguneratu
+registros_seleccionados_total=Hautatutako erregistroak guztira
+rehacer=Berregin
+rellenar_marco_vista=Bete bista-eremua
+relleno=Betegarria\:
+remove_elements=
+remove_fields=
+remove_row=Ezabatu lerroa
+remove_rows=
+rename_field=
+renombrar=Berriro izendatu
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+resolucion_resultado=Emaitzaren ebazpena\:
+resto_valores=Gainerako balioak
+restore_palette=
+rotation_field=
+salir=Irten
+salir_tooltip=Irten
+salvar_raster=Gorde raster geoerreferentziatuan.
+Sample=Adibidea
+Se_superponen_a=Honakoei gainjartzen zaizkienak
+Sean_disjuntos_a=honen disjuntu direnak
+Sean_iguales_a=honen berdinak direnak
+seleccion=Hautaketa
+seleccion_fuente=Letra-tipoa aukeratu
+Seleccion_por_capa=Hautatu geruzaka
+selecciona_sistema_de_referencia=
+Seleccionar=Hautatu
+seleccionar_capas=Hautatu geruzak
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Geruza aktiboetatik baldintza hauek betetzen dituzten osagaiak hautatu\:
+Seleccionar_del_conjunto=Multzotik hautatu
+Seleccionar_fichero=Hautatu fitxategia
+seleccionar_por_poligono=
+seleccionar_por_punto=Puntuka hautatu
+seleccionar_por_rectangulo=Laukizuzenka hautatu
+seleccionar_todos=Hautatu guztiak
+seleccione_campo_enlace=Hautatu lotzeko erabiliko den eremua
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Hautatu data bat...
+seleccione_tabla_a_enlazar=Hautatu lotu beharreko taula
+seleccione_tabla_origen=Hautatu join-aren sorburu-taula
+selection_color=Hautaketaren kolorea
+selection_up=
+separator=
+Servidor=Zerbitzaria
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Beti
+simbolo=
+Simbolo=Ikurra
+Simbolo_unico=Ikur bakarra
+Simbologia=Sinbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Titulurik gabe
+sincronizar_color_borde_relleno=Ertzaren kolorea eta betegarriarena sinkronizatu\:
+Size=
+sobre_la_barra=Barran
+Solo_para_capas_vectoriales=Bektore-geruzetarako bakarrik
+start_edition=Hasi edizioa
+statistics=Estatistikak
+stop_edition=Amaitu edizioa
+Style=Estiloa
+Subir_capa=Igo geruza
+suma=Batura
+Superior=Goian
+symbol_selector=
+Tabla=Taula
+Tabla_de_Atributos=Atributuen taula
+tablas=Taulak
+Tablas=Taulak
+tag=tag
+tamano=Tamaina\:
+tamano_metros=Tamaina metrotan
+tamano_pagina=Orrialde-tamaina\:
+tamano_posicion=tamaina/kokalekua
+tamanyo_borde=Ertzaren tamaina
+tamanyo_fuente=Iturri-tamaina
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Testua
+this_table_is_not_self_editable=
+tipo_dato=Datu mota
+tipo_de_intervalo=Tarte mota
+tipo_de_leyenda=Legenda-mota
+tipo_fichero_proyecto=gvSIG (*.GVP) proiektu fitxategia
+tipo_linea=Lerro mota\:
+tipo_relleno=Betegarri-mota\:
+tipo_simbolo=Ikur-mota\:
+tipos_de_documentos=Agiri-motak
+titulo=Proiektuen kudeatzailea
+titulo_fframetext=Testu eremuaren titulua
+to_annotation=Bihurtu oharpen-geruza
+to_palette=Aldatu paletara
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=hauek ukitzen dituztenak
+transparencia=Gardentasuna
+Transparencia=Gardentasuna
+transparencia_pixel=Gardentasuna pixel bakoitzeko
+ungroup=Desegin multzoak
+unidades=Unitateak\:
+Unidades=Unitateak\:
+untitled=Titulurik gabe
+url=
+Usar_indice_espacial=Espazio-indizea erabili
+usar_marco=Erabili markoa
+usar_titulo=Erabili titulua
+usuario=Erabiltzailea
+utilizar_margenes_impresora=Erabili inprimagailuaren marjinak.
+vacia=Hutsik
+Valor=Balioa
+Valores=Balioak
+Valores_unicos=Balio bakarrak
+varianza=Bariantza
+Ventana=Leihoa
+ventana_proyecto=Proiektuaren leihoa
+Ver=Ikusi
+ver_error_capa=
+ver_tabla_atributos=Ikusi atributuen taula
+ver_tags=
+ver_tooltip=Proiektuaren leihoa erakusten du
+vertical=Bertikala
+vertical_space=
+visible=Ikusgai
+visibles=Ikusgai
+Vista=Bista
+vistas=Bista
+visualizacion=Bistaratzea
+Visualizacion=Bistaratzea
+visualizar_cuadricula=Bistaratu sarea
+warning=Oharra
+xmax=xmax
+xmin=xmin
+Yardas=Yardak
+ymax=ymax
+ymin=ymin
+Zoom_a_la_capa=Zooma geruzari
+Zoom_Acercar=Hurbiltzeko zooma
+Zoom_Alejar=Urruntzeko zooma
+Zoom_Completo=Zooma osorik
+Zoom_Completo_Vista=Zooma osorik bistaren gainean
+zoom_in_factor=
+Zoom_Mas=Zoom handiagoa
+Zoom_Mas_Vista=Zoom handiagoa bistaren gainean
+Zoom_Menos=Zoom txikiagoa
+Zoom_Menos_Vista=Zoom txikiagoa bistaren gainean
+zoom_out_factor=
+Zoom_pixel=Pixelaren zooma
+Zoom_Previo=Aurretiko zooma
+Zoom_Real=1\:1 zooma
+Zoom_Select=Zooma hautatutakoari

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/config/text_eu.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png	(revision 30230)
@@ -0,0 +1,409 @@
+‰PNG
+
+
+IHDRI2Ñ)sBIT|dˆ	pHYsÒÝ~ütEXtCreation Time09/02/04&!®! tEXtSoftwareMacromedia Fireworks MX»‘*$zprVWxœí•]’ã4Ç[Ñz°Õ‰G=ÞŒ3�{€¹“Ÿ¹Ž/Ã¨Ü…0ü»Ûa¡*¡(ž¨¢¶}÷§”_~ûùWú‰¾~(W<×ëÇ†wûXñ®Wë½Z¹^7<×m»®x×ÍÚ›•m[ñlëºZmµ²¾ãYßñ}§ ‚ ‚ÿ¹;x……Q„&­£V“ö ^PXK`c"ì�ÚÂWˆÊQ¬CÛ²°/ÁÛ{?Ÿ>çŽ»Œ5qØž¦Vþ5Z•‹x)�ÒâãÜLt3É­·ÚñRRmjµ)_¸ëÞ'Ù÷ÍïògbH¢~Æ¾MW™é(í@KóÕ:C¦ÃðÃ”ÍÖª&S~Åw1¹Äo…’hË_½V¶å�üã!�,6ý.*µUHÖ¶˜uŒËŸ1>Òé<Sïò5¬>S#uƒi~¡TÝÔ%‘ÖXT}âÚÈ:vÝü3¿d7µ®©gš²L²Ÿ¤¼P¾xÆ,˜\‡fCÜ
+ŒøVð?¬ÀNËYå#Ÿùÿ3¢oêÃ”ªÊ>W¬:¢ö*¦û|‹?É	m$—EEÛÃÁâ®y¹Ù¯FègÊ>kz�c×i2-Ó,ê�TÍ„‹,šü£Û¯ÊÀÐr÷?-2iº�†=þ+ßä×s^àÌR§òýäÜ�¹3_j¼Ø“µYþÍüÂÃ<Á©æWF4”û^˜Ç2‰”=þz‚Û-ÿ4|"C¥ô
+�§S»{éÓØ}Ÿ-Ù`ÿdòéM�Œ.^ô‹/~’.£Ž¶›-üF´Í­É¾r‡öõÍw¹ë€nüNó_Ï¶fœ*Œhàªû=ñ©È	ž)¨ŽU�8×}«„h«pdÄóÏâÀ¶•Mõ‹Êv©wåçO�‰Wú»
+þ3=¾ãþ†Ì°Þä3
+¿(÷møÛ~^)ß.R¶'mõZ-ûü¿®µÌò‰÷ÔË*~$MÝ4KÿEóy±óZžÕy~Ô4~ðè’–¡>MB¾÷ºg%r=ç^/¸¼é
+)Ü†*ÉsøŽãÓø¤×?ë^Mƒ.ØFï5=Kl÷¸ý �Š~TWõù\üôSa—°�¡‡Tû\AœæáÉÝñà.ó—*~úqï 	‘­é6®Cð�û_P’
+LZÛÿô|¬¦ž÷?Iû7éAAAAAAAAAAAAü¿ù©t{QÌ¸ÝeHmkBFúÞÊþ)¤3¡òmkTSxœí][WÛH¶ÖtO:�’tŸÕóp^Xë¬³ÎS÷H²|{ÄÛt¸-CH¿dÉOÈ¡;ÇË?v~Ãùgï]U²T*]12
++HVéRõí½¿}©’ÙÓ¸™µú;Ó™1ïÿz0�™£ÒdXUç'Ýw¦Ïß±ÍÛ½¦;+™õygoàÎÊú¼¿k»³ª9ïÛGSho´á.ý›÷ºÝ›Y£¿v¶W3mMj#í½ÖÓ&Ú9ìMµ³ùÞÁ>´ü
+ZÎ¡ÅÐ~‚Ö©ö'œq¦miÛpô>ÿ{g°u´+hÏûÍÃ!>lû€ž¹mOg¥ImÞhîaÿûûÐØÀagÞ°wé$»Emv‡6�.l¼¡ÍÎ¿Án‹>÷tR«Á6}:xÀÚ½é¬^™7
+::`wØì!ûì~l³·=„+æ© XWApŸÕo9P=å@_ó�îh Óí%
+²öŸévÙaã6Ë|Ü÷$0n'0n=Í¸õôvØ¸
+õ¸mû·é¬R™Û½Cì¦ÄN¯ÁZl¾íuùg¶M‡ØsŽX°r´OÚ)´]k“XåP‚¤§i4J
+Ò¨Æ@*™AõPÂdÀà¦Ñ�Á…[\ÐÈ…ðÁ?@Ï8@
+¢�©6âðlpx:pü’T©­çwPë)�TÖ¡EY†jƒÝ¸ ·ªáZ¹«Ô†ƒ5R
+öeH®}ög86Nt)¤{kn\ºt_†¤{ËË2¾µßË-ã
+>ämî%¬¿?ÃàOùÐŸñ¡/ ‰,vÃ7ÚŠÅ†Kí‰Ã­Y1GTæð8‹Œ‰àóÃa¯ˆáà@Hë@ö‚6|fž2S¥ñ¸uŽŒ9Œ£~™Lä/°!jO�Í&ÇfÔáŒ"¿žïûÂñYó©ÌGØ¿Ð.âÃ%n"F)5)º•=t(ë2>Æ�‹¸[,ÕL†LÉgF"ÞxªcDmÄp˜,ÉñéqÔhæä‰,‚ïCë�;`£¾Ü/—ÓŒø;>â·@×Ê±V%%—ü@œ«ÇK£5—<Z
+‚)îkä2t¡Þ¿Nñ¬V™!`%D^¤3Fqˆ&š,qr>Ðï 
+dàéÂß€�{èGä¹‡È)Å=#ÐoÇKÖ¼ä	�ß—T¤ÇõÁ0GJ��h¯:ÊnÏ˜®¥±•ì$8"àô™—Qàurî,áâZ)¼�+¼º¼”°x:Âa!·™„
+‚a‰JÂ§ØAœ˜ç;naÇ|ÛçRBE¦Ç·ýnÈã�}ŒI³€J—…’JfFuÂ},^Œ°R¾kÐ4'†L6“Ë‡©i˜*Ñ@ŒÌìVçEae“Á‰S0¿ò˜®²±Cü…<kžø<žS\™3ÿJcZf�ó/E²IÆÅw†®d\d B…%3:*ÍŒ´ß³(G*xÒ9(5>¤#ÈÈÃ#!î!Õðôý$Ähé68=õ"7Gû=¡hQc ÕHäz} é·Õ!‹aÄÌE©DXwD˜ÌtZä²: 2:‚lZTâÆ$:óIBˆiÒùrk)3==E8.Ô#HlîËÓ]T?ºžRû>ñ1¨ŠvöŽ”i¯õ.ÜNŽ'%~­X8£6É€Î&G§É‰Æ&Â�²°�Qž¤)–Ü
+¡(’‚tHt¸žœyú"#!fÈ³óêRaþ8D*ºŠT(ˆI[præ‚ßñ�úŠÿ?¨Ã^0šR´{–À¥ÕœÕÐT<Á™Ôu¤²¶5Ð¨H‡¼‚s2}æSì>gQþÙÔÀ-Eê‰ˆ­{±JZ|œ¼Õbô¨Iø”$O#Ü±Èˆ¦B~Æ`Î—`ØfÎùçŽ«¢ŽíëVj˜ž{‘ý'È˜ÂÔ¨–©ñ$.±9Ê¨ÖïcKh<¼§È%<¥Ô?©PŸÃ×ç¾Ùg*œ^ûÔ	ó4½{Áó•˜™\¿F¦ÚXd”%ÇÃ„–ØQÉvD�ˆ’á"¤t$-¦ëžî]S�ˆ3Wi¼˜(ÞŠ’¿áLn[òçfZ–Ì4HÞ!„†Jó„Vn0.¦ãv(|ÁyK
+4á	'M…çˆ]ŒÆu–D_y|S,
+tüúä%r‘;‘l–YS¦ßú$a‚‰tÆ«$ro›’,šý�Z/�”•oJ�ÒÜ�ü¤›$Ì‹È<""òO]ôZäåŠ�þ¡ÏÐtfh•/±²¢Ï™æBû(ù@\‹r®¹X^ÇõF*�²Åp¬
+ÎÉ`o%ˆº
+D–†¦žyìls>;„S…%\4"fþ'„š›ñÌ\Î;»’A¥XPéžë}Û‹IF£ÊÕ¨Ê\–-)è¦Xp�’ èw„P<A¹(U¥Y ”f-¿‡–J]¤à[�™‹@$1Âð!B.LÊÐ¢‘SU-LTT¸­@X$Ì(K,ñšªÂ£vè™Rœ%q]ê.ŠëB‡pÛéˆ+ÄŽÀRQmOÖ©&»N°¹’Êæ¤.µÑééUŠ�#7´bêbXÔ`	îôÙÂÜú‚ÍyCJVU®‹84ÎÉ÷}¦QÄŽO8N%­™£_M³D$MI¨Œ$š®ª’^NÆèà²x}1`H=Úü?t¥~¤[#Æn$+ÈH©ÆDeYF¾±oxú”f;± 4	ÍøËã¯äÍç�ôE/Ê)UÒÎ>tD´'v:bçXìû’
+uÃÂ$°^{Ü{FSåY3UuõöZCSÁ¾TÕQç“˜‹0é{ù¦�=¤X/­1Âñkª&­ž\†1•Ó×Ï$PêQÅ¡ÆôÂK¢.ÈÇœ‚nðéòx”«Êr-.Œ£ÒšrÑær>Ì•²È¥+vìp¤›„É�“c*Žh½å½y€º�+±·hQêIüì·ÒzØ‚‹´ •’A’8—RÏpÑ
+8e>£Wó™R�Ç2�ôŠÂ?_
+¶,ÁF¬_ŒBvÓ§mRÒ¾E¹lf}£…Ö1zpZÉiV†Ù-¾ÎßUÓÆ4�AÄÎq#XÄîñ˜Ð–ƒÄO\�E«¨¡¥e~OSïžùC3ÒJå-ÕkÁ*¥«Œ—Ô5p=üÊÀ¢>Éƒoÿ\sÐÓj™Áˆ¾aÞê6of-ÿêk—°´©š^Ò[Bä†ôNÊGB÷(²…£Ùbci1Šk±1´vIÁZý&�Òï³6ŠÉç-.ÀzÂ×ðc.)õÅßrÙ’¯/ÐÖöºò:2ò^1sê»ö½¤så9‘/‡£r�´ßÁ¨Å)­ö1@}°Ãn¾ûí¾4Öb/…éôoîk2DcÛÞa›~ûû9o!šð_Ë?)éòU
+S*Å}¦ñËësôÂÊãoÉ'°R!°,Ûäë2#-æÛ$±mzÂQ�s”âœ|¢t
+Qfåºg{X¦ÅPÂÐ»¾®h;ŠiË'2«Y‘-¼¬Coð.–Ê¹¼¾,ŽEÏ'¦r!¦<bêQ81ò½�åò€R?Š8žOLÕBLyÄÔ"DÆB‹ãGÇó‰©Vˆ)‹˜^p1íòwY>•ù½Õ.ÕG‰gäb½b!>åBlÐÜÞ•7;ãzà/=;“�æÐ¨P­y�=ZÇ'ZÝ'ga‹9[´äÖ¸VÏõ–V¨LBžkqü(âx>1M
+1åÉ°z‹‚¡²¯{1Ÿ¿í(¦-ŸÈÜ@�6<Å™hC­I28¥B¦˜Š"·%´çë�Û¦áƒ°Õ4ŸJ�OVàÓ€¾bÞ¦Rd½Üäz‰-CzWöšV€ãDŸ_3+ju(ÕPm|M?›µE«YwªÁV«¼hVäk+q—Vc.5äÉñøº¿;Ì¥¯}D* ½£©qZ P‹R`Œ‹NuÓq‚xãwÇ.4ëò•²ïòA«‚ú•uŸÞ¿ð´×�:è’5z7ŽîGÔñ8�—ø�U,œ®çjî7Éé
+�×«4N7Ý}VÐš�ý1zE/¶ÆRõ¦^µ*†dq%o´ÃqmT6Ö¼ÖÊÈœå@&îx8‡1]MV%Žç\6‰bDï0|Ö>&¹á°‚ó7ÊŽÊò9*'Æ‹á	I¿^G¾Ú>YßWMZÿ™B.€Ö9@¾¯ä€¶D©T*IÏ<�¨éµ°¢yN®R‘9Ü§ixaUj¬–ýpUÔ|ƒ—¹ÕÔfò€»¿jïeÓ·÷ÜHÞK‰c½T‡x&
+GËÄŸ(‡åaihDàX©„´Àq<Á%(»ZZ¶|ÐÝ_5°ð9œ£DÄeÑýáo*ªLwŸUAó2M›^ºÁs¹8çìKc#½(^¥r6wõ�U'p»´€œÖÍÑÚhè$:2õÒ(ýxölëUceÏÆÄr­r”=;“‘nDÙsøÆ†Ü£Ttô »¿j›Ã…¿ôVÁµvÈ_Fþ�LLf]wÊõ(—«”Í-î³Œjïn«y3Ûmù&+'Õ­)E»hÀïúê41ç5ñ&M”ùnÏ¾™5wvñ×‚pWsé­IÌ�ö Êc«¨ñkq‚¥¹sgý•çGà˜|×¾X<�/Ïao‚C¤È¯ûF«jeéš])‡^¦7aK3Üüš¿hzàŠ5:Î(iÆk¾àÖ;3xï—¾3÷iu×5M±Uà—ÞU†t{� €ÞBÙøUOµÿ‚~»šÎ~wØ¤÷½þàd�x�C×¯Áõºï§¤¹.J<âïàú~ä;<§;œñê‹ªÿ¾«¥+mz5gL£P]éë¹„Ý.ÿÞÖ+øiQ~¶<vù.ëô||ö!ÜëLùµO ·ÈõW’î=¤>Ótê�Mkú®}š|ÂkñÊ?ó~7ù‹8´&êÊ5ïÊ·ô6Îµvqæó€%íÓ÷LìiM~ök3°l­hüèš©ýûˆîá±1ýá€«BCªLgVá·-øi.õo¡³²uÈ(/Î”Çò
+öHÒÇm"QÔFñ]Öçd­WÞýK�+6èÛŒ® ‰Ž:_~Ââ[¢Ô²ø–p’G±¸Êë¡ïü’Ä	ÿúù;hU‹lcBÊKn#‡pý`Æ¾˜ç#`wAüu	Çü²<‚óØ«küI›€å”þŽþ…¶ZB÷E­'¢ÎÀÑkœ££‘ýOúÚxºTðtÁÓO<ý¨yz=ÌÓšù•1µU0uÁÔSLý¨™ZDÔ6<�¿'ÿ•ñ´Ì¸O<]ðtÁÓ�‹§EuºE0®¿2Ž–£àè‚£Ž.8úqqô÷áXšŸOË€èÞã¯Œ¹Í‚¹æ.˜»`îGÍÜ¢
+Ò�Æ§âˆ¾.ž®<]ðtÁÓO?žV°L±F¯àè‚£ÿ­9Ú(8ú^8šýá½ü]¬Ñ+xºàé‚§ž~Ø<]¬Ñ+˜º`ê‚©¦~èL]¬Ñ+xºàé‚§ž~Ø<]¬Ñ+8ºàè‚£Ž~¸]¬Ñ+˜»`î‚¹æ~lÌ]¬Ñ+xºàé‚§ž~<Ý„vä&Ÿ­y_5ÈxzñUÑïg-“³ãm]¶TGŠ„“uÜ]­küŒ¡7µ¥èøz ÏI+Qýç²/H]0¿%ñ¶ÿÜ(>¨ÆàÖÀŒá>4ð;²2ä^8?³Æ‰º·ÔjXEòá�]Ãj™5¹W¶²‡¯c›\Çüþ_Ž?Ÿyñ§ÃØò+‹>‹ún}ÑgTôiJ(GGŸò¹w{ÊOx¼±çKúxÆ*ˆç}Â}²¡[ð4Öt1¦-æá
+ž^=O’<}7<]*xúžxútmvªàé§œ§¹IyZ‡´ûâÞy¹ªÙ$ó²QðòWÍË;~®¥æeë�ó²•š—óTo¿�~•3r³£=^n^ÙbÝæ£†oE«âf5‹µzÒGÔípröX¹àä‚“C¬\.89'‡kÇ_7+¿ØÕ�Œý¥6?K¯û¾·hÑ¶jžNÏŠQV}76—52,§Šºš�öeÂ�îÙÃsPNb$5²R—fmÐòæcëôïû°þ%~K:�ÜhäC™ÛÍÊ¶eÎ¡.±'rl~,8?¿ä‹¹]UåÀ7ï–¨�ÐÓ1øøÏ4Â-ŸÜÅ_#ß&ÞA]îz¼sÒ¼dù£ü,hwÉ£$zi…¼m�øuõ5dÿ1F«Kò¿€ÏS>Rä´K†ÁGí_ÃŽ0Â’4æ
+Ž�FQñžóå{øüAFÆÇÁkN¹
+^õ-úõ�gSÏ®S>é…ïüôOYƒvÄ3ùþFÊÑObjîÁ»O"3ŽWwÿ ‰¿°eFá+_©ý¦ã¤'¾TâœæiÏh„Ÿ#çHjD†û“¾êÞÉ8.z¼NÕ¿
+4âŸ¶©Ä"ùIë$ägqøO`šœå’ý3–{–~IL…Y&öóÚcô„ÿëÝí	1ÏþNm—-Mo—Ñ6e—Š§dbí•K/&çÑ�öw9ÚÔ~ÆŸ\^VF6’‡f¼=5¾Ûq|Èåâò:ecQ-”9Ý—3$ÎŸ0ŽA�7†
+ôÞÓ}/¨
+iÿ#éþi®Z¢gÒ’õÅhe¸/·"õ$²î¡ÊPž‚œ?QÍ¥þ%&ã\óÕeÝq$¥‰KP-ŠÜF”‡8”á×¥¸õÛ	T¨æCëÈ&÷¢Ë¯øœ9Fdh][¤sg9b»58‚,wC¾.˜x\Pzp\°¯ã�7èy(Æ!Û»àqóÕ¼Ý@Û½ÁÍì¤»ƒûÛÌÇÌr™Å9C!6_ê=7ñÁRïû\xÛ¥ÞuUìöZëÐXþùÖ"?“–\St¾$m{Ún>8mÿ�ª"×„fä×ÿó0jë)—²×Âè:Œkš+_QU<»wÝ€+Îè\�ñ$]Q×¦W¥�ßùßsÍ•1›ä™®??Qåd¬U³¨Ê¬&c~x£wŠžèà¿æ¯Xä¶ø`ÝÂôêåW·X—êaû.ªE•¢¨RUŠû©R<.Ãï{˜xŒüŠçßÂSlñÊò6ôãVÏsð3úÆüÆØÊ!~ÁÖ¢w{üü\¦™„t³¸wÃÏ¯¥ÑO)ïÆ(~‹âß“¹¿–Ë:�”Í=‰õ yjü.Í•ë$—pwa¿ì›ãÑI˜1¯ÖW¾ õ
+W¤+(…!]Iz~/2ø«7Å$°øœuÚ\âË›Y¹øÃŠPšÄ$¨ó.\Eè¯ï5ñÎÞ§þ‡ß/ËŠ¼ù€‘ßT!cÇ­Õhü+­MójWt‡XPÈd9±ºîÅê¥'�¿Iòø'åÝ[Uø1¹PDñÿ:KD —ä—Z%þÙ[ÿð=ŒïgbåèŸÊ½èÀS>G~IkÏ½uêÁ£Ùå>"i¢§Áõ%Ìï°U[a¿S]q¦Ü#4²÷Å~jÜ7‚GoÅ„¸FÃ¤ÿe^«¨Se¼²<±ºcUØ�%p¯,¨–ÄKèç9­¼e-[ÞŠ¦¼LôLÖöL?r&ü¤–
+÷TŽ‚ï&¯ú�j�Y¼§ïŠ¾WcÜwÿp
+ôÌN×ÿsýuÜûŽ=üž"ý/äsv4¶îìì[<CÂÕ>»\;ýëÑG³ÕÅù}t�ò°	iãj\å5pu…òµÅ³ø›}Æm�<ü}åQã¾®È"£5bŒK6'»2ÙŒéØýÌå…ÇûÐdò’03#[0F>quòÁù„û�OÒØïCV?P]iÊcF9å{ŸÈÇ\¤õlQù¸cùTA*è�-Ú3èw…¢Õ2ùêû‰CåÑÞ™Dæû6ˆdÞÛÜÌ;ÝéÌuKôoÞbŸtøW¯Ï[=OrÏ(raß0„{,ç†Þ :Šlé7‡3}Þ4¦¸ÙmÑÆÞŸÎLø4˜ÎŒy«ß¤Sú}ÖÖÁÍ|pÒ¸™±'~ÑÉ�¶
+cxs3{Û;™Î*ú¼Ã·û7¸‰;{ÐõÁ^>Õ*¦S¯á°'­%Üe¾{Ò»™µöØë�n{ÝëRç{Û„k÷;ÝÃ¦lü#ŒÝ˜o÷ºlcÓf{‡mš´±á.8³‰´ñžúü—Þ¯Ð©lmöñ�mzxE»µ‡hýbÃ9e¶»ìã±e·G·³»ø©ká¦É6]›Ð>xG½éÚ6Ž¢3ØÇ:ƒ™X“”UõÚR±t~Ò¢îœìS_ýý!»7'ÍmÜì[73øÝŸÓÆeƒmtiÛžJQžÓ”u°Ý¥¶ýhÛ?hB�À»ïçîö;Pß7mÀQŸ
+Ždû,ó‚üÀj:6ìïêÍ=çNõzï±ó›w»û ûí›ÙÉa‹ÖS°Mpu©‰aÕ™ž”L¦'µ€šÔG5ÝÁ#âCiñ¡êºL�æÇ{0šcÖMÔ@¾#‡†°¶Àp3%ùÄsß#ØÚ¥·ð{Èf°‡é6o÷›7³öá	‚Ö>|G>™õŸë5«jkÃA@¦ÍèÆÐñ®k½·›ôÈvó
+c"üŸ:ð vówh}ÚÛ¤ÿ�”“t¸mkBSxœ]NË
+ƒ0Ì©ßÑOˆ–Úx¬ñLÚâƒjo*¼
+¹,ûïM´"ta™���eTHK>ƒ‡­ä(v+<E¬Á?˜‹Zƒwñ±L*
+«f¶Qf]úW(;i@^;Q‘
+VnJé@ÞÔÈ�pÒ“·í#ñPU‹Ä¥µðÄùxá‰T„Ê´÷t‰²Â_°GkÓRŠ¹úëê5£Xûªñ§‰…SÀp#léNÂaWBÿÄp«/¼×[0\8BdmkBTúÎÊþ†*˜xœí\-“ä¸²5,hjhh(*((h(*(hhj((h*hhèÿö”²]³{ïôÌ�èr¿È³±»Óíªš:™R*?µÄ—×mÛ†¦iLÌ€¹ü¹;¾1¦‚uÔ£šÒG?oÛ^`ËÃ	®€ò^zCÁË.ËÒ<F�å[Æ5oð½û…8ä44–ø§_VdÄ$áñÜ”‹ÈöM—‡UúÙ\Þ™á3¬þEM1eÿ*Ä£°˜šf%Lðšn./ŠÉe°(‡úã%˜msŸeóèÇ´Íð•®u<4ª
+”¨@ÿ¼è²fòºÀ3�ü™>®ˆ‚V;åôës¬¾ÿ	Çzll"Ë±,zâ¿/®ïZeC}„ðaÛ—²7”3a¾³eZòzÂçRû’nºBÿ˜ASš¬²cß,@?.¸È½àÔqa¶æciËï¼ùÚþÛ†û_¡!)â£ä¾€=M	µì^°‘cdC_¹š´_Hx%	'« €`€~3çÇ»V52•ðÚÏ²û=¶Zæ³õ!F–ìí¼‚n÷B7‰…¨Ó"�òÔõøÊ7.ØÓp¬[92¦¼’òöQr_@^Ç	`	3Ø$€B¾l…	š4V´qû¾­«C©4nò¡È0VÓ±¡íCâ�?Jîåê#Ûñ¥“j†‰$P¾:|} F|¥¥¸Ç÷"žÙj£ÙHÆKp[lÐ]¢m´~–ÝïQ\ºbÂ‚UÖ¨b¹{Oü~ÿ™vFÑ8²€(üSt©Øº!Ã&à3žö4$Ÿæ÷;¤¢u³ÇBkFG¯éu§ÑÛ+Žq<ð¨?=8ØÖu?b(+c˜ày!¤m¥ªËáùüÃëeÈí³×oû©|ÿ%TúôÙÓ+ÿzå`Å¨\ÎƒâÏ(€@B|y^ñ#¤þËðêÊv…¥z÷Õ�u«+ý}òÆ[í«¸žÒRÎ§‚$kÓë¾¾
+Éòø#iŠnn�KÓÅž\¤Ÿ1Ô‹!�a„E°h°ÿ:–Gà"û_�ÎÑzø>&ÿZ_õî«·]qnÀý9‚OÈ¾ˆa›Añ	ÏAŒtÍRÎƒMäõæÁ\£NVµßOæ�_ü¥zgY…}‰ñq�¹¸v‡·í@*–[�|ÀôéŸDóo×¡ªÕù3×�Çó‚míŽ™<þ±´]ÿ*/­�PB�° Òµ$™Ÿo«½ðÝ‚R×´°­úÿ§0GTN÷3J\ðÈß9KÔèt:þ{‰÷�?ÿ
+Uw;øÃGœ=ó?g`üñ¥=û6iE¿/åªÿ×D¿Î°[V½Ûãý¿[ÊJ»bÓ5§¹‚åì‡ãxŸÜ~Ô¿>½»@ÇÜžü0³1r’,£¹X!vø(¹/W1ìüÖ#Ñ%QüÇv½Øÿ3³é>Ôw†‰ýKuJÅ
+¢cœjðˆ1b‘@|<T#¸wžyVk^Šƒ7&·^¹�-“�‘œ}
+ŒY<xU
+y³øçû?ÅÍµ@?PÄGWá¶@B#Àb¹xó: sGô›¡¼”ŸÖ´TýƒRYS�Ï+‹g½«~]1é“Ÿâ1ÏñtËí×cî¥¬:sÛlôá¿ñf‰�ÿ¥?gk]ùú±ïœõòæ»+í96½êÿñË”ð�R
+/£-—�V�çÏ_pþd¼·«êCÐ3	|ºê%Ý1í9rq€ù¶é”~¼ýc:†Üzøî¨ÿw½…-/7Êà\÷þ-ÆÿG¦3c­q/ØF—Gý=,þwèÄgZ>~ÕÓC" y£š>¦,�Ö8ãMÈ5H,§ã^"å€˜°.”Bù‹áVTûwý·5î0{¾wgrè
+¶ÓVYÝ*çÇlÿãßö@,Ûºå�iÜõOiÌ÷øü¯¤o˜9žÞƒâ€ñN#]f¾ÃúH¤¥Üÿ»Ö�PœgZîu~Ø	ê�Ðtf.�V®f¿ÿ×ÀrZÖ[²‰�?ü*Œ†�êüÛ
+Xðëw¤Õp¾ªƒý.,þÀ¹SüúûSŽ. ëNB¾,ÅÎ•Å”ºóU¡øvQ�Ã¦"[g3�êe~„ÍSvÊOÑ¿ÆèåÏ|÷ž©Ì‰°o¯Â	°­šËZw
+8_ÇœÛ0{‚Çþøôoœ†²gùÆËµž3…°okê�"†ñ1#âQK¡MC™ô"t¼ïlØíŠ’+ÿ}[\qƒjªì†ÑôvpA‘²+'K¬sæÎ9}í3%.,.ÑgX}È?ç©kjµ#ºAs¡·fv‡õZÕ}"þÔ±ò
+è8{€ÍT°ˆ¾ŸÑŸ�ùç¹c74ÙNE±œÙ5qÅèIöì™Û‹ËÕ°uÄ¼y¯¸|ç…-ñøs~Ïuù:É‡	+½ïÃ1Ö�‡¤{;Xw¶Â`æÄÌ�Œ\@9XBŸäö ò0w×¡oÇ6»U:Œ‹›ÐœåüU�YëÌT{  Ê_)ó�¥±²G,`†�Ò&Ï©}	¨~<´øv{q{n5+h
+ñW÷#çŠÎn?,„c¯@¬Ía¶Õ½ÆO0˜0ü«¯#s9v°!F÷Ú•F€¥ÿ•�\_‹àÛ†B‹·hÅy�+=’À:þþ+Z7m¡ç	1ž�í=C™ƒŠ¹škœòõïöÅDð©ïôT2üvBìdA…NÔô”ßzxÍq¬ÁŽí`uptîwg‘#æÕÁ)K[Fª'Ôq£Ø7Óùcì¸ƒ1w{ën�]ó‚MÜ-Ô8ÞÞ¡)¿•òö–Üƒ%—SpŽ+FßÅãoÁê§ìçJ={SÈ¶ìBÁÀ["§å©¼½7·v£µJk6�Å¾�Éß!÷”&Êà²Úv*~ÀÊ-R^üÃ�N{zË…cÓ– ‘k‰�;Å¾›ÏŸ¢¦=ƒáæ¶JÿÌö5‚|þXþéH34Æyë5™ƒj_Šôß—øøgô?r¾:ôöjî”ÈÖý’êñÃD£C9ãMÏñB€°`c>Æ·V36}ˆÖ—�}{óØ�Y»šøw¬Þp²/ý)�Ù>’‘çlI‹Æ!	2ýòÉ�œÿõ—�ƒ2u­uÓÕÜ^=T.)Ùç¹Ièm8äÊÂ&ˆe‹L¼Þ~4nÎ*ÙóûŸN¨[;xÅ°‘é¿œþ¶­©
+x<ë¡í±¦)M…„ôø¼ÇZado®ñaO°ïg_+{åÜêv_4o‚�ß7ÓJc÷_ÿÂgA—ïŒðWw+7…PM`¡Ž˜s2bÛÁ'îTÊØ"ÜÌµsô¥NùüMÁÔžZc]ÿÈ¢êß¨¦¨¶�1çå!4ãÁÚÆ�ÃqìKƒ8gÒóÛóÒëÚûªØû%Ðþá1NÌ=÷·SÖË7-–EñÔëkí:`à#øPJ|¼ÿ³eWö?©iàÖfò‡Ëš ûz z‡Í~uþi Õ1§�çš7ò‡á�¾DÔöaz¿Å¶’êã¼˜e#òT¿ï{>ÿ=´Çj8!!	@§#†D ÿ÷K�~X7x3DA†» >ÍïwÈ+$xUÜ7JüGe©ðøÇUXây<óø‚7pòŒ�¡W<yüDÈþ„øÇcùü´/ÀÆE1þÂß·�-˜Gˆ�Wv	hþe™µÓ®(v§¿ÿÃüæã«f0ÐñI©~
+N~à4`Âá°µúDÁÆbÁ»Ø}mô£0ÿTË
+2€5G�ü7€��‚æÖ—CMQ£Ä~vÍATŠ²å<Á|ÈóÏ¿ÚÝ»u§µ^¶yÔ¯¢Ï×ÈÞ„ó�XÔßIÛ^¥FÖ G;£5˜(Ñ0JÓöŸÍr�êcÏn?ÀRƒêB—÷À·ãYN†v�.	ØÑ7*f†!ñ§9­˜)B‘þ”ÞÔêtömsÏŠÊÛF;Â¦“0°²ì&ïõ`–'EaÁkŽ:Ðñ¤Î¾mÞÃ`ÎNHµÖr8dÀ»ó" Nþ€EOü#Ý+uú…?e±.­YÎ¾ujüÑË»ÖMªÝØsÎ¶ntüåâBÂ´ÈM?ñÍèÓ>[«¼|ÿ£°e;m…�-Û¯‰›À"¶±6ì
+î©Î~ÚhLf‹3”ÑÚµ]‰¨"RÖÇ÷tÔÎ~g´\n£ò?þ´d{ŽÈsÀ4¼Sö®�hhq ZªžC9éñþ_µÓ–m|á:ëÎnØÿé�ÑåQmñu8öHN7þ&ži„Çó?{4ÉªCÌF½~w:ölÿÉÑ‡[r,Ï:Ûbó¼U¦h_Ãá°Ÿ£tõ>œ”Ïÿ\äÙhæ¨ëYìãS<à�®Ì†Aþâ_jwí±æØ<]ùbØ<¤´<>ÿ{:¨ÝRoø¡ o©÷ØýÂ!1�ByuzpÎ©tp�ëÈæ÷H4ŒcûøX¯¸~ÓÐåW´ýú¼Åsà‹{ ^cd˜®F©ãq$†ç€@€¯Çó7úœèÀ²Vº	€W€Ÿ&¾Î ¦	»ÝD#ŽønsÖÍè·©/fOÃÇ{�Ñ…kè.œ“­PõäËš>Ôû=&hïn§u«Th
+i.›ðoó÷<ÞÜržomú>Å›.É¸¥ŽvM}3®ÕãÀûNfn‰á†ÈúÆöññ?œÒ4Ô‹5«%Ýªù¶z;º$¦þûe}[í°Ç_tånƒ[¿€}|þ's¥£0çáëØ­
+Fœ�=¥âj˜%€:î!Ðí¡Qr¥ôãëßkíYêzÔÿšb½ÍmÛHÿŠl\]yŠ¬hÞ;ù|v`F”VTRá'ð·"m¢9Hî¯Ö;xE_gÞW·¼ÍÄSÎ žùëY;kÚ~ˆ�ç¿mó­Vi÷óæ.HsCjØcñ³=ÜÒ:-ñ]t‡Þ­zzF}Óãý_îx&è	oòãöNòpfŒ‹Gì�%	¸³S‚$°á!w+Ÿç3ê·�¯ÿ8l+@;æâ¹åêð$ f7÷Ù�\Ic?-·N‰ÂŸ¨éÔ?ª_
+Ð/ôüûoœo4†¼eÏ¶X2@ò|ý(*;pF¸Ì,÷V‘Ú§ÞÜ…ÓBîñþßgêó¢£]¡ÁªyÝ}Óƒ"÷§¶�‡w«G¯öåâå$o+ÇæôœÀlB—°QËãûŸÎ1'\ë×I0@ýÛÁà_kÜÏSÔŠ©¶îº7ÖV•ê9Þ—ZÖÈò#úÿó)�}ºµíj¤
+¬zt�Î‡/Ã7^Fw:Ï:s˜L1ŸR0&ðxÿ—.+"þ%º}Ye™Ñrÿ†Bö—Ln«¬öæêvoµO‡èGCË¤ÇíðM4þxºq0;iÀ¿##0×ômævtu·é6Cà:»�ýE¶ßÃâïÁW�âYoøú*ô^‡õLÿbEÐÙ�Æ?¬©7ŸÖÊ°±óÙ9î`@
+å‚Ããù£+GµŽØC×B�áhÝYñ(\zY1lkmËñÿMZ¯ãàj7?âþC˜ô+_ò¾šîx=g8îGB· E¸ýµ3ýê »ÃTZoY£XÝéý¥ïgôg€¤6îlèÆzø1 ­kÏüwsExÝý9Ÿz^q$æL“®aèåÜ/�@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ ÁÿüE£ÕÛÕ]Fo(?mkBTúÎÊþœ€ xœí|TUYšn¿é·fzÞêéÕ=ýÞê5ë½5oz^WW•¥¥eFDŒf0çœ°Å¬˜1 ˜³¥˜PÀ,Ä²$/9ÃåÞû½ï“o@ª×šµ^8Õ_Å=gŸ³Ã¿ÿüï8ýc¶´ša±f3]cK
+ÌtŸ·¢?éö_‹Å">+<oïKíÛÒ;„N¥gÌâ[­FhóJ³M[yLš÷Ù‚ÙÑ3Ò]‹I|·öºÃñÛ´³~Öº�EìÃ1(KÓ¾µt4.³ÙvÜŸ±Xø²YØ^à{Â"®Û"ÝaâíxñÝü¶Yþm¶¡Ÿãñ	k¡¬™ý¶Â¾´ð~­©Ø³EÚfm,¶»ËÁ[÷g±8^K-ýú*ó2·ù¬ã¾?·�ì_³ÝÓŸßG¼?�êòÊ±]`¶H{Cäu‹‘ï‹YÜ+\6ˆ2Ã,®m›}YdÔ¬¯}ùb�÷­ß'ÍAƒÍ¼4(ð¶5Y¯U»ùNä›ö5U÷Õž5²ÿüç®ÙöÕ0ƒó»½Ö²Œ—×Ì¬è
+‰nœ€ZÙi\Ÿç�üú‰|«ööy@ÙÖmìýþl—*}È Õd_¶«ûk·<àëkr¸?µke¿/ëvöÇ/Œ§éu*Šg-@å¥(˜Êh1”ÀÔP/¶c<o‚,”!Šú_º÷ùõ«ª®Ç³ÄW8zâ4¶îØƒ°ð#ˆ½}Ÿå6s`G÷6oÛ‹Ð½²m76o
+ÅÆÍ;±iëN¬Û¸ƒ_“žÍÏ/ vûñòUŠÃ¹[¯K~AÂÂ"-í�Ü¦¤ävíÞÏûÜµ;ë7í ¾¶nÃ†Í;°|å:œ¿xFc+oŸ™“‹¡aØ²}vÓ3‡ŽáÆÍ8¼yóµ5uŸ]5¼z•ŒÇQWßi½íÓÒRö8ÂÇuÿ~¼Ýõk›þšª«�ç7i?ÿ5²=†¢bÿa”®Å‡±SQû0^nmý*sk3a—Ÿë‹ÁÓ„ç˜2}>Ü½†Ã•úéï9ýÜ†¢—³'FŒžˆÛwâmžY»a¾üº=ã‡é³bñâU˜;,^�Ùó–aÉ²`|úTÆÛ&$¾Ä÷=\±pqššŒ6k`�'â' ·³._‰–¯½}—A×<Ñ­—FŒ™„ààMX½.AÁ‰þ;±lÙjœˆ<‹ææÞ>îÎ}>§~ƒáæ1C†�Á ¡cà=x$¦ÎX€k×cÐÚÚ*öíx}Ø¸Ø~îÔÙ™öpªpÍ¤µgÔ:$5í=¼‡ŒÂWßöDèîp‰*6ïÔüVéa	J·íBV?ovìEsV.¿Öøü>ø Àg,š^¼Tž7¶ )9e§O£tý6³?V—][Néãfì}8¹xó5‰Ž¹‡w9È¤¾Þ¾KÇésWáÜo¾ïîÂù]
+[¶…âëo{cîÂPXTŒÆ¦fâ�zŽ
+
+Mü·Ôoâ‹Wpé?ýÜ‡âÎ]Û½¤–ý<Ix·Ã}[¾–ž™¯A£Ð«ï@\ŒŠá|ÞÜÒLØB47rº·´4Ëó»ÿà\©O7O„8Š¢â¤Ñ
+?|}ú
+Ä÷ÝÜ°yëÒmË~ƒ¡ŒöË"tìâ‚}û�X/¡ðÓ¢Ø¸©oßÃwôdôèãMr*Bla§ißˆv½Y¶•-¨{”€’Ö *òG¹yk‰AþûãìÅÈvsM5Þ¼EõS¼t
+¦ÌBŽÓ´dg‹Ý
+6#T<&é–4’ƒ¼G`À Hy�jwîOŸ½€“ëP¸zú"ùuš<÷Í[wãëN}°pÉ
+TW×Ú}V"é‹—É0p:÷ô Y±uµõ�_d÷ÿÀ3Úçý©Ïk×ãäkÙð<½]Ñ>z`·O5<xø˜ä™Ïõë75÷¢oÄ¡½çëN½qâä9«qkåÑ«W¯‰ŸÇÐ¾óÆÔ©i�µhî[CjÚ[ø�ž‚NžØ._·ÇóÜƒ“ì6Ñ`h%ý‘?y>ÎXÓÇ¾*åÛö ÇË-Y™¼MËÇ�È÷ŸN8%+7¢ê|êãÀT^‰²}GQw_X“)ÐãÏ¹óñ¿¾ê‚KW”µÑÚÚÂ>9s.
+_ü[„í?$_aôïØ‡øñ‡d#Ø÷
+’’^ÝFÃ…hÑ›dÍå«Ñ¶�Äç%`ôgüY5¶ôÌlxý�ˆn7coÛ{�?~Fïðáï¹téŠÍýƒG"I—à2âí»÷òü­ÇsõZßG‡ø /¯ÀN[ÒÞ¼ãôïå<P‘ÒÕ6€ˆï+Ñ“ÖÚ:”ï;„‚acQ²yÊB#PŠü€i¨ †�‘äl¡ÿdv…¡áA[vÁ@vƒ†'	¨¿ûˆÿmma­­
+Ü¾û]º¹’~ŸCY…f|Öô/.þˆ{$·+hoI°yk(¾éäÌé_.^WÛÐêy¾"»�Éí„Œv£ý§!/¿ÈÎÊ)Ï$>O‚ÑåÇK×äkýG“ìŒ˜Ø;ö–^OŸ&r[Æ�è¦Ð_™_~A!Í­ƒ;Î«ö‡z
+Lä;„’líÝw¼Év`{éFÌm›9ª�Ù¬~$ÿýù/€uüÇ"þ‡÷i|ý–’�¨8~dOå�›ŠÆ§ÏÐ”‘‰Â‘Q/�ÉiøH²¾æô�¨?Ãž0T^�Fk]0jcâÐ Éj³3R ±±	ó­àòûØñ3šy+ã´ŠX�:„èÿUG'®X#Û[Zß_Ko¢›÷ Ñ|téá†ÈSì¾W‚ÄÉèK6è…‹Wåké
+ÿÇ´ƒÿ™íÍøŸÉÿKQ}•XCyy9fÎY‚N]]±/üˆ<nµ./%Ý?ŽønþÂ•˜97�hê…5ë¶Øð“˜á7j2z:y‘uÔfM¤ÿ3ž7IûQòåÍ&”>�Òà²çÒ`ÌÌAcÊŒŸ†ê—y›OQ²~3ŒYÙ(\²µ÷î ‰Ú˜*ªP{9Ãýa¬ª„ê¥šQæäæcÈðq|&Ñsê1)‹’É¢&…¿MäSíôÿÒ TUÖ8\L–»“þ_Kë6wÁròÜ0Ô7€ø9Çª¥–þÎdwœ¿ ðezFÙ£ˆ¶‹þ¸ý7Làÿ¨«Vs*«ªÉ_	Âwß÷#>Uëi@¢ÿ�›·IÞx!áùÆÇÏò¾Ç�ü**úèpÎœþ"ÿï
+;¬z¯­þ·@ÚsâE’­ôî:š?cî|5�ó½•'ÎàÓ†-h*(@áœe(YºU§.¢š|ßÿY¨Š½§ôÀ_lcAB'·nÝçö8óÝÞ§gÉc³�chmF9ÞDcÜ²MÐÿÌçnâ¶¾²?¬åÆÓg/áì>×¢c¸Nv÷ôÃ·]úb·lOHëhKÿsâžgÀÆêI2¤·Ë`ÄpûŸhïF{à¢F¾‹ëHü2o¡@ÿHÑTÍšcèžä3’¯ÕØˆg4�þd+÷÷öCBB¢jÜZ�ø¿{oOâÿãŽhb|&±/9Î[R€â µ0�o[8g)È’¡¹¥«6½ÏÀ˜Ÿ�<²3J‚‚QsíŠ¦Ì�!â0,ê0¨EŽ�.EE£W/"øC^¾j]¬ãfyhâcÜþßƒ¿’ÿ·œÆÒj6)7T²L‚Ä—IèKô¿rM°ûØžéÜ­?¼†ŒFrJšêQ¥&3˜üWÓŸë¢¿3³ÿbnÉ}*9eÜ�üwõF~§~¼xY¼g’†ùu“æ�þïG²â©ô6Ù^fþØÒåk°hi0ÿ]D¶8³ëX<áÙÛŽ@æòÿö†rØNŠÓZ äŸÌ¤¿«®Æ¢tåz�™„úO4íë3ÒQ²}Luµ\VÉ÷®¾‹Ì.N(;z²æ²Xdº[Ûå§Ï]¢½9€Ûa†²r8…ŸùÈ4²!$„Ñ¿–‘þwd#H4yöâ%úö‚3g_öqÂ3²Ç Ó÷.
+^¯zF¡ÿs3†ó?ªä?Ñß›ù}àÖíûÇ-õËü?&ûÝø’yE»N~iò•ý'ÌDé>1–Î€Å ‡ù�—}8f»-\¼’ÇŸ®FCCƒ¼jHM}ËùŸéŠ�»ÃTëig�$v‘ÖÚhDCâ+Tœ<ÃÁ£dœ‚¹¡­¤Ï‰¿ën	ó6’�h®­EýÓÒ“È6¸dC{i[ËãˆƒÇI÷Ç„)sQQYåxU6Žu!dK(:|çŒiäÏ'&&áÝûò{2ð:õR^¿Ay…âS$<gÒ7§Eú3™·vÃv¾öžÞ#‰ÖÉbK…�_pú_º¬òÿDûÏÙuù¢‡y¼:ñ¹€�'P¿ihå±_á÷¸ÿ?ŒÛÖ>g%­çôÙKI‡õ&=ñØîüoÆÜ¡¾ãú�[òµã¤'˜ý9ˆ|36O{�Êìfÿ‘Œ
+Ý®¹gíÿ	×T¶ak+ñó-²áo£&þÞ~ñ5É÷
+¨}•„ÔÿükBÃH?”àíoÿŒŠ°hH{�’y‹aáqiAÖËÖw*ÍŠ(öNôÿŽ|¿€I³QU]ƒ¶Á~ž�Ùÿ]{{sÌkð(1®Ê�Ùgýqåê
+¹=ãg÷Á8{î¢|�é„Á¤W»/’ŒµŽQ<M|N¶ž¢oªãýÝiÏxx
+GòÅ<¼|¹~îÝwÆŒ�ˆÂÂR¹ý£GO…X6É€s?
+òšÅ'YÜkÙý_ü¹ßGf“¢¿$;ÇD:mÍú­êã�Ü¼Bù~NÎx
+Ã}Ð8‘ÕkËà
+‹ÿOö$9aíÿ«õ¨6þ'˜ÚT]¿‰Â±SPN¾~®Û Áïß�‚q3PLövñš
+È!ß¢,ü ]ß�²MÛa}0“_fa<&1çm½¶‡Ž£kOwÎÿ•¢Ü³¾6ååU´®Q¦Š„lÙ…]\0vü,8‰sç/Gq¿îØ‰ÓÈý ØŒ—�Uò_x3°~ãV²‘½9
+KkÂà)ÙWÞ¾<>-çÿ!c‰žÃ±1d®ßŒÅ•ë7ˆ?cIND#.î.ê¥üûÏƒl\¯‘˜8Ûv…cÕê¸’,êð�vî‰�sƒŠnèSYYIza®eŠ-ÆŒ£9wëå‰ƒ‡NÙ]5ÉþcòÍšþš:a…•8�Y’-¨ˆ8Ž’YKQyôªAÉ‚@”;	Ã¦(^Œ
+ZËÒ5ÉN\‡Öâreì’0[ø^à—¤ ƒá�Éò¿mú3~i@È¶P6Adë™ÄøÅâÿ/;ôÄâ¥+Ñ,ÚÿÖ ­é³ç/áB6ø™³5×“SR‰wGs9¹dÙj—�€É¦»­ã<þK>ø=2[
+÷Èþc>ÎàaÄ³~$#¼¹M>jì4zþ©ƒñ
+cËÉÍã>*[+U>–sêÔ¥fÎ	$ýY­™ÿó%ú3;aoøa¨Á&ÏÌx*-^nH|‰Òu›Pu�PŸðœËƒ2ò¡[ˆ›’^Ã@t©8}^ÃÝ’lKi\Ú>Ùœºtw#Þ�AzÚ±þgPM6Æœ?àË¯{’¾˜)óË–m‚ý?oÑr»þ¿z-Yþ‡å~Îžå¿E™/ó¯z‘,s'ð,QÉg%¾¤g˜ý§òÿ3Dú÷éëåÐÿSûw‰þ.$w
+óÇòÃÓû¶‹3Ù¬ä³6J{VY+µŸÃl6f%Î¨Ìç*ég7v#»‚ÙÖÀä¿Àÿždÿ´Z“öÕT‘,k�í"êi>…c'¡…öfí­[¨ˆ<ƒ¢‹Ð"æ-’ö—}~öo«âŠ°ÿÀQ.ÿ}GMDA¡uVë‡×ÔÖðucóe¶ž”/åñÿo�ho,SéûñŸ/’àâAößy‰ÿ•zŒìÌÈãÂƒ1gþ2ÔÔ¹¤ÄçÏÑ‡ì¼3çUþŸ”ÿé«öÿÃýû�ù0p$nÝyˆØØÛèN2Ù…ç!ï‹cQbZò
+Ð4Ön
+…÷°QÈ–òh*(È/Àp’
+�{¸cÓ!­­šû©bü—Åÿvï=hó|{ éÑTŸ½ŒæÜ¨ö
+d6¤¼E¦“;
+ç"—ìÃ�ÃøD~xÉæíâÒ‹uyBA° ùñÊ»/\ºÆ}ÆsYÙ9âœíÓ®ªºŠ|�`Ú/d//æñpýç/ü�dˆ”°¿·%úŸ’ô¿<¡Ï“§/àûžýyl=6NàëD²ÿú�ž¾ Žÿg°üïh¾Wbâ>ÿgôwuâ¿1ŒŸ1qê<|ó]ò?¶�,WçþMòx˜½ãã;+×nvøîààÍèÐÑ‰äßªø—ð|šèÿ3½¦ŽÿÿÔ:¦’­iÿþ
+rûôGŽ§ª£o£ˆlÁ�KV¡‰|.–'4’ý^0}ªO)9L9fcÖTÖÊýG]¹Áy‹ÅÆÙXÛ[5Ù—®âôŸ1w‰Lÿ-bþoqàJjS+¾Ã~�ÕsËq‚“*ûO�°þlÿ#~búrö¼@’9uHJJ†;ÑMmÿ¿WÇÛCÿ{�ùžböÿå(ÁÿÛAþ8‹=â/ç³-rìIXƒwï2HoÂ¾ˆC¨%ýWn(ã¹ù´UU(«¨Æ¦�Ýü=£¦£°¨DÓï›·ÿ÷ þß³O«ÿ…þÚÞfÒMUQ7PH´.Y„æwé¨ºy•ûÂ°zŠÉî0Õ7Èí�ŸÊðaÄ84<|ÈvŸ´Íá°˜6Óm}\‡’
+¦ø°öê“ÿ3ú3ù?eæÿ‡â+âÿEDIÿ;ª¡³•ÿJ\AŠ�<‹îÔ£íÙ—‘ArÉÓÛ�ì?Å�TçcoÝms
+hâÿ¢y™’ŸÑ±³+‚×‡Èö¬˜®proÒKþ31ŽptÀŒ?“Ó{,ý=d¸?<h/º{�ÀE•ŒbÀìÿc¦òø«‰³·¾mAsfò‰ßëcãd¹ÝD~ç§à�(
+Z‹,�Á(ß³Ÿ_7fçòœOÝ³ç( qUGÇÊ<oRÅFÕ´aöéŸqä{Àµë±mŽE­ÿÕôgüÿ
+ñ?“eåâüìÓ_à5ýÍ6kQYYò«˜_2kÞ2£d~ýÅKJþ�ÙÞäÿ9¹´Oÿ?xOú(�ÿIôg½î
+Gçnn<†“WP$ŽIÏæ­{áJ>fÄ�ã8~ü,Ž�qè=‰ðˆ£ü÷é30qÒÎã+ˆ.MM-òóLÿûŠúß:ÿÛž=ÐJ6yÑì%¨‹¨\+«D!ÙGdƒÖlFñòuhÎúSc5Š–®@ÅÑ³h!¹U0m6;Ã`c“&HäJ¸º¦cÉ·íø½+6‡„Êµlöø¿¦¦šè/èÿi³Uöß–Ý<ÿ?O•ÿwdÿIô—â?Ò>±Î…?yžûh^CÆmFs^¿w_ñó¤ø?³ÿnµ+ÿ/Ömøâ¢*�ÌžeqÁn4§óªü¶—‡ùùcÖœ%0¥ZEûûzë¶½<:iÚ\U>�Éÿtâ¡þ't�ÖþsœS×BYØâå¥ÿV3¡P´rªÏGÁ°;¥?¬‘‡V²~+*#ÏÃø±Ù=ÝPyFÈ¯sÐ¬µé™·gß!ž÷ë?•çA�$ÿýg’þWü¿Ýäÿ‰ö¿ÌÿöçÅb;Ìæ>#Çÿ¬ë„„•µäcÎâ: Ÿ·}ô8QnÅí¿ÁdÿõÒNùOþŸÛÒÃ¥ÈhëgzëÛï\0~òÔÖ)õk¯’RxÍèQU]„ƒmÍs†,‡á;jRR”ú9Vÿ)ù¡»ÿ6û¿æn<ÙýÏÅ_‘I�M^€ÿÉ¨<uŸ‚6àÓ^ò?>•¢îj4
+¦ÎAé¢ÈŸ6�¢mcVÉ~õÞc²Ôƒü¢.Ý]ñàáñ¾SÆQMþX`Ð:.ÿ&N—y"„ÇzóØ@Yy™Êm4Ëò]òªŸ’_Ïì¿È3çUý¨sJŸç.Dñ˜ ë?Nÿ‡ñŠ�‘™I2Aðcbúkõ‰2G–ÿëGú¿?Éÿ¨KZ>gû¡§ó@tííÁcÑ\¾ÃíE¦#Õ`¯.êå«dÒ/CÈÎ÷&Ù¦ä™üÁó¿\OªÞ"æäÌøœhxõšlú(˜›…˜Xmb2>®@Ñ„©(Y¾%kCÐò±ùc'‘.X�Ò�ÛQ¸ùÃÆ¡pÆB¹7V\h‘“L
+0Ù»yË.òázñgY™RÛ•oVQU‰™ó–ðÚ×`ò‡¤šr&ûXýÇÜ�¨”ü?~�í­�Hû¶¯*ÿ#Õ"hi&îqò¥XÎµs7Wî·Ç«â+é™<×Ð›è¦Ž½Û‚ÿ}øˆÛ¹nžÃq1J[ÿW\\ŒÒ�Ì†_µfé5aÌ«7lƒïÈ‰¨¬n;.Î ®®Si­YLiñ²•\¯2È&[mlÀLk?pLûßìŸ�5&'Á°÷ LäUœ>‡"²ùK—o@�Ï4“Œª:wÅ«7‘ÜßFí 4h#
+fÎG®û@Ô«d¦E<3&ÿVm¼¢¢bŒ&ùß¡³V’?›W è0æ;æ~(äu¾Ýº»“ß=’×_KÀêá¿ìÐóÉþ«'¿šÙ…,NÞjj…‘l„c«LSËur¤È»µFÊ}ÿ˜|w®çï?TòßBýÇ(^W}ó.·EX
+8Ã–#—MFU,†ÅÿX
+ãçµüÏàôÙ‹ÜGwvD:;ƒç†óÇÜ…+ÐbjÑ´µwF�Á¡#'ñ]Wò)äõa¹PÁÿóÀ¶ûøØXÍp¯SoFKs¯YoêiïN_‚b’³ev�¯ÿ	Uq÷�ö‹ÿŠ/4åæ¡dÅdvíƒâ%ÁÈ¥k…3à#ÙˆRÌß"Öý´uö69õ-í÷	dÇôáþÎ†��dçž"›v<ŽÀ—_u…ñá“„—šç‚VmÄï¿èÀýkæu�«èÿëxmáº–!ÖwÅ?J ùáŒcÇ•|‰ÍÙù?äÿÐzÍ'|ñoqCeç¿%»ŠÉTÆ³ÃGMäý-X„‹—ó:ô©3çaÓ–�¨ªÎöÜ¼‡¯;öâ}Ÿ=+ØCêók…d+±üÞÿg'„’MHLÄŸþµ#Ž�8Û&mÔðäés²œñUÇî$“›4)ù5étîê7wL™¾Óf.ÄD²'�&O›�Ñã¦´ùÞ&ÒßÅ>` Ý[I~¬¥µ‘8Ù„’�{�òwÿ„‚ÑSÐj¨@ña	Ùgå.¡xÎb4ñ=hel+Lb.Èžm&]ûð!GŽŸÄ,ò9xùÁ™xÕÕk¦M_Ä÷wFF–Í³×oÄaùÊ
+´Þ¡X·qÖ’ý¹vã6ž_[¼	C¶ós!Œ¨…üÜ³­¤~­ëËÄ?ä÷§¦¾Ãvòc¤ú4ådgF<†äSmß†m»ördïÞv�|™]d·�ä|Ì ;'[·ïÃ†Í»øù-@ªïúi!yÁj¡Øx‰ÄÓ„gØ±3\7äñiÇ¬û>|äÉÉ]xòä™p�Æyàð	ì�ÀþýG±sWvï;€ôÿ}aGxÎƒåOÛ³‘äù�õ·ïãý¿~ƒ�ë6
+ã –."þJùÙß¡hq°ÐØ(æ2d™Ò"æ~DûOÊØÔwñžäßM$—ØY½÷$¿²híaý€Ye×µì�ÿUþû¶y�õ3¶ñ‚vôìðš]ZZ§å¬Ö¦½ýÿ´qŠ•<Go„¹§› ÇŒ…EÈu€´¿ÿo(s‘æºä“}™ü³ÿ‚òc'4Cbþ’�¥3`Ÿ)ÊíÚœ�Y›JZ·qkõŒZà[ù(Bêš‰nÚ:¿¶Æ¬–/J‡êw)×lÁj­ÚîÍ¶Ÿvî³pÈ›çýÕçtZ
+ó‘Kú­ò‚³hÎÎFú7=�öë/P-žc2–”"—ì–”þêŸ¾{¶Èü&ŸþUí{œk‘×ÞluÕÑÞ×Æ’ì·‘ÚÙÖžHt1ÿ
+¼eä\‡ø­qøPÎP«â_°‘,c–ª&íƒ"/GD3O¾MLPrÏ
+Ô%'ãÍïþéÿã/¨�â_uOŸ!ý¿ÿé¿ÿ+ê^q�¦¤4¼ÿÃ_ÉS£ óÌâþ³HýIß½�ÖDMUßÖ2V~ÞîB¨yÕöì»VÆ«žVíM‹êžÌj6úÉÚO°ßÖkhgMí>÷¹÷¶Ë¤Ïìo‹pÞÓ$Ë|šÈiÎjÍjÎ\Ä›_ý™_~ÇãºªnDãÍoþˆL²7[ÄºmVüîFÅ	!^%ë}‹¢KÔ2êsst´Fí‘½Ž¾%a÷^Û Ý_¶2GéCý^Çcùi´Ôø¡6ãúä“]{ËÖþ’ê¿ØyÝwùY=\`,þÄïÅë_þ¹=]yÍƒòSh_ü²{³kÂ¨ŽüÅäW˜+Ê!s—6¤þ™•û�ÛÌììk}}�æ~©Á€ƒ‡N <â˜M}óeïÜ{€/[ž�u½/Ç•¢câ°sw8?û+�‰œ‘ääT\#ß!úæ-~Æ\\*Ì?ˆôDÎHïc1…¸[w‘••µ¼a�™�ƒ+×bø™¼ÄÄ—â³Âý¬ì\Ü¸‹k×n"Óê¬‹W°Ã¤W)6t)+¯äµ„ì¼q{ éu*®GÇâáÃÇh5·ÚÜg¹ãòò
+ÍµwïÓ5Ò¸µ¦E—"íç¿AžÏ˜ª+ù�Ò�P¼þ§Aùâ&1ÏRF>à›_ü¹¾ã`ªb÷e'"I/4‘>ýd†Z6›ec,…|+ï¡£Ð¹{?L˜�bq¿	c­àßièÜÕßwë�é3ir¬>ÇwÄ$î¿ÖÐ˜C÷D`äèIš¹=y’Èã®,?¼nÃvy,þÁÎÎuîÞ�»õÃ®Ð0ÍsÌó?SÃaÐØÜw�áÚ˜¼,gÔ¡³ºõê�Y³¤ú¡¿‘çx­¸ßÈIèO~ø-Õ™qgœEþò
+òa­!úÆmt¥µY¿~»Í={°vÃôrò†sß�˜8©oÓ5÷¯\½N~æ5�aß#‘mñ|ž©©‘øx!^ÿìQ4k!ùüÂýÒe«‘ú÷¿EÑì…´Q„µ)]µ‘Úý
+SÈ¨, zžËj³˜ûUÛCfÅœ0yÆL‡ÁP‰ÚÚ:Z3öN¡íµk±èJtýæ=Þgg¡wßÁ8~B©-a1N–ÿ¦“’ˆ_Ùù¦‘c´ôgßbî7‘çYª*+åúYFÿEK‚0wÁ2|údà}«eûÊà�¼¶ÖØª:Oæ—6¡¿†þÊJî?Œ¡¾þ<7TÉÏ2(µ…ÇH'²ò|Ú¿£ÆNÇò å¬	£ÿÌ9K‰þ›lè¹�üt7Oó4™Œ6÷­ayÐLž>9y6|<fÏ
+DcƒRËz"ò4ŽÓÖ
+³x€âŸC°Øè?•"ìT$‘o÷iµ8ÞÚzäKôþ%[…¸�‰æZ0‹®ý%�A*Ù.~›HuæS]—SRlàß28{Þ6Ê`ó–ÝüL”ð
+`öüðC�Â#ÕÕ5BŽŽö;;G²vãvŒ›0SóŽCGNÃ…ÖïîƒGšëŒþËˆc'LÇ�—®“\êf¤q¯ÝÂû6µç‰YÌÔÃ{$ŽEžÕ\ú:ÉiyòÒÓ³5w��<ËÏ˜±¼±ß˜É$‹¶ÉÏ±š­9s@Ð*m�WCC-¦ÏZŠiÄ‡£ÇLãgÄ?,:uúþ·Sö”¿}ÃàÖí»ˆ�ÓžWåçÂDÓÂ,ú.’ic*-AÁè©H!9P"Ð›�	MïÒ—öÅ¯P%ÆÑ[Ê
+ÈàGíþe!ûøÙ!aþfÅTùïÒRßóüöƒx-m$Xµ&„h¾Æá]L>.X¼R¾ÏèÏr›¬&�É=¶N¬Ž\
+¬žkâ”y<?tùZŒ|½¥¥	«×oáßï`u3,?qÄ‚×†`<Ñ_¨1Pì®&Nÿ8)�WdÆ	’ÿß÷rÇ¶?Ž�Õ<Çä?Û‡¬”é¨Uþ¢‰dåœy�X¹ZËÿ¹dgy‰¨ËÑ|n7njéfØM�&äÜÄ?áuö¾o £¿âµJZ:,¤gI¤ü§_¡lŸp†ˆ�ÏøÓ×xóÛß£ö–0.éî,·AHùÇß¡V:ã*’\ñ�•³€ìZý=|ìêRÛwîãºÝ$Êài3–r½,Auu5’ü8E{pßþ£ü\ÿø©"ýe?XØ'l]XíUžÈCì=‹Wcþâå(.ýÄ¿Ý£†Õk6cÂ¤Ù6cbçxû"òÔy›{,Ìr/oÓÓÉŽm€z¯GÒÞ`çXýÇºõ;4Ï±ó¼ì{UAÁZú³œ!;“térFûOÇŽ]ûí®“X®dê´ùüoöý±î½<QZª®©°õ½öî?(‘INÏ~–I`ÄŸÖmÅ›?}…
+‘çëbïãÝ?ÿééˆ1žÞHþáû?|‰�¤[¥îLrÄ6±hI0†úà~üS~,!:(ºŠÙöÝzº“ý~qw ·ó ²]®Ë÷««jxÝ“sïÓ3y�Ôÿiêi’ÝýùäÇ=zšÞå‰4Ñb9¯EKWaþÂå0Ðú(ß€å—ýˆO33? T%?Ù÷%Ø9ž�»#ð‘ö{}ƒRûqÃ}' 3#‡ï9µÈôûÞÄ‘cgà9h$2³€ÉÿÙsléâÔ9ž:ÜŸ×Nsém“ÿ¬]ê›tþ]VÁt–ö|ÑÝû
+þ7„Zm>r³EÔŠþ®½‹\¿TÇ	5e‡O å~ƒ,g4¿t^Õ�Q¨¼,ÕJJV…:ªðfAáGŒŸ8î|ynªÔ Øÿ¬¾gÍºí¼6ØÝË�?¬ÑÔ¶±ó‚É9x8’ÿ˜0£ÆMÖÌó&í�a#Æó3_7ï’sëŒþëÈ^`¶“!GÅóÊ¬ß´ÝHw²Ü;s$ó9ùŒãºÜÅm0ŸË÷˜Þïîä‰!>c¹,×ØÿÄÿÃÈ6ÌËË#;Öaì[<âýç�Xî_‚Æ¦&º¶œì�õä•p;päØ©ªïÙ6Go?>'ßå¼§zM¬aßþÃ2Mxô×,Åè„ïA	9…w[ˆ‡jï=„ÙH¼JXFsMùù/‘ÝÍ
+Æœ\¡Q³QÖ)â¿ò;­ýf¶?ïÞ‹çgä”½*ôgl5ãÞ½Ç¼.¨Éêl³ØÙë·ï…˜ÔËçÉ¸Çõ¸òî*’±Ô†ÕnXT5~fòÿ“RÒpõz®’ŸÁjÏÕqzö-’ËWoâÊ•š¸{.ööCîã³:N¦;$`>þeòïY>òqÂÕ7ÔÀùý6�ÃØjÄ³Ä$<}ú\>ëÉ|öÝÃ—É¯åw5ýcoÞÅû÷Â7¶òòòGÏ3_Å!XÀ¿a}ãnÅ= ¹×Ê×Û‚7|ý”3Ÿf™6’®�¶ªÉ*2/ü2‘ì¬<~Å![Ñœ‘©º/ò¹Å"ÿm5�Ã³;6qç8¸'½ÅúªM¿mNÜÞ½öÕCþTøü+-vþ¶wíoéÇÜÞÇÿ&°K‡ÿÀþtø?trÿÿ
+Š¾”å¦Y­?tø¿~¦£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£ŽÿáÿìpŒ” `$kmkBTúÎÊþœ€0xœí|÷SUY³èû;î«Wu«îß�™oÇ,*‚ 9‹’£FÄ˜1'Ì9�:*ˆ 
+1 s&È"Iäœ~Ýkç}èW÷—[««Z<;¬Ð½:®^Áh4‚š_ÚûÍ5á¯Q÷œòÛhPÞ¥ÛF£A¾¯ïÇ\Ÿú±™Žµ`ý=ƒê9é¯A|G¯úº¥öú{M{O¡ŸêŽØ�B+…Âx
+†ïVæ£aêa³2j¨o‰Çæ×†–÷C/(têµH#�ÿFíêŸ7Š<ø–ÿØ:‘(¡ô)ÑMÝ–¥qkï5×ôïééL´ÓÊ^5H¿�&s~›[3¦ãžé57û¿xÛúœ}ucµ=M´ôù¯�céé9A†ú~G«´ŽUý¨åÆÌzÐþÕ½`a¼2]4m«yAcþ.ŽG;Ni¬}ƒ¢CLx¯thÂÿ^ƒò>£…(´&{
+=ÂU=×=ß»¡³«º»¿#öÀ÷Þ^íUÍhæn�ÛîÅç{Q�±¿ˆô~w÷7èèè„öŽ.Öæ·oÝÐMˆ×-6jB#}Ÿý£—}´eY®¥ûz¾þ˜¼×·.î›Úpí:5…{Åe�²4
+vï;�MÍìZKK+¬[¿
+fÌZó-‡ä¥k`qò*X™¶	Ö¬Û
+ËV¬‡Ä¤T˜;/.^³æ,†ÓgÎiÆZö Öâ³oßUkúËÊÊ…øü|o¶=a*,NYK—¯ƒÔåk!	Ïš»f'¦BÌÔÙ°~Ã6øúµÝ*¹¸F?~ÊæRQYm_;¬>/�“hòøÙ(º[Œkî›<úööv(¼yÞ¿¯5¡§=zY9— ¤ì®kK¶]¢ë•ë…pùÚM(¸|²/\‚ó9ùpþBœ:�	'N�…gO_È¯—””ÃÕk…ÐÓÓ£êß²ÿD/–—WBá­»ÐÑÙ¥³ù÷Nþ�ÿøm(¸{Â›wuìZCC#ò~xxCpÈ4ˆŒŽ…àðiàà2lÇy�ƒ“‡N…�°©„÷=½CàÀ�ãšv·nß¿ü6Žÿõ·<6‚#‡O€·O¶™Ñq®î“X»vŽ^à3!"'ÇChxøø…³õõåËW+sÚ>zôŒwò÷	H³›š>-A×·˜1{!L‹›Íx.ÁÕk·`ÐP;ØwàXý®ñMðÛ609&ÞW×‰W{u²(ŒãAÅ#pC:;¸øÃÿŒ†IÁ101(<}CÀ~¼'üu*C[7$ÎO…Q¶ÎPùè‰Ò’ù7àú›??ü" îÃgñ¢QôúÌ/?}ö¼æ�3™90x¸#L
+šïÞ×‰íôàZýõ
+Íl-´}mƒšÚ�›�#m]!×ÆçúFöLSS44¶ þî5½§¤Á�Ž°aóv
+ŒÐÑÞ
+��ÍÈÓ6hýòZÛÚaó¶Ý0ÚÎ
+\=àæ­{¨û±ÿÖVhhÆv»ºúäAåÃ§¸^Cà·�£P—»´&+€º©œýP§¥k®oÝ¾þý?þ€ÕkÓÑF©ã•ÿ�>üõ�Q<ž=%^×úv—–Ã˜qî0Îudd]„ÚÚ:xõú5¼zõ^¾zOPö‰¦í�í°$u
+üŸÿÉ©«¡³³³OÐXç$&ƒßÄ¨­ù¯òO2³. œyhÞÉÈÌ…¡#œ`b`$¼Óéj5ô O,ZCmœaÎ¼dO	ýÐÚˆŠI€1ö?s|mï0K	9#Ç¸€÷„0xþâ¥i«ý°£Ÿ>}‚ÉSgÁ€ÁöH·U²Î4×–ÔÞÙ¬f32³/Ê÷¿ÿ‹RV²u4ez"|úÜ ™›ÊšX¿a;ü1È"cfÀë7ï,öIðm“�³8£¨xøØê|ºº; -m#AÙëà×nÜ6iOÿ·÷{Ì[°y
+uuÅ{½lìµu`Â¤øcˆ�¦Ÿ3gs°�ñ(ÿQ(ÿ5fF"Ìµ»»}�0l”3Úæ%&cQÃÍ›Eà„:ÎÁÙe:nÞ.¶:×½ŽÂpl×ÇýüÅk«ÏZ‚N”ò)†Œ ¹DCuM�ÉøôcMY–†òàÉäN‚††&�Œ›±îàäæyù×MÞWÇº$ÿÿ_½~kuŒ•ÈsGwpñdþ‚ÕùttÀòë`Œ�ŽÅý¢¥Ð‚:Ót,Ú’øï…ºåƒt•ý»jÍ&2Òe,\Ó�Ìÿàhôw,ó¿õ°ÄËò/ÀÆM;qÜnàáŠk×ÖoÜnVü¥±ï;xŒñßoR¤¬CNžÎ`~„�­ä\µúlÒrò”Y?¾÷(1×õë7aã}Œuô†­é{t1=ýO‘âÿïm!jÊL_WåhÿI÷;yN‚ÒûVŸ¥x(eÙZÔ¡žàâˆcr…¬ìKò}s±€c©ÄùKÁõuµâ»Ö£
+Ÿ0)
+†�v†•«7iÞ9“‘#è”küïD2iáò>åŸž‹š<-Yk0†fãScç2?Â8üŒíÂøÿâå«t1Â=ªb:dÐ°q«l°úÆ+ìÇÃ'ví9¬¹¾ã
+'÷‰Ìn�¶sgòd¨õ:ãÿ”ésQÇ~4?:‘F$ÿ¨SœÐÏ).µ.ÿäO-Å8‹Ö¢§o(®iWŒ³"/›4íª×ñòßÝ'Þ¾}/?—‡²@rh?ÞÎ¢¿§†³Pg:	ò_­�wÔs•ù�üœ9g‘jì_ù7é]gœãu´W—ò¯"/ìÁ?}#+z�ôÿ°QN0! šùA?
+ÒüÛ;Ú1ž\†¾»£fŒæžÍ<wõª\Ì»"ßklh�I!Ñ°~S:äáõa6Ž(K¨“ž½Ôµ!ñßik¶À€?ÇÂÔ¸D‹ü— eÞÞÅ—ÙÿÒ2ëòOþÞbôûh�ÎAys÷‚£ÆÃÉS™šy¨�ñÁ2ö¬Ú—#Ý?rŒ+ÆFÑ�¸¥yç‡ù¯“…Âx._¹Ê|9²©¯_Wãºó;\{—TtÖÃžýG˜þŸ¤µÿÖò,z�žÙ¾s?ÃþÐÿðá“ÙgÉÇ[Œ>ÞXäÅÿ<ªzÆìóå«7 ú}58ºøÁ`\ïgNgš™¯Ð'ñÿwä?Ùÿ7¢ÌYoYyê?&ÿw‹ï[�ñnR
+„„OÇ¸±
+ãÔEè»Ù£nM€¯m_´ó»#ûŸ„úŠôh­èÿP<1yêLÔ#Ì/Ò¯eòÿ™ÏÔûŸ´`9ãÓìÄÅÚþÅgÈŽ’F¹„úú
+=aÆ¬…Œ>©+Ö²5dö86£]Ùº­|X¥¹÷£y¼3™Ù0ÎyÎ×
+ró.ëÚÆÙÜÜ�aS íÔ—6%·�ù¾ë<dk„r¿
+
+K’W¢?¦Ž¿”þÖŠþ_Pèô]ÚšÛ+#™§
+Ùóâóü7Š{*dÿÉÏ¢|HÏwdcŒB±Éß‘£§4ïH9Ë^¦ÿ—¡­�”ýßG�Ÿ€�8Ê Ú´$ô{´¹”þò_ëÿ/Ö<!Ñµ¡±\<&Aê²5òüãXÿ9høbìQW÷ÌÁþÇÀõ�SMC‰~ýÉåKp¿¼üü#aèÈñh?×êüaœ¯_¿c>øöôý ì‡××oÚžx½A´±4®?‡ÚCxt<4Ô›÷_Èþ“þ‰˜Ž¾‹©�Só¿×öxôÿÜ¼‚Ð¬´:#ÊG‘üS^èÊR;Æ±	ó`ÆƒdO?~ªWè#¾CùÇ$ä¿êIÝ.*Æ>ýÁuð’Ô•&nø¿Æ#¨ó\/_¿ÁuæçT~*åÒ†bŒ=ãÁ»÷ÊÌÎõ€Èò[Fÿ+46°\ÃÜy©h»�!fÚ,hmý¢~’ýK~	ùB×®+1u+Æ¤&¯�¯åÜ`±—“ÛD¨¨Ðê%©½µèã@ù'=ýü…õØ¥¬¬é€òï×
+ï0¿òK[ÓAÔÛ×¯L†ùogòOü¯®dùÔé,°ïÃF;ÁŽ�LÚ'þ“ü{û…Ê±<åBÇ9ù¡öBßv‹É;ý×ÿÈÿ…zþ@íg�¿Èr¸÷ËÊ×^¢ŸíŒ~õqü¯³féBr6Úý\÷ã'Ï¬ÒÐë°Wlï8úJ.àë55ZŸ†r¤É©ià€zþÉãçòõâ’2‹±Ö¹óJ.ˆ|VŸ	aLìÃ6M×£È”ÿÐÈX³ò¯†*P6ƒp
+BÊpXÄ4�Š¶c*xù£�ž?
+rÝÙÙÁò¿d%]ÞØØq3æ2ÿÆuHuµ”ãx@ù¿Ä$!ÿS#Æÿ—¯ãZ÷eüß½ï�É˜úËæÿ‘ýÇ8�ög„Ù+4' xÅÝ7ê>(~0ù
+.…_·�¹óSØˆ`ü?‚âÿ€(™†?êûUz<÷âe\ó¾Ì¿/¼Y¤i§±±	¼P¦Â"§ktåF�QÎ)',A'®yÚû€ö+næ|“}ê�ø/Åÿ}ù1>õð	F¿r"Ë;,Ãø~qr,IIC�•Œ1ë:hjnaÏv ÿ'ñ_í—_È-`yÕÑˆÛ¶ï£J£ÓÚ&þSþWz'ùï€þ�½£ÆÙÚ=‚â¿èÿÏš»X"U3°ÿ’Í¤Ø›ô§~öÙ9yÚ±½ÚÓÒÃ~Êÿ�tb>Â3•ýÙýSŠ³Hž†b›ë7îuªÏŸ¿‚QKoÞºSóÎŠU!"&:º$?Oè›üIÚÇ =PSýA7.”ÿuÿC#b5ù?K{…”StF©X¤ùìô(Én¯A§äÿëùßŠ¶bjìƒ¾à8g?ô#»Dm�ý÷E?JÒÿW0–qÀ8†b°�šŒégø?gžÄÚ^æYRzŸÙµì‹ù&-�¿å�º}8Ú­œì<™>�ˆÿ£lÝX¬ûð‘6/Þß5 n�ìi<ÊëôiŸ±Y”)‚¹ù0z¬;\½®ÄÁ�è·úL‡èçdmÝC?�ì?Ù†[7ïšô»n}:‹o¢bfjòçæô×CÊÿŠö¿¢ò‘ÕùHü'™y§‹Ëo• ~ó´™+VoRé”ô}XþWÌE\½vƒíqÙ�ó‚ƒ‡L÷3(þ“ã•ÿ/NïtFÒ0yýV}™A3êÙ˜é³á�Á¶°%}¯¸æµü§ü„»7í‹˜Ò¥?þŸÁ¨Õƒ{öÁ6�Áõ­Z~(§êˆ¶�|U	ŠîÞ‡6.¨§$¿Ui‹ötÂ£â`à ±°aó.]¾ãÿµäÿ	üWçÍÅ-åÁQôÿKËûÊÿt!ÿQÿãø«kµqÅ†‰IÉ0×±«W0\/lœ�ì?òŸìm�ðNaámsØ¢ýßÐ
+ÿûÈÿJüŽ~•žÿÄOŠù"£ä:
+=lÚ²ihÁaÓàÍkí>ñßåŸüÿ§Ï•|Ì�è£d	Åwˆ&äPÞ£àr!»ö¹þ3¸¸O‚C»j_ùà‘ã¬v ®VŸÙ|HÆ¢ƒq`ƒ|·÷{/¬JÛ�…è)³,ìŸ)ó¸�1åH§—–÷•ÿí`ü'¡Æd\Â^â8ôë(®›¿hÛï4 üÏMø/å¾ŠŠî±|,í#ìÜsÐ¤ÊÿIùsû¿’n¡õ¨�ÿ¤y}üô™íO‹K‚÷¸îš¡îã'6†uŸ ¡©	=…1žŒÅø%OÜ›‘Þß½÷Ë+„L�×oß©ú¶\7j:N£Ì{Ê#¸{ pg>Á5Œ…üiËö£¤œ	é�‹—A\|’Å¶ïÜ)AÿÉ›Å6Uºød
+ÙÿA¶LGôµÿW†þÿ8'VçP\fê©�ø?g^
+ã¿^þÙ¸
+$ë)lÿšÖ4ùyÄÿI[|ø(ðÿ	Ž—ü�Ñv�¶n«I;ÒþÏ�èÉÿ—ôdIÉ¶ÏK15­ƒà°é,®¡‡ôJÊ�—o0>£Ñ¿Õ°›å]ÿßˆ{èÖömûdÓ£c˜üSž¯¹¥:QVKï+²×ØÔÂú
+�†zà$:|ýä°}%ú{ôøYF7;íQå\PrŠTOÃøÿçÿ½|e~ïJ¿Ä—~ð_°ÿæå_òùV>o¤+åd)~ zIŠÁÔû¿mmí0c
+²¯sæ-ÑÕTöÍIþÍê‘-™g³ÁíÐ¶ûáÌÙópòtœøûœ8™Éö+Nœ<ãï©Óç°¼LÒÂer}Á®=‡Øø&FÁË—?¿ÿK ÔQ4ß¶}Û‹ ú4Ê=­B_‰rcõ�ÊZÑÝrÔ£~¸^§°<yxT,„GO‡°Éq1y&Ä ^Ÿ›“§°µ¿hñJ¤…@C²·T9p¨Ëÿõ•ÿ©Àø�|qZKÅeÖóÿÖô¿Z'nßy€íwR­Þ¹ó—`9Î1×³:×º~c:[»$—¯u¶·¿ò¯ÝÿQç�°jÕˆFÚµôQ§¹s×VÂöùUû.$ÿ”Óðˆ”ùÏ|ºŸ-DÇ|÷^)ÓÙNn“X="ù´O×ÙÝ-�};®YŠ=ŠKË0ÞïÁX¡�ÅÍ­­ÐÔÔÊä‡öb·¥ïf9eOôÝÞ¼y/½k7lGû/äÿ^¾4Í]ªÿÿ°ê	óÅ(G^r¿oýoÉÿSéòqí�ü õÝDÔ¹1ÓæÂÇ�ÊÞW~þVáì:nÝ*Ò¼6#†�ü¿j³üÆÎê?Ìð¿©©™ùIèP=¥ú=û
+oßEÿÇ‡Õgü}&C¾ž¾sŒ þcüÿBUÿÕ_þ›Ög‹y~´%×Qþƒr>cì<a3ÅâóT{N~tô”™ÐmÁo• ì~%8!ý†£½½v]¨/5¢®¡½UòÿÂ£âMì¿œ%�öÿ1¶ï6œÜýûQÿCú)‹‰¤ü¯Ôª2]až»v„a(ß¾¡8GwÔ÷I¢ÿ'<X[W‡óey£'34ôÊÈDÿÏÆ‰Õ¡š—q<h�æ/XÆòjþßFßh$Ú„Ãh;•¹„â¤þ>}n„¸„yðÏ?G³Úi[Ò÷ ~r†@\»¯Þ¼ÑOiÅ*½ÌAKkD _ÆÚ{ƒƒ“?òÏã‚›òýú–V˜‰±É¥']�µt£¾¡ÛŠÅ±ÛÂ>)�Fõ_k73Ÿ2ŒñÿH{"Õ¾Œô¿ÊÊ'à„ñ¿³ÇDõÊ^nG‡`ÿ=Ñ¾×|PÇÿê3JÂØ¨ÖÇÛ?ŒéŠ	b¦ÏBùÿ¬é{Á¢•ð'Ú©„Ù‹5´¤:ˆÁ#™ÞPÇÉúüñŸÙä?ùlÞº°Ï‡úesõ	è/Q­ïïƒÆ@lÂhmò©{Åø"å_+úÿGrÀæ€^K[»•Ù>Ú›Œr^§ª	¸q»u‘\¸X ëGéW¢1í+-IY�¶~LO˜#Spã¦]Ìÿ�˜œ€ñ­æ}eÂzª¨ ü�?¸z0{#ß7Ty'¨þ7q~
+Ë¼¯Q·kzÆŠàø‰3,¾"?ZÜ\Uíƒh{=Cða9±Þ^å!ùk‡ŒeòÿÎìy‰ÿ],=xÄx˜9{!»ÖÓó�ñ1ç®œ7ÐžTj¦Ð9‡!#0žò•k`ˆÿÄ#òÿ^›æÿú
+ùo;ŠÝp�®]¿UÓÖæ­{X�ÇKYo›ÚlõùÊŸŒ±'Âªë}ušXÿ�ñ_m­ùz	ÊPç“ý'ÿ¯²ÒzýogWÚÔeÂ>Ïû¾kYIÞƒB&£~BÙš‘$¯sõs”g8Är/)1Ì±¿ÎÂÿü÷ßÙÚ�ö/Z[ÃÞ‰>Pl|"üïÂ¸*ž]£}ž1cÝ`^RŠ&oj^n•<1ùdÿö¿~…
+„³;v€ü6�½áÉÓ§â»ÿ:ï	Þ¢M£x‹üÎc�Û6°|ITt<ÎeË›Z9~+¯gŒµ0
+¶¦ïb×R—®�ÿûËp¶w´qË.¶˜�“Ù
+Ð·Ê�cÇOCá
+Áç¢œÕqG]·zÍV8}6ã£8Åb¥8rìÜCŸ•hÕõ­‹ÕŸØ;xÁ;3zÅ]2Ñ–ÿ¿_‡£EÈù_õþ<í¤£^Zz_nîQÕSôm÷bÜ{šÙù/5ï”>¾£¬_Ê»Š¶z7ÆÀBžôÓ§Ï°
+õyQQ)heÞ”v´µµAæù\X·q'Û›¤÷îW<„�{ NACCƒÉ»ÿÊè@=:=v6ØÚ»Ã•k…òuò�#"§êrb–Ïy´´~�™èûŒãÄÎlÚºƒñÔË7ŒÉ5ÙvÊïÐšsõ
+`çZââç°g«ž<Çx.œèDÊËÑÞ‚+Ê8½;l¤#Ú+¡>·epéò4�¬â¥Þ®héÓÒÒS¦ÎB6yS/=%ÌK|µ×`P7 ›¡ð¬d¾%4wŽFNU(k§_ü3sOÙÏ•Ú±üz€òºtÆ¦‹íí	ûÖý�ùšm_[å1(çÀÍ�™|©¨óž¿z-Ôà3ŸêáÆ,¯ß¼eþ?í+Ð_†xí>û–ùÕFèîúÆl
+{ÇCñ	!í¼y÷žå,?××‹ã1²Z_Úû§Z4Kþ¯~œ”÷¢õ"}+@>¬÷Idý®×Ñ¦¾¶Q\?ê¸Ã¨ZSò«f¨ù×FjíŽð®Ö'Ö³Ñjs–Î`iç!=«÷ù-û¦}ô~t›“Mëú_K#Uôa”ÎêZû!ý*êõÙr�}VÖ™†ûš¶ÍÑKzO^öš>¥^MÉ'ßû1Ïo“ÕmnI˜\”bW£y:±®Mig‰žFqÑA­3Í�× =
+z[Ä¾±F
+ý-ñM¿ž…kfÕŒRû¼ÁÒ-¥5[ŒÂ˜Í�IÏX�¬­ÐN’sµ<1·^÷¨¿ã¢Z«fô¼¹ú.eÄz;dÉ75ÓžæŽQ×¾%™îÃYa¨¥qé}ºm×´==ý•v,ëFYÌªgqŒf›5ü Î5m]5@óO˜UºwMn[‘ƒåùHç²-ƒé7C¬A×Dþåkšo
+�qëÖ](ºWÂ®=ªz…7o«ÎÐ¡¦¶2³rà"ÆW®ÝiíÒû%¥ep>;.\È‡�ŸëAtÖ.ûTj{”µøäÙ3¸�WY91.y¨™kÝ§�¯`lrô¤X§/¼SõøœË¹ó ¿àºxÖU¸WSSÃê{ÏŸ¿•Oäþ¾õ|ƒ›…w ªJØÃ}úìÞº£û¾‚B£
+›¶Ãí»Å²Ü~þÔÀb ‹?gã\ïSW|…}Ûáj!‹‰îcŒ_%²WÐëôû\ÖEÈÍÍ‡÷5Ú\k7Æ{7nAN^>ääàœ>ƒš•�ŸÀ¶{Y�¢Á`ê«¨ÿÒ™üËW®«Î.ƒÊŸ¶ÿ >÷ÐÑÞ	‘‘ñàéÄòü7¦cÜ1MóÑô?ÿ9‚åÿhM
+ôýª©òÀ8&(l<×íáÝ-.c9Ÿ9s“•ýGq,Ûvî‡QvîðËï#aöìdyŒToœ¸`)îÀ¾Oðø±²ïNûY¿°aç!lí<!/ÿš|/÷RËÓûú…Ã8G_kJ@õ›!¡SÙ™m‚»÷Chä4hW�í ZAúîÃpŒÅFâ\Ówî•c¦›…ÅxÍ��
+¦œÿœ¹å÷(Žöò
+†;·ï±ßT{¾rõÍšZ¾b=¶ëÌè<)0T(uÒM-->�ÕÈý1h,\º¨œ_ý€k*|rË=ûDÃçÏÖóLåå�ÀÃ;nÝQŸ»Vü	g� ä­RûÚÑÞQ3`„­+ÜÆñ§oßÏø¨~&;;†ÇÎW4°ýÓ^yy&Ì\Àââ§/^Á¯F›|câÈ±“ì³Ÿ457Éã Ø¼mxú1¹iAHº”Î‹RÇŽŸauºò÷ð6ý¦3Ã´o÷øÉáž¨s©†kÂÄH¨zúæÍO…è˜ò»tö…¾[²nƒð½‡í»BHx,´µ+{ÑtnmÐH–'¡³SlmzšÖ$ÅðT_»uûhlj’iðåÓÃ+D¦ùäi³aÅê�þ§.MÎ	¼zÃm\`çn¥†ŸöibãæP_ß(ž•ætãÆm2ÌîÜ-�6”Ié[%–ô=ñßÝ3n™?wOù†/ª³ä´×=uË‘/\²öì?*ÔG·)Ïäæ^†Á8¢{Iy%¨ý’ú¦ÕUP­|Î…<ù½o=Ý°`ñJˆŒŠgû„Òù.ñ]ªpõœ§NŸÓÔD�Ç9zÃ¬ÄdvöEýÁùœ<°µ÷ÔÌƒ uëÄ€ÉP†c‰›½âfÌ‡.‘ÿtÖ‚öé×oj)÷CûCííÊ÷‚Žÿüè¬ÒGýYN�´§Dõú�<£Ù$:¿@ö‚`ZÜ<Xµf‹ø-Dá¡¥+×A0ê›HªÝ<|ä„Üzss+;›O5?/]Õè^:7L{w´6ôõæ€Îzy‡BQQ	˜ÁÍ;˜ÑBšÊÉâ”Õ0×-í;Åà_5ÿIÿÿöçX\W¬VZ
+s‘G#F:Á¸ñ>�œºJSoKkÙåžjAfÏK†£Ç¤³k=w Ú9úàüÜ‘‡åÑÒÚ&bàŸöÈÏhV§ ¬ùÌ¬\VÓÖÔ¤Ôr\Ì»Ìr±vh¼üBP^ŸÊ÷(÷‹v]�ÿÝ{‰üWê6mÙÉtF÷7åû!j¿™l+Õ6=þ·†´dŸ¼ÑæP½ãÿÚM_pUÚ<Äœ|‘Ï©èO|–ïQ}R0Ž�ö#\ÜüM¾=•ŽròËo6°(%�}MM=P�©'ÎýŽ8=ÿÝ½C4º½íDôØ¶}/«‡ ïQýt›Zÿç^dç¸î•”2¨}â¿«G áçr4c#»H5C§NŸg4Y´d¥æ>õé�c¥ý
+é|…:Wqíú-V/@ºÒ¨ò{2Ïå²ow4êùŸý“I¬¦‡ÎÂ«¡e7õ=}ß‡`ÿÁ¿ <2¾¶+öÿúš$;úšk	èÛEŒÿÇ$þKóDþOˆDV¨ëˆM˜�ö£˜&žY¾jŒw™È|ˆ½ºïe5573=¸×í5«Ï,Hp&#}%7³uÊêµPþà!®ýPy-êÁÕS+ÿdÿÃ"ã`ßþÃlíÐy6:·ûå‹ÂÿóØ'Õn)>¥Â‹Ys–°=§YsÁ´øyì;~�?Fµ³tƒÕ¢nVç3iïßÛ7}šhin–çE~(}/‹ò©~‘°u§úû§$ÿôm„&ñ›uÒüIÿö<Ž6Ö	ù¡ì³“ž£³Sâ’Øw&ÈnEâºÿ¦úVPuu
+ÛC]˜¼^¾zÇòèj»ûžÂöjÔý¾Âq:¹N€}‡ŽAÆÞþá&gLR–¯ƒpì�¾iFõÒ·žš1~ :ÎM[v1´½S±It–úéÓçì,Â8Ô•‡KvC/ÿÂoÒÿžè‹Jú_Ÿ£ZL=ÿi÷ÒŒÎ—�}‹�KÔ<C1	Õh+5ÎJî�lÖüE©pûÎ]vFýF¡pN‚Öð²k`:ÊÕ£:ryÊh%ÁÎÝÙùG_”�µ(/­i¿}&ò‡üª[º_®=@q�½£§ŠÿÂuŠ­Â0–¡zò7–¯Ø€ëM‰ï2²²Qo¸³ºIjwŸ\¯ð˜bKGªÓÅ8iï¾#Ù¢üzHøTù»v’¿J{kô�D7�‰L÷º >¬ªz!÷K@òO5†¥eå¬æF}Ö�ôXT®¡IlÏ—Î‡J@5ÑäŸQ}3¯¦FªÓÇ~‘ÿÙ¹ñ»wKMæFP€±aO·²æ‰>?}*ÄmTÂMŒE{z_ã=ÊENî%ø*®	µ]»W|çô}“.¸�{EþÆÕÇ_¹v�}÷†€ö¨0®V›æ	úÓ¹èïd <ß+)WåÌ,7@ß+©®V×¥÷iO%'¯º»ºA
+4Î«7î°š=²ÉÓ¸ÔPõø9;«JzRnÕ¨Í\×Ô~bçÖž?WŸé4²¶n`ûB�¢‘éwiyô ^£ïždaÌ)MnÕÈôÑµ}¸¼‚, õHõg7nÝfôËÂX«ºV¡Ñ÷ÞV/˜s±€­“¾ c¬‚«7P§šæbÔÐWþÒÜOÓ{ýNNé^µôž¥|—QÕŸ…wûŠywIéÏ(eüÍåêL7'@Í[³ãRç-åûK?ý˜ÿKžåÀ�ÿ�ápäÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räøßÿ?/¦ÂÒB ÀmkBTúÎÊþœøxœí\‡WÙžÞ¿dÏÙ³ûöíž�7Ï0FÉ9ƒ ˆ"(*¨ˆbsÃèŒ3&@³(æ1‹q	bDDF‰Ýßþî­®êªîjÄÝÓöîóþÎùèîª[·ŠûÝ_º¡`„–b4Ú>¦sª›ë�&ôì½ûZ××ezƒé8û4ôø™¤û°kºzô\$ÿô‹¶í™¨Ûò%­ê•.1êr¦®Oÿæë´ç»Ëº¤:l÷7q4Göåß`»
+4:ówƒ¡Ë¦�°æÅ¨{Üÿ–ÐžƒéZó§A±=é=æ\-ŽæÈ®ü3ioï@ÍË:<{öÏ_Ô¢±é�¶ÝŒ¶í¾žÎZ~×3~’½>`Ý×tçzþŒ:âhŽìÊÿõ·1wÞ„G% $b$ÂÂG!!ivíÚƒºW
+æö3µoåƒ*äç ää¼ÿðÁº¥ÕíK¶¥”ê¿vý&:»lÛ&¬®ÃGŽáÞ6ëÓþ6âmó[üºÿ®]+µªW-Ì^�=w‘žåŽr­ô@Í‘]ù÷ðEï~n
+�EÊ¤ˆ‹WÏ ì‰	)éxüä¹©É¤¶Úž»ßöqBäðÑ¨®©é¶áê^ÕcØðDªw*·1–¢æö•õŒÀ˜qSÐÒòQSFÏ0¹_^‰!C}‘5i·ÏÁê—„Äq“ÑÚÑauïOˆ£9²+ÿ}¸cÅêMxVý­­mxÓØ„ò�‘‘µ”xvFêÔ9èì4ÇÊ»ò
+Ñ‹ú³O«ŸkÊ²M/]¾†~½©oÅ¿¯MG
+–ms]}FŒ�oz;ãÈ±ãªó¶¹ª¨|wÏ0|?¹îyYîýQŸ€(vñ¥>SÑmYq4GvånÖb�¾ÉRÿú5×—~ƒ¼°iËvtuI} 7¿�úŒé"õ™Jym~(ÙŠ¼ü"röƒÓPâô¤¦¬¥^¿¢û�MžŠ^ß¹ò>Ç}‹Q
+<ö�Ú{UVVÁÝ;ó®Ô<»eÝ…Eáê‚þƒ½°ïÀ!«ÿõâhŽìÊÿ�»÷-þ]Æ�Ä5ãìÛÞC0Ÿô«£ÃÌŸþî“ˆêç5šö–¿ËD­^».¬Ý½±`áròÃÖú¬ð_ÿ	dûÝ¼Âàâˆ=Te´ùšüYQñž>áT÷*+Òä2­­­<¾quÆ z¦>7p4Gvåß`ÐæÓja¹À©ÓçñîÝ{å˜™ÿ1¨~¡å_]Gýë7OúìêÊ‘8.õõ
+:÷2Ùòÿñc&SÙ0¸RˆOœˆ¦ÆfSËXß¬ÿLÿ³µú¯.SWW�qÉÓÈO„ÂÅ-#RðæM£UùnÄÑÙ•©­Ì}Àdruúƒô[�Yä¾Ää·Wà…Ä¤T„ÄÂ/0J‰íÕu³Øœ	ÓÿDÒÿ!®ð	Œæ¾zó�ÛÍw×±œÒÿùú¯.Ë|ÌÈ	H¦Ø6,r$ñÃ¹ó—ðâhŽìÎ¿vL¥ûœHöÿjûÏ¯´àgùªÄÄ&¡äÔ9ŒJLÁßûÅ®ÜÕ˜­\VºßËÚ:Œ9©é?i:õƒ@ŠÙ†áÉSmŒ©¾WYY×ÿ‹VY�“eå±¡‘£põÚMÌœ=ÿñ7'ä¬ß"Æ-ø—þvBîÖ>]’ÜÝ…øn §.ÿr¹¶¶v¤¦ÍBæ¼ehkoG&Å˜ŒÿdÊ'?¼gcê>&}¯}Y‡à�hªÿW/9o¿(tòÁúM[mŽ0þ™ÿÏ^¼ÆŠ4þ”sNL�‰ÑcSé™Z±‘êúÏ^.˜>ë{tuZç£6ÄÑ}þeùôxHçßƒçõÏŸëçÿu¯ëCùöÖŸóøï¢¢Ü®†ÆâÅz÷|ù²–û‹Ÿ~Îåý'eò8SÌæîB1êš+äîÀâ?¦ÿó³W¨Î™ûáƒ�àåNùË6þ{ÏžBêS¾§ç þ¦­ÓfLèhŽìÎÿçÌíå›ô?Šüÿÿ/×sþâ%ŠãCP\|Šÿ¾uë6Cb(®ÂÅK×4eý¯{… °8¬Y·™ÿ>sî<·ÿûR|·��¦›˜ôáÃÇðò‹ óæü_ÍãÑ#%tÏ`\¸(Ýóúõ›¡{ô¥<pwÁ~ÝÿO§8š#ûò¯»w'fþµú¯¾~ùÊÇàÑã'ü7›Wˆ‹O¦¸Ñ
+9~Rb
+IÌþŸñ¿6gÿý±å#¦¦gÂih ü‡ó±$È—™.­ªzoßaÈÊÖÿÙøÃ6Þ?Ê)NdÒÔÔŒ´ô¹è;Ð³3³5emù»nÚîšÿ¿'’o²ÿ‘ÃÈÿ¿Pµ�t¾±±	Ñdfe,„ÁÛ±ñÃÅËÖRìíƒØQã(ÖoPÕ(•©!û£ðÏäÆÍ;ðŽ!nAÈ˜»��A©Ÿ³¼¼’üƒ~þ×E÷Nž41#Æ¢©ù­r|ËÖäü‘@1AKëGÕóëÏ;þÛõÿ>{>T�Æ¡<�\Aºæå‰�ùE¦¶•Ž=v’ë¢‡_nÜ¾«ªQÖÿZÒÿX·þGåLWW'æ�žöàÉç'Îž¿¨©“ÅŒÿùªñ?ùÿ)ðnž!X¹j=™iüˆÉ‘âêJ9éü~¿Üê:àhŽì®ÿŸÓdûÏâ¿êjYÿ
+Š5¿@þ�ùÜó”ÿ«¥¼¬Ñ	0Ô‡Ž+ÇÕù_`èÅÿËr‹úJ@ÈpröÇÔéß£åc«r®ì~%Å,ÿ_K)úõ0¹ø�ï¿¬9~ï~"†�¡s~Ø¶s�æœ�vp4GvçÿsDæ?’¸d~]sÞ°zÝ&xùÃóš—Ò£·5¼nÀø”ièC×²9ó ¾™6NÄÆgÍ"�[“³ýùP½‘8tø¨r¶¼¬ŠôŸò¿…ÖöåšM��×
+¦y'žïÑN¾ˆù¦�Î~˜2-­µ>@GÍ‘}ù7ªWG@iu›MmÇ„åÿýióy†¦ñí[„G'"--ò<+ãÐtƒå+×ÁÉ%aÃQõè©æž,þgëV¯ÝË'bk‚Ãby,˜BùüŸc0¹Ïì¿w„•þ$1!yÒgg¡Ë ç‘ê-(ü®¡ˆŠ«Ä¨Úÿ[³¦ÐÑÙ•ë5V‹ßZ¨7þ#óÏæ’˜^íÓŸcc1¼?Åsƒ]üQ´ÿˆ†¶þ(€rDÉþ[�õþôK.ïwl¼·°HªÿÅl¾({±vü·¢âÜÈÇ³±­Hu]¼t~”SxøF äÔÍ}¤ïš‹Í‘}õßjŽÝöz&»ò$ûOñŸzþ—IÑ¯GàÅc9=imëàqw'_¬XµA£æ/k_ñø�å‡ÚûJý‘Íõ‡GÆñõ£ÇLBÙæÜ,â?&{÷@ß~n¸yç.ô¤þu#†�H"{â‡e+rº�ƒã9²3ÿ¶E¯ìÌÛ+�ÿóø_�ÿ°Št—Ùèì%«±nÝFjÛ
+XE~xùÊõÜ¯/¤ãa‘£0xh&M™¥™W¬­«§ø�åÿÚøONø»(ÁØ•G}�lÀºÇ¡ÃÇùý½ý£4ãÿŒËÅK× wwnÿYì°le–ÏK–å`åê�X´dBè9Ü½#)?LÂÓjs«#ŽæèðoûØÊ	”ùŸØ1þ›šš7:þÁ±Hž<ƒô|_ËÅ0v|GÒ„4ŒŸÊóCŠånÜ2ë'Ó)þÿÁâŽæŸ5uˆ9ßöÊë)9u�a#5ü³1Ö·X,‘9o_K2iÊ¤N›ƒÉô=}zfÎÉÂä´ÙôÑ|núDÉYÝû™ÄÑÙ�ý5õÒÚêú×rÈ¢·þƒÉ�[w¸Þ±«€�÷|øØ‚�míü³³³ƒóÒÙÙ‰«×oòõ`‡øbýÆ­ÊšÉþÇaãæ_´ì[ôÃ}äcØ8’/ù–O¸y‡aéòåü£ÇOùšÆŸ·çr[ÀÆŒØ8‚ö³åUd;†ñµI;w©ó@«9PGsôEô_ýW5ÄŽ_¶ïBbRŠ²Ö�ó?À�çÿjÿŸ·{×¥‡�äxÚ<æÂ÷ì˜üø{²ùÉ§“÷ÆÔôÊç[øq–ÿ‡ÇaÓæmê¶·ê“ÌÎ°µ!,Îô&Òo°7ù—
+Jù½…È?P¬y]õ¿É0óú±µ
+#É^±X†­mkkSÊ¿"ýgq”Ô¾]2ó&ò
+|ü6)9
+ù¦~£˜™IÅ\ÿUã?LæÎ[Æ×øÈë%1(LüuvtbAö*ôìCíŸBù¹4ü²®–Û…µk·àSr€|¿«G0|c1Ø9+TüOŸ=añd³¬®Ó®M7`5Å ìaýî^Y¹ùYµþÐÑÙ•ÿ­¿äAãï¸=–8<~ò4åj~ˆ•Bú)�£°ñæÿÙüŸ<ÿÓüîÂ‡�¢K;oÔÉ-˜ì?XÌí¿§O$N’gRÃÆÿB(þ[gÿYËû÷-HI™g· z¾_2ak
+ââ' k�<Ðý¸æåË¥|ý¨“kvæ¨\}©£9²+ÿnžaÈÍ+DCC#÷ÅŒ«VòÛ§Î\äóõŒë}Ìcn¹¤ÿlMpÅÏLãÿ—¯Ý ›ë�½Eê9UƒÎ˜šdžRÞÆâ3–,]¾–«©}‰`òÿlmNw"ûæââ“|M7ó#ËV¬ãÇ>|‚ �Xî;l*l+¯“Ž¿¦¸&zÄX²Ü‡(y kÃ×¡ÿ½ú»q]6|fg.Döâ•HHJ%nü0ÈÙë6°ùsûý²#ÿþ_á<OžVóc«(·c:TVñÐÔî&ž4ëüšzæÌ]ˆ¿R=£Rðîý{ÔÔ½âs9ËT±œžÈ6¥¹ùÅô³ñÏÿÖLùÿ/;òñÙó‹WK•Òj[nÙÙº÷q)éø—¿ôAìÈ$¾æ].§GsdWþOŸ¿ˆ™Ù”·
+çyÏÍ"1wþüvñŠ…?gc§ûáäâË÷	Éö?‹Ê²õ:m¦5â¼ýŒ¶æÔ¤ïÈ¦°5ž1qcy?ªoxƒpÊÉ7nú¶DŠÌÌ1\ñ‰Ó¼ŽM?H×ÌÍÊ&¿”€†FÓ|¯ÑÉÙ˜ÛÇ¶íùÔÿÙ•hœ>{^¯Œ£9²+ÿLX¾öäé3>&_õè1Åõ–k.OŽÆ¦FãW?Žövi.®¦¦–l©)Þâs�Öo°\ïÃöU=|Ìëúðá_�Çò‰††?aÓo›¹tuøs¿¥–Å¯,­¡<Ò\V¿u…ïß5SÎXÍóFíºð¯Ãþÿï¥»}¸	ÊzR9'Ô[2Úø®S’ÏGií’Ú.HsNê<^¾§ÑâÖ¶î£é<Žæèòo[i¤¶4Ø</•éù:IäúÔù�™3m_2(ç´ëÇ`>f4×¢Ä VýJk‡ŒãVÅÏ‘�ù·Íé§éÔêS÷ë­ç,}³VÔÏ¥¾‰ùCgè½/B=ö£ŸX>ÏµEÍÑÔÿ/+œ#Ý÷�t×ñ¤èÂ¨¤´¸RgZß³û5îÖ6ÃáÙ•¹ß¿yó'NžÁñ§pøè)Ü¾û»²Þ’�–œ>‹‡ŽàÊ•RSN Õ«†7oP@ù¿yM�$lÿå9Ê1JoÞ…¡Ó€ßÿ—¯\7SGŸl˜íÎÙ°ÏžW+u²¿·oßÅ�ƒÅ›_ÀŸošL™ëïèèä{Ò×­ÛŒ{eÖ{»¯—ÞÆ¡CÇù^Ö:eºCÜ»WIÇKP|òŽ?�úú×°´#ÿ8ú"úçn†ºúóñ >ý¼�‘¹Pg{æÙº‹°añðˆÂòÍä™d?åsÿú×^øñ§šögyggsûMo›±tÙ¾/”�Ë5äæíÅw½ñ÷>n|Ýž,,“˜“¹ÎCùÜà”©s‰£zå<Û°pÉJâ'BPH**+5Ï6uÚ\¸
+â×Ç�ž€UÒE]»déZôà	7ïpòVæ,ü˜£9²3ÿRüÃÞÏq¿¬’Ïá¬Y¿…¯ã6šÆÃÊˆÿ>ýÜqîâ>ÆoÊÓ$aózKVäP;F uZ¦æ}Œÿ„¤4ü­�+JoÜäëÀÇ%§SûKñ{{{;bGŒÃÌÌh~÷MMo•q8ÅøÓÒ¿Gú¬,Ü«(çý h¿y,’ííôð	ÅñâÓüºØøñÈÌÒ¾drÚ,¤¥g¢¢ê¾éåŒBÓ¥l×¶mßMýÇ¥·îðœTÇm8š£/¢ÿL˜~zøDð}šj)¯x€þƒ¼qòÔ9üðãvþî‡ÆFs®ÌÖäŽŸFz�ŽˆèDÍ¾ ÆbÒxR½ó­ÄÒëøü_§i?ÓaÆOhx?~lñDLŸ1SÒ3pîÒe¾¶äÐ‘ãÊY6ç5"	õJ}qmÎ&DF%*×2I¥º§�
+¸yë.ç=|ô„ê,pøH	œ\üùü£$V±ƒ£9úbü7P;ºû„aûŽÝšãeå•ðˆ†�Ï0xû…S–¨Ú
+|'~ÌD‚«W(é¹y]ã?&n,^Í×~¥ÏÌÂÄI3Íû¹ íãpõ�³K ×i³IŸ—?AdÃ�‘µˆôÜÜï~üy'F�oy÷®Eù«äLÒgdñ=d^aø~Þ4’�P8pð_ðâÅKó]¿BÿÏ„ñïáŽ»ö*íÏù!ý÷ñÆ÷L°}_Mkðåv*Úw±#Çc÷Þƒðò�ÄÞ‚ƒJ�lŽ%<j4òwñušA¤ç©iŠý—5ñÙ³ˆ!?�0n>¶š×øÏ˜5Ÿ¯÷cqg‹²V[:WH±BTÌX%®[±j#Ÿ—T?ãß/(ý©í7­KU�C:Ê×£>aó]VŽæèòÿ†ÏÁÈú¯ì¥)€�¤#?mËåó«y{‹Lí(}°9WÏ‡ÇŠ!ç-X®¼ï‹Í©„ÿ;wàÊõR>×”:5ƒÇ_LØ{á**¢¶öfÍÉFHx<šß¾ShššžÅ÷�Ë¢VM¶nÏË7[é¹nÞùa‘ñX½f“æJ£x„ígŸ&MÇÕz&ûIÿÙ;ŠÔüµúO1�·_væj÷Å0þû9yñ}[Yó—s[ßÑÑÎÏ±X->a"éöjÔÕ½Bö¢U‰Íc	&Ìþ³ý€;w �®		Iþ8CñÿÊÃ6oÙÿàh¾—£€|ˆz®`:Å~sæ,RÊ[ŽWmÝžO_¶Ÿ+š?WÍKµ§þ3=³ç,ÀeŠí{çŽó.«Îƒ³[ñ/Ùÿ¯nÿ¯JXü{¢ä4>|¤ik[³=[¬°ýû§Î\@ss?×ÒÒB¿ãs9LX,P°ï?.ÕÙŠ³gé|•t¾”òñ«×JUïŠ1àEM-_Óóû½2í
+¸Vzƒ¿·Q*oæ^½Fñêµ(>~Š¿»N:©ü¡üÿnÞ¸�VÊe�ŸDÅƒ*Í-ž’ß9|ìÞ·˜ßeùµê¿¶í­¾è”±šåëY•ª_¶Þ3du�j¼¨'wÑ™"Ð/óiq4GŽá_ˆ,ŽæHðïXq4G‚ÇŠ£9èþ¥\ªä°×mkBTúÎÊþèžhxœí��‘)…ˆq Ä‰8âDÈ^éê>×»gI@ÏÏþX¯jjg»iÐƒž——Á`0ƒÁ`0ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù�]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzü�ÏªÿÇß¯_¿þ~î
+:ûsMeÑò#M”Ï3YŸ#=÷2û»QžÛ›ÇßÐ™¦‰ïŒ[\s=E�ó8´}E>¤GÈ©éTîø Ú²Ê×Tªg-Ÿñ}×þúÌ¬üVfÖÿé�¼�Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~�<Vrvº@>Ê!?÷U�ýù�ÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+í‘¹^edÔç½üLo+[\Å-ö§k»ïä
+döW‡ïÍú(}Ýý�ê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}ÐŸuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õÆ‡dºÐr2ùÉ_ÇCú‡ÿï²¨ü:—©ôéºƒÁ`0:8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq�{bUþêÙŸÖq˜�Â©Î®è¸âmï!«Æ¶«g*ÎªòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ	çU¥?)ÿV>­Ò“ó†Î)úçx�…|œYé¬Ò�Æ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖÊ½VÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x
+ûëØÉÇ÷â)/ˆOSÎy²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0ƒÁ
+Ä¾ˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{â¬¿wÖ&Ýúõ™û3®Q×”�øN¬ðQev×	�]¨¯Æ·ºö¯gcH¯úËžçîi½�÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>�+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªü�ò\ÆªÌêúŽ¼ÄUÆ¬ìß�·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈR��Èôï|GW~•—î×w«2«ë;òfz<AÇ�‘ßŠgìì_éçlùú§ËyÐýŽÏÒþžÅâ³ò=¯�³„U™Õõy3=ž ÿ•[ô6_íû¹Úÿ3]Uý_ËîìïôªÿkÞ]ÿ¯æ]ÿ×²«2«ë;òÞjÿ€Ž->†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyÅ¬|E7þkúªÌêúŽ¼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=�Î‘}NŸÍå»�Î…ùžü>åuåWy­d¬Ê¬®¯ÒdzƒÁ`0*èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì�˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,�,^�qF/XÅûv8º.Ö©gá×3}íÈ¸âOPùì�~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+ãŠ<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑ�p�™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Ò×•þ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ�³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ	veO\k^8Ö”�¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñÑ˜
+mKãè«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõìq�³:£¿ÏE=Ð
+z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u(K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ�4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû�;=Ý·åòxÚëpû;o@>ú›”È˜éT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â
+½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîÇºÛôã{-âƒoô½ÜSd×•_ËžïÎ×ƒÊþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞj�Ýêºï%Z�[~_Ë¯déÖ®·¤ñ²+�œÖñô¹Ìw]Ùÿ7ƒÁ`0ø» ë]ÏÜkÙíIŒu�¾+e§L]«ïÎÖ‚ïoA^�ç°î;=GR¡³?œévì¯±Ö;<÷ôy‚· o�$Nî1ç´ˆ=:ß¥PîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^�]ËQ¹NÐ�1qŽG¹�¥w>Ã¹{å•á<Fªõóó�ÎÁVþŸr²2½nÙÞloÿØ�Ø§Ç|±m¶o›¶'âqbì­í¢Ó‹Ëîr�`eìêef±ÿ�è6
+0¨lz’ŸsAÞ_²¼«°îÒx7±Öì·£*îU}�î­R®%ó+½¸¿C®¬ü¿Û_ç	·ÚŸ~I\ýQö×~±küy©Ï#_·ÿjo~DyUåÀ®^ªúž`5ÿ£žpŒºåûk¹î‡oµ?:¤ÕË®ýÉCÇµ¹îwÙÉ®üŸËë>?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0î…lý·Še€·ô®ùŽg:…®×ºñ¶Š�ž`W×÷,3ËOã?«½‘]—¾\9ûP�ø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý�3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁ�hùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄÏ½®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=�é2ôl�BÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ	VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—º�ŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[Ç½×;ƒ÷…±ÿ`l?ƒÁ`0ƒÁ`0ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿cÂ¾#öÙé>·,Ïjoð­òw{õÕ†ú‡ÖÝ²‡Lûù=«mWèêòÈ2u_¤ö�¬ÿ8Ø¯–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿs�üy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇ�kþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”æ‘½Û�öàýðtLàœS6Ÿq`CÿíÌjfý´3–#ËéÜ°³?zÕ1ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝu�Êþê7m1‹è™Q]ßPW�Vç2ûS®Žåz]Ï¥zŸÒs�ý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ÑÎSŸ
+µmkBTúÎÊþèŽÀxœí��‘Û8FSHI!)$�¤�’FRHn�›wóîHÉY¯Ûx3žÕê‡¤¢�úùs†a†a†a†axI¾ÿþÛïÇ�ÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ªÃû�¼Ïâöð–þ¹»¶ŽÕo'®GW
+{>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚÏ±Úoù“v�[iZ_Õ±aÏJÎ�þ/:ùþüù×6õOÿ-¹”�92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwïèyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄiÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægH�ð–ö¾»–÷ó�üÏØñ�|†yž÷u¾Ä.½•üÿ†þó\þô³aÏÃ¦ŽM&ýwéÛÃäké#�Ï�ú$?Î]ùMço¤Œ\�ýÈ¾,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœôØgX #ìvçQç´“ög·Ú÷Bž™òîìÙ™^Êßuô¨ã�®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎß˜ò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û	ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}<GÈcåK„•¿1}ˆ¼§uåñxæLzÞ¦UþÃ0Ã0ÃPc[ì›ü<>¿g\=ö€c¿¶}ñ³M¾‹½ÃüÃgggÓêüàÖ	èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=Ç§H¿PÆîÛgçsì·ã/ÇhØ‘ñI
+ÇtýÜ~×{‘òçún^§}�¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅÿçZòï|~à¹_%/Ï,Îôp\€ËÉ¹yÎ°çZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌÜ¯5Ý»\í[½ãy|ÞÙÃçõÄ�8�ÔÏÝøŸgäû¿ËÊ±L{ä?Ã0Ã0ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒ�üÇøü\Sþã|<®)ÿb|��ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eû�î)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu
+ŸÁ¦lÛ+6»úßv´î›<™†×Ã¯‡
+¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï‘GÊßëŽ±š×Äzt�¸^vßä2)?;WmÆrõ5�üoäcö³ŸþIzì?ú¾˜�‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ý�üÓÔÅ"Ñ¯Ñí¤ô
+¹Ý1üÖóäÁñGg×ÿí{+Ò�·’×lûw<ý=}GÝ½ìÚFÆ¨�^ú)õ��¶ìzIpäG¿•ü¯ãKì¬ÖœÎ{Í{ÙÉßeÈïûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì?Ã0Ã0°š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç
+½?Þ‚‘�}¶¡åœXùçwíÅ¶‘ÚvÌ?ßå°ß©ð÷Dðÿ��ùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo	9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({Î±ß¯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç
+_[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´�L“øÇ<²?ç<n¢�Ñ¯n!ÿÂ>=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0×‹¼#ÿ5žßàøzæÇÑ�™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷UO7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý�~Îs.ãÚyœÑÿ�mƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä?Ã0Ã0Ã0Ã0Ã0Ã0Ã0¼.ÄP—~þ*ÖÎ1@G\âŸ¿äÜKÊðÞßrKXÿ˜µs2â±(ß¥òçºŽJëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽ�òwx‰ìb÷)“¿ëî¸_ÊK|•�‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òÏ±Qï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ	\áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ý�ûJY¹¯Z÷­Êêµ¢`%·Œ
+íÒ¤l9�…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡D�ç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+Ã‘Þ…Nþ9£àÝÀ}•{BÆž#t¯é˜×xî�ãÕ­s�XÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oêGý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f�™ògL˜ëz�/¯+Ø½[{Ž™ßºrðÝCôM®Y×q¦~áè[»{�y‹¼£®òÍy	cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú xfmkBTúÎÊþè‰¸xœíÚ�mê0†aa‘ÒAX„A¤‹t®NußêÓ©~¢…÷‘"B~ÇÇv‚Íñ(I’$I’ôßçççñããcºÔþ¿ ïãžiß#ýGªûÙl6Óåp8ßÞÞ¾Öó½s•×[ªØo·Ûïò¸uú�–ñßív?–RŸuß¯êþ+Äf¿ßÕžÔ�ú^û¨|¯}õÉñµŸm³4ë3�™¥ÕÏ­uò�ñ!½ZÈù¥9RÇUšÕþYæø×½åB,zÿÏñô‹Ä"ûÉ|~Ô>Ž/|çÜR×ªïõYçÌžE™®Gß”ë™·L?—:fV²\êº¯ÿ¾Pv³ø¿¿¿¿#R>œÓÛc¦‘± N°¿Òb�úÇñ=­ú¬Øð^Fz=öyN¦I}ê².ç3ðÙã?3‹¶�þœÌ¥Ã*Çª7Ù§’‡Úžé§ÜÆµ2~£zœí»öWúÄ°ÖgÏŽ#�¼ÿä¶g±&þ‰2ãyK;ÏwÊž2Ìv�m“¶—ï£¾"ßG³ýg’±Ê¼d~g÷»´<‹[ÅŸXÛlk=�þ^Ðû“ìk³íÍžGy\¯×‡ìÏ3Múœ^&}É<ýæßA—ºUüK•Q¾VÙö÷ökêIÆ�÷	Ò¢NqÎ9ñÏãè“¸iöü-yÖç¿$I’^Ó½æy3Ý¿2—üÛä8È=Ê°~Í~×ôßS—Z{¾Žßc5f2³^#ãßÇ6òwþè7ÿÒXã&}ý2Ÿ£vÄ<fÛ—Ò}Ÿ]k–Ö¨]sìlÌi–çK1_–s\—1�\§¾pNŽ³gÉ¹WÖÃe[ö	ÌÝ¬ÙßË:ó™ã‰µ�ñfÆšú¸Ríï÷XÛ2­,»úÌ˜±p­üŽ~La¼’í¤Ë\÷Rž¯Ñã’õmÔþk£¬™�ïF}—ó¸µÐFç[³ÿÔ}Q~Ùçõÿ6ä<˜Ë¨Ï«Ì²Ê4ûµFåÛÿÁ1£í£ø�ò|�þü?'þyüìý!Ë‰uæfø$žùŸŒ5ûÏ½¯þÌË9b=º§ŒA/Ÿü>»VîÍ3±=Û3ßóÚ£<_ëñïó(ò”ë…¾Žþ“¾Œú¼vÿ9÷Å>ú
+þG@S¿À³¶Ç¿÷99Gy*þü"¯QúöÿYž¯u*þùl§z;É{-½ÊØ/Žå9v«ý§Ê=÷Q–¼_çs˜>œc)ç,kæ:‰gÎQžÊÿ­%†Ô�,SæÌFñåùšwAæÛòž2v´í¼WÊcÔWql¦×¯×ãÙÛÁšýì[º¯ÜÇ}ð,éñÍgùè7ç÷óF×êû¨}.2Ë˜ãóÚ³<÷¶vKãz~Æ_’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$IÒþ-ÝfàXWBAmkBTúÎÊþè’8xœíÖÑ‰ƒPP±±±±q¹��‰Ù%ùtÃ9ðPgÆ¯«OÏ€á8Žsß÷—zjé½›ÿkŽû[×õÇñœ¦éqLŽY½–™š­ZÖ²,�ë¬a~}†¸·äX’o2L®•yŸ©üKÏüz÷—ìzž%µþ.×uòí'ÿríqÙç{þõ]Ÿçù%ÿôäÿ}’míûu¾mÛÓ;ß÷ùŸú�ëùÕ3�^ýÛ§–UúÞqí|à±0….È6˜ IDATxœ¤�w|œG™ø¿ó¾ÛÕ‹euËE–‹l¹Û±'NLz…\
+pÀq”ã€ãwGŽkGowÀ ôN!qz!Ý]–eÙ–,Ëê½K»Úú¾óûã-ûîj%;Ü|>ö®ö�wæ™gfž>Ï)¥$C‘H¤Ô�‚” „BAè]�@¢£R
+„H³£»>ŠÈÔUj¿R"„)�&è€0ÿ9 ”‘Ò¤n÷iÕµÚ“R"ìöæ‰’éaôŸü®¤üJføS¾[p))ÏSëH¤ÔB]7` &µ�K)Îwt]GQ”ŒÏ,l8Ç•ú\O‡ñ	 RÆbý�¡Xø0Þ7êdÆ_zŸãëÍ•ÅßKÂ‘Ä±±æ„°Æ"ìß…˜?�õ±X¿IÜÁüµ�Ä«·Ö>4æÐu	#×‘R˜c±Z7ö·µ{—>?‹•Ôu�>¶…ß2â*µ=)U„ÐÍ9‘&L™×Ñ|ø%ÛkÎ²`Ë�@EÁ zB$�f':‰"%Ý¨aNR7¦U K„4„¾øÒ�$�IT,$+8�¨ñ=Iç0	º=aíáxH[(ó7§b"TI{O17)ïf.Âd:ÆD“­;ê‹K˜4i¿“ÎÛ2ñº…~³¤çÕÍ¼ÉS	¤®ã1ˆˆ–Ò–˜Ç”Œ�fÔ™Ï`ìZB•:Ÿ—F ÓÇsiïY›ÐIûo£M‘±½d©kÌÂ“õ<uŒ]×SÖ3€®[8&�KïO (‹¯'1H‡)Q¤0¶ƒý³®ù¸²~Kâ!óúZè}G×Xëx±wœ}¤2I‹Y™™ù¹XÉÄp-Fw)E,$IÚ€
+K.TP€:ŠTl$ ã Ð¤)‘Šƒ€*Æo³ çÂ2¤ÅñR	—4‰òÂ¸I.fc­È”Í:ÈáQR$µt©Ð†ëb%9ˆK¨:_"[xLóŸ¿éåÍŽKJ�r)‚@Æ¾¬’*iZcHÎÑ›m÷â›Bnm´‹m$™&å:$E˜éø›ÿ‰-y.¯�s„£mH2öùŒSÚu/¾“Ò¨sü)ššÕÖÚUŠô%L¹SZŒZYx\)ë9uO'a’ó¤¿L¤(u�Z’còS"Qìß#ÎV¿—Îhm#’è Qóe	ó‡bC±”-±Ò�
+­Å—yWYLdNQ¥Žrñ:õeÃL�©­tÕÀBâÿUÍ“è&nŒwš†K�ÏýÓÕ€‹©
+fãHLSHb—Š«¤…!Óæ¶ŠU_ÓAUÌNŒŽ�¦Ä,ÑP7R7ú×õ‰„D.@¢ºTE¸J£…IéY¢i&6¥%	h	
+MÓ�\ª©VH�×ë!c£éÈ¹Fr)ï9M0™ÚZçÉºÎ¶ßüæ´IyÏRÿoÓ"dN¸“°¦6‹Å'�£¨.²³³)ÈÏIŽ×Ö&3õ“i/-Æ¼“CZˆ`eÒÒÇ;|ú"{Ç)4-c¦² ‘46¹A¸"Í§˜|ðGø®ÙKîÞËÑ¤†š•ƒÈ2m—&Ñ’ÎhÿoJ#aÙQ¦¦C´µµq¦µ•±±q²Y¬\µœÍ
+)YR4o`Ï>ÿg›Nã÷yˆD"È¸D:B…D\âñ¸xÏ»ßAÉ’"zzzùãc¸|÷n¶niXT³>{zû9ðø“ìÝ{9õõká7¿ûBQ‘z‚`(‚¡FE!
+±iÓî¸õfÜní:yüñ§H$$>¯¯ÏCUE9Ëª«©®ª$'7û¢“d•ÆÆ&Ž=ÉÛï»‹ì,˜œ41å‘?=ÎØØWìÞÉUW]1é88|ä8O>õåK¹ó­·STXÀÔÔ4?øáÏèëÆðâñxÐ5
+À�KU‰FcÌÎ‘Râñ¸	‡#ì¾luçíX‹óxS3/<÷wÝu5Ëªìþþô§'yñ•7ø} 
+¸ËíÁír#‘„ÃsÄbq„pœ�auírþæƒï%;;kAézœÖÖfƒ!|>+V,'';pÌ’ÈÙsíLON²uË&<˜…8Þx’šeË¨®®˜‡ggii9CGWåe¥lÙÜ`2ÈDÐ§¦¦9ÞtÒ�†´8‘h)’ðÜº®³¥a#uuµ àèÑÌg¹âòËp»ÝfÿóMÎ1�8qŠÙÐÛ¶n"à÷9`NÚ`�;ÁãžæÌÙv4-�"ùE¹ì»bo¹v?¥K‹�y4DNÚÎµsüØ	Š—³{÷N²³Rç"e}é’c�MèºÎÖ­›P•ÌÒ§‚`(ÄŸÿü255+ØP¿fA<;…šé™^xáU*Ê—²sçöðº®ñò+ÉÎÎfû¶M$5‡KJ±üj–6=Åð~�ÙGÅßÑ…ž@ïê'ØßGÑÞIÎÞ+Lý>Uý•‰( @uÛ*òb$òà¡£üè'¿¤§·MÓP-®�G©(/åýï{û¯¹"a‡ç7¿y”ªêr–×T’íÏ&–ˆ¡ºTâq
+¿ßk³ó�¡~ù«?ÐÝÕÏúuëðùÜœ¨NÝ=½üúw ¼¢Ü&’“Süá‘Ç‰'t–-«`ÍªU—B"¡á÷ûÑã‘¹ˆi§ƒÎÎnùãÕ�×í&+àE—ÆÄ•——qËM×qÃõûq¹\ó…G‘RòÜ‹¯ðÛß<ÂÖí[ØºeR×jº}Ñ¨?2:ÎO>GWW¹ÙÙ&‘\ŒÛBgW7¿{ø�¬Z¹’kßrE…$	úúèìê%7;�W!–Ð#‹ãv¹XZRŒ ë‚`0È†õkÍ
+`^ý?ýÙ¯©¨(5‰¤A<§§¦ééì¥ 0‰Ž®KÆFÇ	…#(
+äçå’ŸŸG".	ƒ¢ë‹Û‘ÅÅñã'ùÅ/‡êVøÔ'>ÆÕû®°ûÌ\Ñxœü1±X„�ÖãñxÀá#'øô?þóÁ÷ò×ï½/ùF†‰zò©gøù¯þÀ®í›ùìgÿ‰êªr@3÷†…wŽ®î^¾ñÍï�%ÈÏÎÂåR‘ŠaÿŒDÂƒ3¼ï½ï¦nM-‘X”ßýáO:t˜ï|ûël¬_›Q"t]‡ßþöa.t÷òÍ¯‰€ßg
+í†Ï@ê’‡ÿø8~ÿÇLLNSYQFUe3³3tvvsæt+o:Æ?|êïX±Üš38xäßøÆwX½º–5ëêæI'^†GGùÊ×¾Í’â<6oÚ8O“rîµP0Ä÷üeå•ü÷7¾@ àO©gµíÜ£}ýC|ã[ßáê}W.J$#‘=ô3¼¾†Ïíæ’µ6Òˆ¤“�Y
+öØ~B||”¥_þ¹·Þ„wÕrÂG	~å[L}ëAÜ�¾m[
+ñ9#zº�à™Sh(¼÷N\+kLõØhÕÙ›õ÷SÏ¼Ä¾ôUrs²ùØG?ÌŠËp)‚x<FSsßÿþùÌ?ÿ+ºü,×îßg·àóºQUA]ÝJ>ýÉ�QTTˆ¦%P„ŠP~“*Š ;;‡“§Nóú‡¸æê+lÄŸó¹–ªºðù³q»¼Éß\
+¹¹yLÏ¹ëÎ¿âÖ›÷£›’¤i ECªð¸\ø¼^„ªpÇí7qÛ-7095Ãkoá×¿ú-M'Z8}¶�O}âÃ¸Ô…'mllœŽŽn¤P8tø([·l@8<Ô©ž;
+øYäæ,ÈžÒ7ºËí!;;�¬¬[E/,ÌåßÿõŸˆ'4:^Ÿ‡éé_øÒ7hjnaã†µüóg>…ÇíF×ut‰!:æwddŒ¬œ†FFSæÿÎ;ßÊM7_�Ûí2ìÌBåÇ?ù�üñq²²røû¿û0;vl!ž#¡K~ŸoA™£¢aS¿ä�Ý]´w\0ˆä¢6qæÌÙsì¿ú*²¿åÌYÆÇ'›BÓtTS²m{&Á’¨H¡¹ápØ¬—n+3¾Çâqfƒ³¸½>î}Ç]ìÜÖ@$1µA<§¬t)š–Àçó3<2ÎÃ?JíÊü~ÿEmpqÍ –¶®h›Í�>þßùß†¸÷ž;¹ëÎÛYZRÄ\8Ìðè¿øåï8pàI¾õ?ÿË×¾ü9\.ƒÀ©Â…¢zÐu�®éóútÂÔÑÑIWW‘H˜ÉÉ)–.]‚åm7Øæ¡PPXÌá£�¼øÒËÜ|ãõXf›ôv­ïªâÂãö#ö?p\èblršÙž^:Îw°~íš7eúp!¥½œ¥I(Sœ
+¾v9>Mñý÷“ÿÎ;H�âß¾…šßý”��|ŠþOÿËý‘Þ~æ^x•x_?‰Éqâm(¸÷ÃÓ-AG1¬•)ö7AËéVþûþ—¬ì,>ÿ¹hØ¸!ÀukëX^SÎÿ{àó|ùëß¥¤d	›6Öƒ]
+P\ªBNv6~Ÿð¦¼oí
+E(x½F'¦ùýeçö-dçdáÜÌIÛ¤9	ª¡èOœ�L£u~ž·ÛÅb¹f}ªËK©(3þÕ¯]MUY	_þê·ùå¯GyY	ïºïnÜ©¤·w€�Á!²²œ<ÑB,3TBÇ²<¢èºÁè¤nsâL!HÎ¢  )ã 5ã7ÅM~¾;¥žÏã#7'‡DBÇívÛ¦�Ôbô92:Îàà~¿�®®>‚¡9²³ü€ �å%�•:_yy¹hšŽÇãaéÒ"¼7^OÞ<¼,V––°ti1=}ôõõ�Çq»Ýóê9%”ãMMÌÎÎ²zÍJûy"‘`xd„ìÜlºººŸ`i‰¡~Ú0Ë¡ª¢âVÝøs]Ì·³[ð{<T··ÛÍÊË¨¨(_p<ª"Èò¹ÉÏËçÕ×²ïÈ^ö]¹'¥½yš�ÔP]*ªª"Ì4‰†@¡`�_ýúa¦g‚Ü|Ã~>ü7ï±%7ŸÏKaA>÷‘÷144ÀÁCÇøþC?çƒýN£-ª¢ ("%"$Õye¨ó]]½¸Ü*“Ó=ÞÄÍ7¾CÍwF¤ûS‰?+€KUyîùW¸êÊ+È0m~f'²ˆ´ü$:( ¨óqœl[ÐÚzŽh8J"¡ÑÚvŽõk×ðfŠ"MH3%!a†ò$†Ç˜øÉ/Ñ§‚ä\s9ÿêÿÐó¾¿%v¾€âÏ|we}ùf~ó(®Òro¹†ò/þ'¹wßE¬·M1½~ŽÍ,„B8åû?ø1�]xÿûî·	¤3dt.Û¹�½ÿ]\h?Ç¯2Go¨
+HÃ)‹Å,9æIü«’›“Åé³m<ÿç—¬iŸ©EJ‰¦iÉ¿E’ŒÆâñ‹"Ø¥ºl)5	£QnºñZî»ï¯È
+dó³Ÿÿ†3g[í>�.@_ÿ‘HŸ×ËÈø8ƒƒÃ‹ök½¯(*�'å÷…|uV8ŠAØ3áÃç²œt"uA¦¶k¼ßÖzŽþ¾!<:{8ÑÔÂB¸ƒ0éº4‰Ú|	áR$€ÜÜlŠ‹‹ð¸]´·_`hxt|öF3Ûk>Ù‚ÏçcMí*»ÎÔÔ½½CäååÓÝÓMSS‹=6«-«I)%š®¥´Ÿ©Øó".—±6Ò×Ez‘Ä~€xBãégžgjfÖn/“©H˜!BÎ½d1ÑŸþü7t÷öQ³¬š·½õ¶ÕÖ˜c�’%K¸ã¶[ˆFÂŒ� ;„FË“îÀ2ŸbÍïðÈ0n�‡x<Acã‰S‰÷Ökš¦SPP@ÓÉSxâ9‹z‚Ô1ôÜTœZ]ºsÍ)4D"š[ÎÕå¦»«Á¹Y¨˜áàVÐ,HÅøÉÚÜ€6<ÈèÏ~Æø·Dj:®âB‚/½n‘—‡Bÿ–Mäî¿šxW7s¯G-* °y-B7&Ê"fIàŒÏ×ß8ÌÁCÇiØXÏ{v.
+èU{wòÐƒßæž»ÞfƒîtZ8cÿlÆ“¾�¥Äëñ PøÝÃ�ÑÝÓ¿hŸ�¦k$L>Y,Nvñ
+«("©–9Þ·`»î-ûXV]Íôô-gÛŒ~…3¶N i��ÝD£q|~¡¹§ÍºiÿG<�˜_t‘ˆÅG–É+žþÝ*G�5ŽÌá÷û˜››ãðá£�¡ûtïe2~ðÍ¿?‹††u~úú8k2Ÿ…`��™e ˜õkë¨]¹Âþ½¥å4��]dge�Åi;w.mM%y‰n!j†HgÑtÃkÕ_¬H	ÝˆÈÍÍã�ƒGxùå×Së¤KØÒŒ~’‡FÇÆ9q¢Uu±mK7¬µß·ê€{ÃÆz¾ö•ÿäŸø[Üîôñˆy¼.	ƒ`dt‚sç:P„ ÐÝÛÏØØø¼±9÷ª®1ªŠê6ÁäŒ£ÎükŸè‹¬“©©FFÆP·ê¢©¹…ÉÉ©ëg*v„”"Íè{Ý�ôÐ"ÛÕ•ÄNŸ'kÇ&²ï¸%Ç»r%á¦FÿýKä^=._€Ps#®uµ|ì ih33ˆâ|£mÝˆ§LRG8ðÄ3Dbqn¸îZ–¦ Z�®›±PRRVVÎ¾«¯ °¨Àš†Tã÷ûm�çbN�Š +;‹öóxåÕ7ÇŽF¸‹s¤Òþ·x‰F£Æ˜g¼a’Ûfüå¢I�Ñ‘qF÷ÆçØÄ$ÇŽ7²usÕU•„ÃaŽmLñôe+¤®§H’RÁä	�X\ÒL¶‘„qaIÂá§Ï´rùž]ìÙ½�p8ÌùŽNÆÆ3m–$³Kg|o®0Ô¯­£¤¤˜H$ÆÑã'}cddŒáÑ16lX�ËAŽo"+;@íª´D‚¾þAB¡9Þô¥¦šðºTWFõ’8JzzÅE�Q˜‘º®ã6|/½ô
+£c6,VÛ)ˆÅc)šPã‰“Œ�OðûY³¦Ö\É
+¦,�”’ªÊ2ö_s%99Ù,¶Ö�«´¶¶ÑÛ×ÏŠåÕdebxdlÞ»7‹B"ÃëõÐ~¾ƒßüþ³Ö"�ßé)©ctlœÙàukj)*Ê£½½“æSgK¦¢èÒˆ3œ6¡(]cö‰×ˆ_fÉý÷Qö/ÿ�lFÿë«ä¼íV²ö]Áìáƒ(¹ü;6êhÅW_‡¿ªK|þeFøÜÕ€E ÈTayph„®îòrsiØ´qÞàŒÍœ$7ÉH}Ý€UFîð\$þ’È‹kq]cÇöMÔ®\ŽyômíE�” S±D¾	)G�Ô�w,ÂhÃ(ª¯×‹�’¸©v¥Ø�ãÇšèéëãž»ï`ûÖÍ¡p®½ƒ��Á‹tÂÜ\™àš_ÝŠ‡[HÝN+R¦µ�J°ÇÆ'ä-û÷Ñ°q=‰Dœ‰©iÆ'§lRÓ4ô‚•/¥XÓ²|E
++jªA*ŒŽN,P×¨ÜÜr†‰ÉI–-«´Ÿ��MÑØt’ýW_ÁÍ7ì'‹Òq¡›þþÁ´6¬o:‰„fŒEŽßZcŠÇãèºQ_¹È8…�Äq
+
+òYµbù>rœ^xÙ‡E¨Rpf2JçoÇO‹ÅðzÜæÛ0%¥b=E•v4–6™B7-æk}?tä(y9yÜ}×å308LSS3Vè’…7«MÓˆ†#lÙÚ@MMŠââÑÇž¤³«7¥ž³hšÍÑ‰«4ž8I8<Ç»î»›ÚU+˜šž¡¹¹)µyí-T!g–mtò®¿œ¬[®Ã·©\
+Ã_ü*…ï¾�¼¿º·?E(h^D ôÔ‹DZZ	þù%&ù
+ßÿÜù6à‰p8:Î_`f&HV–ßt¸$é4[b¶ÒˆÝ´ÎØê¦
++Áçõâó{“}9Ú±Š®K¢±(›·läî;o£ ¿€Î®žyþE:2>'y—Ö¢
+ÊET*»ESÝvª”Öq3tiÛ{Š
+ïXÿIÚÏ_ /·€M×²nM-þœ£“ôš6ßÅ:7Â©’Ž¥¿„ð,X„H‘ö’6Jcœmm­ÌÌYº´„Õ«jÉÉÉgldŒÎ�ƒ,
+f­(¤àL’kf�‰&+�EUU.Ÿ‹áá‘Œ6\!‰D‚ã'špû½,«©¶Ÿ
+315Ã¦†
+¬[»šÜÜ\zú8Õ|j¸“{(‹ÙvÆ…% $¬	íâ6Ž�—›Ã;ï»‡ËkG<÷üŸ	ÎÎ¤ÚíMl°<¯×k‡ÞLMá=Š¢’››Cyi©Ž‘<6šç	()õb±8ý}¬¨]É•{wSUiÄ—<x„9['õSÂìÌÛ·nåö[n"à0=5Ã�'ŸYtÎ-ÿ†óo«DcqŽ;A~~>›7­§ºª¡ªôö÷ÏóÌ/Vaª³ºéaÒT�ÙGcôs_bøëß¥ä“%kßfïQbç/à©©B•m|<.”\?Á§_À·gùo¹ÊD¶•ô"U:™
+†ˆEcx½n|>OÊ�ŸI¢™†T¡ KÓó,\Wò]s£¥„ó¸V ë{öìdëÖ
+¸T7Ï<ó"M'Mƒ¼LUì3ßÎI1¥‰–°l•Ö1²Ôwã8&Ò8án/:
++
+HBK05=�¢@uUµÝž¥’ëRÒ?8HmíJ|~?•Uägç	Gé´mª>a¨uº~q“�;k‹.L£Z*kuÚƒ‰¸Æ~ƒÂ‚|Š‹
+¨Y^ÅÆú:Æ'¦8tô8áð|Éû�*ææÂD"áØ.Å³mÙ‹–––�È¢¯�iÄÍšŸÙÙY.tõ°¼¢’Êò2ûùÀàzB£¸°�²ò2Ö®YMdnŽ“§ÎžK…ËúTC*ŒF"6‘tª¡N"uÒp:,$xJS}²ˆV(dýúµìßw9y¹Yœnmç‘GŸJ�EÉ¾¤4lË9èèg|b
+·ËÅ’%E”—YDÒƒ™#Á’$Ó÷c²¦tÌ²o«ÞäÌ£cÔTUâõxØ´a99Ùô295C&‡œD’Ð�@ú}WîfÕªe¸½^}ô'›O§ÕNšc[fÒgà$îÝ]=œ;wžíÛ6áõú(*Ì#/+@k{ƒ#©&ŸÅ±b8?LÇ¼4²ùèšFðÈ¡k=GÁ�·Ø¶Ån,ÔÝ…ÌË"ç¶›qWVRþ•ÿÀ¿{7ÃÿñE¼»wRüÁ÷¡+¦ò&Œ‰6Î}&‰EÑt�ììì”¸´Œj pfa‘6R…n|ÓµªÍMLbly‹¬Eiœ¥c.d,ð›nº–¥%KâáGMyÕFNÚbIþ.Ð´8.—ew²¸YÇ€¢˜’‘’Ú¸¹˜»zúho?ÏÚµu44¬³ql�³¯o�óç;©¬06pYi	•å¥Ä¢QŽ?ÉÜÜœýŽ³èºybJÄIïé_êqK¥Lo))ýÃÔÌ'›[Øº¥�ââ"[¶4 …Î©–³LNNfnÛ<Äàv»ñz½óž¿øWÔ,#?'‡X,nÛpÓËääS3³lmØHnv¶M<›O�&Ëç¥²²—ËÅÆúuxÜnz†l»¤±U¬M«¨jš„=M»=.a¬%·'s™E´,›¡¦K&&'¸úš+Y¿n
+‰„Æ�§ŸOñÞÛ.73[W8&a2óééYB¡9t$ùù¹d›§½’Düâ6`‹œf²ÉZí´µµ34<BE¹ç¹bÅ2òór™™™¥«»'¥®Ý®¢ º<ƒA¼^o{ëMü^B¡(�>öqK ‘Ø†ËåBQ•y^oßíç:ˆÆlX¿Î„cKKŠåÕ×f|'ÓQ„H†ýØ¡¦ºŽ§t	îº•x®ºœÈùNô¹‰©Iú?ð1d÷ ¥Ÿü8z(‚
+ëéfòç¿£äÓ§è=÷!Á°AÚ‡ý­Í“`vfMÓðz½ñZÜÌ’(“*+BÇ¥º˜œšáèÑ&Î¶ž£åô9šO�ådóiÆ'&í÷¥4¬®—íÜÁÎ�[ðù¼4oáè±&GŸF-ÍT÷\.OÊ#PÝ^ÚÛ;8|¤‘#G�¯½~ˆ“Í-$âIÎf/aLª»‘Qhrj’‡~ü+fgƒ¼÷þw�ŸŸgNŠbŸM?}º•‰‰Ijk�ø=EQhØT�Çã¡½ý<íç;S&9‰6ãïô´h—â˜ùËJ2ñÀÔô‘p„M›lØª*+ðû|gBôôdlÅEºuiR$Žu¦³zõ*jjªB¡¿�3lÆjàÜù¢sÖÕ¯1™¤ÂôÌ,ÇŽ5²~Ã:ŠM‡bUUþ€�¡¡ú†2Ž_·{2ófsÚš±˜±–t�©é Á`ˆ™ÙYffƒLÏÌ2š—dB0Tù¬@€½Wì!77@Oo/�<òxg)ÌÆšÿh$Š¦Y»rr²M9")y¾9KLj¨�s~:NÀ`u�±f‹ŠŠÉÏÏ'Òx¢ÙaÿL}?‰#¸lÇÖ­Y�Ëíâè‘&Ž9îÄd²O©¤�HçéêíÇëuS¼Ä˜ÃÕ«kY¾¢tAssÎ’jæK�;—a¨Ç” M$A|lwñ\Y>úÞý!â�]d½õF&ò¼õkñmXC{ý^JÿãSøöîÂWR@î�7˜àëèByƒtcÁ
+aH6 $Ãóbƒ6l‘ÎŒ(†�|�lzûù÷ÏÙT-�þ§gÆùÔßœÛn½1ÙŽÐm#¹"×_5Ç��`htŒ‡ùÛ¶5˜ÜÛì‰×ëÂëux*Í9ðú|<và)}ì)Eàñx™œ§º¢Œ/}ñTV\Ô­((Š‚¦ëDM,
+ÑÕÕËw¾÷Ï>ûŸúû³÷ò]É^¥t©qäX#yy¬·�úI®Ø½“ßýö1¦§gNžbq.TE1³%¡ãv;ˆ¼ÙÆ‚*ú%”ÌŽýÔMvº¥TW&Ï;WWUPX�Ïøø]ìÚ¹u~ÛL"¡i$I3A&Õ/S1¹Ž’ì¬k×ÔòÆÁ#Œ�O1;;K^^®U]—¼ñÆŒ}rÓ IDATEPZ²Än£­íÃC£Üs÷Ûìß–ÕTQR\LwOG�7±qãºÌ&)Ê|í#½¨ª‚Ûí!—|ÿÁó�‹¸fDl„æ‚,).âsÿöÏ”–.1UyÅÖö_}%¯¾ö*ÇšÎðÔ3/pËÍ×SUUždTæ¦÷x<¶¢iÉ4vyyyÂË÷›bœC°$8+T
+`rrŠÆÆfêë×±|ù2**ÊY»v5ç;.pøè1î½ÃÊw¢ÍÊ_kÀÏÛï½“ÖsÌC<ùÔsìÚ¹-%ú!‘H�Ð){Ö*šÔ9}¦•âÂÊÊJÈÏÏeÍšU:ÔÈððs‘0Ÿ?ÍÄ6.!“'nt‹XºŒä
+Ó¿zÿU{ð¯\N¬·ÏGÈ¿çýŒ>ø¾uµèŠ òÒë¸JËÀ<ºd„tÎ]è†cH¤Ú	…—©–,>A]“LNMÏáóù(..´m�‘È…ËØ»gyy9hºDÓhZœ�ë“­èržÍqûÖÍlßÞÀÓÏ¾ÌÉ“-=z‚Û·`³:]š^;—0
+þ×ì»œ�×¢iª¢‹%Èø)(Èµ*’Ð4C2Tž|ò9zû†™™šæ�71:>ÎG?úA>ð�ûQTÕ±á‚335CGÇV®ZIUyÒ~TYUNaQ>ã““tw'c=S7+¦‰c>Fÿ¯¾›L\×m²³¦æÓdådQZš$>••elÚ°ŽÇŸxŽÍÍÜtã~[zvÂ–Ð¸ÍÓ(V—j“´ŒeO.+[J ËÏðè(:{¨¬¬°Û™œœ¤ùÔiÊË–R^‘tbôáóûØÔ�<ýU]UA}ý:.tvÑÔ|ŠÙÙ¹¹ÙóÔ4)�@xKkXfÕåBQ2ž °°€¥KŠ‰%˜Ãá9
+
+sð˜ÌÙy¬Ôê§¨(Ÿ®»ŽS-ç˜ž�åÑÇžä#~Ÿ-};½Æ–Lb†UI9·ÿ‡žÝ´�Œ215Í�ë×˜§·ÀåRiØ°ž—^~�áÑQzûûçIaJñN86oªgÓÆu<óü+œj9Ë+¯dß•—ÛÛ3)}&Û±Æs®ý­­mÜxý5äåæ`­ÐŠŠR¼^#£ãœïèbãúµ)k+ÓZsISR³|ÜRQìy×_ƒÞ?BìÄiòß~7B�iiÃÍäà‰éiòÿö=ÄÛÎ�k,ùðß"¼¤ÔQ-Ên‰©–­Ã‘k/Ýû¼È0‰òÃÿ”ƒo£¾~
+ÿþoÿdÇ™ÅcQJK
+y÷;ïÂëËlÃ²�â°Z¿ß|Óõ9z‚ñ‰i~ÿ‡ÇØP¿¿ß8¬¸T´„NÔá@0è½$	sÙ®íöñ°…Š4™�ÏëeltŒ?ýé‰„NÍ²*xàÓì»ò²dÓi“395ÃlpŽÝ»—ár[„Z¢ª.V®¬æôéVNœlfbòf
+òRÞµø¼®Ï¶Í¤î¼éb/R“éI�nÚ¶ÇÆ&8}¦•
+ë×RV–$>>Ÿ�Ý»wñÜ‹/ÓÚÚN{û¶oß<_º¡ºëö&¸T§�“QknéÒ%dgû™�
+qäè	öìÞaKVãã“Œ�OpÕ•»&œ>ÝFiy	%K­ã–¿ÏËÆ�ëxú™èdfz–ÜÜìT"c¢9‹§Äÿe‚] ˆÅb¨.…w¿ë^vlßl–›£�fÚ9”ô.¿â2âiÎ¶µó§Osùå—±¹a½�GE¤&üUCX‘RÂEà»–
+�Óáã³^› �±¬ªÂlßø}EM5¹¹¹ô
+
+1Ð?›ÒÞ5º3¢AU]Üù¶[in9ÃØø�x–�;¶™¹ ™Š0‰k§[Î‰EØ¹skŠ¤¹¬zÅ%EpüøI6šZ:œøP˜X!-5
+„Ëƒos=¢´ò³ñ®ZGÎÝw"	D"AÑG>H n5JVÞuu¨eEfã†�@W$RªBbœçL�)¥/¶8±Ôt�¾þ!Îµ_ ·ßq¬H(¡×4Âá¨ÕjJûÖX
+{�´ÓJ
+ÓC·©a×\}BÆúæSIOš†Jæ<6foAñxæãdNO·Ä¨'‘\ÃuìÜ¹�pdŽeË*¹lÇf‹˜:9dwo333ÔTWÙõÀðXoÙº�×C{ÇÎœ9kÃë„]`Ji¡4ÿgé(IK‰ÀÊÙÙÕE0â²ËvÌSê×¯[Cye%ã�Ø09‰€Ëí"K‹FíßÞŒ-ÕÙ^míJª*+‘HÎœiM±K¶Ÿï@…�Ž|ããã4žh¦´´Ÿ'ÕLQUYAaa“StuuÛpYã7L:"E’L‡+ùÝÌ@Ž°Í9†*i¨âj†ÌãÖ±J^N6ï¼ïÜ.•H8ÊO>K2ŽX ë:ªª:lá˜¾ÌÌ	#ÞLqâXˆä¾8zì8^Ÿ—+U[—†}~É’"Š‹
+ˆGã=zÂÞ¦éR`êëlÙÜÀ5W_I"¡Ñræ,Ï?ÿ‚nCRM?–ÐÕÝKYEkÖÔš�öÝººZV­¨AJ8y²…ˆ�ˆdáµeÊæ*ÎÔV—±©irn¸�‚;nÃå.²vmÇ·j%‘¶6ˆÇ‰�
+£.-!üêaâ¦A"�tL„ù‰Ðì
+äDˆ¢(D£QææBéS@
+w0ã½rórñùü)ÆfÅ\ó�¦ÊŒS?Ö’Ž†›¯¿–‚ü\Âá¿øÕï“I×Hè:ZÚâÐQ!@éý&%VÅ¼#(�±¦®–·ì»¿ßÏ‘c�¼~ð =ƒ¨Ù„¬Éõõcø³|Ô®ª±1aµ»¹~
+•e%LNÍp¬ñ¤íÁ´Š®ãˆ”s·Nþ’“,Î6’ßmÔˆäbíêÀçõ±¾nµQÇñnAQ¥%ÅDÂ:º{2ºë¦}Ê™XÄ‚ýb„2ÉlX²³²ØP¿·Ka|b‚Ù`r­9Ö„ÏëIÉy®½›¡ÁvïØj^‘�”–—Qºt	ÓÓ3>Þ”‹®K4=ó‘Xëo'1Jèš�3Å`ò‹cÞ…ißv–Í
+õlnØ€pððq^~õ°ù†Ãb
+!.Õ…¢¿-—Èùæe§é i+4~Ó1‰¢"ì,T–9`rzš×gýêZÛÆkØG¡xI1+–Wã÷x9}¶ƒö]foIó€‘iÈ¹÷�g7^
+e¥EÌ…"<óü+Œ›Ç
+u4=máp„Žö.–/«¦°°ÐD¡Át<.•-›Öáóx¦p(‰'{ü:Îë%Ý-¾@.ñó]D;»>ÌÜ«¯!
+Š÷ô1ò�ï2öÍÑÂs¸WÔ0ñð#Xîy!-‚k(}:F*,çº)..Æãñ033KÔ”¤sÇ9¸ƒuŽw!û‰*œ§.²‰ÌÕ‘´×IVÖÖp÷=o%
+ÓÚvžƒ‡Ž%›R„�&ÊþÑ‚ã�Í	aœ¿Ö´W\±‡µkV366Áë� é	›(:áŸ˜˜âdã	6oj`åÊ•óÚ¬ª®býºµÄÃa:»ºH$Œ�–î%DdÊ^I—&±e:á­ë:§[N“Ÿ›Cee¹‚]
+òrY[·!Žm¤»«wÞœ
+a8Âœ!@óÆµLÂ3Ç¡(‚Õ«kñûLLÎÐÖÖÀÈèG�6²ti	eŽøÈÖsgÉÉö³ÕT“ÐK*+ÊŒ2ªÂñ�Œ;Î"KëŒ´ ãxæÙ.±Îm-Vì˜Û4\~ÞñŽ»ñ{<„B!ž~æ9ó¬~ÒmeÉq»]†
+®K;9‹3=¢±ÇæŸ%BMY-�î®>ÙsùNÛæé¾öì6üÃÃCœ´½Ë&ñÕ%‰D‚LY“êV×róÍ7‹Ehk;Ï‹/¼bŒGU‘r¾ã·»»Ÿ¶¶vêVÕf”ÈËËËñû}ŒOLÒq¡ÓîÇiªqÂ±8‘¼|3G�Ð~ý­Œ|ú³}áÄû,¯Añz)û×(¸íV
+>ðnâ]]Lÿê·fÖØUc¡be“â´KUQT]×‰DÏ‚"ç‘/Ã”!p¹]¸”¤¡<S±¹¢ý²�A\n¸~?•åeÌÎyü‰§™™
+âv»ñ¹\üŽ X’Î%FìKfM×‰„Â~êëëP…cG[8ÕÒê€19¶‘‘&§'(]ZÌìì,ã£cŒ��3:1ÁÄÔcÓø„Ketl’±q#î0iS±¤Ã¶c;m³¦ãÈ:š˜ùyòÓˆPH5m `dtŒ³­mxý~†FÆ›d`h˜ÁÁa†›˜ ¿0—@–�þ¡AÎut¤Àcxµx<ž”3çV�K#ò¤Ü©TVº¿Ïƒ®KN4�àtKC44ÔÛ'¾t)9w®ƒÚÚU”W”¥5j¤7Û³{'y¹
+Ž0ì ’FZ2Ã	™HÄçIöv+NüKƒP^üì¶“¸Î/ë×²¹¡žHxŽææ3üùå×QT‡mÍ\Vùùù¤”LO[Y„’í[Ä<] I±u§I™fŒgç;:ÉÍÍa÷îÌ	p·nÝÂÒ¥%$4�Î]æ`’p*ŠbÚ‹�~£�+ö\FUE)3ÓAž|ú9¦¦§ñš¹EÓñw²é3³ÓlÙššvÑjwõê:òòrˆ„ç8q¢ÅN2’É‹$BÔÃQfž~16NñM·RðþwîêCïº€gy5‰ñÜëëP³ŒÔø¥ÿñ¯ôôïqW•Ø»×péIÃªµ±,¼.U‹ë¶”iB„f¼¥ñÜ¹ø¤Ã–—*…Î/¶óFImÛ+’äsÛ­7ð½ÊÉæ3<ùôólÙ²Uö™j»ÓitIŽÅ8·­ˆd^Ê+¯ÜÃë¯ãBG|ì	6Ô¯3“#$yVßÀ‰„ä©'^àÈë�F+ayÞŒˆ�`(Dii)ãc“>|”Ê·Þ’ìØÌ†­ÁììLòç¤qŸN\ÍÇaòÓ¹YœÏz{†¢Œ�·óŸ~·Ûg¤VÓ4$:ªK%œ#/?ŸÙÐ]]=vŸ€|oyhm¢<“.Šó4Ø‹‹
+XZ²„©é­mç™œš¢»»E\uÕÛL099MWw?ŠPøñÏ~cæA•$ô.Å…Ûå¡ ŸßÏää�zY¿¶Î€KOr}bž®v_ŠÌîœ�ôY‘f«wÝw7ç;:çÙg_äÊ+v““—�Þ§ÛGð*++Yº´„¡áQFGG‰Fcö½A©¶ÕTXÓ½¾3�¯¢v÷ö
+ÎñÐO~MnÀK$&q¹4MÃår1355…Ë¥ÒÓÛÇl0h&Ï°ö¾@w¤›K¶/©­]Áí·ßÂçœ?ßÅ+¯dÓ¦
+¸Ýî8t]§£«]~ýÛGxå•ƒÄb1¤©ƒÛ­�FG£x½Yœ<ÙBOß5ÕÉsûéeA"ïëeæQôw$píµÆÆðz™9tØp”´·2õ£ŸRôÑïè$z¾“âO|Œñïþˆøl˜Ü›®CÐ0¯žVüš±ª«+ÈÉÎfpxŒÞÞ>6™^¹Le%ƒ-ÆœN“p&ôÌœ;9‰©ê¾“p›�qëÍ×óÂ¯Òz®�W_;„®ë¸Ü;Û¹YÍŽµÔ/áÌ­å”±KC{vï »»—�§èëdYUEÊ:ÞØŒÇãå–›¯Ççõ¢éqMCQ´X�ÇƒÏçáùç_¡µý�'OqÓ�×ÙG<u)
+â$%�@òŽ—¿Ì›iá0•Ë¦ý4ï7êëéE‚Ûo»‰²¥KHè–7Õ
+ŠÖP/¾ô*MÍg¸ÐÙÃ\8b{,¥¦v3-aãý/u2X1¸………44Ôs¶í<ãc´µu008Dyy)Ë–%ÏkŸ;×ÉèÈ8%K‹xã�C†Ú*$R((¸p+Õå"'+‡ñ‰I<ÌþköâóÉ�ZÕe„re²µ:áw¹\³ÅV»Áû"Ï¥A(7l\ÇþýWóãŸþŠsíxê™QL§�…²œœ,V,¯¦édÃÃãô÷š–´½À|bnïEK
+MÛ�ÓÓ3455“——Ëàà�á°}ímR»�Â¢|‚¡9ÚÛ;hkï`ÛËË-±öJ¦¢*‚}Wíå©g^àtK�=ñ>¿OÚ©¬xBcph˜êª
+|^]]=èzE5²'yT�êvQ]YNk['ƒÃ£´µ¶SS]itæˆí6$’jQ1êŠÈ€ÏF²+7�Øô2'ï²Ëˆ
+Ž=ß…«¢�éˆí–þãß3üÍÿ&v®ƒ¢Þ� 	ÃVi„$Èªªª ;7›Xï §O·ró
+oA¨Ê<©Á­H"ÐW)“î`[ä¿Ø&r\½�á½NÚ4
+
+ò¹fÿ•tvwÓÕÝKoo	]PX˜Ì¼-±l¤dô`¦	óî’¤zÖ×‘ŸŸÃÈð‡eYU…
+ûØøGŽ¡®v9ï}ÏÛMûN2¹‡³ô÷s¼éCCCŒ��Ù®Å�"�Ó>ÎÊþ„2)aXcs"ÓøålÛ9JJ‹yç»î!‘»Æ'&8|ìºèíé5.¼„ª ¥m)ÍH‰7oÌ«Á˜·oÛÂÿô$Ñxœ#ÇNp¦õ•U•ŽKÅ$���D£>þ±°¡~#‘pÐ@HÍ°é©ªÊC?ú)�¿î¢¥åƒƒC,_^mä+t{'™L2Rþô5­˜R~&àB%Õ�iç»×]»�gŸ{‘à\„Ç<I(&/7/EÀØX¿–O>ÏøØ8¬X±Ì„)¹÷¬O]JÆÌtlÎìó–©ÀYÎ_è¢­­�èý¼ãÞ·�GQºžÀëv›·p
+Ž5žä¿¾ð5FÇ&9xð([6m´µ;!Ä<¢ç$Þ•¥¼íö[èìì¦¿oˆGþø¡P�#-]__?gÏ¶qï½oã=ïz»M|±™‘ÑÖ¹ö|ü“�ÇNë3uo,h“tæã]W‹6c�SÕqåçá]¾¥0ÏÚ:\¥K˜zè§¨Þ<*¾üybý½„Ž5Qú¯0óð™þÓf':Šžä&YYYì4ïÆi9}š±‰ÔÜxÎïº”¶ÝAuœ�ŠyjG&7ìBL×‰&«m)�9�'·Üt+V,cfz†Ð\„D<–šPšY™eÑdŸö0%NÓ‰`•íÛ¶ÐÐ°žH$Æ“Ï¼Àl0šÒÓÓËÈÈÛ¶mIö½À¹ÚÒÒ%¨ªÂÌÌlJRS]—0
+¦…ÔiL�”-Ì÷35&&¦8Ùr–¢¢bGøLfÖoXGQQ>CCCœ<•L>�ÅŒEé´y½	b>�¸š–”,!?/MÓxñÅ—éí`ÍšÕxM8šNWw7uu«hØ¸¿ÏMAAùäåQX˜GNN�€�Ý»/£ ?Ÿ‘±1ºº»Í¾t‰ �kÒ�‚f‚SùPÓ#?Ò‹°\6iIT,	Ð(:«V.ç†k¯!47ÇØøCƒCÆc¦ƒ`}ýZòór™‹„éí´á3¿õ¬½!žx’zà_èêéudH°\·µu�••ÍžÝÛq¹T²ü>ü^7Yþ.—‚ÇcHµõkë¨¬¨0ì’��D¢V²¹¯XyV_×\}9u«W153KgWÁ`(…	;ÞD4gÍêÕ¦�Ó°sŸÖw•ššj––�Æè¸Ðe;�“xH–E7ž5kq;î/q)dïÙƒÌxWQ>Bu1òÝIŒ“½qÁW_eâkßÆ]¿Ÿ¨)QìsÜ–MÃ¥ª\wí>JJŠik¿À™³çLdX^Z'Ì*n�a{gÍÜŒNã±ë
+\ó»4UM‹xjæ÷„nµ¯;œVr_(,ÈáÆë÷›ÜÄ��ª“f›RâLIgõgþ•ü.1C7Îòóó¸|×²r²8ÛÖÎÙ¶óö³žþA¼>¿yý¥ÕqºãÂ€iÝº:
+òsålk²
+L¯¥”:Ñh8åw#»Œž"ÝcS�B€PPS�éÄëlëyúzXW·
+ŸÇ�äâ¦××i;®«­eMí*ffƒtvõÛýišqs•Ku¡XQÒ)Ef’§¦1YKŠ.,,$/7‡D,A(Åï÷²iã[â›œ
+ÒÕ×ÇúuIÂiÀêŒ0æ¯ººœ²ÒbBá(ÝI›ª*„qJËÆUjP¼… „ždÖó‹Lã/†%œª�^oºéZÊJ—
+Íáv{Hh1¬P8‰¤¢¼œµkêƒ<ÒÈÔô´ñÌæ#¤×¬K�CGyõàQzzûMð“p9g¿µí<+VT³ÜN7§8 W±œ’>Ÿ�Ò¥¥(B06>•L"$R×ˆ¥9qÓƒ»óóó¹ýö›ñyÜ(Š·êI�ãXcKŠ‹©­µ2ÌûŸÓ1êó¸ÙT¿]×ij>Í¹Ž&¬ó—‹IW~‰ó}èÑ 0{¤‰Éß?Zwe5ÑŽnòÿö~"‡Ž0úÍÿ%ÔÒŠ« ˜hgŠâÅ¿±Þ0,k˜jqª³jår®ºb‘p„ÇŸxŽ±±I¬óÙæv@ÓÌÎÎ�F©©©A5Õ\EB £
+ÕVù@CˆÔ+TÅ¸ÜÊd…%�ÓÉ
+që-7²{÷v¦&'L© ‰S0œ1ªSZp©r¿s³‰žFTvíÚÆªå•D#QxÚv`5�l¡0?�ŠÊÔË¡R%@ã³nu-+W® 4äØ‰F¦g'M àÇíñ
+¹ŽÓ$€‘ÐÄ4{¤Ø…ãÚ„4uÑù	Ä”T¢tôX�€Ÿ-¦�É2ÆÛ’¿£þ’âBVÕ®DAOÏ3SAn!SC°ŽÓ9s&ÇþfJ^nuuµ†¨BUe9«kWÛÏÏœ>Ã`ÿ«W×ÚcuÆÙ:Çî÷¨¬¬ÄårÑx¼ÑtÒ
+ÜnŸaP„Q`�ôrÈG\7Ò+€ãn]7�Iq]
+ƒ¡kš$é×HªŽ–º†ëÎ;n!ž#�£*jŠ™àí÷ÞIaA>‡åá?À�âTc¯è€y‘×³Ïÿ™Ó§ÛØ¾e;«VahÖt®Å™ÙgÎœ¡vUMJ²[‘ÉË]n6®CQƒƒ#45�6«¤T“ÞºEÊþ}{YW·šPhÖ ®&�ˆÆb
+³aãzJ–˜÷…;J
+Uv]¶“üü<Æ'&9ÑxÊÆ‘qKÃ%¨ÛFC±É1d,ÁÄ¯~ËÌÏ�ªÐgBüÕmøêV0þýŸgy9ÌEIÌN¢…¦(¸ï³S�T¥¹Y,œÀ+ŠÂ;ßq76®ã¹^à[ÿó ÝVvR—tvõñýüœÆ#Í”—•ðö{ïL:NÐÑ´8Š¢àñùÐ4�DB#¡	â	I,ž@ÚMG“Z!KM;/LBî÷y¹é†ý¸]*Áàœ!Ý`Án]
+ñ„N"‘ 7þÅbqâñ¸™ÖÉ„ÑLªk|¦NZYY×]·Ÿ¬@€W^=HÛ¹‚¡'Ž7SV^FV¶?¥~*±2ÚÏÎÎbÇö-¨ŠBggCÃÆ)–X,F,C�`0D,7“ÁÆ‰ÆbÄb	¢±ÔÔþš¦¡%âó¤›¤�Êþ]7p­™„=OÐ~þUÕ¬\¹Ü„ÓŒtxE�†s¦¬´¯ÇCkë9ÚÍP k|2MõrÎÓ_R„€-[6âóy‰'4jkWPVZb??qü�@vÒ6êk’`Û%+ ¦¦Šœìl.\è¶O<E£Q�a^³`½Ÿ
+‡ÑF"ÃºÏçIÎ³0/¬sEU5˜ŒnF£ít¦	pÍ¾½,«®0ò”ªI­ÀBß†ú:î¹ëñ¿úõøÅ/fllÒ0ÑˆD5žñ5¾óÝ�Æxë7R^f‡ë¦_À §Fƒ-gÎ222Æòå5¨u[%wz©Á8“½téæ"aŽ7ž°ë+
+)&©LEJ�ìì7ß|-�€ŸX<nïñÞž~¦§f¨_¿&eÀó×�Q¿¶vK–ž‹044’<ãž¢±-v* Ï„ˆ¶œcä{áŽi,ýçO<yšÑo|“x$Bù·¿N¤ù³O=MöÞ«ˆœiÁ]]�wíz—í0+BŠ”¸5'E¯¨(ãÓÿðq>ÿù¯ðØ�§8qâ$—íÙAII	]]]œhl¦«³‹åË—óÀgþ�:Çmv³3A‚³!NŸiç3Ÿý^¯×H6¡º‰E#$ú›¿fuí
+b‘8³S3D#f²×y^^áàÍ°kçvîØÆc�?™r"H×4&''	G¢üøg¿àÅ—^2³³ø`(Èòš>ô¡÷“Ÿ“M4fll—Ë…fð÷�›eïÞÝüþ÷âÄÉžñÏìÜ±™æ“§¸ãöñ¨©q‚éª‡UÖ­­CJ�¶sçèîê¥®v‘H„©ÉIbQ�gžy‘¶sçQA\K›P—ÌÍ…¸ïwsãõûˆDãŒŒNPT8f‡bŽ-«O‹ËÁ\(ÄÔä8AÓ–::6FË©SìÜ±ŸyÌÎ"¶I“—Óö+–/#;;‹ÖÖ6^~é5¶mm �399Iv–×z•ÆÈþÂ²zõ*|~ƒƒÃ”——cE\$§šOQ]YÅòeËì>3áÝZ3›6mäáGÐÛÛÏ/¾Ìúuk‰F#D"‡GùíÃdÅòeF0³Ä¢QÂá0Õ••ì½ò2¤sss$txâ©çikoGKhXg·ã‰8uµ+�³ÇŠB$a.rœg_xœ¥¥%ÜùÖÛ9~â?I1YãºÿÝï ‹óÐ�Áw¾÷#;ð+WÖøèìê¥í\;R—¼ó¾»xÛí7ÚmÇâq3•[È-:xð(R6Ôo°»±{²]·	`Í²*Ö­]Í#|‚³­íÌƒ T‚Á�ãxñÅloÏžÝ<ýü‹<úØsD£Æ¾zåõƒQf%+Æi›DÛ¸3™]V€¼¼<&''9ÙÜÌØø8%K–B¼Á‹I5?utWq.ê[ö¡å�{í^Šÿë_þÔŒ>ðŸ”á‹£à IDAT}ëKx
+
+ˆ�Œ‘{ÿ;ˆ½òþk„’ä$šTQ­P˜´Ù•R²iÃ:¾òÅãÅ—_åøÑ“¼öÊAÂ±.�‹•UËyë·°÷ò]¬^½*åÝ]»¶¡K#7^"5®tP‰˜†×íÂð˜×eJj–UòîwÞmgr.œÔ°cz½7ï{Ï}TUU°bùr»Ï¥K—pÿ»î!Ž"R1sN**ªËEh6ÄÒ¥Å¸Ì±º®–wÝw/±xÜVåÀäÈBP²¤˜wÞw7õõkÉ
+�ºä£ù û¯¹Ò†/]åKÇáêÚ•|øoÞÏèø(ÙfÜjUU%wÞy¡`ŸÇC$Fu»HÄx=>Z‚HxŽ3_"65¬çÿ}ò#ääd“ofN±¢	œ]ºÝ.n¹ùV×­b¥™KUî|ë-lÛ¶Õq×	6ì©86~[SWËG?òÎŸïfãÆµ€d×®í9ÙY,).6ßÅörþ¥áK%K
+¨©,c.´Óg	¡0>>Š®ÇÙ±cªj
+ÉtO¹õ}åŠêÖ¬bÚÌÂ
+�W�CII!^¯�^|…ç¤‘Jšc˜�™eãú:ö^y~_€‚‚<b	�×^�W^}
+‰b„”Œ��qûm7°sç6Ü.…¹”•-±/*Kg>éžé}ûöråå»ÐdÜ¾¾Á€]i81>ô�ûY»v5Ï>ûgZZÎp¼Ñ´W¸zß¼åš«ØsÙœ#;`IQ>Eyv»3ÓS4lX—Ô �ë6SŒu›\GÆzÞ±u3/¿ò:ñxŒ±±	²²³ÉÏËqDÌ/Ò¶Á
+rs³¸þÚý;ÖD±y9`ç…V¬\Æó8lÒ¼G
+~¬øÙµ}ÍÍ§˜��áTË®Ùwå¼~…\D‡Ñã1³sÄ›èýàÇÈ½ÿÊ?û¤Ÿ~€±¯‘âOþ3_ýwˆGÁí…X< †ÄcJ!è©š!)N{X—™D¢1F†‡™›ÿÿöÎ;¼ª*ëÿŸsnËÍM/7=$�@ �„* ‚‚
+ýéŒ:Ž:–×Ñ×2:£ƒŠ:vPqD°â82Ê¨XÆ
+D¤w	-!	¡¤�@z»7É½ç¼œ~�™çýçý=ìçááæœ³ÛÚk¯½öÚkv§ƒÔ”dË�dÙ¸?zš¶)Y’-7u¬.þ!;#ëE¥ÿw!¥úª?ëWà…xù„ÒætÄ$HBì�Ú¡€­Z5k÷¹:$ëS?Ñ•åÓr}Ú`6-håôEÄþwRmÍ1|~?iiÉ„……�¬Äd©ª­Á›G¤'JÝeh¦ýÓSF¦îX=í]]„»\¤§¥r¼±�ææV=¢¡"$4I¦hS‡“¬Ì4ºý½TÕÖZ„¨èæÈôt÷�7!8ÑÐŒßï'%Ù«^“íK„Ðv666âïî%%9Q´ëæ´Pÿ.RU]M ¨Øå�tP­·Ê]¬æ–[p:í$'%ât†QSs§ÓAbbÈ’j¯ÖÛ¦ÐÕïï¦ªºAHIN ÌFum=žp·
+tÜÏ Ëj[EƒG«ªˆ‹�!**‚ªê:lv;i)I†9ò”¼"ÓÑÞNý‰@"6&š¸8#«¾ÀËr@–±¡Ý"`W"ƒ$±Ó[]Cõïþ›Î-;Hž?‡„ÛoAêè¢úö{iúp)ÿxƒØ[nÖç·,+1sl#»¤éßÊ?s'´‰pÒ¹c¬@šò,ô+€N’_ÒæuHø6MÓ5¯x2JbÙ4É5¿¶_²�˜·EV›ŒQèÑ û”§¡&	ýËZkm!ehû�Ó¤’‰¥­m
+m›Œ¤£A+ÅK*EkV�~þ�MBîtÆÏD0ÑKÆXM4šSñÏIÆ¬2cßwa
+ÕÖúÖqºÀ!§Ï»ýoïþóŠkæq@2ÿ;Éº²[é ñ»ºCS1eûçM+ŸœŠ>Ê¢Z|p%‡¤÷IáQ³�°±ÿ·.²'«ÇJ_QB@Pã[KØôl=5G9rý4²Gz©ÿ˜�cHuÍ¢õ«•ˆá¤¼üÑS§RýÀø6mW‹WdCAÝ	
+šš,‚:¹tÙ©¶O9l•0»[(¹Ì˜wÆê$ XC‰×Ÿ�V2y�›·­
+ °ušKEÓ ˜Á‚­±lÌåÉHF›Ð±û�‘´6+µ¬“µµþÓ�HÚI½©Ï'�–ºôŸÀ†y;"`$ý©}'#)L§º{èyÕÅHßpiuÂ ¡IË§öE6Ó@V´1´çFÛ•fX0¡AÙ´13×¨oÜú%“ÙkA�èÊÞ­ï¶MF½Md�îÏ#@/Góm­PÿGã™V»µL•FHýn#Í}0œ©Açã“Æ²1òFÖægÿõhuY
+uÎ
+ê¶Wãi�èZy†7ÆP|³|°ÑçÌY-üÜGàêsNûH©GÖë4—%`ö]í$Q°¡]“‚ž†&º~ÜÀñû¦sÝ\ƒ‘öæË8<.êî~�ŽíÛp$'‘òâl\Ô?;› ¯SQÊEtíP”•­¶¬7D(:eUBZo¥(�4ÏzeH™”ÚVÈÐC#Ó©÷¡Má>†ÖôP}Gëw¦î‡ñCk§â¨°hF?E}‚ŠÚÀÉ¡ŽÚVAÔ¯ÀüY©m£>0÷¾è?V�C6Z`9
+¥�’EÐûjÐÜÄüÚ$”­M7ÊÑõzÔ	¬mÑCµYYFÔ˜W•¤º@UÀðÔzT¡h¡¥²Š¦hÍÎj„DÕõ6aŒ’ hÐ\‚Þ,Ä¾ÚœÖ×Ðò:i;3-Ìüe(jsMZ¬â®c¦ÿ©Í+V�"˜o«àåEs
+[ÀÊ?¿¬¨ß†~#ë�ÎôZ0ÓÂz*®Íet“�â¯«ÑÞpRE¬©­fA:û¬rFÇ�3}&Ê(ørUüûËè>ZMDQ/Ï&ÐÖLí�÷ÒSRFÄ„³HúÛ\�»{=GŽ6²€Œ%oÑ½w/­Ÿ,Ó+Ö;¡2„ †šož<‚i£'˜'�uòÇòfA©½,
+½ê¥ÙÄ­RczU+Õ+)„ù$S[Ì¿ûö#¤Rë ôÃÌÖí@h¾“¯ðJþ“h�rè"ÂÄÛpˆ@2=³hýT£­º®¦
+k3½¬˜êÕ%”ÚFÁD#�Z±ê{CsZ™Z[#ü¯§çP!êý µS´ä7Ê¶ôG}®Ãœ	‚²@«ýúÍ²ðêÉ@ÐêÏßO�Ê@¸†Pê_Àþ²µÆj6ûNö÷mŸöÊÊ­°¾y4¡ØÏ¸ê—9Ô§‚ÑMùÑæ‘ÑGƒç^]8Ô÷‚L¨¯¦íé§f>­Ùûz++©üõut|½’ÈK§>a,B|<ÍŸ|N÷–mx¦LÆ3n,¶ô4Z—¼O×†�Dœî¢œ	)ø7mÆ3q,¢Û
+‚æ”©	JåŸ1@Pqè0ï/ý„*È”…ÓéÔß×Ÿ8ÁÒ¥Ÿ²mÛÏ$%'¥wº§§—5k×ÓÔÔJjj2{öî§¤´œ¬j‡|ýÍw|½â{v;i©Éƒ»wïeÛÎb***	$&&¨“\`çÏÅT¬$#=Ýt"§ÄªYõÃdY&>>Vo§ @ùÁJÖoØBå¡Ã475“’’¬RÅÁClÞ²•ÒÒrDÑF||¬Nü`0È–­Ûi8Þ@rr’eP›Y¿~Á D|üIÙ¦ôóî=ìØ¾‹ººzÒ2RUDxƒÖ���ø|~ØEIé~Þµ‡ÌŒtljŒ�`0ÈÆ�[©9vŒŒô4öî+¡ô@©©)ª£°LuÍ1~øñ'©æhU
+³3õ5aûŽ�ìØ±‹ŠŠCDÅDáñX&A{[;kÖmÄ×å#É›ˆ ó”(cëŽŸ))-££Í¯àUÁX[_Ç»ï-eI9fár9�}ûËØ¸e;‡âPenw‘‘Ê	iuu
+7ogÿ¾ø»{INJDç=½½lÜ°…ŽŽ.¼ÞJ”³¿ô©)É:-´v·êG¾ør² 8kÀñúFÖmØLyÅAJTÐÙÞ®Ž»@KK+6nÅî&""‚�›¶ÒÜÜB’×«L@vïÞÏ¦Í;¨¬<„Ëí"&*Zãî?6mcoI	ee•Dx"‰Œôè‹Äîý%|üÉÔÖÖ1dpNÈ"k5	47·²aãf<ºçƒ¦k™¿mjjeíú�TT¤ä@%]¾¼‰	‚@k[k7lbÏÞ}4«sÎêÏ(ÐÐÔÄW_C„'Â·Èï÷³~ÃfN46“âõ²gï>V&==MÝ‚tù»øø“/YóÓF’Sˆ‰Vh!»~.fËÖŸ©9VGtt´rˆ«Ù�ÞÞ|ø)k~\‡'*‚$µÍ-·nû™;Š)?xˆ¨¨("#´0ºAöî-gÛŽ�<|ˆòòCDG)§ëf`—µ]€˜˜HÔ´©4¿öwjÿ8�ôÅóI¸ã÷HÍmÔ?÷Çî}ˆôwÃ5ÈÇë¨t&5=Fæ›/}Óoè•}tUV�&°eõš“zè€Hñž{ruuÇÉÏÊ…SÏÇã‰@ ±±‰^x•µë6#
+"»Š÷ðÄcèà
+~¿ŸE‹–àpŠ,Z0�Õ?®cÓ¦­œ7i¢Þ¹�·òÒË‹¨¯o £½“Ñ£”Ð¦Á`€/—¯dùŠU ¹ñú«6tˆ.‚>ÿbGŽT1~ü8Kd¶Þ@�yórÝõW““3Ð²‚nÜ´�—^Y„;ÌÎèÂŒ]¤ÒÆ�[YüîR¼	ñ´4·0ãá{¹pÊdzz¼÷þÇÄÄÄ2rT!æ´eËf=ó<—_v)�?þ¿”–/ÿžï¾]�Ý&0 ;�ü3Ã‡
+Ñß¯ß°‰`PæÊ+/×ûúýªŸøæ»ÕŒ?k¬9ÕÓÝËâÅïÓØÜÄGKßæ»o`ç®}ª÷Èöî+å±'f£¸‚L=ÿeªðÁÒÏÙ±³˜˜è("?þœ§žx�Á9hð¾Ò2žxr6çNœÀìçW„�*¸V­^ÏÇŸ|AScO�ÊèÑøýÝ¼üÊ›¬Y³PÜG†©}[ùÍ÷ücÉ‡$&Ä�$ð—GþLª4m÷Þ^{ýïxÜnZÛÚ¹ç�·q¥=Óïëáo_Baápòó‡°zÍZ6oÙÎèQ#uZƒAþñîRÞ~{	¢ÍŽ+ÌÉøqc°‰"TòÌs/!Ø:::˜:y£F+×H«kŽñúkã¡")ÉË;K–2 3�áÃ‡éæ˜/—­dÅÊðzãp»Ý<òð}zà±Î.?oýýŸ¬¬ÄßÕÍóÏ<AjêŽÕç¥—ß`çÎÝä
+Îáì	cðz“Tú}þ?r¤š×æ¿ÉC3¦ëÁ·4�	óBp´ª†çgÏC´»hmíà’‹&1,o.—‹šÚcÌyq>QQ‘twù˜<yÍ¸cëÖnâÑÇgñÐæŽÛÿKïöö¿ó-­m,ùÇBV¬üžÃGª7fv‡Y€Ï>[Î«óÓÛÓKjj2”«�22Ÿ|úë×o&:6šAÙÙ<úÈŸðz÷­Þ@€æ¾ÂŠ?"?ü¸–9/<EÞ�!zÛ>üð3vì(&*6Š�>ùŒ'}€Á¹9HA™¯¾^É§_|MT´‡®Nóæ<ƒ×«,¤fÚˆ¢v²)KØ¢¢Hž=“øÛo¡õ³Ï©{ôIzø>’î¾ƒ¶ï~ î©g  aúŸH˜q?íÿZFíô¿ u´ó�„V·JœAÛÂÊ(Û?”ß¯¼º�Ø¨hV.ûó_û+^oš}jãÆmlX¿•Å‹ç³äý…ì+©`ÕëtÂËÈ8Ý.öî;ÀÁƒ‡p8Âú(Z?®]Oltë×,çOwßªßhkkcâøQ¬Xö!·Ýz3}ŒÌ[BmëoÝH™·F]íÌNçÝÅyöÙÇ_;Õ–%Én·“¹óž!>1‘W¯)ÅŠ#©¥Ò²2Â#¢¨¨8H0ØÛç}hòû|ä
+Ëañ;ioóñæ¢ÅøºüúûÖÖ6Z[ÛBL cé¿„,ˆœhnaÇŽbœ.·Úã›Þî^"Ýá,xõ¯¼³xÔÉ5¦�9/Î¢¸xÅÅû0§²²rÜaŽ­¢³«ÃBÉ` H\L«¿ûœ'Ÿ¼_‚ŽŽÖ®^Ç}¼“Ußü‹ììL�xÜ~ÛÍL¿ï.‚‰…æ2éÜñh+t0$2ÂÃ¬gÿÂ¨QÃùú«oñ©1M4#†f{‘%Éd°/+¯dÑÛïrÃM×ñõ²¹õ¿nD¹‰*1v\!{ó%’½	ÜzËõ<úèƒ†mSPÎZµk¨ê,°Ð!�“›Í‹sŸãÈÑZ6mÞf‹
+'¸æª+ønå¿˜|ÞD�þe¥åìß³�E^äí¿½‚Ç£iF'7ÇÈ’2?Ì¦*Å.9lh.¼„ŒÌ�7]ÍƒüQG×€æ¦î½÷N®¾æWlÞ´MSQ
+
+”–$sÀ ö•–ÓÕeÆ
+»ÃÅá#5”——£Dý6)==¬\¹š)SÏfíš/¹`Ê$V‚D·¿›qãG1ûùÇØ¹sk7t*--gÍOxòÑûùjùDÆDñÞŸkTTÚ&õ2jÌ^œ3“]»öQ\¬\?m6þð‡ßsÏ]·âïòóúk/0zT¡nö1k’¢,Û”sHAT4¾07I3&æ†9¾ðMN<û<I�Í âÒKh\ð'^ž@Âô»‰½ùFš—¼Çñgæ€, †¹••J�±™ŒÒ2AõæF]Ý	N44qÙe—�˜Kdd„z×Uùv_Éòò‡�—›MÞ 
+‡QZfo�ÁnˆŽˆbëö]445àpZ!–’¼É457³³x1±±¦hƒàp…ÑÔÒÂÚõ[hkëŒç¢Í®ÜÉ–­X‘¢Ýnñ·ÔËsºðûýlÝú3Ç�7*åiŸ‰¢ÍŽ¯ËGPè‘µa´	¶>6™®®vÊË38'›žÞ 5µV(§þ’(
+ˆ�Áo~s9?ïQn2¨)%%™ÔÔ$kAT`Í(4‚€Í!éñðõ7«q†)àÈæIn³Ù�™�»vsèh5&k¤²U• £½—Ë¡£~ôôvSRz�AÙØì6…F-Ûf³Y³v#GŽVëÏ‘Ñ‘ìØµ»ÃŽÛíÖ•˜èè(¼‰‰Øl6ÒÓ’•wš—‚zÅÏßå£«§‡0·ÛXúÁ&ê8Ÿ¢v›ˆhZvîø™¬Œt®úõ¥ÄÄD©”²ÃÂ\¤¥¦àr¹Hˆ�#^‹¥‚×È.èî¤Jl›*DÕE×nC•[O6»ÍêŒ€;<œšÚz¶ï(V¯¹ªp~q±¸=6oÞ†ÓéÄãñ¨Ãv»¢(`mØB}s] ât:HKSL*	±±ÄÆÆèHF‚ b·ÛéõwÓÝÝƒÍ¥`&ãààÁC”EMÍ1šTD/£™¤ÄxV|û£r¯]4TAñ&'RVRNÃ‰ÄÄÐn"
+Zy  ±±	p:·ŸÝ{öŸ�È¨qEÄÄD3vÔ”–«oU[°ÍŽ,t¶w(¬nÅä 1ÑÑ$$Ä#Š6ÒR’	s©öH+�DÅv(#)Œ#�èM"mÞ,®¿�c3gSÿÂ+é!cþ\cÆPýÐS´|ô)¶Ø’^zšÈK.§~Î\ç,@îí”‹ê²‹×z›q:m¤¤Xcïj©Ëç#2Ò­oM¢##ðûý–o|]ÝŒ›0šúã�ÔTÕôÁv¼ò×ÓÈÊÊä¾é�ñÅòoLo$ÂÂœ9RË[oÿ“òŠr} •¤}ô_2‚~rl¼s:�46·òÁ‡Ÿ²iÓ64Ý•¶¾Nwß3Q–¹ö·¿¶´A
+Av�úú&Ž=Ê%O%2ÊÃ^Sˆ‡“%å¤O™ii)J(\üÓ…Láâ‹.è“O?ÑËY’;f$�
+'(+;ˆËfÉ#ÚEü½_~ñ5ß®\…²åæÍ¶ÍÛyä/³¸lÚTÎžx–ž¯µ¥ƒe\xáÒÒSÙ]¬Æ9$=¯Ï×ÃÂEo³qó�ÊQQ‘L¿ïü´z·Þv/�M-Š¬jOÁ`¬·Í&ÒÖÞÆŒŸ¢úh¸ëÂTa¤ˆAuÅû"Ç‰‰Š">.KQýVRë5ßí7Ê-‡dæ�Ê›È�½eÌ˜ñ$g�Í´‹§š¾•ñDxØ³w¯Ï_DKs«þjÄða\sõ¯xûí˜5û%|ê¼8™&)#)Ø	¡n.ý¤@ ÉrŸ_+;>.–ysòÅË¹ùÆk‰��ÕiU[{Œ@ —©çO¢±©‰cu
+–ü>Ÿ�s'MäÈá*šô[H»�;n»‰–Övnùý}ìÙ[b¡¤Ëíbû¶=<õØl&OÏ¤s~êìêÄá°ãVï¾‡{"ðwûÕµH‘ÑÆæÍÛyø‘™\6m*çœ=^=|Óx'úKíÜÄœD�F=¶ÐÎXd°%%“¾hñwßEÝ_ž¢aÁ"ìi©xëu<Y™ÔÜ3�öïWáŒO$sñ|<\DÍÌgèX¾B©JU£¼æÎ¡­2	‰qt´uRYYE):*‚¦Æf}Eihh5�d|>£F� >.–šÚ:CRÝ<âãbyyî3\qÙE,XðGªªÕ×6:Ú»=ª€w¿Î„	ãtâ(íVZª]Áô$D] +©Ï×EFZ2óæÍäšk® Ï)¥( ˆ6ò‡å3Øt÷\SíCåHU�Í-ÈØhïì¢ô@9¿˜Ôm @ýñã‚ˆÓ¢]kÛJóÄÕNK­'²’IÞFÏ§xÏ~\.§I×†Þ@7án'�?þwßu«Ú~ã}l|íí>ŠŠF£×YüÇŽÕ#Úløºü”ªðpš›M0 :ÊÃÒ÷þÎ
+×]­–¦x\vÙEÌ›7“šcµ|üÉgÈ’ÉƒAåÛ>bB›M@t8œ“£ñÒJU=_´ˆÝáD–Õü¡¤ø¸XN4ë !`>15ÑR¯Xù!É€ €ð‚z‹&(«e«“S‚¸„ºººÉËËÅ›d€mÈ²LsS#—\<•wßYHZš»à�wßÆÌ™³vÝzV­Z£¶K~ãô3�(§H‚`pgœ�K²„=ÌILLL™¤Ö£|µk×nz{$‡ÍN¥	Q©¯»§‡œìL²³3)«¨Äf·›%‰¡C‡ðÎÛóIÏHåå×ê‚zº{ÈÍÀ_ŸŠÇ¹Ÿ˜˜X½ÞØX%Dm§Š­ÐÚÒ® Haõ2ˆ‹�¦½ÓÇˆÂ|bc¢±pŠ È9tÎš’¨ÅYå€]±1	Q‘¤¿:‡”™�S?w>M}JXQ©‹^G”Ejï�A×ÏÅØR¼¤½6Wbí››APÐ!¡ùu�@r²—áÃX¶ìÖ¬ÛDumÝ=†¦XTT@eåQ¾Yõ#ßýðûKJYd
+ê#ôƒ²ÂéïîÁç×´&åä«âàaZ[ÛÈ˜M{»�ööNQ$�ÀŽHo·5ìƒ,@§ÏGyùaê�›VDAqhohl¦öØq:»ºŒ<’€ ‰8�@Í1 (K¸\.~wÝUlÚº•òŠJS™¢	úÊHG«jðû|üó½¤åÓ’‚, ‹"{öàƒ¥Ÿ2fl!11‘FÍn4jÒÐ‰°L!ªËædâÙã8q¼AYùÍóNRÆ2k@qq1˜cª%™¬ì&NÅ÷?¬¥³Ëo:¨¢»§›¥}LYy‡Õyj{T¿7»Í†¤Úa•ƒ?»Š÷’‘™FrJ2
+
+�VÍHP´¹P_×`@"*:†ë®»’uë7±}û.=‹ÝnÃí	c_Iå‡Ø»w?¢(àt;’óÏ;‡¦ÖÞ|ëm*¡¾þ„5ò¤²døçi$r»�øºÚÙµwû”S[W‡ÇãV½ÏT[YP"%5™É“Æ³~ÃfZZŒ8D‚ *·Ä÷àï1v'N4PZZFFF.»“&5œ…L»6A‘æ«­ý9„„”ƒ²	¯Uë(´vvò«_]‚Óéä³e_écpðàj�ÕñáÇâówQRz€ž-£âUè•¸à‚Iœ8Þ ’@Vé SZZ�Óé 33�¦†vzUÀ
+Y†@@"--…	ÆîvëžcÇŒ¤¹¹™¯V|ËŽ]{Ù´yg�e¢�²Ë˜=€‰ãGóÃêutú|ê\V»f
+2¨�kÈß"²¢=‰r@ñEåÚ™ !ÛíxŸ˜Aæ‚y´~ºŒÖïVqñy$Î™…ÿÐj§?LwÉAÜC“<ï9ÜgOTé-!êšŠ¶‚Î§¾ïN¢£#y~öKÌœõ-­“LžtÓ.¹ˆW^}ƒy/½ÆÄ	£¹tÚEF'EMïìì"oH.i)IˆX¯Jüòò
+þ<ãqÞ]ú1W\~y&pŒ˜˜hŠ÷”pë�÷ñÉ¿>·°ŒÃáâhÍ1î¹÷ÞYò¾Á>‚€3ÌÅªÕ?qãÍ·³g¯q áñ„SS_ÏŒ¿<ÉÜ—¨‚GÝn"n—ƒ©çO¤½½�ï¿_ƒYâØí‚%\ˆÏïgçöb.�v!_ŸÃ¯®˜F{{'N¨ãý¥ððpªªªyô±Y8lþt÷ízHÖ“9ÛDG?'6›ˆ(Ú80›üaƒ	ôöZTQ´a·Û,&Ã¦+áæ7W_Îæ-;tÁÙ¾}'ãÏËóçqÓ
+¿¥§§›#G«Ð‡Óá £ËÇ�·ÜÉëo¼¥âI
+‚ï,ù�éÓ§³­“Ë.�†(š.ãt„ÞôP¸Îaw0²p8™™é¬üæ}Kîæ¢‹Îã@é~zø	JKË™xöXõ°BéÜÿÝlßº‹û¦?Ì²å+­¾”²„Ý®ØØLÕ’5`cF�»¸àWJIDATä‹Ï–óèc³èö÷páÔô±Åþé°\uåe”(gÍÚ
+–þ$zøö»5\÷»ÿfë6C¸·wv2÷•7xüÉçÉÈLeêÔó,c×÷¦�„Ía”&AÝ'ÉJà.K¤E5½Œ,ÎÀìl¾ÿ~
+½½=Ê6U’()-cÊù“xsÁ+\tÁví.¡K? pÚ{ì¨‘…ŠÛ—IëEXóÓ:þû®ûØ¶}¿»î*"£´à`6;H½²PY�•ÜY™éüöÚ«øèãOyêég‰ŠŽàÚk¯ÒiŠy:Òãáš«¯`Ëæ�lß®B³'×Øí†OfsÅöôÓO=
+ˆŠQnÌ(ë²¬ØÌqåæàÉ†äóáHOÂS˜�]i|ïüÛv9å\<gOÀ��…lWN±EYP„.‚'J'~tT$Ó.™Jff:…#†‘;h ºÅ
+"Š6Î>{<22˜tîDn¼á·ŠQUk´(’””H~ÁPâÉLK£`øP²³2õ&&$�œ’ÄÅœÇ
+×]¥ƒ�ŠDÇD3lè`F�,¢ `ÞÄx�y"£¢>,�qcFRX8\w'ˆOHdÌ¨Œ*AÁð|"UÄ�'œÁƒ1fôH†/ ##Uß–…‡»œ3�á#ò^P@rR¢â³)*v¼ØØXò†’šœ¤2c‡ÍÁäÉÉÎ@ZJ™™é$'%êFú¾Ì
+‘QÍÌÄ³Æq×]·*[4UI<™QßÁÐ¼\r³bSQÀQ >!Ž¼!y¤§%3(;“ÁƒsÈÎÊÐiæ"77‹aCrqº\ÆŠ‰Ž¦ (#‹
+È�EfF*		qÈ’Œ$8çì	äæ$9ÉË€i$y½D« ÀyyC(*ÁÈ¢BÒSS‡ÓFVV:ii©ÜuÇÍä
+ÑÐ””ºÃÃ”;�¼ÜKà+W˜‹Ì™Œ,, hD>11‘dd¤©ßÍÂØ1cÈÌLçª«þ—M»P�(*ÝÈœÃùçŸGzZ
+£G�TÁ”ºm6o¢—¡Cs‰‹‹ÕÍ¢(pî¹ÈHOgX^.wÝq+ƒe¢Ùd¢£¢š—ËÈ‘…ÌÎ"3=o’WQ)D‘Do#)*N~þ`¢£EFzHKO¡ `(·ßvIÞDmVésËü¿Ãå ==�¡CrUþ9ùv[m¤¦$Q8<Ÿ¸8ÃÛÄáp(.LùC)Q@jj*IÞ8\.>ŸŸØ¸XÎ™8Ž™¤¥¥��ÇÐ!98l6‘$oùùyx40‹üaƒ
+?I’SRHIIáúk¯dÊùçXœÍ£c¢6,O™3ºM×YWXÀ�Ü†ã¶ßß¨¸9é›#�ØØ
+†
+¡°h8YYdd¤‘¯S!,ÌMNn6C‡ÆépZ|Gµ$È²$Ë²¶UFG60!ˆ„ÍtaHœÁöNÚ>ûÝ1â®ü5.
+ÕåA@¹ò¨:K*«v8‹ÔÔ“æM/Òw^G'BÈSÁ”[q4µn!û–ú®o´¸ÿ�dÞür[´ßý=ûOêQ ±N#»ZÆÉn>'ý³ï§§×ÞÐË}FÕTèIøDã)%õ“÷šÒ?ÍŒúôÓ×~ê7nFY9QCÊ1’ÅP¨lóÀ‚­j­ýdt8U:Mšÿ»ßêŸž"OŸ~œº|ë[MÆ„ò�é«“L�~Y"´\NÅŽ¦oNZŽ‘N	•vªZÁ¿3GÎ¤3éL:“þ¯¤ÿ/É0
+Ÿ�gÒ™t&ýÿ–þC!©L˜Ä’|Z!VÏ¤3éL:“þ/¥ÿmÐµë{04ÁIEND®B`‚
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logoIver.png
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logoIver.png	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logoIver.png	(revision 30230)
@@ -0,0 +1,161 @@
+‰PNG
+
+
+IHDRW2)ñG…sBIT|dˆ	pHYs.#.#x¥?vtEXtCreation Time09/02/04&!®! tEXtSoftwareMacromedia Fireworks MX»‘*${prVWxœíXá’›6ÆgÎJk“ØÉq¹;¹H˜“+ìÂÞ‰ßy¿L Ã»ô
+šî®$ä’œn:öLG`„�ø´«ÝÕÊýóçßÑ—èËWDÇ×®ë¨ÔÑÕu':¾ž D{jÛöÔµ¶ÔµtkÛŽ¶išÓ©i»¦=5TÏ
+Ýš&‚£‰¢¨í¢öµmÔtQsŠš6¢wð"¢[@@@@@@@@@@@@@@@@ÀÿñŠóÍâjôÀ®¸æë+Ño4W™âJóøô+ ùIì
+ü@‹'ª@o/O¿FÉQv¼—.Î�ì™B)/>¨|ÅÑþpŽç_k'?Œa_$—ægÜŠ?ZÔ—÷€�Vfà¬/?ÿä€
+­?ã²N/O�0S ¯">˜@Z–Ù^ÔW¢‡õïƒÌ�}3¿=‚16»5²/³EÄäí¨jÚuˆ7ð§µT9?X 9û8Àl•¬_ˆLør|H™zG°Ô±¦Qb¨lIíÞºÝÄs—'03´ u-=G�:	S#­ùÎà¥4/�oùiÃ	+fùíjyJý’ª~Âú'Š~,ÖgUŽ¯rP[CŠýØlí<\G?ììÅŸâ¤±2$yÏÅAŠGmó$J¸Þ:ë8ÿ£¹z.QJâg½BS7¶Ã.—B¹BˆCUâj�©»YÔž$,Iœ©¾h«?à¯PÅ–2íÕH2Ô¨˜’«'ÊR„¨�…Lï·”°ýñ>ê­Ž>Äzmøñc¯ÜÌÔAßxWå; 7ô¶ò‡µ¤t’¥^bó¥ùêOøíü“ÄgƒÇW¥ÉOÄ±–©™×øŽ´Qæ¿ü¶;½¥W‡¯ýÕ€ÄàÉL€,¤Y…ìÙo– }Ô?´ølé
+Ò;�=ÄŸÞÿÌ™1”Iô–}±2«5(ãåNJRAŠèÀ/
+�BÌÀ§Ó(-O4õvF«Gd'?,s ´=Ú˜ƒçð3¾üµëè".hQJ3÷%¤¥‹%ì´ÍT8—	¼u7?Ä½— óª{zd}HOÐïQ×B"7¥¨f£f£<ÃÈtŽ»6ø •cÅõ‹ xþ“Ý`ð3ìŽÈŽ,LrÇ]ŸžH{Õ™ç¤€pX@�(¹Ñ¿;E¹;ÔÅñÁé8–ùÎ*à¡—ß×ü§óR…ØgÆÊ•ÙŸ•¢”UqÜÉ‡�ýÎAþ]p§k‡ÿ ä³ÕÆíÆŒîá‡ãnšLò†j‚õá€Û&6ùÐëùGþO6Î'îlÏÍÄû‹¿ÍN’½<Ü­¹Ž“~íð•ÿl±6¾…CP¦Ø†ÿ�ÿfheÞgÐ,4í
+é-ë¿�¶ÎJ\
+°løx®ÝßËÉÿSñ
+û5Ö'Ÿq¾ €;oðæ7*p�øˆ–
+¿[û÷ˆÞ>mÖ«%ëÍšv¬&=£gˆ²®Å}eùýÖ¿±ÿ¿[ÍÃjA‰O¾ÕäÀ2Jà,µÖ¥‰�Ë­Àø›þÈpzòkåÏmö4¨Ú€›3ODiüÐl“µ“ã�¬Ž;ìž’gœ×Nþ9màwvÓ×Ñ3›™
+K¥ˆ2ÏöY'ÚÈ=:eßJ·sX7½6r1[Ä‹ÛÞØÂ1Ãº\lq{³L¥1-´	`§ƒÂ6Y™®çŽö+·>¦âÌÒ…ÉµR”bÛ:°1zæÏJïK€ÀK•{lùÄqu°)¹í§LÍ=ùÕ µ·ÔjT£žÇ§aµ£f¦¹¿•[�îzP1�pt)5}þG=¦±ë—ÙÕ¤Ï`˜túÉ?‘fª5•n °žŒËÞß ÿÉ'‡’Ž1Ôõ„½W÷âÏLháÜÝ]Y½Pþ^»I{þ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÈÑ…ò¤@ÎqHmkBFúÞÊþ)¤3¡ëmkTSxœí][sÛF–Æ$ãØ’eÙN¶2û¢ª­­}JÁÛ#)Š¤bRbJ–óâ/°8‘%�D+ñ²øcç7ìØsN7@ Ñ¸Š)¬²¢qéþÎ9ß¹tƒê¾©ßÎ›ýýé\[ô=šÎõQa2¬ŒÊ‹³Î¾=WïØæíaÃžWÊ‹öáÀžÕEÿÀ´çvÌ“)´×[p›þ-z�Îí¼Þƒ_ûµÁÍ\ÙR†ÊHy¯ô”‰r	{SåbqxÔ…–¿AË%´hÊOÐ:Uþ„3.”=¥Ggðù'Ø»€­¥Ü@ËxÑoñaµ#zfÍœÎ“Ê¢Þ8Äþ×»]èlà°µ¨›t’Ù¤6³M›z‡ÖßÐfÿˆßà IŸû:©Yg›><bÍÞt^--êƒ:°»Lö�.»ÛÖ†pÅ"Û2r êª&èk>Ð}å
+dz¥\£DAÖÞ3½Ã.ZlÜz‘�Û`ãžøÆmùÆ­&·š\À·&·iþ6�—J³wŒÝ´à€³Ó«³“o{þ™m“!öœ#Ö¬,å“rm3e©R�Ô �F‰AUHÝ¯R˜4<À42¸p+�ú£éU†îxzÆª
+L•‡g‡ÃÓ†ã×¤Jh½¼/€RXOa$³ž-J3TìÆ¸ÃP5ÛÈ<X©6¤¬–h°/ríÃ°?Ã±q¬H Ý;sãÊ¥û2 Ý;X”ñ�ý^fïð!×`¸×0°:üþƒ?çCÆ‡¾„$j°Ø
+ÏhK.µÇ·bDQ™gÀã42&‚CÌ}‡½"†ƒi qX²ÿ´á3ó”ÑÀè25ˆÆE«rdôaõ‹È¤"¢öØìrlöA.(òûàú¾/Ÿ-�Ê|„ý+å*:\â&¢“‚¦éC‡¢Ê€!ãC`ì¨è�»ÅBEgÈ´qj$¢�§<f@TF‡ÉŠŸE�zFžH#ø>´Ið—‘Öª«ñj™1Éˆ¿ã#~0“Žµ,(¹à¢\=^ê­¾âÑRLq_=“¡;êý+PàÏò!`ÚP€ÀÉ‹T†Á(ŠÑDã%N®ÃƒúD�<Yøë³s—½ˆ<w9§¸gúm¹©À–›<¡3@âû’ˆô¸>húHªí•Gé
+Àà“Åu¢06â‚GÝÉ8}¦Ç¥G8‹Ï�\l#�7°o€./!,®ŽpXÈmÆ¡‚`˜Ž¿D%aŽÓÙAœ˜çtvÚÜÂNù¶Ï¤„ŠL�oû�€	FûÔ“¦•,.6
+%•L�ê„ûX¼a¥|=Ö> ©O&™t&—%“Ó0U0Â�éé­Î�ÂŠ:‚!¥`^åÑmi	bŸ8øyÖ,ñ¹?<§¸2cþ•Ä´ô
+ç_ŠdãŒ‹îmÁ¸È@Ú„
+JjtTš)¿§QŽDð$sPr|HG�‘‡1FBÜCªáÀÓ÷’£¥»àôÔ�Ü,å÷˜¢E…�Te ‘ëõ€¤ÞU‡†3©aÝaÒ“i‘[ÈrÐ‘ÉÐqÈ¦I%nLò 3Ÿ„˜&]®¶Æ‘0ÓST€£B=‚Ää¾<ùÐ�êG‡‚Àsjïƒª(×‘aïHšöêQïÒídˆqbáÕŠe€ã £U&)ÐÙåè48"áØ„R¶ÑŠ“$Å’;�ãD(’¤ m®'®¾ˆH83äY‰yU©0 UF*Ä$­XsÁïøÀ�=Åÿäá/M)Ú½ˆáÒrÆjh"žàLj[BÙƒÛúhÔð¥CnAˆ9™>ó)fŸ³(ÿŒlªá–"õXÄ¶ÝX%)>VÖj1zÔ8|
+‚§qÜ±“	MüŒÆœ/ÁPcÎùçŽ£$�í«Fb˜ž»‘ý'È˜‚
+Ô¨’©ñ$*±YÒ¨Ö
+ï#Kh<¼§È%8¥Ô?vR¡>‡¯Ï}³Ìd8½ö¨æhz‚æ+	0Ó¹~�t´±“	PþZÎŽH¶ãdˆ(.BJG’bºíêÞŒ‚Dœá¸IâÅœâ­Sò×¬É]KþÜL‹‚™úÉ£ „P“iž£Uší�‹é¸ˆ_p@Þ’MxÂISá¢@›cû�±­ÑWŸÆ‹¯>¹	„XäŽG$]†¥W¤é7…>q˜`"�2Á*8¹7†Mq	Íþ‡­ÈJ›J�·1¥@anÈ
+~’M¦€ÅÉ\""òO\ôZæå:;ýc�¡©ÌÐJ!^0deEŸ3Í•òQð�¸åR±±¼Žë�d8jEƒáXòœ•ÂÞJRUˆ,
+M<óØ®q>uv§J4¸pD–ÌüO5-
+6£™¹˜uv%…J± Ò<ÅÖûjËIF­ÌÕ¨Ì\–ZRÐv\˜dÁI8JA¿#„¢	ÚÏE‰*ÍBIÖâðð{hÈÔE¾Õˆ¹D‚C 4"äÂ„-gªª‰‰Š—¡á‹3JKFÂB¼&«ðÈ:G¦eI\—úÇËâº£C¸m·�+œKIµ=^§plcs™Í	3\r£S“«!DnhDÔÅ°¨Á:Üé9d:æÖwØœç0¤deéºˆ@ã’|ßgŠ�Øñ	Ç© 42ÔàËI–ˆ$)	ü1€@ÓeYÒËÉ\šo/©G‹B€?¢‡.Õ�dËcœ±kñ
+2’ê‡6‘Y––mì;®ƒ>§ÙN,M3þâøKYóy-y‘Ç�r
+¥¤³m'ÚsvÚÎÎ©³CìK6Ô	VãÀzírïM•§ÍTåUÔ»k
+M{RUKžKL"R,Â¤ïæ›öb½¤ÆtÇgT;Œ[=¹
+c*&¯Ÿ	 TÃŠCŒé…›D]‘�9ÝàÓåÑHW•eZ\E¥é¢!Ìå<è>*e‘KÇÙ1ƒ‘n&?rLN©T8¢õ–7ôæê®ÄÞ£E¨'Ñ³ßRëa.’‚TˆIà\J=ƒEDÃç”ùŒ^ÅcJ=ËøÒ+
+ÿ<5ØŠ¿²~1Ù]�¶ýIIûå²©õ�¤XÇèÂiÄ§Y)f·ø:}T–LÓtpvNëþ"v�Ç„¦$¶yâzê$°’ZRæw5õþ™?0#-UÞBµâ¯RÚÒxI^Wƒ¯,ë“<øöÎ0'=-ŒèÍNãvÞô®¾¶	K“ª)à%Ý%D6axDï¤|$tOB[8šM6–&£¸&Có€¬ÙoÐ)ý>k£˜|Ñôæ¬'|
+?æ’B_¼-'¡-Ùúm-·+¯¡##÷“1§¾™ç%�×‰Œx9•k¤üFí¼�Òl�ÔGûìæ‡°ßêáKcMöR˜Jÿž&ÍiâoŒaÛ;lSï~-ã-œ&ü×ôNJÚ|UÃ”JqŸiü¢Àú½ òx[²	¬�,�Àv¹Àú€ÌF‹ùöAl»®pdçœ$8'›(­\”iD¹íÚ–i1”ðô¶§„ë´�D´e™‘‹,�È–^Ö¢7x—Kål^_vŽŸ„Ï&¦b.¦,bêQ81ò¼�eó€Ò9~r<›˜Ê¹˜²ˆ©IˆŒ]<q,�Ÿ„Ï&¦J.¦4bzÁÅtÀßeùDTæõV/¸`dgœÄž‘MˆÕ\ˆi„ø”±Ns{7îìŒí.€¿víL<šM@£\@i´åöhŸhuŸ˜…-[Ä,lÙ’MXã\XY<×[Z¡2	x®åñ“�ãÙÄ4ÉÅ”%Ãê-†nÈ¾íÆ|Þ¶“ˆ¶l"³}=Úqg¢•Éàœ
+™ÎÌ £(bûIL{¶Þi°mh›
+Ý÷©àûdø>
+è+ -*EfÑË]®—Ø2¤weg´'ú¼šY’«C¡‚jãiúY¯,[õªUö·Åeë°$^[Šº´q©&öH4ˆÇ×ýØa&…xí!*PåM�ÓÒ‰Z|c\vb¨ê–åÀ¿=¶¡ÙßX¯xŸZÔ¯¨ûôþ…ð0 ÝTA—ô°ÑÛQt?¢ŽG�¼Â‡¬`Çéº®vé~ãœ®ã£z•Äé&»ÏºÚò°?F¯èÅ–À²ÞTËFI,®àŽv8®ŒŠþÆŠÛZé­$ÈÄGã ¦ëéÂºÄñœ‹Ã$QŒè†ÏÊÇ874BðcÞFÑQGeEx1ü/ éÕëPÃ—ÛÇ#ëûºIëß!SÈÐ6Èó•Ðk#¥R©$è™«µT4×É•J"‡{4
+/,�å¢®’œoð2»œØL6¸ûëö^&}{Ï­à½¤8VUˆgÂp4tü	ÃqX†ZŽ¥RP@KÇü‘‚€²«$eË�îþºù€…ÏÁ%$.ïxQe²û¬š—>hZôÒ
+ž“ÈE9gOêEñ*™³¹¯‡¬;�; ä´nŽÖF»@ÇÑ‘®F�èÇµgmX-kÃ0{Ö&†mÃìÙšŒT-Ìžƒ7ÖÄ%¢£�îþºmþ^Ñ[3å˜¿Œü!ž˜ôªj«a.W*›;ÜgÕÞƒfãv~ÐôLVNªCZSŠvQ‡ß·ôÕiÎœ×Ä�4P=óvÞØ?À_oÂÅ¦·&1:„(�­¢Æ¯eÄ	–Æþ)œõWž�cò\ûbù4¾<‡½	‘"¿î¥¬…k@¤ z
+˜ÞL„-Ípókþ¢¨¾+¶ è¸ ¤¯ù‚[÷Lÿ½_zÎìÒê®M±Uà×îUšp{�À‡ÞRÙøUO•ÿ‚~ÛŠÊ~|wØ¥÷½þàd�x�×oÁõªç§ Ø.mJ<¢ï`{~Ä;<§;\ðê‹¬ÿž«…+Mz5gL£�]éé¹€ÝÿÞÖøiR|¶8vñ.Ûô||ö1ÜëLùµO ·Èõ7‚î=¤>Ótê�IkúfÍð?áµóÊ?ó~7ø‹X´&ìÊ-÷Ê·ô6ÎL99ó¹Ï’ºô=‡JƒŸýßÊl[KŠ?ª¢+?Á>â…{xlL8 ÇÊÐÂ�*Ò™eø­A~Zý[ê¬h"ÊË3Å±|ƒ=ô±F$ŠÚè|—õ%Yë�{ÿ‚ïŠú6£H¢ÃÎŸ°ü–(¹,¾%œÄQ,¯r{è9¿ pÂÿ€~þZÕ$Û˜P…òšÛÈ1\˜±/æùØ]]Ã1¯,Oàü#öêÒ.`9¥¿c�á‚­ÖŸÐ}Që‰¨Spôçèßhd¿Á“¾6ž.ä<�ótÎÓ9O?jžÞò´¢eLmäL�3uÎÔ9S?j¦v"jžÀß“ÿÊxZdÜœ§sžÎy:çéÇÅÓNuºI0f_G‹Œ‘stÎÑ9Gçý¸8úû`,ÍÏ§e@tïñWÆÜzÎÜ9sçÌ�3÷£fn§
+Ò�Æ§âˆ¾.ž.å<�ótÎÓ9O?ž–°L¾F/çèœ£ÿ­9ZË9úA8šýá½ì�¯ÑËy:çéœ§sžÞlžÎ×èåL�3uÎÔ9So:SçkôržÎy:çéœ§7›§ó5z9Gç�stÎÑ›ËÑù½œ¹sæÎ™;gîÇÆÜù½œ§sžÎy:çéMàé´#7ylÍýªAÆÓË¯Š~ï;k•œmë¢¥ZB$¯ãèjU1àg½©¬DÇ·}}Ž[‰ê=—}Aê’ù
+�·½ç†ñA9¿ `¡�ß‘•!÷Âù©5Î©»qK]£†•þØ5¬’ZÃ�{E+Û|Ûå:æõÿbüùÌ�?-Æ–_Yô™×wóè3�>Ã¢O]@9<úÏ½�ØS|Âã�=_Ò×À3VA<÷èî“
+Ý�§±¦‹1m>—óôúyZô(çéûáéBÎÓÄÓç ‹h³S	O?å<ÍõHÈÓÚ¤ÝWÎË¥@Í&ž—µœ—¿j^Þìø¹’˜—�
+çe#1/g©Þ~ý*¦äf1F{¼Ü¼²ÅºÍGßŠ–ÅÍr>vfÔŽèIQ·×ÀÉécåœ“sN~±r1çäTœ¬Ý¬üÒgW{42ö—Ú¼,½íùÞ¢eÛºy:9+†YõýØ\Ú8H|,°œ2êhÚ—?ªksxÏA99#©�•Ú4kƒ–·H{ ßõ/öX’iäŽO#7en7-Û9‡ÚÄžÈ±eø1àüì’Ïçve•Ï¼[¬î@OÇàã?Ó÷<rwþy�xu¹ãòÎM@óâå�ò3 Ý&�ª‘ü5è¥ð¶âÔ1ÔÔ�1üÇ­*Èÿ~ü>OùH‘GÐ.•Q;ÂKÐ˜8EÄ{Î—ïáóeû¯9ç^ÔÕ·è×ž}L=›%|ÒÏùÉŸ²íˆf*âýµ„£ŸDÔÜýwŸ„f¯BîþAqþÂjX”†¯x¥lô»ŒãžøRŠs’§=÷¡|Ž˜#É*ìOúÊ{'â¸ì¡ÿ:Yÿ^HÐˆ~Ú®‹ø'mû�ŸáÇá?�iêp–MöÏXî=Xú51f™ØÏ™Ëè	ÿ×½Ûbž=ü�Ø.—ZšÜ.Ãm Ì.%OIÅÚ?*×nLÎ£!åïb´©üŒ?¸¼¬Œl<$Í<xzªù|9¶ãø�Ë'ÄåUÊÆ0¢J sº/.gH\>A&?o%è½§û^Q~jÿ#áþI®Z¡§Ò’íåhe¸¯¶"õ$´î!ËPž‚œ?QÍ¥þ%"ãÜòÔeÝq(%‰KP
+ŠÜF”‡X”áW…¸õÛòU¨æCëÈ&¢Ë¯øœ9Fdh]{¤sb»-8‚,wK¾.˜¸\PØ8.XŽ×rÇë÷<ã�í]ñ¸ùfÑê ­Þàv~ÖÙÇ?ŒýŽmËcz±ÈŽâŽ˜¡›¯ôž;Ëø`¥÷}îxÛ•Þu]ìöZiÓXþùÖ"?“–Ì(º\‘¶�]m×7NÛ ªÈŒÐôc€üú.~m=çò�÷Z]qMrå+ªŠ§÷®;pÅ�ë2ž +òÚôº4ð;ï{®™2f�<“Æõç'ªœŒ•’$cvª2ëÉ˜ŸùÞè�¢'Úü·¼‹Ìï¯[ènÝ¢¸qu‹m¡n´ï¼J‘W)ò*E^¥x˜*Åà2ü¾‡‰ËÈ¯xþíxŠ=^Y®A?>aõ<?£o,ÀoŒ­,âçl
+z·ÇËÏEšIH6‹{?üüZý”ònŒâ÷(n±ñ=™ð›A¹lÓHÙÜ“³$K�ß¦¹r•$bî6ì=s<*É3æõúÊ´^á†t¥0¤+IÏDug ˜–Ÿ³ ®A›M<`¸3+N.¾YJƒ˜uÞ†«ýµà½å|†³»Ôÿàûei‘×7ù]ò0vœÑZ�Æ¿RZ4¯vCw°ˆ™¬&VWÝX½°qòø› �RÞ½GQ…“+Iÿ�³œäšü²E«Ä?»ë¾‡ñýL¬þSzxÊçÈ¯iMà¥»NÝ4½ÜG$Mô4¸¾„ù¶j+èwÊkÎ”{„&Cö¡ØOŽûŽÿè�˜×hèô¿ÈkUªŒ—–ç¬îX—vD	<(Ê%ñúyI+oYËž»¢)+ú=“±ÁžéGÎ„ŸäRážÊ’ðàýäU?P
+r)‹÷”ãÝÐ÷j¬‚[£î¬�~ƒÙ‰ïú#®ŸE½ïèÓÃï)ÒÿB>g_aëÎ¾À¾Á3$\ísÀµÓ»^}4[]œÝGW(›�æ1®ÆU^CW—(_+P<‹¿ÙgÜVÉÃ?TŽ6î‡àŠ42Ú"Æ¸fs²k“Í˜Ž=Ì\^p¼›&“—„±33²cÄ±á×'œOxùÄ�ý!dõÕ•¦<¶1a”S¾÷‰|ÌÌ'­gËÊÇ=Ë§RAolÐžF¿K­ÉW?L*ŽöÞ$²èš ’E¯6¸�×÷;Ó¹mèß¢É>©ð¯Z]4{®äžQäÂ¾a%8vYÎ¼AuÚÒoçê¢9¨OqsÐ¤�Ù�Îuø4˜ÎµE³ß Sú}ÖÖÆÍbpV¿�³'~ÑÉ‘Rƒ1¼¹�¿í�Mç%uÑæÛ�ùÜD…�Cèúà°Ÿ*%ÝªVpØƒ³æ
+î²88ëÝÎ›]êî~§�›^‡>õj„kç;ÝÃ¦
+lü#Œ][Ôz¶1iSÛg›mL¸ËÎlà-¼§ºø¥÷ët^,ÁÖd�Ù¦‡0µš‡¸ùÅÄs,Ø°�¼Ý/f� ìôèvf?uÌÜ4Ø¦cÚGï¨7ÓÄQ´]¼ =�‰5HÉPUÿ -KgMêÎY—ú:èw‡ìJÜœ5j¸9ê·sø˜.hc³�Æ6ª°�mÏ¥(.hÊ:¨u¨­{mÝ£ô¬±ópîÔÞ�ú¾iáNúlp$Û'`™Wä®PÓ±¡»O¨7iœûÔë¼Çþl>ètA1º­ÛùÙq“ÖS°�u©I±ÌÔ¤ 35©xµ¤0)U•"»Åâôº|Êž]ëíwäµp•ÕXgŠþÆ?Bã�xîy[ ô~ÙÃ4ö05åÃ­~ãvÞ:>CdZÇïhcÂ§âÏ¥ªQ4ŠðéûTÒU}ÑbÌ¢©øW7€É[
+zp«ñ†‘þ‡Omx\«qŠ=6‰)ŽÍiÁÿ6óù4TZG¶µmkBSxœ]NË‚0ìÉïð
+Fà*•GC«†–ÞiÂÍÄ¤—Íþ»-HBœd3;»;›‘Uj!¯Ù¶‚ Ø-tçgá1Â’kAb�)žU3¹ƒ´p.óŠNX§ÎBZO·njáI\äÈŽ0Ò“·«=	PªyÅ„³°ÌûXå™�¸,,´×|Ž²Ð_°[ëÒRŠ¥oúµzL�PÔÜ½Òü<ÁaLâ1ò“Uñ¶"¦¸â¹[XìÓZdmkBTúÎÊþ†*˜xœí\-“ä¸²5,hjhh(*((h(*(hhj((h*hhèÿö”²]³{ïôÌ�èr¿È³±»Óíªš:™R*?µÄ—×mÛ†¦iLÌ€¹ü¹;¾1¦‚uÔ£šÒG?oÛ^`ËÃ	®€ò^zCÁË.ËÒ<F�å[Æ5oð½û…8ä44–ø§_VdÄ$áñÜ”‹ÈöM—‡UúÙ\Þ™á3¬þEM1eÿ*Ä£°˜šf%Lðšn./ŠÉe°(‡úã%˜msŸeóèÇ´Íð•®u<4ª
+”¨@ÿ¼è²fòºÀ3�ü™>®ˆ‚V;åôës¬¾ÿ	Çzll"Ë±,zâ¿/®ïZeC}„ðaÛ—²7”3a¾³eZòzÂçRû’nºBÿ˜ASš¬²cß,@?.¸È½àÔqa¶æciËï¼ùÚþÛ†û_¡!)â£ä¾€=M	µì^°‘cdC_¹š´_Hx%	'« €`€~3çÇ»V52•ðÚÏ²û=¶Zæ³õ!F–ìí¼‚n÷B7‰…¨Ó"�òÔõøÊ7.ØÓp¬[92¦¼’òöQr_@^Ç	`	3Ø$€B¾l…	š4V´qû¾­«C©4nò¡È0VÓ±¡íCâ�?Jîåê#Ûñ¥“j†‰$P¾:|} F|¥¥¸Ç÷"žÙj£ÙHÆKp[lÐ]¢m´~–ÝïQ\ºbÂ‚UÖ¨b¹{Oü~ÿ™vFÑ8²€(üSt©Øº!Ã&à3žö4$Ÿæ÷;¤¢u³ÇBkFG¯éu§ÑÛ+Žq<ð¨?=8ØÖu?b(+c˜ày!¤m¥ªËáùüÃëeÈí³×oû©|ÿ%TúôÙÓ+ÿzå`Å¨\ÎƒâÏ(€@B|y^ñ#¤þËðêÊv…¥z÷Õ�u«+ý}òÆ[í«¸žÒRÎ§‚$kÓë¾¾
+Éòø#iŠnn�KÓÅž\¤Ÿ1Ô‹!�a„E°h°ÿ:–Gà"û_�ÎÑzø>&ÿZ_õî«·]qnÀý9‚OÈ¾ˆa›Añ	ÏAŒtÍRÎƒMäõæÁ\£NVµßOæ�_ü¥zgY…}‰ñq�¹¸v‡·í@*–[�|ÀôéŸDóo×¡ªÕù3×�Çó‚míŽ™<þ±´]ÿ*/­�PB�° Òµ$™Ÿo«½ðÝ‚R×´°­úÿ§0GTN÷3J\ðÈß9KÔèt:þ{‰÷�?ÿ
+Uw;øÃGœ=ó?g`üñ¥=û6iE¿/åªÿ×D¿Î°[V½Ûãý¿[ÊJ»bÓ5§¹‚åì‡ãxŸÜ~Ô¿>½»@ÇÜžü0³1r’,£¹X!vø(¹/W1ìüÖ#Ñ%QüÇv½Øÿ3³é>Ôw†‰ýKuJÅ
+¢cœjðˆ1b‘@|<T#¸wžyVk^Šƒ7&·^¹�-“�‘œ}
+ŒY<xU
+y³øçû?ÅÍµ@?PÄGWá¶@B#Àb¹xó: sGô›¡¼”ŸÖ´TýƒRYS�Ï+‹g½«~]1é“Ÿâ1ÏñtËí×cî¥¬:sÛlôá¿ñf‰�ÿ¥?gk]ùú±ïœõòæ»+í96½êÿñË”ð�R
+/£-—�V�çÏ_pþd¼·«êCÐ3	|ºê%Ý1í9rq€ù¶é”~¼ýc:†Üzøî¨ÿw½…-/7Êà\÷þ-ÆÿG¦3c­q/ØF—Gý=,þwèÄgZ>~ÕÓC" y£š>¦,�Ö8ãMÈ5H,§ã^"å€˜°.”Bù‹áVTûwý·5î0{¾wgrè
+¶ÓVYÝ*çÇlÿãßö@,Ûºå�iÜõOiÌ÷øü¯¤o˜9žÞƒâ€ñN#]f¾ÃúH¤¥Üÿ»Ö�PœgZîu~Ø	ê�Ðtf.�V®f¿ÿ×ÀrZÖ[²‰�?ü*Œ†�êüÛ
+Xðëw¤Õp¾ªƒý.,þÀ¹SüúûSŽ. ëNB¾,ÅÎ•Å”ºóU¡øvQ�Ã¦"[g3�êe~„ÍSvÊOÑ¿ÆèåÏ|÷ž©Ì‰°o¯Â	°­šËZw
+8_ÇœÛ0{‚Çþøôoœ†²gùÆËµž3…°okê�"†ñ1#âQK¡MC™ô"t¼ïlØíŠ’+ÿ}[\qƒjªì†ÑôvpA‘²+'K¬sæÎ9}í3%.,.ÑgX}È?ç©kjµ#ºAs¡·fv‡õZÕ}"þÔ±ò
+è8{€ÍT°ˆ¾ŸÑŸ�ùç¹c74ÙNE±œÙ5qÅèIöì™Û‹ËÕ°uÄ¼y¯¸|ç…-ñøs~Ïuù:É‡	+½ïÃ1Ö�‡¤{;Xw¶Â`æÄÌ�Œ\@9XBŸäö ò0w×¡oÇ6»U:Œ‹›ÐœåüU�YëÌT{  Ê_)ó�¥±²G,`†�Ò&Ï©}	¨~<´øv{q{n5+h
+ñW÷#çŠÎn?,„c¯@¬Ía¶Õ½ÆO0˜0ü«¯#s9v°!F÷Ú•F€¥ÿ•�\_‹àÛ†B‹·hÅy�+=’À:þþ+Z7m¡ç	1ž�í=C™ƒŠ¹škœòõïöÅDð©ïôT2üvBìdA…NÔô”ßzxÍq¬ÁŽí`uptîwg‘#æÕÁ)K[Fª'Ôq£Ø7Óùcì¸ƒ1w{ën�]ó‚MÜ-Ô8ÞÞ¡)¿•òö–Üƒ%—SpŽ+FßÅãoÁê§ìçJ={SÈ¶ìBÁÀ["§å©¼½7·v£µJk6�Å¾�Éß!÷”&Êà²Úv*~ÀÊ-R^üÃ�N{zË…cÓ– ‘k‰�;Å¾›ÏŸ¢¦=ƒáæ¶JÿÌö5‚|þXþéH34Æyë5™ƒj_Šôß—øøgô?r¾:ôöjî”ÈÖý’êñÃD£C9ãMÏñB€°`c>Æ·V36}ˆÖ—�}{óØ�Y»šøw¬Þp²/ý)�Ù>’‘çlI‹Æ!	2ýòÉ�œÿõ—�ƒ2u­uÓÕÜ^=T.)Ùç¹Ièm8äÊÂ&ˆe‹L¼Þ~4nÎ*ÙóûŸN¨[;xÅ°‘é¿œþ¶­©
+x<ë¡í±¦)M…„ôø¼ÇZado®ñaO°ïg_+{åÜêv_4o‚�ß7ÓJc÷_ÿÂgA—ïŒðWw+7…PM`¡Ž˜s2bÛÁ'îTÊØ"ÜÌµsô¥NùüMÁÔžZc]ÿÈ¢êß¨¦¨¶�1çå!4ãÁÚÆ�ÃqìKƒ8gÒóÛóÒëÚûªØû%Ðþá1NÌ=÷·SÖË7-–EñÔëkí:`à#øPJ|¼ÿ³eWö?©iàÖfò‡Ëš ûz z‡Í~uþi Õ1§�çš7ò‡á�¾DÔöaz¿Å¶’êã¼˜e#òT¿ï{>ÿ=´Çj8!!	@§#†D ÿ÷K�~X7x3DA†» >ÍïwÈ+$xUÜ7JüGe©ðøÇUXây<óø‚7pòŒ�¡W<yüDÈþ„øÇcùü´/ÀÆE1þÂß·�-˜Gˆ�Wv	hþe™µÓ®(v§¿ÿÃüæã«f0ÐñI©~
+N~à4`Âá°µúDÁÆbÁ»Ø}mô£0ÿTË
+2€5G�ü7€��‚æÖ—CMQ£Ä~vÍATŠ²å<Á|ÈóÏ¿ÚÝ»u§µ^¶yÔ¯¢Ï×ÈÞ„ó�XÔßIÛ^¥FÖ G;£5˜(Ñ0JÓöŸÍr�êcÏn?ÀRƒêB—÷À·ãYN†v�.	ØÑ7*f†!ñ§9­˜)B‘þ”ÞÔêtömsÏŠÊÛF;Â¦“0°²ì&ïõ`–'EaÁkŽ:Ðñ¤Î¾mÞÃ`ÎNHµÖr8dÀ»ó" Nþ€EOü#Ý+uú…?e±.­YÎ¾ujüÑË»ÖMªÝØsÎ¶ntüåâBÂ´ÈM?ñÍèÓ>[«¼|ÿ£°e;m…�-Û¯‰›À"¶±6ì
+î©Î~ÚhLf‹3”ÑÚµ]‰¨"RÖÇ÷tÔÎ~g´\n£ò?þ´d{ŽÈsÀ4¼Sö®�hhq ZªžC9éñþ_µÓ–m|á:ëÎnØÿé�ÑåQmñu8öHN7þ&ži„Çó?{4ÉªCÌF½~w:ölÿÉÑ‡[r,Ï:Ûbó¼U¦h_Ãá°Ÿ£tõ>œ”Ïÿ\äÙhæ¨ëYìãS<à�®Ì†Aþâ_jwí±æØ<]ùbØ<¤´<>ÿ{:¨ÝRoø¡ o©÷ØýÂ!1�ByuzpÎ©tp�ëÈæ÷H4ŒcûøX¯¸~ÓÐåW´ýú¼Åsà‹{ ^cd˜®F©ãq$†ç€@€¯Çó7úœèÀ²Vº	€W€Ÿ&¾Î ¦	»ÝD#ŽønsÖÍè·©/fOÃÇ{�Ñ…kè.œ“­PõäËš>Ôû=&hïn§u«Th
+i.›ðoó÷<ÞÜržomú>Å›.É¸¥ŽvM}3®ÕãÀûNfn‰á†ÈúÆöññ?œÒ4Ô‹5«%Ýªù¶z;º$¦þûe}[í°Ç_tånƒ[¿€}|þ's¥£0çáëØ­
+Fœ�=¥âj˜%€:î!Ðí¡Qr¥ôãëßkíYêzÔÿšb½ÍmÛHÿŠl\]yŠ¬hÞ;ù|v`F”VTRá'ð·"m¢9Hî¯Ö;xE_gÞW·¼ÍÄSÎ žùëY;kÚ~ˆ�ç¿mó­Vi÷óæ.HsCjØcñ³=ÜÒ:-ñ]t‡Þ­zzF}Óãý_îx&è	oòãöNòpfŒ‹Gì�%	¸³S‚$°á!w+Ÿç3ê·�¯ÿ8l+@;æâ¹åêð$ f7÷Ù�\Ic?-·N‰ÂŸ¨éÔ?ª_
+Ð/ôüûoœo4†¼eÏ¶X2@ò|ý(*;pF¸Ì,÷V‘Ú§ÞÜ…ÓBîñþßgêó¢£]¡ÁªyÝ}Óƒ"÷§¶�‡w«G¯öåâå$o+ÇæôœÀlB—°QËãûŸÎ1'\ë×I0@ýÛÁà_kÜÏSÔŠ©¶îº7ÖV•ê9Þ—ZÖÈò#úÿó)�}ºµíj¤
+¬zt�Î‡/Ã7^Fw:Ï:s˜L1ŸR0&ðxÿ—.+"þ%º}Ye™Ñrÿ†Bö—Ln«¬öæêvoµO‡èGCË¤ÇíðM4þxºq0;iÀ¿##0×ômævtu·é6Cà:»�ýE¶ßÃâïÁW�âYoøú*ô^‡õLÿbEÐÙ�Æ?¬©7ŸÖÊ°±óÙ9î`@
+å‚Ããù£+GµŽØC×B�áhÝYñ(\zY1lkmËñÿMZ¯ãàj7?âþC˜ô+_ò¾šîx=g8îGB· E¸ýµ3ýê »ÃTZoY£XÝéý¥ïgôg€¤6îlèÆzø1 ­kÏüwsExÝý9Ÿz^q$æL“®aèåÜ/�@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ ÁÿüE£ÕÛÕ]FovmkBTúÎÊþæ„xœíœXTWÚÇcAz‘>}P¬`!(ÂÚ	RD£«Æ^¢~k7É&ÆŽˆR{�Ù$¦lŒ›Õ¬ÉM±'šØÀ†KVVc÷¿ï{`qPH–Ì'žó<?ï0·Ì½çÎ[Î9WÜ—»0—³/cæ†/ÑìOË`HÉÇ°ôMØ}ôLÙ~Ü¥3îÞ;^–J‹â1 œ–w‘µñ[4’U¿l¨úçB“˜%}Ö÷ÏÆ˜ŒOpáò/eÇÊòÈbmm«¨?pûÎLX¸	Šð7`ßc>Ô¤½:q1‘MR<ž]Dû¦£íˆe("ûPršl�(ÖÖ¶júSÉzï[(Ú½Ï~Y0¤’îI9Ôî¡MY]R.êt�‡vÊÄ±‚Bqžl-ÖÖ¶JúŸ½TŒ�ÁKàÐ#£Dûþ9Ñô_mr>§#"n8~>º¦ê­¶kk[%ý§¯ÿ‚ü}N‰ÍO²¬½Ð?±d«L[ƒ§‚ŸÅ«/Oª©z«-ÅÚÚVIÿ�ÁKÉÏsÿÎ­TûûH[
+—N“ÒØ„Ó'
+kªîjC±¶¶UÒßH9ž&‘cý<Ò7û‘úk¬€oÌ+pwuÅ¶-›kªîjC±¶¶UÒtæ§”ãQŒ—TÕþ¿~Q“àbWïo|·¦ê®6kk[%ý8qþ)¹pï»º”G´�Älh®‡2¬7ÜêâŸ[¶ÔTÝÕ†bmm«¤?—q7Sþ7úäÜûb½ò¨B•º
+ºÄ…ðòõƒQ¯ÆÑ£Çj¢ÞjK±¶¶UÔÿ.._ÃÓ£–£Nd:ù�%ÔÏ´ªÔÕPXŠ€ÐØ×U`ÌØq¸sçNÍÔ\í(ÖÖ¶júß½-6Eþ�?[E§éðKY
+ùyÍ€U¤9m­‡!a>ü[u€c=Bš4AAaaMÔYm*ÖÖ¶Šú—ýƒÂÂDöŠ:�}àØ~"<£ÿ¿./À/´<¼¼aGý¾EËØ¾ã«ÿ}mÕ¾bmm«hÿKŠy¨øB¦ÿåÏhÑ,žnpu¬�FNõdÂÄ^À©S§þ—uT›‹µµ­–þËÅŸÎ`××Ûñù¿¶â›o¾Á™3ç~k}<iÅÚÚVKÿ£GŽ`ûöíØ¹s'víÞ�ƒÀ±‚?~…Ø³gŽÐ17nÜÀW_}%Ž«Þ¿›®qóæÍ‡VÐ]2:ûöí{èõvìØ�ï¾ûîW	`©üòË/øâ‹/°uëVlÛ¶íWÁõtðàA\ºt	·oß®ì§¬­mµô>|8ìíía4a0îÃßßõë×GÿþýQ\\ŒÎ�;ÃÍÍ
+���ËçûøøÀÛÛ[ÔÓÃÊ�Ä9|lÅëèõz˜L&888à•W^ÇWo¾ÑòÑÔ¦Äý«Tª_…V«×CBBrssqöìÙŠ?emm«¥ÿˆ#àää$ž‹õ.ëlgg‡øøx‘ó¥§§£^½z�eX¿
+à�7Þx¨B\oü›¬µ¥ßäzæ¶ô°þåÚ
+œ½XŒÂ³?£ è"ŠÎãö�{Úó§»"¸1Ç¸…hÞ¼9üüüÄýÿZ¸�k4xxx aÃ†
+
+Â†
+[ýG�WWWñÜïÊ,tJLLÇ:tH<;÷ÞWñøÆ�ÃÙÙ]»vöÖRaßÀöÄÝÝý¾ß2%×pttBJrRÙ9çÿ}Ÿí.Dö‡;1nÑ'ˆí]t¿­†.G“ÁKœ–‹æC– jÊ[xqégøöPÑ½¼[2VÁþ¬E‹âÞ+ÞwuáûæûäÏ\?ÜæËµkk[-ýGŽ	ñ,Ü÷ÊÃÏéèè(l÷%¦_¿~BcÞgéx®_¥R‰½{÷ZÔÿðáÃ¢ùúú–]ÃD‹-ûµ/å¶X½f>Þ]„Ás>BÓÁypí•�úÝæ¢^Ô4Œžû™pê�
+—>Ypé�	gÚo÷ÇtØDÎ„{÷tLÉÙŠ·îùèãÇO 9éÏ÷Vñ¾ËÃ6ÉÛ3¾WKu#î—¾		õÁíáôéÓµVsL———'|³ÙVWvNVV–Eý×¯_Oñ†�¨[“‰Ï1• × @çCPsøwŽÃWÃ=6v1sáÒk><ãÁ/1ª”P§­…–ÐX	}Újh­�6u4¥c–}Â¦ó,$½þ®ß¼%~—ý?ÛÿÊôçççgâ˜„ñòòB£F�„¶|ŽÙÞY:�Û
+×É{ï½WkõçøŸ÷_ö�åûoy¸xzz"..®ÔÿÞ+ü÷°aÃÈoÚ•œË¿éo„Ií�€ &ÐuI:.†rÐ:xÅç@Õ?š¤\hRW@5ð-hHoCâ|DO„*¬Ü´-ÑÐ/õ‚úÂñ�ó J]Z6‡¡IÉÅS‘³‘2)×®ãÅi•éÏÏ®ÓéÄþuëÖáý÷ßÇÆ�ÅgŽA›6m*ž·2;Àp,0wîÜZ¯?—�
+¿WYàöÁ}‰ã…ò¥¨¨HØKî_ÁÁä?Éj} ïmb6TƒÞ†:eé—UBÊR¨ÒÖ‹ùGÿnca�„—¯7œlmàëæ€§CC�ß#Ÿ‹G§¤)ðë¿D¬_V±þÔn”)+¡ÐõÄŒ×^ÂÕ+WjQ³ßâý–æ68gä˜Ô;T¦ÿ›o¾ùDèÏý‚ó(¶á–ê‚m%Ç”ì+Ê—?ü�¾§üÑ„ ƒÔNôÝ&@C}[5€ú8¯Cáv@¶\=`qé0>“?�îõàçf‡ˆá˜1}:¾ùúk\¸p±4¿‹M_ì£!Þñ÷Ö²°_pj3­B±wÏ.tìØQÄÿ–žS­V£eË–8sæ*–ë×¯#22RøƒŠõÄsŒÀú—ú<kk[ãús=Ì—òyß³�(_Æ�Wú>$@£©1ô½_%»¾Žüv4	‹H³<(Ó6@—°þˆƒ�¯ìë)(&T’ßŠOÿù)®_»þ€>'ºŒ¨ÉàØ#£d-#Ïcòš…Aká‡&F?|¶u"""©ÿùóç¸þÏ?ÿŒ6mÚˆ˜ b=ñ¹œqòøÒÿmk\.<nÀ}œý½%Àm£Y³fæ˜ÅÅÿAxøÓP{»Sÿ€®ï›Póš~ß„ú½*‰ü>Åt1ãÉøÃ±®z­
+“&OÆþýûÐ„Ë¥â«X¹y/üS³a3º²uä;’ó £xÁCˆvmZ`ß¾ýèÐ¡ÃCõgûëÖ­û~ã
+ù�Y³f‰öÌ~­|=™s^ôíÛW¯^}bôÿøã�Eœg)dØ7p�±¯à²iÓ&xy¸"@¯„¾ûŸÉ×¿sßú"åÀÕ0F�€¿·3lŸÂ ç†à»ï¿·¨ûÁÂŸ0ký—hýü2("gÁ±çÒ>Ÿúþb¨JÛÒso# rØ`ðà!¸|¹­[·®4þãûe-Ç�‡©S§bÊ”)3fbbbD¿ç¿ü³šÇ.x<Œm!�/”kkû»èÏý"<<\ÄÅìï-µŽG�-ŽéÅáÜ°’…6êþ‹ËÅyË…=Ð©üÐÈÅÌ¿ï·nR¿ëÇ"d¾ó
+b_y�4^„z]gÃ¾û|ø’¿×•®aT%Q~ÈëÒÖÀØe(ü¼\àâä€-[¶ˆ¾Ùâ!ù¿9ÿã¸†ëƒmoÙçsÛ(«(­'Î8&dWanÔÚÚþ.ús™6mšÈ{-éÏ×ãºëÐ±õ½ËèÕ=>jè„Þ+EŸ/ÑŒúlÚ:ÂºÃ«¾sf¼†›‚*ºŒ··Ä¤œ-è8v|úeÂ¶Û<ØFÏ‡[ßL(KsÃ¤<¨¨ýðúT-Û�~3)Oˆ‚—sC4¨_3fÌ÷zâÄ‰‡Æ,å1�õšŸ£|Ý˜Ç‡*raÅÚÚþnúóüûî–âb�FK6µ	Òçg Œbpß6ñ"ŸS±vâ½²Õ”ã±ÝÖµî‰€ð¾6ó}DO}±™¨5[Œù¹õÎ€_|IN§IÎc@ªk)v\KyÂjh“²`ìþTM;ÃÅÑ¶u”³‡`åÊUe÷Êö¹*ú›è™¹=3–|›yî£]»vÂ¶=zô‰ÕŸÇø£ºu+6ÀtÑ‡0é)ÏÓzÁ¨ñ‚¶Ï_…­Ws|V¶Æ�ßA ž¼D¬7³íž!ÆmÜûdˆ<^Ÿší€åÔnV‹wPÔ”'j¨½cgÀ¿ëóÐR_÷VéàØà)¸Ù?…vmÃ0g^:NVX¯RýùyµÔ·Ù§qœÈý¼bÿ7�ÿóüÇ}ü™çÈŸ$ýË¿œ¹pìmëQ\§†É B NIš«àoD@ã¦ðoÑÊ°ÐvE¶?§l|æþwÌè»¤¥P¦RÛàµÆƒVk(~_-ÛˆØ™PGM€¦]"|w€§Ÿ.ÎpwjƒÒ‘íÃ1í¥—°õ³­¸xéÒí´ªúûÓ=·¥<�ç¯"(ß
+ƒ··—èïmAP©�àùñöíÛ÷¤è_~ŽýÀ÷û©~à­#ßØºí“ �]ï×¡‰§|<y±xwH�º¢ä]Ã
+ï‰±:¶ý(†��
+M÷—áÛi(¼ZõD#ck¸zéHk¸;ÛAéÝMƒè‰Æ�ÆòeË(7ü×®]³¨yÕõç>ŠWçäàö-zÖ;”ÞºŽôysàéå-žÑ’�ãØ�×O¼ûnÙ;1ÖÖ¶fõ'éyŒô³=…x}Í—8ãfÃ7ntÂ/¯†’òn1O“¼\øw1¶GßÍq¿°ÿæµæÙ¢Ïë{NC Qg[¸9Ô‡Î×­[„ ¶w¼0q"rr²°…ú7Ïãß©Ö‚�»êo*�{(õS&£ÁF5ÜëaÃš¥âøŸþ};<‹Å×‘ß�â\ÇJã\ö¼Ž¦tìØÚÚÖxÿ?ûóè)æR„ÿ
+¢æA™¼¢dŽ&y±R¼3Ày˜:•c³|êÛó #}
+ÑãE§J"_Ÿ�SfxÞÎ7!†ð~X0ëUüã“MØ½gÎž=÷›ÿ³�;æùÿBÖ¿%T~¤¿¿�ü”
+&­Lä¯ŒôwH(T-¢�89ç|ŠæC–Á�bÏýgîbÕò<ÔoÐÀâ\0×ç9Ï<ó.^¼øDèäô%xÆ.@Ã^ÙÐSŸÖ¦®¤¸|	´ñ™ã½m·‰0tLƒ±mw›?�À &TçZ¨AßiÅyœÿç‹ù=óxÏí:÷ÎÂËË¿øm‚WR~*:‰V!Áðõñ¦¸¤9­º@ÿL"ùªÑÐô™.æŸtVÁ¹Oås`ßc!ÜâòñÜø×ÝµT*uYNX±ÿs¼Èy!¯
+ü�u´Šþû�žAäÄuh•2Þm’àÙ$�ôMÜ¦ÿ’˜_Ï± 
+ÔßŒ”rŸ#;ËýÍ=êçþFm†s?Šïø=dòªÄ<4ŒÉ@Û‘+‘÷Án>uÿùåÆóÈ+·nßÁÕë7qñòUj§ñõ§±qû¼˜³†nãá×}ÙžLhR–��ZE¾j
+””W¨Ri›ºVŒAk­…žâOCr6Ü|Œ1ù£yËVBcKúsþËc�›7o~"ô¿rí:®P�6
+…-)·oÝ�ºtM‡¹Ÿ˜óÁÒkš‚EðWAßu4zf‘ïX
+=k‘Pj’ràÚ;
+¢çBE1aç	«1dÎß1méç˜óÖä|¸K>Ùƒü�w#çƒ�HÿÛvL_û%¦æoÃðùÿ@âëÑmòz´ºŒìÊ"4ê•;º–}÷tÒ—ìû¦T~¿i¥È)Ub-É
+hy¾ žüT÷?CÙ.îþmáàæƒºuë .îYÊ	¢îËË¯c»Àã`K–,y,õçø¥ü¸—ó:\‹ù?ùÕM›þŽ�>ú'NœÄ©S§Ñ²U+1æcž½G¹kSû0ùëà¯õF—Ä1hØñ%x%­„að½ØPGm@›œ+ÖñÔ�N‡MÄ("fÂ&rêt™ƒº]‰.³Åg›ÈÙ´&íŠÎ3Åú¯]Yï¸>›¯²+¤5�-ð¸°:�òËÔ¥³¦ÃÐ‹b’ÈáÐ·î}pkýáéÜnv6hbðC�¨N˜úÒT|¾íst¡|�×|š×€–‡ëŽóÀ±cÇ²­²¶¶ÕÒŸçUmmm¡×ë #;VÎmx~#66öý-Ùä	&ˆkñy¯e†çQø�²v­Cqátæe.„k³°}z<ãrDî ¦~ªN^)bJ]Ê2jKE¼ ¤öáKø�¦>ä+|è;?Š%Uœg°ÆJß_¸º´•tn>´	¡£˜DÙu<”O'Ã7¤3<Ô�áÖÈ�œàëá#Å�AÿûyºbèàAøü_Ÿ‰|�×Œ˜Ïï±�·ÔOØð8h§N�pîÜ9kk[-ýÏœ*À�=_ãÐ÷{àð�½Ø¿ë+?ò€Ö–Ê�ëÿÁ¾�;,^«â5ÏÑïšË±ý;0zès	muhô‘ÏC×ë5èâæ@Ÿ-åŠÚ¤<1ö+¶”Sh“‹±!]B´q³¡ïóWþø¢?ŸI€X›„Âßà£’b>¥š¼Ð)Ô„þ½"ñâ„ç±,';>ÿgNÅù¢ã8yŒ×+YŽ5®_Äé‚Ã8w²àAèYÎž<VZO·­­m•õç|õÇ“—ðõ‘óØWp{-°¯ð"ö;�o,z$»�þ$Ž·t�û®I”]óðYúî<~(*ÆÆÍÛ0`È…p¬e X’×„‡›¶E`³pÊÓˆ¦í`jSpL_˜Œzi|ÑXí� µ'‚(îä84¨i(ÚvêŽ„�#ñâŒ¬x÷clÛuß�¸„§.cÿñKØ[z¿|?¼ÝuäÜƒÏvèŒx6qÿ|\Ìçòç]GŸþå—ëˆ·Šüæ,ØÅ.‚]Ÿ…•Ó·
+<ìüJ®Ù�é“	Ç¸lh†½
+ý˜�àšºö}fÁ!f2»P|IDŒ€SoK>;FŽ‚S—ÑÄ8E�#&À1zÅ”/Ã!vìãÁžâJ�!ë¡õ>Œc>€~Ä;ð´®ä;èyöY(¨Ò³>òyÑ5À”–cmm«¡ÿ
+´·–ôŸEl}³­GŸ,(ze–ÜGÒr((S {°Š�DÚ[D¹íÀ·J>›·iëèXÚ¦Ò6…ÎM¦v�´Š„|(žÍ-½þÂz/ª�ûÏFý¾‹”šgmm«¬ÿÕk71y1¨®¨žúçY™Å°!ß)Èç+éïDÞV�þf‹óîí+ý›¿¯¡û¶I,¹¶kR.Bÿ´ÜÚÚVSê3Ñ%Ïb®+Iµ°áöJ>Å™Ú_«ÇN²¥Ñó¥þ¿…Rý�ÈÆ<^ú_GäÒ?f>èÞÈ^J~d÷í©þ<ésË!+¬­m•õçqÜhêÿö1éÐÓ3hù�	IµÑ	r¡KÌAóÇC‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰¤6ñ_"?Ö±×mkBTúÎÊþè~`xœí��‘)…ˆq Ä‰8âDÈ^éê>×»gI@ÏÏþX¯jjg»iÐƒž——Á`0ƒÁ`0ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù�]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzü�ÏªÿÇß¯_¿þ~î
+:ûsMeÑò#M”Ï3YŸ#=÷2û»QžÛ›ÇßÐ™¦‰ïŒ[\s=E�ó8´}E>¤GÈ©éTîø Ú²Ê×Tªg-Ÿñ}×þúÌ¬üVfÖÿé�¼�Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~�<Vrvº@>Ê!?÷U�ýù�ÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+í‘¹^edÔç½üLo+[\Å-ö§k»ïä
+döW‡ïÍú(}Ýý�ê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}ÐŸuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õÆ‡dºÐr2ùÉ_ÇCú‡ÿï²¨ü:—©ôéºƒÁ`0:8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq�{bUþêÙŸÖq˜�Â©Î®è¸âmï!«Æ¶«g*ÎªòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ	çU¥?)ÿV>­Ò“ó†Î)úçx�…|œYé¬Ò�Æ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖÊ½VÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x
+ûëØÉÇ÷â)/ˆOSÎy²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0ƒÁ
+Ä¾ˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{â¬¿wÖ&Ýúõ™û3®Q×”�øN¬ðQev×	�]¨¯Æ·ºö¯gcH¯úËžçîi½�÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>�+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªü�ò\ÆªÌêúŽ¼ÄUÆ¬ìß�·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈR��Èôï|GW~•—î×w«2«ë;òfz<AÇ�‘ßŠgìì_éçlùú§ËyÐýŽÏÒþžÅâ³ò=¯�³„U™Õõy3=ž ÿ•[ô6_íû¹Úÿ3]Uý_ËîìïôªÿkÞ]ÿ¯æ]ÿ×²«2«ë;òÞjÿ€Ž->†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyÅ¬|E7þkúªÌêúŽ¼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=�Î‘}NŸÍå»�Î…ùžü>åuåWy­d¬Ê¬®¯ÒdzƒÁ`0*èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì�˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,�,^�qF/XÅûv8º.Ö©gá×3}íÈ¸âOPùì�~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+ãŠ<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑ�p�™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Ò×•þ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ�³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ	veO\k^8Ö”�¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñÑ˜
+mKãè«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõìq�³:£¿ÏE=Ð
+z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u(K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ�4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû�;=Ý·åòxÚëpû;o@>ú›”È˜éT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â
+½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîÇºÛôã{-âƒoô½ÜSd×•_ËžïÎ×ƒÊþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞj�Ýêºï%Z�[~_Ë¯déÖ®·¤ñ²+�œÖñô¹Ìw]Ùÿ7ƒÁ`0ø» ë]ÏÜkÙíIŒu�¾+e§L]«ïÎÖ‚ïoA^�ç°î;=GR¡³?œévì¯±Ö;<÷ôy‚· o�$Nî1ç´ˆ=:ß¥PîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^�]ËQ¹NÐ�1qŽG¹�¥w>Ã¹{å•á<Fªõóó�ÎÁVþŸr²2½nÙÞloÿØ�Ø§Ç|±m¶o›¶'âqbì­í¢Ó‹Ëîr�`eìêef±ÿ�è6
+0¨lz’ŸsAÞ_²¼«°îÒx7±Öì·£*îU}�î­R®%ó+½¸¿C®¬ü¿Û_ç	·ÚŸ~I\ýQö×~±küy©Ï#_·ÿjo~DyUåÀ®^ªúž`5ÿ£žpŒºåûk¹î‡oµ?:¤ÕË®ýÉCÇµ¹îwÙÉ®üŸËë>?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0î…lý·Še€·ô®ùŽg:…®×ºñ¶Š�ž`W×÷,3ËOã?«½‘]—¾\9ûP�ø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý�3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁ�hùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄÏ½®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=�é2ôl�BÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ	VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—º�ŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[Ç½×;ƒ÷…±ÿ`l?ƒÁ`0ƒÁ`0ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿cÂ¾#öÙé>·,Ïjoð­òw{õÕ†ú‡ÖÝ²‡Lûù=«mWèêòÈ2u_¤ö�¬ÿ8Ø¯–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿs�üy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇ�kþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”æ‘½Û�öàýðtLàœS6Ÿq`CÿíÌjfý´3–#ËéÜ°³?zÕ1ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝu�Êþê7m1‹è™Q]ßPW�Vç2ûS®Žåz]Ï¥zŸÒs�ý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢3ÏÛF
+µmkBTúÎÊþè~xœí��‘Û8FSHI!)$�¤�’FRHn�›wóîHÉY¯Ûx3žÕê‡¤¢�úùs†a†a†a†axI¾ÿþÛïÇ�ÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ªÃû�¼Ïâöð–þ¹»¶ŽÕo'®GW
+{>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚÏ±Úoù“v�[iZ_Õ±aÏJÎ�þ/:ùþüù×6õOÿ-¹”�92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwïèyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄiÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægH�ð–ö¾»–÷ó�üÏØñ�|†yž÷u¾Ä.½•üÿ†þó\þô³aÏÃ¦ŽM&ýwéÛÃäké#�Ï�ú$?Î]ùMço¤Œ\�ýÈ¾,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœôØgX #ìvçQç´“ög·Ú÷Bž™òîìÙ™^Êßuô¨ã�®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎß˜ò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û	ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}<GÈcåK„•¿1}ˆ¼§uåñxæLzÞ¦UþÃ0Ã0ÃPc[ì›ü<>¿g\=ö€c¿¶}ñ³M¾‹½ÃüÃgggÓêüàÖ	èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=Ç§H¿PÆîÛgçsì·ã/ÇhØ‘ñI
+ÇtýÜ~×{‘òçún^§}�¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅÿçZòï|~à¹_%/Ï,Îôp\€ËÉ¹yÎ°çZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌÜ¯5Ý»\í[½ãy|ÞÙÃçõÄ�8�ÔÏÝøŸgäû¿ËÊ±L{ä?Ã0Ã0ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒ�üÇøü\Sþã|<®)ÿb|��ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eû�î)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu
+ŸÁ¦lÛ+6»úßv´î›<™†×Ã¯‡
+¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï‘GÊßëŽ±š×Äzt�¸^vßä2)?;WmÆrõ5�üoäcö³ŸþIzì?ú¾˜�‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ý�üÓÔÅ"Ñ¯Ñí¤ô
+¹Ý1üÖóäÁñGg×ÿí{+Ò�·’×lûw<ý=}GÝ½ìÚFÆ¨�^ú)õ��¶ìzIpäG¿•ü¯ãKì¬ÖœÎ{Í{ÙÉßeÈïûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì?Ã0Ã0°š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç
+½?Þ‚‘�}¶¡åœXùçwíÅ¶‘ÚvÌ?ßå°ß©ð÷Dðÿ��ùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo	9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({Î±ß¯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç
+_[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´�L“øÇ<²?ç<n¢�Ñ¯n!ÿÂ>=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0×‹¼#ÿ5žßàøzæÇÑ�™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷UO7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý�~Îs.ãÚyœÑÿ�mƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä?Ã0Ã0Ã0Ã0Ã0Ã0Ã0¼.ÄP—~þ*ÖÎ1@G\âŸ¿äÜKÊðÞßrKXÿ˜µs2â±(ß¥òçºŽJëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽ�òwx‰ìb÷)“¿ëî¸_ÊK|•�‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òÏ±Qï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ	\áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ý�ûJY¹¯Z÷­Êêµ¢`%·Œ
+íÒ¤l9�…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡D�ç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+Ã‘Þ…Nþ9£àÝÀ}•{BÆž#t¯é˜×xî�ãÕ­s�XÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oêGý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f�™ògL˜ëz�/¯+Ø½[{Ž™ßºrðÝCôM®Y×q¦~áè[»{�y‹¼£®òÍy	cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú ÄPfmkBTúÎÊþè}ÀxœíÚ�mê0†aa‘ÒAX„A¤‹t®NußêÓ©~¢…÷‘"B~ÇÇv‚Íñ(I’$I’ôßçççñããcºÔþ¿ ïãžiß#ýGªûÙl6Óåp8ßÞÞ¾Öó½s•×[ªØo·Ûïò¸uú�–ñßív?–RŸuß¯êþ+Äf¿ßÕžÔ�ú^û¨|¯}õÉñµŸm³4ë3�™¥ÕÏ­uò�ñ!½ZÈù¥9RÇUšÕþYæø×½åB,zÿÏñô‹Ä"ûÉ|~Ô>Ž/|çÜR×ªïõYçÌžE™®Gß”ë™·L?—:fV²\êº¯ÿ¾Pv³ø¿¿¿¿#R>œÓÛc¦‘± N°¿Òb�úÇñ=­ú¬Øð^Fz=öyN¦I}ê².ç3ðÙã?3‹¶�þœÌ¥Ã*Çª7Ù§’‡Úžé§ÜÆµ2~£zœí»öWúÄ°ÖgÏŽ#�¼ÿä¶g±&þ‰2ãyK;ÏwÊž2Ìv�m“¶—ï£¾"ßG³ýg’±Ê¼d~g÷»´<‹[ÅŸXÛlk=�þ^Ðû“ìk³íÍžGy\¯×‡ìÏ3Múœ^&}É<ýæßA—ºUüK•Q¾VÙö÷ökêIÆ�÷	Ò¢NqÎ9ñÏãè“¸iöü-yÖç¿$I’^Ó½æy3Ý¿2—üÛä8È=Ê°~Í~×ôßS—Z{¾Žßc5f2³^#ãßÇ6òwþè7ÿÒXã&}ý2Ÿ£vÄ<fÛ—Ò}Ÿ]k–Ö¨]sìlÌi–çK1_–s\—1�\§¾pNŽ³gÉ¹WÖÃe[ö	ÌÝ¬ÙßË:ó™ã‰µ�ñfÆšú¸Ríï÷XÛ2­,»úÌ˜±p­üŽ~La¼’í¤Ë\÷Rž¯Ñã’õmÔþk£¬™�ïF}—ó¸µÐFç[³ÿÔ}Q~Ùçõÿ6ä<˜Ë¨Ï«Ì²Ê4ûµFåÛÿÁ1£í£ø�ò|�þü?'þyüìý!Ë‰uæfø$žùŸŒ5ûÏ½¯þÌË9b=º§ŒA/Ÿü>»VîÍ3±=Û3ßóÚ£<_ëñïó(ò”ë…¾Žþ“¾Œú¼vÿ9÷Å>ú
+þG@S¿À³¶Ç¿÷99Gy*þü"¯QúöÿYž¯u*þùl§z;É{-½ÊØ/Žå9v«ý§Ê=÷Q–¼_çs˜>œc)ç,kæ:‰gÎQžÊÿ­%†Ô�,SæÌFñåùšwAæÛòž2v´í¼WÊcÔWql¦×¯×ãÙÛÁšýì[º¯ÜÇ}ð,éñÍgùè7ç÷óF×êû¨}.2Ë˜ãóÚ³<÷¶vKãz~Æ_’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$IÒþ-ÝfàÊU?ßAmkBTúÎÊþè}pxœíÖÑ‰ƒPP±±±±q¹��‰Ù%ùtÃ9ðPgÆ¯«OÏ€á8Žsß÷—zjé½›ÿkŽû[×õÇñœ¦éqLŽY½–™š­ZÖ²,�ë¬a~}†¸·äX’o2L®•yŸ©üKÏüz÷—ìzž%µþ.×uòí'ÿríqÙç{þõ]Ÿçù%ÿôäÿ}’míûu¾mÛÓ;ß÷ùŸú�ëùÕ3�^ýÛ§–UúÞqí|à±0…. 1•IDATxœí›y�\Å�ç?™ï¨»ªõ-©[RKtì1—e ‘‘@¶°Â±3–í%Öã@¬Ãà vgÖƒvfÇ�YfƒÙoØxÆ°FÃ0’‡zZ²�Q«jõÝÕWUu�ï½Ìý£ªšnu·hŒG|/Ôõ2_¾_~3ówe>ái­%Ž&ùÙî·øùLd=®ûd·mXÃ'×€VÅº¢XÿcÌ
+¡•ÒE¢4ÿº�ÿõÌ!F˜©5ž§±MØpÙ"þì�×R
+À”ÁøsCh¥µ§ß}øîûy¡êÕ‘h„„L¾@¼/Áe7ðÄ=›h¨Š¢Ñˆ�	>#„ÖZ?üÔAþÓ÷Ÿ£vA¿‰ã©âä,A¡4]ñ4—¶XüüîYÔÒüñü=äàXŠ‡ž9Lx^¤H¬;�Xå)”,¬�òjGŠoÜõ}Æ‡û>&ö,�?yá0ãI‡ªˆ¿8cç‚V(å2¿¥™—ÞŠóÀûÑIyžB>úÂq„QZÞzîŠº4M%šHÝbvîú5}Ý]…Œç-d6¯Š†IKÎÈn	B{!úúy§³ãw/áy¹þÒf<O#dÉ=´0^/Ÿf<•þÝKxC~sã'ø©¬ƒaœ…\­Â@Œv ¥"‰}4Rž§�,¨æÆËZéO"JZAÌ¢´rÑV™Æé}ƒªÚFZš[>RaÏ7HÐüÙ­k¹òS�œÈ ……žM=Øá`‚‰¡^>¿ñ‹´´4ôŸGZ¹aÐ?’àKÿõQöKÐ4¦!A+4a˜™äñ'8ü/´\°’_?ó-Í“{&­´.êAW×I¾~×_³ûÐ¡º%Ba,7
+cº_#=2À«/æ¡‡æ²K?ýû–ýß=„ÖZh]Lt¥Fúyð‡?äñ'Ÿ¦·¯'7�! ¶i1ëoÜÀÛ·ÓÔÔôû–û¼À$¹§c4>@×É“¤³9üÁ0óç/¤¾¾ö£–ï¼Æ$¹'Þy‡¡xÛ¶Rððù}R¢”&‘'³`ÁÚÛÛ1MsÎF]×Å¶mV¬X�eYsÖÓZsäÈ²Ùìœí9ŽC8fÅŠçØÕ"²Ù,mmm8Žƒaª
+Ë²¨¨¨ ®®Žh4:g;“=úÁ}÷ñ³ŸýŒ††NŸÌRJºººØ¼y3?ü0wß}7íííÔÔÔàºî´ºBÒé4Zkž|òI.»ì²9…|ûí·Ù´iétšP(4­Lk�mÛôôôpç�w²bÅŠ˜…›½öàà Û¶mcxxxÆ;ß/ÃÀ¶mb±K–,áÚk¯eãÆ�ÔÕÕM«''ÿ�Ã0�RÎz™¦‰çy„B!6nÜH*•Bk=£ž‚`0ÈØØ{öì9£�{÷î%�g´cY¹\ŽH$Â¿øE˜•*Hç
+Ž¦èçdÿ(ýÃ)<õ±J“¥8aÊò�}Ù¶�RŠ¡¡!^|ñE¶oßÎ5×\Ã/ùËi²MÎÜ2¹†aÌ:sMÓœìøúõë¹ÿþûÉf³D"”šžM³m¿ßÏK/½ÄwÜA ˜AŠã8¼ôÒKX–…Ïç›|§(Í8iôõõsóM&UÂp"Í[ïóvïÇN
+Ó7’!>–#‘.�÷<”ëb[&uÕaþà‚Zn¾rŸ\ÚP´ÔZ�ˆÒUîË‡Ey„Ãaª««éííeëÖ­lÞ¼y:¹Zëi×Tœ^ÖÚÚÊ¥—^ÊsÏ=G8žQ_)E4åèÑ£?~œÕ«WÏ®««‹7ß|ŸÏ7ù¡5Jš\jŸ(°nýþ_{?»vÿ+¯ÿ¶Ÿîx†tÞEk�)M¤i`&RhÐZçèèKòü›'ùÑ®v¾±a
+±m-¶YÖ‹br6ÏaË�âà—!„˜\ÕSŸÑZ£”BAss3§N�â{ßûW\q���Ìm•æ€ëºX–Åõ×_Ï³Ï>‹ëº3f€RŠp8LOOû÷ïŸ•Ü¶¶6z{{¨¯o@—6=µàdQÚ�P-•Ëoâ¯xœÚõk²Ù¶e`Û5ÁÒ´†…¤vAH”àÐnM€lÎåû¿x“îá1þÏ�ðY&JyE¿s!ð<�L&3I çy8ŽC$!�¢”šA²ã8TWWÓÕÕÅo¼ÁM7ÝôÁÉ-7zÕUWQ__O:�&‹ÍP
+RJ�»wïæ¶ÛnCLÙ-ÖZ³gÏ”*ª¥5(‘O Bu8ó¯F7¬!oFHŽ&ú4a?Êð#U³0Š1ÜMvø8Éx7YÇÁ�.Å¿x-ÕH§@Ào²°)ÆÿÝs™x�ÿýß¶áŸEEM%6ŸÏ‹ÅØ±cÁ`­5Ùl–cÇŽ±k×.†‡‡‰F£³òbYžçqâÄ	€Nn­­­¬]»–]»vÍú2ÏóˆF£´··ÓÙÙÉÒ¥K'ËØ·o±X!$¢�C{
+ó¯@5ÿ!^`Â™@æÆð”H
+"òcø‡ÚÐÃGHõ!;:H8âÂÅ‹X²dÑ°Å[¹A:Üåm¡ ¡¡Ž¿ß¹“•‘¾õŸ¿;§Û'„Àu]LÓä–[n™±"?ûÙÏòÕ¯~uÒ»™K­
+àÈ¸á†xê©§pg†ÀeWª¿¿Ÿ—_~y¹mmmôôôR[W‡Î§PÂÆ]þ¼†KQ*¹aÐ ­B˜X™aÄÀód{^g4~
+¿m±rÕ'¸~Ýv®ýÜçX´x	1CòÜ¾#|ùÞÝøü~lCu³e­�Çã�?Îº
+›fµS	.{õõõÓÊ.¿ürZ[[iooŸáÆ•ŸˆÅbçNîUW]ÅÂ…žu6”]µ}ûöñµ¯}mòþ‹ÿüÏ ¶Ê‘µ"¨å[p*—!óI¤* ¥�òÅ°r˜=/3qb/Éx?õ
+óÙ°u›o¹…Ï\ñ|~ß´÷õÄ“Üÿô1\%‰˜”A@¥Èg'_ÁÃlýÉf³¤R©YŸ/«ŸÏÇªU«Šmœõ-g@}}=W^y%�>ú(±XlF@¡µ&ÐÖÖF__���¤R¼öúD,(Hï¢[ñb‹Ðù P†…¶B‡^Eu<ÍÀÉãÔÌ_À­ßþ.·nÝÊÊ•+gÈ1–Êð�:¹ç^¥{8KCUOiÚ°�ž‹<L¤¡–ªê™�Ïé�RRQQ1í^:�æÇ?þ1���TVVN++»v§N�bÓ¦M\|ñÅÀ9’pã�7²sçÎ
+Šäú|>zzzxå•WØ²eû÷ïã�ãG‰EB8­›q+–!rq$E#®}Aü}{Ñ‡þ��ñ	¾ôÇßàÛß¾ƒ]4£ý·»â<óZ';ÿ¥ƒ×;âD‚~ª¢xZ¡•B&ÚW�¿ë9²ƒ¬¸þë477“Íf§Ø©òZ–E6›å®»î"âyÙl–ãÇ�sðàAb±–eMö·ìžutt°fÍî¿ÿ~‚Áà¿
+¹k×®¥µµ•“'ORQQ�çyÓÊMÓÄqöïßÏ–-[Ø·w/¹‰á‹>O¡îdv(
+ŒÄJtãý©œËÿ¸÷ò­oÝ>Ù–ãz91Äþ·zÙó›^^ÿm£lÛ¢±:‚Ï”xÊE|!¤ëÔ¤³Óâ+_ù2¦iLóag#·P(ðÈ#�Lú°ZkLÓ$‹MFgåû¹\­5[·neÇŽÓ2†çLn(âºë®ã¾ûî›±” ¸dlÛæÐáC$“I··aWÌG5]‰,dA{ $ZH0|Èî½Lör÷ŽÜöÍÛ9ÞŸäpg¯ÿ¶Ÿ×ÛÇ±¾qÆ’I0`PWÂ� qeÑ÷5„ÆL÷À‰I™ñ¬Ã=;þŠk®¹†îîî3e;QSSó^ÔXŠê€Éëº.Žã°nÝ:¾ó�ïÐÚÚ:£­s&`ýúõüèG?"“Éà÷ûg
+…Ž�ð“Ÿ>B_×;X/Çµ« ?ŠÒD8)”�Ä>õŽ‹5ÜôçOñæÛ=ŒMä�Bö›|>êªíbÐ l�J‚P
+ÃMbŽ� ê ãï —Î°lå*~pçwÙºõ�&É{?Rb”-GbS!¥Ä¶m>Ì<ÀöíÛY¼xñ´:ÿ&ä®ZµŠ‹/¹„¯¾JcSzÊÉ­>Ÿ�—MòÐý‰Ò`·®By¹by)— <¡,»™¼â§/ŸÄÉ¨ˆØ4TG°L%L<aS0ÚCºy¬L?"Õ…3ú¹ÁÒC§°L¸pÕ%lÞòG|é–ÍÌÿ€É})%ÙL†‚ã „À4ÍÉüHypÊIª“'OràÀ^xá{ì1Ö¬Y3ÙÎ9‘[>éØ°áóì}éE¼ÜRh´ÒEßÏð�ÂU’5£˜-ˆ@
+ÚËƒ�S2]�¸Z ÝµUUfñ¤%^åäðò#ˆ‰AD²�B²o¼›ÄÄ†v¨ˆFY¹x)WþÉV®þÜµ¬^½†ªÓ¬úû…ë:Ô××�Åð”"9ž »ç‘HÓ4'Ã_­5TVVÒÙÙÉí·ßÎÓO?=T�¹SííµW_Mã‚E$]AxÞB´¿˜‡Ô¢|´À0|(
+¸9Ó¡hŠA•t&�¹<*Ÿ$ŸÄKöã%ðRqtnƒ�@�šÊÍ«³üÂY¹ú.ùä§hm]‚ßï?§I)á®ïÜÉW·ý	†” <þö‡òW}/±hÃx/�S6n,ààÁƒìÞ½››o¾8r5(­yå7§Øw´�ÎîÔ'ÿ#ÒâùÃ¸²¨K…*f»´PÅå,ðEù	Ðnñ7�F›!Ì‰^¬£?e4>ˆç)bÑ
+jêêX°r%‹[/ ué–^°œÅ-‹X°°ù¾³ç³$ÏEé—´B¨ÂóPùÃ´‰'2t¦Øúµ?åÀ�×xæÿ‰…LóŠÊ^†iš<ÿüólÜ¸±˜¦ýÐä
+ˆ'²l»÷Ÿ8ñî¾HˆššZ,\¥À)A
+ÐÃË¡óãÈÜ8ÒIáV-G	ÒsÐ²¤wÝ4¹àBDí¥üùm+Y¾úÓÌ«k¤¡¾ŽºÚÚs:¬´F
+QÊ™Ëâ†·W·€(
+²2|è@5ÁÖyâP�gû_ä_ßî¡³{”Wr7®¿ž'~õÔd&pªqB`YGŽa||œªªªsS™9—@Í<ªb(ÏE+ÃÉ@!Ù1ŒÜ0"7¹1Œ|Ü	t~½d#,Z�Î%ÐJ‡BÀpí5ÄkWñ­ë¯<ñ¦AŠb&`K/Wô‡íyxÑtpkð‚
+%¦æÙŽ4éöCøl?¾HŒ¿¹÷/é;²›ºÚâVÎl9ïr.ehhèÜÉÍæò¬^TÃØ`½G_A¥P™8U~‰tÓàæ‹‘½VÅ,L„0ÀŽ`Ÿ|Ç_‰Óx2ŸDë<J˜B
+XÜû‹6žã]¾~ÃJ®ºxõUB~kÖÈj6¸ž¢àzäòc9FS9úÇ²¼qøãMëÍòá°‚(i£‘ 4B	´DbQ*+£H4¢�äÉÇ¡)&¨®©a"™˜5¿`Û6ccctww³|ùòs#wQc%¿úï_àî;¾É¯ýœKV]€^�ÁøÒ@[þÒweBô¤ÞÕ€Ñù8Úsò_HE4Šmæqœ<BJj+}ëIð§í¡6b±tAK+i¬Š
+Y„ƒ–e •ÆuÙB�lA3‘q�È3>‘a,™#>že8™!�)�)(„!©¬½YxQ<°!¸ 
+'é8ÎÈ)²Ã�äGºÈ%ùÜg¾@"‘bldf¢ª,åóyzzz€ÓÚÙ¶yNGÈï­øüÍ_`Ý†›Yµj
+RJ6Þ´‘‘áÉù.?[Ì±¢]0m¤FÇã\~ùööD‰6-#àd&ÐÊ¥"dÛ¤3{�ÆÙÓ>€Æ+EL²hÌ´FQE‹Ç¯h‰�`KÓ6±ýv Du…iØ <4
+S9È|Q}‘B'{`bé$H�Âur464²è–³úÓÛXwÝ:î¹ç/Èd2ø|¾�…a
+>\™Ë®ë�ÏçqœZ�¶Ai¥²™1¹FpÃ
+8íÞ5W_Íƒ>HSSê´\ÃäHKI*�¥µy>�ýàþþÉg¹çï§7ÜJ´q9v0\Á°ŸpHMFJÅåOâŠßÄI!�ÂC"EO@€Ôx´“C$‡pÒ#�B%ûÈ&ñ2ÃH'�mCA,Ó"™L±é–/³õÖÿÀÂ–EÌ«®&XÊßFJÛ<åLØ4žJÙ´C‡�Çß;2Ð{’±á8¦eÏ$Br¹ÕÕÕ4,\2+YS¡ò¼õÖ[gô9ËmÖÖÖRÛÔÀ»G^ão~øwì9xœaÌŠt¨ì J†QÊC�¹CÚC¨Ú+ Ý¢�†ü8"?†È�!³#¨l�O!)ðYTUVÒÐ4ŸÅ­Ëh]¶œå]Dsó"LÓ$—Ë3Q+³¹'¹Ô(£#£³ïfˆ÷Bå†…-Er•Rtö%Hä=ü†˜õð~9ÓîÎ‘Qš
+Ã4gÝ¢ŸE”ÖÅ6¥Ä2
+|>ÇŽ´óÄÎ_ðú�8ÙqLi"¤�2} Íâ¬T
+�ç‚Î�ç€W@89¤vP0,´DøcÄªëiii¡uù2–-[JKóªæÍCJÏóŠûx%õWÞ¤œ±ê¦ìÏ¶É©K<¡5žVErÓÙ<7ý—_òâ¡~‚•!Pg åýë÷—™Öfù4 išTUÏÃð¦�Bä‡NYÜŸòy¡F	Yò H	H´4Ð–¬Ú�í'èò0¥@¹ùl–L6‹S(”‘ÌÒµÙúzÖ¾	¤ô˜±Ë:Wà`ŒÙ�–|Xg_®&Õ?¦~?Dš :�ÅóAºdËÆ±”o—Z½w)E:5A|,žeC$JòAä=[]
+¶¡Œ"¹B€e›à·Àožq_ÿ£�YäÊ+€Îƒ.y_R‰)—Cé§K€mòáGÿ,¯Ö-!¡ù­©®˜.í³èä–(L~7ë§s>8b–òßQÿJÍ–�O9½ä÷Oêù=ùq@ÍÉŸ%›þ˜ä£¸èýZ£µ(’«KCM­Ð¨�ÉýPxÏÐ(àÿçnÓ£Ï
+IEND®B`‚
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/images/logoIver.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.number
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.number	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.number	(revision 30230)
@@ -0,0 +1,3 @@
+#Build Number for ANT. Do not edit!
+#Mon Feb 12 15:26:58 CET 2007
+build.number=3

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.number
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.txt
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.txt	(revision 30230)
@@ -0,0 +1,11 @@
+Notas sobre la generación del instalable: 
+-------------------------------------------------------------------
+
+Dejo aquí las modificaciones que habría que hacer sobre le proyecto 'install' de
+gvSIG que hice para generar los instalables de la extensión del Piloto de Raster y
+Proyecciones, a modo de copia de seguridad.
+
+Para reconstruirlo, descomprimir el tar sobre el workspace en el que ya se halla hecho un
+'checkout' del install y tenga un andami con la aplicación rodando con las extensiones.
+
+Los fichero de las librerías binarias espera que estén el el directorio /binaries/w32 y /binaries/linux del propio workspace.

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.tar.gz
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.tar.gz	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.tar.gz	(revision 30230)
@@ -0,0 +1,58 @@
+‹·Ô¸EZaZzma.tarì=ívÛ¶’ýk�Ów@iŸë6'"EÉ²Sä¬b«©½Ží•í¤Ýæ&!	6E² é¯ÛûHûká>Ò¾ÀÎ D}Ñ²ê¸¹
+Ñ&¶€ÁÌ`03˜Á‡Âý(¦žg}õ	KÊF½Ž?í�º�ý™–¯ìJ½^[[«nl¬U±«64“ú§d*-	Œ_òÕeÿš_³ájÿ7-\Ï¿úIÝ@”»×§ûoË÷ŸJ)3ÿëöÌÿz¥V/æÿ9Jîü‰pXôÇ4aÞù_·ëÕÊØµRYÛ(æÿ9ÊœóŸDLìûaR¿kÞö½¶Cãyià¯¯­Íœ»²&çß^ß¨Ö7*0ÿkUæ¿ò)ž–/|þ·=˜Ð�:W¯K„lG± ÜÝ1bv›½`žAâÛxÇh%1%”HÕØ4¬×¥mkØñÏCQ/‹Ûÿ=›—ÆÃö_Ÿ°ÿZµ°ÿç(sÚÿ	�{$
+ðW+Û¿Ë’yi,bÿÕõÂþŸ£öÿe—…íŸùÝyi,dÿÅúÿ,¥°ÿ/»,lÿAç¥±�ýÛ…ý?G)ìÿË.Û?�?­ýñÿ³”Âþ¿ì²°ý‡�˜—Æ"ö_/Öÿg)…ýÙeaû�Â'\ÿ'ÏÿjµÂþŸ£ç_vYØþ¯©7/�…ì¿Øÿ{–RØÿ—]kÿ§!sÐþCãû·íõõ1û¯­Ù…ý?KÙÌìëÒÒvH}æ‘@¸Lìª–¶;œy.YŠïB¶cDŒ
+§ghXZº¦‚Óª÷�NÏ‡‡í“ÆÙ�†l‹ø=Ô¯Õ
+ô+ðyÛe‘#xóÀ'Ôã]ÇðX'6ˆ•BD Z@gJº�ä$Ì˜oR—–œs®:Üc>íÕP]ê»´ÏÍK*J€T£p¹`Nˆ;ÀœiuO¼8Ûœ²æôî0k^ÝÁ„åõ,É`Û6+	¢#ñùmfDcÝ‚0~T‡•óÓf«ýãñ»æ£ºín~lÀ$�¶FÄeäD]AûôãŽî»ÁM”‡Fw%?€h£‡û[8ƒRg,©4¨Q–T)\/2ŠV¬ŸM™Óÿk°r(‚K3ê=Ž†¼ÿ›ÿ­)ÿ_[¯ÛÕ�
+ôÿ•"þ{ž²ü�…î2ê•—¬dý¸åñ‹¨äù¤øUÍ|`VÌºYÉT<aV
+{ÿlËœö/ëmøº<`ÿþ©ü¯¾V­n@àW©Úµ�bÿ÷YÊÐþ—I:É%v"&‡{íÃý7­FëgévVÆ*6�I‡aiï“Öñ‚ïŒA!9IÉ‚@Žù„ `�èšÝëˆwMGD–Kcj Gšìk”–/é5%å=üaMAÅ�BÄ¸£3~1�1ƒ”��ÃÂM«-I³ÌíW~¦ò‚Q?Ê|ö‚îÚeÙ6«æ«L-¿f¢œÄejAèX®˜ßƒ¬•!UÊ6
+Þ�‚,©[†öÕ®¶ëíJ¦Çv“ExÊ4ä£\WQ¹
+þ¶š©=øÀï©pwƒ~‚õcl"åŸú·õJåq‚¾‰|›Z‡4ñ!zjîÉÄ¼�»´rÐxßPa(Î]!ýGJ_7]’êœ
+cå?Œ§�žsý¿n|l¾?^òó»ñžöÿ•Ju£†ï¿Šû?ÏT¶õS™˜ƒ.¢¦í˜åaúÆýN 3:†˜\¿VI 3c¢}éDbÛJ›4˜ÆñP˜¶lMk$@÷áïé¢²ö·Ìg‚z<¦1yO!—w8õ©Iv?bžÇ§Ä]Ý÷;‚²(‰'ŸNÎø\rÂú”{;†ÌI'ìäŒ9~å_ÿCevìQ(Ñ§ÿ×ÿúäÔl˜ãx`C®·á½îÅq¸iY777zÑê‚3„U²\hE(t!CI¬m[Ù
+Ì‹•dá·nÂCÁ:é1ÞíÅ;Æz2lx¹¹rÇÀ}Þp\¬ñª¢we<ÚÑÃòøo	w
+5`Hù;àI¼»ÌÀ%Õ”˜¤,·0Ô¼}S.“À÷îÈc!‰{(¿›Ð.Hø¦Ç�¡‚êE�qp9#Ü×Žª\Ö<©aÂ£ ¶cD!5¬i
+×Ô›ÞÀü®l@v&Oïåô|h˜Á„sÏf£tiNO—%³{v8öœÞt:£]/gx½$‡0ŠÙ=/C:½þ]4½ÁgîŒ†@Loo6w¡î5•;ô§£Éî"§;£áújFÃ
+›Þ�\‰ÛÛVªïðû ³‘½Ð�DÂž†	Oè™ñ-¸Ür<ä¸#v‚[YóÈšà”®‡Íæ»¦Ù‹ûžêýãÙ»Cô1ª;Úýì¾¼�&gÝ -=K=ËeØU¨ö•³†ˆArëM•!6Ó´Àa2ÇWCÅ[é°o¹Š+,?�žÊ½X´âý{ÅnŸfñMþ2Bá±çŠòduv!‘t,¸½øð_°8wYŒÌ-Fv–„yï06†´Iï€~Z"ªéÉ¡žAH6=!\f’MY�ÍØ¥¬G—²�1sÊª«s¥ò„¨ñwÍ¬Ç–ý×løÆësG‰{Ü‡¿eN1GG
+®AÑóè±É�påoÔ1‹ãÑ(Rkøˆ‹ÐÞa(ë…fÁ Qå75Í—³	ðótêrIkß”sÊû¡Ç~à>�zC@}H€²‘r‚!èîàÈõ¸¸ÄiÉ¸£#ˆysqÅÒ‘Oæ|éµb…bpGCð×ÛýÄ*N‚âB‰L¾“g TÑ¬	� ˆ!:�‡¡÷ô¸K1õ8d–ò å%	a‰Uüè@0)^CÐ5fCläH31*Ò#~Âð8Fšqm[Yv%ÿèâ´·s¹˜oÓÄP
+˜­¤”�ulJÙ	-ºwA¦CëUl
+õ±£'c êð?Ð“•jRÊjR€²ßá]KÊ&†¤\zÆ!µ�³ÉÍ1ØÉ‘Y®ÀŠH3÷Øn– 7sËc1Á!<–¹á¶H¢Ž/?K�~ôù2w	õýÀ/cZùŒÙìÆœ±äÔþ÷á´ì²~0›]ôçx/hÌ‡ì¶NçuÝBzLJÌ¡
+Ep§ÂZp/ã.t®<‘#Ù�ž:Î?Dñ)µ]äØâŸÍÜ[`è´Ç;q#ÌqgCÞn˜É³ÚOÎ¬GÀ˜�9ƒ5~9…äÒÓ“„Y¸ô¹&<ÃŒ¥9ó>gh#ÉT–”Ê¥¦œÜŒãÖ®‡Ý2'‰GQÉ+>¨û�D9èÕ]†;Q¬a†m¸•ÆƒÊå^" �®2Ò|”Dñôh"Ï×g^³ï£Ä80�?.¾Tãbóð:.0ÉõLy
+Ý²ÎéÕ'Ì³¶­ìpq�ó‹*3ÏnþœïÜ¨Õä÷?Ö«Å÷ÿ=GÉ�ÿgþþG9ÿ•
+ùý�ëÅ÷>K™sþÕRÄ}¾�Î«kúþŸ½QY·+xÿÛ®¯UŠóßç(¿¸¬C/þû×%üo‹¨—¡ò19áàFšOÅ×%ÜóÜ!)ènÐ§¾@;»”AŽØÄj(
+·Ïc¹^?ôè½ÜdK/‹#ÈÒ²Œ—J–ÓŽž‘fšåþÓ2ÁË%rÏîšÛ½ Ï0-Ààá…å@èÃÜ”Y^W±’EÀI‡ã½Š@wl´Þž.‡ºÌ§¸HâÀ
+"âÁÈ’>ócø°ê·„‘ˆ‘ˆÁ£}Šö”DÀZ†íå—òg~š¦)ÿ~yØ�þÆ"ÀMB~Í¡?óÉª¿J¼¤K3*|ô/“£ÍA”ðí_pÀC•¤‘O)–žjG*S&«ïµD¢U‚ÛÇBP+Q0�·C�I·-©×O¨Ëa¤duy–È`+¦›’ˆ/ÔD¢�¸#-‡F(*È	cÈ¿.á>h¨ŒžîòÞàV˜9×%°©�Œå·ïñP+0/”êè-£­i·Œ¶ÆnmM½e´5õ–ÑVÞ-£­‰[F[Óom�ß2Úš¼e´5åŽÑÖì;F[OwÇHY‡²qeç‡Òú‰´@�Ê’ã¾#? hDjõ (ÿ6bJW^Ñ„ˆÜ�	â~ºªO•ù»ÍSrºO~nž’Ÿ‰=‚f…ÆÇ¢�	|�†ÆzÚç¾Ôri$ŽÚÊ�ûnó.ÇÔ2–¾G¶Ý¸@ùç×%OJ†Óˆî|´¢†úÁ&qñDÄ‘ð5M"5î>´x×v¦NÉC ëÒC‡ÀGœßî1è)�
+X‰î£Ãådc'^ðÝpàûCl›Dë÷°µo’ÆÉÉáþnãlÿø(pÏ`,#-Ò§3)y�¼�>@6~AÕ6Ú”ùåÐ�Å`ÖôøÁ·.»À	arõÄÙq8øXœ-˜‡�Ë[½LzìÕgÄ
+vñOü™¥(ë÷3S&(­¦ýÊå×G8¬”"à^\l )°Áäfv7­ìK™P¿”±� uYÌ6×ÌjÛ¶SKø‘^p¼¡„‚ë&¾šÇ$JÀJ†@mzôNêi�‚»•nrLèvÐj;°P¤b-“ŒäÕ‚ã°,¡!à)Çz�[˜àHÝGÁ€}ÕV±?èw4³)ƒÈ÷]Ž?õ'éòpÀÖ¸1�Ž±ä¨…/9t¹ÃOBiŸ?Ej�®~„œaîwODŽt¨"jRÞ«[U©Tqƒ0¸Té‚¾s}ädŽT¶ñ.ÌM[Û•õ!Þ=Á²ØEA÷%~X©³+í5JÎÝàÆ÷ê6}¦‹«¡t–Ê0�JgÐ±ŒÉ
+›]e!fÈc`$£d´ßRüž¤q’vIiä&ß‚ZÂÜ°[ŽÑÐ�´[tNKÚ07ž<ÒTƒŽ^uøk	Ìüo	ÿNJNF)úóƒPþD¢ôçyå*Ú€kŒ�´*å¤‰f™†`hpØ ›Wöš¤Dª•„ãl˜jY¥®£Blé$ñYu‹Ð®T/°«ì°|tŽÌCxh’ê»§~'à0ÐG�[JÀ`ô;G¼$!2ƒN}°NÅD�–ŒO°«/]@Ä2�ŸËØ@Ù1´q„Ÿ×ÃàOÊ
+±g^.]âºsö›5J�_¨ÄÕ†ðÂ1n*om—ù
+Fí¾a´À²ª›@|Xùl 
+åÚ˜þáÿsSFý³ñ@X~Ù
+Â»–>1“¯0!OÓCÃ¨zJ,ãÀ~tí„¶éz 	z˜i®²*¹ÁŒºªÇù61Š­:Ûc-ãeü¯›EXËeo-™ó¶¹Wmðeq®åâ¬Ï…seýÁq¯çŽ›97r„U,‹v=—Ó�‡PfQmä¢z•‡êh÷ÔñYœÅö*Û÷`k:7»Ylßçb³+£ÑèJ>º\tç�Ö�à›e"œ¹vÒué(ÂÙV¢Ñå	â«¬WFPæÛ‰�k(]/‰kÕtù&bçÚÈeÈºë£èf™‡F—kðG^jA˜ov®eà9°ßµk#óÍÃÎµøóNga¾…Ø¹&r�:é|©æZˆ<dÍúè|û¨æÚÇ®ˆ|~2Žr–‰@ÄãËxj°ôc "Hi¸ÏÅ jFh½§¦!pƒEæ§2vÉì˜­ê$)*¾PqO§ÑÌPbZäðË`O–ÓI	`ê˜ýüõ_øH4wÿÿ¹ÞÙÕáû/<'ªVŠïz¦R¼ÿú«¾ÿÊ~?Kñ¬xV<}æSF¿ÊH}=¿Çþ†¶¯ÓxŸCî_a ¤®Rý…ž�eñü±‡cò2^ñF¬x#ö)Þˆ¡rM–óÜëóF>‡÷adîbÈ®2ó?ñ�XñDìÙŸˆ�\´.^‰}&¯rŠWbÅ+±Ï™Óâ•XñJì©_‰
+ßús¶Ç?÷�Øb†FÒ‹1ùÏt§zg£Ýç3ª6�ZÍÁ÷ªM^vS«öõs­þI(�núO¡§’ÿ¥9ÈŽ|gÜ§ÛœDViÎA�?pûTãšŸÎÃCS#K�íRñì«(Ù’žÿàµ3Á/ä]ÚE¿çuVÉÿþ×j­^‘ï?Ö6j•
+¾ÿªW+Å¿ÿó,Eÿë�z¥Ò2Þ,•÷77qÞw‚Ékyn²Sî÷™ËiLñ:3+E,&e†�/`•g‚·å.kéðxwçWˆ²rØ8zK~Ü.Y�¬¶ùÂ²VÅ~»ú>¨�GÂx‚,qÈsàáý4)¶“@j^âò ;Þ%;ÄÀƒ‘¿“-<¬ðK„4[­ãVûMã´¹·ßÚ1šxËOêf÷¯�1¼½A¡ËÆHÊïeÞˆ«(ÄË·ÁTÀ�«Úh>®%ùê$é³�RÒ}Ð0ÔH³#‚¾<ZÐø¸ñ€À	Ä.Cka”:¼ô)»¤Ý¹iÈký †¿ý�È:ÝAÕ8ƒÏJrß!F7èü÷ßgÜŒÀ2”%=˜UÔ”�ˆdØvËcb“-B	$ÀÎ¯á�ê ¢´áµ?S~-ñ[P2šM’÷ô&	±Û•6õÂ-�í5[§»Çæ¼‡_ö��RÍûáüðPW¥
+xgû¨¹¸SÔoZûÍFYMK!=ƒ‰Ãd†9‰0qúí†ÃÄ€.ü÷þ	s_âSL!pô»Nýûø‰§õ%
+4[m©X+�““£Æ»¦QÎòð±=ìpÐh!@ÔÈÂ_k&‡y“Š>"‚¿BCŒú›JF¡þ}U"•$y¥Ò›óýÃ½£ówoš­�_Qeeq‘pÏ5ý¤ÁÄŽe…«#*3_f�Å�¾„69²É‰7>¶�•[†yÏC©j‡ûG;Ót_6~˜Öx£ß5v'ûÔ)A¯½ã§ÀÚ([Y¥™`¨¬ƒ¾2¯¿Z77îKÀØùO�Ä!Ï>†¸{_R8ÞÀ Ã‹ÀÅ‡ý³!aXS�èR0‰1•Oó§Ga‘»e4ð–Å6à±–`ZÛ`ç�”<Ì{Ù®H­­Ü,QiùøüìäüLšªÕ÷c+bœ@º"	ƒ2îØ9Ô:“|»–~ºú=j¤ãDKÌÆÊY£õ¶)?vÄ¢}z|ÞÚm¶›?�íäÛáø»ÆÑ^ã,í•ý?C©$}¤ñb¼ºA-è÷õš`Ìî±LNðîý!ª—‚ÿb¬¤‡a©ßAs
+b”ËDiü´ö’èÐIR�Rÿ
+}r9$S·)JN8ôÀmLÕô©ìdí!ø�)õ­fcªÑ×Ä±°lX&Gx£Í£÷2äQ«»Š«ÆÈå�8¼åÏ}ÇK¸ƒØ}::&è2[V
+Káx‡cúÜâÖÌùšp‹@èEˆú§>Œn³ä‚¨æÃ–2ÃìùR°S°xÊ±ÎTï4M0ñœrf¿<2'
+[YLày„œ©kÇÿi¢‰+ü ÜHŽ~x@?<�J
+š¡‰SÛ”6ï3ÓÈÿùáùI²´¼‹÷^Ó+}„zG¢$"± ê,`Äg¥ý°•¢C…+·:£ujfFª€…ryöôaK]ƒ)§ŸË¶Y“ÛÖbZ£è®ÇjHÊ`5µª|<¡vMq^þ¯„ÇéÀ ~IúÔçX"ÿ¿½«ßmÛâGOÁÉn�/Û‰—!@ƒÈoÐfC ¶"QlÙQgKžl§Nº>Ðžc/¶û EêÓNæ´ÿˆ(’Ø<’:êx¼;î0•e	¸Ht°�!×ô—ª-8~?Q
+ËÍrèOÔ1ÕG€¹ŠøLç(ˆÏ_D«-š}÷¾éÏÁR¯ÕÐéÁPš¡*t»k*ÌKÓê:–_5NlMÈk=»â�ï1Ãâ¹'¾Ñ'›<˜Pê´\V|Ä1Â[h˜ÄÜŽ¼¡ƒ=9Ó„ŒZÞñžÆÈeíQT?óæýËÅo¸wÎÑ8èþ^õ>|,|bHIö¶o7‹úIl(i&^ºû5±põ²,vï�K¹˜„¢ê‰±ÃÈª€Œ�¼±ç«eÁ‡Ñx¼ÀR¹Rº¥@û·½ý¾øÿTÁÎ7¾’�–×¯EdÁE¬vºdÁIÚïŠ‰»ÅÖž%W½ùØ\±ÎÊ¬2›]å7KVe-›œÅ’;¤”ñæŸ�j«›eÌ
+^ìCO?³‘€BŽK�·‚ubj$40Äz:yÆã\­ãqr:É^2«xL©C¯Ë½NF…¾KŒ›í&,°-6|¤SYlèá	EclQXŽ?õSŸÑu§ñÀŠ:´S>HçÔpSWgøÝZf¬Ð»zYvóž¾PQýÜ9ï\œ\ˆÓ³îåÅÙ�ÅŠŠ‰/;uþ˜±)›9acøhLÞ.�ÞëðwÊwÐ&±]Õ½¦ÎmmTÿ¿®8çhÚE†%´É–s’n@šŒš§¾n¢yÛ-`†h§¨ˆ®;£ø`/Ñª‰B„¤C«k9ð�Ð}ACsì¹>éÁÔ£é�GÆ@¢=mJ‘i*ÙiÚ…´‹j·ÎŸÐ3˜ªKˆ
+‡8B%v7úbgQDˆáí
+�‰}Ö[*ªÆc©zïþß¯
+f�åÉ
+n¶3å
+%ìœRgLøÕÑ3eÎ�ìÄ¬€~M¦�Ìþ\Âx}?[Ä/bÏXä·\3L¯é½Ä‡ˆ™SÏò,)³¯$c¯L©M�=.y1íe$½ÊÍ*&[Fsd¢E´@ÎšzO™¤�¡®Vv«Dç×Ÿ0Üš3é½ZôPÖ`"‹�Y£^0÷gÇ7=g&¿zêË¾ã¡êÆêý[|ê‰úèFõ^ÝÜ¬òŸ;­­-Q_zÌ¡�`úFÌ/# Ð$èÑuÄÔÎ=òëD€×SiÁ°Ó
+HjqÕ7ÿ¶E;âi­¼è7GzOÅîíE¿ÂØP2O*AqHªÑ!Ý=QV­�Œo�L…õt}î'Ø�
+µ\Ìf±°T²‚}°1ËÏÐ-yç(È«5lÊL·r$&s?H�mM·ÎÌbm—$ù_Êæ
+áªpí pËt>Eh3
+we 3*ÊÔs'I¬,W R
+sEÒUè@qZË¶ôŒ�Ê4~2cŸvUŸ"ùêM.o„ÖFæZ?|„ˆ`WW}Y¨G¯èòìò¾ i…×c'c\›'M¸Ë5b#£„^Ë(&†˜Û"ñ
+©ªD£ÃÇnc:Xˆ$­ˆ?g[#›
+ýkîÎÜ¸S£@)Èµ]��QôÓkK&m¥Ë!B”±h­c\#�ëâ7R£È¶Ea“äÔ’j3E$W/±L“™P½‰jCYÇ-JðVÆ2@,jÊ0K&ùÓŠø½Ó³*JÃÐÀ°žH?¡ƒÙjk…¤ÿ”+¨²‘9öû“·öTB?ì£Æ’âÇ§¸¹z1ÖÝnàù-)}‚ls’ÄvÃ™L�„™‹GSi6‰Ïaeƒ²‰€�>—0€bHž¦ÂVd!ŸÈÙû{�ïEƒ©æ˜æDØsâmæ
+Âê†·s¿?"Múö8ÚÀÛ€y€é¥Q£Ì=®ëc†Š;T„³¦Ñ7ßnß™
+ß…·HXƒô„“ �X£ÒU†mÀL4Œ(à£!»àŸŒã�Y[$OØœl†¼å'†Ñ…¶'ç—œŒ‡Rð™;ÀP¨ævLº�Ã‰Ø#Üy¥_·i°D‚pè6|wÖäŽaâ@Û&âïß:‹ïùEåš9Wë£ÿcoïðð€ó?[­ýƒæüPâ•ù^–å.DC¨Ø[
+éCé&Ç5ºéSSU:1åµzó>Êo-“&yZŠï
+nÖÙÛqP
+Ñå�ŸrÜw~T®õ‘;ôB}ª0ô-öˆPÃ
+”Ï@¼a}óï?>'�2Ò­ƒp©ˆUÔ—ú-t#Ä‡Äú`ËÒ�ìãM+v9ÈZríÒÚÊgO>µÏ(�Œ±šÉ²•uO’‡ûÖ²W–²”¥,e)KYÊR–²”¥,e)KY¾NùT”ÊÈ
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/install/install.tar.gz
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/gvsig-ui.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/gvsig-ui.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1-demo.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1-demo.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jcommon-1.0.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/jcommon-1.0.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/cms.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/lib/cms.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java	(revision 30230)
@@ -0,0 +1,359 @@
+/*
+ * Created on 25-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.gui.panels;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+
+import com.iver.andami.PluginServices;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class RasterFilterPanel extends JPanel{
+
+	private int					HEIGHT_BUTTONS = 35;//35
+	private int					MARGIN = 12;//12
+	private int					WIDTH_SELECTOR = 165;//165
+	private JPanel 				pMain = null;
+	private TreeListContainer 	pSelector = null;
+	private JPanel 				pRight = null;
+	private int 				width = 0;
+	private int 				height = 0;
+	private JPanel 				pSelectedFilter = null;
+	private JPanel 				pButtons = null;
+	private JButton 			bAccept = null;
+	private JButton 			bApply = null;
+	private JButton 			bClose = null;
+	/**
+	 * Titulo del panel. Este aparece en el Borde del panel.
+	 */
+	private String 				title = null;
+	/**
+	 * Lista de paneles
+	 */
+	private static ArrayList	listPanels = new ArrayList();
+	/**
+	 * Tabla de hash cuya clave es el nombre de la entrada de menu que devuelve su posición
+	 */
+	private static TreeMap		panelEntry = new TreeMap();
+	
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public RasterFilterPanel(int width, int height) {
+		super();
+		this.width = width - MARGIN;
+		this.height = height + 30;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 1;
+		gridBagConstraints1.gridy = 0;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.gridx = 0;
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		this.add(getPSelector(), gridBagConstraints);
+		this.add(getPRight(), gridBagConstraints1);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TreeListContainer getPSelector() {
+		if (pSelector == null) {
+			pSelector = new TreeListContainer();
+			pSelector.setComponentSize(WIDTH_SELECTOR, height);
+			pSelector.getTree().expandRow(0);
+		}
+		return pSelector;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRight() {
+		if (pRight == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridx = 0;
+			gridBagConstraints3.gridy = 1;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 0;
+			pRight = new JPanel();
+			pRight.setLayout(new GridBagLayout());
+			pRight.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR, height));
+			pRight.add(getPSelectedFilter(), gridBagConstraints2);
+			pRight.add(getPButtons(), gridBagConstraints3);
+		}
+		return pRight;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPSelectedFilter() {
+		if (pSelectedFilter == null) {
+			pSelectedFilter = new JPanel();
+			pSelectedFilter.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, height - HEIGHT_BUTTONS));
+			pSelectedFilter.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Prueba", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pSelectedFilter.setLayout(new GridBagLayout());
+			
+			for(int i = 0; i < listPanels.size(); i++){
+				GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+				gridBagConstraints2.gridx = i;
+				gridBagConstraints2.gridy = 0;
+				((JPanel)listPanels.get(i)).setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - (MARGIN * 3), height - HEIGHT_BUTTONS - (MARGIN * 3)));
+				((JPanel)listPanels.get(i)).setVisible(false);
+				pSelectedFilter.add((JPanel)listPanels.get(i), gridBagConstraints2);
+			}
+			
+			if(((JPanel)listPanels.get(0)) != null)
+				((JPanel)listPanels.get(0)).setVisible(true);
+		}
+		return pSelectedFilter;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setVgap(8);
+			flowLayout1.setHgap(3);
+			pButtons = new JPanel();
+			pButtons.setLayout(flowLayout1);
+			pButtons.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, HEIGHT_BUTTONS));
+			pButtons.add(getBAccept(), null);
+			pButtons.add(getBApply(), null);
+			pButtons.add(getBClose(), null);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBAccept() {
+		if(bAccept == null){
+			bAccept = new JButton();
+			bAccept.setText(PluginServices.getText(this, "Aceptar"));
+			bAccept.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bAccept;
+	}
+
+	/**
+	 * This method initializes jButton1	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBApply() {
+		if(bApply == null){
+			bApply = new JButton();
+			bApply.setText(PluginServices.getText(this, "Aplicar"));
+			bApply.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bApply;
+	}
+
+	/**
+	 * This method initializes jButton2	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBClose() {
+		if(bClose == null){
+			bClose = new JButton();
+			bClose.setText(PluginServices.getText(this, "Cerrar"));
+			bClose.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bClose;
+	}
+	
+	/**
+	 * Redimensiona el componente al tamaño pasado por parámetro
+	 * respetando los margenes establecidos.
+	 * @param w Nuevo ancho del componente
+	 * @param h Nuevo alto del componente
+	 */
+	public void setSizeComponent(int w, int h){
+		/*this.width = w - MARGIN;
+		this.height = h;
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		getPSelector().setPreferredSize(new java.awt.Dimension(WIDTH_SELECTOR, height));
+		getPSelector().setComponentSize(WIDTH_SELECTOR, height);
+		getPRight().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR, height));
+		getPSelectedFilter().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, height - HEIGHT_BUTTONS));
+		getPButtons().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, HEIGHT_BUTTONS));*/
+	}
+
+	/**
+	 * Asigna el panel que se mostrará por defecto al abrir el dialogo
+	 * @param name Nombre del panel
+	 */
+	public void setVisiblePanel(int pos){
+		//Los ponemos todos invisibles
+		for(int i = 0; i < listPanels.size(); i++)
+			((JPanel)listPanels.get(i)).setVisible(false);
+		
+		//Ponemos visible solo el panel seleccionado
+		if(((JPanel)listPanels.get(pos)) != null)
+			((JPanel)listPanels.get(pos)).setVisible(true);
+	}
+	
+	/**
+	 * Obtiene el panel visible
+	 * @return panel visible
+	 */
+	public JPanel getVisiblePanel(){
+		for(int i = 0; i < listPanels.size(); i++)
+			if(((JPanel)listPanels.get(i)).isVisible())
+				return ((JPanel)listPanels.get(i));
+		return null;
+	}
+	
+	/**
+	 * Asigna el título al panel
+	 * @param title Título del panel
+	 */
+	public void setTitle(String title){
+		this.title = title;
+		this.getPSelectedFilter().setBorder(javax.swing.BorderFactory.createTitledBorder(null, title, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+	}
+	
+	/**
+	 * Obtiene el título del panel
+	 * @param title Título del panel
+	 */
+	public String getTitle(){
+		return title;
+	}
+	
+	//----------------------------------------------------------------
+	//Gestión de paneles
+	
+	/**
+	 * Asigna un panel con un nombre de entrada de menú y una posición en la lista
+	 * @param panel Panel a registrar
+	 * @param panelPos Posición del panel para esa entrada
+	 * @param menuEntry Entrada de menú
+	 */
+	public static void addPanel(JPanel panel, int panelPos, String menuEntry){
+		listPanels.add(panelPos, panel);
+		panelEntry.put(menuEntry, new Integer(panelPos));
+	}
+	
+	/**
+	 * Obtiene un panel asociado a un nombre que corresponde con la entrada de menú
+	 * @param name Nombre de la entrada de menú
+	 * @return Panel que corresponde con esa entrada
+	 */
+	public static JPanel getPanel(String name){
+		int index = ((Integer)panelEntry.get(name)).intValue();
+		return (JPanel)listPanels.get(index);
+	}
+	
+	/**
+	 * Obtiene la posición del panel que corresponde a la entrada de menú
+	 * @param menuEntry Entrada de menú
+	 * @return Posición del panel para esa entrada
+	 */
+	public static int getPos(String menuEntry){
+		try{
+			return ((Integer)panelEntry.get(menuEntry)).intValue();
+		}catch(NullPointerException exp){
+			return -1;
+		}
+	}
+	
+	/**
+	 * Obtiene el panel de la posición i
+	 * @param pos Posición del panel a recuperar
+	 * @return Panel de la posición i
+	 */
+	public static JPanel getPanel(int pos){
+		try{
+			return (JPanel)listPanels.get(pos);
+		}catch(NullPointerException exp){
+			return null;
+		}
+	}
+	
+	/**
+	 * Obtiene el número de paneles registrados
+	 * @return Número de paneles
+	 */
+	public static int getPanelCount(){
+		try{
+			return listPanels.size();
+		}catch(NullPointerException exp){
+			return 0;
+		}
+	}
+	
+	/**
+	 * Resetea las listas de paneles y asociación de entradas de menú
+	 */
+	public static void resetLists(){
+		listPanels.clear();
+		panelEntry.clear();
+	}
+	
+
+}  
+

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,113 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WCSHistogramTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 				propsMenuItem;
+	private FLayer 					lyr = null;
+	private HistogramDialog			histogramDialog = null;
+	private int 					width = 650;
+	private int 					height = 500;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWCS && ((FLyrWCS)lyr).getPxRaster()!=null){
+    		histogramDialog = new HistogramDialog(width, height);
+    		histogramDialog.setOnlyViewValue();
+    		histogramDialog.setHistogramObj(((FLyrWCS)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);    	
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,134 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WCSPaletteTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 					propsMenuItem;
+	private FLayer 					lyr = null;
+	private PaletteDialog				paletteDialog = null;
+	private RasterFilterStackManager	stackManager = null;
+	private int 						width = 408;
+	private int 						height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWCS && ((FLyrWCS)lyr).getPxRaster()!=null){
+			FLyrWCS layer = (FLyrWCS) lyr;
+			stackManager = new RasterFilterStackManager(layer.getFilterStack());
+
+    		paletteDialog = new PaletteDialog((FLyrWCS)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)layer.getFilterStack().getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+			}
+	
+			//No se puede modificar la paleta de un WMS ya que esta se recarga cada 
+			//vez que se hace un zoom. Habría que llevar un control de cambios para cada
+			//entrada de la tabla y volver a aplicarlo al siguiente zoom
+			paletteDialog.getPPalette().getBAccept().setEnabled(false);
+			paletteDialog.getPPalette().getBApply().setEnabled(false);
+			
+       		PluginServices.getMDIManager().addWindow(paletteDialog);    	
+		}
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,337 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para WMS.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class WMSRasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrWMS){
+       		stackManager = new RasterFilterStackManager(((FLyrWMS)lyr).getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrWMS)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,337 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para WCS.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class WCSRasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems)  {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrWCS){
+       		stackManager = new RasterFilterStackManager(((FLyrWCS)lyr).getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrWCS)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,114 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WMSHistogramTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 				propsMenuItem;
+	private FLayer 					lyr = null;
+	private HistogramDialog			histogramDialog = null;
+	private int 					width = 650;
+	private int 					height = 500;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWMS && ((FLyrWMS)lyr).getPxRaster()!=null){
+
+    		histogramDialog = new HistogramDialog(width, height);
+    		histogramDialog.setOnlyViewValue();
+    		histogramDialog.setHistogramObj(((FLyrWMS)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);    	
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,135 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WMSPaletteTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 					propsMenuItem;
+	private FLayer 						lyr = null;
+	private PaletteDialog				paletteDialog = null;
+	private RasterFilterStackManager	stackManager = null;
+	private int 						width = 408;
+	private int 						height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWMS && ((FLyrWMS)lyr).getPxRaster()!=null){
+
+			FLyrWMS layer = (FLyrWMS) lyr;
+			stackManager = new RasterFilterStackManager(layer.getFilterStack());
+
+    		paletteDialog = new PaletteDialog((FLyrWMS)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)layer.getFilterStack().getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+			}
+			
+			//No se puede modificar la paleta de un WMS ya que esta se recarga cada 
+			//vez que se hace un zoom. Habría que llevar un control de cambios para cada
+			//entrada de la tabla y volver a aplicarlo al siguiente zoom
+			paletteDialog.getPPalette().getBAccept().setEnabled(false);
+			paletteDialog.getPPalette().getBApply().setEnabled(false);
+       		       					
+       		PluginServices.getMDIManager().addWindow(paletteDialog);    		
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java	(revision 30230)
@@ -0,0 +1,313 @@
+/*
+ * Created on 25-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.ListModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.RasterFilter.Kernel;
+import org.cresques.filter.convolution.ConvolutionStackManager;
+import org.cresques.filter.correction.MedianStackManager;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.filter.segmentation.FirstDerivativeStackManager;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+
+/**
+ * Dialogo para los filtros de raster.
+ * 
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class RasterFilterDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int					MARGIN = 4;
+	
+	private int 						width = 0;
+	private int 						height = 0;
+	private RasterFilterPanel 			filterPanel = null;
+	private JPanel						pButtons = null;
+	private JButton						bClose = null;
+	private RasterFilterStackManager	stackManager = null;
+	private FLayer	 				fLayer = null;
+	
+	/**
+	 * Constructor 
+	 * @param width	Ancho del panel
+	 * @param height Alto del panel
+	 * @param stackManager Gestor de la pila de filtros
+	 */
+	public RasterFilterDialog(FLayer layer, int width, int height, RasterFilterStackManager stackManager){
+		this.width = width;
+		this.height = height;
+		this.fLayer = layer;
+		this.stackManager = stackManager;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setLayout(new GridBagLayout());
+		this.add(getPFilter(), gridBagConstraints);
+		this.addComponentListener(this);
+	}
+		
+	/**
+	 * Obtiene el panel de filtros
+	 * @return HistogramPanel
+	 */
+	public RasterFilterPanel getPFilter(){
+		if(filterPanel == null){
+			filterPanel = new RasterFilterPanel(width, height);
+			filterPanel.getBAccept().addActionListener(this);
+			filterPanel.getBApply().addActionListener(this);
+			filterPanel.getBClose().addActionListener(this);
+		}
+		return filterPanel;
+	}
+	
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG /*| WindowInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "Filtros"));
+    	m_viewinfo.setWidth(width + MARGIN);
+    	m_viewinfo.setHeight(height + MARGIN);
+		return m_viewinfo;
+	}
+
+	/**
+	 * Acciones realizadas al pulsar los botones de Aceptar, Aplicar o Cancelar del dialogo general
+	 * de filtros.
+	 */
+	public void actionPerformed(ActionEvent e) {
+
+		//Al pulsar Aceptar o aplicar se añaden los filtros
+		if(e.getSource() == getPFilter().getBApply() || e.getSource() == getPFilter().getBAccept()){
+			RasterFilterStack stack = stackManager.getFilterStack();
+
+			// Quitamos lo filtros de la pila que se han eliminado de la lista
+			removeFiltersFromStack(stack);
+			
+			ListModel model = getSelector().getList().getModel();
+			for(int iListFilter = 0; iListFilter < model.getSize(); iListFilter ++){
+				String filterName = getSelector().getMap().get(model.getElementAt(iListFilter).toString()).toString();
+				addFilterByName(filterName);
+			}
+			
+			fLayer.getMapContext().invalidate();
+		}
+		
+		//Al pulsar Cerrar o Aceptar la ventana se cierra
+		if(e.getSource() == getPFilter().getBClose() || e.getSource() == getPFilter().getBAccept()){
+			try{
+				PluginServices.getMDIManager().closeWindow(RasterFilterDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+				
+	}
+
+	/**
+	 * Añade un filtro desde el dialogo en la pila de filtros a partir de los parámetros
+	 * del panel.
+	 * @param filterName Nombre del filtro.
+	 */
+	private void addFilterByName(String filterName){
+		if(filterName.equals("sobel")||filterName.equals("roberts")||filterName.equals("prewitt")||filterName.equals("frei_chen")){
+			//stackManager.removeFilter(FirstDerivativeStackManager.firstDerivative);
+			FirstDerivativePanel panel =  (FirstDerivativePanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			int umbral = 0;
+			try{
+				if (panel.getCbUmbralizar().isSelected())
+					umbral = Integer.valueOf(panel.getTUmbral().getText()).intValue();
+			}catch(NumberFormatException ex){
+				//No se ha podido leer el umbral y no hacemos nada. Tendrá el valor por defecto
+			}
+			boolean compare = panel.getCbUmbralizar().isSelected();
+			FirstDerivativeStackManager manager = (FirstDerivativeStackManager)stackManager.getManagerByClass(FirstDerivativeStackManager.class);
+			
+			int operator = -1;
+			if (filterName.equals("sobel")) operator = FirstDerivativeFilter.TYPE_SOBEL;
+			else if (filterName.equals("roberts"))operator = FirstDerivativeFilter.TYPE_ROBERTS;
+			else if (filterName.equals("prewitt"))operator = FirstDerivativeFilter.TYPE_PREWITT;
+			else if (filterName.equals("frei_chen"))operator = FirstDerivativeFilter.TYPE_FREICHEN;
+			
+			manager.addFirstDerivativeFilter(umbral, operator ,compare,filterName);
+			
+		}else if(filterName.equals("laplace")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][] = null;
+			double k3[][]= {{-1,-1,-1},{-1,8,-1},{-1,-1,-1}};
+			double k5[][]= {{0,0,-1,0,0},{0,-1,-2,-1,0},{-1,-2,16,-2,-1},{0,-1,-2,-1,0},{0,0,-1,0,0}};
+			switch(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()){
+				case 3:
+					k = k3;
+					break;
+				case 5:
+					k = k5;
+					break;
+			}
+				
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("gauss")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][] = null;
+			double k3[][]= {{1,4,1},{4,12,4},{1,4,1}};
+			double k5[][]= {{1,2,3,2,1},{2,7,11,7,2},{3,11,17,11,3},{2,7,11,7,2},{1,2,3,2,1}};
+			switch(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()){
+				case 3:
+					k = k3;
+					break;
+				case 5:
+					k = k5;
+					break;
+			}
+				
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("media")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			int ladoVentana = Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue();
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			
+			double k[][]= new double[ladoVentana][ladoVentana];
+			for (int i=0; i<ladoVentana; i++)
+				for (int j=0; j<ladoVentana; j++)
+					k[i][j]=1;
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("mediana")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			MedianStackManager manager = (MedianStackManager)stackManager.getManagerByClass(MedianStackManager.class);
+			manager.addMedianFilter(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue());
+			
+		}else if(filterName.equals("paso_bajo")){
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][]= {{0,1,0},{1,6,1},{0,1,0}};
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+		}
+		
+	}
+	
+	/**
+	 *Quita los filtros de la pila que no están en la lista. Esto solo tiene efecto para aquellos filtros con nombre
+	 *ya que son los filtros de usuario. Los filtros que no tienen nombre (filterName) no se visualizan en la lista por
+	 *lo que no son eliminados de esta.
+	 *@param stack Pila de filtros.
+	 */
+	private void removeFiltersFromStack(RasterFilterStack stack){
+		//Recorremos la pila de filtros y eliminamos los que están "registrados" en el interfaz de filtros.
+		for(int iFilter = 0; iFilter < stack.lenght(); iFilter ++){
+			RasterFilter rf = stack.get(iFilter);
+			if(!rf.getFilterName().equals("") && getSelector().getMap().containsValue(rf.getFilterName())){
+					stack.removeFilter(rf);
+					iFilter--;
+			}
+		}	
+	}
+	
+	/**
+	 * Obtiene el panel con el selector de filtros
+	 * @return TreeListContainer
+	 */
+	public TreeListContainer getSelector(){
+		return filterPanel.getPSelector();
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DEL LISTENER
+	
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		this.width = this.getWidth();
+		this.height = this.getHeight();
+		getPFilter().setSizeComponent(width - MARGIN, height - MARGIN);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DEL COMPONENTE
+	
+	/**
+	 * Asigna el panel visible en el dialogo
+	 * @param pos Posición del panel
+	 */
+	public void setVisiblePanel(int pos){
+		getPFilter().setVisiblePanel(pos);
+	}
+	
+	/**
+	 * Obtiene el panel visible
+	 * @return panel visible
+	 */
+	public JPanel getVisiblePanel(){
+		return getPFilter().getVisiblePanel();
+	}
+	
+	/**
+	 * Obtiene el panel de la posición solicitada
+	 * @param pos Posición del panel solicitado
+	 * @return panel solicitado
+	 */
+	public JPanel getPanel(int pos){
+		return RasterFilterPanel.getPanel(pos);
+	}
+	
+	
+}  
+

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java	(revision 30230)
@@ -0,0 +1,451 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.apache.log4j.Logger;
+import org.cresques.io.data.CutRasterProcess;
+import org.cresques.io.data.Grid;
+import org.cresques.io.data.ICutRaster;
+import org.cresques.io.data.IQueryableRaster;
+import org.cresques.px.Extent;
+import org.cresques.ui.raster.CutRasterPanel;
+import org.gvsig.gui.beans.table.models.CheckBoxModel;
+
+import com.hardcode.driverManager.Driver;
+import com.iver.andami.PluginServices;
+import com.iver.andami.Utilities;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.IWindowListener;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.CutRasterListener;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.StatusBarListener;
+
+
+
+public class CutRasterDialog extends JPanel implements IWindow, ActionListener,
+		ComponentListener, ICutRaster, IWindowListener {
+		
+	private static Logger logger = Logger.getLogger(CutRasterDialog.class.getName());
+	
+	private int 						width = 0, height = 0;
+	/**
+	 * Panel de recortado de imagen que está en la libreria raster
+	 */
+	private CutRasterPanel				cutPanel = null;
+	/**
+	 * Capa raster cargada en la vista que es la fuente de datos
+	 */
+	private FLyrRaster					fLayer = null;
+	/**
+	 * Ancho y alto en pixeles de la imagen a recortar
+	 */
+	private int 						widthPx = 0, heightPx = 0;
+	/**
+	 * clase que realiza el proceso de recortado y extracción de bandas
+	 */
+	private CutRasterProcess			process = null;
+	/**
+	 * Grid del raster fuente de datos
+	 */
+	private Grid 						grid = null;
+	/**
+	 * Valores iniciales de ancho y alto en pixeles de la ventana.
+	 */
+	private double 						initWidth, initHeight;
+	/**
+	 * Recuerda la última ruta seleccionada por el usuario
+	 */
+	private static String				lastPath = "./";
+	/**
+	 * Lista de ficheros creados. Si se ha creado una imagen por banda solo 
+	 * tendrá un elemento, sino tendrá uno por banda.
+	 */
+	private String[]					fileNames = null;
+	/**
+	 * Herramienta seleccionada en el momento de la apertura del dialogo
+	 */
+	private String						lastTool = null;
+	private MapControl					mapCtrl = null;
+	private String						viewName = null;
+
+	/**
+	 * Constructor
+	 * @param width Ancho
+	 * @param height Alto
+	 */
+	public CutRasterDialog(FLyrRaster layer, int width, int height, MapControl mapCtrl, String viewName){
+		this.width = width;
+		this.height = height;
+		this.fLayer = layer;
+		this.mapCtrl = mapCtrl;
+		this.lastTool = mapCtrl.getCurrentTool();
+		this.viewName = viewName;
+		
+		ArrayList attr = ((FLyrRaster)layer).getSource().getAttributes();
+   		for (int i=0; i<attr.size(); i++) {
+			Object[] a = (Object []) attr.get(i);
+			if(a[0].toString().equals("Width"))
+				widthPx = ((Integer)a[1]).intValue();
+			if(a[0].toString().equals("Height"))
+				heightPx = ((Integer)a[1]).intValue();
+		}
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setPreferredSize(new Dimension(width, height));
+		
+		this.add(getPCut(), gridBagConstraints);
+		this.addComponentListener(this);
+		
+		getPCut().getBSave().addActionListener(this);
+		getPCut().getBAccept().addActionListener(this);
+		getPCut().getBCancel().addActionListener(this);
+	
+	}
+	
+	/**
+	 * Obtiene el panel de recorte
+	 * @return TailImagePanel
+	 */
+	public CutRasterPanel getPCut(){
+		if(cutPanel == null){
+			try {
+				cutPanel = new CutRasterPanel(fLayer.getFullExtent(), widthPx, heightPx, this);
+			} catch (DriverException e) {
+				NotificationManager.addError("No se ha podido obtener el extent de la capa al crear el panel de recorte", e);
+				return null;
+			}
+			cutPanel.setComponentSize(this.width - 10, this.height - 40);
+			cutPanel.addComponentListener(this);
+		}
+		return cutPanel;
+	}
+	
+	/**
+	 * Asigna el valor inicial en ancho y alto de la ventana en pixeles .
+	 * @param w Ancho en pixeles
+	 * @param h Alto en pixeles
+	 */
+	public void setInitValuesToSize(double w, double h){
+		initWidth = w;
+		initHeight = h;
+	}
+		
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODELESSDIALOG /*| ViewInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "recorte"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height - 36);
+		return m_viewinfo;
+	}
+
+	
+	/**
+	 * Al pulsar Cancelar o Aceptar la ventana se cierra.
+	 */
+	public void actionPerformed(ActionEvent e) {		
+		
+		//Botón de Aceptar o Aplicar
+		if(e.getSource() == cutPanel.getBAccept())
+			accept();
+		
+		//Botón de Cerrar
+		if(e.getSource() == cutPanel.getBCancel()){
+			try{
+	        	if(lastTool != null)
+	        		mapCtrl.setTool(lastTool);
+				PluginServices.getMDIManager().closeWindow(CutRasterDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+		
+		//Botón de Salvar
+		if(e.getSource() == cutPanel.getBSave())
+			saveRaster();
+				
+		fLayer.getMapContext().invalidate();
+	}
+
+	/**
+	 * Acciones realizadas cuando se acepta en el dialogo. Se obtendrán los datos de recorte desde el dialogo,
+	 * crearemos el objeto TailRasterProcess que gestiona el recortado, ajustamos el tamaño del grid
+	 * de salida y procesamos.
+	 */
+	private void accept(){
+		grid = fLayer.getGrid();
+		
+		//Controlamos las coordenadas del recorte que no se salgan de la imagen.
+		//De ser así mostramos un error
+		String[] values = cutPanel.getCoordReal();
+		try{
+			double minX = Double.parseDouble(values[0]);
+			double maxY = Double.parseDouble(values[1]);
+			double maxX = Double.parseDouble(values[2]);
+			double minY = Double.parseDouble(values[3]);
+			Extent ext = grid.getExtent();
+			if(minX > ext.maxX() || maxX < ext.minX() || minY > ext.maxY() || maxY < ext.minY()){
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+						PluginServices.getText(this, "coordenadas_erroneas"));
+				return;
+			}
+		}catch(NumberFormatException e){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this, "coordenadas_erroneas"));
+			return;
+		}
+		
+		//Obtenemos las coordenadas del recorte
+		String[] sValues = cutPanel.getCoordPixel();
+		int[] dValues = new int[sValues.length];
+		try{
+			for(int i = 0; i < sValues.length; i ++)
+				dValues[i] = (int)Math.round(Double.valueOf(sValues[i]).doubleValue());
+		}catch(NumberFormatException exc){
+			//Los valores de las cajas son incorrectos. Terminamos la función
+			return ;
+		}
+					
+		//Seleccionamos las bandas que se usaran en el recorte a partir de la tabla
+		int countBands = 0;
+		int rowCount = ((CheckBoxModel)getPCut().getTSelection().getModel()).getRowCount();
+		for(int iRow = 0; iRow < rowCount; iRow++)
+			if((((Boolean)((CheckBoxModel)getPCut().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue())
+				countBands++;
+		
+		int[] drawableBands = new int[countBands];
+		int i = 0;
+		for(int iRow = 0; iRow < rowCount; iRow++){
+			if((((Boolean)((CheckBoxModel)getPCut().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue()){
+				drawableBands[i ++] = iRow;
+			}
+		}
+				
+		//Usamos el directorio de temporales de andami
+		String tmpImgs = Utilities.createTempDirectory();
+		
+		process = new CutRasterProcess(	dValues,
+											drawableBands, 
+											grid, 
+											tmpImgs + File.separator + "cutLayer", cutPanel.getCbOneLyrPerBand().isSelected(),
+											(int)initWidth,
+											(int)initHeight,
+											this);
+		
+		//Remuestreamos por si se ha variado el tamaño del raster de salida
+		grid.setAdjustedWindow((int)cutPanel.getWidthText(), (int)cutPanel.getHeightText(), IQueryableRaster.INTERPOLATION_NearestNeighbour, null);
+		
+		fileNames = process.createWriters(grid.getRasterBuf(), (int)cutPanel.getWidthText(), (int)cutPanel.getHeightText());
+		process.start();
+		getPCut().getBSave().setEnabled(true);
+	
+	}
+	
+	/**
+	 * Acciones realizadas cuando se salva los recortes de raster. Aparecerá un dialogo para introducir
+	 * la ruta y salvaremos el raster completo con el nombre proporcionado o si se ha salvado por bandas
+	 * se guardará un fichero por cada una con el nombre proporcionado más _Bn.
+	 */
+	private void saveRaster(){
+		JFileChooser chooser = new JFileChooser(lastPath);
+		chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_directorio"));
+		
+		int returnVal = chooser.showOpenDialog(this);
+		if(returnVal == JFileChooser.APPROVE_OPTION){
+		 	String fName = chooser.getSelectedFile().toString();
+
+		 	if(fileNames == null || fileNames.length == 0)
+		 		return;
+		 	
+		 	try {
+			 	if(fileNames.length == 1){
+				 	if(!fName.endsWith(".tif"))
+				 		fName += ".tif";
+				 	File oldFile = new File(fileNames[0]);
+					org.cresques.util.Utilities.copyFile(fileNames[0], fName);
+			 	}else{
+			 		if(fName.endsWith(".tif"))
+			 			fName = fName.substring(0, fName.indexOf("."));
+			 		for(int iFile = 0; iFile < fileNames.length; iFile ++){
+			 			File oldFile = new File(fileNames[iFile]);
+			 			org.cresques.util.Utilities.copyFile(fileNames[iFile], fName + "_B" + iFile + ".tif");
+			 		}
+			 	}
+		 	} catch (FileNotFoundException e1) {
+				logger.error(PluginServices.getText(this,"file_not_found "), e1);
+			} catch (IOException e1) {
+				logger.error(PluginServices.getText(this,"io_exception"), e1);
+			}				 	
+		 		
+		 	lastPath = chooser.getCurrentDirectory().getAbsolutePath();
+		}
+		 	
+	}
+	
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		PluginServices.getMDIManager().getWindowInfo(PluginServices.getMDIManager().getActiveWindow()).setWidth(cutPanel.getWidth()+10);
+		PluginServices.getMDIManager().getWindowInfo(PluginServices.getMDIManager().getActiveWindow()).setHeight(cutPanel.getHeight()+40);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		
+	}
+
+	/**
+	 * Obtiene la capa raster
+	 * @return capa raster
+	 */
+	public FLyrRaster getFLayer() {
+		return fLayer;
+	}
+
+	/**
+	 * Acciones que se realizan al finalizar de crear los recortes de imagen.
+	 * Este método es llamado por el thread TailRasterProcess al finalizar.
+	 */
+	public void cutFinalize(String[] fileNames) {
+		//seleccionamos la vista de gvSIG
+		com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
+		try{
+			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
+			for(int i = 0; i < allViews.length; i++){
+				if(allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View &&
+						PluginServices.getMDIManager().getWindowInfo((View)allViews[i]).getTitle().equals(viewName))
+					theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];					
+			}
+			if(theView == null)
+				return;
+		}catch(ClassCastException ex){
+			logger.error(PluginServices.getText(this,"cant_get_view "), ex);
+			return;
+		}
+		
+		//Cargamos las capas
+		for(int iFName = 0; iFName < fileNames.length; iFName ++){
+			theView.getMapControl().getMapContext().beginAtomicEvent();
+			try {
+				Driver driver = LayerFactory.getDM().getDriver("gvSIG Image Driver");
+				int endIndex = fileNames[iFName].lastIndexOf(".");
+				if(endIndex < 0)
+					endIndex = fileNames[iFName].length();
+				FLayer lyr = LayerFactory.createLayer(fileNames[iFName].substring(fileNames[iFName].lastIndexOf(File.separator) + 1, endIndex), 
+						(RasterDriver)driver, 
+						new File(fileNames[iFName]),
+						theView.getMapControl().getProjection());
+				theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
+			}catch (DriverException e) {
+				//Intentamos cargar el siguiente 
+				continue;
+			}
+			theView.getMapControl().getMapContext().endAtomicEvent();
+		}
+		theView.getMapControl().getMapContext().invalidate();
+		grid.free();
+		
+		/*try{
+			PluginServices.getMDIManager().closeView(this);
+		}catch(ArrayIndexOutOfBoundsException ex){
+			//Si la ventana no se puede eliminar no hacemos nada
+		}*/
+	}
+
+	/**
+	 * Acciones que se realizan para seleccionar la tool CutRaster
+	 */
+	public void selectToolButton() {
+		//seleccionamos la vista de gvSIG
+		com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
+		try{
+			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
+			for(int i = 0; i < allViews.length; i++){
+				if(allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View &&
+						PluginServices.getMDIManager().getWindowInfo((View)allViews[i]).getTitle().equals(viewName))
+					theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];					
+			}
+			if(theView == null)
+				return;
+		}catch(ClassCastException ex){
+			logger.error(PluginServices.getText(this,"cant_get_view "), ex);
+			return;
+		}
+    	MapControl m_MapControl = theView.getMapControl();
+    	
+		//Listener de eventos de movimiento que pone las coordenadas del ratón en la barra de estado
+        StatusBarListener sbl = new StatusBarListener(m_MapControl);
+        
+        //Cortar Raster
+        CutRasterListener crl = new CutRasterListener(m_MapControl, this);
+        m_MapControl.addMapTool("cutRaster", new Behavior[]{
+        				new RectangleBehavior(crl), new MouseMovementBehavior(sbl)});
+        
+        m_MapControl.setTool("cutRaster");
+	}
+
+	public void windowActivated() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosed() {
+		if(lastTool != null)
+    		mapCtrl.setTool(lastTool);
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java	(revision 30230)
@@ -0,0 +1,368 @@
+/*
+ * Created on 19-jul-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.cresques.io.datastruct.Histogram;
+import org.cresques.ui.raster.HistogramPanel;
+
+import com.hardcode.driverManager.DriverLoadException;
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.NoSuchTableException;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.ProjectExtension;
+import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileHeaderNIO;
+import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileWriterNIO;
+import com.iver.cit.gvsig.fmap.edition.EditableAdapter;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.project.ProjectFactory;
+import com.iver.cit.gvsig.project.documents.table.ProjectTable;
+import com.iver.cit.gvsig.project.documents.table.ProjectTableFactory;
+import com.iver.cit.gvsig.project.documents.table.gui.Table;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class HistogramDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int		HBUTTONS = 28;
+	private final int		MARGIN = 10;
+	
+	private int 			width = 0;
+	private int 			height = 0;
+	private HistogramPanel 	histPanel = null;
+	private JPanel			pButtons = null;
+	private JButton			bClose = null;
+
+	
+	public HistogramDialog(int width, int height){
+		this.width = width;
+		this.height = height;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 0;
+		gridBagConstraints1.gridy = 1;
+		
+		this.add(getPHistogram(), gridBagConstraints);
+		this.add(getPButtons(), gridBagConstraints1);
+		this.addComponentListener(this);
+	}
+	
+	/**
+	 * Obtiene el panel con el histograma
+	 * @return HistogramPanel
+	 */
+	public HistogramPanel getPHistogram(){
+		if(histPanel == null){
+			histPanel = new HistogramPanel(width - MARGIN, height - MARGIN);
+			histPanel.getBCreateTable().addActionListener(this);
+		}
+		return histPanel;
+	}
+	
+	/**
+	 * Obtiene el panel con los botones inferiores
+	 * @return JPanel
+	 */
+	public JPanel getPButtons(){
+		if(pButtons == null){
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setHgap(2);
+			flowLayout.setVgap(0);
+			pButtons = new JPanel();	
+			//pButtons.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pButtons.setLayout(flowLayout);
+			pButtons.add(getBClose(), null);
+			pButtons.setPreferredSize(new Dimension(width - MARGIN, HBUTTONS));
+		}
+		return pButtons;
+	}
+	
+	/**
+	 * Obtiene el botón inferior
+	 * @return JButton
+	 */
+	public JButton getBClose(){
+		if(bClose == null){
+			bClose = new JButton();
+			bClose.setText(PluginServices.getText(this, "Cerrar"));
+			bClose.setPreferredSize(new java.awt.Dimension(100,25));
+			bClose.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			bClose.addActionListener(this);
+		}
+		return bClose;
+	}
+	
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "histograma"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height);
+		return m_viewinfo;
+	}
+
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	/*public void setComponentSize(int w, int h){
+		getPButtons().setPreferredSize(new Dimension(w - MARGIN, HBUTTONS));
+	}*/
+	
+	public void actionPerformed(ActionEvent e) {
+		
+		//Botón de cerrar
+		if(e.getSource() == bClose){
+			try{
+				PluginServices.getMDIManager().closeWindow(HistogramDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+//		--------------------------------------		
+		//Botón Crear tabla.
+		JButton table = histPanel.getBCreateTable();
+		if(e.getSource() == table){
+
+	        try {
+//	        	-------Mostrar un fileChooser------------------
+	        	String fName;
+	        	JFileChooser chooser = new JFileChooser();
+	    		chooser.setDialogTitle(PluginServices.getText(this, "guardar_tabla"));
+	    		
+	    		int returnVal = chooser.showOpenDialog(this);
+	    		if(returnVal == JFileChooser.APPROVE_OPTION){
+	    		 	fName = chooser.getSelectedFile().toString();
+	    			if(!fName.endsWith(".dbf"))
+	    				fName += ".dbf";
+	        	     
+	    			//-------------Crear el dbf----------------------
+	    		
+		    		DbaseFileWriterNIO dbfWrite = null;
+			        DbaseFileHeaderNIO myHeader;
+			        Value[] record;
+		        	
+		        	int histogram[][]=histPanel.getLastHistogram();
+		        	int numBands = histogram.length;
+		        	int numRecors = histogram[0].length;
+		        	
+		        	File file = new File(fName);
+		        	
+		        	String names[] = new String[numBands+1];
+		        	int types[] = new int [numBands+1];
+		        	int lengths[] = new int [numBands+1];
+		        	
+		        	names[0]="Value";
+	        		types[0]=4;
+	        		lengths[0]=15;
+		        	for (int band = 0; band < numBands; band++){
+		        		names[band+1]="Band"+band;
+		        		types[band+1]=4;
+		        		lengths[band+1]=15;
+		        	}
+		        	
+		            myHeader = DbaseFileHeaderNIO.createDbaseHeader(names,types,lengths);
+	
+		            myHeader.setNumRecords(numRecors);
+		            dbfWrite = new DbaseFileWriterNIO(myHeader,
+		                    (FileChannel) getWriteChannel(file.getPath()));
+		            record = new Value[numBands+1];
+	
+		            for (int j = 0; j < numRecors; j++) {
+		            	record[0] = ValueFactory.createValue(j);
+		                for (int r = 0; r < numBands; r++) {
+		                    record[r+1] = ValueFactory.createValue(histogram[r][j]);
+		                }
+	
+		                dbfWrite.write(record);
+		            }
+	
+		            dbfWrite.close();
+		            
+		            //------------Añadir el dbf al proyecto--------------
+					ProjectExtension ext = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
+					String name = file.getName();
+					LayerFactory.getDataSourceFactory()
+							.addFileDataSource("gdbms dbf driver",
+									name, fName);
+					DataSource dataSource;
+						dataSource = LayerFactory.getDataSourceFactory()
+													.createRandomDataSource(name, DataSourceFactory.AUTOMATIC_OPENING);
+					
+					SelectableDataSource sds = new SelectableDataSource(dataSource);
+					EditableAdapter auxea=new EditableAdapter();
+					auxea.setOriginalDataSource(sds);
+					ProjectTable projectTable = ProjectFactory.createTable(name, auxea);
+					//ext.getProject().addTable(projectTable);
+					ext.getProject().addDocument(projectTable);
+					
+					Table t = new Table();
+					t.setModel(projectTable);
+					//projectTable.setAndamiWindow(t);
+					PluginServices.getMDIManager().addWindow(t);
+	    		}
+			} catch (DriverLoadException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			} catch (NoSuchTableException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			} catch (DriverException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			}catch (IOException ex) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError("Error al crear un DbaseFileHeaderNIO", ex);
+	        }
+		}
+		
+		//--------------------------------------
+	}
+	/**
+	 * 
+	 * @param path
+	 * @return
+	 * @throws IOException
+	 */
+	private WritableByteChannel getWriteChannel(String path)throws IOException {
+		WritableByteChannel channel;
+		
+		File f = new File(path);
+		
+		if (!f.exists()) {
+			System.out.println("Creando fichero " + f.getAbsolutePath());
+			
+			if (!f.createNewFile()) {
+				throw new IOException("Cannot create file " + f);
+			}
+		}
+		
+		RandomAccessFile raf = new RandomAccessFile(f, "rw");
+		channel = raf.getChannel();
+		
+		return channel;
+	}
+	 
+	/**
+	 * Asigna el objeto histograma para la gestión de procesos de histograma
+	 * @param histogramObj
+	 */
+	public void setHistogramObj(Histogram histogramObj) {
+		histPanel.setHistogram(histogramObj);
+	}
+
+	/**
+	 * Obtiene el panel con el histograma gráfico y los controles
+	 * @return HistogramPanel
+	 */
+	public HistogramPanel getHistogramPanel() {
+		return histPanel;
+	}
+	
+	/**
+	 * Asigna el número de bandas al combobox
+	 * @param bands Número de bandas de la imagen
+	 */
+	public void setBands(int bands){
+		histPanel.setBands(bands);
+	}
+
+	/**
+	 * Resetea el control de bandas del panel con los valores RGB para 
+	 * cuando se está haciendo el histograma de la visualización en
+	 * vez del histograma con los datos
+	 *
+	 */
+	public void setRGBInBandList(){
+		histPanel.setRGBInBandList();
+	}
+	
+	/**
+	 *Asigna el combo "Origen" el valor de solo vista para el calculo del histograma. Esa opción es 
+	 *utilizada para extensiones que necesitan histograma pero no pueden acceder a la fuente de datos.
+	 */
+	public void setOnlyViewValue(){
+		histPanel.setOnlyViewValue();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		getPButtons().setPreferredSize(new Dimension(getWidth() + 8 - MARGIN, HBUTTONS));
+		histPanel.setComponentSize(getWidth() + 8 - MARGIN, getHeight() - 42);
+		PluginServices.getMDIManager().refresh(this);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}  
+

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java	(revision 30230)
@@ -0,0 +1,323 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.ui.raster.PalettePanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.TableButtonModel;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.RasterOperations;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class PaletteDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int					MARGIN = 8;
+	
+	private int 						width = 0;
+	private int 						height = 0;
+	private PalettePanel 				palPanel = null;
+	private RasterFilterStackManager	stackManager = null;
+	private RasterOperations			fLayer = null;
+	private ArrayList					filters = null;
+	
+	/**
+	 * Constructor
+	 * @param width Ancho
+	 * @param height Alto
+	 */
+	public PaletteDialog(RasterOperations layer, RasterFilterStackManager stackManager, int width, int height){
+		this.width = width;
+		this.height = height;
+		this.stackManager = stackManager;
+		this.fLayer = layer;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setPreferredSize(new Dimension(width, height));
+		
+		this.add(getPPalette(), gridBagConstraints);
+		this.addComponentListener(this);
+		
+		getPPalette().getCbInterpolar().addActionListener(this);
+		getPPalette().getBAccept().addActionListener(this);
+		getPPalette().getBApply().addActionListener(this);
+		getPPalette().getBCancel().addActionListener(this);
+		getPPalette().getBSave().addActionListener(this);
+		getPPalette().getBSaveAs().addActionListener(this);
+		
+		//Salvamos el estado del filtro de paleta, si hay alguno en la pila
+		RasterFilterStack filterStack = stackManager.getFilterStack();
+		PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+		if(pf != null){
+			filters = new ArrayList();
+			PaletteStackManager paletteStackManager =  (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+			if(paletteStackManager != null)
+				filters = paletteStackManager.getStringsFromStack(filters, pf);
+		}
+	}
+	
+	/**
+	 * Obtiene el panel con el histograma
+	 * @return HistogramPanel
+	 */
+	public PalettePanel getPPalette(){
+		if(palPanel == null){
+			palPanel = new PalettePanel(width - MARGIN, 
+										height - MARGIN,
+										System.getProperty("user.home") + File.separator +
+											PluginServices.getArguments()[0] + File.separator + "palettes.xml");
+			palPanel.setComponentSize(width - MARGIN, height - MARGIN);
+		}
+		return palPanel;
+	}
+		
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODELESSDIALOG /*| ViewInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "paleta"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height + 10);
+    	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+    	m_viewinfo.setX( ((((int)d.getWidth()) >> 1) - (width >> 1)) );
+    	m_viewinfo.setY( ((((int)d.getHeight()) >> 1) - (int)(height / 1.5)) );
+		return m_viewinfo;
+	}
+
+	
+	/**
+	 * Valida que el campo de valores RGB de la tabla tenga 3 valores enteros separados
+	 * por comas y que el rango de valores sea numerico
+	 * @return
+	 */
+	private boolean validateFields(){
+		try{
+			TableButtonModel model = (TableButtonModel)palPanel.getPTable().getModel();
+			for(int iRow = 0; iRow < palPanel.getPTable().getRowCount(); iRow ++){
+				for(int iCol = 1; iCol < 4; iCol ++){
+					String value = (String)model.getValueAt(iRow, iCol);
+					switch(iCol){
+						case 2:	try{
+									String[] rgb = value.split(",");
+									Integer.valueOf(rgb[0]);
+									Integer.valueOf(rgb[1]);
+									Integer.valueOf(rgb[2]);
+								}catch(NumberFormatException exc){
+									return false;
+								}catch(ArrayIndexOutOfBoundsException exc){
+									return false;
+								}
+								break;
+						case 3:	try{
+									Double.valueOf(value);
+								}catch(NumberFormatException exc){
+									return false;
+								}
+								break;
+					}
+				}
+				String value = (String)model.getValueAt(iRow, 4);
+				try{
+					Integer.valueOf(value);
+				}catch(NumberFormatException exc){
+					return false;
+				}
+			}
+			return true;
+		}catch(NotInitializeException exc){
+			return false;
+		}
+	}
+	
+	/**
+	 * Obtiene el objeto paleta desde el filtro de paleta cargado en la pila
+	 * @return Objeto palette
+	 */
+	public Palette getPalette(){
+		return ((Palette)getPaletteFilter().getParam("palette"));
+	}
+	
+	/**
+	 * Obtiene el filtro de paleta cargado en la pila
+	 * @return Filtro de paleta
+	 */
+	public PaletteFilter getPaletteFilter(){
+		RasterFilterStack filterStack = stackManager.getFilterStack();
+		return (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+	}
+	
+	/**
+	 * Al pulsar Aceptar o Aplicar se añade un filtro de paleta en la pila en caso de que
+	 * no exista ninguno. Si hay alguno entonces se modifica el que hay.
+	 * 
+	 * Al pulsar Cancelar o Aceptar la ventana se cierra.
+	 */
+	public void actionPerformed(ActionEvent e) {		
+				
+		//Botón de Aceptar o Aplicar
+		if(	e.getSource() == palPanel.getBAccept() || 
+			e.getSource() == palPanel.getBApply() || 
+			e.getSource() == palPanel.getBSave() || 
+			e.getSource() == palPanel.getBSaveAs()){
+			
+			if(palPanel.isActivePanel()){
+				if(!validateFields())
+					return;
+							
+				palPanel.orderRows();
+				
+				if(getPaletteFilter() != null){
+					if(e.getSource() == palPanel.getBAccept() || e.getSource() == palPanel.getBApply())
+						getPaletteFilter().setExec(true);
+					
+					//Modificar paleta de la pila
+					try {
+						if(palPanel.getTablePalette() != null){
+							Palette pal = getPalette();
+							pal.createPaletteFromTable(	palPanel.getTablePalette(), 
+														fLayer.getDataType());
+							pal.addName(palPanel.getCbList().getSelectedItem().toString());
+							getPaletteFilter().addParam("interpolate",new Boolean(palPanel.getCbInterpolar().isSelected()));
+						}
+						else
+							stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+					} catch (NotInitializeException e1) {
+						JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+								PluginServices.getText(this,"palette_not_create"));
+						NotificationManager.addError("No se ha podido crear la paleta desde la tabla", e1);
+					}
+				}else{
+					//Añadir un filtro de paleta
+					Palette palette = new Palette(palPanel.getCbList().getSelectedItem().toString());
+					
+					try {
+						if(palPanel.getTablePalette() != null){
+							palette.createPaletteFromTable(palPanel.getTablePalette(), fLayer.getDataType());
+							PaletteStackManager psm = (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+			                stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+			                psm.addPaletteFilter(palette,palPanel.getCbInterpolar().isSelected());
+			                
+			                if(e.getSource() == palPanel.getBSave() || e.getSource() == palPanel.getBSaveAs())
+								getPaletteFilter().setExec(false);
+			                else
+			                	getPaletteFilter().setExec(true);
+						
+						}
+					} catch (NotInitializeException e1) {
+						JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+								PluginServices.getText(this,"palette_not_create"));
+						NotificationManager.addError("No se ha podido crear la paleta desde la tabla", e1);
+					}
+				}
+			}else { //Si no está activo el panel
+				//Decimos al filtro que no se ejecute
+				RasterFilter rf  = stackManager.getFilter("palette");
+				if(rf != null)
+					rf.setExec(false);
+			}
+			
+		}
+		
+		//Botón de Aceptar o Cerrar
+		if(e.getSource() == palPanel.getBAccept() || e.getSource() == palPanel.getBCancel()){
+			//Solo si ha cancelado restauramos el valor inicial del filtro de paleta en la pila
+			if(e.getSource() == palPanel.getBCancel()){
+				stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+				if(filters != null){
+					PaletteStackManager paletteStackManager =  (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+					if(paletteStackManager != null)
+						paletteStackManager.createStackFromStrings(filters, (String)filters.get(0), null, 0);
+				}
+			}
+			try{
+				PluginServices.getMDIManager().closeWindow(PaletteDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+		
+		//Check de Interpolación
+		if(e.getSource() == palPanel.getCbInterpolar()){
+				if(getPaletteFilter() != null)
+					getPaletteFilter().addParam("interpolate", new Boolean(palPanel.getCbInterpolar().isSelected()));
+			return;
+		}
+		
+		if(fLayer instanceof FLayer)
+			((FLayer)fLayer).getMapContext().invalidate();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		/*this.width = this.getWidth() + 10;
+		this.height = this.getHeight() - 4;
+		getPPalette().setComponentSize(width - MARGIN, height - MARGIN);*/
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}  
+
+

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,341 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para raster.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrRaster)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,130 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.io.GeoRasterFile;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.CutRasterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.CutRasterListener;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.StatusBarListener;
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * de de recorte de raster, cambio de resolución y extracción de bandas.
+ * 
+ * @author Diego Guerrero (diego.guerrero@uclm.es)
+ *
+ */
+public class CutRasterTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						recorte;
+	private FLayer							lyr = null;
+	private CutRasterDialog					cutRasterDialog = null;
+	private int 							width = 438;
+	private int 							height = 617;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 3;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de recorte de raster  
+	 * cambio de resolución y extracción de bandas cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		
+       		View theView = (View) PluginServices.getMDIManager().getActiveWindow();
+       		String viewName = PluginServices.getMDIManager().getWindowInfo(theView).getTitle();
+        	MapControl m_MapControl = theView.getMapControl();
+        	
+        	cutRasterDialog = new CutRasterDialog((FLyrRaster)lyr, width, height, m_MapControl, viewName);			
+       		PluginServices.getMDIManager().addWindow(cutRasterDialog);
+        	
+        	//Listener de eventos de movimiento que pone las coordenadas del ratón en la barra de estado
+	        StatusBarListener sbl = new StatusBarListener(m_MapControl);
+	        
+	        //Cortar Raster
+	        CutRasterListener crl = new CutRasterListener(m_MapControl,cutRasterDialog);
+	        m_MapControl.addMapTool("cutRaster", new Behavior[]{
+	        				new RectangleBehavior(crl), new MouseMovementBehavior(sbl)});
+	        
+	        //m_MapControl.setTool("cutRaster");
+	        
+	        GeoRasterFile[] files = ((FLyrRaster)lyr).getSource().getFiles();
+	        
+	        for (int i=0;i<files.length;i++){
+	        	String fileName = files[i].getName();
+	        	for(int j=0;j<files[i].getBandCount();j++){
+	        		Object row[] = {new Boolean(true),new String("B"+(j+1)+" - "+fileName.substring(fileName.lastIndexOf(File.separator)+1,fileName.length()))};
+	        		try {
+						cutRasterDialog.getPCut().getTSelection().addRow(row);
+					} catch (NotInitializeException e1) {
+						e1.printStackTrace();
+					}
+	        	}
+	        }
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "recorte");
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,116 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.data.RasterBuf;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * del histograma raster
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class HistogramTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						properties;
+	private FLayer							lyr = null;
+	private HistogramDialog					histogramDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 600;//650
+	private int 							height = 430;//500
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de histogramas de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+		lyr = getNodeLayer(item);
+        
+       	if(lyr instanceof FLyrRaster){
+       		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+
+    		histogramDialog = new HistogramDialog(width, height);
+   
+    		if( ((FLyrRaster)lyr).getGrid().getDataType() == RasterBuf.TYPE_DOUBLE ||
+    			((FLyrRaster)lyr).getGrid().getDataType() == RasterBuf.TYPE_FLOAT)
+    			histogramDialog.setOnlyViewValue();
+    		
+    		histogramDialog.setHistogramObj(((FLyrRaster)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java	(revision 30230)
@@ -0,0 +1,128 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * del paletas raster
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						paleta;
+	private FLayer							lyr = null;
+	private PaletteDialog					paletteDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 408;
+	private int 							height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	if(((FLyrRaster)lyr).getSource().getNumBands() != 1)
+            		return false;
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de paletas de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		RasterFilterStack filterStack = ((FLyrRaster)lyr).getSource().getFilterStack();
+       		stackManager = new RasterFilterStackManager(filterStack);
+
+    		paletteDialog = new PaletteDialog((FLyrRaster)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+				
+				//Asignamos el nombre en el dialogo
+				for(int i = 0; i < paletteDialog.getPPalette().getCbList().getItemCount(); i++){
+					String name = paletteDialog.getPPalette().getCbList().getItemAt(i).toString();
+					if(name.equals(paletteDialog.getPalette().getName())){
+						paletteDialog.getPPalette().getCbList().setSelectedIndex(i);
+						break;
+					}
+				}
+			}
+	
+       		PluginServices.getMDIManager().addWindow(paletteDialog);
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java	(revision 30230)
@@ -0,0 +1,120 @@
+package com.iver.cit.gvsig.project.documents.view.toolListeners;
+
+import java.awt.Component;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.tools.SaveRasterListenerImpl;
+import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.CutRasterDialog;
+
+
+/**
+ * Listener del recorte de raster. Al seleccionar un área sobre la vista debe cargar
+ * el cuadro con los datos de coordenadas pixel, coordenadas reales, ancho y alto
+ * del raster resultante, tamaño de celda.
+ */
+public class CutRasterListener extends SaveRasterListenerImpl {
+	private FLyrRaster 			layer = null;
+	private CutRasterDialog 	cutRasterDialog;
+	private MapControl			mapCtrl = null;
+	private String				currentTool = null;
+	
+	/**
+	 * Constructor.
+	 * @param mapCtrl
+	 * @param cutRasterDialog
+	 */
+	public CutRasterListener(MapControl mapCtrl, CutRasterDialog cutRasterDialog) {
+		super(mapCtrl);
+		this.cutRasterDialog = cutRasterDialog;
+		this.layer = cutRasterDialog.getFLayer();
+		this.mapCtrl = mapCtrl;
+		currentTool = mapCtrl.getCurrentTool();
+	}
+
+	/**
+	 * Asigna la capa raster.
+	 * @param flyr Capa raster
+	 */
+	public void  setRasterLayer(FLyrRaster flyr){
+		layer = flyr;
+	}
+	
+	/**
+	 * Realiza las acciones de selección del área de recorte por medio de un rectangulo
+	 * sobre la vista.
+	 */
+	public void rectangle(RectangleEvent event) {
+		super.rectangle(event);
+		
+		//Obtenemos el extent completo de la capa
+		Rectangle2D extent = null;
+		try {
+			extent = ((FLyrRaster)layer).getFullExtent();	
+		} catch (DriverException e1) {
+			return;
+		}
+		
+		if(extent == null)
+			return;
+		
+		//Si nos salimos de los margenes de la capa lo ajustamos a esta
+		double minx = rect.getMinX(), miny = rect.getMinY(), maxx = rect.getMaxX(), maxy = rect.getMaxY();
+		
+		//Controlamos las coordenadas del recorte que no se salgan de la imagen.
+		//De ser así mostramos un error
+		if(minx > extent.getMaxX() || maxx < extent.getMinX() || miny > extent.getMaxY() || maxy < extent.getMinY()){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this, "coordenadas_erroneas"));
+			return;
+		}
+		
+		if(extent.getMinX() > rect.getMinX())
+			minx = extent.getMinX();
+		if(extent.getMinY() > rect.getMinY())
+			miny = extent.getMinY();
+		if(extent.getMaxX() < rect.getMaxX())
+			maxx = extent.getMaxX();
+		if(extent.getMaxY() < rect.getMaxY())
+			maxy = extent.getMaxY();
+		rect = new Rectangle2D.Double(minx, miny, Math.abs(maxx - minx), Math.abs(maxy - miny));
+		
+		//Asignamos las coordenadas reales
+		cutRasterDialog.getPCut().setCoorRealFromDouble(rect.getMinX(), rect.getMaxY(), rect.getMaxX(), rect.getMinY(), 6);
+		try {
+			int widthPx = 0;
+			int heightPx = 0;
+			ArrayList attr = ((FLyrRaster)layer).getSource().getAttributes();
+	   		for (int i=0; i<attr.size(); i++) {
+				Object[] a = (Object []) attr.get(i);
+				if(a[0].toString().equals("Width"))
+					widthPx = ((Integer)a[1]).intValue();
+				if(a[0].toString().equals("Height"))
+					heightPx = ((Integer)a[1]).intValue();
+			}
+	
+	   		Rectangle2D window = new Rectangle2D.Double(rect.getMinX(), rect.getMinY(), rect.getWidth(), rect.getHeight());
+	   		Rectangle2D r = org.cresques.util.Utilities.getPxRectFromMapRect(layer.getFullExtent(), widthPx, heightPx, window);
+	   		cutRasterDialog.getPCut().setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
+	   		cutRasterDialog.getPCut().setWidthText(r.getWidth(), 0);
+	   		cutRasterDialog.getPCut().setHeightText(r.getHeight(), 0);
+	   		cutRasterDialog.getPCut().setCellSizeText((rect.getWidth() / r.getWidth()), 4);
+	   		cutRasterDialog.getPCut().setRelWidthHeight((double)(r.getWidth() / r.getHeight()));
+	   		cutRasterDialog.setInitValuesToSize(r.getWidth(), r.getHeight());
+	   		if(currentTool != null)
+	   			mapCtrl.setTool(currentTool);
+		} catch (DriverException e) {
+		
+		} catch (NumberFormatException e) {
+		
+		}
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java	(revision 30230)
@@ -0,0 +1,97 @@
+/*
+ * Created on 17-feb-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.pilotoraster;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.gui.panels.FPanelAbout;
+import com.iver.cit.gvsig.About;
+
+/**
+ * Extensión que abre una nueva ventana mostrando la información sobre el
+ * raster de gvSIG.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class RasterAbout extends Extension {
+  /**
+	 * @see com.iver.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return false;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return false;
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+
+	}
+	/**
+	 * @see com.iver.andami.plugins.IExtension#postInitialize()
+	 */
+	public void postInitialize() {
+		About about=(About)PluginServices.getExtension(About.class);
+		FPanelAbout panelAbout=about.getAboutPanel();
+		java.net.URL aboutURL = RasterAbout.class.getResource(
+	        "/about.htm");
+	        panelAbout.addAboutUrl("Raster",aboutURL);
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java	(revision 30230)
@@ -0,0 +1,90 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.pilotoraster;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.gui.toc.WCSHistogramTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WCSPaletteTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WCSRasterFilterTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSHistogramTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSPaletteTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSRasterFilterTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.CutRasterTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.HistogramTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.PaletteTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.RasterFilterTocMenuEntry;
+import com.iver.utiles.extensionPoints.ExtensionPoints;
+import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
+
+
+/**
+ * Extensión para el piloto de raster. Añade las entrada de menú necesarias.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class PilotoRasterModule extends Extension {
+	
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#inicializar()
+     */
+    public void initialize() {
+    	ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+    	extensionPoints.add("View_TocActions","Histogram",new HistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilter",new RasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","Palette",new PaletteTocMenuEntry());
+       	extensionPoints.add("View_TocActions","CutRaster",new CutRasterTocMenuEntry());
+       	
+       	//Puntos de extensión para WCS
+       	extensionPoints.add("View_TocActions","HistogramWCS",new WCSHistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilterWCS",new WCSRasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","PaletteWCS",new WCSPaletteTocMenuEntry());
+       	
+       	//Puntos de extensión para WMS
+       	extensionPoints.add("View_TocActions","HistogramWMS",new WMSHistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilterWMS",new WMSRasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","PaletteWMS",new WMSPaletteTocMenuEntry());
+    }
+   
+    /**
+     * Cargamos el listener y ejecutamos la herramienta de salvar a Raster.
+     */
+    public void execute(String actionCommand) {
+    	
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * Mostramos el control si hay alguna capa cargada.
+     */
+    public boolean isVisible() {
+        com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+                                                             .getActiveWindow();
+        if (f == null) 
+            return false;
+      
+        return (f  instanceof IWindow);
+    }
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java	(revision 30230)
@@ -0,0 +1,435 @@
+/*
+ * Created on 20-dic-2006
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ */
+package org.gvsig.rasterTools.grass;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.GdalFile;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.Grid;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.px.Extent;
+import org.cresques.px.PxRaster;
+
+import com.iver.cit.gvsig.fmap.ViewPort;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver;
+
+
+public class GrassDriver implements GeorreferencedRasterDriver{
+	
+	/* (non-Javadoc)
+	 * @see com.hardcode.driverManager.Driver#getName()
+	 */
+	public String getName() {
+		return "gvSIG Grass Driver";
+	}
+
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
+	 */
+	public boolean fileAccepted(File file) {
+		int index = file.getAbsolutePath().lastIndexOf(File.separator);
+		String path = file.getAbsolutePath().substring(0, index);
+		return path.endsWith("PERMANENT/cellhd");
+	}
+	
+	private File file = null;
+	private IProjection proj = null;
+	private GeoRasterFile rasterFile = null;
+	private PxRaster raster = null;
+	private Grid	grid = null;
+
+	int trans = 255;
+
+	static {
+		 Class c[] = {GdalFile.class};
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#open(java.io.File)
+	 */
+	public void open(File f) throws IOException {
+		file = f;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#close()
+	 */
+	public void close() throws IOException {
+		rasterFile.close();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#initialize()
+	 */
+	public void initialize() throws IOException {
+		if (proj != null){
+			String fName = null;
+			if(file != null)
+				fName = file.getAbsolutePath();
+				
+			if(fName != null)
+				rasterFile = GeoRasterFile.openFile(proj, fName);
+			
+			if(rasterFile == null)
+				throw new IOException("Formato no valido");
+			grid = new Grid(rasterFile);
+			createPxRaster();
+		} else
+			throw new IOException("Proyección no asignada");
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#initialize(org.cresques.cts.IProjection)
+	 */
+	public void initialize(IProjection proj) throws IOException {
+		this.proj = proj;
+		rasterFile = GeoRasterFile.openFile(proj, file.getAbsolutePath());
+		if(rasterFile == null)
+			return;
+		grid = new Grid(rasterFile);
+		createPxRaster();
+	}
+
+	private void createPxRaster() {
+		raster = new PxRaster(rasterFile, null, rasterFile.getExtent());
+		raster.setTransparency(false);
+		grid.addRenderizer(raster);
+	}
+
+	/**
+	 * Añade un fichero al PxRaste
+	 * @param fileName Nombre del fichero a añadir
+	 */
+	public void addFile(String fileName){
+		if(raster!=null){
+			GeoRasterFile grf = raster.addFile(fileName);
+			grid.addFile(grf);
+		}
+	}
+
+	/**
+	 * Elimina un fichero al PxRaste
+	 * @param fileName Nombre del fichero a añadir
+	 */
+	public void delFile(String fileName){
+		if(raster!=null){
+			GeoRasterFile grf = raster.delFile(fileName);
+			grid.removeFile(grf);
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getFullExtent()
+	 */
+	public Rectangle2D getFullExtent() {
+		return rasterFile.getExtent().toRectangle2D();
+	}
+
+	public int getTransparency() {
+		return 255-(raster.getAlpha());
+	}
+
+	public void setTransparency(int trans) {
+		this.trans = trans;
+		if (raster != null) {
+			raster.setTransparency(trans);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort)
+	 */
+	public void draw(BufferedImage image, Graphics2D g, ViewPort vp) throws DriverIOException {
+		Extent e = new Extent(vp.getAdjustedExtent());
+		Dimension imgSz = vp.getImageSize();
+		ViewPortData vp2 = new ViewPortData(vp.getProjection(), e, imgSz );
+		vp2.setMat(vp.getAffineTransform());
+		raster.draw(g, vp2);
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getProjection()
+	 */
+	public IProjection getProjection() {
+		return proj;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#setProjection(org.cresques.cts.IProjection)
+	 */
+	public void setProjection(IProjection proj) {
+		this.proj = proj;
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getNumBands()
+	 */
+	public int getNumBands() {
+		return rasterFile.getBandCount();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, byte[])
+	 */
+	public byte[] getPixel(int x, int y, byte[] dArray) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, int[])
+	 */
+	public int[] getPixel(int x, int y, int[] dArray) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getRasterDataType()
+	 */
+	public int getRasterDataType() {
+		return raster.getDataType();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getData(int, int, int)
+	 */
+	public Object getData(int x, int y, int band) {
+		return raster.getFiles()[0].getData(x, y, band);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsByte(int, int, int)
+	 */
+	public byte getDataAsByte(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsFloat(int, int, int)
+	 */
+	public float getDataAsFloat(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsDouble(int, int, int)
+	 */
+	public double getDataAsDouble(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsInt(int, int, int)
+	 */
+	public int getDataAsInt(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getImage(java.awt.Dimension, java.awt.geom.Rectangle2D, org.cresques.cts.ICoordTrans)
+	 */
+	public Image getImage(Dimension size, Rectangle2D userSize, ICoordTrans rp) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getAttributes()
+	 * ¡AVISO! Variar los tipos de datos devueltos puede hacer que alguna extensión
+	 * no funcione bien. Se pueden añadir atributos pero no es recomendable quitar ninguno. 
+	 */
+	public ArrayList getAttributes() {
+		ArrayList attr = new ArrayList();
+		String dataType = "Byte";
+		if (rasterFile.getDataType() == DataBuffer.TYPE_BYTE) dataType = "Byte";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_SHORT)
+			dataType = "Short";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_USHORT)
+			dataType = "Unsigned Short";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_INT)
+			dataType = "Integer";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_FLOAT)
+			dataType = "Float";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_DOUBLE)
+			dataType = "Double";
+		else
+			dataType = "Unknown";
+		Object [][] a = {
+			{"Filename",rasterFile.getName()},
+			{"Filesize",new Long(rasterFile.getFileSize())},
+			{"Width",new Integer(rasterFile.getWidth())},
+			{"Height", new Integer(rasterFile.getHeight())},
+			{"Bands", new Integer(rasterFile.getBandCount())}
+//			{"BandDataType", dataType}
+		};
+		for (int i=0; i<a.length; i++)
+			attr.add(a[i]);
+		return attr;
+	}
+
+	/**
+	 * Devuelve el colorBand activo en la banda especificada.
+	 * @param flag banda.
+	 * @return color de banda activo
+	 */
+	public int getBand(int flag){
+		return raster.getBand(flag);
+	}
+
+	/**
+	 * Devuelve la posición del fichero para la banda especificada.
+	 * @param flag banda.
+	 * @return posición del fichero
+	 */
+	public int getPosFile(int flag){
+		return raster.getPosFile(flag);
+	}
+
+	/**
+	 * Activa o desactiva la transparencia
+	 * @param t	true activa la transparencia y false la desactiva
+	 */
+	public void setTransparency(boolean t){
+		raster.setTransparency(t);
+	}
+
+	/**
+	 * Asocia un colorBand al rojo, verde o azul.
+	 * @param flag cual (o cuales) de las bandas.
+	 * @param nBand	que colorBand
+	 */
+	public void setBand(int flag, int nBand){
+		raster.setBand(flag, nBand);
+	}
+
+	/**
+	 * Obtiene la pila de filtros
+	 * @return pila de filtros
+	 */
+	public RasterFilterStack getFilterStack(){
+		return raster.filterStack;
+	}
+
+	/**
+	 * Asigna la pila de filtros
+	 * @return pila de filtros
+	 */
+	public void setFilterStack(RasterFilterStack stack){
+		raster.filterStack = stack;
+	}
+
+	/**
+	 * Obtiene el valor del pixel del Image en la posición x,y
+	 * @param x Posición x
+	 * @param y Posición y
+	 * @return valor de pixel
+	 */
+	public int[] getPixel(double wcx, double wcy){
+		return raster.getPixel(wcx, wcy);
+	}
+
+	/**
+	 *
+	 */
+	public GeoRasterFile [] getFiles(){
+		return raster.getFiles();
+	}
+	
+	/**
+	 * Obtiene el flag que dice si la imagen está o no georreferenciada
+	 * @return true si está georreferenciada y false si no lo está.
+	 */
+	public boolean isGeoreferenced() {
+		return rasterFile.isGeoreferenced();
+	}
+	
+	/**
+	 * Asigna una transformación al georrasterfile para la transformar la 
+	 * asignación de setView. Del mismo modo asigna los extents a PxRaster para
+	 * transformar la visualización.
+	 * @param t Matriz de transformación
+	 */
+	public void setAffineTransform(AffineTransform t){ 
+		for (int i = 0; i < raster.getFiles().length; i++) {
+			raster.getFiles()[i].setAffineTransform(t);
+			raster.setExtent(raster.getFiles()[i].getExtent());
+			raster.setExtentForRequest(raster.getFiles()[i].getExtentForRequest());
+		}
+	}
+	
+	public AffineTransform getAffineTransform(){
+		return raster.getFiles()[0].getAffineTransform();
+	}
+	
+	/**
+	 * Obtiene el grid asociado 
+	 * @return grid
+	 */
+	public Grid getGrid(){
+		return grid;
+	}
+	
+	/**
+	 * It returns a new file created from the selected
+	 * raster file. e.g: When the user name chooses a
+	 * RAW file the file to open is a VRT file. This 
+	 * method creates the new file and returns its name.
+	 * @param file
+	 * Selected File
+	 * @return
+	 * New File to load
+	 */
+	public File getTransformedFile(File file){
+		return null;
+	}
+
+	/**
+	 * Set data buffer to create a memory raster driver
+	 * @param buf data buffer
+	 */
+	public void setBuffer(RasterBuf buf){
+	}
+	
+	/**
+	 * Set extent to create a memory raster driver
+	 * @param ext Extent
+	 */
+	public void setExtent(Extent ext){
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java	(revision 30230)
@@ -0,0 +1,419 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel contains the rigth panel of the "Set Geometry"
+ * panel. It is the imput to write the file size in bytes,
+ * the data type, the byte order and the type of
+ * interleaving.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesRigthPanel extends JPanel{
+	private JPanel byteOrderLabelPanel = null;
+	private JPanel interleavingLabelPanel = null;
+	private JPanel dataTypeLabelPanel = null;
+	private JLabel dataTypeLabel = null;
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel fileSizeTextPanel = null;
+	private JPanel dataTypeTextPanel = null;
+	private JPanel fileSizeLabelPanel = null;
+	private JLabel fileSizeLabel = null;
+	private JLabel byteOrderLabel = null;
+	private JPanel byteOrderTextPanel = null;
+	private JPanel interleavingTextPanel = null;
+	private JTextField fileSizeText = null;
+	private JLabel interleavingLabel = null;
+	private JComboBox dataTypeText = null;
+	private JComboBox byteOrderText = null;
+	private JComboBox interleavingText = null;
+	
+	private final int WIDTH = 245;
+	private final int HEIGHT = 110;
+	private final int LABELS_PANEL_WIDTH = 120;
+	private final int TEXTS_PANEL_WIDTH = 125;
+	private final int LABELS_WIDTH = 120;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 120;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public GeometryPropertiesRigthPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {    
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes pX	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getByteOrderLabelPanel() {
+		if (byteOrderLabelPanel == null) {
+			byteOrderLabel = new JLabel();
+			byteOrderLabel.setText(PluginServices.getText(this, "byte_order"));
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			byteOrderLabelPanel = new JPanel();
+			byteOrderLabelPanel.setLayout(flowLayout2);
+			byteOrderLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			byteOrderLabelPanel.add(byteOrderLabel, null);
+			flowLayout2.setVgap(1);
+			flowLayout2.setHgap(0);
+		}
+		return byteOrderLabelPanel;
+	}
+
+	/**
+	 * This method initializes pY	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getInterleavingLabelPanel() {
+		if (interleavingLabelPanel == null) {
+			interleavingLabel = new JLabel();
+			interleavingLabel.setText(PluginServices.getText(this, "type_of_interleaving"));
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			interleavingLabelPanel = new JPanel();
+			interleavingLabelPanel.setLayout(flowLayout1);
+			interleavingLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			interleavingLabelPanel.add(interleavingLabel, null);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(1);
+		}
+		return interleavingLabelPanel;
+	}
+
+	/**
+	 * This method initializes pLatitud	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getDataTypeLabelPanel() {
+		if (dataTypeLabelPanel == null) {
+			dataTypeLabel = new JLabel();
+			dataTypeLabel.setText(PluginServices.getText(this, "data_type"));
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
+			dataTypeLabelPanel = new JPanel();
+			dataTypeLabelPanel.setLayout(flowLayout3);
+			dataTypeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			flowLayout3.setHgap(0);
+			flowLayout3.setVgap(1);
+			dataTypeLabelPanel.add(dataTypeLabel, null);
+		}
+		return dataTypeLabelPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFileSizeLabelPanel() {
+		if (fileSizeLabelPanel == null) {
+			fileSizeLabel = new JLabel();
+			fileSizeLabel.setText(PluginServices.getText(this, "file_size_in_bytes"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			fileSizeLabelPanel = new JPanel();
+			fileSizeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			fileSizeLabelPanel.setLayout(flowLayout4);
+			fileSizeLabelPanel.add(fileSizeLabel, null);
+		}
+		return fileSizeLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getFileSizeLabelPanel(), null);
+			labelsPanel.add(getDataTypeLabelPanel(), null);
+			labelsPanel.add(getByteOrderLabelPanel(), null);
+			labelsPanel.add(getInterleavingLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getFileSizeTextPanel(), null);
+			fieldsPanel.add(getDataTypeTextPanel(), null);
+			fieldsPanel.add(getByteOrderTextPanel(), null);
+			fieldsPanel.add(getInterleavingTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFileSizeTextPanel() {
+		if (fileSizeTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			fileSizeTextPanel = new JPanel();
+			fileSizeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			fileSizeTextPanel.setLayout(flowLayout);
+			fileSizeTextPanel.add(getFileSizeText(), null);
+		}
+		return fileSizeTextPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getDataTypeTextPanel() {
+		if (dataTypeTextPanel == null) {
+			FlowLayout flowLayout5 = new FlowLayout();
+			flowLayout5.setHgap(0);
+			flowLayout5.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout5.setVgap(1);
+			dataTypeTextPanel = new JPanel();
+			dataTypeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			dataTypeTextPanel.setLayout(flowLayout5);
+			dataTypeTextPanel.add(getDataTypeText(), null);
+		}
+		return dataTypeTextPanel;
+	}	
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getInterleavingTextPanel() {
+		if (interleavingTextPanel == null) {
+			FlowLayout flowLayout8 = new FlowLayout();
+			flowLayout8.setHgap(0);
+			flowLayout8.setAlignment(FlowLayout.LEFT);
+			flowLayout8.setVgap(1);
+			interleavingTextPanel = new JPanel();
+			interleavingTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			interleavingTextPanel.setLayout(flowLayout8);
+			interleavingTextPanel.add(getInterleavingText(), null);
+		}
+		return interleavingTextPanel;
+	}
+	
+	/**
+	 * This method initializes oficialTextPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getByteOrderTextPanel() {
+		if (byteOrderTextPanel == null) {
+			FlowLayout flowLayout9 = new FlowLayout();
+			flowLayout9.setHgap(0);
+			flowLayout9.setAlignment(FlowLayout.LEFT);
+			flowLayout9.setVgap(1);
+			byteOrderTextPanel = new JPanel();
+			byteOrderTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			byteOrderTextPanel.setLayout(flowLayout9);			
+			byteOrderTextPanel.add(getByteOrderText(), null);
+		}
+		return byteOrderTextPanel;
+	}
+
+
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JTextField getFileSizeText() {
+		if (fileSizeText == null) {
+			fileSizeText = new JTextField();
+			fileSizeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			fileSizeText.setText("0");
+			fileSizeText.setEnabled(false);
+		}
+		return fileSizeText;
+	}
+
+	/**
+	 * This method initializes etimologyText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getDataTypeText() {
+		if (dataTypeText == null) {
+			dataTypeText = new JComboBox(VRTFormatOptions.getDataTypes());
+			dataTypeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return dataTypeText;
+	}
+
+	/**
+	 * This method initializes bandsText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getByteOrderText() {
+		if (byteOrderText == null) {
+			byteOrderText = new JComboBox(VRTFormatOptions.getByteOrder());
+			byteOrderText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return byteOrderText;
+	}
+
+	/**
+	 * This method initializes headerSizeText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getInterleavingText() {
+		if (interleavingText == null) {
+			interleavingText = new JComboBox(VRTFormatOptions.getInterleaving());
+			interleavingText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return interleavingText;
+	}
+
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(long fileSize){
+		getFileSizeText().setText(String.valueOf(fileSize));
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return (VRTFormatOptions.UIOption)getDataTypeText().getSelectedItem();
+	}	
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return ((VRTFormatOptions.UIOption)getByteOrderText().getSelectedItem()).getVrtOptionName();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return ((VRTFormatOptions.UIOption)getInterleavingText().getSelectedItem()).getVrtOptionName();
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java	(revision 30230)
@@ -0,0 +1,227 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/01 13:12:56  jorpiell
+ * Separado un poco las dos columnas del panel
+ *
+ * Revision 1.4  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.3  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.2  2006/07/28 12:53:45  jorpiell
+ * Cambiado el Messages por el Plugin services
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel implements all the geometry properties panel.
+ * The "guess image geometry" button can be enabled or disabled
+ * changing the GUESS_IMAGE_BUTTON_VISIBLE attribute value.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesPanel extends JPanel {
+	private final int WIDTH = 510;
+	private final int HEIGHT = 155;
+	
+	private boolean GUESS_IMAGE_BUTTON_VISIBLE = false;
+	private GeometryPropertiesLeftPanel leftPanel = null;
+	private GeometryPropertiesRigthPanel rigthPanel = null;
+	private GuessImagePanel guessImagePanel = null;
+	public GeometryPropertiesPanel() {
+		super();
+		initialize();		
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+        gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints2.gridy = 1;
+        gridBagConstraints2.gridx = 0;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(0,2,0,0);
+        gridBagConstraints1.gridy = 0;
+        gridBagConstraints1.gridx = 1;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.setSize(new java.awt.Dimension(WIDTH,HEIGHT));
+        this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+        this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this,"select_image_geometry"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        this.add(getLeftPanel(), gridBagConstraints);
+        this.add(getRigthPanel(), gridBagConstraints1);
+        if (GUESS_IMAGE_BUTTON_VISIBLE){
+        	this.add(getGuessImagePanel(), gridBagConstraints2);
+        }
+			
+	}
+
+	/**
+	 * This method initializes leftPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesLeftPanel getLeftPanel() {
+		if (leftPanel == null) {
+			leftPanel = new GeometryPropertiesLeftPanel();
+		}
+		return leftPanel;
+	}
+
+	/**
+	 * This method initializes rigthPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesRigthPanel getRigthPanel() {
+		if (rigthPanel == null) {
+			rigthPanel = new GeometryPropertiesRigthPanel();
+		}
+		return rigthPanel;
+	}
+
+	/**
+	 * This method initializes guessImagePanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GuessImagePanel getGuessImagePanel() {
+		if (guessImagePanel == null) {
+			guessImagePanel = new GuessImagePanel();
+		}
+		return guessImagePanel;
+	}
+	
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(long fileSize){
+		getRigthPanel().setFileSize(fileSize);
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return getRigthPanel().getDataType();
+	}
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return getRigthPanel().getByteOrder();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return getRigthPanel().getInterleaving();
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		return getLeftPanel().getImageWidth();
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		return getLeftPanel().getImageHeight();
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		return getLeftPanel().getNumberOfBands();
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		return getLeftPanel().getHeaderSize();
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java	(revision 30230)
@@ -0,0 +1,112 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+import javax.swing.JButton;
+
+import com.iver.andami.PluginServices;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel is a JButton for the "Guess image geometry"
+ * option.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GuessImagePanel extends JPanel {
+	private final int BUTTON_WIDTH = 250;
+	private final int BUTTON_HEIGHT = 19;
+	
+	private JButton guessImageButton = null;
+
+	
+	public GuessImagePanel() {
+		super();
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getGuessImageButton(), gridBagConstraints);
+			
+	}
+
+	/**
+	 * This method initializes guessImageButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getGuessImageButton() {
+		if (guessImageButton == null) {
+			guessImageButton = new JButton();
+			guessImageButton.setPreferredSize(new java.awt.Dimension(BUTTON_WIDTH,BUTTON_HEIGHT));
+			guessImageButton.setText(PluginServices.getText(this,"guess_image_geometry"));
+			
+		}
+		return guessImageButton;
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java	(revision 30230)
@@ -0,0 +1,166 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+import javax.swing.JButton;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import com.iver.andami.PluginServices;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains the main buttons of the open raw 
+ * file panel window.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileButtonsPanel extends JPanel{
+	private final int WIDTH = 500;
+	private final int HEIGHT = 35;
+	private final int BUTTONS_WIDTH = 80;
+	private final int BUTTONS_HEIGHT = 25;
+	
+	private JButton openButton = null;
+	private JButton closeButton = null;
+	
+	
+
+	public OpenRawFileButtonsPanel() {
+		super();
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+		gridBagConstraints3.insets = new java.awt.Insets(5,3,5,5);
+		gridBagConstraints3.gridy = 0;
+		gridBagConstraints3.gridx = 3;
+		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+		gridBagConstraints2.insets = new java.awt.Insets(5,3,5,2);
+		gridBagConstraints2.gridy = 0;
+		gridBagConstraints2.gridx = 2;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new java.awt.Insets(5,3,5,2);
+		gridBagConstraints1.gridy = 0;
+		gridBagConstraints1.gridx = 1;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new java.awt.Insets(5,5,5,2);
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.gridx = 0;
+		this.setLayout(new GridBagLayout());
+		this.setSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getOpenButton(), gridBagConstraints2);
+		this.add(getCloseButton(), gridBagConstraints3);
+			
+	}
+	
+
+	/**
+	 * This method initializes openButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getOpenButton() {
+		if (openButton == null) {
+			openButton = new JButton();
+			openButton.setPreferredSize(new Dimension(BUTTONS_WIDTH,BUTTONS_HEIGHT));
+			openButton.setText(PluginServices.getText(this,"accept"));
+			openButton.setActionCommand("open");
+		}
+		return openButton;
+	}
+
+	/**
+	 * This method initializes closeButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getCloseButton() {
+		if (closeButton == null) {
+			closeButton = new JButton();
+			closeButton.setPreferredSize(new Dimension(BUTTONS_WIDTH,BUTTONS_HEIGHT));
+			closeButton.setText(PluginServices.getText(this,"close"));
+			closeButton.setActionCommand("close");
+		}
+		return closeButton;
+	}
+	
+	/**
+	 * Sets the buttons listener
+	 * @param listener
+	 * Buttons listener
+	 */
+	public void setActionListener(OpenRawFileDefaultViewListener listener){
+		openButton.addActionListener(listener);
+		closeButton.addActionListener(listener);
+	}
+
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java	(revision 30230)
@@ -0,0 +1,127 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.io.File;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/11/15 12:58:01  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/03 06:36:51  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/08/03 06:18:29  jorpiell
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.2  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class implemens the View interface to add the open
+ * raw panel in gvSIG
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultView extends OpenRawFileDefaultPanel implements IWindow{
+	private File imageFile = null;
+	
+	/**
+	 * Constructor. It create and sets the listener for the window
+	 * buttons.
+	 * @param rawFile
+	 * Raw file name
+	 */
+	public OpenRawFileDefaultView(String rawFileName){
+		super(rawFileName);
+		setActionListener(new OpenRawFileDefaultViewListener(this));
+		PluginServices.getMDIManager().addWindow(this);	
+	}
+		
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewinfo.setTitle(PluginServices.getText(this, "open_raw_file"));
+		m_viewinfo.setHeight(270);
+		m_viewinfo.setWidth(540);
+		return m_viewinfo;
+	}	
+
+	/**
+	 * @return Returns the imageFile.
+	 */
+	public File getImageFile() {
+		return imageFile;
+	}
+
+	/**
+	 * @param imageFile The imageFile to set.
+	 */
+	public void setImageFile(File imageFile) {
+		this.imageFile = imageFile;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java	(revision 30230)
@@ -0,0 +1,289 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.openFile.OpenFileContainer;
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.io.File;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains all the components of a open raw file
+ * panel. It doesn't has the main buttons.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileControlsPanel extends JPanel {
+	private final int PANELS_WIDTH = 510;	
+	
+	private OpenFileContainer openFilePanel = null;
+	private GeometryPropertiesPanel geometryPropertiesPanel = null;
+	private OutputHeaderFormatPanel outputHeaderFormatPanel = null;
+	
+	private boolean calculateFileSize = true;
+
+	/**
+	 * Constructor
+	 * @param rawFileName
+	 * Raw file name
+	 */
+	public OpenRawFileControlsPanel(String rawFileName) {
+		super();
+		initialize();
+		openFilePanel.getTOpen().setText(rawFileName);
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+        gridBagConstraints2.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints2.gridy = 2;
+        gridBagConstraints2.gridx = 0;
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints1.gridy = 1;
+        gridBagConstraints1.gridx = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getOpenFilePanel(), gridBagConstraints);
+        this.add(getGeometryPropertiesPanel(), gridBagConstraints1);
+        this.add(getOutputHeaderFormatPanel(), gridBagConstraints2);
+        new CalculateFileSize();
+	}
+
+	/**
+	 * This method initializes openFilePanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OpenFileContainer getOpenFilePanel() {
+		if (openFilePanel == null) {
+			openFilePanel = new OpenFileContainer(PANELS_WIDTH,50,false);
+			openFilePanel.setPreferredSize(new java.awt.Dimension(PANELS_WIDTH,50));
+		}
+		return openFilePanel;
+	}
+
+	/**
+	 * This method initializes geometryPropertiesPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesPanel getGeometryPropertiesPanel() {
+		if (geometryPropertiesPanel == null) {
+			geometryPropertiesPanel = new GeometryPropertiesPanel();
+		}
+		return geometryPropertiesPanel;
+	}
+
+	/**
+	 * This method initializes outputHeaderFormatPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OutputHeaderFormatPanel getOutputHeaderFormatPanel() {
+		if (outputHeaderFormatPanel == null) {
+			outputHeaderFormatPanel = new OutputHeaderFormatPanel();
+		}
+		return outputHeaderFormatPanel;
+	}	
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(int fileSize){
+		getGeometryPropertiesPanel().setFileSize(fileSize);
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return getGeometryPropertiesPanel().getDataType();
+	}
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return getGeometryPropertiesPanel().getByteOrder();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return getGeometryPropertiesPanel().getInterleaving();
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		return getGeometryPropertiesPanel().getImageWidth();
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		return getGeometryPropertiesPanel().getImageHeight();
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		return getGeometryPropertiesPanel().getNumberOfBands();
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		return getGeometryPropertiesPanel().getHeaderSize();
+	}
+	
+	/**
+	 * gets the selected outputformat
+	 * @return
+	 */
+	public String getOutputHeaderFormat(){
+		return getOutputHeaderFormatPanel().getOutputHeaderFormat();
+	}
+	
+	/**
+	 * Gets the RAW file
+	 * @return
+	 */
+	public File getFile(){
+		return getOpenFilePanel().getFile();		
+	}
+	
+	/**
+	 * This method is used by the listener to stop the
+	 * thread that calculates the file size
+	 *
+	 */
+	public void stopThread() {
+		calculateFileSize = false;		
+	}
+
+	/**
+	 * This class is a thread that try if the textbox (where
+	 * the file to open is written) contains a valid file and
+	 * calculate its size.
+	 * @author Jorge Piera Llodrá (piera_jor@gva.es)
+	 */
+	public class CalculateFileSize implements Runnable{
+		volatile Thread myThread = null;
+		
+		public CalculateFileSize(){
+			if (myThread == null){
+				myThread = new Thread(this);
+				myThread.start();
+			}
+		}
+		
+		/*
+		 *  (non-Javadoc)
+		 * @see java.lang.Runnable#run()
+		 */
+		public void run() {
+			while(calculateFileSize){
+				File file = getFile();
+				if ((file.exists() &&
+						(file.isFile()))){
+					getGeometryPropertiesPanel().setFileSize(file.length());
+				}else{
+					getGeometryPropertiesPanel().setFileSize(0);
+				}
+				try {
+					Thread.sleep(1000);
+				} catch (InterruptedException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}			
+		}
+		
+	}
+
+	
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java	(revision 30230)
@@ -0,0 +1,141 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This is the main open raw file panel. It is composed
+ * by all the other panels
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultPanel extends JPanel{
+
+	private OpenRawFileControlsPanel controlsPanel = null;
+	private OpenRawFileButtonsPanel buttonsPanel = null;
+		
+	private String rawFileName = null;
+
+	public OpenRawFileDefaultPanel(String rawFileName) {
+		super();
+		this.rawFileName = rawFileName;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints1.gridy = 1;
+        gridBagConstraints1.gridx = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getControlsPanel(), gridBagConstraints);
+        this.add(getButtonsPanel(), gridBagConstraints1);
+			
+	}
+
+	/**
+	 * This method initializes controlsPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public OpenRawFileControlsPanel getControlsPanel() {
+		if (controlsPanel == null) {
+			controlsPanel = new OpenRawFileControlsPanel(rawFileName);
+			controlsPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.SoftBevelBorder.RAISED));
+		}
+		return controlsPanel;
+	}
+
+	/**
+	 * This method initializes buttonsPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OpenRawFileButtonsPanel getButtonsPanel() {
+		if (buttonsPanel == null) {
+			buttonsPanel = new OpenRawFileButtonsPanel();
+		}
+		return buttonsPanel;
+	}
+	
+	/**
+	 * Sets the buttons listener
+	 * @param listener
+	 * Buttons listener
+	 */
+	public void setActionListener(OpenRawFileDefaultViewListener listener){
+		getButtonsPanel().setActionListener(listener);
+	}
+	
+	
+	
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java	(revision 30230)
@@ -0,0 +1,211 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class implements one part of the open raw file panel.
+ * It contains the combobox to select the "output header format".
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OutputHeaderFormatPanel extends JPanel{
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel OutputFormatTextPanel = null;
+	private JPanel outputFormatLabelPanel = null;
+	private JLabel outputFormatLabel = null;
+	private JComboBox outputFormatText = null;
+	private final int WIDTH = 510;
+	private final int HEIGHT = 25;
+	private final int LABELS_PANEL_WIDTH = 250;
+	private final int TEXTS_PANEL_WIDTH = 250;
+	private final int LABELS_WIDTH = 245;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 245;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public OutputHeaderFormatPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {    
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getOutputFormatLabelPanel() {
+		if (outputFormatLabelPanel == null) {
+			outputFormatLabel = new JLabel();
+			outputFormatLabel.setText(PluginServices.getText(this, "output_header_format"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			outputFormatLabelPanel = new JPanel();
+			outputFormatLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			outputFormatLabelPanel.setLayout(flowLayout4);
+			outputFormatLabelPanel.add(outputFormatLabel, null);
+		}
+		return outputFormatLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getOutputFormatLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getOutputFormatTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getOutputFormatTextPanel() {
+		if (OutputFormatTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			OutputFormatTextPanel = new JPanel();
+			OutputFormatTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			OutputFormatTextPanel.setLayout(flowLayout);
+			OutputFormatTextPanel.add(getOutputFormatText(), null);
+		}
+		return OutputFormatTextPanel;
+	}
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getOutputFormatText() {
+		if (outputFormatText == null) {
+			outputFormatText = new JComboBox(VRTFormatOptions.getOutputHeaderFormats());
+			outputFormatText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return outputFormatText;
+	}
+	
+	/**
+	 * gets the selected outputformat
+	 * @return
+	 */
+	public String getOutputHeaderFormat(){
+		return ((VRTFormatOptions.UIOption)getOutputFormatText().getSelectedItem()).getVrtOptionName();
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java	(revision 30230)
@@ -0,0 +1,440 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.text.NumberFormat;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.StringUtilities;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel contains the left panel of the "Set Geometry"
+ * panel. It is the imput to write the image width, the heigth,
+ * the number of bands and the image header size.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesLeftPanel extends JPanel{
+	private JPanel bandsLabelPanel = null;
+	private JPanel headerSizeLabelPanel = null;
+	private JPanel heigthLabelPanel = null;
+	private JLabel heigthLabel = null;
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel widthTextPanel = null;
+	private JPanel heigthTextPanel = null;
+	private JPanel widthLabelPanel = null;
+	private JLabel widthLabel = null;
+	private JLabel bandsLabel = null;
+	private JPanel bandsTextPanel = null;
+	private JPanel headerSizeTextPanel = null;
+	private JFormattedTextField widthText = null;
+	private JLabel headerSizeLabel = null;
+	private JFormattedTextField heigthText = null;
+	private JFormattedTextField bandsText = null;
+	private JFormattedTextField headerSizeText = null;
+	
+	private final int WIDTH = 245;
+	private final int HEIGHT = 110;
+	private final int LABELS_PANEL_WIDTH = 120;
+	private final int TEXTS_PANEL_WIDTH = 125;
+	private final int LABELS_WIDTH = 120;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 120;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public GeometryPropertiesLeftPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {                
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes pX	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getBandsLabelPanel() {
+		if (bandsLabelPanel == null) {
+			bandsLabel = new JLabel();
+			bandsLabel.setText(PluginServices.getText(this, "bands_number"));
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			bandsLabelPanel = new JPanel();
+			bandsLabelPanel.setLayout(flowLayout2);
+			bandsLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			bandsLabelPanel.add(bandsLabel, null);
+			flowLayout2.setVgap(1);
+			flowLayout2.setHgap(0);
+		}
+		return bandsLabelPanel;
+	}
+
+	/**
+	 * This method initializes pY	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeaderSizeLabelPanel() {
+		if (headerSizeLabelPanel == null) {
+			headerSizeLabel = new JLabel();
+			headerSizeLabel.setText(PluginServices.getText(this, "header_Size"));
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			headerSizeLabelPanel = new JPanel();
+			headerSizeLabelPanel.setLayout(flowLayout1);
+			headerSizeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			headerSizeLabelPanel.add(headerSizeLabel, null);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(1);
+		}
+		return headerSizeLabelPanel;
+	}
+
+	/**
+	 * This method initializes pLatitud	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeigthLabelPanel() {
+		if (heigthLabelPanel == null) {
+			heigthLabel = new JLabel();
+			heigthLabel.setText(PluginServices.getText(this, "alto"));
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
+			heigthLabelPanel = new JPanel();
+			heigthLabelPanel.setLayout(flowLayout3);
+			heigthLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			flowLayout3.setHgap(0);
+			flowLayout3.setVgap(1);
+			heigthLabelPanel.add(heigthLabel, null);
+		}
+		return heigthLabelPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getWidthLabelPanel() {
+		if (widthLabelPanel == null) {
+			widthLabel = new JLabel();
+			widthLabel.setText(PluginServices.getText(this, "ancho"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			widthLabelPanel = new JPanel();
+			widthLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			widthLabelPanel.setLayout(flowLayout4);
+			widthLabelPanel.add(widthLabel, null);
+		}
+		return widthLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getWidthLabelPanel(), null);
+			labelsPanel.add(getHeigthLabelPanel(), null);
+			labelsPanel.add(getBandsLabelPanel(), null);
+			labelsPanel.add(getHeaderSizeLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getWidthTextPanel(), null);
+			fieldsPanel.add(getHeigthTextPanel(), null);
+			fieldsPanel.add(getBandsTextPanel(), null);
+			fieldsPanel.add(getHeaderSizeTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getWidthTextPanel() {
+		if (widthTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			widthTextPanel = new JPanel();
+			widthTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			widthTextPanel.setLayout(flowLayout);
+			widthTextPanel.add(getWidthText(), null);
+		}
+		return widthTextPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeigthTextPanel() {
+		if (heigthTextPanel == null) {
+			FlowLayout flowLayout5 = new FlowLayout();
+			flowLayout5.setHgap(0);
+			flowLayout5.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout5.setVgap(1);
+			heigthTextPanel = new JPanel();
+			heigthTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			heigthTextPanel.setLayout(flowLayout5);
+			heigthTextPanel.add(getHeigthText(), null);
+		}
+		return heigthTextPanel;
+	}	
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeaderSizeTextPanel() {
+		if (headerSizeTextPanel == null) {
+			FlowLayout flowLayout8 = new FlowLayout();
+			flowLayout8.setHgap(0);
+			flowLayout8.setAlignment(FlowLayout.LEFT);
+			flowLayout8.setVgap(1);
+			headerSizeTextPanel = new JPanel();
+			headerSizeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			headerSizeTextPanel.setLayout(flowLayout8);
+			headerSizeTextPanel.add(getHeaderSizeText(), null);
+		}
+		return headerSizeTextPanel;
+	}
+	
+	/**
+	 * This method initializes oficialTextPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getBandsTextPanel() {
+		if (bandsTextPanel == null) {
+			FlowLayout flowLayout9 = new FlowLayout();
+			flowLayout9.setHgap(0);
+			flowLayout9.setAlignment(FlowLayout.LEFT);
+			flowLayout9.setVgap(1);
+			bandsTextPanel = new JPanel();
+			bandsTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			bandsTextPanel.setLayout(flowLayout9);			
+			bandsTextPanel.add(getBandsText(), null);
+		}
+		return bandsTextPanel;
+	}
+
+
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getWidthText() {
+		if (widthText == null) {
+			widthText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			widthText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			widthText.setText("0");
+		}
+		return widthText;
+	}
+
+	/**
+	 * This method initializes etimologyText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getHeigthText() {
+		if (heigthText == null) {
+			heigthText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			heigthText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			heigthText.setText("0");
+		}
+		return heigthText;
+	}
+
+	/**
+	 * This method initializes bandsText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getBandsText() {
+		if (bandsText == null) {
+			bandsText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			bandsText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			bandsText.setText("0");
+		}
+		return bandsText;
+	}
+
+	/**
+	 * This method initializes headerSizeText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getHeaderSizeText() {
+		if (headerSizeText == null) {
+			headerSizeText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			headerSizeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			headerSizeText.setText("0");
+		}
+		return headerSizeText;
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		try{
+			String buffer = StringUtilities.replace(getWidthText().getText(),".","");
+			buffer = StringUtilities.replace(buffer,",","");
+			return Integer.parseInt(buffer);
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		try{
+			String buffer = StringUtilities.replace(getHeigthText().getText(),".","");
+			buffer = StringUtilities.replace(buffer,",","");
+			return Integer.parseInt(buffer);
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		try{
+			return Integer.valueOf(getBandsText().getText()).intValue();
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		try{
+			return Integer.valueOf(getHeaderSizeText().getText()).intValue();
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java	(revision 30230)
@@ -0,0 +1,165 @@
+package org.gvsig.rasterTools.raw.ui.listener;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+
+import javax.swing.JOptionPane;
+
+import org.apache.log4j.Logger;
+import org.gvsig.rasterTools.raw.tools.VRTFileCreator;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileControlsPanel;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileDefaultView;
+
+import com.iver.andami.PluginServices;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/11/15 12:58:01  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/09/05 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.4  2006/08/01 11:19:24  jorpiell
+ * Ahora ya no es la ventana la que carga la capa, sino el driver
+ *
+ * Revision 1.3  2006/07/31 10:44:04  jorpiell
+ * Se han completado las acciones de los botones aceptar y cancelar
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * Listener for the open raw file window. It implements actions
+ * for the "open file" and for the "close window" buttons. 
+ * 
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultViewListener implements ActionListener{
+	private OpenRawFileDefaultView openRawView = null;
+	private static Logger logger = Logger.getLogger(OpenRawFileDefaultViewListener.class.getName());
+	
+	/**
+	 * Contructor
+	 * @param view
+	 * Open raw file view
+	 */
+	public OpenRawFileDefaultViewListener(OpenRawFileDefaultView view) {
+		super();
+		this.openRawView = view;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent event) {
+		if (event.getActionCommand() == "close") {
+			closeButtonActionPerformed();
+		}else if (event.getActionCommand() == "open") {
+			openButtonActionPerformed();
+		}		
+	}
+
+	/**
+	 * Open raw file button action
+	 *
+	 */
+	private void openButtonActionPerformed() {
+		OpenRawFileControlsPanel controls = openRawView.getControlsPanel();
+		if (!(controls.getFile().exists())){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+				 	PluginServices.getText(this,"file_doesn_exists"));
+			return;
+		}
+		if (controls.getOutputHeaderFormat().equals("VRT")){
+			String vrtFileName = controls.getFile().getAbsolutePath().replaceAll("\\.raw", ".vrt");
+			VRTFileCreator vrt = new VRTFileCreator(vrtFileName);
+			vrt.setImageWidth(controls.getImageWidth());
+			vrt.setImageHeight(controls.getImageHeight());
+			vrt.setBands(controls.getNumberOfBands());
+			vrt.setHeaderSize(controls.getHeaderSize());
+			vrt.setDataType(controls.getDataType().getVrtOptionName());
+			vrt.setDataSize(controls.getDataType().getDataSize());
+			vrt.setByteOrder(controls.getByteOrder());
+			vrt.setInterleaving(controls.getInterleaving());
+			vrt.setRawFile(controls.getFile().getName());
+			try {
+				vrt.writeFile();				
+				openRawView.setImageFile(vrt.getM_File());
+			} catch (IOException e) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					 	PluginServices.getText(this,"cant_create_vrt_file"));
+				logger.error(PluginServices.getText(this,"cant_create_vrt_file"),e);				
+			}			
+		}
+		closeButtonActionPerformed();
+	}
+
+	/**
+	 * Close window
+	 */
+	private void closeButtonActionPerformed() {
+		OpenRawFileControlsPanel controls = openRawView.getControlsPanel();
+		controls.stopThread();
+		PluginServices.getMDIManager().closeWindow(openRawView);		
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java	(revision 30230)
@@ -0,0 +1,213 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.util.Vector;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:42:56  jorpiell
+ * Cambiadas estas clases de paquete
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains some information to manage
+ * the VRT file formats. It has the possible values
+ * for the params.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFormatOptions {
+	public static final String INTERLEAVING_PIXEL = "Pixel";
+	public static final String INTERLEAVING_BAND = "Band";
+	public static final String INTERLEAVING_LINE = "Line";
+	
+	public static final String DATA_TYPE_BYTE = "Byte";
+	public static final String DATA_TYPE_UINT16 = "Uint16";
+	public static final String DATA_TYPE_INT16 = "Int16";
+	public static final String DATA_TYPE_UINT32 = "UInt32";
+	public static final String DATA_TYPE_INT32 = "Int32";
+	public static final String DATA_TYPE_FLOAT32 = "Float32";
+	public static final String DATA_TYPE_FLOAT64 = "Float64";
+	public static final String DATA_TYPE_CINT16 = "CInt16";
+	public static final String DATA_TYPE_CINT32 = "CInt32";
+	public static final String DATA_TYPE_CFLOAT32 = "CFloat32";
+	public static final String DATA_TYPE_CFLOAT64 = "CFloat64";
+	
+	public static final String BYTE_ORDER_LSB = "LSB";
+	public static final String BYTE_ORDER_MSB = "MSB";
+	
+	public static final String OUTPUT_FORMAT_VRT = "VRT";
+	
+	/**
+	 * Return the supported image data types 
+	 * @return
+	 * One vector of data types
+	 */
+	public static Vector getDataTypes(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(DATA_TYPE_BYTE,8));
+		vector.add(new UIOption(DATA_TYPE_UINT32,16));
+		vector.add(new UIOption(DATA_TYPE_INT16,16));
+		vector.add(new UIOption(DATA_TYPE_UINT32,32));
+		vector.add(new UIOption(DATA_TYPE_INT32,32));
+		vector.add(new UIOption(DATA_TYPE_FLOAT32,32));
+		vector.add(new UIOption(DATA_TYPE_FLOAT64,64));
+		vector.add(new UIOption(DATA_TYPE_CINT16,16));
+		vector.add(new UIOption(DATA_TYPE_CINT32,32));
+		vector.add(new UIOption(DATA_TYPE_CFLOAT32,32));
+		vector.add(new UIOption(DATA_TYPE_CFLOAT64,64));		
+		return vector;
+	}
+	
+	/**
+	 * Return the supported byte order
+	 * @return
+	 * One vector of byte order
+	 */
+	public static Vector getByteOrder(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(BYTE_ORDER_LSB,"LSB (Swapped)"));
+		vector.add(new UIOption(BYTE_ORDER_MSB,"MSB (Unswapped)"));
+		return vector;
+	}
+	
+	
+	/**
+	 * Return the types of interleavings
+	 * @return
+	 *One vector  of interleavings
+	 */
+	public static Vector getInterleaving(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(INTERLEAVING_PIXEL));
+		vector.add(new UIOption(INTERLEAVING_BAND));
+		vector.add(new UIOption(INTERLEAVING_LINE));
+		return vector;
+	}
+	
+	/**
+	 * Return the supported output header formats
+	 * @return
+	 * One vector of header formats
+	 */
+	public static Vector getOutputHeaderFormats(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(OUTPUT_FORMAT_VRT));
+		return vector;
+	}
+
+	/**
+	 * This class is used to separate the string that is 
+	 * showes in the user interface of the other string
+	 * used in the vrt file format.
+	 * @author Jorge Piera Llodrá (piera_jor@gva.es)
+	 *
+	 */
+	public static class UIOption{
+		private String uiName = null;
+		private String vrtOptionName = null;
+		private int dataSize = 0;
+		
+		public UIOption(String vrtOptionName,String uiName) {
+			super();
+			this.uiName = uiName;
+			this.vrtOptionName = vrtOptionName;
+		}
+		
+		public UIOption(String vrtOptionName) {
+			super();
+			this.uiName = vrtOptionName;
+			this.vrtOptionName = vrtOptionName;
+		}
+		
+		public UIOption(String vrtOptionName,int dataSize) {
+			super();
+			this.uiName = vrtOptionName;
+			this.vrtOptionName = vrtOptionName;
+			this.dataSize = dataSize;
+		}
+		
+		/**
+		 * @return Returns the uiName.
+		 */
+		public String getUiName() {
+			return uiName;
+		}
+		
+		/**
+		 * @return Returns the vrtOptionName.
+		 */
+		public String getVrtOptionName() {
+			return vrtOptionName;
+		}
+		
+		/**
+		 * @return Returns the uiName.
+		 */
+		public String toString() {
+			return uiName;
+		}
+
+		/**
+		 * @return Returns the dataSize.
+		 */
+		public int getDataSize() {
+			return dataSize;
+		}
+		
+	}
+}
+	

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java	(revision 30230)
@@ -0,0 +1,218 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.util.Hashtable;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:43:25  jorpiell
+ * Algunos métodos necesarios que calculan valores para construir el fichero VRT
+ *
+ *
+ */
+/**
+ * This class has some utils to create a VRT file.
+ * It has methods to obtaint the VRT parameters that
+ * will be written in the file
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFormatUtils {
+		
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param headerSize
+	 * Header file size
+	 * @param interLeaving
+	 * Type of interleaving
+	 * @param band
+	 * Band number
+	 * @param numBands
+	 * Number of bands
+	 * @param width
+	 * Image width
+	 * @param height
+	 * Image height
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getImageOffset(int dataSize,
+			int headerSize,
+			String interLeaving,
+			int band,
+			int numBands,
+			int width,
+			int height){
+		
+		int imageOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			imageOffSet = 1;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			imageOffSet = width * height;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			imageOffSet = width * numBands;
+		}	
+		
+		imageOffSet = imageOffSet * (dataSize/8);
+		imageOffSet = imageOffSet * (band - 1);
+		imageOffSet = imageOffSet + headerSize;
+		return String.valueOf(imageOffSet); 
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @param band
+	 * Band to obtain the image offset
+	 * @return
+	 */
+	public static String getImageOffset(VRTFileCreator fileCreator,int band){
+		return getImageOffset(fileCreator.getDataSize(),
+				fileCreator.getHeaderSize(),
+				fileCreator.getInterleaving(),
+				band,
+				fileCreator.getBands(),
+				fileCreator.getImageWidth(),
+				fileCreator.getImageHeight());
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param interLeaving
+	 * Type of interleaving
+	 * Band number
+	 * @param numBands
+	 * Number of bands
+	 * @param width
+	 * Image width
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getLineOffset(int dataSize,
+			String interLeaving,
+			int numBands,
+			int width){
+		
+		int lineOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			lineOffSet = width * numBands;
+					
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			lineOffSet = width;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			lineOffSet = width * numBands;
+		}		
+
+		lineOffSet = lineOffSet * (dataSize/8);
+		return String.valueOf(lineOffSet); 
+	}
+	
+	/**
+	 * It calculates the LineOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @return
+	 */
+	public static String getLineOffset(VRTFileCreator fileCreator){
+		return getLineOffset(fileCreator.getDataSize(),
+				fileCreator.getInterleaving(),
+				fileCreator.getBands(),
+				fileCreator.getImageWidth());
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param interLeaving
+	 * Type of interleaving
+	 * @param numBands
+	 * Number of bands
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getPixelOffset(int dataSize,
+			String interLeaving,
+			int numBands){
+		
+		int pixelOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			pixelOffSet = numBands;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			pixelOffSet = 1;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			pixelOffSet = 1;
+		}	
+		
+		pixelOffSet = pixelOffSet * (dataSize/8);
+		return String.valueOf(pixelOffSet); 
+	}
+	
+	/**
+	 * It calculates the PixelOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @return
+	 */
+	public static String getPixelOffset(VRTFileCreator fileCreator){
+		return getPixelOffset(fileCreator.getDataSize(),
+				fileCreator.getInterleaving(),
+				fileCreator.getBands());
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java	(revision 30230)
@@ -0,0 +1,425 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:42:56  jorpiell
+ * Cambiadas estas clases de paquete
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class is user to create a VRT file. It writes the file when
+ * the "writeFile" method is called. If some params are not seted
+ * the deafult values will bi used.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFileCreator {
+	private Writer writer = null;	
+	private File m_File = null;
+	private int width = 0;
+	private int height = 0;
+	private int bands = 0;
+	private int headerSize = 0;
+	private int fileSize = 0;
+	private String rawFile = null;
+	private String dataType = null;
+	private int dataSize = 0;
+	private String byteOrder = null;
+	private String interleaving = null;
+	private String outputHeaderFormat = null;
+	
+	public VRTFileCreator(File m_File) {
+		super();		
+		this.m_File = m_File;
+	}
+	
+	public VRTFileCreator(String file) {
+		super();		
+		this.m_File = new File(file);
+	}
+	
+	/**
+	 * It writes the VRT file
+	 * @throws IOException 
+	 *
+	 */
+	public void writeFile() throws IOException{
+		if (!m_File.exists()){
+			m_File.createNewFile();
+		}
+		writer = new FileWriter(m_File);
+		createVRTFile();
+		writer.close();	
+	}
+	
+	/**
+	 * It creates the VRT File
+	 * @throws IOException
+	 */
+	private void createVRTFile() throws IOException{
+		writer.write(getXMLVRTDatasetHeaderTag());
+		
+		for (int i=0 ; i<getBands() ; i++){
+			createOneBand(i+1);
+		}
+		
+		writer.write(getXMLVRTDatasetEndTag());
+	}
+	
+	/**
+	 * IT creates all the XML tags for one band
+	 * @param band
+	 * Band number
+	 * @throws IOException 
+	 */
+	private void createOneBand(int band) throws IOException{
+		writer.write(getXMLVRTRasterBandHeaderTag(band));
+		writer.write(getXMLSourceFilenameTag());
+		writer.write(getXMLByteOrderTag());
+		writer.write(getXMLImageOffsetTag(band));
+		writer.write(getXMLPixelOffsetTag());
+		writer.write(getXMLLineOffsetTag());
+		writer.write(getXMLVRTRasterBandEndTag());
+	}
+	
+	/**
+	 * Creates the header of the VRTDataset XML tag. It 
+	 * contains the width and the height.
+	 * @return
+	 * The VRTDataset XML tag
+	 */
+	private String getXMLVRTDatasetHeaderTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("<VRTDataset rasterXSize=\"" + getImageWidth() + "\" ");
+		buffer.append("rasterYSize=\"" + getImageHeight() + "\">\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the end of the VRTDataset XML tag
+	 * @return
+	 *  The VRTDataset XML tag
+	 */
+	private String getXMLVRTDatasetEndTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("</VRTDataset>\n"); 		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the header of the VRTRasterBand XML tag. It
+	 * contains the image data type. 
+	 * @return
+	 * The VRTRasterBand XML tag
+	 */
+	private String getXMLVRTRasterBandHeaderTag(int band){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t<VRTRasterBand dataType=\"" + getDataType() + "\" ");
+		buffer.append("band=\"" + band + "\" ");
+		buffer.append("subClass=\"VRTRawRasterBand\">\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the end of the VRTRasterBand XML tag
+	 * @return
+	 *  The VRTRasterBand XML tag
+	 */
+	private String getXMLVRTRasterBandEndTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t</VRTRasterBand>\n"); 		
+		return buffer.toString();
+	}		
+	
+	
+	/**
+	 * Creates the SourceFilename XML tag: The raw file path
+	 * @return
+	 * The SourceFilename XML tag
+	 */
+	private String getXMLSourceFilenameTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<SourceFilename relativetoVRT=\"1\">");
+		buffer.append(getRawFile());
+		buffer.append("</SourceFilename>\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the ByteOrder XML tag. Possible values
+	 * are specified in VRTFileOptions class.
+	 * @return
+	 * The ByteOrder XML tag
+	 */
+	private String getXMLByteOrderTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<ByteOrder>");
+		buffer.append(getByteOrder());
+		buffer.append("</ByteOrder>\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the ImageOffset XML tag: The image data starts
+	 * from the byte number specified by this value
+	 * @return
+	 * The ImageOffset XML tag
+	 */
+	private String getXMLImageOffsetTag(int band){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<ImageOffset>");
+		buffer.append(VRTFormatUtils.getImageOffset(this,band));
+		buffer.append("</ImageOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the PixelOffset XML tag: The byte offeset between 
+	 * pixels
+	 * @return
+	 * The PixelOffset XML tag
+	 */
+	private String getXMLPixelOffsetTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<PixelOffset>");
+		buffer.append(VRTFormatUtils.getPixelOffset(this));
+		buffer.append("</PixelOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the LineOffset XML tag.
+	 * @return
+	 * The LineOffset XML tag
+	 */
+	private String getXMLLineOffsetTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<LineOffset>");
+		buffer.append(VRTFormatUtils.getLineOffset(this));
+		buffer.append("</LineOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * @return Returns the bands.
+	 */
+	public int getBands() {
+		return bands;
+	}
+
+	/**
+	 * @param bands The bands to set.
+	 */
+	public void setBands(int bands) {
+		this.bands = bands;
+	}
+
+	/**
+	 * @return Returns the byteOrder.
+	 */
+	public String getByteOrder() {
+		return byteOrder;
+	}
+
+	/**
+	 * @param byteOrder The byteOrder to set.
+	 */
+	public void setByteOrder(String byteOrder) {
+		this.byteOrder = byteOrder;
+	}
+
+	/**
+	 * @return Returns the dataType.
+	 */
+	public String getDataType() {
+		return dataType;
+	}
+
+	/**
+	 * @param dataType The dataType to set.
+	 */
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+
+	/**
+	 * @return Returns the fileSize.
+	 */
+	public int getFileSize() {
+		return fileSize;
+	}
+
+	/**
+	 * @param fileSize The fileSize to set.
+	 */
+	public void setFileSize(int fileSize) {
+		this.fileSize = fileSize;
+	}
+
+	/**
+	 * @return Returns the headerSize.
+	 */
+	public int getHeaderSize() {
+		return headerSize;
+	}
+
+	/**
+	 * @param headerSize The headerSize to set.
+	 */
+	public void setHeaderSize(int headerSize) {
+		this.headerSize = headerSize;
+	}
+
+	/**
+	 * @return Returns the height.
+	 */
+	public int getImageHeight() {
+		return height;
+	}
+
+	/**
+	 * @param height The height to set.
+	 */
+	public void setImageHeight(int height) {
+		this.height = height;
+	}
+
+	/**
+	 * @return Returns the interleaving.
+	 */
+	public String getInterleaving() {
+		return interleaving;
+	}
+
+	/**
+	 * @param interleaving The interleaving to set.
+	 */
+	public void setInterleaving(String interleaving) {
+		this.interleaving = interleaving;
+	}
+
+	/**
+	 * @return Returns the outputHeaderFormat.
+	 */
+	public String getOutputHeaderFormat() {
+		return outputHeaderFormat;
+	}
+
+	/**
+	 * @param outputHeaderFormat The outputHeaderFormat to set.
+	 */
+	public void setOutputHeaderFormat(String outputHeaderFormat) {
+		this.outputHeaderFormat = outputHeaderFormat;
+	}
+
+	/**
+	 * @return Returns the width.
+	 */
+	public int getImageWidth() {
+		return width;
+	}
+
+	/**
+	 * @param width The width to set.
+	 */
+	public void setImageWidth(int width) {
+		this.width = width;
+	}
+
+	/**
+	 * @return Returns the rawFile.
+	 */
+	public String getRawFile() {
+		return rawFile;
+	}
+
+	/**
+	 * @param rawFile The rawFile to set.
+	 */
+	public void setRawFile(String rawFile) {
+		this.rawFile = rawFile;
+	}
+
+	/**
+	 * @return Returns the m_File.
+	 */
+	public File getM_File() {
+		return m_File;
+	}
+
+	/**
+	 * @return Returns the dataSize.
+	 */
+	public int getDataSize() {
+		return dataSize;
+	}
+
+	/**
+	 * @param dataSize The dataSize to set.
+	 */
+	public void setDataSize(int dataSize) {
+		this.dataSize = dataSize;
+	}
+
+
+
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java	(revision 30230)
@@ -0,0 +1,108 @@
+package org.gvsig.rasterTools.raw;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+
+import org.cresques.cts.IProjection;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.px.PxRaster;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileDefaultView;
+
+import com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.1  2006/08/01 11:19:45  jorpiell
+ * Eliminada la extensión y añadido el driver
+ *
+ *
+ */
+/**
+ * This driver loads a Raw file from a file. It opens a 
+ * properties window to set some params to create a VRT
+ * file and then uses it to load the raw file in the
+ * gvSIG current view
+ * 
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class RawDriver extends CmsRasterDriver  {
+	
+	/* (non-Javadoc)
+	 * @see com.hardcode.driverManager.Driver#getName()
+	 */
+	public String getName() {
+		return "gvSIG Raw Image Driver";
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
+	 */
+	public boolean fileAccepted(File file) {
+		if (file.getName().toUpperCase().endsWith("RAW")){
+			return true;
+		}
+		return false;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver#getTransformedFile(java.io.File)
+	 */
+	public File getTransformedFile(File file){
+		OpenRawFileDefaultView view = new OpenRawFileDefaultView(file.getAbsolutePath());
+		return view.getImageFile();
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.cvsignore
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.cvsignore	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.cvsignore	(revision 30230)
@@ -0,0 +1,4 @@
+bin
+dist
+gvSIG*.zip
+build-doc

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/A.txt
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/A.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/A.txt	(revision 30230)
@@ -0,0 +1,45 @@
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+ 
+ Copyright (C) 2000 The Apache Software Foundation. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+ 
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+ 
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+ 
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+ 
+ 4. The names "Batik" and  "Apache Software Foundation"  must not be  used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+ 
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+ 
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf  of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/A.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.xml	(revision 30230)
@@ -0,0 +1,155 @@
+<project name="extgvSIGPiloto-Raster" default="generate-without-source" basedir=".">
+    <description>
+        Instala el plugin en Andami
+    </description>
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="andami" location="../_fwAndami"/>
+  <property name="extensionsDir" location="${andami}/gvSIG/extensiones"/>
+  <property name="mainplugin" value="com.iver.cit.gvsig"/>
+  <property name="lib-dir" location="${extensionsDir}/${mainplugin}/lib"/>
+  <property name="drivers-dir" location="${extensionsDir}/${mainplugin}/drivers" />
+
+  <!--Plugins-->
+  <property name="plugin" value="com.iver.cit.gvsig.pilotoraster"/>
+  <property name="jarName" value="${plugin}.jar"/>
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+  	
+	<echo>
+		Compiling ${ant.project.name}...</echo>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${dist}"/>
+  	<loadproperties srcFile="build.number"/>
+  </target>
+
+  <target name="raw" depends="grass" description="Genera el driver del raw">
+	<mkdir dir="${drivers-dir}/raw" />
+	<jar jarfile="${drivers-dir}/raw/raw.jar" basedir="./bin" includes="org/gvsig/rasterTools/raw/**" />
+  </target>
+	
+  <target name="grass" depends="" description="Genera el driver del grass">
+	<mkdir dir="${drivers-dir}/grass" />
+	<jar jarfile="${drivers-dir}/grass/grass.jar" basedir="./bin" includes="org/gvsig/rasterTools/grass/**" />
+  </target>
+	
+  <target name="generate-without-source"
+  		description="generate the distribution without the source file"
+	  	depends="raw">
+  		
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+		
+    <!-- Jars de las extensiones -->
+    <jar jarfile="${dist}/${jarName}" basedir="${build}" 
+    	includes="com/iver/cit/gvsig/**,org/gvsig/rasterTools/**"/>
+  	  	
+  	<!-- Instala extensiÃ³n salvar a raster -->
+    <move todir="${extensionsDir}/${plugin}/">
+    	<fileset dir="${dist}" includes="${jarName}"/>
+    </move>  	
+  	<copy file="config/config.xml" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+	<copy file="config/about.htm" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+	<copy file="build.number" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+  	<loadproperties srcFile="build.number"/>
+  	<replace casesensitive="true"
+  		file="${extensionsDir}/${plugin}/about.htm"
+  		token="#build.number#"
+  		value="${build.number}"
+  		></replace>
+  	<copy file="config/plugin.dtd" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+
+  	<copy file="config/palettes.xml" todir="${user.home}/gvSIG" overwrite="no"/> 
+    <copy file="lib/gvsig-ui.jar" todir="${lib-dir}" overwrite="yes"/>
+    <copy file="lib/cms.jar" todir="${lib-dir}" overwrite="yes"/>
+    <copy file="lib/jcommon-1.0.0.jar" todir="${lib-dir}"/>
+    <copy file="lib/jfreechart-1.0.1.jar" todir="${lib-dir}"/>
+    <copy file="lib/jfreechart-1.0.1-demo.jar" todir="${lib-dir}"/>
+  	<copy todir="${extensionsDir}/${plugin}">
+  	  	<fileset dir="config" includes="text*.properties"/>
+		<fileset dir="." includes="images/"/>
+  	</copy>
+  	  	
+  </target>
+	<target name="buildNumber">	  	
+		<propertyfile 
+			file="build.number"
+			comment="Build Number for ANT. Do not edit!"
+		>
+			<entry  key="build.number" default="0" type="int" operation="+"/>
+		</propertyfile>
+		<property file="build.number"/>
+	</target>
+	<target name="distribution"
+		description="compile the sources, create the jar file for distribution (generate new build number)"
+		depends="buildNumber,init,compile,create-jar,copy-data-files,move-to-andami"
+		>
+
+	</target>
+
+	<target name="batch-build"
+			description="compile the sources, create the jar file"
+			depends="init,compile,create-jar,copy-data-files,move-to-andami">
+	</target>
+
+	<target name="compile" description="compile the source" >
+		<!-- Compile the Java code from ${src} to ${build} -->
+		<mkdir dir="${build}" />
+		<javac  srcdir="${src}"
+			destdir="${build}"
+			source="1.4"
+			target="1.4"
+			debug="${debug}"
+			debuglevel="${debuglevel}"
+			classpath="${compile-classpath}"/>
+	</target>
+	
+	<target name="create-jar"
+			description="Creates the plugin jar">
+		<mkdir dir="${dist}"/>
+	    <jar jarfile="${dist}/${jarName}" basedir="${build}" 
+	    	includes="com/iver/cit/gvsig/**,org/gvsig/rasterTools/**"/>
+	</target>
+
+	<target name="copy-data-files">
+	    <copy file="config/config.xml" todir="${dist}" overwrite="yes"/>
+		<copy file="config/about.htm" todir="${dist}" overwrite="yes"/>
+		<loadproperties srcFile="build.number"/>
+		<echo>${build.number}</echo>
+	  	<replace casesensitive="true"
+	  		file="${dist}/about.htm"
+	  		token="#build.number#"
+	  		value="${build.number}"
+	  		></replace>		
+		<copy file="build.number" todir="${dist}" overwrite="yes"/>
+	  	<copy file="config/plugin.dtd" todir="${dist}" overwrite="yes"/>
+		<copy file="config/palettes.xml" todir="${user.home}/gvSIG" overwrite="no"/>		
+	    <copy file="lib/gvsig-ui.jar" todir="${lib-dir}" overwrite="yes"/>
+	    <copy file="lib/cms.jar" todir="${lib-dir}" overwrite="yes"/>
+		<copy file="lib/jcommon-1.0.0.jar" todir="${lib-dir}"/>
+	    <copy file="lib/jfreechart-1.0.1.jar" todir="${lib-dir}"/>
+	    <copy file="lib/jfreechart-1.0.1-demo.jar" todir="${lib-dir}"/>
+		<copy todir="${dist}">
+			<fileset dir="config" includes="text*.properties"/>
+			<fileset dir="." includes="images/"/>
+		</copy>
+	</target>
+	
+	<target name="move-to-andami">
+	    <move todir="${extensionsDir}/${plugin}/">
+	    	<fileset dir="${dist}" includes="**/**"/>
+    	</move>
+	</target>
+
+  <target name="clean"
+        description="clean up" >
+    <!-- Delete the ${build} and ${dist} directory trees -->
+    <delete dir="${dist}"/>
+    <delete dir="${build}"/>
+  </target>
+</project>
+

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/build.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.classpath
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.classpath	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.classpath	(revision 30230)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="/_fwAndami"/>
+	<classpathentry kind="src" path="/libFMap"/>
+	<classpathentry kind="var" path="JUNIT_HOME/junit.jar"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="/libFMap/lib/driver-manager-1.1.jar" sourcepath="/libDriverManager"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/beans.jar" sourcepath="/libUI/src"/>
+	<classpathentry kind="lib" path="lib/gvsig-ui.jar" sourcepath="/libUIComponents/src"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/log4j-1.2.8.jar"/>
+	<classpathentry kind="lib" path="lib/cms.jar" sourcepath="/libCq CMS for java/src"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/appgvSIG"/>
+	<classpathentry kind="lib" path="/libFMap/lib/gdbms-0.8-SNAPSHOT.jar" sourcepath="/libGDBMS"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/iver-utiles.jar" sourcepath="/Utiles/src"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extWCS"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extWMS"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.classpath
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.project
===================================================================
--- tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.project	(revision 0)
+++ tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.project	(revision 30230)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>extgvSIGPiloto-Raster</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>de.loskutov.FileSync.FSBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster/.project
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision


Property changes on: tags/v1_9_RC1/prototypes/raster/extensions/extgvSIGPiloto-Raster
___________________________________________________________________
Added: svn:ignore
   + bin
dist
gvSIG*.zip
build-doc


Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/export-mobile-about.html
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/export-mobile-about.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/export-mobile-about.html	(revision 30230)
@@ -0,0 +1,27 @@
+<html>
+	<head>
+	<style type="text/css">
+	BODY { background-image: url(logo.png); background-repeat: no-repeat; background-position: 100% 0% }
+	</style>
+	</head>
+	<body>	
+		<h2>Exportador a gvSIG Mobile para gvSIG</h2>	
+		<p>Director del proyecto:</p>
+		<ul>
+			<li>Miguel Montesinos Lajara</li>
+		</ul>
+		<p>Equipo de desarrollo:</p>
+		<ul>
+			<li>Anabel Moreno,</li>
+			<li>Javier Carrasco,</li>
+			<li>Jorge Gaspar Sanz,</li>
+			<li>Juan Lucas Dom&iacute;nguez</li>
+		</ul>
+
+		<p>Build Number de la extensi&oacute;n: 5</p>
+
+		<center>
+			<p><b><a href="http://www.prodevelop.es" title="Prodevelop">http://www.prodevelop.es</a></b></p>
+		</center>
+	</body>
+</html>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/export-mobile-about.html
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/html
Added: svn:keywords
   + Id URL

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/about/logo.png
___________________________________________________________________
Added: svn:mime-type
   + image/png

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_it.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_it.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_it.properties	(revision 30230)
@@ -0,0 +1,44 @@
+exportMobile=Esportazione gvSIG mobile...
+exporMob=Esportare  gvSIG mobile
+Vista=Vista
+direxport=Cartella destinazione
+nomproy=Nome Progetto
+acept=Esportare
+ok=Accettare
+cancel=Annullare
+open=Aprire
+close=Chiudere
+export_done=Esportazione realizzata nella cartella:
+save=Salvare
+exe=Exe
+type=Tipo
+name=Nome
+cut=Clip
+select=Selezione 
+allyr=Intero layer
+layers=Layer
+name=Nome
+type=Tipo
+atrbt=Attributi
+alatrib=ATTR
+combo=Azioni
+atriblayer=Attibuti del layer
+selall=Tutti
+dessel=Nessuno
+invertSet=Inverso 
+actExtent=Zona da esportare
+nAtrib=Nome
+tAtrib=Tipo
+aAtrib=Alias
+tLayer=Tipo
+nLayer=Nome
+lyrview=Nella vista
+batLayer=Attributi
+viewA=Vista attuale
+exent=Zoom
+comLayer=Esportare
+synchro=Sincronizzare
+exportando=Esportando
+config=Config WMS
+PluginServices.Procesando=Esportando layer
+initial_synchro=E' la sincronizzazione iniziale
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_it.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Id URL

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.xml	(revision 30230)
@@ -0,0 +1,91 @@
+<project name="Generate Export to gVSIG Mobile extension"
+	default="generate-without-source" basedir=".">
+	
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="plugin" value="es.prodevelop.gvsig.exportMobile"/>
+  <property name="extension-dir" location="../_fwAndami/gvSIG/extensiones"/>
+  <property name="install-tree-dir" location="./install/pub/bin/gvSIG/extensiones"/>
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+    <mkdir dir="${dist}"/>
+  	<!-- Creamos un fichero con el timeStamp para que lo lea el FPanelAbout -->
+  	<buildnumber/> 
+  	
+  </target>
+
+  <target name="generate-without-source" description="generate the distribution without the source file" >
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+
+    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
+    <jar jarfile="${dist}/${plugin}.jar" basedir="${build}"/>
+    <copy file="config/config.xml" todir="${dist}"/>
+  	
+    <copy todir="${dist}">
+    	<fileset dir="." includes="text*.properties"/>
+    	<fileset dir="." includes="*.number"/>
+    </copy>
+  	
+    <copy todir="${dist}/images">
+    	<fileset dir="images/" includes="*"/>
+    </copy>
+  	
+    <copy todir="${dist}/about">
+    	<fileset dir="about/" includes="*"/>
+    </copy>
+  	
+    <move todir="${extension-dir}/${plugin}/">
+    	<fileset dir="${dist}" includes="**/**"/>
+    </move>
+  </target>
+	
+	  <target name="generate-install-tree-export-only" description="generate the install tree" >
+	  	
+	    <!-- Create the distribution directory -->
+	    <mkdir dir="${dist}"/>
+	  	<mkdir dir="${install-tree-dir}/${plugin}"/>
+
+	    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
+	    <jar jarfile="${dist}/${plugin}.jar" basedir="${build}"/>
+	    <copy file="config/config.xml" todir="${dist}"/>
+	    <copy todir="${dist}">
+	    	<fileset dir="." includes="text*.properties"/>
+	    	<fileset dir="." includes="*.number"/>
+	    </copy>
+	    <copy todir="${dist}/images">
+	    	<fileset dir="images/" includes="*"/>
+	    </copy>
+	    <copy todir="${dist}/about">
+	    	<fileset dir="about/" includes="*"/>
+	    </copy>
+	    <move todir="${install-tree-dir}/${plugin}/">
+	    	<fileset dir="${dist}" includes="**/**"/>
+	    </move>
+	  </target>
+	
+	<!--
+	
+	<target name="clean-install-tree-export-synchro">
+		<delete>
+			<fileset dir="./install/pub/">
+			    <include name="*.zip"/>
+			</fileset>
+			<fileset dir="./install/export_installer/">
+			    <include name="*.jar"/>
+			</fileset>
+		</delete>
+		<delete dir="./install/bin" />
+		<mkdir dir="./install/bin" />
+		<mkdir dir="./install/bin/gvSIG" />
+		<mkdir dir="./install/bin/gvSIG/extensiones" />
+	</target>
+	-->
+	
+</project>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text.properties	(revision 30230)
@@ -0,0 +1,44 @@
+exportMobile=Exportar gvSIG mobile...
+exporMob=Exportar gvSIG mobile
+Vista=Vista
+direxport=Carpeta destino
+nomproy=Nombre Proyecto
+acept=Ejecutar
+ok=Aceptar
+cancel=Cancelar
+open=Abrir
+close=Cerrar
+export_done=Se ha realizado la exportación a la carpeta:
+save=Guardar
+exe=Exe
+type=Tipo
+name=Nombre
+cut=Recorte
+select=Seleccion 
+allyr=Toda la capa
+layers=Capas
+name=Nombre
+type=Tipo
+atrbt=Atributos
+alatrib=ATRB
+combo=Acciones
+atriblayer= Atributos de la Capa
+selall=Todos
+dessel=Ninguno
+invertSet=Invertir 
+actExtent=Zona a Exportar
+nAtrib=Nombre
+tAtrib=Tipo
+aAtrib=Alias
+tLayer=Tipo
+nLayer=Nombre
+lyrview=En la vista
+batLayer=Atributos
+viewA=Vista Actual
+exent=Encuadre
+comLayer=Exportar
+synchro=Sincronizar
+exportando=Exportando
+config=Config WMS
+PluginServices.Procesando=Exportando Capa
+initial_synchro=¿Es la sincronización inicial
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.classpath
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.classpath	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.classpath	(revision 30230)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry path="src" kind="src"/>
+	<classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"/>
+	<classpathentry path="/_fwAndami" combineaccessrules="false" kind="src"/>
+	<classpathentry path="/appgvSIG" combineaccessrules="false" kind="src"/>
+	<classpathentry path="/extWMS" combineaccessrules="false" kind="src"/>
+	<classpathentry path="/libFMap" combineaccessrules="false" kind="src"/>
+	<classpathentry path="/_fwAndami/lib/castor-0.9.5.3-xml.jar" kind="lib"/>
+	<classpathentry sourcepath="/libIverUtiles/src" path="/_fwAndami/lib/iver-utiles.jar" kind="lib"/>
+	<classpathentry path="/_fwAndami/lib/kxml2.jar" kind="lib"/>
+	<classpathentry path="/_fwAndami/lib/log4j-1.2.8.jar" kind="lib"/>
+	<classpathentry sourcepath="/libDriverManager" path="/libFMap/lib/driver-manager-1.1.jar" kind="lib"/>
+	<classpathentry sourcepath="/libGDBMS" path="/libFMap/lib/gdbms-0.8-SNAPSHOT.jar" kind="lib"/>
+	<classpathentry path="/libFMap/lib/kxml2.jar" kind="lib"/>
+	<classpathentry path="/libFMap/lib/log4j-1.2.8.jar" kind="lib"/>
+	<classpathentry sourcepath="/libCq CMS for java" path="/libFMap/lib/cms.jar" kind="lib"/>
+	<classpathentry path="/extGeoProcessing" combineaccessrules="false" kind="src"/>
+	<classpathentry sourcepath="D:/eclipse_3_1/workspace_pruebas/jts/src" path="/libFMap/lib/jts-1.7.jar" kind="lib"/>
+	<classpathentry path="bin" kind="output"/>
+</classpath>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_en.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_en.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_en.properties	(revision 30230)
@@ -0,0 +1,45 @@
+Vista=View
+exportMobile=Export to gvSIG mobile...
+exporMob=Export to gvSIG mobile
+direxport=Export to
+nomproy=Proyect name
+acept=Execute
+ok=OK
+cancel=Cancel
+open=Open
+close=Close
+export_done=Export done to folder:
+save=Save
+exe=Exe
+type=Type
+name=Name
+cut=Cut 
+select=Select 
+allyr=All 
+layers=Layers
+exp=Export
+name=Nombre
+type=Type
+atrbt=Atribute
+alatrib=ATRB
+combo=Actions
+atriblayer= Layer Attributes
+selall=Select All
+dessel=Select None
+invertSet=Invert 
+actExtent=Import Zone
+nAtrib=Name
+tAtrib=Type
+aAtrib=Alias
+tLayer=Type
+nLayer=Name
+batLayer=Atributes
+comLayer=Export
+viewA=View
+exent=Extent
+lyrview=In View
+synchro=Synchro
+exportando=Export..
+config=Config WMS
+PluginServices.Procesando=Exporting Layer
+initial_synchro=Is this the initial synchronization
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.project
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.project	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/.project	(revision 30230)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>extExportMobile</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/config/config.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/config/config.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/config/config.xml	(revision 30230)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="com.iver.cit.gvsig.geoprocess" />
+
+	<libraries library-dir="."/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="es.prodevelop.gvsig.exportMobile.ClipExtension"
+			description="Exports a gvSIG Mobile project"
+			active="true"
+			priority="50">
+			
+			<menu text="Vista/exportMobile"/>
+			
+			<tool-bar name="exportMobile" position="7">
+				<selectable-tool icon="images/gvSIGmobile.png" />
+			</tool-bar>
+		</extension>		
+	</extensions>
+</plugin-config>
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/icoWMS.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/icoWMS.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/Thumbs.db
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/Thumbs.db
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/gvSIGmobile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/gvSIGmobile.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/mobile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/mobile.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/tik.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/tik.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/lyrR.PNG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/lyrR.PNG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/icolayerV.PNG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/icolayerV.PNG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/remove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/images/remove.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.number
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.number	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build.number	(revision 30230)
@@ -0,0 +1,3 @@
+#Build Number for ANT. Do not edit!
+#Wed Feb 20 16:17:30 CET 2008
+build.number=5
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/pub/gvSIGMobile_Export_Extension-BN${build.number}.zip
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/pub/gvSIGMobile_Export_Extension-BN${build.number}.zip
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text_en.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text_en.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text_en.properties	(revision 30230)
@@ -0,0 +1,43 @@
+Vista=View
+exportMobile=Export to gvSIG mobile...
+exporMob=Export to gvSIG mobile
+direxport=Export to
+nomproy=Proyect name
+acept=Execute
+ok=OK
+cancel=Cancel
+open=Open
+save=Save
+exe=Exe
+type=Type
+name=Name
+cut=Cut 
+select=Select 
+allyr=All 
+layers=Layers
+exp=Export
+name=Nombre
+type=Type
+atrbt=Atribute
+alatrib=ATRB
+combo=Actions
+atriblayer= Layer`s Atributes
+selall=Select All
+dessel=Select None
+invertSet=Ivert 
+actExtent=Import Zone
+nAtrib=Name
+tAtrib=Type
+aAtrib=Alias
+tLayer=Type
+nLayer=Name
+batLayer=Atributes
+comLayer=to Export
+viewA=View
+exent=Exent
+lyrview=In View
+synchro=Synchro
+exportando=Export..
+config=Config WMS
+PluginServices.Procesando=Exporting Layer
+initial_synchro=Is this the initial synchronisation
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/config.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/config.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/config.xml	(revision 30230)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="com.iver.cit.gvsig.geoprocess" />
+	<depends plugin-name="org.synchro.mobile.openmis" />
+	<libraries library-dir="."/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="es.prodevelop.gvsig.exportMobile.ClipExtension"
+			description="Shows info with a customized form"
+			active="true"
+			priority="50">
+			
+			<menu text="Vista/exportMobile"/>
+			
+			<tool-bar name="exportMobile" position="7">
+				<selectable-tool icon="images/gvSIGmobile.png" />
+			</tool-bar>
+		</extension>		
+	</extensions>
+</plugin-config>
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/icolayerV.PNG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/icolayerV.PNG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/remove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/remove.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/icoWMS.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/icoWMS.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/Thumbs.db
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/Thumbs.db
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/gvSIGmobile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/gvSIGmobile.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/mobile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/mobile.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/tik.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/tik.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/lyrR.PNG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/images/lyrR.PNG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/es.prodevelop.gvsig.exportMobile.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/es.prodevelop.gvsig.exportMobile.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/bin/gvSIG/extensiones/es.prodevelop.gvsig.exportMobile/text.properties	(revision 30230)
@@ -0,0 +1,42 @@
+exportMobile=Exportar gvSIG mobile...
+exporMob=Exportar gvSIG mobile
+Vista=Vista
+direxport=Carpeta destino
+nomproy=Nombre Proyecto
+acept=Ejecutar
+ok=Aceptar
+cancel=Cancelar
+open=Abrir
+save=Guardar
+exe=Exe
+type=Tipo
+name=Nombre
+cut=Recorte
+select=Seleccion 
+allyr=Toda la capa
+layers=Capas
+name=Nombre
+type=Tipo
+atrbt=Atributos
+alatrib=ATRB
+combo=Acciones
+atriblayer= Atributos de la Capa
+selall=Todos
+dessel=Ninguno
+invertSet=Invertir 
+actExtent=Zona a Exportar
+nAtrib=Nombre
+tAtrib=Tipo
+aAtrib=Alias
+tLayer=Tipo
+nLayer=Nombre
+lyrview=In View
+batLayer=Atributos
+viewA=Vista Actual
+exent=Encuadre
+comLayer=Exportar
+synchro=Sincronizar
+exportando=Exportando
+config=Config WMS
+PluginServices.Procesando=Exportando Capa
+initial_synchro=¿Es la sincronización inicial
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_eng
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_eng	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_eng	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputSpec.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputSpec.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputSpec.xml	(revision 30230)
@@ -0,0 +1,23 @@
+<userInput>
+	<panel order="0">
+		<field 	type="search"
+				variable="INSTALL_PATH"
+				size="45">
+  			<description align="left" />
+  			<spec 	txt="Path to gvSIG:"
+		  			id="text.label"
+  					checkfilename="bin/andami.jar"
+        			type="directory"
+        			result="directory">
+  			<choice value="/usr/local/gvSIG_0.6" os="unix" />
+  			<choice value="/usr/local/gvSIG_0.6.1" os="unix" />
+  			<choice value="/opt/gvSIG_0.6.1" os="unix" />
+  			<choice value="/opt/gvSIG_0.6" os="unix" />
+  			<choice value="${env[HOME]}/gvSIG_0.6" os="unix" />
+  			<choice value="C:\Archivos de Programa\gvSIG_0.6" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_0.6" os="windows" />
+  			</spec>
+		</field>
+	</panel>
+</userInput>
+
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/LEEME.html
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/LEEME.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/LEEME.html	(revision 30230)
@@ -0,0 +1,66 @@
+<html>
+<head>
+<style type="text/css">
+html, body, h1, h2, h3, h4, div, p, ul, li, input {
+   font-family: Arial, Helvetica, sans-serif;
+}
+
+h1 {
+   font-size: large;
+}
+
+h2 {
+   font-size: large;
+}
+
+h3 {
+   font-size: medium;
+}
+</style>
+</head>
+<body>
+<h1>gvSIG, el SIG en software libre de la Generalitat Valenciana
+(http://www.gvsig.gva.es).</h1>
+
+<h2>Autores:</h2>
+<ul>
+<li>Generalitat Valenciana
+ (Conselleria d'Infraestructures i Transport).</li>
+<li>Iver Tecnolog&iacute;as de la Informaci&oacute;n S.A.</li>
+</ul>
+
+<p>Software con licencia GNU/GPL
+(http://www.fsf.org/licensing/licenses/gpl.html)</p>
+
+<p>Contacto:
+	gvsig@gva.es<p>
+
+<h2>Requisitos de la aplicaci&oacute;n:</h2>
+<h3>Sistema</h3>
+<ul>
+<li>M&iacute;nimos: Pentium III / 256 MB RAM.</li>
+<li>Recomendables: Pentium IV / 512 MB RAM.</li>
+<li>Sistemas operativos: plataformas Windows y Linux.
+ Probado en Win98/XP, Linux Suse 8.2/9.0/9.2 y Linux Debian (Lliurex).</li>
+</ul>
+
+<h3>Software instalado</h3> (disponible en http://www.gvsig.gva.es o en http://java.sun.com)
+<ul>
+<li>M&aacute;quina Virtual Java 1.4.2 (06 o superior).</li>
+<li>JAI (Java Advanced Imaging).</li>
+<li>JAI Image I/O.</li>
+</ul>
+
+<p style="text-align:justify">Nota: Las librer&iacute;as JAI y JAI Image I/O deben estar instaladas sobre la M&aacute;quina Virtual Java que gvSIG utilice en su ejecuci&oacute;n. Si se instala una nueva JVM en el sistema y se usa para ejecutar gvSIG ser&aacute; indispensable instalar las librer&iacute;as sobre &eacute;sta (gvSIG se ejecuta con la JVM que tenga por defecto el sistema operativo; para saber cu&aacute;l es, ejecutar <span style="monospace">"java&nbsp;-version"</span> en un interfaz de comandos o consola).</p>
+
+<h2>M&aacute;s informaci&oacute;n y soporte en:</h2>
+<h3> Web oficial del proyecto:</h3>
+	http://www.gvsig.gva.es
+
+<h3>Listas de distribuci&oacute;n:</h3>
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_usuarios</span> (soporte para usuarios).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores</span> (soporte para desarrolladores).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional</span> (soporte para desarrolladores o usuarios de habla no hispana).
+
+</body>
+</html>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_deu
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_deu	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_deu	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_ita
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_ita	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_ita	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_por
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_por	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_por	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/gpl.txt
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/gpl.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/gpl.txt	(revision 30230)
@@ -0,0 +1,125 @@
+	GNU GENERAL PUBLIC LICENSE
+	Version 2, June 1991
+
+	 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+		Preamble
+
+	The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.)  You can apply it to your programs, too.
+
+	When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+	To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+	For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their
+rights.
+
+	We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+	Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+	Finally, any free program is threatened constantly by software	patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+	The precise terms and conditions for copying, distribution and modification follow.
+
+				GNU GENERAL PUBLIC LICENSE
+	TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+	0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term "modification".)  Each licensee is addressed as "you".
+
+	Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1.	You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2.	You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+c)	If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3.	You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+c)	Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4.	You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5.	You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6.	Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to this License.
+
+7.	If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8.	If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License.
+
+9.	The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10.	If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11.	BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12.	IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author>
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary.  Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Library General Public License instead of this License.
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cze
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cze	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cze	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_val
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_val	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_val	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_spa
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_spa	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_spa	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.JPG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/papelera.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/papelera.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Logo_gvsig_gva.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Logo_gvsig_gva.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall1.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Logo-gvSIG.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Logo-gvSIG.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Thumbs.db
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/Thumbs.db
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.GIF
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/help.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/uninstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/images/ico-gvSIG.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cat
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cat	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_cat	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_fra
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_fra	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/resources/userInputLang.xml_fra	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/build.xml	(revision 30230)
@@ -0,0 +1,42 @@
+<project name="instalador-extJDBC" default="doit" basedir=".">
+	
+	<property name="output_dir" location="./export_installer"/>
+	<property name="zip_output_dir" location="./pub"/>
+	
+	<property name="dir_inst" location="C:\Archivos de programa"/>
+	<property name="base_dir" location="./"/>		
+	<property name="dir_libs" location="C:\Archivos de programa\IzPack\lib"/>
+	<property name="vers" location="1.1"/>
+	<property name="izpack_dir" location="C:\Archivos de programa\IzPack"/>
+	<property name="GVSIG_VERSION" value="1.1"/>
+	
+	<!--<buildnumber file="./../ospatial.number"/>-->
+	<property name="JARNAME" value="gvSIGMobile_Export_Extension"/>
+	<property name="zip-bin" value="gvSIGMobile_Export_Extension"/>
+
+	<!--
+	<property name="dir_inst" location="/usr/local"/>
+	<property name="base_dir" location="./"/>		
+	
+	<property name="izpack_dir" location="../../IzPack"/>
+	<property name="dir_libs" location="${izpack_dir}/lib"/>
+	<property name="vers" value="0.6"/>
+	<property name="JARNAME" value="arcims-0.6"/>
+	<property name="GVSIG_VERSION" value="0.6"/>
+	-->
+	
+	<taskdef name="izpack" classpath="${dir_libs}/compiler.jar" classname="com.izforge.izpack.ant.IzPackTask"/>
+	
+	<target name="doit">
+		<izpack input="${base_dir}/install.xml" 
+				output="${output_dir}/${JARNAME}" 
+				installerType="standard" 
+				basedir="${base_dir}" 
+				izPackDir="${izpack_dir}/"/>
+		
+		<zip destfile="${zip_output_dir}/${zip-bin}.zip"
+			basedir="${output_dir}" includes="**/**"/>
+	</target>
+	
+	
+</project>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/gvSIGMobile_Export_Extension.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/gvSIGMobile_Export_Extension.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.sh
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.sh	(revision 30230)
@@ -0,0 +1,2 @@
+#!/bin/sh
+java -jar oracle_spatial_driver.jar
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.bat
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.bat	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/export_installer/install.bat	(revision 30230)
@@ -0,0 +1 @@
+java -jar gvSIGMobile_Export_Extension.jar
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/install.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/install.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/install/install.xml	(revision 30230)
@@ -0,0 +1,85 @@
+<installation version="1.0">
+	<info>
+		<appname>gvSIG_1.1</appname>
+		<appversion>1.1</appversion>
+		<authors>
+			<author name="Generalitat Valenciana. Conselleria d'Infraestructures i Transport" email="" />
+			<author name="Prodevelop S.L." email="gis@prodevelop.es" />
+		</authors>
+		<url>http://www.prodevelop.es</url>
+		<javaversion>1.5</javaversion>
+		
+		<uninstaller name="gvSIGMobile_ExportExtension_uninstaller.jar" write="yes" />		
+	</info>
+
+	<guiprefs height="600" resizable="yes" width="800">
+		<laf name="liquid">
+			<os family="unix" />
+		</laf>
+		<laf name="liquid">
+			<os family="windows" />
+		</laf>
+	</guiprefs>
+
+	<locale>
+		<langpack iso3="spa"/>
+		<langpack iso3="val"/>
+		<langpack iso3="eng"/>
+		<langpack iso3="cat"/>
+		<langpack iso3="chn"/>
+		<langpack iso3="cze"/>
+		<langpack iso3="dan"/>
+		<langpack iso3="deu"/>
+		<langpack iso3="fin"/>
+		<langpack iso3="fra"/>
+		<langpack iso3="glg"/>
+		<langpack iso3="hun"/>
+		<langpack iso3="ita"/>
+		<langpack iso3="jpn"/>
+		<langpack iso3="mys"/>
+		<langpack iso3="ned"/>
+		<langpack iso3="nor"/>
+		<langpack iso3="pol"/>
+		<langpack iso3="por"/>
+		<langpack iso3="rom"/>
+		<langpack iso3="rus"/>
+		<langpack iso3="scg"/>
+		<langpack iso3="svk"/>
+		<langpack iso3="swe"/>
+		<langpack iso3="ukr"/>
+	</locale>
+
+	<resources>
+		<res src="resources/gpl.txt" id="LicencePanel.licence"/>
+		<res src="resources/LEEME.html" id="HTMLInfoPanel.info"/>
+		<res src="resources/images/Logo_gvsig_gva.jpg" id="Installer.image"/>
+                <res src="resources/userInputSpec.xml" id="userInputSpec.xml"/>
+                <parsable os="linux" targetfile="resources/userInputSpec.xml"/>
+                <res src="resources/userInputLang.xml_val" id="userInputLang.xml_val" />
+                <res src="resources/userInputLang.xml_spa" id="userInputLang.xml_spa" />
+	</resources>
+
+	<panels>
+		<panel classname="HTMLInfoPanel"/>
+		<panel classname="LicencePanel"/>
+		<panel classname="PacksPanel"/>
+		<panel classname="UserInputPanel"/>
+		<panel classname="InstallPanel"/>
+		<panel classname="SimpleFinishPanel"/>
+	</panels>
+
+	<packs>
+
+		<pack name="gvSIG Mobile Export Extension" required="yes">
+			<description>gvSIG extension to generate gvSIG Mobile projects</description>
+			<fileset targetdir="$INSTALL_PATH/bin" dir="./bin" override="true"
+			excludes="**/*.svn"
+			/>
+			<fileset targetdir="$INSTALL_PATH/lib" dir="./lib" override="true"
+			excludes="**/*.svn"
+			/>
+		</pack>
+
+	</packs>
+
+</installation>
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_fr.properties
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_fr.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/text_fr.properties	(revision 30230)
@@ -0,0 +1,45 @@
+Vista=View
+exportMobile=Exporter vers gvSIG mobile...
+exporMob=Exporter vers gvSIG mobile
+direxport=Exporter vers
+nomproy=Nom du Projet
+acept=Executer
+ok=OK
+cancel=Annuler
+open=Ouvrir
+close=Fermer
+export_done=Export réalisé vers le dossier:
+save=Sauvegarder
+exe=Exe
+type=Type
+name=Nom
+cut=Couper 
+select=Selectionner 
+allyr=Complet
+layers=Layers
+exp=Exporter
+name=Nom
+type=Type
+atrbt=Atribut
+alatrib=ATRB
+combo=Actions
+atriblayer= Layer Attributs
+selall=Select Tous
+dessel=Select Aucun
+invertSet=Inverser 
+actExtent=Importer la zone
+nAtrib=Nom
+tAtrib=Type
+aAtrib=Alias
+tLayer=Type
+nLayer=Nom
+batLayer=Atributs
+comLayer=Exporter
+viewA=Vue
+exent=Etendue
+lyrview=De la Vue
+synchro=Synchroniser
+exportando=Export en cours..
+config=Configuration WMS
+PluginServices.Procesando=Export des Layers en cours
+initial_synchro=Est-ce la première synchronisation
\ No newline at end of file
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build_javi.xml
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build_javi.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/build_javi.xml	(revision 30230)
@@ -0,0 +1,79 @@
+<project name="Generar extension en Andami" default="generate-without-source" basedir=".">
+    <description>
+        Instala el plugin de ejemplo en Andami.
+    </description>
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="plugin" value="es.prodevelop.gvsig.exportMobile"/>
+  <property name="extension-dir" location="C:/Archivos de programa/gvSIG_1.1final/bin/gvSIG/extensiones"/>
+  <property name="install-tree-dir" location="C:/Archivos de programa/gvSIG_1.1final/bin/gvSIG/extensiones"/>
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+    <mkdir dir="${dist}"/>
+  	<!-- Creamos un fichero con el timeStamp para que lo lea el FPanelAbout -->
+  	<buildnumber/> 
+  	
+  </target>
+
+  <target name="generate-without-source" description="generate the distribution without the source file" >
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+
+    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
+    <jar jarfile="${dist}/${plugin}.jar" basedir="${build}"/>
+    <copy file="config/config.xml" todir="${dist}"/>
+    <copy todir="${dist}">
+    	<fileset dir="." includes="text*.properties"/>
+    </copy>
+    <copy todir="${dist}/images">
+    	<fileset dir="images/" includes="*"/>
+    </copy>
+    <move todir="${extension-dir}/${plugin}/">
+    	<fileset dir="${dist}" includes="**/**"/>
+    </move>
+  </target>
+	
+	  <target name="generate-install-tree-export-only" description="generate the install tree" >
+	    <!-- Create the distribution directory -->
+	    <mkdir dir="${dist}"/>
+
+	    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
+	    <jar jarfile="${dist}/${plugin}.jar" basedir="${build}"/>
+	    <copy file="config/config.xml" todir="${dist}"/>
+	    <copy todir="${dist}">
+	    	<fileset dir="." includes="text*.properties"/>
+	    </copy>
+	    <copy todir="${dist}/images">
+	    	<fileset dir="images/" includes="*"/>
+	    </copy>
+	    <move todir="./install/bin/gvSIG/extensiones/${plugin}/">
+	    	<fileset dir="${dist}" includes="**/**"/>
+	    </move>
+	  </target>
+	
+	<!--
+	
+	<target name="clean-install-tree-export-synchro">
+		<delete>
+			<fileset dir="./install/pub/">
+			    <include name="*.zip"/>
+			</fileset>
+			<fileset dir="./install/export_installer/">
+			    <include name="*.jar"/>
+			</fileset>
+		</delete>
+		<delete dir="./install/bin" />
+		<mkdir dir="./install/bin" />
+		<mkdir dir="./install/bin/gvSIG" />
+		<mkdir dir="./install/bin/gvSIG/extensiones" />
+	</target>
+	-->
+	
+</project>
+
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/files/NewDir.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/files/NewDir.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/files/NewDir.java	(revision 30230)
@@ -0,0 +1,190 @@
+package es.prodevelop.gvsig.exportMobile.files;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ * Manages the directory when a gvsig mobile project 
+ * with his data will be stored
+ * 
+ * @author Anabel Moreno
+ *
+ */
+public class NewDir {
+
+	private static Logger logger = Logger.getLogger(NewDir.class.getName());
+
+	private String namePath;
+
+	private File newFileProy;
+
+	private File[] filesDir;
+
+	private int numFiles;
+	
+	public static final String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"/tmp-andami";
+
+	/**
+	 * Create new output file
+	 * 
+	 * @param dirOutPut
+	 */
+	public NewDir(String dirOutPut) {
+
+		namePath = (dirOutPut + File.separator);
+		newFileProy = new File(namePath);
+
+	}
+
+	/** 
+	 * @return true if the directory is empty
+	 */
+	public boolean isEmpty() {
+
+		filesDir = newFileProy.listFiles();
+		numFiles = filesDir.length;
+
+		if (contFiles(filesDir) == 0)
+			return true;
+		else
+			return false;
+
+	}
+
+	/**
+	 * Count the name of files in a directory
+	 * 
+	 * @param arrFiles
+	 * @return the number of files in a directory
+	 */
+	private int contFiles(File[] arrFiles) {
+
+		int cont = 0;
+		for (int i = 0; i < arrFiles.length; i++) {
+
+			if (arrFiles[i].exists()) {
+				cont++;
+			}
+		}
+		return cont;
+	}
+
+	/**
+	 * Delete files
+	 */
+	public void deleteFiles() {
+
+		for (int i = 0; i < numFiles; i++) {
+			filesDir[i].delete();
+
+		}
+
+	}
+
+	/**
+	 * if file exists and is directory, while this file is full, the files that
+	 * are into the file will be deleted
+	 * 
+	 * @return output directory
+	 */
+	public File ifExistDir() {
+
+		File outputPath = null;
+
+		if (newFileProy.exists()) {
+
+			if (newFileProy.isDirectory()) {
+
+				// to delete, the directory has to be empty
+
+				while (isEmpty() == false) {
+
+					deleteFiles();
+				}
+
+				File deletedFile = newFileProy;
+				boolean delete = deletedFile.delete();
+				// if (delete) System.out.println("delete file");
+				// else System.out.println("not delete");
+
+			}
+		}
+
+		/** new directory */
+
+		boolean mk = newFileProy.mkdir();
+
+		if (mk == true) {
+
+			/* create output File for result layer */
+			outputPath = new File(newFileProy.getAbsolutePath());
+
+		}
+
+		return outputPath;
+	}
+	
+	public static void copyFile(File in, File out) {
+
+		FileInputStream fis = null;
+		FileOutputStream fos = null;
+		try {
+		    fis  = new FileInputStream(in);
+		    fos = new FileOutputStream(out);
+	        byte[] buf = new byte[1024];
+	        int i = 0;
+	        while ((i = fis.read(buf)) != -1) {
+	            fos.write(buf, 0, i);
+	        }
+	        if (fis != null) fis.close();
+	        if (fos != null) fos.close();
+	    } catch (Exception e) {
+	        logger.error("Unable to copy file: " + e.getMessage());
+	    }
+	}
+	
+	public static void copyShpDbfShxTempToFinal(File source, File dest) {
+		
+		if (dest == null) {
+			logger.error("Unable to copy temp to file: finalFile is NULL !");
+		}
+		
+		if (source == null) {
+			logger.error("Unable to copy temp to file: tempFile is NULL !");
+		}
+		
+		int temp_last_shp = source.getAbsolutePath().toLowerCase().lastIndexOf(".shp");
+		String temp_base = source.getAbsolutePath().substring(0, temp_last_shp);
+		int final_last_shp = dest.getAbsolutePath().toLowerCase().lastIndexOf(".shp");
+		String final_base = dest.getAbsolutePath().substring(0, final_last_shp);
+		
+		NewDir.copyFile(source, dest);
+		
+		File f_in = new File(temp_base + ".dbf"); 
+		File f_out = new File(final_base + ".dbf");
+		NewDir.copyFile(f_in, f_out);
+		
+		f_in = new File(temp_base + ".shx"); 
+		f_out = new File(final_base + ".shx");
+		NewDir.copyFile(f_in, f_out);
+	}
+
+	public static File getTempShpFile() {
+
+		File f = null;
+		String t = "" + System.currentTimeMillis();
+		try {
+			f = File.createTempFile(t, ".shp");
+			f.deleteOnExit();
+		} catch (IOException e) {
+			logger.error("Unable to create temp file: " + e.getMessage());
+		}
+		return f;
+	}
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/LayerObject.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/LayerObject.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/LayerObject.java	(revision 30230)
@@ -0,0 +1,218 @@
+package es.prodevelop.gvsig.exportMobile;
+
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+
+/**
+ * Create a layer object with its checkbox, button, combo and description change
+ * the name to the layer if the name layer is duplicate
+ * 
+ * @author Anabel Moreno
+ * 
+ */
+public class LayerObject {
+
+	private JCheckBox boxLyr;
+
+	private String nameLyr;
+
+	private JComboBox comboLyr;
+
+	private FieldDescription[] description;
+
+	private FLayer lyr;
+
+	private JButton buttonLyr;
+	
+	private JPanel parent;
+	
+	private JLabel isInto;
+	
+	// private String nameNew;
+
+	/**
+	 * @param box
+	 *            layer
+	 * @param name
+	 *            layer order
+	 * @param combo
+	 *            layer
+	 * @param layer
+	 * @param button
+	 *            layer
+	 */
+	public LayerObject(JCheckBox box, String name, JComboBox combo,
+			FLayer layerwn, JButton button,JPanel pa) {
+
+		parent=pa;
+		boxLyr = box;
+		nameLyr = name;
+		comboLyr = combo;
+		buttonLyr = button;
+					
+
+		try {
+			// lyr = layer.cloneLayer();
+			// lyr.setName(nameLyr);
+			// lyr.setProjection(layer.getProjection());
+			// jldominguez december 2007
+			lyr = layerwn;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		if(boxLyr.isSelected()==true){
+				
+			if(lyr instanceof FLyrVect){
+				comboLyr.setEnabled(true);
+				buttonLyr.setEnabled(true);
+			}
+			if(lyr instanceof FLyrRaster){
+				comboLyr.setEnabled(true);
+				buttonLyr.setEnabled(false);
+			}
+		}
+		else{
+				comboLyr.setEnabled(false);
+				buttonLyr.setEnabled(false);
+		}
+			
+		
+		
+		if (lyr instanceof FLyrRaster) {
+			buttonLyr.setEnabled(false);
+		}
+		if (lyr instanceof FLyrWMS) {
+
+			comboLyr.setEnabled(false);
+			buttonLyr.setEnabled(false);
+		}
+	}
+	
+	/**
+	 * @return parent
+	 */
+	public JPanel getParent(){
+		return parent;
+	}
+	
+	/**
+	 * Set box layer selected
+	 * 
+	 * @param st
+	 */
+	public void setBoxStatus(boolean st) {
+
+		boxLyr.setSelected(st);
+		
+	}
+
+	/**
+	 * @return layer button
+	 */
+	public JButton getButton() {
+
+		return buttonLyr;
+	}
+
+
+	/**
+	 * @return layer name
+	 */
+	public String getName() {
+
+		return nameLyr;
+	}
+	
+	/**
+	 * Change layer name
+	 * @param name
+	 */
+	public void setName(String n){
+		
+		nameLyr = n;
+	}
+
+	/**
+	 * @return layer checkbox
+	 */
+	public JCheckBox getBox() {
+
+		return boxLyr;
+	}
+
+	/**
+	 * @return layer combo
+	 */
+	public JComboBox getCombo() {
+
+		return comboLyr;
+	}
+
+	/**
+	 * set combo properties (enabled and selected index)
+	 * @param combo
+	 * @param indx
+	 */
+	public void setCombo(boolean combo,int indx){
+		
+		comboLyr.setEnabled(combo);
+		comboLyr.setSelectedIndex(indx);
+	}
+	
+	/**
+	 * Set layer field description
+	 * 
+	 * @param atribSelected
+	 */
+	public void setDescription(FieldDescription[] atribSelected) {
+
+		description = atribSelected;
+	}
+
+	/**
+	 * @return layer description
+	 */
+	public FieldDescription[] getDescription() {
+
+		return description;
+	}
+	
+	/**
+	 * set image layer, if this is into the view, and create a label with this image
+	 * @param imgInto
+	 */
+	public void setImage(JLabel imgInto){
+		
+		isInto=imgInto;
+		
+	}
+	
+	/**
+	 * @return image label
+	 */
+	public JLabel getImgLbl(){
+		
+		return isInto;
+	}
+
+	public FLayer getLyr() {
+		return lyr;
+	}
+
+	public void setLyr(FLayer lyr) {
+		this.lyr = lyr;
+	}
+
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ClipExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ClipExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ClipExtension.java	(revision 30230)
@@ -0,0 +1,77 @@
+package es.prodevelop.gvsig.exportMobile;
+
+import java.util.ArrayList;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.About;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.project.ProjectExtent;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+import es.prodevelop.gvsig.exportMobile.ui.order.FLayerWithNewName;
+import es.prodevelop.gvsig.exportMobile.ui.panels.ExportPanel;
+
+
+/**
+ * 
+ * This extension allows a user to export all the layers in a view
+ * 
+ * @author amoreno
+ *
+ */
+public class ClipExtension extends Extension {
+
+	/**
+	 * Starts the extension
+	 */
+	public void initialize() {
+		
+        // about
+        java.net.URL newurl =
+        	createResourceUrl("about/export-mobile-about.html");
+        About claseAbout = (About) PluginServices.getExtension(com.iver.cit.gvsig.About.class);
+        claseAbout.getAboutPanel().addAboutUrl("Export to gvSIG Mobile", newurl);
+	}
+
+	
+	public boolean isEnabled() {
+
+		return true;
+	}
+
+	/**
+	 * is visible when a view is the active window
+	 */
+	public boolean isVisible() {
+		com.iver.andami.ui.mdiManager.IWindow f = (com.iver.andami.ui.mdiManager.IWindow) PluginServices
+				.getMDIManager().getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		return (f instanceof View);
+	}
+
+	/**
+	 * @param actionCommand not used
+	 * It's called when the export to gvsig mobile button is pressed
+	 */
+	public void execute(String actionCommand) {
+
+		View view = (View) PluginServices.getMDIManager().getActiveWindow();
+		view.getModel().getProject().getExtents();
+		// root
+		FLayers rt = view.getMapControl().getMapContext().getLayers();
+		ArrayList lyrsNewName = FLayerWithNewName.getAll(rt);
+		ProjectExtent[] listExtent = view.getModel().getProject().getExtents();
+		ExportPanel infPanel = new ExportPanel(lyrsNewName, listExtent);
+		PluginServices.getMDIManager().addWindow(infPanel);
+	}
+	
+    private java.net.URL createResourceUrl(String path) {
+        return getClass().getClassLoader().getResource(path);
+    }
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/rectangle/DrawRectangle.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/rectangle/DrawRectangle.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/rectangle/DrawRectangle.java	(revision 30230)
@@ -0,0 +1,156 @@
+package es.prodevelop.gvsig.exportMobile.rectangle;
+
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import org.cresques.cts.IProjection;
+
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FPolygon2D;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.GeneralPathX;
+import com.iver.cit.gvsig.fmap.drivers.ConcreteMemoryDriver;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayerVectorialDB;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+/**
+ * Utility to create layers with rectangles
+ * 
+ * @author Anabel Moreno
+ * 
+ */
+public class DrawRectangle {
+
+	private Rectangle2D rect;
+
+	private FShape shp;
+
+	private View v;
+
+	private static String RECTANGLE = "Rectangle";
+
+	public DrawRectangle(View view) {
+
+		v = view;
+	}
+
+	public Rectangle2D getRectangle() {
+
+		return rect;
+	}
+
+	/**
+	 * Set the rectangle of the view
+	 */
+	public void setRectView() {
+
+		rect = v.getMapControl().getViewPort().getAdjustedExtent();
+	}
+
+	/**
+	 * Set rectangle of the extent
+	 * @param recExtent
+	 */
+	public void setRectExtent(Rectangle2D recExtent) {
+
+		rect = recExtent;
+	}
+
+	/**
+	 * Create and draw a new rectangle poligon
+	 * 
+	 * @param mapCtrl
+	 * @return layer
+	 */
+	public FLayer draw(MapControl mapCtrl) {
+
+		/* DRIVER DEFINITION (SHAPE TYPE AND FIELDS) */
+		ConcreteMemoryDriver driver = new ConcreteMemoryDriver();
+		driver.setShapeType(FShape.POLYGON);
+
+		ArrayList arrayFields = new ArrayList();
+		arrayFields.add("ID");
+		Value[] auxRow = new Value[1];
+
+		driver.getTableModel().setColumnIdentifiers(arrayFields.toArray());
+
+		/* GEOMETRY DEFINITION */
+		GeneralPathX rectangulo = new GeneralPathX();
+
+		// rect is the rectangle extent of the view
+		/* NEW RECTANGLE */
+		rectangulo.moveTo(rect.getMinX(), rect.getMinY());
+		rectangulo.lineTo(rect.getMinX(), rect.getMaxY());
+		rectangulo.lineTo(rect.getMaxX(), rect.getMaxY());
+		rectangulo.lineTo(rect.getMaxX(), rect.getMinY());
+		rectangulo.closePath();
+
+		shp = new FPolygon2D(rectangulo);
+
+		/* ATRIBUTES */
+		auxRow[0] = ValueFactory.createValue(0);
+
+		/* ADD RECORD */
+		driver.addShape(shp, auxRow);
+
+		/* CREATE AND ADD LAYER */
+		FLayer lyr;
+		String layerName = RECTANGLE;
+		lyr = LayerFactory.createLayer(layerName, driver, mapCtrl
+				.getProjection());
+
+		return lyr;
+
+	}
+	/**
+	 * Create and draw a new rectangle poligon
+	 * 
+	 * @param rect
+	 * @return layer
+	 */
+	public static FLyrVect createRectangleLayer(Rectangle2D rect, IProjection projection) {
+
+		/* DRIVER DEFINITION (SHAPE TYPE AND FIELDS) */
+		ConcreteMemoryDriver driver = new ConcreteMemoryDriver();
+		driver.setShapeType(FShape.POLYGON);
+
+		ArrayList arrayFields = new ArrayList();
+		arrayFields.add("ID");
+		Value[] auxRow = new Value[1];
+
+		driver.getTableModel().setColumnIdentifiers(arrayFields.toArray());
+
+		/* GEOMETRY DEFINITION */
+		GeneralPathX rectangulo = new GeneralPathX();
+
+		// rect is the rectangle extent of the view
+		/* NEW RECTANGLE */
+		rectangulo.moveTo(rect.getMinX(), rect.getMinY());
+		rectangulo.lineTo(rect.getMinX(), rect.getMaxY());
+		rectangulo.lineTo(rect.getMaxX(), rect.getMaxY());
+		rectangulo.lineTo(rect.getMaxX(), rect.getMinY());
+		rectangulo.closePath();
+
+		FPolygon2D shp = new FPolygon2D(rectangulo);
+
+		/* ATRIBUTES */
+		auxRow[0] = ValueFactory.createValue(0);
+
+		/* ADD RECORD */
+		driver.addShape(shp, auxRow);
+
+		/* CREATE AND ADD LAYER */
+		FLyrVect lyr;
+		String layerName = RECTANGLE;
+		lyr = (FLyrVect)LayerFactory.createLayer(layerName, driver, projection);
+
+		return lyr;
+
+	}
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/CreateImage.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/CreateImage.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/CreateImage.java	(revision 30230)
@@ -0,0 +1,52 @@
+package es.prodevelop.gvsig.exportMobile;
+
+import java.net.URL;
+
+import javax.swing.ImageIcon;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Class to access the icons used by the extension
+ * @author amoreno
+ *
+ */
+public class CreateImage {
+
+	private Logger logger = Logger.getLogger(CreateImage.class.getClass());
+	
+	public CreateImage() {
+
+	}
+
+	/**
+	 * Get path image
+	 * 
+	 * @param path
+	 * @return URL
+	 */
+	public java.net.URL createResourceUrl(String path) {
+		return getClass().getClassLoader().getResource(path);
+	}
+
+	/**
+	 * Create image icon
+	 * 
+	 * @param path
+	 *            where the image is into.
+	 * @param description
+	 *            of the image.
+	 * @return ImageIcon
+	 */
+	public ImageIcon createImageIcon(URL path, String description) {
+
+		java.net.URL imgURL = path;
+		if (imgURL != null) {
+			return new ImageIcon(imgURL, description);
+		} else {
+			logger.error("Couldn't find file: " + path);
+			return null;
+		}
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/RasterExporter.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/RasterExporter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/RasterExporter.java	(revision 30230)
@@ -0,0 +1,214 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+import org.apache.log4j.Logger;
+
+import com.hardcode.driverManager.Driver;
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+
+import es.prodevelop.gvsig.exportMobile.xml.XmlProjectTags;
+
+/**
+ * Exportation subtask
+ * Allows a raster layer to be exported
+ * 
+ * @author jcarras
+ *
+ */
+public class RasterExporter extends ExporterSubTask{
+
+	private Logger logger = Logger.getLogger(RasterExporter.class.getClass());
+	private File outputdir;
+	private static int INDX_PATH = 10;
+	private FLyrRaster inLyrRast;
+
+	/**
+	 * COnstructor with all the needed attributes
+	 * 
+	 * @param parentProcess
+	 * @param layer
+	 * @param rect this parameter is not used currently
+	 * @param outputdir
+	 * @param xml
+	 */
+	public RasterExporter(AbstractMonitorableTask parentProcess, FLayer layer,
+			Rectangle2D rect, File outputdir, XmlBuilder xml) {
+		super(parentProcess, layer, rect, xml);
+		this.outputdir=outputdir;
+		inLyrRast = (FLyrRaster)layer;
+	}
+
+	
+	/**
+	 * Get old path file, and copy this file to a new file
+	 */
+	public void export() {
+		setNote(PluginServices.getText(this, "exporting_")  + " " +  inLayer.getName());
+		try {
+			/*String pathLayer = inLayer.getXMLEntity().getXmlTag()
+			.getProperty(INDX_PATH).getValue();
+			File oldFile = new File(pathLayer);*/
+			Driver driver =  inLyrRast.getSource().getDriver();
+			if (driver instanceof CmsRasterDriver){
+				initXML();
+				CmsRasterDriver drR =(CmsRasterDriver)driver;
+				File oldFile = drR.getFile();
+				if (oldFile.exists()) {
+					File destFile = new File(outputdir + File.separator + oldFile.getName());
+					destFile = getFreeFile(destFile);
+					File wldFile = findWldFile(oldFile);
+					if (wldFile == null) {
+						logger.warn("Did not find world file for: " + oldFile.getName());
+					} else {
+						String newWldPath = destFile.getAbsolutePath();
+						newWldPath = newWldPath.substring(0, newWldPath.lastIndexOf("."));
+						File newWldFile = new File(newWldPath + ".wld");
+						copyFileToFile(wldFile, newWldFile, 5);
+					}
+					copyFileToFile(oldFile, destFile, 95);
+					writeXML(inLayer.getName(), destFile.getName());
+				}
+			}
+			
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} finally {
+			closeXML();
+			reportToEnd();
+		}
+	}
+
+
+	/**
+	 * Searches the WLD file associated with the layer
+	 * 
+	 * @param img_file
+	 * @return
+	 */
+	private File findWldFile(File img_file) {
+		
+		String img_path = img_file.getAbsolutePath();
+		String img_name = img_file.getName();
+		
+		int lastp = img_name.lastIndexOf(".");
+		String img_name_no_ext = img_name.substring(0, lastp); 
+		
+		String ext = img_path.substring(img_path.length() - 4, img_path.length());
+		File resp = null;
+		
+		if ((ext.compareToIgnoreCase(".jpg") == 0) || (ext.compareToIgnoreCase("jpeg") == 0)) {
+			resp = new File(img_file.getParent() + File.separator + img_name_no_ext + ".jgw");
+			if (resp.exists()) return resp;
+			resp = new File(img_file.getParent() + File.separator + img_name_no_ext + ".jpw");
+			if (resp.exists()) return resp;
+			resp = new File(img_file.getParent() + File.separator + img_name_no_ext + ".jpgw");
+			if (resp.exists()) return resp;
+		}
+		
+		if ((ext.compareToIgnoreCase(".tif") == 0) || (ext.compareToIgnoreCase("tiff") == 0)) {
+			resp = new File(img_file.getParent() + File.separator + img_name_no_ext + ".tfw");
+			if (resp.exists()) return resp;
+		}
+		
+		resp = new File(img_file.getParent() + File.separator + img_name_no_ext + ".wld");
+		if (resp.exists()) return resp;
+		return null;
+	}
+
+	/**
+	 * Copies the in file to the outdir directory
+	 * 
+	 * @param in
+	 * @param outdir
+	 * @param numStepsToReport the copy will report this number of steps
+	 * @throws Exception
+	 */
+	public void copyFileToDir(File in, File outdir, int numStepsToReport) throws Exception {
+
+		File f = new File(outdir.getAbsolutePath() + File.separator + in.getName());
+		
+		copyFileToFile(in, f, numStepsToReport);
+	}
+	/**
+	 * Copies the in file data to the outFile file
+	 * 
+	 * @param in
+	 * @param outFile
+	 * @param numStepsToReport the copy will report this number of steps
+	 * @throws Exception
+	 */
+	public void copyFileToFile(File in, File outFile, int numStepsToReport) throws Exception {
+
+		File f = outFile;
+		
+		long flenght = in.length();
+		int currStep = 0;
+		long bytesPerStep = flenght / numStepsToReport;
+		long bytesCopied = 0;
+		
+		FileInputStream fis = new FileInputStream(in);
+		FileOutputStream fos = new FileOutputStream(f);
+		byte[] buf = new byte[1024];
+		int i = 0;
+		while ((i = fis.read(buf)) != -1) {
+			fos.write(buf, 0, i);
+			bytesCopied+=i;
+			int newStep = (int)(bytesCopied / bytesPerStep);
+			if (newStep>currStep){
+				reportSteps(newStep-currStep);
+				currStep=newStep;
+			}
+		}
+		fis.close();
+		fos.close();
+	}
+
+
+	/**
+	 * Number of steps this subtask report
+	 */
+	public int getFinalStep() {
+		return 100;
+	}
+
+
+	/**
+	 * runs the exportation
+	 */
+	public void run() {
+		export();
+	}
+	
+	/**
+	 * Writes the layer attributes on the gvsig mobile xml project file 
+	 * 
+	 * @param name
+	 * @param path
+	 */
+	private void writeXML(String name, String path){
+		//<Type>
+		xml.writeTag(XmlProjectTags.TYPE, "RASTER");
+		//</Type>
+		
+		//<Path>
+		xml.writeTag(XmlProjectTags.PATH, path);
+		//</Path>
+		
+		//<Name>
+		xml.writeTag(XmlProjectTags.NAME, name);
+		//</Name>
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/WMSExporter.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/WMSExporter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/WMSExporter.java	(revision 30230)
@@ -0,0 +1,59 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters;
+
+import java.awt.geom.Rectangle2D;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+
+import es.prodevelop.gvsig.exportMobile.xml.XMLwms;
+
+/**
+ * Exports a gvsig wms layer to a gvsig mobile wms layer
+ * @author Anabel Moreno
+ *
+ */
+public class WMSExporter extends ExporterSubTask{
+		
+	/**
+	 * Constructor with all the required attributes
+	 * @param parentProcess
+	 * @param layer
+	 * @param rect
+	 * @param xml
+	 */
+	public WMSExporter(AbstractMonitorableTask parentProcess, FLayer layer,
+			Rectangle2D rect, XmlBuilder xml) {
+		super(parentProcess, layer, rect, xml);
+		
+	}
+
+	
+	/**
+	 * Adds to the xml the layer attributes
+	 */
+	public void export(){
+		initXML();
+		setNote(PluginServices.getText(this, "exporting_")  + " " +  inLayer.getName());
+		XMLwms xmlwms = new XMLwms();
+		xmlwms.setxml(inLayer,xml);
+		xmlwms.createXML();
+		reportToEnd();
+		closeXML();
+	}
+
+	/**
+	 * Number of steps the layer will report
+	 */
+	public int getFinalStep() {
+		return 100;
+	}
+
+	/**
+	 * Starts the exportation task
+	 */
+	public void run() {
+		export();
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExportProcess.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExportProcess.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExportProcess.java	(revision 30230)
@@ -0,0 +1,250 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters;
+
+import java.awt.geom.Rectangle2D;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import org.cresques.cts.IProjection;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+
+import es.prodevelop.gvsig.exportMobile.xml.Bounds;
+import es.prodevelop.gvsig.exportMobile.xml.XmlProjectTags;
+/**
+ * 
+ * This  process executes a series of tasks
+ * 
+ * @author jcarras
+ *
+ */
+public class ExportProcess  extends AbstractMonitorableTask{
+	private ArrayList tasks = new ArrayList();
+	private int numSteps=0;
+	private XmlBuilder xml = new XmlBuilder();
+	private Rectangle2D rect;
+	private String name;
+	private IProjection projection;
+	private String dirPath;
+	public static String PROJECTEXTENSION = ".gvm";
+	
+
+	/**
+	 * Constructor with all needed parameters 
+	 * @param rectangle
+	 * @param name
+	 * @param dirPath
+	 * @param projection
+	 */
+	public ExportProcess(Rectangle2D rectangle, String name, String dirPath, IProjection projection){
+		setRect(rectangle);
+		setName(name);
+		setProjection(projection);
+		setDirPath(dirPath);
+	}
+	
+	/**
+	 * Adds a ExporterSubTask task to the list of task to execute
+	 * The order the tasks are added is the order they will be executed
+	 * @param task
+	 */
+	public void addTask(ExporterSubTask task){
+		tasks.add(task);
+		numSteps+=task.getFinalStep();
+	}
+	
+	/**
+	 * Creates a VectorialExporterTask and adds it to the list of tasks to execute
+	 * @param lyr
+	 * @param outputFields
+	 * @param processType
+	 */
+	public void addVectorialTask(FLayer lyr, FieldDescription[] outputFields, int processType){
+		VectorialExporterTask task = new VectorialExporterTask(this,
+				lyr,
+				getRect(),
+				dirPath,
+				processType,
+				outputFields,
+				xml);
+		addTask(task);
+	}
+	
+	/**
+	 * Creates a RasterExporter task and adds it to the list of tasks to execute
+	 * @param lyr
+	 */
+	public void addRasterTask(FLayer lyr){
+		RasterExporter task = new RasterExporter(this,lyr,rect, new File(dirPath),xml);
+		addTask(task);
+	}
+	
+	/**
+	 * Creates a WMSExporter task and adds it to the list of tasks to execute
+	 * @param lyr
+	 */
+	public void addWMSTask(FLayer lyr){
+		WMSExporter task = new WMSExporter(this,lyr,getRect(),xml);
+		addTask(task);
+	}
+	
+	/**
+	 * Closes the oppened xml tags and stores the project file
+	 */
+	private void writeProjectFile(){
+		// done
+		
+		xml.closeTag();
+		//</Layers>
+				
+		xml.closeTag();
+		//</Project>
+		
+		//new file
+		File fileout = new File(dirPath+ File.separator + name + PROJECTEXTENSION);
+		createFile(fileout,xml.getXML());
+	}
+	
+	/**
+	 * Starts the xml to be ready for pushing the layers into
+	 */
+	private void initProjectFile(){
+		xml.writeHeader();
+		//<Project>
+		xml.openTag(XmlProjectTags.PROJECT);
+		Bounds bounds = Bounds.createBounds(rect);
+			
+			//<BoundingBox>
+			bounds.setXML(xml);
+			bounds.createXML();
+			//</BoundingBox>
+			
+			//<Name>
+			xml.writeTag(XmlProjectTags.NAME, name);
+			//<Name>
+			
+			//<CRS>
+			String crsProyect = getProjection().getAbrev();
+			xml.writeTag(XmlProjectTags.CRS, crsProyect);
+			//</CRS>
+			
+			//<Layers>
+			xml.openTag(XmlProjectTags.LAYERS);
+	}
+
+	/**
+	 * To be executed before running this
+	 */
+	public void preProcess(){
+		setInitialStep(0);
+		this.setFinalStep(numSteps);
+		setDeterminatedProcess(true);
+	}
+	
+	/**
+	 * Executes all the tasks in the list, creates the project file and 
+	 * reports the steps not reported yet
+	 */
+	public void run() throws Exception {
+		
+		initProjectFile();
+		for (int i=0; i<tasks.size(); i++){
+			ExporterSubTask task = (ExporterSubTask)tasks.get(i);
+			if (!isCanceled()){
+				task.run();
+			}else{
+				task.setCancelled(true);
+			}
+		}
+		setNote("Generating project file");
+		writeProjectFile();
+		JOptionPane.showMessageDialog(null,
+				PluginServices.getText(this, "export_done") + "\n" + dirPath,
+				PluginServices.getText(this, "exporMob"),
+				JOptionPane.INFORMATION_MESSAGE);
+		
+		reportToEnd();
+	}
+
+	/**
+	 * Reports steps to indicate the task list has been completed  
+	 */
+	private void reportToEnd(){
+		while (getCurrentStep()<getFinalStep())
+			reportStep();
+	}
+	
+	public Rectangle2D getRect() {
+		return rect;
+	}
+
+	public void setRect(Rectangle2D rect) {
+		this.rect = rect;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public IProjection getProjection() {
+		return projection;
+	}
+
+	public void setProjection(IProjection projection) {
+		this.projection = projection;
+	}
+
+	public String getDirPath() {
+		return dirPath;
+	}
+
+	public void setDirPath(String dirPath) {
+		this.dirPath = dirPath;
+	}
+	
+	/**
+	 * Writes the xml to the file
+	 * 
+	 * @param f
+	 * @param xml
+	 */
+	public static void createFile(File f, String xml) {
+		if (xml != null) {
+			try {
+				if (!f.exists()) {
+					f.createNewFile();
+				}
+				
+				OutputStream fout = new FileOutputStream(f);
+				OutputStreamWriter out = new OutputStreamWriter(fout,"UTF-8");
+				BufferedWriter bw = new BufferedWriter(out);
+				bw.write(xml);
+				
+				fout.flush();
+				out.flush();
+				bw.flush();
+				
+				bw.close();
+				fout.close();
+				out.close();
+			} catch (IOException e) {
+				
+			}
+		}
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/VectorialExporterTask.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/VectorialExporterTask.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/VectorialExporterTask.java	(revision 30230)
@@ -0,0 +1,612 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+import org.cresques.cts.ICoordTrans;
+
+import com.hardcode.driverManager.Driver;
+import com.hardcode.gdbms.engine.values.Value;
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.DefaultFeature;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FLabel;
+import com.iver.cit.gvsig.fmap.drivers.DriverAttributes;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
+import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
+import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver;
+import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.edition.ShpSchemaManager;
+import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.cit.gvsig.geoprocess.core.fmap.DefinitionUtils;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+import com.iver.utiles.swing.threads.IMonitorableTask;
+
+import es.prodevelop.gvsig.exportMobile.files.NewDir;
+import es.prodevelop.gvsig.exportMobile.layerexporters.clip.ClipProcess;
+import es.prodevelop.gvsig.exportMobile.rectangle.DrawRectangle;
+import es.prodevelop.gvsig.exportMobile.xml.Style;
+import es.prodevelop.gvsig.exportMobile.xml.XmlProjectTags;
+
+/**
+ * Exportation subtask to export a vectorial layer
+ * It supports selecting features by rect, clipping
+ * features by rect and exporting all features
+ * It splits the input data in polygons, lines and
+ * points to save it as shapefiles.
+ * 
+ * @author jcarras
+ *
+ */
+public class VectorialExporterTask extends ExporterSubTask {
+
+	public static final int CLIPRECT = 1;
+	public static final int SELECTRECT = 2;
+	public static final int ALL = 3;
+	
+	protected String destPath;
+	protected String XMLDefinition = "";
+	protected int processType;
+	protected FieldDescription[] fieldsDescription;
+	protected FLyrVect inLayerVec;
+	
+	public static final  String CLIPSUFFIX = "_clip";
+	public static final  String SELECTSUFFIX = "_select";
+	public static final  String ALLSUFFIX = "_copy";
+	public static final  String POINTSSUFFIX = "_points";
+	public static final  String POLYGONSSUFFIX = "_polygons";
+	public static final  String LINESSUFFIX = "_lines";
+	public static final  String NOSUFFIX = "";
+	public static final  String SHAPESUFFIX = ".shp";
+	
+	/**
+	 * Returns the suffix associated wit the input process type
+	 * @param processType
+	 * @return the corresponding suffix
+	 */
+	public String getSuffix(int processType){
+		if (processType == CLIPRECT)
+			return CLIPSUFFIX;
+		if (processType == SELECTRECT)
+			return SELECTSUFFIX;
+		if (processType == ALL)
+			return ALLSUFFIX;
+		return NOSUFFIX;
+	}
+
+	/**
+	 * Remove the defined suffixes of the input string with the objective
+	 * of not adding twice the suffixes on several exportations
+	 * 
+	 * @param name
+	 * @return the input string without the suffixes
+	 */
+	public String removeSuffixes(String name){
+		String res = name;
+		
+		String[] suf = new String[7];
+		suf[0] = CLIPSUFFIX.toLowerCase();
+		suf[1] = SELECTSUFFIX.toLowerCase();
+		suf[2] = ALLSUFFIX.toLowerCase();
+		suf[3] = POINTSSUFFIX.toLowerCase();
+		suf[4] = POLYGONSSUFFIX.toLowerCase();
+		suf[5] = LINESSUFFIX.toLowerCase();
+		suf[6] = SHAPESUFFIX.toLowerCase();
+		
+		boolean modified=true;
+		while(modified){
+			modified=false;
+			for (int i = 0; i<7; i++){
+				if (name.toLowerCase().endsWith(suf[i])){
+					name=name.substring(0,name.toLowerCase().lastIndexOf(suf[i]));
+					modified=true;
+				}
+			}
+		}
+		
+		return res;
+	}
+
+	private Logger logger = Logger.getLogger(this.getClass());
+
+/**
+ * Constructor with all the needed attributes
+ * @param parentProcess
+ * @param layer
+ * @param rect
+ * @param destPath
+ * @param processType One of those VectorialExporterTask.CLIPRECT, VectorialExporterTask.ALL or VectorialExporterTask.SELECTRECT 
+ * @param fieldsDescription Description of the fields of the resulting layers
+ * @param xml 
+ */
+	public VectorialExporterTask(AbstractMonitorableTask parentProcess,
+			FLayer layer, Rectangle2D rect, String destPath, int processType,
+			FieldDescription[] fieldsDescription, XmlBuilder xml) {
+
+		super(parentProcess, layer, rect, xml);
+		this.destPath = destPath;
+		this.processType = processType;
+		this.fieldsDescription = fieldsDescription;
+		this.inLayerVec = (FLyrVect) layer;
+
+	}
+
+	private void writeFeatures(IWriter writer, Driver reader, FBitSet bitSet, int numStepsToReport)
+			throws DriverException, DriverIOException, EditionException {
+		writer.preProcess();
+		ReadableVectorial va = inLayerVec.getSource();
+		va.start();
+		ICoordTrans ct = inLayerVec.getCoordTrans();
+		SelectableDataSource sds = this.inLayerVec.getRecordset();
+		DriverAttributes attr = va.getDriverAttributes();
+		boolean bMustClone = false;
+		if (attr != null) {
+			if (attr.isLoadedInMemory()) {
+				bMustClone = attr.isLoadedInMemory();
+			}
+		}
+		
+		long shapesPerStep = bitSet.cardinality() / numStepsToReport;
+		int stepsPerShape = 0;
+		if (shapesPerStep==0)
+			stepsPerShape = numStepsToReport / bitSet.cardinality();
+			
+		int counter = 0;
+		for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet.nextSetBit(i + 1)) {
+			try {
+				IGeometry geom = va.getShape(i);
+
+				if (inLayerVec instanceof FLyrAnnotation
+						&& geom.getGeometryType() != FShape.POINT) {
+					Point2D p = FLabel.createLabelPoint((FShape) geom
+							.getInternalShape());
+					geom = ShapeFactory.createPoint2D(p.getX(), p.getY());
+				}
+				if (ct != null) {
+					if (bMustClone)
+						geom = geom.cloneGeometry();
+					geom.reProject(ct);
+				}
+
+				
+				if (parent.isCanceled())
+					break;
+
+				if (geom != null) {
+
+					Value[] values = extractValues(sds, fieldsDescription, i);
+					IFeature feat = new DefaultFeature(geom, values, "" + i);
+					DefaultRowEdited edRow = new DefaultRowEdited(feat,
+							DefaultRowEdited.STATUS_ADDED, i);
+					edRow.setAttributes(values);
+					writer.process(edRow);
+				}
+			} catch (Exception ee) {
+				ee.printStackTrace();
+			} finally{
+				counter++;
+				if (shapesPerStep>0){
+					if (counter % shapesPerStep == 0){
+						reportStep();
+					}
+				}else {
+					reportSteps(stepsPerShape);
+				}
+			}
+		}
+
+		writer.postProcess();
+		va.stop();
+
+
+	}
+	
+	private void clipFeatures(IWriter writer, Driver reader, FBitSet bitSet, ShpSchemaManager schemaManager, ILayerDefinition outputDef, int numStepsToReport){
+		ClipProcess clip = new ClipProcess(
+				inLayerVec, 
+				fieldsDescription, bitSet);
+
+		/* build the second operand */
+		FLyrVect lyrRect = DrawRectangle.createRectangleLayer(rect, inLayer.getProjection());
+		clip.setSecondOperand(lyrRect);
+		clip.setResultLayerDefinition(outputDef);
+		clip.setResultLayerProperties(writer, schemaManager);
+		try {
+			clip.checkPreconditions();
+			IMonitorableTask task = clip.createTask();
+			task.run();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			reportSteps(numStepsToReport);
+		}
+		
+	}
+
+	/**
+	 * Makes the exportation
+	 */
+	public void  export() {
+		setNote(PluginServices.getText(this, "exporting_") + " " + inLayer.getName());
+		
+		SHPLayerDefinition definition = new SHPLayerDefinition();
+		 try {
+			definition = DefinitionUtils.
+				createLayerDefinition(inLayerVec);
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+			
+		definition.setFieldsDesc(fieldsDescription);
+		String basename = inLayer.getName();
+		if (basename.toLowerCase().endsWith(".shp"))
+			basename=basename.substring(0,basename.lastIndexOf("."));
+
+		// POINTS
+		try{
+			FBitSet bitSet;
+			if (processType==ALL)
+				bitSet = queryByRectAndType(null, FShape.POINT);
+			else
+				bitSet = queryByRectAndType(rect, FShape.POINT);
+			logger.debug("Found " + bitSet.cardinality() + " points");
+			if (bitSet.cardinality() > 0) {
+				initXML();
+				ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
+						"Shape Writer");
+				
+				File tempFile = NewDir.getTempShpFile();
+				
+				definition.setFile(tempFile);
+				definition.setName(tempFile.getName());
+				definition.setShapeType(FShape.POINT);
+				writer.setFile(tempFile);
+				writer.initialize(definition);
+				Driver driver = getOpenShpDriver(tempFile);
+				ShpSchemaManager schemaManager = new ShpSchemaManager(tempFile.getAbsolutePath());
+
+				if (processType==CLIPRECT)
+					clipFeatures(writer, driver, bitSet, schemaManager,definition,33);
+				else
+					writeFeatures(writer, driver, bitSet, 33);
+									
+				String lyrName = removeSuffixes(basename);
+				lyrName += getSuffix(processType);
+				lyrName += POINTSSUFFIX;
+				File filePoints = new File(destPath + File.separator + lyrName + SHAPESUFFIX);
+				filePoints = getFreeFile(filePoints);
+				NewDir.copyShpDbfShxTempToFinal(tempFile, filePoints);
+				writeXML(lyrName, FShape.POINT, filePoints.getName());
+			}
+		} catch (EditionException e1){
+			e1.printStackTrace();
+		} catch (IOException e2){
+			e2.printStackTrace();
+		} catch (DriverIOException e3){
+			e3.printStackTrace();
+		} catch (DriverException e4){
+			e4.printStackTrace();
+		} finally{
+			closeXML();
+			//reportStep();
+		}
+
+		// LINES
+		try{
+			FBitSet bitSet;
+			if (processType==ALL)
+				bitSet = queryByRectAndType(null, FShape.LINE);
+			else
+				bitSet = queryByRectAndType(rect, FShape.LINE);
+			logger.debug("Found " + bitSet.cardinality() + " lines");
+			if (bitSet.cardinality() > 0) {
+				initXML();
+				ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
+						"Shape Writer");
+				
+				File tempFile = NewDir.getTempShpFile();
+				
+				definition.setFile(tempFile);
+				definition.setName(tempFile.getName());
+				definition.setShapeType(FShape.LINE);
+				writer.setFile(tempFile);
+				writer.initialize(definition);
+				Driver driver = getOpenShpDriver(tempFile);
+				ShpSchemaManager schemaManager = new ShpSchemaManager(tempFile.getAbsolutePath());
+
+				if (processType==CLIPRECT)
+					clipFeatures(writer, driver, bitSet, schemaManager,definition,33);
+				else
+					writeFeatures(writer, driver, bitSet, 33);
+								
+				String lyrName = removeSuffixes(basename);
+				lyrName += getSuffix(processType);
+				lyrName += LINESSUFFIX;
+				File filePoints = new File(destPath + File.separator + lyrName + SHAPESUFFIX);
+				filePoints = getFreeFile(filePoints);
+				NewDir.copyShpDbfShxTempToFinal(tempFile, filePoints);
+
+				writeXML(lyrName, FShape.LINE, filePoints.getName());
+			}
+		} catch (EditionException e1){
+			e1.printStackTrace();
+		} catch (IOException e2){
+			e2.printStackTrace();
+		} catch (DriverIOException e3){
+			e3.printStackTrace();
+		} catch (DriverException e4){
+			e4.printStackTrace();
+		} finally{
+			closeXML();
+			//reportStep();
+		}
+
+		// POLYGONS
+		try{
+			FBitSet bitSet;
+			if (processType==ALL)
+				bitSet = queryByRectAndType(null, FShape.POLYGON);
+			else
+				bitSet = queryByRectAndType(rect, FShape.POLYGON);
+			logger.debug("Found " + bitSet.cardinality() + " polygons");
+			if (bitSet.cardinality() > 0) {
+				initXML();
+				ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
+						"Shape Writer");
+				
+				File tempFile = NewDir.getTempShpFile();
+				
+				definition.setFile(tempFile);
+				definition.setName(tempFile.getName());
+				definition.setShapeType(FShape.POLYGON);
+				
+				
+				writer.setFile(tempFile);
+				writer.initialize(definition);
+				Driver driver = getOpenShpDriver(tempFile);
+				ShpSchemaManager schemaManager = new ShpSchemaManager(tempFile.getAbsolutePath());
+
+				if (processType==CLIPRECT){
+					clipFeatures(writer, driver, bitSet, schemaManager, definition,33);
+					
+				}
+				else
+					writeFeatures(writer, driver, bitSet, 33);
+				
+				String lyrName = removeSuffixes(basename);
+				lyrName += getSuffix(processType);
+				lyrName += POLYGONSSUFFIX;
+				File filePoints = new File(destPath + File.separator + lyrName + SHAPESUFFIX);
+				filePoints = getFreeFile(filePoints);
+				NewDir.copyShpDbfShxTempToFinal(tempFile, filePoints);
+				writeXML(lyrName, FShape.POLYGON, filePoints.getName());
+			}
+		} catch (EditionException e1){
+			e1.printStackTrace();
+		} catch (IOException e2){
+			e2.printStackTrace();
+		} catch (DriverIOException e3){
+			e3.printStackTrace();
+		} catch (DriverException e4){
+			e4.printStackTrace();
+		} finally{
+			closeXML();
+			reportToEnd();
+		}
+
+		
+	}
+
+	/**
+	 * It iterates over every feature to return a bitSet with the features of
+	 * the input type and inside the input rectangle
+	 * @param rect
+	 * @param type
+	 * @return
+	 * @throws DriverException
+	 */
+	public FBitSet queryByRectAndType(Rectangle2D rect, int type)
+			throws DriverException {
+
+		ReadableVectorial va = inLayerVec.getSource();
+		ICoordTrans ct = inLayerVec.getCoordTrans();
+
+		FBitSet bitset = new FBitSet();
+		try {
+			va.start();
+			int numShp = va.getShapeCount();
+			DriverAttributes attr = va.getDriverAttributes();
+			boolean bMustClone = false;
+			if (attr != null) {
+				if (attr.isLoadedInMemory()) {
+					bMustClone = attr.isLoadedInMemory();
+				}
+			}
+
+			for (int i = 0; i < numShp; i++) {
+				// if it's not the type expected we discard it
+				IGeometry geom = va.getShape(i);
+				if (geom == null)
+					continue;
+				if (type != (geom.getGeometryType() % 512))
+					continue;
+				// idRec = (Integer) lyr.getSource().getShape(i).get;
+				// index = i;//dRec.intValue();
+				// if we want the whole features we select it
+				if (rect == null) {
+					bitset.set(i, true);
+					continue;
+				}
+				// IGeometry geom = shp;
+
+				if (ct != null) {
+					if (bMustClone)
+						geom = geom.cloneGeometry();
+					geom.reProject(ct);
+				}
+				if (geom.intersects(rect))
+					bitset.set(i, true);
+			}
+			va.stop();
+		} catch (DriverIOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return bitset;
+
+	}
+
+	
+	private IndexedShpDriver getOpenShpDriver(File file) throws IOException {
+
+		IndexedShpDriver drv = new IndexedShpDriver();
+		if (!file.exists()) {
+
+			file.createNewFile();
+			File newFileSHX = new File(file.getAbsolutePath().replaceAll(
+					"[.]shp", ".shx"));
+			newFileSHX.createNewFile();
+			File newFileDBF = new File(file.getAbsolutePath().replaceAll(
+					"[.]shp", ".dbf"));
+			newFileDBF.createNewFile();
+		}
+		drv.open(file);
+		return drv;
+	}
+
+	private Value[] extractValues(SelectableDataSource sds2,
+			FieldDescription[] descripExLyr2, int i)
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+
+		FieldDescription[] desLyrTot = sds2.getFieldsDescription();
+		int[] indices = getArrayIndex(descripExLyr2, desLyrTot);
+		Value[] newvalue = new Value[indices.length];
+
+		try {
+			// geom description
+			Value[] val = sds2.getRow(i);
+
+			for (int k = 0; k < indices.length; k++) {
+
+				int indx = indices[k];
+				Value valu = val[indx];
+				newvalue[k] = valu;
+			}
+
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		// TODO Auto-generated method stub
+		return newvalue;
+	}
+
+	/**
+	 * Compare two FieldsDescription[], and show which atributes agreed. Then we
+	 * create a new array index of this atributes
+	 * 
+	 * @param descripSel,
+	 *            selected layer`s description
+	 * @param descripTot,
+	 *            original layer`s description
+	 * @return
+	 */
+	private int[] getArrayIndex(FieldDescription[] descripSel,
+			FieldDescription[] descripTot) {
+
+		int[] index = new int[descripSel.length];
+		int cont = 0;
+
+		for (int i = 0; i < descripTot.length; i++) {
+
+			String nameFieldTot = descripTot[i].getFieldName();
+			for (int j = 0; j < descripSel.length; j++) {
+
+				String nameFielSele = descripSel[j].getFieldName();
+				if (nameFieldTot.equals(nameFielSele)) {
+
+					cont = i;
+					index[j] = cont;
+
+				}
+			}
+		}
+		return index;
+	}
+
+	/**
+	 * Number of steps the Exportation will report
+	 */
+	public int getFinalStep() {
+		return 100;
+	}
+
+	/**
+	 * Runs the exportation task
+	 */
+	public void  run() {
+		export();
+	}
+	
+	/**
+	 * Writes the layer attributes to the input xml
+	 * @param name
+	 * @param shpType
+	 * @param path
+	 */
+	private void writeXML(String name, int shpType, String path){
+		//xml.openTag(XmlProjectTags.LAYER);
+		//<Type>
+		xml.writeTag(XmlProjectTags.TYPE, "SHP");
+		//</Type>
+		
+		//<Path>						
+		xml.writeTag(XmlProjectTags.PATH, path);
+		//</Path>
+		
+		//<Name>
+		xml.writeTag(XmlProjectTags.NAME, name);
+		//</Name>
+		
+		//<Visible>
+		String isVisible = (inLayer.isVisible()) ? "1" : "0"; 
+		xml.writeTag(XmlProjectTags.VISIBLE, isVisible);
+		//</Visible>
+		
+		// scale max min
+		double scaleMax = inLayer.getMaxScale();
+		double scaleMin = inLayer.getMinScale();
+		xml.writeTag(XmlProjectTags.SCALE_MAX, "" + Double.toString(scaleMax));
+		xml.writeTag(XmlProjectTags.SCALE_MIN, "" + Double.toString(scaleMin));
+
+		Style style = new Style();
+		style.setLayer(inLayerVec,shpType);
+		style.setXML(xml);
+		style.createXML();
+		
+		//xml.closeTag();
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExporterSubTask.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExporterSubTask.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/ExporterSubTask.java	(revision 30230)
@@ -0,0 +1,161 @@
+/**
+ * 
+ */
+package es.prodevelop.gvsig.exportMobile.layerexporters;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+
+import es.prodevelop.gvsig.exportMobile.xml.XmlProjectTags;
+
+/**
+ * 
+ * This class mother has to be the ancestor of every class
+ * executable in an ExportProcess 
+ * 
+ * @author jcarras
+ *
+ */
+public abstract class ExporterSubTask{
+
+	protected FLayer inLayer; 
+	protected Rectangle2D rect;
+	protected AbstractMonitorableTask parent;
+	protected int finalStep;
+	protected XmlBuilder xml;
+	private boolean xmlInited = false;
+	private int currentStep = 0;
+	private boolean isCancelled = false;
+	
+	public abstract void run();
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param parentProcess
+	 * @param layer
+	 * @param rect
+	 * @param xml
+	 */
+	public ExporterSubTask(AbstractMonitorableTask parentProcess, FLayer layer, Rectangle2D rect, XmlBuilder xml){
+		this.inLayer=layer;
+		this.rect=rect;
+		this.parent=parentProcess;
+		this.xml=xml;
+	}
+
+	/**
+	 * Indicates to the ExportProcess that the task is going on
+	 * reportStep has to be called exactly getFinalStep() times
+	 */
+	public void reportStep(){
+		currentStep++;
+		parent.reportStep();
+	}
+
+	/**
+	 * It reports numSteps Steps
+	 * @param numSteps
+	 */
+	public void reportSteps(int numSteps){
+		for (int i=0; i<numSteps; i++)
+			reportStep();
+	}
+	
+	/**
+	 * Changes the status text of the task 
+	 * @param statusMessage
+	 */
+	public void setStatusMessage(String statusMessage){
+		parent.setStatusMessage(statusMessage);
+	}
+	
+	/**
+	 * Changes the note of the task
+	 * (It is showed on progress dialog)
+	 * 
+	 * @param note
+	 */
+	public void setNote(String note){
+		parent.setNote(note);
+	}
+
+	/**
+	 * Any class extending ExporterSubClass has to implement this method
+	 * to comunicate the number of steps it will report
+	 * @return
+	 */
+	public abstract int getFinalStep();
+
+	/**
+	 * If the proposed file exists, this method returns one not existing
+	 * file similar to the proposed one
+	 * 
+	 * @param proposedFile
+	 * @return
+	 */
+	public File getFreeFile(File proposedFile){
+		if (!proposedFile.exists())
+			return proposedFile;
+		else {
+			String base = proposedFile.getAbsolutePath();
+			int dotPos = base.lastIndexOf(".");
+			String ext = base.substring(dotPos);
+			base = base.substring(0, dotPos);
+			for (int i=0;i<99999;i++){
+				String newPath = base + "_" + i + ext;
+				File newFile = new File(newPath);
+				if (!newFile.exists())
+					return newFile;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Starts the XML with the layer heading
+	 */
+	protected void initXML(){
+		//<Layer>		
+		xml.openTag(XmlProjectTags.LAYER);
+		xmlInited=true;
+	}
+	
+	/**
+	 * Add the layer footer to the XML
+	 */
+	protected void closeXML(){
+		if (isXmlInited())
+			xml.closeTag();
+		//</Layer>
+		xmlInited=false;
+	}
+
+	public boolean isXmlInited() {
+		return xmlInited;
+	}
+
+	public int getCurrentStep() {
+		return currentStep;
+	}
+	
+	protected void reportToEnd(){
+		while (getCurrentStep()<getFinalStep()){
+			reportStep();
+		}
+	}
+
+	public boolean isCancelled() {
+		return isCancelled;
+	}
+
+	public void setCancelled(boolean isCancelled) {
+		this.isCancelled = isCancelled;
+	}
+	
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/ClipProcess.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/ClipProcess.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/ClipProcess.java	(revision 30230)
@@ -0,0 +1,298 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters.clip;
+
+import java.awt.geom.Rectangle2D;
+import java.util.Map;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
+import com.iver.cit.gvsig.fmap.edition.ISchemaManager;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayerVectorialDB;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
+import com.iver.cit.gvsig.fmap.operations.strategies.StrategyManager;
+import com.iver.cit.gvsig.fmap.operations.strategies.VisitException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.AbstractGeoprocess;
+import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.IOverlayGeoprocess;
+import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
+import com.iver.cit.gvsig.geoprocess.impl.clip.fmap.ClipVisitor;
+import com.iver.cit.gvsig.geoprocess.impl.convexhull.fmap.ScalableUnionVisitor;
+import com.iver.utiles.swing.threads.CancellableMonitorable;
+import com.iver.utiles.swing.threads.DefaultCancellableMonitorable;
+import com.iver.utiles.swing.threads.IMonitorableTask;
+import com.vividsolutions.jts.geom.Geometry;
+
+//ClipProcess is as ClipGeoprocess but createLayerDefinition method
+//is diferent because we have to add some original layer`s atributes (new description)
+//to export not all layer`s atributes
+
+public class ClipProcess extends AbstractGeoprocess implements
+		IOverlayGeoprocess {
+
+	private FLyrVect auxLayer;
+
+	private boolean onlyFirstLayerSelection = false;
+
+	private boolean onlyClipLayerSelection = false;
+
+	private ClipVisitor visitor;
+
+	private ILayerDefinition resultLayerDefinition;
+
+	private FieldDescription[] description;
+	
+	//private FLayerWithNewName firstWN;
+	private FLyrVect firstWN;
+	private FBitSet bitset;
+
+	public ClipProcess(FLyrVect lyr_wn, FieldDescription[] desc) {
+
+		firstWN = lyr_wn;
+		setFirstOperand(lyr_wn);
+		description = desc;
+	}
+
+	public ClipProcess(FLyrVect lyr_wn, FieldDescription[] desc, FBitSet bitset) {
+
+		firstWN = lyr_wn;
+		setFirstOperand(lyr_wn);
+		description = desc;
+		this.bitset=bitset;
+	}
+	
+	/** set parameters */
+	public void setParameters(Map params) throws GeoprocessException {
+
+		Boolean firstLayerSelection = (Boolean) params
+				.get("firstlayerselection");
+		if (firstLayerSelection != null)
+			this.onlyFirstLayerSelection = firstLayerSelection.booleanValue();
+
+		Boolean secondLayerSelection = (Boolean) params
+				.get("secondlayerselection");
+		if (secondLayerSelection != null)
+			this.onlyClipLayerSelection = secondLayerSelection.booleanValue();
+
+	}
+
+	public void checkPreconditions() throws GeoprocessException {
+		// TODO Auto-generated method stub
+		if (firstLayer == null)
+			throw new GeoprocessException("Clip: capa de entrada a null");
+		if (auxLayer == null)
+			throw new GeoprocessException("Clip: capa de clip a null");
+		if (this.writer == null || this.schemaManager == null) {
+			throw new GeoprocessException(
+					"Operacion de clip sin especificar capa de resultados");
+		}
+
+		try {
+			if (auxLayer.getShapeType() != XTypes.POLYGON
+					&& (auxLayer.getShapeType() != XTypes.MULTI)) {
+				throw new GeoprocessException(
+						"La capa de recorte no es de polígonos");
+			}
+		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+			throw new GeoprocessException(
+					"Error al tratar de chequear si la capa de recorte es de polígonos");
+		}
+	}
+
+	public void process() throws GeoprocessException {
+		// TODO Auto-generated method stub
+		Geometry clippingGeometry = null;
+		try {
+			clippingGeometry = computeJtsClippingPoly();
+		} catch (Exception e) {
+			throw new GeoprocessException(
+					"Error calculando el convex hull de la clipping layer");
+		}
+		visitor = new ClipVisitor(clippingGeometry, resultLayerDefinition,
+				schemaManager, writer);
+		Strategy strategy = StrategyManager.getStrategy(firstLayer);
+		try {
+			if (onlyFirstLayerSelection) {
+				strategy.process(visitor, firstLayer.getRecordset()
+						.getSelection());
+			} else {
+				strategy.process(visitor);
+			}
+		} catch (Exception e) {
+			throw new GeoprocessException(
+					"Problemas al leer los datos de la capa a clipear");
+		}
+	}
+
+	public ILayerDefinition createLayerDefinition() {
+		
+		/*LayerDescription descripLayer = new LayerDescription(
+				resultLayerDefinition, firstWN, description);
+		resultLayerDefinition = descripLayer.lyrDescrip();*/
+		return resultLayerDefinition;
+
+	}
+
+	public void setSecondOperand(FLyrVect secondLayer) {
+		// TODO Auto-generated method stub
+		this.auxLayer = secondLayer;
+	}
+
+	public void setFirstOperand(FLyrVect lyr) {
+		// TODO Auto-generated method stub
+		this.firstLayer = lyr;
+	}
+
+	public IMonitorableTask createTask() {
+		final CancellableMonitorable cancelMonitor = createCancelMonitor();
+
+		return new IMonitorableTask() {
+			String CLIP_GEOP_MSG = PluginServices.getText(this, "Mensaje_clip");
+
+			String CLIP_MESSAGE = PluginServices.getText(this,
+					"Mensaje_procesando_clip_primero");
+
+			String INTERS_MESSAGE = PluginServices.getText(this,
+					"Mensaje_procesando_clip_segundo");
+
+			String of = PluginServices.getText(this, "De");
+
+			String currentMsg = CLIP_MESSAGE;
+
+			private boolean finished = false;
+
+			public int getInitialStep() {
+				return cancelMonitor.getInitialStep();
+			}
+
+			public int getFinishStep() {
+				return cancelMonitor.getFinalStep();
+			}
+
+			public int getCurrentStep() {
+				return cancelMonitor.getCurrentStep();
+			}
+
+			public String getStatusMessage() {
+				return CLIP_GEOP_MSG;
+			}
+
+			public String getNote() {
+				return currentMsg + " " + getCurrentStep() + " " + of + " "
+						+ getFinishStep();
+			}
+
+			public void cancel() {
+				((DefaultCancellableMonitorable) cancelMonitor)
+						.setCanceled(true);
+				ClipProcess.this.cancel();
+			}
+
+			public void run() {
+
+				Geometry clippingGeometry = null;
+				try {
+					clippingGeometry = computeJtsClippingPoly();
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+				currentMsg = INTERS_MESSAGE;
+				visitor = new ClipVisitor(clippingGeometry,
+						resultLayerDefinition, schemaManager, writer);
+				Strategy strategy = StrategyManager.getStrategy(firstLayer);
+				Rectangle2D clippingRect = FConverter
+						.convertEnvelopeToRectangle2D(clippingGeometry
+								.getEnvelopeInternal());
+				try {
+					if (bitset!=null){
+						visitor.setSelection(bitset);
+					}
+					strategy.process(visitor, clippingRect, cancelMonitor);
+
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+				finished = true;
+			}
+
+			public boolean isDefined() {
+				return cancelMonitor.isDeterminatedProcess();
+			}
+
+			public boolean isCanceled() {
+				return cancelMonitor.isCanceled();
+			}
+
+			public boolean isFinished() {
+				return finished;
+			}
+		};
+	}
+
+	private Geometry computeJtsClippingPoly()
+			throws com.iver.cit.gvsig.fmap.DriverException, VisitException {
+
+		ScalableUnionVisitor visitor = new ScalableUnionVisitor();
+
+		Strategy strategy = StrategyManager.getStrategy(auxLayer);
+		if (onlyClipLayerSelection) {
+			strategy.process(visitor, auxLayer.getRecordset().getSelection());
+		} else {
+			strategy.process(visitor);
+		}
+		return visitor.getJtsConvexHull();
+	}
+
+	public void setResultLayerProperties(IWriter writer,
+			ISchemaManager schemaManager) {
+		this.writer = writer;
+		this.schemaManager = schemaManager;
+
+	}
+
+	private DefaultCancellableMonitorable createCancelMonitor() {
+		DefaultCancellableMonitorable monitor = new DefaultCancellableMonitorable();
+		monitor.setInitialStep(0);
+		monitor.setDeterminatedProcess(true);
+		int clipSteps = 0;
+		try {
+			if (onlyClipLayerSelection) {
+				FBitSet selection = auxLayer.getRecordset().getSelection();
+				clipSteps = selection.cardinality();
+			} else {
+				clipSteps = auxLayer.getSource().getShapeCount();
+
+			}
+			int firstSteps = 0;
+			if (onlyFirstLayerSelection) {
+				FBitSet selection = firstLayer.getRecordset().getSelection();
+				firstSteps = selection.cardinality();
+			} else {
+				firstSteps = firstLayer.getSource().getShapeCount();
+
+			}
+			int totalSteps = clipSteps + firstSteps;
+			monitor.setFinalStep(totalSteps);
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverIOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return monitor;
+	}
+
+	public ILayerDefinition getResultLayerDefinition() {
+		return resultLayerDefinition;
+	}
+
+	public void setResultLayerDefinition(ILayerDefinition resultLayerDefinition) {
+		this.resultLayerDefinition = resultLayerDefinition;
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/PostProcessMonitorableDecoratorMainFirst.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/PostProcessMonitorableDecoratorMainFirst.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/layerexporters/clip/PostProcessMonitorableDecoratorMainFirst.java	(revision 30230)
@@ -0,0 +1,40 @@
+package es.prodevelop.gvsig.exportMobile.layerexporters.clip;
+
+import java.io.File;
+
+import javax.swing.JOptionPane;
+
+import com.iver.utiles.swing.threads.IMonitorableTask;
+import com.iver.utiles.swing.threads.MonitorableDecoratorMainFirst;
+
+import es.prodevelop.gvsig.exportMobile.files.NewDir;
+
+public class PostProcessMonitorableDecoratorMainFirst extends
+		MonitorableDecoratorMainFirst {
+	
+	
+	private File tempFile, finalFile;
+	
+	public PostProcessMonitorableDecoratorMainFirst(
+			IMonitorableTask mainTask,
+			IMonitorableTask secondaryTask,
+			File tmp, File finalf){
+		
+		super(mainTask, secondaryTask);
+		
+		tempFile = tmp;
+		finalFile = finalf;
+	}
+	
+	private void postProcess() {
+		
+		NewDir.copyShpDbfShxTempToFinal(tempFile, finalFile);
+	}
+	
+	public void run() throws Exception {
+		super.run();
+		postProcess();
+	}
+
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/LayerNamesComparator.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/LayerNamesComparator.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/LayerNamesComparator.java	(revision 30230)
@@ -0,0 +1,24 @@
+package es.prodevelop.gvsig.exportMobile.ui.order;
+
+import java.util.Comparator;
+
+public class LayerNamesComparator implements Comparator {
+
+	public  LayerNamesComparator() {}
+	
+	public int compare(Object arg0, Object arg1) {
+		
+		if ((arg0 instanceof FLayerWithNewName) && (arg0 instanceof FLayerWithNewName)) {
+			
+			FLayerWithNewName a0 = (FLayerWithNewName) arg0;
+			FLayerWithNewName a1 = (FLayerWithNewName) arg1;
+			return a0.getNewNameNoDiff().compareToIgnoreCase(a1.getNewNameNoDiff());
+			
+		} else {
+			
+			return arg0.toString().compareTo(arg1.toString());
+			
+		}
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/FLayerWithNewName.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/FLayerWithNewName.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/FLayerWithNewName.java	(revision 30230)
@@ -0,0 +1,112 @@
+package es.prodevelop.gvsig.exportMobile.ui.order;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+
+public class FLayerWithNewName {
+	
+	private FLayer lyr = null;
+	private String suffix = "";
+	private String differencer = "";
+
+	public FLayerWithNewName(FLayer l) {
+		lyr = l;
+		suffix = getSuffix(lyr);
+	}
+	
+	public static String getSuffix(FLayer l) {
+
+		String suff = "";
+		FLayer item = l.getParentLayer();
+		while ((item != null) && (item.getParentLayer() != null)) {
+			suff = suff + "." + item.getName();
+			item = item.getParentLayer();
+		}
+		return removePointShp(suff);
+	}
+	
+	public static String removePointShp(String str) {
+		String aux = str.toLowerCase();
+		aux = aux.replaceAll("\\.shp", "");
+		return aux;
+	}
+
+	public String getNewName() {
+
+		return removePointShp(lyr.getName()) + differencer + suffix;
+	}
+	
+	public String getNewName(String op) {
+		return removePointShp(lyr.getName()) + differencer + "." + op + suffix;
+	}
+	
+	public String getNewNameNoDiff() {
+		return removePointShp(lyr.getName()) + suffix;
+	}
+	
+	
+	public void setDiff(String d) {
+		differencer = d;
+	}
+
+	public FLayer getLayer() {
+		return lyr;
+	}
+	
+	public static ArrayList getAll(FLayers root) {
+		
+		ArrayList resp = new ArrayList();
+		addThisOrChildren(resp, root);
+		setDiffs(resp);
+		return resp;
+		
+	}
+	
+
+	private static void setDiffs(ArrayList l) {
+		
+		int sz = l.size();
+		FLayerWithNewName[] non_sorted = new FLayerWithNewName[sz];
+		for (int i=0; i<sz; i++)  non_sorted[i] = (FLayerWithNewName) l.get(i);
+		Arrays.sort(non_sorted, new LayerNamesComparator());
+		
+		int ind = 1;
+		for (int i=1; i<sz; i++) {
+			
+			FLayerWithNewName item_0 = non_sorted[i-1];
+			FLayerWithNewName item_1 = non_sorted[i];
+			if (item_0.getNewNameNoDiff().compareToIgnoreCase(item_1.getNewNameNoDiff()) == 0) {
+				item_1.setDiff("_" + ind);
+				ind++;
+			} else {
+				ind = 1;
+			}
+		}
+	}
+
+	public static void addThisOrChildren(ArrayList list, FLayer l) {
+		
+		if ((! l.isOk()) || (! l.isAvailable())) {
+			// excluded layers
+			return;
+		}
+		
+		if (l instanceof FLayers) {
+			FLayers col = (FLayers) l;
+			for (int i=0; i<col.getLayersCount(); i++) {
+				addThisOrChildren(list, col.getLayer(i));
+			}
+		} else {
+			list.add(new FLayerWithNewName(l));
+		}
+		
+	}
+
+	public String getOriginalName() {
+		return lyr.getName();
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/ArrayStringOrd.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/ArrayStringOrd.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/ArrayStringOrd.java	(revision 30230)
@@ -0,0 +1,47 @@
+package es.prodevelop.gvsig.exportMobile.ui.order;
+
+import java.util.ArrayList;
+
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+
+/**
+ * Build a order list layer`s name, if any name is duplicated, rename it
+ * @author Anabel Moreno
+ *
+ */
+public class ArrayStringOrd {
+
+	ArrayList arrayString;
+
+	ArrayList arrayLayers;
+
+	public ArrayStringOrd(ArrayList arLyrs) {
+
+		arrayLayers = arLyrs;
+	}
+
+	/**
+	 * Get array laye`s name, (if any name is duplicate rename it)
+	 * 
+	 * @return array order strings
+	 */
+	public ArrayList getArrayStrings() {
+
+		/* new ArrayList layer´s names */
+		arrayString = new ArrayList();
+		for (int i = 0; i < arrayLayers.size(); i++) {
+
+			FLayer layer_nn = (FLayer) ((FLayerWithNewName)arrayLayers.get(i)).getLayer();
+			String nameLayer = layer_nn.getName();
+			arrayString.add(i, nameLayer);
+		}
+
+		/* rename list if any name is duplicate */
+		// OrderLayers arrayListOrder = new OrderLayers();
+		// int dimList = arrayLayers.size();
+		// arrayListOrder.ordNotDuplicate(dimList, arrayString);
+
+		return arrayString;
+
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderLayers.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderLayers.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderLayers.java	(revision 30230)
@@ -0,0 +1,56 @@
+package es.prodevelop.gvsig.exportMobile.ui.order;
+
+import java.util.ArrayList;
+
+/**
+ * Order a list layer
+ * @author Anabel Moreno
+ *
+ */
+public class OrderLayers {
+
+	public OrderLayers() {
+
+	}
+
+	/**
+	 * Get layer name and compare it with the others names, if this name is
+	 * duplicate, rename it.
+	 * 
+	 * @param dimList
+	 * @param array
+	 */
+	public void ordNotDuplicate(int dimList, ArrayList array) {
+
+		if (dimList == 1) {
+		} else {
+
+			for (int i = 0; i < dimList; i++) {
+
+				int cont = 1;
+
+				/* get name object i */
+				String namelayer = (String) array.get(i);
+
+				if (cont == 1) {
+
+					int sig = i + 1;
+					for (int j = sig; j < dimList; j++) {
+
+						/* get name object j */
+						String nameComp = (String) array.get(j);
+
+						/* compare names */
+						if (namelayer.equals(nameComp)) {
+
+							cont = cont + 1;
+							nameComp = cont + nameComp;
+							/* rename object j */
+							array.set(j, nameComp);
+						}
+					}
+				}
+			}
+		}
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderTOCArray.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderTOCArray.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/order/OrderTOCArray.java	(revision 30230)
@@ -0,0 +1,25 @@
+package es.prodevelop.gvsig.exportMobile.ui.order;
+
+import java.util.ArrayList;
+
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+
+/**
+ * Order the layers in TOC
+ * @author Anabel Moreno
+ *
+ */
+public class OrderTOCArray {
+
+	/**
+	 * 
+	 * @param root
+	 * @return
+	 */
+	public static ArrayList orderTree(FLayers root) {
+		
+		return null;
+
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerInView.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerInView.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerInView.java	(revision 30230)
@@ -0,0 +1,97 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
+
+/**
+ * To know if the layer instersects with the view
+ * @author Anabel Moreno
+ *
+ */
+public class LayerInView {
+
+	private FLayer lyr;
+	private FLyrVect layer;
+	private FBitSet bitSet;
+	private boolean intersects=false;
+	private int cont = 0;
+	private Rectangle2D rect;                                                                                                                                                                                                                               ;
+
+	/**
+	 * Constructor
+	 * @param layer
+	 *            to work
+	 * @param rectangle
+	 *            of the view
+	 */
+	public LayerInView(FLayer layer, Rectangle2D rectangle) {
+
+		lyr = layer;
+		rect = rectangle;
+	}
+
+	/**
+	 * if layer is vectorial look for layer`s geometries that intersects with the view,
+	 * if any geometries intersects, the method return true.
+	 * @return true if layer intersects with the view
+	 */
+	public boolean isInView() {
+
+		Rectangle2D lyrR = null;
+		Rectangle r = null;
+		
+		try {
+			lyrR = lyr.getFullExtent();
+			r = rect.getBounds();
+			
+			if (r.intersects(lyrR)){
+				intersects = true;
+				
+				if(lyr instanceof FLyrVect){
+					
+					layer = (FLyrVect) lyr;
+					
+					bitSet = layer.queryByRect(rect);
+										
+					ReadableVectorial va = layer.getSource();
+					
+					va.start();
+					
+					for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet.nextSetBit(i + 1)) {
+		
+						IGeometry geo = va.getShape(i);
+						if (geo != null) {
+							cont++;
+						}
+					}
+					va.stop();
+					
+					if (cont >0)
+						intersects = true;
+					else
+						intersects = false;
+				}
+			}				
+			else
+				intersects =  false;
+
+		} catch (DriverException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (DriverIOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		return intersects;
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerAtributes.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerAtributes.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/LayerAtributes.java	(revision 30230)
@@ -0,0 +1,346 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.border.TitledBorder;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+
+/**
+ * Panel to select the new layer atributes
+ * @author Anabel Moreno
+ *
+ */
+public class LayerAtributes extends JPanel implements IWindow, ActionListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private JPanel topPanel = new JPanel();
+
+	private JPanel centerPanel = new JPanel();
+
+	private JPanel bottomPanel = new JPanel();
+
+	private JScrollPane scroll = new JScrollPane();
+
+	private JPanel titlePanel = new JPanel();
+
+	private JCheckBox selAllBox;
+
+	private FLayer layer;
+
+	private JLabel nomLayer, typLayer;
+
+	private JButton exit, inverSel, cancel;
+
+	private PanelAtribIntoScroll atrbScroll;
+
+	private ArrayList arrLayers = new ArrayList();
+
+	private int atrSelec, atribTot;
+
+	private ArrayList selectAtrib;
+
+	private FieldDescription[] atribSel;
+
+	private FieldDescription[] atribTotal;
+
+	private int cont;
+
+	private boolean okPress = false;
+
+	private static int PANEL_WIDTH = 300;
+
+	private static int PANEL_HEIGHT = 250;
+
+	private static int TOP_PANEL_HEIGHT = 20;
+
+	private static int BOTTOM_PANEL_HEIGHT = 35;
+
+	private static int CENTER_PANEL_HEIGHT = 195;
+
+	private static int TITTLE_CENTER_PANEL_HEIGHT = 24;
+
+	private static int INVERTSEL_X = 10;
+
+	private static int EXIT_X = 110;
+
+	private static int CANCEL_X = 210;
+
+	private static int BUTTON_Y = 5;
+
+	private static int BUTTON_W = 80;
+
+	private static int BUTTON_H = 25;
+
+	private static int LABEL_Y = 5;
+
+	private static int SELALLBX_X = 20;
+
+	private static int SELALLBX_W = 17;
+
+	private static int SELALLBX_H = 13;
+
+	private static int NOMLYR_X = 60;
+
+	private static int NOMLYR_W = 80;
+
+	private static int NOMLYR_H = 12;
+
+	private static int TYPLYR_X = 170;
+
+	private static int TYPLYR_W = 40;
+
+	private static int TYPLYR_H = 12;
+
+	
+	
+	public WindowInfo getWindowInfo() {
+
+		WindowInfo viewAtrib = new WindowInfo(WindowInfo.MODALDIALOG);
+		viewAtrib.setWidth(306);
+		viewAtrib.setHeight(256);
+		viewAtrib.setTitle(PluginServices.getText(this, "atriblayer"));
+		return viewAtrib;
+	}
+
+	public boolean isOkPress() {
+
+		return okPress;
+	}
+
+	/**
+	 * Window to select the layers atributes
+	 * 
+	 * @param layer1,
+	 *            layer selected
+	 * @param arrSelect,list
+	 *            with the description of the layer
+	 * @param cont1,
+	 *            number of atributes selected
+	 */
+	public LayerAtributes(FLayer layer_wn, ArrayList arrSelect, int cont1) {
+
+		super();
+		arrLayers.add(layer);
+		layer = layer_wn;
+		selectAtrib = arrSelect;
+		cont = cont1;
+
+		/* PRINCIPAL PANEL */
+		setSize(PANEL_WIDTH, PANEL_HEIGHT);
+		this.setLayout(new BorderLayout());
+
+		/* TOP PANEL */
+		topPanel.setSize(PANEL_WIDTH, TOP_PANEL_HEIGHT);
+
+		/* BOTTOM PANEL */
+		bottomPanel.setPreferredSize(new Dimension(PANEL_WIDTH,
+				BOTTOM_PANEL_HEIGHT));
+		bottomPanel.setLayout(null);
+
+		inverSel = new JButton(PluginServices.getText(this, "invertSet"));
+		inverSel.setBounds(INVERTSEL_X, BUTTON_Y, BUTTON_W, BUTTON_H);
+		bottomPanel.add(inverSel);
+		inverSel.addActionListener(this);
+
+		exit = new JButton(PluginServices.getText(this, "ok"));
+		exit.setBounds(EXIT_X, BUTTON_Y, BUTTON_W, BUTTON_H);
+		bottomPanel.add(exit);
+		exit.addActionListener(this);
+
+		cancel = new JButton(PluginServices.getText(this, "cancel"));
+		cancel.setBounds(CANCEL_X, BUTTON_Y, BUTTON_W, BUTTON_H);
+		bottomPanel.add(cancel);
+		cancel.addActionListener(this);
+
+		
+		/* CENTER PANEL */
+		centerPanel.setSize(new Dimension(PANEL_WIDTH, CENTER_PANEL_HEIGHT));
+		centerPanel.setLayout(new BorderLayout());
+		
+		TitledBorder title = BorderFactory.createTitledBorder(layer.getName());
+		title.setTitleColor(Color.BLUE);
+		centerPanel.setBorder(title);
+
+		selAllBox = new JCheckBox();
+		selAllBox.addActionListener(this);
+		selAllBox.setSelected(true);
+		selAllBox.setBackground(Color.LIGHT_GRAY);
+		nomLayer = new JLabel(PluginServices.getText(this, "nAtrib"));
+		typLayer = new JLabel(PluginServices.getText(this, "tAtrib"));
+		titlePanel.setPreferredSize(new Dimension(PANEL_WIDTH,
+				TITTLE_CENTER_PANEL_HEIGHT));
+		titlePanel.setLayout(null);
+		selAllBox.setBounds(SELALLBX_X, LABEL_Y, SELALLBX_W, SELALLBX_H);
+		nomLayer.setBounds(NOMLYR_X, LABEL_Y, NOMLYR_W, NOMLYR_H);
+		typLayer.setBounds(TYPLYR_X, LABEL_Y, TYPLYR_W, TYPLYR_H);
+
+		titlePanel.add(nomLayer);
+		titlePanel.add(typLayer);
+		titlePanel.add(selAllBox);
+		titlePanel.setBackground(Color.LIGHT_GRAY);
+
+		atrbScroll = new PanelAtribIntoScroll(layer, arrSelect, cont, this);
+		scroll.setViewportView(atrbScroll.getPanel());
+
+		centerPanel.add(scroll, BorderLayout.CENTER);
+		centerPanel.add(titlePanel, BorderLayout.NORTH);
+
+		/* adds */
+		this.add(topPanel, BorderLayout.NORTH);
+		this.add(centerPanel, BorderLayout.CENTER);
+		this.add(bottomPanel, BorderLayout.SOUTH);
+
+	}
+
+	/**
+	 * @return number of layer`s atributes selected
+	 */
+	public int getAtrSelected() {
+
+		return atrSelec;
+	}
+
+	/**
+	 * @return number of all layer`s atributes
+	 */
+	public int getAtrib() {
+
+		return atribTot;
+	}
+
+	/**
+	 * @return a list with the layer`s atributes selected
+	 */
+	public ArrayList getSelectAtrib() {
+
+		return selectAtrib;
+	}
+
+	/**
+	 * @return a new layer description with the atributes selected
+	 */
+	public FieldDescription[] getAtribSelected() {
+
+		return atribSel;
+	}
+
+	/**
+	 * to activate checkbox all selected, and enabled ok button
+	 * 
+	 * @return true if any atribute is selected and false if any atribute is
+	 *         selected
+	 */
+	public boolean dimArrBx() {
+
+		FieldDescription[] aux = atrbScroll.getAtribSelected();
+		if (aux.length == 0) {
+			selAllBox.setSelected(false);
+			return false;
+		} else {
+
+			selAllBox.setSelected(true);
+			return true;
+		}
+	}
+
+	/**
+	 * @return a layer description with all original atributes
+	 */
+	public FieldDescription[] getAtribTotal() {
+
+		atribTotal = atrbScroll.getAtribTotal();
+		return atribTotal;
+	}
+
+	public void actionPerformed(ActionEvent arg0) {
+
+		Object src = arg0.getSource();
+
+		if (src == exit) {
+
+			okPress = true;
+			selectAtrib = atrbScroll.getSelectionAtributs();
+
+			// array fields layer
+			atribSel = atrbScroll.getAtribSelected();
+
+			atrSelec = atrbScroll.getNumAtribSelected();
+			atribTot = atrbScroll.getNumAtrib();
+			PluginServices.getMDIManager().closeWindow(this);
+			return;
+		}
+
+		if (src == selAllBox) {
+
+			ArrayList arrAux = atrbScroll.getArrBox();
+			if (selAllBox.isSelected() == true) {
+
+				for (int i = 0; i < arrAux.size(); i++) {
+
+					JCheckBox aux = (JCheckBox) arrAux.get(i);
+					aux.setSelected(true);
+				}
+				exit.setEnabled(true);
+			}
+
+			if (selAllBox.isSelected() == false) {
+
+				for (int i = 0; i < arrAux.size(); i++) {
+
+					JCheckBox aux = (JCheckBox) arrAux.get(i);
+					aux.setSelected(false);
+				}
+				exit.setEnabled(false);
+			}
+
+		}
+
+		if (src == cancel) {
+
+			PluginServices.getMDIManager().closeWindow(this);
+			return;
+		}
+
+		if (src == inverSel) {
+
+			atrbScroll.setInvSelected();
+			ArrayList arrAux = atrbScroll.getArrBox();
+			int contaux = 0;
+			int dim = arrAux.size();
+			for (int i = 0; i < dim; i++) {
+
+				JCheckBox boxAux = (JCheckBox) arrAux.get(i);
+				if (boxAux.isSelected() == true) {
+					contaux++;
+				}
+			}
+			exit.setEnabled(dimArrBx());
+			return;
+		}
+
+		if (src instanceof JCheckBox) {
+
+			exit.setEnabled(dimArrBx());
+		}
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ExportPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ExportPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ExportPanel.java	(revision 30230)
@@ -0,0 +1,912 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.border.TitledBorder;
+
+import org.apache.log4j.Logger;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.Messages;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.project.ProjectExtent;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+import es.prodevelop.gvsig.exportMobile.LayerObject;
+import es.prodevelop.gvsig.exportMobile.files.NewDir;
+import es.prodevelop.gvsig.exportMobile.layerexporters.ExportProcess;
+import es.prodevelop.gvsig.exportMobile.layerexporters.VectorialExporterTask;
+import es.prodevelop.gvsig.exportMobile.rectangle.DrawRectangle;
+
+/**
+ * Principal panel extension 
+ * @author Anabel Moreno
+ *
+ */
+
+public class ExportPanel extends JPanel implements IWindow, ActionListener {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	private static Logger logger = Logger.getLogger(ExportPanel.class);
+	
+	private ArrayList listLyrsObj = new ArrayList();
+
+	private ArrayList arLayers = new ArrayList();
+
+	public ArrayList arrDescLayers;
+	
+	private File newdirout;
+
+	private int cont = 0 ;
+	private int indxsele;
+
+	private JPanel topPanel = new JPanel();
+
+	private JPanel bottomPanel = new JPanel();
+
+	private JPanel topPathPanel = new JPanel();
+
+	private JPanel topOptionsPanel = new JPanel();
+
+	private JPanel centerPanel = new JPanel();
+
+	private JPanel titlePanel = new JPanel();
+
+	private JTextField pathImport;
+
+	private JTextField nameProy;
+
+	private JLabel path;
+	private JLabel typLayer;
+	private JLabel nomLayer;
+	private JLabel atLayer;
+	private JLabel cboLayer;
+	private JLabel lyrInView;
+
+	private JLabel proyect;
+
+	private JButton execute;
+
+	//private JButton synchro;
+
+	private JButton pathBoton;
+
+	private JButton cancel;
+
+	private JButton save;
+
+	private JButton open;
+
+	private JCheckBox allSelect;
+
+	private JRadioButton viewAc;
+
+	private JRadioButton extent;
+
+	private String namePath;
+
+	//private String namProy = "";
+
+	private String exportZone;
+
+	private ButtonGroup actionsTopPanel;
+
+	private boolean proyEmpty;
+
+	private boolean dirEmpty;
+
+	private JComboBox comboExtents;
+
+	private JScrollPane scroll = new JScrollPane();
+
+	private ProjectExtent[] listExtents;
+
+	private PanelIntoScroll panelScroll;
+
+	private View view;
+
+	private DrawRectangle rect;
+
+	private Rectangle2D rectangle;
+	
+	private static String EMPTY = "";
+
+	private static String VIEW_ACTUAL = "VA";
+
+	private static String EXTENT = "EN";
+
+	private static int WIDTH_PANEL = 560;
+
+	private static int HEIGHT_PANEL = 500;
+
+	private static int HEIGHT_TOP_PANEL = 140;
+
+	private static int HEIGTH_TOP_PATH_PANEL = 80;
+
+	private static int HEIGTH_TOP_OPTIONS_PANEL = 60;
+
+	private static int HEIGTH_BOTTOM_PANEL = 45;
+
+	private static int HEIGTH_CENTER_PANEL = 30;
+	
+	private static int HEIGTH_TITLE_PANEL = 24;
+
+	private static int PROY_X = 20;
+
+	private static int PROY_Y = 10;
+
+	private static int PROY_W = 100;
+
+	private static int PROY_H = 20;
+
+	private static int NPROY_X = 140;
+
+	private static int NPROY_Y = 10;
+
+	private static int NPROY_W = 400;
+
+	private static int NPROY_H = 20;
+
+	private static int PATH_X = 20;
+
+	private static int PATH_Y = 45;
+
+	private static int PATH_W = 100;
+
+	private static int PATH_H = 20;
+
+	private static int PATHIMPORT_X = 140;
+
+	private static int PATHIMPORT_Y = 45;
+
+	private static int PATHIMPORT_W = 350;
+
+	private static int PATHIMPORT_H = 20;
+
+	private static int PATHBUTTON_X = 510;
+
+	private static int PATHBUTTON_Y = 40;
+
+	private static int PATHBUTTON_W = 30;
+
+	private static int PATHBUTTON_H = 30;
+
+	private static int VIEWACT_X = 120;
+
+	private static int VIEWACT_Y = 20;
+
+	private static int VIEWACT_W = 100;
+
+	private static int VIEWACT_H = 20;
+
+	private static int EXTENT_X = 290;
+
+	private static int EXTENT_Y = 20;
+
+	private static int EXTENT_W = 80;
+
+	private static int EXTENT_H = 20;
+
+	private static int EXTENTCOMBO_X = 390;
+
+	private static int EXTENTCOMBO_Y = 20;
+
+	private static int EXTENTCOMBO_W = 120;
+
+	private static int EXTENTCOMBO_H = 20;
+
+	private static int EX_X = 15;
+
+	private static int BUTT_Y = 10;
+
+	private static int BUTT_W = 90;
+
+	private static int BUTT_H = 25;
+
+	private static int SY_X = 125;
+
+	private static int CAN_X = 235;
+
+	private static int OP_X = 345;
+
+	private static int SAVE_X = 455;
+
+	private static int ALLSEL_X = 30;
+
+	private static int LABEL_Y = 5;
+
+	private static int LABEL_H = 14;
+
+	private static int ALLSEL_W = 17;
+
+	private static int ALLSEL_H = 13;
+
+	private static int TYPLYR_X = 77;
+
+	private static int TYPLYR_W = 40;
+
+	private static int LYRINVIEW_X = 135;
+
+	private static int LYRINVIEW_W = 55;
+
+	private static int NAMELAYER_X = 200;
+
+	private static int NAMELAYER_W = 100;
+
+	private static int ATLYR_X = 325;
+
+	private static int ATLYR_W = 50;
+
+	private static int CBOLYR_X = 450;
+
+	private static int CBOLYR_W = 70;
+	
+
+	public WindowInfo getWindowInfo() {
+
+		WindowInfo m_viewInfo = new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewInfo.setWidth(566);
+		m_viewInfo.setHeight(506);
+		m_viewInfo.setTitle(PluginServices.getText(this, "exporMob"));
+		return m_viewInfo;
+	}
+
+	/**
+	 * Create export panel
+	 * 
+	 * @param arrLayers,
+	 *            list with all layers
+	 * @param listExt,
+	 *            list extents
+	 */
+	public ExportPanel(ArrayList arrLayers, ProjectExtent[] listExt) {
+
+		super();
+
+		view = (View) PluginServices.getMDIManager().getActiveWindow();
+		
+		
+		listExtents = listExt;
+		arLayers = arrLayers;
+
+		/* PRINCIPAL PANEL */
+		setSize(WIDTH_PANEL, HEIGHT_PANEL);
+		this.setLayout(new BorderLayout());
+
+		/* TOP PANEL */
+		topPanel.setLayout(new BorderLayout());
+		topPanel.setSize(new Dimension(WIDTH_PANEL, HEIGHT_TOP_PANEL));
+
+		path = new JLabel(PluginServices.getText(this, "direxport"));
+		pathImport = new JTextField(EMPTY);
+		pathImport.setEditable(false);
+		pathImport.setBackground(Color.WHITE);
+
+		nameProy = new JTextField(EMPTY);
+		proyect = new JLabel(PluginServices.getText(this, "nomproy"));
+		pathBoton = new JButton("...");
+		viewAc = new JRadioButton(PluginServices.getText(this, "viewA"));
+		viewAc.setSelected(true);
+		extent = new JRadioButton(PluginServices.getText(this, "exent"));
+		extent.setSelected(false);
+
+		actionsTopPanel = new ButtonGroup();
+		actionsTopPanel.add(viewAc);
+		actionsTopPanel.add(extent);
+
+		topPathPanel.setLayout(null);
+		topPathPanel.setPreferredSize(new Dimension(WIDTH_PANEL,
+				HEIGTH_TOP_PATH_PANEL));
+
+		proyect.setBounds(PROY_X, PROY_Y, PROY_W, PROY_H);
+		nameProy.setBounds(NPROY_X, NPROY_Y, NPROY_W, NPROY_H);
+		path.setBounds(PATH_X, PATH_Y, PATH_W, PATH_H);
+		pathImport.setBounds(PATHIMPORT_X, PATHIMPORT_Y, PATHIMPORT_W,
+				PATHIMPORT_H);
+		pathBoton.setBounds(PATHBUTTON_X, PATHBUTTON_Y, PATHBUTTON_W,
+				PATHBUTTON_H);
+		topPathPanel.add(proyect);
+		topPathPanel.add(path);
+		topPathPanel.add(nameProy);
+		topPathPanel.add(pathImport);
+		topPathPanel.add(pathBoton);
+
+		topOptionsPanel.setLayout(null);
+		topOptionsPanel.setPreferredSize(new Dimension(WIDTH_PANEL,
+				HEIGTH_TOP_OPTIONS_PANEL));
+
+		comboExtents = new JComboBox();
+		comboExtents.setEnabled(false);
+		comboExtents.addActionListener(this);
+
+		int dimListExt = listExtents.length;
+		if (dimListExt == 0) {
+
+			extent.setEnabled(false);
+			comboExtents.setEnabled(false);
+		}
+		if (dimListExt > 0) {
+
+			extent.setEnabled(true);
+			if (cont == 0) {
+				for (int i = 0; i < dimListExt; i++) {
+
+					String name = listExtents[i].getDescription();
+					comboExtents.addItem(name);
+					comboExtents.repaint();
+				}
+				cont++;
+			}
+		}
+
+		viewAc.setBounds(VIEWACT_X, VIEWACT_Y, VIEWACT_W, VIEWACT_H);
+		extent.setBounds(EXTENT_X, EXTENT_Y, EXTENT_W, EXTENT_H);
+		comboExtents.setBounds(EXTENTCOMBO_X, EXTENTCOMBO_Y, EXTENTCOMBO_W,
+				EXTENTCOMBO_H);
+		topOptionsPanel.add(viewAc);
+		topOptionsPanel.add(extent);
+		topOptionsPanel.add(comboExtents);
+
+		TitledBorder title1 = BorderFactory.createTitledBorder(PluginServices
+				.getText(this, "actExtent"));
+		title1.setTitleColor(Color.BLUE);
+		topOptionsPanel.setBorder(title1);
+
+		topPanel.add(topPathPanel, BorderLayout.NORTH);
+		topPanel.add(topOptionsPanel, BorderLayout.SOUTH);
+
+		/* BOTTOM PANEL */
+		bottomPanel.setPreferredSize(new Dimension(WIDTH_PANEL,
+				HEIGTH_BOTTOM_PANEL));
+		bottomPanel.setLayout(null);
+
+		execute = new JButton(PluginServices.getText(this, "acept"));
+		execute.setBounds(EX_X, BUTT_Y, BUTT_W, BUTT_H);
+		//synchro = new JButton(PluginServices.getText(this, "synchro"));
+		//synchro.setBounds(SY_X, BUTT_Y, BUTT_W, BUTT_H);
+		
+		// ------------------------ jldominguez nov 2007
+		// synchro.setVisible(false);
+		// ------------------------
+		
+		cancel = new JButton(PluginServices.getText(this, "close"));
+		cancel.setBounds(CAN_X, BUTT_Y, BUTT_W, BUTT_H);
+		open = new JButton(PluginServices.getText(this, "open"));
+		open.setBounds(OP_X, BUTT_Y, BUTT_W, BUTT_H);
+		open.setEnabled(false);
+		save = new JButton(PluginServices.getText(this, "save"));
+		save.setBounds(SAVE_X, BUTT_Y, BUTT_W, BUTT_H);
+		save.setEnabled(false);
+
+		
+		bottomPanel.add(execute);
+		//bottomPanel.add(synchro);
+		bottomPanel.add(cancel);
+		bottomPanel.add(open);
+		bottomPanel.add(save);
+
+		/* DISABLED BUTTON */
+		execute.setEnabled(false);
+
+		/* CENTER PANEL */
+		centerPanel.setSize(new Dimension(WIDTH_PANEL, HEIGTH_CENTER_PANEL));
+		centerPanel.setLayout(new BorderLayout());
+
+		TitledBorder title = BorderFactory.createTitledBorder(PluginServices
+				.getText(this, "layers"));
+		title.setTitleColor(Color.BLUE);
+		centerPanel.setBorder(title);
+
+		allSelect = new JCheckBox();
+		allSelect.addActionListener(this);
+		allSelect.setBackground(Color.LIGHT_GRAY);
+
+		typLayer = new JLabel(PluginServices.getText(this, "tLayer"));
+		lyrInView = new JLabel(PluginServices.getText(this, "lyrview"));
+		nomLayer = new JLabel(PluginServices.getText(this, "nLayer"));
+		atLayer = new JLabel(PluginServices.getText(this, "batLayer"));
+		cboLayer = new JLabel(PluginServices.getText(this, "comLayer"));
+
+		titlePanel.setPreferredSize(new Dimension(WIDTH_PANEL, HEIGTH_TITLE_PANEL));
+		titlePanel.setLayout(null);
+		titlePanel.setBackground(Color.LIGHT_GRAY);
+
+		allSelect.setBounds(1 + PanelIntoScroll.EXPORT_X, LABEL_Y, ALLSEL_W, ALLSEL_H);
+		typLayer.setBounds(1 + PanelIntoScroll.ICON_X, LABEL_Y, TYPLYR_W, LABEL_H);
+		lyrInView.setBounds(1 + PanelIntoScroll.IN_VIEW_X, LABEL_Y, LYRINVIEW_W, LABEL_H);
+		nomLayer.setBounds(1 + PanelIntoScroll.NAME_X, LABEL_Y, NAMELAYER_W, LABEL_H);
+		atLayer.setBounds(1 + PanelIntoScroll.ATRIB_X, LABEL_Y, ATLYR_W, LABEL_H);
+		cboLayer.setBounds(1 + PanelIntoScroll.CMBOATR_X, LABEL_Y, CBOLYR_W, LABEL_H);
+
+		titlePanel.add(allSelect);
+		titlePanel.add(typLayer);
+		titlePanel.add(lyrInView);
+		titlePanel.add(nomLayer);
+		titlePanel.add(atLayer);
+		titlePanel.add(cboLayer);
+
+		rect = new DrawRectangle(view);
+		rect.setRectView();
+		rectangle = rect.getRectangle();
+		
+		panelScroll = new PanelIntoScroll(arLayers, this, rectangle);
+		scroll.setViewportView(panelScroll.getPanel());
+		
+		// to activate selAll
+		dimArrBx();
+
+		centerPanel.add(scroll, BorderLayout.CENTER);
+		centerPanel.add(titlePanel, BorderLayout.NORTH);
+
+		pathBoton.addActionListener(this);
+		execute.addActionListener(this);
+		open.addActionListener(this);
+		cancel.addActionListener(this);
+		save.addActionListener(this);
+		extent.addActionListener(this);
+		viewAc.addActionListener(this);
+		comboExtents.addActionListener(this);
+		//synchro.addActionListener(this);
+
+		/* ADD PANELS TO PRINCIPAL PANEL */
+		this.add(topPanel, BorderLayout.NORTH);
+		this.add(centerPanel, BorderLayout.CENTER);
+		this.add(bottomPanel, BorderLayout.SOUTH);
+
+	}
+
+	/**
+	 * To set enabled the executed button. If directory is ok and any layer is
+	 * selected, the button is enabled
+	 */
+	public void activateOk() {
+
+		dirEmpty = pathImport.getText().equals(EMPTY);
+
+		if ((dirEmpty == false) && (allSelect.isSelected() == true)) {
+
+			execute.setEnabled(true);
+		} else {
+
+			execute.setEnabled(false);
+		}
+	}
+
+	/**
+	 * Get the number of boxes selected and active the box All Selected
+	 * 
+	 * @return number of boxes selected
+	 */
+	public int dimArrBx() {
+
+		int c = 0;
+		int dim = panelScroll.getarrBox().size();
+		for (int i = 0; i < dim; i++) {
+
+			JCheckBox box = (JCheckBox) panelScroll.getarrBox().get(i);
+			if (box.isSelected() == true)
+				c++;
+		}
+		if (c == 0) {
+			allSelect.setSelected(false);
+		} else {
+			allSelect.setSelected(true);
+
+		}
+		return c;
+	}
+
+	public void actionPerformed(ActionEvent arg0) {
+
+		Object src = arg0.getSource();
+
+		if (src == pathBoton) {
+
+			Chooser fc = new Chooser();
+			namePath = fc.getNameDir();
+
+			/* COMPLETE TEXTBOX WITH THE PATH */
+			pathImport.setText(namePath);
+			dirEmpty = pathImport.getText().equals(EMPTY);
+			proyEmpty = nameProy.getText().equals(EMPTY);
+				
+//			if (proyEmpty == false) {
+//
+//				namProy = pathImport.getText() + "/" + nameProy.getText();
+//
+//			}
+			activateOk();
+			return;
+		}
+
+	
+		if (src == viewAc) {
+
+			viewAc.setSelected(true);
+			extent.setSelected(false);
+			comboExtents.setEnabled(false);
+			rect = new DrawRectangle(view);
+			rect.setRectView();
+			rectangle = rect.getRectangle();
+
+			ArrayList arrL = panelScroll.getNewArrayLayers();
+			
+			for(int k=0;k<arrL.size();k++){
+				
+				LayerObject lo = (LayerObject) arrL.get(k);
+				FLayer l = lo.getLyr();
+				JPanel parentPanel = lo.getParent();
+				parentPanel.remove(lo.getImgLbl());
+							
+				JLabel lbl = new JLabel();
+				lo.setImage(lbl);
+				JLabel newLabel = panelScroll.paintImage(l, rectangle, parentPanel,lo.getCombo());
+				lo.setImage(newLabel);
+				
+				parentPanel.repaint();
+				
+			}
+			return;
+		}
+
+		if (src == extent) {
+
+			extent.setSelected(true);
+			viewAc.setSelected(false);
+			int dimListExtents = listExtents.length;
+			if (dimListExtents == 0) {
+
+				comboExtents.setEnabled(false);
+
+			}
+			if (dimListExtents > 0) {
+
+				if (cont == 0) {
+					for (int i = 0; i < dimListExtents; i++) {
+
+						String name = listExtents[i].getDescription();
+						comboExtents.addItem(name);
+						comboExtents.repaint();
+					}
+					cont++;
+				}
+				comboExtents.setEnabled(true);
+				indxsele = comboExtents.getSelectedIndex();
+				rectangle = listExtents[indxsele].getExtent();
+				
+				
+				ArrayList arrL = panelScroll.getNewArrayLayers();
+				
+				for(int k=0;k<arrL.size();k++){
+					
+					LayerObject lo = (LayerObject) arrL.get(k);
+					FLayer l = lo.getLyr();
+					JPanel parentPanel = lo.getParent();
+					parentPanel.remove(lo.getImgLbl());
+					
+					JLabel newLabel = panelScroll.paintImage(l, rectangle, parentPanel,lo.getCombo());
+					lo.setImage(newLabel);
+					
+					parentPanel.repaint();
+					
+				}
+			}
+			return;
+		}
+
+		if (src == comboExtents) {
+
+			if (comboExtents.isEnabled()) {
+				indxsele = comboExtents.getSelectedIndex();
+				rectangle = listExtents[indxsele].getExtent();
+				
+				ArrayList arrL = panelScroll.getNewArrayLayers();
+				
+				for(int k=0;k<arrL.size();k++){
+					
+					LayerObject lo = (LayerObject) arrL.get(k);
+					FLayer l = lo.getLyr();
+					JPanel parentPanel = lo.getParent();
+					parentPanel.remove(lo.getImgLbl());
+					
+					JLabel lbl = new JLabel();
+					lo.setImage(lbl);
+					
+					JLabel newLabel = panelScroll.paintImage(l, rectangle, parentPanel,lo.getCombo());
+					lo.setImage(newLabel);
+					
+					parentPanel.repaint();
+					
+				}
+			}
+			return;
+		}
+
+		if (src == allSelect) {
+			FLayer lyr;
+
+			listLyrsObj = panelScroll.getNewArrayLayers();
+			
+			if (allSelect.isSelected() == true) {
+
+				for (int i = 0; i < listLyrsObj.size(); i++) {
+
+					LayerObject lyrObj = (LayerObject) listLyrsObj.get(i);
+					lyr = (FLayer) lyrObj.getLyr();
+					JCheckBox aux = (JCheckBox) lyrObj.getBox();
+					aux.setSelected(true);
+					JButton buttonAux = (JButton) lyrObj.getButton();
+					JComboBox comboAux = (JComboBox)lyrObj.getCombo();
+					if(lyr instanceof FLyrVect){
+						
+						buttonAux.setEnabled(true);
+						comboAux.setEnabled(true);
+					}	
+					if(lyr instanceof FLyrRaster)
+						comboAux.setEnabled(true);
+				}
+				activateOk();
+			}
+
+			if (allSelect.isSelected() == false) {
+
+				for (int i = 0; i < listLyrsObj.size(); i++) {
+
+					LayerObject lyrObj = (LayerObject) listLyrsObj.get(i);
+					lyr = (FLayer) lyrObj.getLyr();
+					JCheckBox aux = (JCheckBox) lyrObj.getBox();
+					aux.setSelected(false);
+					JButton buttonAux = (JButton) lyrObj.getButton();
+					JComboBox comboAux = (JComboBox)lyrObj.getCombo();
+					buttonAux.setEnabled(false);
+					comboAux.setEnabled(false);
+				}
+				activateOk();
+			}
+			return;
+		}
+
+		if (src == execute) {
+			ExportProcess process = null;
+			File exportFolder = null;
+			
+			if (!validPath(pathImport.getText()) || !validProjectName(nameProy.getText())) {
+				
+				return;
+				
+			} else {
+				String namProy = pathImport.getText() + File.separator + nameProy.getText();
+				process = new ExportProcess(
+						rectangle,
+						nameProy.getText(),
+						namProy,
+						view.getProjection());
+				 
+				exportFolder = new File(namProy);
+				
+				if (exportFolder.exists()) {
+					
+					int option = JOptionPane.showConfirmDialog(this,
+							exportFolder.getAbsolutePath() + " "
+							+ Messages.getString("folder_exists_delete"),
+							Messages.getString("acept"),
+							JOptionPane.YES_NO_OPTION);
+					
+					if (option == JOptionPane.NO_OPTION) {
+						return;
+					} else {
+						deleteFilesIn(exportFolder);
+					}
+					
+				} else {
+					exportFolder.mkdirs();
+				}
+				
+				// NewDir dirOut = new NewDir(namProy);
+				// dirOut.ifExistDir();
+				newdirout = exportFolder; 
+				// get layer list
+				
+				listLyrsObj = panelScroll.getNewArrayLayers();				
+
+				for (int i = 0; i < listLyrsObj.size(); i++) {
+
+					LayerObject objLyr = (LayerObject)listLyrsObj.get(i);
+					JCheckBox box = (JCheckBox) objLyr.getBox();
+					FLayer layer2 = objLyr.getLyr();
+					
+					if (box.isSelected()==true) {
+						logger.debug("Layer " + layer2.getName() + " to be exported");
+						if(layer2 instanceof FLyrVect){
+							JComboBox combo = objLyr.getCombo();
+							// get active combo option
+							int indxSel = combo.getSelectedIndex();
+							String nameOption = (String) combo.getItemAt(indxSel);
+							//Export clip,select, all layer
+							FLyrVect lyr = (FLyrVect) layer2;
+							FieldDescription[] desLayer = objLyr.getDescription();
+							String name = lyr.getName();
+							if (name.toLowerCase().endsWith(".shp"))
+								name=name.substring(0,name.lastIndexOf("."));
+							
+							int processType = VectorialExporterTask.ALL;
+							if (nameOption == PluginServices.getText(this, "cut")) {
+								processType = VectorialExporterTask.CLIPRECT;
+							}
+							if (nameOption == PluginServices.getText(this, "select")) {
+								processType = VectorialExporterTask.SELECTRECT;
+							}
+							if (nameOption == PluginServices.getText(this, "allyr")) {
+								processType = VectorialExporterTask.ALL;
+							}
+							
+							process.addVectorialTask(lyr, desLayer, processType);
+
+						}
+						if(layer2 instanceof FLyrRaster){
+							process.addRasterTask(layer2);
+							
+						}
+						if(layer2 instanceof FLyrWMS){
+							process.addWMSTask(layer2);
+						}
+					}
+				}			
+			
+			process.preProcess();
+			PluginServices.cancelableBackgroundExecution(process);
+
+			
+			}
+			return;
+		}
+		
+		/* CLOSE WINDOW */
+		if (src == cancel) {
+
+				PluginServices.getMDIManager().closeWindow(this);
+				return;
+
+		}
+
+		if (src instanceof JCheckBox) {
+
+			dimArrBx();
+			activateOk();
+
+		}
+
+		// -------------------------------------------------------------------
+		/*
+		 * START SYNCHRONISATION AFTER EXPORTATION
+		 */
+		/*
+		if (src == synchro) {
+			
+			int opt = JOptionPane.showConfirmDialog(this,
+					// 
+					PluginServices.getText(this, "initial_synchro") + "?",
+					PluginServices.getText(this, "synchro"),
+					JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+
+			String errorMessage=null;
+			
+			//list All files in destination exportation folder
+			File directory = new File(pathImport.getText()+File.separator+nameProy.getText());
+			if(directory.exists() && directory.isDirectory()){
+				
+				
+				if (opt == JOptionPane.YES_OPTION) {
+
+					// ------------------------------------- yes ----------------
+					//send ListFileTo OpenMIS synchro
+					
+					try {
+						errorMessage = synchro.sendNewListFile(directory.listFiles(), nameProy.getText());
+					} catch (Exception e) {
+						e.printStackTrace();
+						JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n","error", JOptionPane.ERROR_MESSAGE);
+					}
+					if(errorMessage != null) {
+						JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n"+errorMessage,"error", JOptionPane.ERROR_MESSAGE);
+						
+					}else{
+						//start OpenMIS synchro 
+						try {
+							errorMessage = synchro.launchProjectSynchronisation(nameProy.getText());
+						} catch (Exception e) {
+							JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n","error", JOptionPane.ERROR_MESSAGE);
+							e.printStackTrace();
+						}
+						if(errorMessage != null)
+							JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n"+errorMessage,"error", JOptionPane.ERROR_MESSAGE);
+					}	
+					// ------------------------------------- yes end ----------------
+					
+				} else if (opt == JOptionPane.NO_OPTION) {
+					
+					// ------------------------------------- no ----------------
+					try {
+						errorMessage = synchro.launchProjectSynchronisation(nameProy.getText());
+					} catch (Exception e) {
+						JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n","error", JOptionPane.ERROR_MESSAGE);
+						e.printStackTrace();
+					}
+					if(errorMessage != null)
+						JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\n"+errorMessage,"error", JOptionPane.ERROR_MESSAGE);
+					// ------------------------------------- no end ----------------
+				}
+				
+			}else{
+				JOptionPane.showMessageDialog(null,"Synchronisation Impossible!\nProject directory Not Found","error", JOptionPane.ERROR_MESSAGE);
+			}
+		
+		}		
+*/
+		
+		
+	}
+
+	private boolean validProjectName(String text) {
+		// TODO Auto-generated method stub
+		String aux = text.replaceAll("\\\\", "");
+		aux = aux.replaceAll("/", "");
+		aux = aux.replaceAll("\\.", "");
+		aux = aux.replaceAll("\\*", "");
+		aux = aux.trim();
+		return (aux.length() > 0);
+	}
+
+	private boolean validPath(String text) {
+		return (text.length() > 0);
+	}
+	
+	private void deleteFilesIn(File f) {
+		
+		if (!f.isDirectory()) {
+			logger.error("It is not a folder (?) : " + f.getAbsolutePath());
+			return;
+		}
+		
+		File[] subfiles = f.listFiles();
+		for (int i=0; i<subfiles.length; i++) {
+			if (subfiles[i].isFile()) {
+				try {
+					subfiles[i].delete();
+				} catch (Exception ex) {
+					logger.debug("Unable to delete file: " + subfiles[i].getAbsolutePath());
+				}
+			}
+		}
+	}	
+
+}
+
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/Chooser.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/Chooser.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/Chooser.java	(revision 30230)
@@ -0,0 +1,39 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.Component;
+import java.io.File;
+import javax.swing.JFileChooser;
+import com.iver.andami.PluginServices;
+
+
+/**
+ * Choose the output directory to export the new files
+ * @author Anabel Moreno
+ *
+ */
+public class Chooser {
+
+	public File dirOutPut;
+
+	public String nameDirOut;
+
+	public Chooser() {
+
+		JFileChooser jfc = new JFileChooser();
+
+		/* to choose only directories files */
+		jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+
+		if (jfc.showOpenDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+
+			dirOutPut = jfc.getSelectedFile();
+			nameDirOut = dirOutPut.getAbsolutePath();
+
+		}
+	}
+
+	public String getNameDir() {
+
+		return nameDirOut;
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelIntoScroll.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelIntoScroll.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelIntoScroll.java	(revision 30230)
@@ -0,0 +1,551 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.SystemColor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Rectangle2D;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.apache.log4j.Logger;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+
+import es.prodevelop.gvsig.exportMobile.CreateImage;
+import es.prodevelop.gvsig.exportMobile.LayerObject;
+import es.prodevelop.gvsig.exportMobile.ui.order.ArrayStringOrd;
+import es.prodevelop.gvsig.exportMobile.ui.order.FLayerWithNewName;
+
+/**
+ * SubPanel to the principal panel extension
+ * @author Anabel Moreno
+ *
+ */
+
+public class PanelIntoScroll implements ActionListener {
+	
+	private static Logger logger = Logger.getLogger(PanelIntoScroll.class.getName()); 
+	private static Color color1 = new Color(234,234,234,234);
+	private static Color color2 = new Color(254,237,214);
+	SystemColor a;
+
+	private int height,width;
+	
+	private boolean into = true;
+	
+	private JPanel newPanel = new JPanel();
+		
+	private JComboBox comboActions;
+
+	private JButton chooseAtrib;
+
+	private JCheckBox export;
+
+	private JLabel name, icon, atribute;
+	
+	private ArrayList arrLayers = new ArrayList();
+	
+	private FLayer layer;
+
+	private String nameLayer;
+
+	private ArrayList arrExports = new ArrayList();
+
+	private int numAtribTot, numAtribSelect;
+
+	private LayerAtributes atribPanel;
+
+	private PanelAtribIntoScroll atriLayer;
+
+	private ArrayList arrLabel = new ArrayList();
+
+	private FLayer lyr;
+
+	private boolean open = false;
+
+	private ArrayList allAtrib = new ArrayList();
+
+	private FieldDescription[] arrDescrLyr;
+
+	private int auxabrt, atr;
+
+	private int[] arrOpen;
+
+	private ExportPanel parent;
+
+	private LayerInView lyrVw;
+
+	private Rectangle2D rectangle;
+
+	private boolean lyrIntoView;
+	
+	private ArrayList newArrayLayers = new ArrayList();
+
+	private static int PANEL_WIDTH = 500;
+	
+	private static int COMPONENT_Y = 3;
+
+	private static int AUX = 20;
+	
+	private static int AUX2 = 26;
+
+	public static int EXPORT_X = 8;
+	private static int EXPORT_W = 17;
+	private static int EXPORT_H = 13;
+
+	private static int HEIGHT = 20;
+	public static int NAME_X = 145;
+	private static int NAME_W = 200;
+	
+	public static int IN_VIEW_X = 88;
+
+	public static int ATRIB_X = 335;
+	private static int ATRIB_W = 65;
+
+	public static int CHATRB_X = 385;
+	private static int CHATRB_W = 20;
+
+	public static int CMBOATR_X = 430;
+	private static int CMBOATR_W = 100;
+
+	public static int ICON_X = 45;
+
+	private static String VECTORIAL = "Capa Vectorial";
+
+	private static String RASTER = "Capa no Vectorial";
+	
+	private static String WMS = "WMS";
+
+	
+	/**
+	 * Panel into ExportPanel (scroll)
+	 * 
+	 * @param arLayers,
+	 *            layer list
+	 * @param pa,
+	 *            parent
+	 * @param rect,
+	 *            rectangle
+	 */
+	public PanelIntoScroll(ArrayList arLayers, ExportPanel pa, Rectangle2D rect) {
+
+		rectangle = rect;
+		parent = pa;
+		arrLayers = arLayers;
+		int dim = arrLayers.size();
+		arrOpen = new int[dim];
+		
+		newPanel.setLayout(null);
+		newPanel.setPreferredSize(new Dimension(PANEL_WIDTH, ((dim + 1) * AUX)));
+		newPanel.setBackground(Color.WHITE);
+
+		ArrayStringOrd arrays = new ArrayStringOrd(arLayers);
+		ArrayList arrNames = arrays.getArrayStrings();
+		
+		
+		for (int i=0; i < arrLayers.size(); i++) {
+
+			JPanel layerPanel = new JPanel();
+			layerPanel.setLayout(null);
+			layerPanel.setBounds(0, AUX2*i, 600, AUX2);
+			
+			layer = (FLayer) ((FLayerWithNewName)arrLayers.get(i)).getLayer();
+			nameLayer = layer.getName();
+
+			export = new JCheckBox();
+			export.setBounds(EXPORT_X, COMPONENT_Y+3, EXPORT_W, EXPORT_H);
+			export.addActionListener(parent);
+			export.addActionListener(this);
+
+			name = new JLabel(nameLayer);
+			name.setBounds(NAME_X, COMPONENT_Y, NAME_W, HEIGHT);
+
+			if (open == true) {
+
+				atribute = new JLabel(numAtribSelect + "/" + numAtribTot);
+				atribute.setBounds(ATRIB_X, COMPONENT_Y, ATRIB_W, HEIGHT);
+				arrLabel.add(atribute);
+				
+			} else {
+
+				ArrayList auxArr = new ArrayList();
+				allAtrib.add(auxArr);
+				auxabrt = 0;
+				arrOpen[i] = auxabrt;
+				atriLayer = new PanelAtribIntoScroll(layer, auxArr, auxabrt,null);
+				numAtribTot = atriLayer.getNumAtrib();
+				numAtribSelect = atriLayer.getNumAtribSelected();
+				atribute = new JLabel(numAtribSelect + "/" + numAtribTot);
+				atribute.setBounds(ATRIB_X, COMPONENT_Y, ATRIB_W, HEIGHT);
+				arrLabel.add(atribute);
+
+			}
+
+			chooseAtrib = new JButton("...");
+			chooseAtrib.setBounds(CHATRB_X, COMPONENT_Y, CHATRB_W, HEIGHT);
+			chooseAtrib.addActionListener(this);
+
+			comboActions = new JComboBox();
+			comboActions.setBounds(CMBOATR_X, COMPONENT_Y, CMBOATR_W, HEIGHT);	
+//			comboActions.addItem(PluginServices.getText(this,"select" ));
+//			comboActions.addItem(PluginServices.getText(this,"cut" ));
+//			comboActions.addItem(PluginServices.getText(this, "allyr"));
+//			comboActions.repaint();
+
+//			if (layer.isVisible() == true) 
+//				export.setSelected(true);
+//			else 
+//				export.setSelected(false);
+//			
+			
+			// ICON TO SHOW
+			if (layer instanceof FLyrVect) {
+
+				CreateImage image = new CreateImage();
+				URL path = image.createResourceUrl("images/icolayerV.PNG");
+				ImageIcon imIcon = image.createImageIcon(path, VECTORIAL);
+				height = imIcon.getIconHeight();
+				width = imIcon.getIconWidth();
+				icon = new JLabel(imIcon, JLabel.CENTER);
+				comboActions.addItem(PluginServices.getText(this,"select" ));
+				comboActions.addItem(PluginServices.getText(this,"cut" ));
+				comboActions.addItem(PluginServices.getText(this, "allyr"));
+				comboActions.repaint();
+				
+			} 
+			if (layer instanceof FLyrRaster){
+				
+				CreateImage image = new CreateImage();
+				URL path = image.createResourceUrl("images/lyrR.PNG");
+				ImageIcon imIcon = image.createImageIcon(path, RASTER);
+				height = imIcon.getIconHeight();
+				width = imIcon.getIconWidth();
+				icon = new JLabel(imIcon, JLabel.CENTER);
+				chooseAtrib.setEnabled(false);
+				comboActions.addItem(PluginServices.getText(this,"cut" ));
+				comboActions.addItem(PluginServices.getText(this, "allyr"));
+				comboActions.repaint();
+//				comboActions.removeItemAt(0);
+//				comboActions.setEnabled(true);
+//				comboActions.repaint();
+			
+				
+			}
+			if (layer instanceof FLyrWMS){
+				
+				CreateImage image = new CreateImage();
+				URL path = image.createResourceUrl("images/icoWMS.png");
+				ImageIcon imIcon = image.createImageIcon(path, WMS);
+				height = imIcon.getIconHeight();
+				width = imIcon.getIconWidth();
+				icon = new JLabel(imIcon, JLabel.CENTER);
+				chooseAtrib.setEnabled(false);
+				comboActions.addItem(PluginServices.getText(this,"config"));
+				comboActions.setEnabled(false);
+//				comboActions.removeAllItems();
+//				comboActions.addItem(PluginServices.getText(this,"config"));
+//				comboActions.setSelectedIndex(0);
+//				comboActions.setEnabled(false);
+				comboActions.repaint();
+				
+			}
+			icon.setBounds(ICON_X, COMPONENT_Y+1, height, width);
+
+			
+			if ((layer.isVisible() == true) && (validGeometryType(layer))) {
+				export.setSelected(true);
+				if((layer instanceof FLyrVect)||(layer instanceof FLyrRaster)){
+					comboActions.setEnabled(true);
+					comboActions.repaint();
+					chooseAtrib.setEnabled(true);
+				}
+				
+			}
+			else {
+				export.setSelected(false);
+				chooseAtrib.setEnabled(false);
+				comboActions.setEnabled(false);
+				comboActions.repaint();
+			}
+			
+			
+			
+//			if(export.isSelected()==false){
+//				
+//				chooseAtrib.setEnabled(false);
+//				comboActions.setEnabled(false);
+//				
+//			}
+//			else{
+//				
+//				chooseAtrib.setEnabled(true);
+//				comboActions.setEnabled(true);
+//				
+//			}
+						
+			if((i%2)==1){
+				
+				layerPanel.setBackground(color1);
+				export.setBackground(color1);
+				chooseAtrib.setBackground(color1);
+			}
+			else{
+				layerPanel.setBackground(color2);
+				export.setBackground(color2);
+				chooseAtrib.setBackground(color2);
+			}
+			
+			JLabel isInto = paintImage(layer, rectangle,layerPanel,comboActions);
+
+			// 	adds panel components
+			layerPanel.add(export);
+			layerPanel.add(name);
+			layerPanel.add(icon);
+			layerPanel.add(atribute);
+			layerPanel.add(chooseAtrib);
+			layerPanel.add(comboActions);
+			
+			newPanel.add(layerPanel);
+			arrExports.add(export);
+			
+			//New layer object
+			String newname = (String) arrNames.get(i);
+			LayerObject layerObj = new LayerObject(
+					export,
+					newname,
+					comboActions,
+					layer,
+					chooseAtrib,
+					layerPanel);
+			layerObj.setImage(isInto);
+			if(layerObj.getLyr() instanceof FLyrVect){
+				layerObj.setDescription(atriLayer.getAtribSelected());
+			}
+			else
+				layerObj.setDescription(null);
+			//add object to array
+			newArrayLayers.add(layerObj);
+								
+		}
+	}
+
+	private boolean validGeometryType(FLayer lyr) {
+		
+		if (! (lyr instanceof FLyrVect)) {
+			return true;
+		} else {
+			/*
+			int shp_type = FShape.NULL;
+			
+			try {
+				shp_type = ((FLyrVect) lyr).getShapeType();
+			} catch (DriverException e) {
+				logger.error("While getting shp type: " + e.getMessage());
+				return false;
+			}
+			
+			return (
+					(shp_type == FShape.POLYGON)
+					|| (shp_type == FShape.LINE)
+					|| (shp_type== FShape.POINT));*/
+			return true;
+		}
+	}
+
+	/**
+	 * If layer intersects with the view`s bounds ( rectangle ) paint a tik
+	 * image, but if not intersects paint a X image.
+	 * 
+	 * @param layer,
+	 *            to work
+	 * @param rectang,
+	 *            look if layer intersects with rectangle
+	 */
+	public JLabel paintImage(FLayer layer, Rectangle2D rectang,JPanel parentPanel,JComboBox comboA) {
+
+		lyrVw = new LayerInView(layer, rectang);
+		lyrIntoView = lyrVw.isInView();
+		JLabel isInto;
+		
+		if (lyrIntoView == true) {
+
+			CreateImage image = new CreateImage();
+			URL path = image.createResourceUrl("images/tik.png");
+			ImageIcon img = image.createImageIcon(path, "image into view");
+			int heightInto = img.getIconHeight();
+			int widthInto = img.getIconWidth();
+			isInto = new JLabel(img, JLabel.CENTER);
+			isInto.setBounds(IN_VIEW_X, COMPONENT_Y, heightInto, widthInto);
+			into=true;
+			
+		} else {
+			
+			CreateImage image = new CreateImage();
+			URL path = image.createResourceUrl("images/remove.png");
+			ImageIcon img = image.createImageIcon(path, "image out of view");
+			int heightInto = img.getIconHeight();
+			int widthInto = img.getIconWidth();
+			isInto = new JLabel(img, JLabel.CENTER);
+			isInto.setBounds(IN_VIEW_X, COMPONENT_Y, heightInto, widthInto);
+			into=false;
+			
+		}
+		
+		if((into == false)){
+			
+			comboA.removeAllItems();
+			comboA.addItem(PluginServices.getText(this, "allyr"));
+			
+		}
+		else{
+			comboA.setEnabled(true);
+			comboA.setSelectedIndex(0);
+		}
+		
+		// ---------------- jldominguez - we are not going to cut rasters:
+		if (layer instanceof FLyrRaster) {
+			comboA.removeAllItems();
+			comboA.addItem(PluginServices.getText(this, "allyr"));
+		}
+		// ---------------- 
+
+		parentPanel.add(isInto);
+		return isInto;
+	}
+	
+	
+	public int getSelectedIndex(){
+		
+		return comboActions.getSelectedIndex();
+	}
+	
+		
+	/**
+	 * @return boxs list of all layers
+	 */
+	public ArrayList getarrBox() {
+
+		return arrExports;
+	}
+	
+	
+	/**
+	 * @return panel scroll
+	 */
+	public JPanel getPanel() {
+
+		return newPanel;
+	}
+	
+	/**
+	 * @return array layers
+	 */
+	public ArrayList getNewArrayLayers(){
+		
+		return newArrayLayers;
+	}
+
+	
+	public void actionPerformed(ActionEvent arg0) {
+
+		Object src = arg0.getSource();
+
+		//all type of layers
+		for (int i = 0; i < newArrayLayers.size(); i++) {
+
+			LayerObject lyrObj = (LayerObject) newArrayLayers.get(i);
+			lyr = lyrObj.getLyr();
+			JCheckBox boxExp = lyrObj.getBox();
+			JComboBox combo = lyrObj.getCombo();
+			JButton button = lyrObj.getButton();
+
+			if (src == boxExp) {
+
+				if(boxExp.isSelected()==true){
+					boxExp.setSelected(false);
+					if ((lyr instanceof FLyrVect)){
+						
+						combo.setEnabled(true);
+						button.setEnabled(true);
+						lyrObj.setBoxStatus(true);
+					}	
+					if(lyr instanceof FLyrRaster){
+						
+						combo.setEnabled(true);
+						button.setEnabled(false);
+						lyrObj.setBoxStatus(true);
+					}
+				}
+				else{
+					boxExp.setSelected(true);
+					combo.setEnabled(false);
+					button.setEnabled(false);
+					lyrObj.setBoxStatus(false);
+				}
+					
+				return;
+			}
+
+			// if push atributes button
+			if (src == button) {
+
+				JLabel label = (JLabel) arrLabel.get(i);
+				open = true;
+				atr = arrOpen[i];
+
+				atr++;
+
+				// show panel
+				atribPanel = new LayerAtributes(lyrObj.getLyr(), (ArrayList) allAtrib
+						.get(i), atr);
+				ArrayList aux = atribPanel.getSelectAtrib();
+				PluginServices.getMDIManager().addWindow(atribPanel);
+
+				// when close the panel the label atribute has to change
+				if (atribPanel.isOkPress()) {
+
+					aux = atribPanel.getSelectAtrib();
+					allAtrib.set(i, aux);
+					numAtribTot = atribPanel.getAtrib();
+					numAtribSelect = atribPanel.getAtrSelected();
+					label.setText(numAtribSelect + "/" + numAtribTot);
+
+					newPanel.repaint();
+					arrOpen[i] = atr;
+
+					// get selected atributes FieldDescription[]
+					arrDescrLyr = atribPanel.getAtribSelected();
+
+					// add the new layer`s fieldDescription into a new list
+					lyrObj.setDescription(arrDescrLyr);
+					
+				}
+
+				else {
+
+					numAtribSelect = atriLayer.getNumAtribSelected();
+					atribute = new JLabel(numAtribSelect + "/" + numAtribTot);
+					newPanel.repaint();
+					atr++;
+				}
+				return;
+			}
+		}
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ArrayExtents.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ArrayExtents.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/ArrayExtents.java	(revision 30230)
@@ -0,0 +1,55 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.geom.Rectangle2D;
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.project.ProjectExtent;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+/**
+ * Add to a list the view`s extents,and return the selected extents
+ * @author Anabel Moreno
+ *
+ */
+public class ArrayExtents {
+
+	private ProjectExtent[] listExtent;
+
+	private ProjectExtent extentSelected;
+
+	/**
+	 * Get extents of the view
+	 */
+	public ArrayExtents() {
+
+		View view = (View) PluginServices.getMDIManager().getActiveWindow();
+		listExtent = view.getModel().getProject().getExtents();
+	}
+
+	/**
+	 * @return list extents
+	 */
+	public ProjectExtent[] getlistExt() {
+		return listExtent;
+	}
+
+	/**
+	 * Set extent selected in list extents
+	 * 
+	 * @param selecOpt
+	 */
+	public void setExtSelected(int selecOpt) {
+
+		extentSelected = listExtent[selecOpt];
+	}
+
+	/**
+	 * Get Extents rectangle
+	 * 
+	 * @return
+	 */
+	public Rectangle2D getRectExtents() {
+
+		Rectangle2D rectExtent = extentSelected.getExtent().getBounds2D();
+		return rectExtent;
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelAtribIntoScroll.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelAtribIntoScroll.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/ui/panels/PanelAtribIntoScroll.java	(revision 30230)
@@ -0,0 +1,329 @@
+package es.prodevelop.gvsig.exportMobile.ui.panels;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.util.ArrayList;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+
+/**
+ * Subpanel to select the new layer atributes
+ * @author Anabel Moreno
+ *
+ */
+public class PanelAtribIntoScroll {
+
+	private JPanel panelAtrib = new JPanel();
+
+	private JCheckBox boxAtrib;
+
+	private JLabel etAtrib, typeAtrib;
+
+	private int dim;
+
+	private ArrayList arrBox = new ArrayList();
+
+	private FieldDescription[] atribute;
+
+	private JCheckBox boxAux;
+
+	private LayerAtributes parent;
+
+	private FLayer lyrwn;
+
+	private static int AUX = 3;
+
+	private static int BOXATIB_X = 19;
+
+	private static int BOXATIB_W = 17;
+
+	private static int BOXATIB_H = 13;
+
+	private static int ETATRIB_X = 60;
+
+	private static int ETATRIB_W = 80;
+
+	private static int ETATRIB_H = 20;
+
+	private static int TYPATRB_X = 170;
+
+	private static int TYPATRB_W = 40;
+
+	private static int TYPATRB_H = 20;
+	
+	private static int PLYR_W = 26;
+	
+	private static int PLYR_H = 290;
+		
+
+	/**
+	 * Panel into parent panel LayerAtributes. get layer`s atributes to build a
+	 * list box with this description
+	 * 
+	 * @param layer,
+	 *            layer to work
+	 * @param arSelec,
+	 *            list of layer`s selected atributes
+	 * @param cont,
+	 *            number of selected atributes
+	 * @param pa,
+	 *            parent panel
+	 */
+	public PanelAtribIntoScroll(FLayer layerwn, ArrayList arSelec, int cont,
+			LayerAtributes pa) {
+
+		lyrwn = layerwn;
+		parent = pa;
+
+		try {
+
+			if (lyrwn instanceof FLyrVect) {
+
+				FLyrVect layr = (FLyrVect) lyrwn;
+				/* get field description array */
+				atribute = layr.getRecordset().getFieldsDescription();
+
+				dim = atribute.length;
+				panelAtrib.setLayout(null);
+				panelAtrib.setPreferredSize(new Dimension(0,(dim * PLYR_W)));
+				panelAtrib.setBackground(Color.WHITE);
+
+				for (int i = 0; i < dim; i++) {
+
+					JPanel layerPanel = new JPanel();
+					layerPanel.setLayout(null);
+					layerPanel.setBounds(0, PLYR_W*i,PLYR_H, PLYR_W);
+					
+					boxAtrib = new JCheckBox();
+					boxAtrib.setBounds(BOXATIB_X, AUX+3, BOXATIB_W,
+							BOXATIB_H);
+					boxAtrib.addActionListener(parent);
+
+					if ((cont == 0) || (cont == 1)) {
+
+						boxAtrib.setSelected(true);
+					}
+
+					
+					// add box to aux array
+					arrBox.add(boxAtrib);
+
+					if (cont > 1) {
+
+						boxAux = (JCheckBox) arrBox.get(i);
+
+						// if box was selected 
+						if (boxAux.isSelected() == true)
+							boxAux.setSelected(true);
+						else
+							boxAux.setSelected(false);
+					}
+
+					// get atribute`s name and buil a label with the name
+					FieldDescription aux = (FieldDescription) atribute[i];
+					String name = aux.getFieldName();
+					etAtrib = new JLabel(name);
+					etAtrib.setBounds(ETATRIB_X, AUX, ETATRIB_W,
+							ETATRIB_H);
+
+					int type = aux.getFieldType();
+					String typename = aux.typeToString(type);
+
+					typeAtrib = new JLabel(typename);
+					typeAtrib.setBounds(TYPATRB_X, AUX, TYPATRB_W,
+							TYPATRB_H);
+
+					if((i%2)==1){
+						layerPanel.setBackground(Color.decode("#B0E0E6"));
+						boxAtrib.setBackground(Color.decode("#B0E0E6"));						
+					}
+					else{
+						layerPanel.setBackground(Color.WHITE);
+						boxAtrib.setBackground(Color.WHITE);						
+					}
+					
+					// add box and label
+					layerPanel.add(boxAtrib);
+					layerPanel.add(etAtrib);
+					layerPanel.add(typeAtrib);
+					
+					panelAtrib.add(layerPanel);
+
+				}
+				
+			}
+
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		/*
+		 * when I close the window the selected boxes must be selected the next
+		 * time if the window is open again
+		 */
+
+		int l = arSelec.size();
+		for (int i = 0; i < l; i++) {
+
+			int sel = ((Integer) arSelec.get(i)).intValue();
+			((JCheckBox) arrBox.get(sel)).setSelected(true);
+
+		}
+
+	}
+
+	public ArrayList getArrBox() {
+
+		return arrBox;
+	}
+
+	// invert selection
+	public void setInvSelected() {
+
+		for (int i = 0; i < arrBox.size(); i++) {
+
+			JCheckBox box = (JCheckBox) arrBox.get(i);
+			if (box.isSelected())
+				box.setSelected(false);
+			else
+				box.setSelected(true);
+		}
+	}
+
+	/**
+	 * For any atribute of the list get the atribute`s name and get the number
+	 * of fields, then add the description to a new list
+	 * 
+	 * @return total atributes description
+	 */
+	public FieldDescription[] getAtribTotal() {
+
+		int dimTotal = getNumAtrib();
+		FieldDescription[] atrbTotal = new FieldDescription[dimTotal];
+
+		int cont = 0;
+
+		for (int i = 0; i < atribute.length; i++) {
+
+			// get box selected
+			JCheckBox boxSel = (JCheckBox) arrBox.get(i);
+			if (boxSel.isSelected()) {
+
+				// get atribute`s name wich index is the same that the selected
+				// box
+				FieldDescription atrib = (FieldDescription) atribute[i];
+
+				// get the number of fields that it has and build a new
+				// description
+
+				FieldDescription nuevo = new FieldDescription();
+				nuevo = atrib.cloneField();
+				
+				nuevo.setFieldLength(atrib.getFieldLength()); // jldominguez
+
+				// add description to new FieldDescrption[]
+				atrbTotal[cont] = nuevo;
+				cont = cont + 1;
+			}
+
+		}
+		return atrbTotal;
+	}
+
+	/**
+	 * Get selected atributes
+	 * 
+	 * @return selected description
+	 */
+	public FieldDescription[] getAtribSelected() {
+
+		int dimSelect = getNumAtribSelected();
+		FieldDescription[] atrb = new FieldDescription[dimSelect];
+
+		int cont = 0;
+
+		for (int i = 0; i < atribute.length; i++) {
+
+			// get selected box
+			JCheckBox boxSel = (JCheckBox) arrBox.get(i);
+			if (boxSel.isSelected()) {
+
+				// get name box
+				FieldDescription atrib = (FieldDescription) atribute[i];
+
+				// get atribute`s name wich index is the same that the selected
+				// box
+				FieldDescription nuevo = new FieldDescription();
+				nuevo = atrib.cloneField();
+				
+				nuevo.setFieldLength(atrib.getFieldLength()); // jldominguez
+
+				// add description to new FieldDescrption[]
+				atrb[cont] = nuevo;
+				cont = cont + 1;
+			}
+
+		}
+		return atrb;
+	}
+
+	/**
+	 * @return a list with the selected atributes
+	 */
+	public ArrayList getSelectionAtributs() {
+
+		ArrayList result = new ArrayList();
+		int l = arrBox.size();
+		for (int i = 0; i < l; i++) {
+
+			if (((JCheckBox) arrBox.get(i)).isSelected())
+				result.add(new Integer(i));
+		}
+
+		return result;
+	}
+
+	/**
+	 * @return panel to draw it
+	 */
+	public JPanel getPanel() {
+
+		return panelAtrib;
+
+	}
+
+	/**
+	 * @return number of all layer`s atributes
+	 */
+	public int getNumAtrib() {
+
+		return dim;
+	}
+
+	/**
+	 * @return number of checks selected atributes
+	 */
+	public int getNumAtribSelected() {
+		int res = 0;
+		for (int i = 0; i < dim; i++) {
+			JCheckBox box = (JCheckBox) arrBox.get(i);
+			if (box.isSelected()) {
+
+				res++;
+			}
+		}
+		return res;
+	}
+
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XmlProjectTags.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XmlProjectTags.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XmlProjectTags.java	(revision 30230)
@@ -0,0 +1,42 @@
+package es.prodevelop.gvsig.exportMobile.xml;
+
+
+public class XmlProjectTags {
+
+	private XmlProjectTags(){};
+	
+	public static final String PROJECT = "Project";
+	public static final String B_BOX = "BoundingBox";
+	public static final String X_MIN = "xMin";
+	public static final String X_MAX = "xMax";
+	public static final String Y_MIN = "yMin";
+	public static final String Y_MAX = "yMax";
+	public static final String NAME = "Name";
+	public static final String VISIBLE = "Visible";
+	public static final String SCALE_MAX = "ScaleMax";
+	public static final String SCALE_MIN = "ScaleMin";
+	public static final String LAYERS = "Layers";
+	public static final String LAYER = "Layer";
+	public static final String TYPE = "Type";
+	public static final String PATH = "Path";
+	public static final String STYLE = "Style";
+	public static final String POINT_SYMBOL = "PointSymbol";
+	public static final String LINE_SYMBOL = "LineSymbol";
+	public static final String POLYGON_SYMBOL = "PolygonSymbol";
+	public static final String COLOR = "Color";
+	public static final String SIZE = "Size";
+	public static final String FILL_COLOR = "FillColor";
+	public static final String FILL = "Fill";
+	public static final String WMSCONFIG = "WMSConfig";
+	public static final String LAYER_NAME = "LayerName";
+	public static final String URL = "URL";
+	public static final String LAYERQUERY = "LayerQuery";
+	// public static final String SRS = "SRS";
+	public static final String IMAGE_FORMAT = "ImageFormat";
+	public static final String TRANSPARENCY = "Transparency";
+	public static final String WMSLAYERS = "WmsLayers";
+	public static final String WSMSTYLES = "WmsStyles";
+	public static final String CRS = "CRS";
+	
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLlyr.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLlyr.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLlyr.java	(revision 30230)
@@ -0,0 +1,172 @@
+package es.prodevelop.gvsig.exportMobile.xml;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.rendering.SingleSymbolLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialIntervalLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend;
+import com.iver.utiles.StringUtilities;
+
+/**
+ * 
+ * @author amoreno
+ *
+ */
+public class XMLlyr {
+
+	private FLayer layer;
+	private String color;
+	private String colorFill;
+	private int size;
+	private int fill;
+
+	public  XMLlyr(){
+		
+	}
+	
+	public String getColor(){
+		return this.color;
+	}
+	public int getSize(){
+		return this.size;
+	}
+	public int getFill(){
+		return this.fill;
+	}
+	public String getColorFill(){
+		return this.colorFill;
+	}
+	
+		
+	public void createTextToXML(FLayer lyr, int shpType){
+		
+		layer = lyr;
+		if(layer instanceof FLyrVect){
+			
+			FLyrVect layerV = (FLyrVect) layer;
+			try {
+				
+				FSymbol symbol = null;
+				if (shpType == FShape.LINE) {
+					
+					VectorialLegend vleg = (VectorialLegend)layerV.getLegend();
+					if (vleg instanceof SingleSymbolLegend){
+						symbol = (FSymbol)((SingleSymbolLegend)vleg).getDefaultSymbol();
+					}
+					//tomar de vectorialintervallegend y vectorialuniquevaluelegend el primer valor
+					//como symbol, y luego de symbol obtener lo que necesitemos
+					if(vleg instanceof VectorialIntervalLegend){
+						
+						symbol = (FSymbol)((VectorialIntervalLegend)vleg).getSymbol(0);
+					}
+					if(vleg instanceof VectorialUniqueValueLegend){
+						
+						symbol = (FSymbol)((VectorialUniqueValueLegend)vleg).getSymbol(0);
+					}
+					Color col=symbol.getColor();
+					this.color = StringUtilities.color2String(col);
+					
+					// instead of symbol.getSize(), we have to use this:
+					// jldominguez
+					int stroke_width = Math.round(((BasicStroke) symbol.getStroke()).getLineWidth());
+					this.size = stroke_width;
+				}
+				
+				if(shpType == FShape.POINT){
+					
+					VectorialLegend vleg = (VectorialLegend)layerV.getLegend();
+					if (vleg instanceof SingleSymbolLegend){
+						symbol = (FSymbol)((SingleSymbolLegend)vleg).getDefaultSymbol();
+					}
+					//tomar de vectorialintervallegend y vectorialuniquevaluelegend el primer valor
+					//como symbol, y luego de symbol obtener lo que necesitemos
+					if(vleg instanceof VectorialIntervalLegend){
+						
+						symbol = (FSymbol)((VectorialIntervalLegend)vleg).getSymbol(0);
+					}
+					if(vleg instanceof VectorialUniqueValueLegend){
+						
+						symbol = (FSymbol)((VectorialUniqueValueLegend)vleg).getSymbol(0);
+					}
+					Color col=symbol.getColor();
+					this.color = StringUtilities.color2String(col);
+					
+					// instead of symbol.getSize(), we have to use this:
+					// jldominguez
+					if (symbol.isSizeInPixels()) {
+						size = symbol.getSize();
+					} else {
+						// TODO calcular el tamanyo en pixeles
+						size = 3;
+					}
+				}
+				
+				
+				if(shpType == FShape.POLYGON){
+					
+					VectorialLegend vleg = (VectorialLegend)layerV.getLegend();
+					if (vleg instanceof SingleSymbolLegend){
+						symbol = (FSymbol)((SingleSymbolLegend)vleg).getDefaultSymbol();
+					}
+					//tomar de vectorialintervallegend y vectorialuniquevaluelegend el primer valor
+					//como symbol, y luego de symbol obtener lo que necesitemos
+					if(vleg instanceof VectorialIntervalLegend){
+						
+						symbol = (FSymbol)((VectorialIntervalLegend)vleg).getSymbol(0);
+					}
+					if(vleg instanceof VectorialUniqueValueLegend){
+						
+						symbol = (FSymbol)((VectorialUniqueValueLegend)vleg).getSymbol(0);
+					}
+					Color colFill=symbol.getColor();
+					
+					
+					// there was a np exception when polygons were not filled
+					// jldominguez
+					if (colFill == null) {
+						this.colorFill = StringUtilities.color2String(Color.WHITE);
+						fill = 0;
+					} else {
+						this.colorFill = StringUtilities.color2String(colFill);
+						fill = 1;
+					}
+
+					// instead of symbol.getSize(), we have to use this:
+					// jldominguez
+					int stroke_width = Math.round(((BasicStroke) symbol.getStroke()).getLineWidth());
+					this.size = stroke_width;
+
+					Color col = symbol.getOutlineColor();
+					
+					// there was a np exception when polygons were not filled
+					// jldominguez
+					if (col == null) {
+						this.color = StringUtilities.color2String(Color.BLACK);
+					} else {
+						this.color = StringUtilities.color2String(col);
+					}
+
+					/*
+					int symboltype = symbol.getSymbolType();
+					FConstant f = null;
+					if(symboltype == f.SYMBOL_TYPE_FILL)
+						this.fill=1;
+					else
+						this.fill=0;
+						*/	
+				}
+			} catch (IndexOutOfBoundsException e) {
+				e.printStackTrace();
+			} catch (DriverException e) {
+				e.printStackTrace();
+			}
+		}		
+	}	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLwms.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLwms.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLwms.java	(revision 30230)
@@ -0,0 +1,91 @@
+package es.prodevelop.gvsig.exportMobile.xml;
+
+
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.XMLException;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+import com.iver.utiles.xmlEntity.generate.Property;
+
+/**
+ * get wms layer properties and create its xml project
+ * @author Anabel Moreno
+ *
+ */
+public class XMLwms implements XMLgetter{
+
+	private static int NAME = 2;
+	
+	private static int URL = 10;
+	
+	private static int LAYERQUERY = 12;
+	
+	private static int CAPLAYERSTYLES = 21;
+	
+	private static int CRS = 14;
+	
+	private static int IMAGEFORMAT = 13;
+	
+	private static int TRANSPARENCY = 6;
+	
+	XmlBuilder xml;
+	
+	private FLayer layerWMS;
+	
+	public void setxml(FLayer layerwn,XmlBuilder xml_builder){
+		
+		this.layerWMS = layerwn;
+		this.xml = xml_builder;
+	}
+				
+	public void createXML(){
+		
+		Property[] pr;
+		try {
+			pr = layerWMS.getXMLEntity().getXmlTag().getProperty();
+			//<WMSCONFIG>
+			//xml.openTag(XmlProjectTags.WMSCONFIG);
+				xml.writeTag(XmlProjectTags.TYPE, "WMS");
+				//<LAYERNAME>
+				xml.writeTag(XmlProjectTags.NAME, layerWMS.getName());
+				//</LAYERNAME>
+				
+				//<URL>
+				xml.writeTag(XmlProjectTags.URL,pr[URL].getValue());
+				//</URL>
+				
+				//<LAYERQUERY>
+				//xml.openTag(XmlProjectTags.LAYERQUERY);
+					
+					//<NAME>
+					xml.writeTag(XmlProjectTags.WMSLAYERS, pr[LAYERQUERY].getValue());
+					//</NAME>
+						
+					//<STYLE>
+					xml.writeTag(XmlProjectTags.WSMSTYLES,pr[CAPLAYERSTYLES].getValue());
+					//</STYLE>
+						
+				//xml.closeTag();
+				//</LAYERQUERY>
+				
+				
+				//<SRS>
+				xml.writeTag(XmlProjectTags.CRS, pr[CRS].getValue());
+				//</SRS>
+				
+				//<IMAGEFORMAT>
+				xml.writeTag(XmlProjectTags.IMAGE_FORMAT, pr[IMAGEFORMAT].getValue());
+				//</IMAGEFORMAT>
+				
+				//<TRANSPARENCY>
+				xml.writeTag(XmlProjectTags.TRANSPARENCY,pr[TRANSPARENCY].getValue());
+				//</TRANSPARENCY>
+				
+			//xml.closeTag();
+			//</WMSCONFIG>
+			
+		} catch (XMLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Bounds.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Bounds.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Bounds.java	(revision 30230)
@@ -0,0 +1,52 @@
+package es.prodevelop.gvsig.exportMobile.xml;
+
+import java.awt.geom.Rectangle2D;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+
+/**
+ * Get bounds of view and create new tags to the xml project
+ * @author Anabel Moreno
+ *
+ */
+public class Bounds extends Rectangle2D.Double implements XMLgetter {
+	public static final String tag = "bounds";
+	
+	public XmlBuilder xml;
+	
+	public static Bounds createBounds(Rectangle2D rect){
+		Bounds bounds = new Bounds();
+		bounds.setRect(rect);
+		return bounds;
+	}
+	
+	public void setXML(XmlBuilder xml_builder){
+		
+		this.xml = xml_builder;
+	}
+	
+	public void createXML(){
+		
+		//<Bounds>
+		xml.openTag(XmlProjectTags.B_BOX);
+		
+			//<xMin>
+			xml.writeTag(XmlProjectTags.X_MIN,java.lang.Double.toString(this.getMinX()));
+			//</xMin>
+			
+			//<xMax>
+			xml.writeTag(XmlProjectTags.X_MAX,java.lang.Double.toString(this.getMaxX()));
+			//</xMax>
+			
+			//<yMin>
+			xml.writeTag(XmlProjectTags.Y_MIN,java.lang.Double.toString(this.getMinY()));
+			//</yMin>
+			
+			//<yMax>
+			xml.writeTag(XmlProjectTags.Y_MAX,java.lang.Double.toString(this.getMaxY()));
+			//</yMax>
+			
+		xml.closeTag();
+		//</Bounds>
+	}
+	
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLgetter.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLgetter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/XMLgetter.java	(revision 30230)
@@ -0,0 +1,5 @@
+package es.prodevelop.gvsig.exportMobile.xml;
+
+public interface XMLgetter {
+	void createXML();
+}
Index: tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Style.java
===================================================================
--- tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Style.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/mobile/desktop/extensions/extExportMobile/src/es/prodevelop/gvsig/exportMobile/xml/Style.java	(revision 30230)
@@ -0,0 +1,124 @@
+
+package es.prodevelop.gvsig.exportMobile.xml;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.rendering.XmlBuilder;
+
+/**
+ * Get style of a layer, and create a new tag
+ * @author Anabel Moreno
+ *
+ */
+
+public class Style implements XMLgetter{
+
+	FLayer lyr;
+	String color;
+	String colorFill;
+	int size;
+	int fill;
+	XmlBuilder xml;
+	int shpType;
+	
+	public void setXML(XmlBuilder xml_builder){
+		
+		this.xml = xml_builder;
+	}
+	
+	public void setLayer(FLayer layer, int shpType){
+		this.lyr = layer;
+		this.shpType=shpType;
+	}
+	
+	
+	public void createXML(){
+		
+		XMLlyr xmlyr = new XMLlyr();
+		xmlyr.createTextToXML(lyr, shpType);
+		FLyrVect lyrV = (FLyrVect) lyr;
+		
+		//<Style>
+		xml.openTag(XmlProjectTags.STYLE);
+		
+		//try {
+			
+			if(shpType == FShape.POINT){
+				
+				//<PointSymbol>
+				xml.openTag(XmlProjectTags.POINT_SYMBOL);
+				
+					//<Color>
+					xml.writeTag(XmlProjectTags.COLOR, xmlyr.getColor());
+					//</Color>
+					
+					//<Size>
+					xml.writeTag(XmlProjectTags.SIZE, java.lang.Integer.toString(xmlyr.getSize()));
+					//</Size>
+					
+				xml.closeTag();
+				//</PointSymbol>
+				
+			}
+			if(shpType == FShape.LINE){
+				
+				//<LineSymbol>
+				xml.openTag(XmlProjectTags.LINE_SYMBOL);
+				
+					//<Color>
+					xml.writeTag(XmlProjectTags.COLOR, xmlyr.getColor());
+					//</Color>
+					
+					//<Size>
+					xml.writeTag(XmlProjectTags.SIZE, java.lang.Integer.toString(xmlyr.getSize()));
+					//</Size>
+					
+				xml.closeTag();
+				//</LineSymbol>
+				
+			}
+			
+			
+			if(shpType == FShape.POLYGON){
+				
+				//<PoligonSymbol>
+				xml.openTag(XmlProjectTags.POLYGON_SYMBOL);
+				
+					//<LineSymbol>
+					xml.openTag(XmlProjectTags.LINE_SYMBOL);
+					
+						//<Color>
+						xml.writeTag(XmlProjectTags.COLOR, xmlyr.getColor());
+						//</Color>
+						
+						//<Size>
+						xml.writeTag(XmlProjectTags.SIZE, java.lang.Integer.toString(xmlyr.getSize()));
+						//</Size>
+						
+					xml.closeTag();
+					//</LineSymbol>
+				
+					//<FillColor>
+					xml.writeTag(XmlProjectTags.FILL_COLOR, xmlyr.getColorFill());
+					//</FillColor>
+					
+					//<Fill>
+					xml.writeTag(XmlProjectTags.FILL, java.lang.Integer.toString(xmlyr.getFill()));
+					//</FillColor>
+				xml.closeTag();
+				//</PoligonSymbol>
+							
+			}
+		/*} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}*/
+			
+		
+		xml.closeTag();
+		//</Style>
+
+		
+	}
+}
Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.xml	(revision 30230)
@@ -0,0 +1,143 @@
+<project name="Generar extension en Andami" default="generate-without-source" basedir=".">
+    <description>
+        Instala el plugin de ejemplo en Andami.
+    </description>
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="dist-src-name"  value="dist-src"/>
+  <property name="dist-src"  location="${dist-src-name}"/>
+  <property name="plugin" value="com.iver.cit.gvsig.graph"/>
+  <property name="plugin-fmap-gvsig" value="com.iver.cit.gvsig.graph-fmap-gvsig"/>
+  <property name="plugin-graph-gvsig" value="com.iver.cit.gvsig.graph-gvsig"/>
+  <property name="extension-dir" location="../_fwAndami/gvSIG/extensiones"/>
+  <property name="mainPlugin" value="com.iver.cit.gvsig" />
+  <property name="fmapLibs"  location="../libFMap/lib"/>
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+    <mkdir dir="${dist}"/>
+
+  </target>
+	
+  <target name="generate-source-package">
+  	<delete dir="${dist-src}" quiet="yes"/>
+  	<mkdir dir="${dist-src}"/>
+  	<basename file="${basedir}" property="extensionProjectDir"/>
+  	<mkdir dir="${dist-src}/${extensionProjectDir}"/>
+    <copy todir="${dist-src}/${extensionProjectDir}">
+      <fileset dir="${basedir}"/>
+    </copy>
+  	<copy todir="${dist-src}">
+  		<fileset dir="${basedir}/install/resources" includes="Leeme-predes.txt, Readme-predes.txt"/>
+  	</copy>
+  	<delete dir="${dist-src}/${extensionProjectDir}/bin"/>
+  	<mkdir dir="${dist-src}/${extensionProjectDir}/bin"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/src-test"/>
+  	<mkdir dir="${dist-src}/${extensionProjectDir}/src-test"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/install"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/dist" quiet="yes"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/dist-src" quiet="yes"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/test-files" quiet="yes"/>
+  	<delete dir="${dist-src}/${extensionProjectDir}/test-file" quiet="yes"/>
+  	<loadproperties srcFile="build.number"/>
+  	<replace casesensitive="true"
+  	  	token="#build.number#"
+  		value="${build.number}"
+  		dir="${dist-src}"
+  		includes="Leeme-predes.txt, Readme-predes.txt"/>  		
+  	 <zip destfile="${dist-src}/gvSIG_pilot_redes-10_${build.number}-src.zip"
+  	       basedir="${dist-src-name}"
+  	       excludes="*.zip"
+  	  />
+  		
+  </target>
+	
+  <target name="buildNumber">
+	<propertyfile
+			file="build.number"
+			comment="Build Number for ANT. Do not edit!">
+			<entry  key="build.number" default="0" type="int" operation="+"/>
+	</propertyfile>
+	<property file="build.number"/>
+  </target>
+
+  <target name="distribution"
+	description="increment build number and generate the distribution without the source file"
+	depends="buildNumber,generate-without-source">
+  </target>
+	
+  <target name="generate-without-source" description="generate the distribution without the source file" >
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+    <mkdir dir="${dist}/lib"/>
+
+
+
+    <!--
+    - ->
+    <jar jarfile="${fmapLibs}/jts-1.7.jar" basedir="${build}" update="yes" includes="com/vividsolutions/**"/>
+
+    <!- - Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
+    <jar jarfile="${dist}/lib/${plugin-fmap-gvsig}.jar" basedir="${build}" includes="com/iver/cit/fmap/**,com/iver/cit/gvsig/**,com/iver/cit/project/**"
+     excludes="com/iver/cit/gvsig/project/documents/view/**" />
+    <jar jarfile="${dist}/lib/${plugin}.jar" basedir="${build}" includes="com/iver/cit/**"/>
+  	<jar jarfile="${extension-dir}/${mainPlugin}/lib/${plugin-graph-gvsig}.jar"
+  			basedir="${build}"
+  			includes="com/iver/cit/gvsig/project/documents/view/**"
+  			/>
+
+
+    <copy file="config/config.xml" todir="${dist}"/>
+    <copy file="config/about.htm" todir="${dist}"/>
+  	<loadproperties srcFile="build.number"/>
+  	<replace casesensitive="true"
+  		file="${dist}/about.htm"
+  	  	token="#build.number#"
+  		value="${build.number}"/>
+  	<copy file="build.number" todir="${dist}"/>
+    <copy todir="${dist}">
+      <fileset dir="config/" includes="text*.properties"/>
+    </copy>
+    <copy todir="${dist}/lib">
+      <fileset dir="lib" includes="*"/>
+    </copy>
+    <copy todir="${dist}/images">
+      <fileset dir="images/" includes="*"/>
+    </copy>
+    <copy todir="${dist}/symbols">
+      <fileset dir="symbols/" includes="**/**"/>
+    </copy>
+
+    <copy todir="${extension-dir}/${plugin}/">
+      <!--<fileset dir="${dist}" includes="**/**"/>-->
+      <fileset dir="${dist}">
+      	<exclude name="**/${plugin-fmap-gvsig}.jar"/>
+      	<include name="**/**"/>
+	  </fileset>
+    </copy>
+  	<copy todir="${extension-dir}/${mainPlugin}/lib/">
+  	  		<fileset dir="${dist}/lib" includes="**/${plugin-fmap-gvsig}.jar"/>
+  	</copy>
+  <!--${extension-dir}/${mainPlugin}/lib/${mainPlugin}.jar	<copy todir="${fmapLibs}">
+  		<fileset dir="${dist}/lib" includes="**/${plugin-fmap-gvsig}.jar"/>
+  	</copy> -->
+ 	<delete dir="${dist}"/>
+    </target>
+
+    <target name="save-gvsig-jar-to-install-dir" description="Save the gvsig.jar to installdir" >
+  	<!-- ******************************* -->
+
+  	<copy todir="./install">
+  		<fileset dir="${extension-dir}/com.iver.cit.gvsig/lib/">
+  			<include name="{plugin-graph-gvsig}.jar"/>
+		</fileset>
+  	</copy>
+  	<!-- ******************************* -->
+
+  </target>
+</project>
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.classpath
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.classpath	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.classpath	(revision 30230)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-test"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="/_fwAndami"/>
+	<classpathentry kind="src" path="/libFMap"/>
+	<classpathentry kind="src" path="/libCq CMS for java"/>
+	<classpathentry kind="src" path="/libIverUtiles"/>
+	<classpathentry kind="src" path="/appgvSIG"/>
+	<classpathentry kind="lib" path="lib/colt.jar"/>
+	<classpathentry kind="lib" path="lib/commons-collections-3.2.jar"/>
+	<classpathentry sourcepath="/JUNG_1_7_4" kind="lib" path="lib/jung-1.7.4.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/libGDBMS"/>
+	<classpathentry sourcepath="ECLIPSE_HOME/plugins/org.eclipse.jdt.source_3.1.1/src/org.junit_3.8.1/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extGeoProcessing"/>
+	<classpathentry sourcepath="D:/eclipse_3_1/workspace_pruebas/jts/src" kind="lib" path="/libFMap/lib/jts-1.7.jar"/>
+	<classpathentry kind="lib" path="/appgvSIG/lib/batik-awt-util.jar"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/castor-0.9.5.3-xml.jar"/>
+	<classpathentry sourcepath="/libUI/src" kind="lib" path="/_fwAndami/lib/beans.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extCAD"/>
+	<classpathentry sourcepath="/libDriverManager" kind="lib" path="/libFMap/lib/driver-manager-1.1.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.classpath
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/test_files/ejes.dbf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/test_files/ejes.dbf
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.project
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.project	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.project	(revision 30230)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>extGraph_predes</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>de.loskutov.FileSync.FSBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.project
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworJdbcWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworJdbcWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworJdbcWriter.java	(revision 30230)
@@ -0,0 +1,74 @@
+package com.iver.cit.gvsig.graphtests;
+
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.crs.CRSFactory;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.writers.dbf.DbfWriter;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.graph.core.writers.NetworkJdbcWriter;
+
+public class TestNetworJdbcWriter extends TestCase {
+	NetworkJdbcWriter netBuilder = new NetworkJdbcWriter();
+	FLyrVect lyr;
+	/*
+	 * Test method for
+	 * 'com.iver.cit.gvsig.graph.core.NetworkWriter.writeNetwork()'
+	 */
+	public void testWriteNetwork() {
+		try {
+			long t1 = System.currentTimeMillis();
+			netBuilder.writeNetwork();
+			long t2 = System.currentTimeMillis();
+			System.out.println("Building MYSQL time:" + (t2-t1) + " msecs.");
+		} catch (EditionException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+
+	protected void setUp() throws Exception {
+		LayerFactory
+				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+		File shpFile = new File("c:/ejes.shp");
+		lyr = (FLyrVect) LayerFactory.createLayer("Ejes",
+				"gvSIG shp driver", shpFile, prj);
+
+		String fieldType = "tipored";
+		String fieldDist = "length";
+		String fieldCost = "cost";
+		String fieldSense = "";
+
+		netBuilder.setLayer(lyr);
+		netBuilder.setFieldCost(fieldCost);
+		netBuilder.setFieldType(fieldType);
+		netBuilder.setFieldDist(fieldDist);
+		netBuilder.setFieldSense(fieldSense);
+
+        String dbURL = "jdbc:mysql://localhost:3306/test";  
+        String user = "root";
+        String pwd = "aquilina";
+        Connection conn;
+		conn = DriverManager.getConnection(dbURL, user, pwd);
+
+		netBuilder.setConnection(conn);
+		
+		
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworJdbcWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkRedWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkRedWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkRedWriter.java	(revision 30230)
@@ -0,0 +1,67 @@
+package com.iver.cit.gvsig.graphtests;
+
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+
+import com.iver.cit.gvsig.fmap.crs.CRSFactory;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.graph.core.writers.NetworkFileRedWriter;
+
+public class TestNetworkRedWriter extends TestCase {
+	NetworkFileRedWriter netBuilder = new NetworkFileRedWriter();
+	FLyrVect lyr;
+	File redFile;
+	/*
+	 * Test method for
+	 * 'com.iver.cit.gvsig.graph.core.NetworkWriter.writeNetwork()'
+	 */
+	public void testWriteNetwork() {
+		try {
+			long t1 = System.currentTimeMillis();
+			netBuilder.writeNetwork();
+			long t2 = System.currentTimeMillis();
+			System.out.println("Building RED time:" + (t2-t1) + " msecs.");
+		} catch (EditionException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+
+	protected void setUp() throws Exception {
+		LayerFactory
+				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+		File shpFile = new File("c:/ejes.shp");
+		lyr = (FLyrVect) LayerFactory.createLayer("Ejes",
+				"gvSIG shp driver", shpFile, prj);
+
+		String redFilePath = lyr.getName().replaceFirst("\\Q.shp\\E", "");
+		redFile = new File("c:/" + redFilePath + ".red");
+		
+		redFile.delete();
+		
+		String fieldType = "tipored";
+		String fieldDist = "length";
+		String fieldCost = "cost";
+		String fieldSense = "";
+
+		netBuilder.setLayer(lyr);
+		netBuilder.setFieldCost(fieldCost);
+		netBuilder.setFieldType(fieldType);
+		netBuilder.setFieldDist(fieldDist);
+		netBuilder.setFieldSense(fieldSense);
+		
+		netBuilder.setRedFile(redFile);
+		
+		
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkRedWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestAngle.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestAngle.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestAngle.java	(revision 30230)
@@ -0,0 +1,111 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graphtests;
+
+import com.iver.cit.gvsig.graph.core.TurnUtil;
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+
+import junit.framework.TestCase;
+
+public class TestAngle extends TestCase {
+	
+	public void testAngle() {
+		Coordinate c1, c2, c3;
+		double grados;
+		
+		// 0 grados (no hay giro
+		c1 = new Coordinate(-1, 0);
+		c2 = new Coordinate(0, 0);
+		c3 = new Coordinate(1, 0);
+		grados = TurnUtil.angle(c1, c2, c3);
+		assertEquals(0.0, grados, 0.0);
+		
+		
+		// 90 grados (giro a la izquierda)
+		c1 = new Coordinate(0, -1);
+		c2 = new Coordinate(0, 0);
+		c3 = new Coordinate(-1, 0);
+		grados = TurnUtil.angle(c1, c2, c3);
+		assertEquals(90.0, grados, 0.0);
+
+		
+		// 180 grados (360 grados) giro completo
+		c1 = new Coordinate(-1, 0);
+		c2 = new Coordinate(0, 0);
+		c3 = new Coordinate(-1, 0);
+		grados = TurnUtil.angle(c1, c2, c3);
+		assertEquals(180.0, grados, 0.0);
+		
+		// 270 grados (giro a la derecha)
+		c1 = new Coordinate(-1, 0);
+		c2 = new Coordinate(0, 0);
+		c3 = new Coordinate(0, 1);
+		grados = TurnUtil.angle(c1, c2, c3);
+		assertEquals(270.0, grados, 0.0);
+		
+	}
+	
+	private double angle(Coordinate c1, Coordinate c2, Coordinate c3) {
+		double resul = 0.0;
+		// Normalizamos:
+		Coordinate origin = new Coordinate(0.0, 0.0);
+		Coordinate cAux1 = new Coordinate(c2.x-c1.x, c2.y-c1.y);
+		Coordinate cAux2 = new Coordinate(c3.x-c2.x, c3.y-c2.y);
+		LineSegment v1 = new LineSegment(origin, cAux1);
+		LineSegment v2 = new LineSegment(origin, cAux2);
+		double jtsResul = CGAlgorithms.orientationIndex(c1, c2, c3);
+		double prodEscalar = cAux1.x*cAux2.x + cAux1.y*cAux2.y;
+		double cosAlpha = prodEscalar / (v1.getLength() * v2.getLength()) ; 
+		resul = Math.toDegrees(Math.acos(cosAlpha));
+		
+        if (cAux1.x * cAux2.y > cAux1.y * cAux2.x) {
+            resul = 360 - resul;
+        }
+
+		System.out.println(resul);
+		return resul;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestAngle.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestLoader.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestLoader.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestLoader.java	(revision 30230)
@@ -0,0 +1,201 @@
+package com.iver.cit.gvsig.graphtests;
+
+
+import java.io.File;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+
+import com.hardcode.driverManager.DriverLoadException;
+import com.hardcode.driverManager.DriverValidation;
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.NoSuchTableException;
+import com.hardcode.gdbms.engine.data.driver.DBDriver;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.data.driver.FileDriver;
+import com.hardcode.gdbms.engine.data.driver.ObjectDriver;
+import com.iver.cit.gvsig.fmap.crs.CRSFactory;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.EdgeWeightLabeller;
+import com.iver.cit.gvsig.graph.core.FNode;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.JungGraph;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.core.loaders.NetworkLoader;
+import com.iver.cit.gvsig.graph.core.loaders.NetworkRedLoader;
+import com.iver.cit.gvsig.graph.solvers.Route;
+import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverAStar;
+import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverDijkstra;
+
+import edu.uci.ics.jung.algorithms.shortestpath.DijkstraDistance;
+import edu.uci.ics.jung.algorithms.shortestpath.DijkstraShortestPath;
+import edu.uci.ics.jung.graph.ArchetypeVertex;
+import edu.uci.ics.jung.graph.Graph;
+
+public class TestLoader extends TestCase {
+	DataSourceFactory dsf;
+
+	FLyrVect lyr;
+
+	public void testLoadRedNetwork() {
+		NetworkRedLoader netLoader = new NetworkRedLoader();
+		IGraph g = netLoader.loadNetwork();
+
+		// Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
+		Network net = new Network();
+		ShortestPathSolverDijkstra solver = new ShortestPathSolverDijkstra();
+		net.setLayer(lyr);
+		net.setGraph(g);
+		solver.setNetwork(net);
+		
+		ShortestPathSolverAStar solverAstar = new ShortestPathSolverAStar();
+		solverAstar.setNetwork(net);
+		
+		try {
+
+			// Primer punto
+			net.addFlag(433647.09370, 4488029, 10);
+
+			// Segundo punto
+			net.addFlag(437290.96875, 4481547, 10);
+			long t1 = System.currentTimeMillis();
+			Route resul;
+			solver.setFielStreetName("Nombre");
+			resul = solver.calculateRoute();
+			long t2 = System.currentTimeMillis();
+
+			// assertEquals(dist.doubleValue(), 8887, 0);
+
+			System.out.println("fjp dist =" + resul.getLength()
+					+ " meters. msecs: " + (t2 - t1));
+
+			t1 = System.currentTimeMillis();
+			Route resul2;
+			solverAstar.setFielStreetName("Nombre");
+			resul2 = solverAstar.calculateRoute();
+			t2 = System.currentTimeMillis();
+
+			System.out.println("ASTAR dist =" + resul2.getLength()
+					+ " meters. msecs: " + (t2 - t1));
+			
+			assertEquals(resul.getLength(), resul2.getLength(), 0.0);
+			
+			JungGraph jG = new JungGraph(g);
+			// Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
+			DijkstraShortestPath distCalculator = new DijkstraShortestPath(jG,
+					new EdgeWeightLabeller());
+			FNode vOrig = jG.getVertexByID(1);
+			FNode vEnd = jG.getVertexByID(1000);
+			t1 = System.currentTimeMillis();
+			Number dist = distCalculator.getDistance(vOrig, vEnd);
+			t2 = System.currentTimeMillis();
+
+			// assertEquals(dist.doubleValue(), 8887, 0);
+
+			System.out
+					.println("dist =" + dist + " meters. msecs: " + (t2 - t1));
+
+			System.out.println(vOrig + " - " + vEnd);
+			System.out.println(vOrig.getX() + ", " + vOrig.getY() + " - "
+					+ vEnd.getX() + ", " + vEnd.getY());
+			
+			assertEquals(resul.getLength(), dist.doubleValue(), 0.4);
+
+		} catch (GraphException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+	}
+
+	/*
+	 * Test method for
+	 * 'com.iver.cit.gvsig.graph.core.NetworkLoader.loadNetwork()'
+	 */
+	public void testLoadNetwork() {
+		// if (true) return;
+		NetworkLoader netLoader = new NetworkLoader(true);
+
+		DataSource dsNodes;
+		try {
+			dsNodes = dsf.createRandomDataSource("nodes",
+					DataSourceFactory.MANUAL_OPENING);
+
+			DataSource dsEdges = dsf.createRandomDataSource("edges",
+					DataSourceFactory.MANUAL_OPENING);
+
+			SelectableDataSource sdsNodes = new SelectableDataSource(dsNodes);
+			SelectableDataSource sdsEdges = new SelectableDataSource(dsEdges);
+
+			netLoader.setNodeReader(sdsNodes);
+			netLoader.setEdgeReader(sdsEdges);
+
+			Graph g = netLoader.loadJungNetwork();
+
+			System.out.println("Num nodos=" + g.numVertices() + " numEdges = "
+					+ g.numEdges());
+
+			// Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
+			DijkstraDistance distCalculator = new DijkstraDistance(g,
+					new EdgeWeightLabeller());
+			ArchetypeVertex vOrig = netLoader.getIndexer().getVertex(1);
+			ArchetypeVertex vEnd = netLoader.getIndexer().getVertex(1000);
+			long t1 = System.currentTimeMillis();
+			Number dist = distCalculator.getDistance(vOrig, vEnd);
+			long t2 = System.currentTimeMillis();
+
+			// assertEquals(dist.doubleValue(), 8887, 0);
+
+			System.out
+					.println("dist =" + dist + " meters. msecs: " + (t2 - t1));
+			System.out.println(vOrig + " - " + vEnd);
+			System.out.println(vOrig.getUserDatum("X") + ", "
+					+ vOrig.getUserDatum("Y") + " - " + vEnd.getUserDatum("X")
+					+ ", " + vEnd.getUserDatum("Y"));
+
+		} catch (DriverLoadException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (NoSuchTableException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+	}
+
+	protected void setUp() throws Exception {
+		// Setup de los drivers
+		LayerFactory
+				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+
+		// Setup del factory de DataSources
+		dsf = LayerFactory.getDataSourceFactory();
+
+		// Setup de las tablas
+		dsf.addFileDataSource("gdbms dbf driver", "nodes", "c:/nodes.dbf");
+		dsf.addFileDataSource("gdbms dbf driver", "edges", "c:/edges.dbf");
+
+		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+		File shpFile = new File("c:/ejes.shp");
+		lyr = (FLyrVect) LayerFactory.createLayer("Ejes", "gvSIG shp driver",
+				shpFile, prj);
+
+	}
+
+	protected void tearDown() throws Exception {
+		// TODO Auto-generated method stub
+		super.tearDown();
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestLoader.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestOneToMany.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestOneToMany.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestOneToMany.java	(revision 30230)
@@ -0,0 +1,89 @@
+package com.iver.cit.gvsig.graphtests;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+
+import com.iver.cit.gvsig.fmap.crs.CRSFactory;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.core.loaders.NetworkRedLoader;
+import com.iver.cit.gvsig.graph.solvers.OneToManySolver;
+import com.iver.cit.gvsig.graph.solvers.Route;
+
+public class TestOneToMany extends TestCase {
+
+	FLyrVect lyr;
+	Network net;
+	IGraph g;
+
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		// Setup de los drivers
+		LayerFactory
+				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+
+		// Setup del factory de DataSources
+
+		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+		File shpFile = new File("test_files/ejes.shp");
+		lyr = (FLyrVect) LayerFactory.createLayer("Ejes", "gvSIG shp driver",
+				shpFile, prj);
+		
+		NetworkRedLoader netLoader = new NetworkRedLoader();
+		netLoader.setNetFile(new File("test_files/ejes.net"));
+		g = netLoader.loadNetwork();
+		
+		net = new Network();
+		
+		
+		
+		
+		
+		
+		
+	}
+
+	public void testCalculate() throws GraphException {
+		OneToManySolver solver = new OneToManySolver();
+		net.setLayer(lyr);
+		net.setGraph(g);
+		solver.setNetwork(net);
+		
+		//		 Source flag
+		GvFlag sourceFlag = net.createFlag(441901, 4475977, 10);
+		solver.setSourceFlag(sourceFlag);
+
+		//		 Destination flags
+		net.addFlag(441901, 4475977, 10);
+		net.addFlag(442830, 4476201, 200);
+		net.addFlag(442673, 4475125, 200);
+		long t1 = System.currentTimeMillis();
+		solver.putDestinationsOnNetwork();
+		solver.calculate();
+		solver.removeDestinationsFromNetwork();
+		long t2 = System.currentTimeMillis();
+		System.out.println("tiempo:" + (t2-t1));
+		
+		GvFlag flags[] = net.getFlags();
+
+		for (int i=0; i < flags.length; i++)
+		{
+			System.out.println("Flag " + i + " " + flags[i].getCost());
+		}
+		// assertEquals(dist.doubleValue(), 8887, 0);
+
+		
+		
+
+
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestOneToMany.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/AllTests.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/AllTests.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/AllTests.java	(revision 30230)
@@ -0,0 +1,20 @@
+package com.iver.cit.gvsig.graphtests;
+
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for com.iver.cit.gvsig.graph.test");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(TestLoader.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/AllTests.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkGvTableWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkGvTableWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkGvTableWriter.java	(revision 30230)
@@ -0,0 +1,84 @@
+package com.iver.cit.gvsig.graphtests;
+
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+
+import com.hardcode.gdbms.driver.mysql.MySQLDriver;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.crs.CRSFactory;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.writers.JdbcWriter;
+import com.iver.cit.gvsig.fmap.edition.writers.dbf.DbfWriter;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.writers.NetworkFileRedWriter;
+import com.iver.cit.gvsig.graph.core.writers.NetworkGvTableWriter;
+
+public class TestNetworkGvTableWriter extends TestCase {
+	NetworkGvTableWriter netBuilder = new NetworkGvTableWriter();
+	FLyrVect lyr;
+	/*
+	 * Test method for
+	 * 'com.iver.cit.gvsig.graph.core.NetworkWriter.writeNetwork()'
+	 */
+	public void testWriteNetwork() {
+		try {
+			long t1 = System.currentTimeMillis();
+			netBuilder.writeNetwork();
+			long t2 = System.currentTimeMillis();
+			System.out.println("Building DBF time:" + (t2-t1) + " msecs.");
+		} catch (EditionException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+
+	protected void setUp() throws Exception {
+		LayerFactory
+				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+		File shpFile = new File("c:/ejes.shp");
+		lyr = (FLyrVect) LayerFactory.createLayer("Ejes",
+				"gvSIG shp driver", shpFile, prj);
+
+		String fieldType = "tipored";
+		String fieldDist = "length";
+		String fieldCost = "cost";
+		String fieldSense = "";
+
+		netBuilder.setLayer(lyr);
+		netBuilder.setFieldCost(fieldCost);
+		netBuilder.setFieldType(fieldType);
+		netBuilder.setFieldDist(fieldDist);
+		netBuilder.setFieldSense(fieldSense);
+		DbfWriter nodeWriter = new DbfWriter();
+		File nodeFile = new File("c:/nodes.dbf");
+		nodeFile.delete();
+		nodeWriter.setFile(nodeFile);
+
+		File edgeFile = new File("c:/edges.dbf");
+		DbfWriter edgeWriter = new DbfWriter();
+		edgeWriter.setFile(edgeFile);
+		
+		
+		netBuilder.setEdgeWriter(edgeWriter);
+		netBuilder.setNodeWriter(nodeWriter);
+		
+		
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src-test/com/iver/cit/gvsig/graphtests/TestNetworkGvTableWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/config.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/config.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/config.xml	(revision 30230)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<libraries library-dir="./lib">
+	</libraries>
+	<depends plugin-name="com.iver.cit.gvsig"/>
+	<depends plugin-name="com.iver.cit.gvsig.geoprocess"/>
+	<depends plugin-name="com.iver.cit.gvsig.cad"/>
+		<resourceBundle name="text"/>
+	<extensions>
+		<!-- <extension class-name="com.iver.cit.gvsig.SymbolTest"
+			description="Symbol test"
+			active="true">
+			<menu text="Test/Symbol test"	tooltip="Try symbol"
+				action-command="DALE!"
+			 />
+			
+		</extension> -->
+		<extension class-name="com.iver.cit.gvsig.graph.GenerateNetworkExtension"
+			description="Generate Network Extension for gvSIG."
+			active="true">
+			<menu text="Network/Create_Network"	tooltip="Generar_Red"
+				action-command="GENERATE_RED"
+				icon="images/build_graph.gif" />
+
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.graph.LoadNetworkExtension"
+			description="Load Network for gvSIG."
+			active="true">
+
+			<menu text="Network/Load_Network"	tooltip="Load_Red"
+				action-command="LOAD_RED"
+				icon="images/network.png" />
+				
+<!--			<menu text="Network/Load_Network_from_tables"	tooltip="Load_Red"
+				action-command="LOAD_NETWORK_FROM_TABLES"
+				icon="images/network.png" /> -->
+
+		</extension>
+		
+		<extension class-name="com.iver.cit.gvsig.graph.ManageFlagsExtension"
+			description="Manage flags."
+			active="true">
+			<menu text="Network/Manage_Flags"	tooltip="Manage_Flags"
+				action-command="MANAGE_FLAGS"
+				icon="images/manage_flags.png" />
+			
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.graph.ShortestPathExtension"
+			description="Shortest path"
+			active="true">
+			<menu text="Network/separator" is_separator="true"/>
+
+			<menu text="Network/Shortest_Path"	tooltip="Shortest_Path"
+				action-command="SHORTEST_PATH"
+				icon="images/shortest_path.png" />
+			<tool-bar name="Networks">
+				<action-tool icon="images/shortest_path.png"
+					action-command="SHORTEST_PATH"
+					tooltip="shortestpath"
+					position="1"/>
+			</tool-bar>
+
+		</extension>
+
+		<!-- <extension class-name="com.iver.cit.gvsig.graph.ServiceAreaExtension"
+			description="Service Area"
+			active="true">
+
+
+			<menu text="Network/Service_Area"	tooltip="Service_Area"
+				action-command="LABEL_NODE_DISTANCES"
+				icon="images/shortest_path.png" />
+
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.graph.ODMatrixExtension"
+			description="ODMATRIX"
+			active="true">
+			<menu text="Network/ODMatrix" icon="images/gtk-about.png" action-command="ODMATRIX"/> 
+		</extension> -->
+
+		<extension class-name="com.iver.cit.gvsig.graph.ClearRouteExtension"
+			description="Remove routes"
+			active="true">
+			<menu text="Network/separator" is_separator="true"/>
+			<menu text="Network/Clear/Clear_Routes" action-command="CLEAR_ROUTES"  />
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.graph.ClearFlagsExtension"
+			description="Remove routes"
+			active="true">
+			<menu text="Network/Clear/Clear_Flags" action-command="CLEAR_FLAGS"  />
+		</extension>
+		<extension class-name="com.iver.cit.gvsig.graph.ClearBarriersExtension"
+			description="Remove barriers"
+			active="true">
+			<menu text="Network/Clear/Clear_Barriers" action-command="CLEAR_BARRIERS"  />
+		</extension>
+
+
+		<extension class-name="com.iver.cit.gvsig.graph.NetworkAddFlag"
+			description="Flags"
+			active="true">
+			<tool-bar name="Networks">
+				<selectable-tool icon="images/add_flag_on_arc.png"
+					action-command="ADD_FLAG_TO_NETWORK"
+					tooltip="put_flag_on_arc"
+					position="2"/>
+				<selectable-tool icon="images/add_flag_on_node.png"
+					action-command="ADD_FLAG_TO_NODE"
+					tooltip="put_flag_on_node"
+					position="3"/>
+				<selectable-tool icon="images/no_way.png"
+					action-command="ADD_BARRIER"
+					tooltip="put_barrier"
+					position="4"/>
+					
+			</tool-bar>
+		</extension>
+		<!-- <extension class-name="com.iver.cit.gvsig.graph.TopologyExtension"
+			description="Extensión para crear topología."
+			active="true">
+			<menu text="Capa/Topology_Test/Clean_Test" action-command="CLEAN"/>
+			<menu text="Capa/Topology_Test/Show Errors" action-command="SHOW_ERRORS"/>
+			<menu text="Capa/Topology_Test/Triangulation_Test" action-command="TRIANGULATION"/>
+		</extension> -->
+
+		<extension class-name="com.iver.cit.gvsig.topology.lineclean.RegisterGeoprocessPlugin"
+			description="Extensiones de geoprocesamiento"
+			active="true" />
+
+		<extension class-name="com.iver.cit.gvsig.AboutGraphExtension"
+			description="Extension to add about panel."
+			active="true"/>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/config.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text.properties
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text.properties	(revision 30230)
@@ -0,0 +1,153 @@
+Aplicar_tolerancia_de_snap=Usar tolerancia para crear la topolog\u00EDa de red
+Aplicar_un_CLEAN_sobre_la_capa_original=Corregir topol\u00F3gicamente la capa original
+Calcular_la_red_sobre_la_capa_original=Calcular la red sobre la capa original
+center_on_flag=Centrar sobre parada
+Clean_de_lineas=Correcci\u00F3n autom\u00E1tica de errores topol\u00F3gicos
+Clean_Test=Clean
+Clear=Borrar
+Clear_Barriers=Quitar todas las barreras
+Clear_Flags=Quitar todas las paradas
+Clear_Routes=Borrar todas las rutas
+Conversion_de_datos=Conversi\u00F3n de datos
+Create_Network=Generar topolog\u00EDa de red
+de=de
+Defines_a_dot_density_symbol_based_on_a_field_value=Define simbolog\u00EDa de densidad de puntos basada en el valor de un campo determinado
+Error_ejecucion=Error de ejecuci\u00f3n
+Error_entrada_datos=Error de entrada de datos
+Error_entrada_datos=
+Error_escritura_resultados=Error de escritura de resultados
+Error_fallo_geoproceso=Se ha producido un fallo durante la ejecuci\u00f3n del geoproceso
+Error_preparar_escritura_resultados=Se ha producido un error al preparar la capa de resultados
+Error_seleccionar_resultado=Es necesario especificar un fichero de resultados
+Especifique_fichero_shp_resultante=Especifique el fichera Shape resultante
+Fichero_para_capa_corregida=Fichero para la capa corregida
+Generando_red_a_partir_de_capa_lineal=Generando red a partir de capa lineal
+Generar_Red==Generar topolog\u00EDa de red
+Limpiando_lineas=Limpiando l\u00EDneas
+LineClean=Correcci\u00F3n de errores topol\u00F3gicos en capa lineal
+LineClean._Progress_Message=Corrigiendo topolog\u00EDa de la capa...
+Load_Network=Cargar topolog\u00EDa de red previamente generada
+Load_Red=Cargar fichero de topolog\u00EDa de red previamente calculado
+Manage_Flags=Gesti\u00F3n de paradas
+Network=Red
+no_se_puede_pasar_por_todas_las_paradas=No se puede pasar por todas las paradas
+Procesando_linea=Construyendo red
+Ruta_borrada_o_inexistente=Ruta borrada o inexistente
+Ruta_no_encontrada=Ruta no encontrada
+Seleccionar_capa_con_puntos_de_parada=Convertir capa en puntos de parada
+Seleccione_una_capa_de_puntos_para_crear_paradas=Escoja una capa de puntos para importar paradas
+Seleccione_un_formato_para_guardar_la_ruta=Seleccione un formato vectorial para guardar la ruta mas reciente.
+Seleccione_un_formato_para_guardar_los_flags=Seleccione un formato vectorial para guardar las paradas.
+Shortest_Path=Camino m\u00EDnimo
+Trabajar_con_las_coordenadas_originales=Trabajar con las coordenadas originales
+angle=\u00E1ngulo
+based_upon_the_road_type=
+cannot_apply_to_a_non_polygon_layer=S\u00F3lo se puede aplicar la leyenda a una capa de pol\u00EDgonos
+change=cambiar
+character_marker=Marcador de car\u00E1cter
+character_marker_symbol=S\u00EDmbolo Marcador de car\u00E1cter
+choose_marker=Elija marcador
+color=color
+cost=coste
+cost_field=campo de coste
+cost_field_text=Cost
+cost_from_a_table_field=
+cost_units=unidades de coste
+cost_units_text=unidades de coste
+could_not_find_symbol_directory=
+could_not_setup_legend=No se pudo crear la leyenda. Por favor, revise los valores
+create_network=Generar topolog\u00EDa de red
+criterium=Criterio
+densities=Densidades
+done=hecho
+dot_density=Densidad de puntos
+dot_size=Tama\u00F1o de punto
+dot_value=Valor del punto
+enable=habilitado
+explanation_sense_field=<html>1-> Seg\u00FAn est\u00E1 digitalizado<br>2-> inverso<br>3-> Se puede circular en los 2 sentidos)</html>
+feet=pies
+field_configuration=Configuraci\u00F3n de campos
+fill_color=Color de relleno
+fill_properties=Propiedades de relleno
+flag_amount=N\u00BA de paradas
+generate_report=Ver informe de ruta
+grid=Malla
+high=Alta
+hours=horas
+inches=pulgadas
+invalid_layer=capa inv\u00E1lida
+la_capa_no_tiene_red_asociada=La capa no tiene ninguna red asociada
+labelling_field=Campo de densidad
+layer=capa
+layers=Capas
+length_field_text=Length
+line_symbols=s\u00EDmbolos de l\u00EDnea
+load_stages=Cargar paradas
+low=Baja
+marker_fill=Relleno de marcadores
+medium=Media
+meters=metros
+miles=millas
+millimeters=
+minutes=
+monetary=
+nautic_miles=
+net_analyst=
+new_flag=Nueva parada
+offset=Desplazamiento
+options=opciones
+outline=Borde
+outline_color=Color del borde
+outline_color=Color del borde
+outline_width=Tama\u00F1o del borde
+point_symbols=S\u00EDmbolos para puntos
+polygon_symbols=S\u00EDmbolos para pol\u00EDgonos
+preview=Previsualizaci\u00F3n
+properties=Propiedades
+put_barrier=Establecer tramo prohibido
+put_flag_on_arc=Situar parada encima de tramo
+put_flag_on_node=Situar parada encima de nodo
+random=Aleatorio
+reset=Limpiar
+route_control_panel=Gestor de paradas
+save=Guardar
+save_error=Error guardando
+save_route=Salvar ruta
+save_stages=Salvar paradas
+seconds=segundos
+select_length_field=Seleccione el campo de longitud (metros)
+select_sense_field=Seleccione el campo de sentido
+select_street_route_field_name=Seleccione el campo para crear el informe de ruta (nombre de v\u00EDa por donde se pasa)
+select_type_field=Seleccione el campo de tipo de v\u00EDa.
+sense_field_text=Direction
+separation=Separaci\u00F3n
+shape_type_not_yet_supported=
+shortest_path_not_found=No se ha encontrado ninguna ruta.
+shortestpath=Camino m\u00EDnimo
+simple_fill=Relleno sencillo
+size=tama\u00F1o
+solucion_no_valida=Solución no valida
+stage=parada
+symbol_library=
+symbol_property_editor=Editor de propiedades del s\u00EDmbolo
+symbol_selector=
+Topology_Test=Topología
+Triangulation_Test=Triangulacion
+total_route_cost=
+trying_to_add_a_non_TypeSymbolEditor_panel=Se est\u00E1 intentando a\u00F1adir un panel que no es del tipo TypeSymbolEditor
+two_panels_with_the_same_name=Dos paneles con el mismo nombre
+type=Tipo
+type_field_text=
+units=Unidades
+unknown_longitude_units=
+unknown_time_units=
+unknown_units=
+use_line_length=Usar longitud de l\u00EDnea
+use_symbol=
+width=ancho
+yards=
+piloto_de_redes=Piloto de redes
+msg_set_velocities=Por favor, establezca la velocidad para cada tipo de tramo (en Km / hora)
+col_arc_type=Tipo de via
+col_km_per_hour=Km/hora
+set_velocities=Fijar velocidades

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/about.htm
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/about.htm	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/about.htm	(revision 30230)
@@ -0,0 +1,21 @@
+<html>
+  <head>
+    <title>Extesi&oacute;n del piloto de redes.</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+<table width="60%" border="0">
+  <tr>
+    <td width="64%"><img src="images/logo_horiz_bicolor_gva.png" width="329" height="50"></td>
+    <td width="36%"><div align="right"><img src="images/logoIver.png" width="87" height="50"></div></td>
+  </tr>
+  <tr>
+    <td colspan="2"><font face="Arial, Helvetica, sans-serif">&copy; Copyright
+      Generalitat Valenciana, IVER T.I. 2007.</font></td>
+  </tr>
+</table>
+  <h3>Piloto gandador del concurso de Redes.</h3>
+  <p><br><br><b> Build Number: #build.number#</b></p>
+  </body>
+</html>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/about.htm
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_en.properties
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_en.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_en.properties	(revision 30230)
@@ -0,0 +1,129 @@
+Aplicar_tolerancia_de_snap=Apply snap tolerance
+Aplicar_un_CLEAN_sobre_la_capa_original=CLEAN the original layer
+Calcular_la_red_sobre_la_capa_original=Compute the net over the original layer
+Clean_de_lineas=Line clean
+Conversion_de_datos=Data conversion
+de=of
+Defines_a_dot_density_symbol_based_on_a_field_value=Defines a dot density symbol based on a value of a given field
+Error_ejecucion=Execution error
+Error_entrada_datos=Data entry error
+Error_entrada_datos=Data entry error
+Error_escritura_resultados=Error writing results
+Error_fallo_geoproceso=Error in geoprocess execution
+Error_preparar_escritura_resultados=Error preparing writing of results
+Error_seleccionar_resultado=You must select a result file layer
+Especifique_fichero_shp_resultante=Specify a resulting Shape file
+Fichero_para_capa_corregida=File for corrected layer
+Limpiando_lineas=Cleaning lines
+LineClean=Topology errors correction in lineal vectorial layer.
+LineClean._Progress_Message=Cleaning topology of layer...
+Generando_red_a_partir_de_capa_lineal=Create network from layer of lines
+Procesando_linea=Building network
+Ruta_borrada_o_inexistente=Route deleted or inexisting
+Ruta_no_encontrada=Route not found
+Seleccionar_capa_con_puntos_de_parada=Creating flags from a point layer
+Seleccione_una_capa_de_puntos_para_crear_paradas=Choose a point layer whose features will be converted in flags
+Seleccione_un_formato_para_guardar_la_ruta=Choose a format to save the lastest route. 
+Seleccione_un_formato_para_guardar_los_flags=Choose a format to save flags.
+Trabajar_con_las_coordenadas_originales=Work with original coordinates
+angle=Angle
+based_upon_the_road_type=Based upon the road type
+cannot_apply_to_a_non_polygon_layer=Cannot apply to a non polygon layer
+change=Change
+character_marker=Character marker
+character_marker_symbol=Character marker
+choose_marker=Choose marker
+color=Color
+cost=Cost
+cost_field=Cost field
+cost_field_text=<html>Explicaci\u00F3n cost</html>
+cost_from_a_table_field=Compute cost from a table\u0092s field
+cost_units=Cost units
+cost_units_text=<html>Explicaci\u00F3n cost units</html>
+could_not_find_symbol_directory=Unable to locate the symbol\u0092s library\u0092s source folder
+could_not_setup_legend=Could not setup legend. Please check values.
+create_network=Create Network
+criterium=Criterium
+densities=Densities
+done=Done
+dot_density=Dot density
+dot_size=Dot size
+dot_value=Dot value
+enable=Enable
+feet=Feet
+field_configuration=Field configuration
+fill_color=Fill color
+fill_color=Fill color
+fill_properties=Fill properties
+flag_amount=Flag amount
+grid=Grid
+high=High
+hours=Hours
+inches=Inches
+invalid_layer=Invalid layer
+la_capa_no_tiene_red_asociada=
+labelling_field=Labelling field
+layers=Layers
+length_field_text=<html>Explicaci\u00F3n campo longitud</html>
+line_symbols=Line Symbols
+load_stages=Load stages
+low=Low
+marker_fill=Marker fill
+medium=Medium
+meters=Meters
+miles=Miles
+millimeters=Millimeters
+minutes=Minutes
+monetary=Monetary
+nautic_miles=Nautic miles
+net_analyst=Net Analyst
+new_flag=New flag
+offset=Offset
+options=Options
+outline=Outline
+outline_color=Outline color
+outline_width=Outline width
+point_symbols=Point symbols
+polygon_symbols=Polygon symbols
+preview=Preview
+properties=Properties
+random=Random
+reset=Reset
+route_control_panel=Route control panel
+save=Save
+save_error=Error saving
+save_route=Save route
+save_stages=Save stages
+seconds=Seconds
+select_length_field=Select length field
+select_sense_field=Select sense field
+select_street_route_field_name=
+select_type_field=Select type field
+sense_field_text=<html>Explicaci\u00F3n sense text field</html>
+separation=Separation
+shape_type_not_yet_supported=Shape type not yet supported
+shortest_path_not_found=
+simple_fill=Simple fill
+size=Size
+stage=Stage
+symbol_library=Symbol library
+symbol_property_editor=Symbol property editor
+symbol_selector=Symbol selector
+total_route_cost=Total route cost
+trying_to_add_a_non_TypeSymbolEditor_panel=Attempting to add a non TypeSymbolEditor panel
+two_panels_with_the_same_name=Two panels with the same name
+type=Type
+type_field_text=<html>Explicaci\u00F3n type text field</html>
+units=Units
+unknown_longitude_units=Unknown longitude units
+unknown_time_units=Unknown time units
+unknown_units=Unkown units
+use_line_length=Use line length
+use_symbol=Use symbol
+width=Width
+yards=Yards
+piloto_de_redes=
+msg_set_velocities=Please, set speeds for each type of arc (Km / hour)
+col_arc_type=Arc Type
+col_km_per_hour=Km/hour
+set_velocities=Set speeds

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_en.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_ca.properties
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_ca.properties	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_ca.properties	(revision 30230)
@@ -0,0 +1,65 @@
+Clean_de_lineas=
+Conversion_de_datos=
+Error_ejecucion=
+Error_entrada_datos=
+Error_entrada_datos=
+Error_escritura_resultados=
+Error_fallo_geoproceso=
+Error_preparar_escritura_resultados=
+Error_seleccionar_resultado=
+LineClean=
+angle=
+based_upon_the_road_type=
+change=
+color=
+cost=
+cost_field=
+cost_field_text=
+cost_from_a_table_field=
+cost_units=
+cost_units_text=
+could_not_find_symbol_directory=
+create_network=
+done=
+enable=
+feet=
+flag_amount=
+hours=
+inches=
+invalid_layer=
+length_field_text=
+line_symbols=
+load_stages=
+meters=
+miles=
+millimeters=
+minutes=
+monetary=
+nautic_miles=
+net_analyst=
+new_flag=
+options=
+point_symbols=
+polygon_symbols=
+preview=
+properties=
+save_stages=
+seconds=
+select_length_field=
+select_sense_field=
+select_type_field=
+sense_field_text=
+shape_type_not_yet_supported=
+size=
+stage=
+symbol_library=
+symbol_selector=
+total_route_cost=
+type_field_text=
+unknown_longitude_units=
+unknown_time_units=
+unknown_units=
+use_line_length=
+use_symbol=
+yards=
+piloto_de_redes=
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/config/text_ca.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/medium-density-sample.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/medium-density-sample.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/up-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/up-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/net-wizard-logo.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/net-wizard-logo.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/disconnect_co_004.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/disconnect_co_004.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/lmust_not_dangle.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/lmust_not_dangle.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/drapeau_arrivee.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/drapeau_arrivee.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/turn-left.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/turn-left.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/net-analyst-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/net-analyst-icon.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/pushpin.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/pushpin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/logoIver.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/logoIver.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/network.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/network.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/ValoresUnicos.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/ValoresUnicos.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-about.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-about.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/icon_pushpin.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/icon_pushpin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/down-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/down-arrow.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/layers.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/layers.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/drapeau_depart.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/drapeau_depart.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/build_graph.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/build_graph.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/locked.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/locked.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/delete.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add-layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add-layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-right.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-right.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/unlocked.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/unlocked.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/high-density-sample.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/high-density-sample.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-left.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/gtk-go-left.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/logo_horiz_bicolor_gva.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/logo_horiz_bicolor_gva.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add_flag_on_node.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add_flag_on_node.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/orange_flag_26_26.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/orange_flag_26_26.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/plantilla.htm
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/plantilla.htm	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/plantilla.htm	(revision 30230)
@@ -0,0 +1,21 @@
+<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
+<html>
+<head>
+<title>Documento sin t&iacute;tulo</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<style type='text/css'>
+<!--   .normal { 	font-family: Arial, Helvetica, sans-serif;	font-size: 10px; font-style: normal; color: #0000FF;} --> 
+</style>
+
+</head>
+
+<body>
+<h1>Informe de Ruta:SOMONTES AL PALACIO DE LA REAL QUINTA-MONTE CARMELO</h1>
+<br>Salida desde: <b>SOMONTES AL PALACIO DE LA REAL QUINTA</b><br>
+Llegada a:<b> MONTE CARMELO</b><br>Longitud total del trayecto: <b>9,020.31</b>
+<hr width ="70%">
+<table>
+<tr>
+<td><img src="images/drapeau_depart.gif"></td><td class='normal'>1. Salir de:<b> SOMONTES AL PALACIO DE LA REAL QUINTA</b></td></tr><tr><td class='normal'><a href="0">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>2 Continúe por <b>SOMONTES AL PALACIO DE LA REAL QUINTA</b> durante  447.44 y  gire a la <b>izquierda</b> por <b>M-30 (CTRA DEL PARDO)</b></td></tr><tr><td>Distancia acumulada:</td><td>447.44</td></tr><tr><td><a href="0">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>3 Continúe por <b>M-30 (CTRA DEL PARDO)</b> durante  2,320.58 y  gire a la <b>izquierda</b> por <b>LA ALBERCA</b></td></tr><tr><td>Distancia acumulada:</td><td>2,768.02</td></tr><tr><td><a href="1,2,3">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-right.png"></td><td class='normal'>4 Continúe por <b>LA ALBERCA</b> durante  355.99 y  gire a la <b>derecha</b> por <b>SOMONTES</b></td></tr><tr><td>Distancia acumulada:</td><td>3,124.01</td></tr><tr><td><a href="4,5,6">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>5 Continúe por <b>SOMONTES</b> durante  136.05 y  gire a la <b>izquierda</b> por <b>TORREBELEÑA</b></td></tr><tr><td>Distancia acumulada:</td><td>3,260.06</td></tr><tr><td><a href="7">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-right.png"></td><td class='normal'>6 Continúe por <b>TORREBELEÑA</b> durante  289.31 y  gire a la <b>derecha</b> por <b>SIGUERO</b></td></tr><tr><td>Distancia acumulada:</td><td>3,549.37</td></tr><tr><td><a href="8,9">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-right.png"></td><td class='normal'>7 Continúe por <b>SIGUERO</b> durante  92.16 y  gire a la <b>derecha</b> por <b>NAVARREDONDA DE GREDOS</b></td></tr><tr><td>Distancia acumulada:</td><td>3,641.53</td></tr><tr><td><a href="10">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>8 Continúe por <b>NAVARREDONDA DE GREDOS</b> durante  322.42 y  gire a la <b>izquierda</b> por <b>FRESNEDILLAS</b></td></tr><tr><td>Distancia acumulada:</td><td>3,963.95</td></tr><tr><td><a href="11">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>9 Continúe por <b>FRESNEDILLAS</b> durante  315.69 y  gire a la <b>izquierda</b> por <b>BRAOJOS</b></td></tr><tr><td>Distancia acumulada:</td><td>4,279.64</td></tr><tr><td><a href="12,13">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>10 Continúe por <b>BRAOJOS</b> durante  98.91 y  gire a la <b>izquierda</b> por <b>ARROYO DEL FRESNO</b></td></tr><tr><td>Distancia acumulada:</td><td>4,378.55</td></tr><tr><td><a href="14">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>11 Continúe por <b>ARROYO DEL FRESNO</b> durante  1,506.38 y  gire a la <b>izquierda</b> por <b>BURGOS (MONTECARMELO)</b></td></tr><tr><td>Distancia acumulada:</td><td>5,884.93</td></tr><tr><td><a href="15,16">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>12 Continúe por <b>BURGOS (MONTECARMELO)</b> durante  428.68 y  gire a la <b>izquierda</b> por <b>MONTIJA</b></td></tr><tr><td>Distancia acumulada:</td><td>6,313.61</td></tr><tr><td><a href="17">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-right.png"></td><td class='normal'>13 Continúe por <b>MONTIJA</b> durante  999.9 y  gire a la <b>derecha</b> por <b>OTERUELO DEL VALLE</b></td></tr><tr><td>Distancia acumulada:</td><td>7,313.51</td></tr><tr><td><a href="18,19">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>14 Continúe por <b>OTERUELO DEL VALLE</b> durante  95.17 y  gire a la <b>izquierda</b> por <b>RASCAFRIA</b></td></tr><tr><td>Distancia acumulada:</td><td>7,408.68</td></tr><tr><td><a href="20">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-right.png"></td><td class='normal'>15 Continúe por <b>RASCAFRIA</b> durante  259.48 y  gire a la <b>derecha</b> por <b>CELEORAMA GOMEZ</b></td></tr><tr><td>Distancia acumulada:</td><td>7,668.16</td></tr><tr><td><a href="21">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/gtk-go-left.png"></td><td class='normal'>16 Continúe por <b>CELEORAMA GOMEZ</b> durante  82.8 y  gire a la <b>izquierda</b> por <b>VILELA</b></td></tr><tr><td>Distancia acumulada:</td><td>7,750.96</td></tr><tr><td><a href="22">Ver sobre el mapa</a><td></tr></table><hr width ="70%"><table><tr><td><img src="images/drapeau_arrivee.gif"></td><td>16. Llegada: MONTE CARMELO</td></tr><tr><td>Longitud:</td><td>9,020.31</td></tr><tr><td><a href="24">Ver sobre el mapa</a><td></tr></table>
+ </body>
+</html>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/plantilla.htm
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/dissolve_group.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/dissolve_group.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/Intervalos.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/Intervalos.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/barrier.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/barrier.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/shortest_path.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/shortest_path.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/no_way.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/no_way.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/low-density-sample.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/low-density-sample.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add_flag_on_arc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/add_flag_on_arc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/turn-right.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/turn-right.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/orange_flag.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/orange_flag.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/manage_flags.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/images/manage_flags.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.number
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.number	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.number	(revision 30230)
@@ -0,0 +1,3 @@
+#Build Number for ANT. Do not edit!
+#Mon Jun 18 10:17:22 CEST 2007
+build.number=4

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/build.number
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/LEEME.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/LEEME.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/LEEME.html	(revision 30230)
@@ -0,0 +1,66 @@
+<html>
+<head>
+<style type="text/css">
+html, body, h1, h2, h3, h4, div, p, ul, li, input {
+   font-family: Arial, Helvetica, sans-serif;
+}
+
+h1 {
+   font-size: large;
+}
+
+h2 {
+   font-size: large;
+}
+
+h3 {
+   font-size: medium;
+}
+</style>
+</head>
+<body>
+<h1>gvSIG, el SIG en software libre de la Generalitat Valenciana
+(http://www.gvsig.gva.es).</h1>
+
+<h2>Autores:</h2>
+<ul>
+<li>Generalitat Valenciana
+ (Conselleria d'Infraestructures i Transport).</li>
+<li>Iver Tecnolog&iacute;as de la Informaci&oacute;n S.A.</li>
+</ul>
+
+<p>Software con licencia GNU/GPL
+(http://www.fsf.org/licensing/licenses/gpl.html)</p>
+
+<p>Contacto:
+	gvsig@gva.es<p>
+
+<h2>Requisitos de la aplicaci&oacute;n:</h2>
+<h3>Sistema</h3>
+<ul>
+<li>M&iacute;nimos: Pentium III / 256 MB RAM.</li>
+<li>Recomendables: Pentium IV / 512 MB RAM.</li>
+<li>Sistemas operativos: plataformas Windows y Linux.
+ Probado en Win98/XP, Linux Suse 8.2/9.0/9.2 y Linux Debian (Lliurex).</li>
+</ul>
+
+<h3>Software instalado</h3> (disponible en http://www.gvsig.gva.es o en http://java.sun.com)
+<ul>
+<li>M&aacute;quina Virtual Java 1.4.2 (06 o superior).</li>
+<li>JAI (Java Advanced Imaging).</li>
+<li>JAI Image I/O.</li>
+</ul>
+
+<p style="text-align:justify">Nota: Las librer&iacute;as JAI y JAI Image I/O deben estar instaladas sobre la M&aacute;quina Virtual Java que gvSIG utilice en su ejecuci&oacute;n. Si se instala una nueva JVM en el sistema y se usa para ejecutar gvSIG ser&aacute; indispensable instalar las librer&iacute;as sobre &eacute;sta (gvSIG se ejecuta con la JVM que tenga por defecto el sistema operativo; para saber cu&aacute;l es, ejecutar <span style="monospace">"java&nbsp;-version"</span> en un interfaz de comandos o consola).</p>
+
+<h2>M&aacute;s informaci&oacute;n y soporte en:</h2>
+<h3> Web oficial del proyecto:</h3>
+	http://www.gvsig.gva.es
+
+<h3>Listas de distribuci&oacute;n:</h3>
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_usuarios</span> (soporte para usuarios).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores</span> (soporte para desarrolladores).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional</span> (soporte para desarrolladores o usuarios de habla no hispana).
+
+</body>
+</html>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/LEEME.html
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Readme-predes.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Readme-predes.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Readme-predes.txt	(revision 30230)
@@ -0,0 +1,42 @@
+Network Extension Pilot version 1.0 (Build number #build.number#):
+
+Before starting, check the following points:
+
+1.- Download the sources for gvSIG v1.0.2. Follow the procedure described in the “Readme.txt” file to setup a working development environment.
+
+*** Compilation
+
+1.- Uncompress the pilot package into the source folder just created (gvSIG-1_0_2-src). Note: some files in the  'binaries' folder must be overwritten.
+
+2.- (Only if using Eclipse) Import the projects:
+  *1: Pick the the File/Import menu command.
+  *2: Choose 'Existing Projects into workspace' and hit 'Next'
+  *3: With the option 'Select root directory' press 'Browse...'
+  *4: Locate the workspace folder (normally, this should be the default) and hit 'Accept'.
+  *5: Click on 'Deselect All'
+  *6: Mark the following project from the list: extGraph_predes.
+  *7: Click on 'Finish'.
+
+3.- Run the 'build.xml' in the project 'extGraph_predes' (using  Ant or Eclipse).
+
+*** Execution
+
+After the projects have been compiled, new menu options will appear to generate network topologies and run Shortest Path calculationss.
+
+Also, in the property panel for vectorial layers, a new Dot Density symbology type will appear.
+
+*** Building after changes
+
+After modifying the pilot sources, the 'build.xml' within the projects must be run in the following order, using Ant or Eclipse:
+
+  *1 libFMap
+  *2 appgvSIG
+  *3 extGraph_predes
+
+For further assistance, please subscribe to the gvSIG developer list and send your questions there (see in http://www.gvsig.gva.es).
+
+Thanks for developing on gvSIG.
+
+Regards,
+
+The gvSIG Team
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Readme-predes.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_deu
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_deu	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_deu	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_deu
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_ita
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_ita	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_ita	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_ita
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_por
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_por	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_por	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_por
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/gpl.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/gpl.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/gpl.txt	(revision 30230)
@@ -0,0 +1,125 @@
+	GNU GENERAL PUBLIC LICENSE
+	Version 2, June 1991
+
+	 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+		Preamble
+
+	The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.)  You can apply it to your programs, too.
+
+	When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+	To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+	For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their
+rights.
+
+	We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+	Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+	Finally, any free program is threatened constantly by software	patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+	The precise terms and conditions for copying, distribution and modification follow.
+
+				GNU GENERAL PUBLIC LICENSE
+	TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+	0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term "modification".)  Each licensee is addressed as "you".
+
+	Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1.	You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2.	You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+c)	If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3.	You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+c)	Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4.	You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5.	You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6.	Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to this License.
+
+7.	If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8.	If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License.
+
+9.	The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10.	If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11.	BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12.	IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author>
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary.  Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Library General Public License instead of this License.
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/gpl.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cze
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cze	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cze	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cze
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_val
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_val	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_val	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_val
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_spa
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_spa	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_spa	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_spa
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Leeme-predes.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Leeme-predes.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Leeme-predes.txt	(revision 30230)
@@ -0,0 +1,44 @@
+Piloto Redes versión 1.0 (Build Number #build.number#):
+
+Antes de comenzar compruebe los siguientes puntos:
+
+1.- Descargue los fuentes de la v1.0.2 de gvSIG. Siga los pasos allí indicados en el archivo 'Leeme.txt' para obtener un entorno de desarrollo funcional.
+
+*** Compilación
+
+1.- Descomprima este paquete dentro del directorio de fuentes que acaba de preparar ( gvSIG-1_0_2-src).
+
+2.- (Sólo si usa eclipse) Importe los proyectos que acaba de descomprimir:
+  *1: Menú File/Import.
+  *2: Seleccione 'Existing Projects into workspace' y 'Next'
+  *3: Con la opción 'Select root directory' pulse 'Browse...'
+  *4: Sitúese en el directorio del workspace (normalmente el dialogo ya se encuentra en él) y pulse 'Aceptar'.
+  *5: Pulse 'Deselect All'
+  *6: Marque los siguientes proyectos de la lista: extGraph_predes.
+  *7: Pulse 'Finish'.
+
+3.- Ejecute el 'build.xml' del proyecto 'extGraph_predes' (usando ant o eclipse).
+
+*** Ejecución
+
+Una vez compilado el proyecto, aparecerán los menús y opciones para la generación de topologías de las redes y del proceso 'Camino Mínimo'.
+
+También se activará en el panel de propiedades de las capas vectoriales el nuevo tipo de simbología 'Densidad de puntos'.
+
+*** Compilación después de modificar los fuentes
+
+Después de modificar las fuentes de los proyectos del piloto, debe ejecutar los 'build.xml' de los proyectos en el orden siguiente (usando ant o eclipse):
+
+  *1 libFMap
+  *2 appgvSIG
+  *3 extGraph_predes
+
+Ante cualquier problema:
+
+Apuntese a la lista de desarrolladores de gvSIG y pregunte allí (http://www.gvsig.gva.es).
+
+Gracias por desarrollar sobre gvSIG.
+
+Un saludo.
+
+Equipo gvSIG.

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/Leeme-predes.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/Logo_gvsig_gva.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/Logo_gvsig_gva.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall1.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/Logo-gvSIG.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/Logo-gvSIG.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.GIF
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/help.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/uninstall16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/ico-gvSIG.JPG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/papelera.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/images/papelera.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cat
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cat	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cat	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_cat
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_fra
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_fra	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_fra	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_fra
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_eng
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_eng	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_eng	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputLang.xml_eng
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputSpec.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputSpec.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputSpec.xml	(revision 30230)
@@ -0,0 +1,31 @@
+<userInput>
+	<panel order="0">
+		<field 	type="search" 
+				variable="INSTALL_PATH"
+				size="45">
+  			<description align="left" />
+  			<spec 	txt="Path to gvSIG:" 
+		  			id="text.label"
+  					checkfilename="bin/andami.jar"
+        			type="directory" 
+        			result="directory">
+  			<choice value="/usr/local/gvSIG_1.0" os="unix" />
+  			<choice value="/usr/local/gvSIG_1.0.1" os="unix" />
+  			<choice value="/usr/local/gvSIG_1.0.2" os="unix" />
+  			<choice value="/opt/gvSIG_1.0" os="unix" />
+  			<choice value="/opt/gvSIG_1.0.1" os="unix" />
+  			<choice value="/opt/gvSIG_1.0.2" os="unix" />
+  			<choice value="$USER_HOME/gvSIG_1.0" os="unix" />
+  			<choice value="$USER_HOME/gvSIG_1.0.1" os="unix" />
+  			<choice value="$USER_HOME/gvSIG_1.0.2" os="unix" />
+  			<choice value="C:\Archivos de Programa\gvSIG_1.0" os="windows" />
+  			<choice value="C:\Archivos de Programa\gvSIG_1.0.1" os="windows" />
+  			<choice value="C:\Archivos de Programa\gvSIG_1.0.2" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_1.0" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_1.0.1" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_1.0.2" os="windows" />
+  			</spec>
+		</field>
+	</panel>
+</userInput>
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/resources/userInputSpec.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/HOWTO-BUILD.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/HOWTO-BUILD.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/HOWTO-BUILD.txt	(revision 30230)
@@ -0,0 +1,11 @@
+ CÓMO GENERAR EL INSTALADOR:
+ ===========================
+- Solo ejecutable desde Linux
+- gvSIG debe estar correctamente construido en ../_fwAndami/bin
+- El plugin principal debe dejar un fichero 'build.number' dentro de su directorio de andami, que indicara el numero del build para la distribución.
+- Lanzar el target 'distribucion' del build.xml del plugin principal (solo para plugins).
+- El proyecto 'install' debe estar presente en la raíz del workspace (contiene el Izpack, entre otras cosas)
+- En el fichero variables.sh hay algunas variables que nos pueden interesar, que permiten personalizar el nombre del plugin, la versión, el directorio destino, las extensiones incluidas, etc. La variable  APPNAME normalmente valdrá "gvSIG", pero puede tiener nombre si estamos empaquetando una extensión (por ejemplo,  "nomenclatorIGN").
+- Definir los packs adecuados en el fichero XML de configuración (install.xml), y revisar el fichero en general.
+- En el fichero resources/userInputSpec.xml modificar los directorios candidatos, si se ha producido un cambio de la versión de gvSIG sobre la que queremos instalar
+- Lanzar el script distribucion.sh desde el directorio donde se encuentra (ejemplo: "cd workspace/extXXX/install ; ./distribucion.sh ").

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/HOWTO-BUILD.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/.cvsignore
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/.cvsignore	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/.cvsignore	(revision 30230)
@@ -0,0 +1,3 @@
+bin
+extensiones
+nomenclatorIGN-*.zip

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/build.xml	(revision 30230)
@@ -0,0 +1,35 @@
+<project name="instalador-gvSIG" default="init" basedir=".">
+	<!--
+	<property name="dir_inst" location="C:\Archivos de programa"/>
+	<property name="base_dir" location="./"/>		
+	<property name="dir_libs" location="C:\Archivos de programa\IzPack\lib"/>
+	<property name="vers" location="0.6"/>
+	<property name="izpack_dir" location="C:\Archivos de programa\IzPack"/>
+	-->
+	
+	<property name="dir_inst" location="/usr/local"/>
+	<property name="base_dir" location="./"/>		
+	<property name="izpack_dir" location="../../install/IzPack"/>
+	<property name="dir_libs" location="${izpack_dir}/lib"/>
+	
+	<taskdef name="izpack" classpath="${dir_libs}/compiler.jar" classname="com.izforge.izpack.ant.IzPackTask"/>
+	
+	<target name="init">
+		<izpack input="install.xml" 
+				output="${JARNAME}" 
+				installerType="standard" 
+				basedir="${base_dir}" 
+				izPackDir="${izpack_dir}/"/>
+	</target>
+	
+	<target name="clean">
+		<delete>
+			<fileset dir=".">
+			    <include name="**.zip"/>
+			</fileset>
+		</delete>
+		<delete dir="bin" />
+		<delete dir="extensions" />
+	</target>
+	
+</project>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/build.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/distribucion.sh
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/distribucion.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/distribucion.sh	(revision 30230)
@@ -0,0 +1,259 @@
+#!/bin/bash
+
+# Si se produce un error, salimos inmediatamente
+set -e
+
+DIR_BASE=`pwd`
+
+source variables.sh
+# Get a version with format 1_0_alpha
+UNDERSCORE_VERSION=`echo $FULLVERSION | sed 'y/./_/'`
+# Get a version with format 10_alpha
+BRIEFVERSION=`echo $FULLVERSION | sed 's/\.//'`
+# The name of the dir which will be ZIPed, containing the resulting installer
+INSTALLER_DIR="$APPNAME"-$FULLVERSION\_installer
+JARNAME="$APPNAME"-"$FULLVERSION".jar
+# The extension targets on the this version of gvSIG:
+GVSIG_VERSION=1.0
+
+GVSIG_BUILDNUMBER=`sed -n 's/build.number=//p' ../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/build.number`
+
+GVSIG_FULLVERSION=gvSIG-$GVSIG_VERSION-$GVSIG_BUILDNUMBER
+
+cd ../../_fwAndami
+ANDAMI_PATH=`pwd`
+
+cd ../install
+INSTALL_GVSIG_PATH=`pwd`
+INSTALL_GVSIG_LINUX_PATH="$INSTALL_GVSIG_PATH"/instalador-gvSIG-lin
+INSTALL_GVSIG_WINDOWS_PATH="$INSTALL_GVSIG_PATH"/instalador-gvSIG-win
+
+cd "$DIR_BASE"
+
+DIR_LIN=linux
+DIR_WIN=windows
+WINDOWSZIP="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-windows-i586.7z
+LINUXZIP="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-linux-i586.tgz
+
+LINUXBIN="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-linux-i586.bin
+LINUXBINWITHJRE="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-linux-i586-withjre.bin
+
+WINDOWSEXE="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-windows-i586.exe
+WINDOWSEXEWITHJRE="$APPNAME"-"$BRIEFVERSION"\_"$GVSIG_FULLVERSION"-windows-i586-withjre.exe
+
+#Directorios
+OUTPUT_DIR="$TARGET_DIR"/v"$FULLVERSION"\_"$GVSIG_FULLVERSION"
+PATH_SOURCE_EXT="$ANDAMI_PATH"/gvSIG/extensiones
+PATH_SOURCE_MANDAT_EXT="$ANDAMI_PATH"/gvSIG/extensiones
+
+
+echo "*****************"
+echo "      BASE       "
+echo "*****************"
+# Para Linux
+echo -n "$DIR_BASE"/"$DIR_LIN" "-- "
+cd "$DIR_BASE"/"$DIR_LIN"
+rm bin -rf
+if [ ! -d libs ] ; then
+   ln -s "$INSTALL_GVSIG_LINUX_PATH"/libs
+fi
+mkdir -p bin/gvSIG/extensiones
+cp resources/gpl.txt bin
+# No enlazamos directamente el directorio lib para no incluir el directorio CVS
+mkdir -p bin/lib
+cd "$DIR_BASE"/"$DIR_LIN"/bin/lib
+for i in "$ANDAMI_PATH"/lib/*.jar ; do
+  ln -s "$i" .
+done
+for i in "$ANDAMI_PATH"/lib/*.zip ; do
+  ln -s "$i" .
+done
+cd "$DIR_BASE"/"$DIR_LIN"
+ln -s "$ANDAMI_PATH"/andami.jar bin/
+ln -s "$ANDAMI_PATH"/castor.properties bin/
+#cp resources/andami-config.xml bin
+echo OK.
+
+
+# Para Windows
+echo -n "$DIR_BASE"/"$DIR_WIN" "-- "
+cd "$DIR_BASE"/"$DIR_WIN"
+rm bin -rf
+if [ ! -d libs ] ; then
+   ln -s "$INSTALL_GVSIG_WINDOWS_PATH"/libs
+fi
+mkdir -p bin/gvSIG/extensiones
+cp resources/gpl.txt bin
+# No enlazamos directamente el directorio lib para no incluir el directorio CVS
+mkdir -p bin/lib
+cd "$DIR_BASE"/"$DIR_WIN"/bin/lib
+for i in "$ANDAMI_PATH"/lib/*.jar ; do
+  ln -s "$i" .
+done
+for i in "$ANDAMI_PATH"/lib/*.zip ; do
+  ln -s "$i" .
+done
+cd "$DIR_BASE"/"$DIR_WIN"
+ln -s "$ANDAMI_PATH"/andami.jar bin
+ln -s "$ANDAMI_PATH"/castor.properties bin/
+#cp resources/andami-config.xml bin
+
+#Copiamos el lanzador y sus tracuciones al tmpResources
+rm -Rf tmpResources
+mkdir tmpResources
+cp -R $INSTALL_GVSIG_PATH/launcher/izpack-launcher-1.3/dist/* ./tmpResources
+mv ./tmpResources/launcher-Win32.exe ./tmpResources/gvSIG.exe
+#Quitamos el ini, manifest y los CVS
+rm ./tmpResources/*.ini ./tmpResources/*.manifest
+find ./tmpResources -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+echo OK.
+
+# Estas extensiones se copian directamente al directorio destino, ya que no vamos a dar
+# opcion a no instalarlas, son obligatorias
+cd "$DIR_BASE"
+i=0
+while [ ! -z ${MANDATORY_EXTENSIONS[$i]} ]
+do
+  echo ln -s "$PATH_SOURCE_MANDAT_EXT"/${MANDATORY_EXTENSIONS[$i]} "$DIR_LIN"/bin/gvSIG/extensiones
+  ln -s "$PATH_SOURCE_MANDAT_EXT"/${MANDATORY_EXTENSIONS[$i]} "$DIR_LIN"/bin/gvSIG/extensiones
+  echo ln -s "$PATH_SOURCE_MANDAT_EXT"/${MANDATORY_EXTENSIONS[$i]} "$DIR_WIN"/bin/gvSIG/extensiones
+  ln -s "$PATH_SOURCE_MANDAT_EXT"/${MANDATORY_EXTENSIONS[$i]} "$DIR_WIN"/bin/gvSIG/extensiones
+  i=`expr $i + 1`
+done
+
+
+echo "*****************"
+echo "   EXTENSIONES   "
+echo "*****************"
+
+rm -rf $DIR_LIN/extensiones
+mkdir $DIR_LIN/extensiones
+rm -rf $DIR_WIN/extensiones
+mkdir $DIR_WIN/extensiones
+
+i=0
+while [ ! -z ${EXTENSIONS[$i]} ]
+do
+  echo "Copiando "${EXTENSIONS[$i]}
+  echo cp "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} "$DIR_LIN"/extensiones -rf
+  cp "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} "$DIR_LIN"/extensiones -rf
+  echo cp "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} "$DIR_WIN"/extensiones -rf
+  cp "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} "$DIR_WIN"/extensiones -rf
+  i=`expr $i + 1`
+done
+
+
+echo "*****************"
+echo "    INST-WIN     "
+echo "*****************"
+# Generar el instalador (jar) para windows
+cd "$DIR_BASE"/"$DIR_WIN"
+rm "$JARNAME" -f
+ant -DJARNAME="$JARNAME" -DGVSIG_VERSION="$GVSIG_VERSION" -DAPPNAME="$APPNAME" -DINSTALL_GVSIG_PATH="$INSTALL_GVSIG_PATH"
+
+echo "*****************"
+echo "    INST-LIN     "
+echo "*****************"
+# Generar el instalador (jar) para Linux
+cd "$DIR_BASE"/"$DIR_LIN"
+rm "$JARNAME" -f
+ant -DJARNAME="$JARNAME" -DGVSIG_VERSION="$GVSIG_VERSION" -DAPPNAME="$APPNAME" -DINSTALL_GVSIG_PATH="$INSTALL_GVSIG_PATH"
+
+
+echo "******************"
+echo " GENERAR DISTRIB "
+echo "******************"
+# Generar el .bin para Linux y el .EXE para Windows
+
+mkdir -p "$OUTPUT_DIR"
+echo "- Linux"
+## Nueva instalacion para linux
+cd "$DIR_BASE"/"$DIR_LIN"
+rm -Rf "$INSTALLER_DIR"
+mkdir -p "$INSTALLER_DIR"/_tmp_install
+cp "$JARNAME" "$INSTALLER_DIR"/_tmp_install
+cd "$INSTALLER_DIR"
+cp -R "$INSTALL_GVSIG_PATH"/launcher/izpack-launcher-1.3_linux/dist/* ./_tmp_install
+find . -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+
+rm ./_tmp_install/launcher.ini
+cp "$DIR_BASE"/"$DIR_LIN"/resources/launcher.ini ./_tmp_install/launcher.ini
+sed "s/%JARNAME%/$JARNAME/" ./_tmp_install/launcher.ini > ./_tmp_install/launcher.ini.bak
+mv ./_tmp_install/launcher.ini.bak ./_tmp_install/launcher.ini
+
+tar -cvzf ./tmp.tgz ./_tmp_install
+cp "$INSTALL_GVSIG_LINUX_PATH"/jre/*.gz ./_tmp_install
+tar -cvzf ./tmp_wjre.tgz ./_tmp_install
+echo '#!/bin/sh' > xx.tmp
+lcount=`cat xx.tmp "$DIR_BASE"/"$DIR_LIN"/resources/h_gvSIG-install.sh | wc -l`
+lcount=$(($lcount+2)) # sumamos dos: uno por la linea siguiente y otro para el inicio
+echo "lcount=$lcount" >> xx.tmp
+cat xx.tmp "$DIR_BASE"/"$DIR_LIN"/resources/h_gvSIG-install.sh ./tmp.tgz  > "$LINUXBIN"
+cat xx.tmp "$DIR_BASE"/"$DIR_LIN"/resources/h_gvSIG-install.sh ./tmp_wjre.tgz  > "$LINUXBINWITHJRE"
+rm xx.tmp
+chmod a+x "$LINUXBIN" "$LINUXBINWITHJRE"
+mv "$LINUXBINWITHJRE" "$LINUXBIN" "$OUTPUT_DIR"
+cd "$DIR_BASE"/"$DIR_LIN"
+rm -Rf "$INSTALLER_DIR"
+## Fin Nueva instalacion para linux
+rm "$JARNAME"
+
+
+
+
+## Para Windows
+echo "- Windows"
+#set -x
+cd "$DIR_BASE"/"$DIR_WIN"
+rm -Rf "$INSTALLER_DIR"
+mkdir "$INSTALLER_DIR"
+#cp -a installer_files "$INSTALLER_DIR"
+
+cp -aR "$INSTALL_GVSIG_PATH"/launcher/izpack-launcher-1.3/dist/* "$INSTALLER_DIR"
+rm -f "$INSTALLER_DIR"/install.bat
+
+find "$INSTALLER_DIR" -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+
+## hacemos las sustituciones de la variable
+rm "$INSTALLER_DIR"/launcher-Win32.ini
+cp resources/launcher-Win32.ini "$INSTALLER_DIR"/launcher-Win32.ini
+sed "s/%JARNAME%/$JARNAME/" "$INSTALLER_DIR"/launcher-Win32.ini > "$INSTALLER_DIR"/launcher-Win32.ini.bak
+mv "$INSTALLER_DIR"/launcher-Win32.ini.bak "$INSTALLER_DIR"/launcher-Win32.ini;
+
+
+mv "$JARNAME" "$INSTALLER_DIR"
+cd "$INSTALLER_DIR"
+
+if [ -f  "$DIR_BASE"/"$DIR_WIN"/"$WINDOWSZIP" ] ; then
+	rm -f "$DIR_BASE"/"$DIR_WIN"/"$WINDOWSZIP"
+fi
+"$INSTALL_GVSIG_PATH"/launcher/7z/7za a -t7z -r "$DIR_BASE"/"$DIR_WIN"/"$WINDOWSZIP" * -mx0
+cd -
+sed "s/%TITLE%/$APPNAME-$BRIEFVERSION\_$BUILDNUMBER/" "$INSTALL_GVSIG_PATH"/launcher/7z/dist_config.txt > dist_config.txt
+cat "$INSTALL_GVSIG_PATH"/launcher/7z/7zS.sfx  dist_config.txt "$WINDOWSZIP" > "$WINDOWSEXE"
+
+### paquete con los instalables de JRE, Jai y Jai i/o
+"$INSTALL_GVSIG_PATH"/launcher/7z/7za a -t7z "$DIR_BASE"/"$DIR_WIN"/"$WINDOWSZIP"  "$INSTALL_GVSIG_WINDOWS_PATH"/jre_installers/*.exe -mx0
+cat "$INSTALL_GVSIG_PATH"/launcher/7z/7zS.sfx  dist_config.txt "$WINDOWSZIP" > "$WINDOWSEXEWITHJRE"
+
+###
+
+
+rm dist_config.txt
+rm "$WINDOWSZIP"
+
+rm -Rf "$INSTALLER_DIR"
+
+mv "$WINDOWSEXE" "$OUTPUT_DIR"
+mv "$WINDOWSEXEWITHJRE" "$OUTPUT_DIR"
+
+# Limpiamos tmpResources
+cd "$DIR_BASE"/"$DIR_WIN"
+rm -r ./tmpResources
+cd -
+
+cd "$DIR_BASE"
+
+#limpiamos
+rm -r "$DIR_BASE"/"$DIR_WIN"/bin "$DIR_BASE"/"$DIR_WIN"/extensiones "$DIR_BASE"/"$DIR_WIN"/libs "$DIR_BASE"/"$DIR_WIN"/"$JARNAME" 2> /dev/null || true
+rm -r "$DIR_BASE"/"$DIR_LIN"/bin "$DIR_BASE"/"$DIR_LIN"/extensiones "$DIR_BASE"/"$DIR_LIN"/libs "$DIR_BASE"/"$DIR_WIN"/"$JARNAME" 2> /dev/null || true

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/distribucion.sh
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/com.iver.cit.gvsig.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/com.iver.cit.gvsig.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/install.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/install.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/install.xml	(revision 30230)
@@ -0,0 +1,81 @@
+<installation version="1.0">
+	<info>
+		<appname>gvSIG_1.0 piloto redes</appname>
+		<appversion>1.0</appversion>
+		<authors>
+			<author name="Generalitat Valenciana. Conselleria d'Infraestructures i Transport" email="" />
+			<author name="Iver TecnologÃ­as de la InformaciÃ³n S.A." email="" />
+		</authors>
+		<url>http://www.gvsig.gva.es/</url>
+		<javaversion>1.4</javaversion>
+	</info>
+
+	<guiprefs height="600" resizable="yes" width="800">
+		<laf name="liquid">
+			<os family="windows" />
+		</laf>
+	</guiprefs>
+
+	<locale>
+		<!-- only keep the languages which are also available in gvSIG -->
+		<langpack iso3="spa"/>
+		<langpack iso3="val"/>
+		<langpack iso3="eng"/>
+	<!--	<langpack iso3="cat"/>
+		<langpack iso3="chn"/> -->
+		<langpack iso3="cze"/>
+	<!--	<langpack iso3="dan"/> -->
+		<langpack iso3="deu"/>
+	<!--	<langpack iso3="fin"/>-->
+		<langpack iso3="fra"/>
+		<langpack iso3="glg"/>
+	<!--	<langpack iso3="hun"/> -->
+		<langpack iso3="ita"/>
+	<!--	<langpack iso3="jpn"/>
+		<langpack iso3="mys"/>
+		<langpack iso3="ned"/>
+		<langpack iso3="nor"/>
+		<langpack iso3="pol"/> -->
+		<langpack iso3="por"/>
+	<!--	<langpack iso3="rom"/>
+		<langpack iso3="rus"/>
+		<langpack iso3="scg"/>
+		<langpack iso3="svk"/>
+		<langpack iso3="swe"/>
+		<langpack iso3="ukr"/> -->
+	</locale>
+
+	<native os="windows" type="izpack" name="ShellLink.dll"/>
+
+	<resources>
+		<res src="resources/gpl.txt" id="LicencePanel.licence"/>
+		<res src="resources/LEEME.html" id="HTMLInfoPanel.info"/>
+		<res src="resources/images/Logo_gvsig_gva.jpg" id="Installer.image"/>
+				<res src="resources/userInputSpec.xml" id="userInputSpec.xml"/>
+                <parsable os="windows" targetfile="resources/userInputSpec.xml"/>
+                <res src="resources/userInputLang.xml_val" id="userInputLang.xml_val" />
+                <res src="resources/userInputLang.xml_spa" id="userInputLang.xml_spa" />
+>
+	</resources>
+
+	<panels>
+		<panel classname="HTMLInfoPanel"/>
+		<panel classname="LicencePanel"/>
+		<panel classname="PacksPanel"/>
+		<panel classname="UserInputPanel"/>
+		<panel classname="InstallPanel"/>
+		<panel classname="SimpleFinishPanel"/>
+	</panels>
+
+	<packs>
+
+    <pack name="Extension Piloto redes" required="yes">
+      <description>Extension piloto de redes</description>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/" src="extensiones/com.iver.cit.gvsig.graph" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.graph-fmap-gvsig.jar" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.jar" override="true"/>
+    </pack>
+    
+	</packs>
+
+</installation>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/install.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_deu
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_deu	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_deu	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_deu
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_ita
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_ita	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_ita	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_ita
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/launcher-Win32.ini
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/launcher-Win32.ini	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/launcher-Win32.ini	(revision 30230)
@@ -0,0 +1,123 @@
+[default]
+; Nombre de la aplicacion
+appname = gvSIG Piloto redes
+
+; Ruta al achivo Jar a lanzar
+jar = %JARNAME%
+
+
+; Comando a ejecutar:
+;    Admite remplazo de variable:
+;	* #JAVA# ejecutable de java
+;	* #JAVA_HOME# path del Java_home
+;	* #JAR# el valor de la variable 'jar' de este fichero
+;	* #ARGS# cadena con todos los argumentos con los que se ha llamado al lanzador
+;	* #ARG1#, #ARG2#, ... #ARG9#: parametro recivido en 'n' lugar
+;	* #ARG0#: Nombre del ejecutable del lanzador
+;    Tambien admite los valores de la seccion 'Variables' encerrados entre
+;    el caracter almuadilla '#'
+; 	 * Nota: los nombres de las variables son case sensitive
+command = #JAVA# -jar #JAR#
+
+
+
+
+; Lanzar el Jar en ansincrono o no:
+;     * si(se lanza el javaw.exe y finaliza el lanzador):S SI YES Y 1
+;     * si(el lanzado se espera a que termine la ejecucion del javaw.exe):{distinto de los anterirores}
+launchJarAsync = 0
+
+; Modo: dice si se va a usar en modo lanzador de la instalacion o de la aplicacion
+; (De momento solo afecta al titulo)
+;     * Instalacion: INSTALL
+;     * Applicacion: APPLICATION
+launchMode = INSTALL
+
+; Realizar la comprobaciones o no:
+;     * si(por defecto):S SI YES Y 1
+;     * no(debera estar especificado el parametro'jre_home'):{distinto de los anterirores}
+doChecks = YES
+
+; Ruta el Java_home a usar en caso de 'doChecks-->No'
+jre_home =
+;ejemplo: jre_home = C:/Archivos de programa/Java/j2re1.4.2_11
+
+
+; Habilita la pregunta al usuario de si hay que hacer las comprobaciones de JRE etc...
+;     - por defecto se hace la pregunta
+;     - Si la respuesta del usario es 'no' se solicita la usuario que indique el ejectuable de la JRE
+;     * si(se pregunta al usario):S SI YES Y 1
+;     * no(no se pregunta y se realizan las comprobaciones):{distinto de los anterirores}
+askForCheckingProcess = SI
+
+
+
+; Version de JRE requerida
+jre_version = 1.4.2
+jre_version_prefered = 1.4.2_06
+
+
+
+; Descarga remota
+; 	* los valores valido de downloadEnabled son:
+;		- habilitado: S SI YES Y 1
+;		- deshabilitado: {distinto de los anteriores}
+downloadEnabled = 1
+
+
+
+; Path del instalable del jre (si no existe y estan
+;	habilitadas las descargas, lo dejara aqui)
+jre = j2re-1_4_2_06-windows-i586-p.exe
+downloadJre = http://www.gvsig.gva.es/fileadmin/conselleria/images/Documentacion/descargas/software/windows/j2re-1_4_2_06-windows-i586-p.exe
+
+
+
+; Path del instalable del jai (si no existe y estan
+;	habilitadas las descargas, lo dejara aqui)
+jai = jai-1_1_2_01-lib-windows-i586-jre.exe
+;downloadJai = http://www.gvsig.org/jai-1_1_2_01-lib-windows-i586-jre.exe
+downloadJai = http://www.gvsig.gva.es/fileadmin/conselleria/images/Documentacion/descargas/software/windows/jai-1_1_2_01-lib-windows-i586-jre.exe
+
+
+
+; Path del instalable del jai io (si no existe y estan
+;	habilitadas las descargas, lo dejara aqui)
+jai_io = jai_imageio-1_0_01-lib-windows-i586-jre.exe
+downloadJai_io = http://www.gvsig.gva.es/fileadmin/conselleria/images/Documentacion/descargas/software/windows/jai_imageio-1_0_01-lib-windows-i586-jre.exe
+
+
+
+; Esta seccion indica una lista de fichero a
+; copiar antes de lanzar el comando.
+; Los ficheros se copiaran si no existen en el
+; destino.
+; Destino puede ser un directorio, pero debe finalizar
+; con '/'
+; Pueden usarse variables declaradas en la
+; seccion 'variables' colocadas entre '#'
+;  * Nota: los nombres de las variables son case sensitive
+; Requiere los valores:
+;	* source1: primer fichero origen
+;	* target1: primer destino
+;	* source2: segundo fichero origen
+;	* target2: segundo destino
+;	...
+;	* source{n}: 'n' fichero origen
+;	* target{n}: 'n' destino
+[CopyRequiredFiles]
+source1=
+target1=
+
+source2=
+target2=
+
+source3=
+target3=
+
+
+; En esta seccion se pueden definir valores 
+; que se pueden utilizar en el parametro 'command'
+; o en la copia de los ficheros
+;  * Nota: los nombres son case sensitive
+[Variables]

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/launcher-Win32.ini
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_por
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_por	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_por	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_por
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/gpl.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/gpl.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/gpl.txt	(revision 30230)
@@ -0,0 +1,125 @@
+	GNU GENERAL PUBLIC LICENSE
+	Version 2, June 1991
+
+	 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+		Preamble
+
+	The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.)  You can apply it to your programs, too.
+
+	When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+	To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+	For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their
+rights.
+
+	We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+	Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+	Finally, any free program is threatened constantly by software	patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+	The precise terms and conditions for copying, distribution and modification follow.
+
+				GNU GENERAL PUBLIC LICENSE
+	TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+	0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term "modification".)  Each licensee is addressed as "you".
+
+	Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1.	You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2.	You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+c)	If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3.	You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+c)	Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4.	You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5.	You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6.	Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to this License.
+
+7.	If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8.	If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License.
+
+9.	The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10.	If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11.	BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12.	IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author>
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary.  Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Library General Public License instead of this License.
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/gpl.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cze
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cze	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cze	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cze
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_val
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_val	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_val	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_val
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_spa
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_spa	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_spa	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_spa
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.GIF
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.JPG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/papelera.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/papelera.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/Logo_gvsig_gva.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/Logo_gvsig_gva.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall1.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/ico-gvSIG16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/Logo-gvSIG.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/Logo-gvSIG.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/help16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/images/uninstall.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cat
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cat	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cat	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_cat
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_fra
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_fra	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_fra	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_fra
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_eng
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_eng	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_eng	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputLang.xml_eng
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputSpec.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputSpec.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputSpec.xml	(revision 30230)
@@ -0,0 +1,21 @@
+<userInput>
+	<panel order="0">
+		<field 	type="search" 
+				variable="INSTALL_PATH"
+				size="45">
+  			<description align="left" />
+  			<spec 	txt="Path to gvSIG:" 
+		  			id="text.label"
+  					checkfilename="bin/andami.jar"
+        			type="directory" 
+        			result="directory">
+  			<choice value="/usr/local/gvSIG_1.0" os="unix" />
+  			<choice value="/opt/gvSIG_1.0" os="unix" />
+  			<choice value="$USER_HOME/gvSIG_1.0" os="unix" />
+  			<choice value="C:\Archivos de Programa\gvSIG_1.0" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_1.0" os="windows" />
+  			</spec>
+		</field>
+	</panel>
+</userInput>
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/userInputSpec.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/LEEME.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/LEEME.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/LEEME.html	(revision 30230)
@@ -0,0 +1,66 @@
+<html>
+<head>
+<style type="text/css">
+html, body, h1, h2, h3, h4, div, p, ul, li, input {
+   font-family: Arial, Helvetica, sans-serif;
+}
+
+h1 {
+   font-size: large;
+}
+
+h2 {
+   font-size: large;
+}
+
+h3 {
+   font-size: medium;
+}
+</style>
+</head>
+<body>
+<h1>gvSIG, el SIG en software libre de la Generalitat Valenciana
+(http://www.gvsig.gva.es).</h1>
+
+<h2>Autores:</h2>
+<ul>
+<li>Generalitat Valenciana
+ (Conselleria d'Infraestructures i Transport).</li>
+<li>Iver Tecnolog&iacute;as de la Informaci&oacute;n S.A.</li>
+</ul>
+
+<p>Software con licencia GNU/GPL
+(http://www.fsf.org/licensing/licenses/gpl.html)</p>
+
+<p>Contacto:
+	gvsig@gva.es<p>
+
+<h2>Requisitos de la aplicaci&oacute;n:</h2>
+<h3>Sistema</h3>
+<ul>
+<li>M&iacute;nimos: Pentium III / 256 MB RAM.</li>
+<li>Recomendables: Pentium IV / 512 MB RAM.</li>
+<li>Sistemas operativos: plataformas Windows y Linux.
+ Probado en Win98/XP, Linux Suse 8.2/9.0/9.2 y Linux Debian (Lliurex).</li>
+</ul>
+
+<h3>Software instalado</h3> (disponible en http://www.gvsig.gva.es o en http://java.sun.com)
+<ul>
+<li>M&aacute;quina Virtual Java 1.4.2 (06 o superior).</li>
+<li>JAI (Java Advanced Imaging).</li>
+<li>JAI Image I/O.</li>
+</ul>
+
+<p style="text-align:justify">Nota: Las librer&iacute;as JAI y JAI Image I/O deben estar instaladas sobre la M&aacute;quina Virtual Java que gvSIG utilice en su ejecuci&oacute;n. Si se instala una nueva JVM en el sistema y se usa para ejecutar gvSIG ser&aacute; indispensable instalar las librer&iacute;as sobre &eacute;sta (gvSIG se ejecuta con la JVM que tenga por defecto el sistema operativo; para saber cu&aacute;l es, ejecutar <span style="monospace">"java&nbsp;-version"</span> en un interfaz de comandos o consola).</p>
+
+<h2>M&aacute;s informaci&oacute;n y soporte en:</h2>
+<h3> Web oficial del proyecto:</h3>
+	http://www.gvsig.gva.es
+
+<h3>Listas de distribuci&oacute;n:</h3>
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_usuarios</span> (soporte para usuarios).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores</span> (soporte para desarrolladores).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional</span> (soporte para desarrolladores o usuarios de habla no hispana).
+
+</body>
+</html>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/resources/LEEME.html
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/.cvsignore
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/.cvsignore	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/.cvsignore	(revision 30230)
@@ -0,0 +1,2 @@
+./libs
+w32
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/build.xml	(revision 30230)
@@ -0,0 +1,27 @@
+<project name="instalador-gvSIG" default="init" basedir=".">
+	<property name="dir_inst" location="/usr/local"/>
+	<property name="base_dir" location="./"/>		
+	<property name="izpack_dir" location="${INSTALL_GVSIG_PATH}/IzPack"/>
+	<property name="dir_libs" location="${izpack_dir}/lib"/>
+	
+	<taskdef name="izpack" classpath="${dir_libs}/compiler.jar" classname="com.izforge.izpack.ant.IzPackTask"/>
+	
+	<target name="init">
+		<izpack input="install.xml" 
+				output="${JARNAME}" 
+				installerType="standard" 
+				basedir="${base_dir}" 
+				izPackDir="${izpack_dir}/"/>
+	</target>
+	
+	<target name="clean">
+		<delete>
+			<fileset dir=".">
+			    <include name="**.zip"/>
+			</fileset>
+		</delete>
+		<delete dir="bin" />
+		<delete dir="extensions" />
+	</target>
+	
+</project>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows/build.xml
___________________________________________________________________
Added: svn:eol-style
   + native


Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/windows
___________________________________________________________________
Added: svn:ignore
   + ./libs
w32


Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/HOWTO-BUILD.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/HOWTO-BUILD.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/HOWTO-BUILD.txt	(revision 30230)
@@ -0,0 +1,8 @@
+ CÓMO GENERAR EL INSTALADOR:
+ ===========================
+- gvSIG debe estar correctamente construido en ../_fwAndami/bin 
+- Debe de estar el proyecto /var/lib/cvs_gvSIG/gvSIG-project/install en el workspace.
+- En el fichero variables.sh hay algunas variables que nos pueden interesar, que permiten personalizar el nombre del plugin, la versión, el directorio destino, etc. La variable  APPNAME normalmente valdrá "gvSIG", pero puede tiener nombre si estamos empaquetando una extensión (por ejemplo,  "nomenclatorIGN").
+- Definir los packs adecuados en el fichero XML de configuración (install.xml), y revisar el fichero en general.
+- Definir las extensiones a incluir en el directorio variables.sh.
+- Lanzar el script distribucion.sh.

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/HOWTO-BUILD.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/install.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/install.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/install.xml	(revision 30230)
@@ -0,0 +1,79 @@
+<installation version="1.0">
+	<info>
+		<appname>gvSIG_1.0 piloto redes</appname>
+		<appversion>1.0</appversion>
+		<authors>
+			<author name="Generalitat Valenciana. Conselleria d'Infraestructures i Transport" email="" />
+			<author name="Iver TecnologÃ­as de la InformaciÃ³n S.A." email="" />
+		</authors>
+		<url>http://www.gvsig.gva.es/</url>
+		<javaversion>1.4</javaversion>
+	</info>
+
+	<guiprefs height="600" resizable="yes" width="800">
+		<laf name="liquid">
+			<os family="unix" />
+		</laf>
+	</guiprefs>
+
+	<locale>
+		<!-- only keep the languages which are also available in gvSIG -->
+		<langpack iso3="spa"/>
+		<langpack iso3="val"/>
+		<langpack iso3="eng"/>
+	<!--	<langpack iso3="cat"/>
+		<langpack iso3="chn"/> -->
+		<langpack iso3="cze"/>
+	<!--	<langpack iso3="dan"/> -->
+		<langpack iso3="deu"/>
+	<!--	<langpack iso3="fin"/>-->
+		<langpack iso3="fra"/>
+		<langpack iso3="glg"/>
+	<!--	<langpack iso3="hun"/> -->
+		<langpack iso3="ita"/>
+	<!--	<langpack iso3="jpn"/>
+		<langpack iso3="mys"/>
+		<langpack iso3="ned"/>
+		<langpack iso3="nor"/>
+		<langpack iso3="pol"/> -->
+		<langpack iso3="por"/>
+	<!--	<langpack iso3="rom"/>
+		<langpack iso3="rus"/>
+		<langpack iso3="scg"/>
+		<langpack iso3="svk"/>
+		<langpack iso3="swe"/>
+		<langpack iso3="ukr"/> -->
+	</locale>
+
+	<resources>
+		<res src="resources/gpl.txt" id="LicencePanel.licence"/>
+		<res src="resources/LEEME.html" id="HTMLInfoPanel.info"/>
+		<res src="resources/images/Logo_gvsig_gva.jpg" id="Installer.image"/>
+				<res src="resources/userInputSpec.xml" id="userInputSpec.xml"/>
+                <parsable os="linux" targetfile="resources/userInputSpec.xml"/>
+                <res src="resources/userInputLang.xml_val" id="userInputLang.xml_val" />
+                <res src="resources/userInputLang.xml_spa" id="userInputLang.xml_spa" />
+	</resources>
+
+	<panels>
+		<panel classname="HTMLInfoPanel"/>
+		<panel classname="LicencePanel"/>
+		<panel classname="PacksPanel"/>
+		<panel classname="UserInputPanel"/>
+		<panel classname="InstallPanel"/>
+		<panel classname="SimpleFinishPanel"/>
+	</panels>
+
+	<packs>
+
+    <pack name="Extension Piloto redes" required="yes">
+      <description>Extension piloto de redes</description>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/" src="extensiones/com.iver.cit.gvsig.graph" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.graph-fmap-gvsig.jar" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.jar" override="true"/>
+    </pack>
+    
+	</packs>
+
+
+</installation>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/install.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/launcher.ini
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/launcher.ini	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/launcher.ini	(revision 30230)
@@ -0,0 +1,36 @@
+
+## Ruta al achivo Jar a lanzar
+jar = %JARNAME%
+
+
+
+## Parametros a incluir al lanzar el Jar
+jarParams = 
+
+
+
+## Lanzar el Jar en ansincrono o no:
+##     * si(se lanza el java y finaliza el lanzador):S SI YES Y 1
+##     * no(el lanzado se espera a que termine la ejecucion del java):{distinto de los anterirores}
+launchJarAsync = NO
+
+## Version de JRE requerida
+jre_version = 1.4.2
+## Si existen varias JRE de la requerida, cual es la preferida (si esta)
+jre_version_prefered = 1.4.2_10
+
+
+## Descarga remota
+## 	* los valores valido de downloadEnabled son:
+##		- habilitado: S SI YES Y 1
+##		- deshabilitado: {distinto de los anteriores}
+downloadEnabled = 1
+
+
+## Path del instalable del jre (si no existe y estan
+##	habilitadas las descargas, lo dejara aqui)
+jre = j2re-1_4_2_10-linux.tar.gz
+downloadJre = http://www.gvsig.org/j2re-1_4_2_10-linux.tar.gz
+installJreCmd =./install_jre.sh
+installedJreJavaFile = $HOME/gvSIG/jre/1.4.2_10/bin/java
+installedJreRootDirectory =$HOME/gvSIG/jre

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/launcher.ini
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_por
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_por	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_por	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_por
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/gpl.txt
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/gpl.txt	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/gpl.txt	(revision 30230)
@@ -0,0 +1,125 @@
+	GNU GENERAL PUBLIC LICENSE
+	Version 2, June 1991
+
+	 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+		Preamble
+
+	The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.)  You can apply it to your programs, too.
+
+	When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+	To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+	For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their
+rights.
+
+	We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+	Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+	Finally, any free program is threatened constantly by software	patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+	The precise terms and conditions for copying, distribution and modification follow.
+
+				GNU GENERAL PUBLIC LICENSE
+	TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+	0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term "modification".)  Each licensee is addressed as "you".
+
+	Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1.	You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2.	You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+c)	If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3.	You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+c)	Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4.	You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5.	You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6.	Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to this License.
+
+7.	If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8.	If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License.
+
+9.	The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10.	If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11.	BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12.	IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author>
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary.  Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Library General Public License instead of this License.
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/gpl.txt
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cze
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cze	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cze	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cze
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_val
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_val	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_val	(revision 30230)
@@ -0,0 +1,11 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+    <str id="UserInputPanel.error.caption"        txt="Problema d'entrada"/>
+
+	<str id="UserInputPanel.search.browse"           txt="Buscar..."/>
+	<str id="UserInputPanel.search.autodetect"    txt="Autodetectar"/>
+	<str id="UserInputPanel.search.autodetect.failed.message"    txt="Autodetección ha fallado."/>
+    <str id="UserInputPanel.search.autodetect.failed.caption"    txt="Autodetección ha fallado."/>
+ 	<str id="UserInputPanel.search.wrongselection.message"   txt="És necessari tindre gvSIG instal·lat en el directori que se seleccione."/>
+  
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_val
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_spa
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_spa	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_spa	(revision 30230)
@@ -0,0 +1,12 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+    <str id="UserInputPanel.search.autodetect.failed.message"    txt="Autodetección ha fallado."/>
+    <str id="UserInputPanel.search.autodetect.failed.caption"    txt="Autodetección ha fallado."/>
+    <str id="UserInputPanel.search.autodetect.tooltip"           txt="Compruebe el fichero o directorio en las rutas mostradas arriba."/>
+    <str id="UserInputPanel.search.location"           txt="Introduzca la ruta de {0}."/>
+    <str id="UserInputPanel.search.location.checkedfile" txt="Se comprueba la existencia de {0}."/>
+    <str id="UserInputPanel.search.browse"           txt="Buscar..."/>
+    <str id="UserInputPanel.search.wrongselection.message"   txt="El fichero o directorio elegido no existe o no es apropiado. Es necesario tener gvSIG en el directorio que se seleccione"/>
+    <str id="UserInputPanel.search.wrongselection.caption"   txt="Selección inválida."/>
+  
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_spa
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/h_gvSIG-install.sh
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/h_gvSIG-install.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/h_gvSIG-install.sh	(revision 30230)
@@ -0,0 +1,54 @@
+echo Unpacking...
+set -e
+tail +$lcount $0 | tar -xz  --no-same-owner 
+echo Launching instalation program....
+cd ./_tmp_install
+set +e
+#export LD_LIBRARY_PATH="$PWD:$PWD/lib:$LD_LIBRARY_PATH"
+./launcher-Linux >launcher_out 2>&1
+res=$?
+runOK=true
+if [ $res -eq 1 -o $res -eq 0 ] 
+then
+	runOK=true
+else
+	runOK=false
+	export LD_LIBRARY_PATH="$PWD:$PWD/lib:$LD_LIBRARY_PATH"
+	./launcher-Linux > launcher_out2  2>&1
+	res=$?
+	if [  $res = 1 -o  $res = 0 ]
+	then
+		runOK=true
+	fi
+	
+fi
+
+if [ $runOK = false ]
+then
+	cat launcher_out	
+	echo
+	cat launcher_out2
+	echo
+	if grep -q 'libstdc++.so.6:' launcher_out ; then
+		echo You need the libstdc++6 library correctly instaled in your system to use 
+		echo the installation program.
+		echo
+		echo "In a debian-based distribution (if you have root privileges)"
+		echo you can run the command:
+		echo '    apt-get install libstdc++6'
+
+	fi
+	if grep -q 'libc.so.6:' launcher_out ; then
+		echo You need the libc6 library correctly instaled in your system to use 
+		echo the installation program.
+		echo
+		echo "In a debian-based distribution (if you have root privileges)"
+		echo you can run the command:
+		echo '    apt-get install libc6'
+	fi
+	echo
+fi
+
+cd ..
+rm -r ./_tmp_install 2>&1 >/dev/null
+exit 0 

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/h_gvSIG-install.sh
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.JPG
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/papelera.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/papelera.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/Logo_gvsig_gva.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/Logo_gvsig_gva.jpg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall1.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/Logo-gvSIG.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/Logo-gvSIG.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall1.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/Logo-gvSIG.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/Logo-gvSIG.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/help16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/help16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall16x16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/.xvpics/uninstall16x16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.GIF
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/help.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/uninstall.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/images/ico-gvSIG.ico
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cat
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cat	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cat	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Ruta a gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_cat
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_fra
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_fra	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_fra	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_fra
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_eng
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_eng	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_eng	(revision 30230)
@@ -0,0 +1,12 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+    <str id="UserInputPanel.search.autodetect.failed.message"    txt="Autodetection failed."/>
+    <str id="UserInputPanel.search.autodetect.failed.caption"    txt="Autodetection failed."/>
+    <str id="UserInputPanel.search.autodetect.tooltip"           txt="Check for the file or directory in the paths given above."/>
+    <str id="UserInputPanel.search.location"           txt="Enter location of {0}."/>
+    <str id="UserInputPanel.search.location.checkedfile" txt="The existence of {0} is checked."/>
+    <str id="UserInputPanel.search.browse"           txt="Browse..."/>
+    <str id="UserInputPanel.search.wrongselection.message"   txt="The file or directory you choose either does not exist or is not appropiate. You must have gvSIG installed in the selected directory."/>
+    <str id="UserInputPanel.search.wrongselection.caption"   txt="Invalid selection."/>
+  
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_eng
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputSpec.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputSpec.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputSpec.xml	(revision 30230)
@@ -0,0 +1,21 @@
+<userInput>
+	<panel order="0">
+		<field 	type="search" 
+				variable="INSTALL_PATH"
+				size="45">
+  			<description align="left" />
+  			<spec 	txt="Path to gvSIG:" 
+		  			id="text.label"
+  					checkfilename="bin/andami.jar"
+        			type="directory" 
+        			result="directory">
+  			<choice value="/usr/local/gvSIG_1.0" os="unix" />
+  			<choice value="/opt/gvSIG_1.0" os="unix" />
+  			<choice value="$USER_HOME/gvSIG_1.0" os="unix" />
+  			<choice value="C:\Archivos de Programa\gvSIG_1.0" os="windows" />
+  			<choice value="C:\Program Files\gvSIG_1.0" os="windows" />
+  			</spec>
+		</field>
+	</panel>
+</userInput>
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputSpec.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/LEEME.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/LEEME.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/LEEME.html	(revision 30230)
@@ -0,0 +1,66 @@
+<html>
+<head>
+<style type="text/css">
+html, body, h1, h2, h3, h4, div, p, ul, li, input {
+   font-family: Arial, Helvetica, sans-serif;
+}
+
+h1 {
+   font-size: large;
+}
+
+h2 {
+   font-size: large;
+}
+
+h3 {
+   font-size: medium;
+}
+</style>
+</head>
+<body>
+<h1>gvSIG, el SIG en software libre de la Generalitat Valenciana
+(http://www.gvsig.gva.es).</h1>
+
+<h2>Autores:</h2>
+<ul>
+<li>Generalitat Valenciana
+ (Conselleria d'Infraestructures i Transport).</li>
+<li>Iver Tecnolog&iacute;as de la Informaci&oacute;n S.A.</li>
+</ul>
+
+<p>Software con licencia GNU/GPL
+(http://www.fsf.org/licensing/licenses/gpl.html)</p>
+
+<p>Contacto:
+	gvsig@gva.es<p>
+
+<h2>Requisitos de la aplicaci&oacute;n:</h2>
+<h3>Sistema</h3>
+<ul>
+<li>M&iacute;nimos: Pentium III / 256 MB RAM.</li>
+<li>Recomendables: Pentium IV / 512 MB RAM.</li>
+<li>Sistemas operativos: plataformas Windows y Linux.
+ Probado en Win98/XP, Linux Suse 8.2/9.0/9.2 y Linux Debian (Lliurex).</li>
+</ul>
+
+<h3>Software instalado</h3> (disponible en http://www.gvsig.gva.es o en http://java.sun.com)
+<ul>
+<li>M&aacute;quina Virtual Java 1.4.2 (06 o superior).</li>
+<li>JAI (Java Advanced Imaging).</li>
+<li>JAI Image I/O.</li>
+</ul>
+
+<p style="text-align:justify">Nota: Las librer&iacute;as JAI y JAI Image I/O deben estar instaladas sobre la M&aacute;quina Virtual Java que gvSIG utilice en su ejecuci&oacute;n. Si se instala una nueva JVM en el sistema y se usa para ejecutar gvSIG ser&aacute; indispensable instalar las librer&iacute;as sobre &eacute;sta (gvSIG se ejecuta con la JVM que tenga por defecto el sistema operativo; para saber cu&aacute;l es, ejecutar <span style="monospace">"java&nbsp;-version"</span> en un interfaz de comandos o consola).</p>
+
+<h2>M&aacute;s informaci&oacute;n y soporte en:</h2>
+<h3> Web oficial del proyecto:</h3>
+	http://www.gvsig.gva.es
+
+<h3>Listas de distribuci&oacute;n:</h3>
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_usuarios</span> (soporte para usuarios).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores</span> (soporte para desarrolladores).
+<span style="monospace"> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional</span> (soporte para desarrolladores o usuarios de habla no hispana).
+
+</body>
+</html>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/LEEME.html
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_deu
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_deu	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_deu	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_deu
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_ita
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_ita	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_ita	(revision 30230)
@@ -0,0 +1,3 @@
+<langpack>
+  <str id="text.label" txt="Path to gvSIG:"/>
+</langpack>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/resources/userInputLang.xml_ita
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/.cvsignore
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/.cvsignore	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/.cvsignore	(revision 30230)
@@ -0,0 +1,2 @@
+./libs
+linux
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/build.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/build.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/build.xml	(revision 30230)
@@ -0,0 +1,27 @@
+<project name="instalador-gvSIG" default="init" basedir=".">
+	
+	<property name="base_dir" location="./"/>		
+	<property name="izpack_dir" location="${INSTALL_GVSIG_PATH}/IzPack"/>
+	<property name="dir_libs" location="${izpack_dir}/lib"/>
+	
+	<taskdef name="izpack" classpath="${dir_libs}/compiler.jar" classname="com.izforge.izpack.ant.IzPackTask"/>
+	
+	<target name="init">
+		<izpack input="install.xml" 
+				output="${JARNAME}" 
+				installerType="standard" 
+				basedir="${base_dir}" 
+				izPackDir="${izpack_dir}/"/>
+	</target>
+	
+	<target name="clean">
+		<delete>
+			<fileset dir=".">
+			    <include name="**.zip"/>
+			</fileset>
+		</delete>
+		<delete dir="bin" />
+		<delete dir="extensions" />
+	</target>
+	
+</project>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux/build.xml
___________________________________________________________________
Added: svn:eol-style
   + native


Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/linux
___________________________________________________________________
Added: svn:ignore
   + ./libs
linux


Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/variables.sh
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/variables.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/variables.sh	(revision 30230)
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+export APPNAME=gvSIG_pilot_redes
+export FULLVERSION='1.0'
+export TARGET_DIR=/tmp/versiones/
+
+
+## estas extensiones se muestran en los packs, y se puede elegir instalarlos o no
+## (el fichero install.xml tambiÃ©n debe estar actualizado para reflejar esto)
+EXTENSIONS=(
+com.iver.cit.gvsig.graph
+)
+
+## estas extensiones se instalan pero no se muestran en los packs
+MANDATORY_EXTENSIONS=(
+com.iver.cit.gvsig.graph
+)
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/old/variables.sh
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/variables.sh
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/variables.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/variables.sh	(revision 30230)
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+export APPNAME=gvSIG_pilot_redes
+export FULLVERSION='1.0'
+export TARGET_DIR=/tmp/"$APPNAME"/versiones
+#export TARGET_DIR=/mnt/sercartlin/grupo-sig-ca/Testing/Versiones/
+export MAIN_INSTALL_PLUGIN=com.iver.cit.gvsig.graph #Nombre del plugin que proporciona el 'build.nuber' para la distribucion
+
+## estas extensiones se muestran en los packs, y se puede elegir instalarlos o no
+## (el fichero install.xml tambien debe estar actualizado para reflejar esto)
+EXTENSIONS=(
+"$MAIN_INSTALL_PLUGIN"
+)

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/variables.sh
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/install.xml
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/install.xml	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/install.xml	(revision 30230)
@@ -0,0 +1,80 @@
+<installation version="1.0">
+	<info>
+		<appname>gvSIG_pitolo_redes_1.0</appname>
+		<appversion>1.0</appversion>
+		<authors>
+			<author name="Generalitat Valenciana. Conselleria d'Infraestructures i Transport" email="" />
+			<author name="Iver TecnologÃ­as de la InformaciÃ³n S.A." email="" />
+		</authors>
+		<url>http://www.gvsig.gva.es/</url>
+		<javaversion>1.4</javaversion>
+	</info>
+
+	<guiprefs height="600" resizable="yes" width="800">
+		<laf name="liquid">
+			<os family="unix" />
+		</laf>
+		<laf name="liquid">
+			<os family="windows" />
+		</laf>
+	</guiprefs>
+
+	<locale>
+		<langpack iso3="spa"/>
+		<langpack iso3="val"/>
+		<langpack iso3="eng"/>
+		<langpack iso3="cat"/>
+		<langpack iso3="chn"/>
+		<langpack iso3="cze"/>
+		<langpack iso3="dan"/>
+		<langpack iso3="deu"/>
+		<langpack iso3="fin"/>
+		<langpack iso3="fra"/>
+		<langpack iso3="glg"/>
+		<langpack iso3="hun"/>
+		<langpack iso3="ita"/>
+		<langpack iso3="jpn"/>
+		<langpack iso3="mys"/>
+		<langpack iso3="ned"/>
+		<langpack iso3="nor"/>
+		<langpack iso3="pol"/>
+		<langpack iso3="por"/>
+		<langpack iso3="rom"/>
+		<langpack iso3="rus"/>
+		<langpack iso3="scg"/>
+		<langpack iso3="svk"/>
+		<langpack iso3="swe"/>
+		<langpack iso3="ukr"/>
+	</locale>
+
+	<resources>
+		<res src="resources/gpl.txt" id="LicencePanel.licence"/>
+		<res src="resources/LEEME.html" id="HTMLInfoPanel.info"/>
+		<res src="resources/images/Logo_gvsig_gva.jpg" id="Installer.image"/>
+		<res src="resources/userInputSpec.xml" id="userInputSpec.xml"/>
+                <parsable os="linux" targetfile="resources/userInputSpec.xml"/>
+                <res src="resources/userInputLang.xml_val" id="userInputLang.xml_val" />
+                <res src="resources/userInputLang.xml_spa" id="userInputLang.xml_spa" />
+	</resources>
+
+	<panels>
+		<panel classname="HTMLInfoPanel"/>
+		<panel classname="LicencePanel"/>
+		<panel classname="PacksPanel"/>
+		<panel classname="UserInputPanel"/>
+		<panel classname="InstallPanel"/>
+		<panel classname="SimpleFinishPanel"/>
+	</panels>
+
+	<packs>
+
+    <pack name="Piloto redes" required="yes">
+      <description>Aplicacion ganadora del Concurso de redes</description>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/" src="extensiones/com.iver.cit.gvsig.graph" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.graph-fmap-gvsig.jar" override="true"/>
+      <file targetdir="$INSTALL_PATH/bin/gvSIG/extensiones/com.iver.cit.gvsig/lib/" src="../../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/lib/com.iver.cit.gvsig.graph-gvsig.jar" override="true"/>
+    </pack>
+
+</packs>
+
+</installation>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/install.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/distribucion.sh
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/distribucion.sh	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/distribucion.sh	(revision 30230)
@@ -0,0 +1,235 @@
+#!/bin/bash
+
+# Si se produce un error, salimos inmediatamente
+set -e
+
+
+# Obtenemos el locale
+LOC=`echo $LANG | sed 's/_.*//'`
+
+# Comprobar que estamos en el directorio adecuado
+if [ "$LOC" = "es" ] ; then
+  ERROR_BASEDIR="Este script debe invocarse desde el directorio  \'install\' del proyecto"
+else
+  ERROR_BASEDIR="This script must be run from the \'install\' directory of the project"
+fi
+if [ ! -d ../../install/instalador-gvSIG-lin ] || [ ! -d ../../install/instalador-gvSIG-win ] || [ ! -d ../../_fwAndami ] ; then
+        echo $ERROR_BASEDIR
+        exit 1 ;
+fi
+
+DIR_BASE=`pwd`
+GVSIG_INSTALLDIR=`readlink -f ../../install`
+ANDAMI_DIR=`readlink -f ../../_fwAndami`
+
+source variables.sh
+# Get a version with format 1_0_alpha
+UNDERSCORE_VERSION=`echo $FULLVERSION | sed 'y/./_/'`
+# Get a version with format 10_alpha
+BRIEFVERSION=`echo $FULLVERSION | sed 's/\.//'`
+# The name of the dir which will be ZIPed, containing the resulting installer
+INSTALLER_DIR="$APPNAME"-$FULLVERSION\_installer
+JARNAME="$APPNAME"-"$FULLVERSION".jar
+# The extension targets on the this version of gvSIG:
+GVSIG_VERSION=1.0
+
+BUILDNUMBER=`sed -n 's/build.number=//p' "$ANDAMI_DIR"/gvSIG/extensiones/"$MAIN_INSTALL_PLUGIN"/build.number`
+
+#ZIPNAME="$APPNAME"-"$UNDERSCORE_VERSION"\_"$BUILDNUMBER".zip
+DIR_LIN=.
+DIR_WIN=.
+
+DIR_LIN_GVSIG="$GVSIG_INSTALLDIR"/instalador-gvSIG-lin
+DIR_WIN_GVSIG="$GVSIG_INSTALLDIR"/instalador-gvSIG-win
+
+
+WINDOWSZIP="$APPNAME"-"$BRIEFVERSION"\_"$BUILDNUMBER"-windows-i586.7z
+LINUXZIP="$APPNAME"-"$BRIEFVERSION"\_"$BUILDNUMBER"-linux-i586.tgz
+
+LINUXBIN="$APPNAME"-"$BRIEFVERSION"\_"$BUILDNUMBER"-linux-i586.bin
+
+WINDOWSEXE="$APPNAME"-"$BRIEFVERSION"\_"$BUILDNUMBER"-windows-i586.exe
+
+#Directorios
+#OUTPUT_DIR=/mnt/sercartlin/grupo-sig-ca/Testing/Versiones/v"$FULLVERSION"\_"$BUILDNUMBER"
+OUTPUT_DIR="$TARGET_DIR"/v"$FULLVERSION"\_"$BUILDNUMBER"
+PATH_SOURCE_EXT="$ANDAMI_DIR"/gvSIG/extensiones
+
+
+echo "*****************"
+echo "      BASE       "
+echo "*****************"
+
+cd "$DIR_BASE"/
+rm bin -rf
+mkdir -p bin/gvSIG/extensiones
+#cp "$DIR_WIN_GVSIG"/installer_files/LEEME "$DIR_WIN_GVSIG"installer_files/LLIG-ME "$DIR_WIN_GVSIG"installer_files/README bin
+cp resources/gpl.txt bin
+# No enlazamos directamente el directorio lib para no incluir el directorio CVS
+mkdir -p bin/lib
+cd "$DIR_BASE"/bin/lib
+for i in "$ANDAMI_DIR"/lib/*.jar ; do
+  ln -s "$i" .
+done
+for i in "$ANDAMI_DIR"/lib/*.zip ; do
+  ln -s "$i" .
+done
+cd "$DIR_BASE"/
+ln -s "$ANDAMI_DIR"/andami.jar bin/
+ln -s "$ANDAMI_DIR"/castor.properties bin/
+#cp resources/andami-config.xml bin
+echo OK.
+
+
+# Para Windows
+#Copiamos el lanzador y sus tracuciones al tmpResources
+rm -Rf tmpResources
+mkdir tmpResources
+cp -R "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3/dist/* ./tmpResources
+mv ./tmpResources/launcher-Win32.exe ./tmpResources/gvSIG.exe
+#Quitamos el ini, manifest y los CVS
+rm ./tmpResources/*.ini ./tmpResources/*.manifest
+find ./tmpResources -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+echo OK.
+
+# Estas extensiones se copian directamente al directorio destino, ya que no vamos a dar
+# opcion a no instalarlas, son obligatorias
+cd "$DIR_BASE"
+i=0
+while [ ! -z ${MANDATORY_EXTENSIONS[$i]} ]
+do
+  echo ln -s "$PATH_SOURCE_EXT"/${MANDATORY_EXTENSIONS[$i]} bin/gvSIG/extensiones
+  ln -s "$PATH_SOURCE_EXT"/${MANDATORY_EXTENSIONS[$i]} bin/gvSIG/extensiones
+  i=`expr $i + 1`
+done
+
+echo "*****************"
+[ $LOC = "es" ] && echo "   EXTENSIONES   "
+[ $LOC != "es" ] && echo "   EXTENSIONS   "
+echo "*****************"
+
+rm -rf extensiones
+mkdir extensiones
+
+i=0
+while [ ! -z ${EXTENSIONS[$i]} ]
+do
+  [ $LOC = "es" ] && echo "Enlazando "${EXTENSIONS[$i]}
+  [ $LOC != "es" ] && echo "Linking "${EXTENSIONS[$i]}
+  echo ln -s "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} extensiones
+  ln -s "$PATH_SOURCE_EXT"/${EXTENSIONS[$i]} extensiones
+  i=`expr $i + 1`
+done
+
+echo "*****************"
+echo "    INST     "
+echo "*****************"
+# Generar el instalador (jar)
+cd "$DIR_BASE"/
+rm "$JARNAME" -f
+ant -DJARNAME="$JARNAME" -DGVSIG_VERSION="$GVSIG_VERSION" -DAPPNAME="$APPNAME"
+
+
+echo "******************"
+[ $LOC = "es" ] && echo " GENERAR DISTRIB "
+[ $LOC != "es" ] && echo " GENERATE DISTRIB "
+echo "******************"
+# Generar el tar.gz para Linux y el EXE para Windows
+
+mkdir -p "$OUTPUT_DIR"
+echo "- Linux"
+## Nueva instalacion para linux
+rm -Rf "$INSTALLER_DIR"
+mkdir -p "$INSTALLER_DIR"/tmp_gvSIGInstall
+cp "$JARNAME" "$INSTALLER_DIR"/tmp_gvSIGInstall
+cd "$INSTALLER_DIR"
+chmod u+x "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3_linux/dist/launcher-Linux
+cp -R "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3_linux/dist/* ./tmp_gvSIGInstall
+chmod a+x ./tmp_gvSIGInstall/launcher-Linux
+find . -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+
+sed "s/%JARNAME%/$JARNAME/" ./tmp_gvSIGInstall/launcher.ini > ./tmp_gvSIGInstall/launcher.ini.bak
+mv ./tmp_gvSIGInstall/launcher.ini.bak ./tmp_gvSIGInstall/launcher.ini;
+
+tar -cvzf ./tmp.tgz ./tmp_gvSIGInstall
+echo '#!/bin/sh' > xx.tmp
+lcount=`cat xx.tmp "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3_linux/h_gvSIG-install.sh | wc -l`
+lcount=$(($lcount+2)) # sumamos dos: uno por la linea siguiente y otro para el inicio
+echo "lcount=$lcount" >> xx.tmp
+cat xx.tmp "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3_linux/h_gvSIG-install.sh ./tmp.tgz  > "$LINUXBIN"
+rm xx.tmp
+chmod a+x "$LINUXBIN"
+mv "$LINUXBIN" "$OUTPUT_DIR"
+cd "$DIR_BASE"/
+rm -Rf "$INSTALLER_DIR"
+## Fin Nueva instalacion para linux
+
+## Para Windows
+echo "- Windows"
+#set -x
+cd "$DIR_BASE"
+rm -Rf "$INSTALLER_DIR"
+
+mkdir "$INSTALLER_DIR"
+cp -aR "$GVSIG_INSTALLDIR"/launcher/izpack-launcher-1.3/dist/* "$INSTALLER_DIR"
+rm -f "$INSTALLER_DIR"/install.bat
+
+find "$INSTALLER_DIR" -name CVS -type d -exec rm -rf {} 2> /dev/null ';' || true
+
+## hacemos las sustituciones de la variable
+sed "s/%JARNAME%/$JARNAME/" "$INSTALLER_DIR"/launcher-Win32.ini > "$INSTALLER_DIR"/launcher-Win32.ini.bak
+mv "$INSTALLER_DIR"/launcher-Win32.ini.bak "$INSTALLER_DIR"/launcher-Win32.ini;
+
+
+mv "$JARNAME" "$INSTALLER_DIR"
+cd "$INSTALLER_DIR"
+
+if [ -f  "$DIR_BASE"/"$WINDOWSZIP" ] ; then
+	rm -f "$DIR_BASE"/"$WINDOWSZIP"
+fi
+chmod u+x "$GVSIG_INSTALLDIR"/launcher/7z/7za
+"$GVSIG_INSTALLDIR"/launcher/7z/7za a -r "$DIR_BASE"/"$WINDOWSZIP" *
+cd -
+sed "s/%TITLE%/$APPNAME-$BRIEFVERSION\_$BUILDNUMBER/" "$GVSIG_INSTALLDIR"/launcher/7z/dist_config.txt > dist_config.txt
+cat "$GVSIG_INSTALLDIR"/launcher/7z/7zS.sfx  dist_config.txt "$WINDOWSZIP" > "$WINDOWSEXE"
+
+###
+
+
+rm dist_config.txt
+rm "$WINDOWSZIP"
+
+rm -Rf "$INSTALLER_DIR"
+
+mv "$WINDOWSEXE" "$OUTPUT_DIR"
+
+# Limpiamos tmpResources
+cd "$DIR_BASE"/
+rm -r ./tmpResources
+cd -
+
+## Limpiamos
+
+rm -rf extensiones
+rm -rf bin
+
+echo "******************"
+[ $LOC = "es" ] && echo " GENERAR FUENTES "
+[ $LOC != "es" ] && echo " GENERATE SOURCES "
+echo "******************"
+
+cd ..
+ant generate-source-package
+mv dist-src/gv*-src.zip "$OUTPUT_DIR"
+cd -
+
+
+echo "*****************"
+echo "    FIN     "
+echo "*****************"
+
+echo ""
+echo "Generados los ficheros:"
+echo "$OUTPUT_DIR"
+ls -lh "$OUTPUT_DIR"
+cd "$DIR_BASE"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install/distribucion.sh
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/install
___________________________________________________________________
Added: svn:ignore
   + bin
extensiones
nomenclatorIGN-*.zip


Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/commons-collections-3.2.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/commons-collections-3.2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/jung-1.7.4.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/jung-1.7.4.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/colt.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/colt.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/commons-collections-testframework-3.2.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/commons-collections-testframework-3.2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/concurrent.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/lib/concurrent.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/plantilla.htm
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/plantilla.htm	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/plantilla.htm	(revision 30230)
@@ -0,0 +1,96 @@
+<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
+<html>
+<head>
+<title>Documento sin t&iacute;tulo</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<style type='text/css'>
+<!--   .normal { 	font-family: Arial, Helvetica, sans-serif;	font-size: 10px; font-style: normal; color: #333333;} h1 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 14px;
+}
+a {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 10px;
+	font-style: italic;
+	font-weight: bold;
+}
+.distancia {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 10px;
+	color: #666666;
+}
+.resumen {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 12px;
+	color: #333333;
+}
+.left {
+	color: #990000;
+	font-weight: bold;
+}
+.right {
+	color: #0033FF;
+	font-weight: bold;
+}
+--> 
+</style>
+</head>
+
+<body>
+<h1>Informe de Ruta:SOMONTES AL PALACIO DE LA REAL QUINTA-MONTE CARMELO</h1>
+<br>
+<span class="resumen"> Salida desde: <b>SOMONTES AL PALACIO DE LA REAL QUINTA</b><br>
+Llegada a:<b> MONTE CARMELO</b><br>
+Longitud total del trayecto: <b>9,020.31</b></span> 
+<hr width ="70%">
+<table>
+  <tr>
+    <td width="40"><img src="images/drapeau_depart.gif" width="18" height="26"></td>
+    <td class='normal'>1. Salir de:<b> SOMONTES AL PALACIO DE LA REAL QUINTA</b></td></tr><tr>
+    <td width="40" class='normal'>&nbsp;
+    <td><a href="images/0">Ver sobre el mapa</a></tr></table><hr width ="70%">
+<table>
+  <tr>
+    <td width="40"><img src="images/turn-left.png" width="32" height="32"></td>
+    <td class='normal'>2 Continúe por <b>SOMONTES AL PALACIO DE LA REAL QUINTA</b> 
+      durante 447.44 y gire a la <span class="left"><b>izquierda</b></span> por 
+      <b>M-30 (CTRA DEL PARDO)</b></td>
+  </tr><tr>
+    <td width="40">&nbsp;</td>
+    <td class="distancia">Distancia acumulada: 447.44 metros</td>
+  </tr><tr>
+    <td width="40">&nbsp;
+    <td><a href="images/0">Ver sobre el mapa</a></tr></table><hr width ="70%">
+<table>
+  <tr>
+    <td width="40"><img src="images/turn-left.png" width="32" height="32"></td>
+    <td class='normal'>3 Continúe por <b>M-30 (CTRA DEL PARDO)</b> durante  2,320.58 y  gire a la <b>izquierda</b> por <b>LA ALBERCA</b></td></tr><tr>
+    <td width="40">&nbsp;</td>
+    <td class="distancia">Distancia acumulada: 2,768.02</td>
+  </tr><tr>
+    <td width="40">&nbsp;
+    <td><a href="images/1,2,3">Ver sobre el mapa</a></tr></table><hr width ="70%">
+<table>
+  <tr>
+    <td width="40"><img src="images/turn-right.png" width="32" height="32"></td>
+    <td class='normal'>4 Continúe por <b>LA ALBERCA</b> durante 355.99 y gire 
+      a la <span class="right"><b>derecha</b></span> por <b>SOMONTES</b></td>
+  </tr><tr>
+    <td width="40">&nbsp;</td>
+    <td class="distancia">Distancia acumulada: 3,124.01</td>
+  </tr><tr>
+    <td width="40">&nbsp;
+    <td><a href="images/4,5,6">Ver sobre el mapa</a></tr></table>
+<hr width ="70%">
+<table>
+  <tr>
+    <td width="40"><img src="images/drapeau_arrivee.gif" width="18" height="26"></td>
+    <td class="resumen">16. Llegada: MONTE CARMELO</td>
+  </tr><tr>
+    <td width="40">&nbsp;</td>
+    <td class="distancia">Longitud: 9,020.31</td>
+  </tr><tr>
+    <td width="40">&nbsp;
+    <td><a href="images/24">Ver sobre el mapa</a></tr></table>
+ </body>
+</html>

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/plantilla.htm
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapLineIntersector.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapLineIntersector.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapLineIntersector.java	(revision 30230)
@@ -0,0 +1,436 @@
+/*
+ * Created on 27-sep-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-10-19 16:06:48  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/17 18:25:53  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/05 19:20:57  azabala
+ * first version in cvs
+ *
+ * Revision 1.1  2006/10/02 19:06:56  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.vividsolutions.jts.operation.overlay;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.algorithm.RobustLineIntersector;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.LineSegment;
+
+public class SnapLineIntersector extends RobustLineIntersector {
+
+	double snapTolerance;
+
+	public SnapLineIntersector(double snapTolerance) {
+		super();
+		this.snapTolerance = snapTolerance;
+	}
+
+	public void computeIntersection(Coordinate p, Coordinate p1, Coordinate p2) {
+		isProper = false;
+		Envelope snapEnvelope = new Envelope(p.x - snapTolerance,
+				p.x + snapTolerance,
+				p.y - snapTolerance,
+				p.y + snapTolerance);
+		Envelope segmentEnvelope = new Envelope(p1, p2);
+		if(segmentEnvelope.intersects(snapEnvelope))
+		{
+			LineSegment segment = new LineSegment(p1, p2);
+			/*
+			 * TODO SERIA MUY INTERESANTE QUE, ADEMAS DE VER SI EL PUNTO MAS
+			 * PROXIMO DEL SEGMENTO AL PUNTO DADO ENTRA EN SNAP, VER TAMBIÉN EL
+			 * REGISTRO DE NODOS (NODEMAP)????
+			 * 
+			 */
+			Coordinate intersectionCandidate = segment.closestPoint(p);
+			if (intersectionCandidate.distance(p) <= snapTolerance) {
+				isProper = true;
+				//verify if it is an extreme point
+				if (intersectionCandidate.distance(p1) <= snapTolerance) {
+					isProper = false;
+					result = DO_INTERSECT;
+					intPt[0] = p1;//we snaps to the point
+				}
+				
+				if (intersectionCandidate.distance(p2) <= snapTolerance){
+					isProper = false;
+					result = DO_INTERSECT;
+					intPt[0] = p2;//we snaps to the point
+				}
+				
+				result = DO_INTERSECT;
+				intPt[0] = intersectionCandidate;
+				return;
+			}//distance < snap tolerance
+		}//segmentEnvelope 
+		result = DONT_INTERSECT;
+	}
+	
+	
+	
+	
+	public int computeIntersect(Coordinate p1, Coordinate p2,
+								Coordinate q1, Coordinate q2) {
+		isProper = false;
+		Envelope env1 = new Envelope(p1, p2);
+		double newMinX = env1.getMinX() - snapTolerance;
+		double newMaxX = env1.getMaxX() + snapTolerance;
+		double newMinY = env1.getMinY() - snapTolerance;
+		double newMaxY = env1.getMaxY() + snapTolerance;
+		env1 = new Envelope(newMinX, newMaxX, newMinY, newMaxY);
+		
+		Envelope env2 = new Envelope(q1, q2);
+		newMinX = env2.getMinX() - snapTolerance;
+		newMaxX = env2.getMaxX() + snapTolerance;
+		newMinY = env2.getMinY() - snapTolerance;
+		newMaxY = env2.getMaxY() + snapTolerance;
+		env2 = new Envelope(newMinX, newMaxX, newMinY, newMaxY);
+		
+		if(! env1.intersects(env2))
+			return DONT_INTERSECT;
+		
+		/*
+		 * Algoritmo para calcular interseccion de dos segmentos aplicando snapping
+		 * */
+	
+		//1-vemos si intersectan sin necesidad de snap
+		int test = super.computeIntersect(p1, p2, q1, q2);
+		if(test != DONT_INTERSECT)
+			return test;
+		
+	
+		//2-Vemos si son paralelos, y la distancia que los separa es inferior
+		//a la de snap (si fuesen coincidentes ya habría sido detectado
+		
+	   //condiciones de paralelismo en función del producto escalar
+		//ver http://www.faqs.org/faqs/graphics/algorithms-faq/
+		//distancia de punto a recta y de recta a recta
+	    double r_bot = (p2.x-p1.x)*(q2.y-q1.y) - (p2.y-p1.y)*(q2.x-q1.x);
+	    
+	    /*
+	     * Ahora mismo no recuerdo el significado matemático de r_bot
+	     * (es  (Dx1 * Dy2) - (Dy1 * Dx2) siendo (Dx1,Dy1) (Dx2, Dy2)
+	     * los vectores que se está tratando de ver si son paralelos...
+	     * 
+	     * Como no tengo claro qué es, la condición de snap va a ser
+	     * la distancia de snap
+	     * */
+	    
+	   // boolean parallels = (r_bot==0);
+	    
+	    boolean parallels = (Math.abs(r_bot) <= snapTolerance);
+	    
+	    
+	    if  ( parallels ) {      
+	    	//Son paralelos
+	    	double distance1 = CGAlgorithms.distancePointLine(p1, q1, q2);
+	    	double distance2 = CGAlgorithms.distancePointLine(p2, q1, q2);
+	    	double distance = Math.min(distance1, distance2);
+	    	if(distance <= snapTolerance)
+	    		return computeCollinearIntersection(p1, p2, q1, q2);
+	    	else 
+	    		return DONT_INTERSECT;
+	    }
+	    
+	    //Ultimo intento. Probamos a intersectar cada uno de los vertices de la
+	    //linea de entrada
+	    computeIntersection(p1, q1, q2);
+	    if(this.hasIntersection()){
+	    	return result;
+	    }
+	    computeIntersection(p2, q1, q2);
+	    if(this.hasIntersection())
+	    {
+	    	return result;
+	    }
+		return DONT_INTERSECT;
+	}
+	
+	/**
+	 * Returns t param for point P of vector AB in the parametric line equation
+	 * P = t*AB
+	 * 
+	 * @param p
+	 * @param A
+	 * @param B
+	 */
+	private double getParametrizedLineFactor(Coordinate p, Coordinate A, Coordinate B){
+		 double r = ( (p.x - A.x) * (B.x - A.x) + (p.y - A.y) * (B.y - A.y) )
+         /
+       ( (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y) );
+		 return r;
+	}
+
+	
+	/*
+	 * Computes collinear intersections, but instead of considering envelope 
+	 * intersections, it applies parametrized line equations (ideal to snap)
+	 * */
+	private int computeCollinearIntersection(Coordinate p1, Coordinate p2,
+			Coordinate q1, Coordinate q2) {
+
+		/*
+		 * TODO
+		 * Estamos teniendo un problema: La clase SegmentIntersector hace el
+		 * siguiente uso de computeCollinearIntersection:
+		 * 
+		 * li.computeIntersection(p00, p01, p10, p11);
+           if (li.hasIntersection()) {
+      			numIntersections++;
+           if (! isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
+           		hasIntersection = true;
+           		if (includeProper || ! li.isProper() ) {
+           			e0.addIntersections(li, segIndex0, 0);
+           			e1.addIntersections(li, segIndex1, 1);
+                }
+               if (li.isProper()) {
+                            properIntersectionPoint = 
+                            (Coordinate) li.getIntersection(0).clone();
+                           hasProper = true;
+                           if (! isBoundaryPoint(li, bdyNodes))
+                                hasProperInterior = true;
+               }
+               
+               Y esto aparece comentado:
+               	//if (li.isCollinear())
+               	 //hasCollinear = true;
+               
+               En estas circunstancias no se está recuperando
+               el segundo punto de la intersección colineal, ni se 
+               verifica que es una intersección colineal
+     
+		 * */
+		
+		
+		/*
+		 * TODO Otro problema: a la hora de calcular la intersección entre dos
+		 * segmentos colineales, definir bien CUAL VA A SNAPEAR SOBRE CUAL.
+		 * 
+		 * Es decir, en grafoA.computeIntersect(grafoB), las coordenadas del GeometryGraph
+		 * B se moverán a las líneas del GeometryGraph B
+		 * 
+		 * ESTO NO ES TAN IMPORTANTE COMO SNAPEAR EdgeIntersection y Coordinate
+		 * de un Edge
+		 * 
+		 * */
+		
+		/*
+		 * We compute params of p1 and p2 point in q1q2 parametric
+		 * line equation
+		 * */		
+		
+		
+//REHACER ESTO
+//DADAS DOS LINEAS PARALELAS, SI ESTÁN A UNA DISTANCIA (LAS LINEAS)
+//INTERIOR A LA DE SNAP, HAY QUE CONSIDERARLAS COLINEALES..........
+//PERO ES MUY IMPORTANTE SNAPEAR P1 CON Q1-Q2 Y P2 CON Q1-Q2 PARA QUE
+//NO SALGAN COSAS RARAS (EDGEINTERSECTION NO PROPIAS)
+//
+//TAMBIEN HAY QUE DEFINIR UNA POLITICA DE SNAP:
+//QUE LINEA SE MANTIENE Y QUE LINEA SE MUEVE
+//(NO HACER ARBITRARIAMENTE)
+		
+		double rP1 = getParametrizedLineFactor(p1, q1, q2);
+		double rP2 = getParametrizedLineFactor(p2, q1, q2);
+		
+		if(rP1 <= 0 && rP2 <= 0)
+		{
+			// p1---p2--q1----q2
+			intPt[0] = q1;
+			return DO_INTERSECT;
+		}
+		
+		if(rP1 <= 0 && ( (rP2 > 0 && rP2 <=1))){
+			// p1---q1---p2----q2
+			isProper = false;
+			intPt[0] = q1;
+			intPt[1] = p2;
+			return COLLINEAR;
+		}
+		
+		if( (rP1 >0 && rP1 <=1) && (rP2 > 0 && rP2 <= 1)){
+			//p1--q1---q2---p2
+			intPt[0] = q1;
+			intPt[1] = q2;
+			return COLLINEAR;
+		}
+		
+		if((rP1 >0 && rP1 <= 1) && (rP2 > 1)){
+			//q1--p1--q2--p2
+			intPt[0] = p1;
+			intPt[1] = q2;
+			return COLLINEAR;
+			
+		}
+		
+		if((rP1 < 0) && (rP2 > 1)){
+			//p1---q1---q2--p2
+			intPt[0] = q1;
+			intPt[1] = q2;
+			return COLLINEAR;
+		}
+		
+		if((rP1 > 1) && (rP2 > 1)){
+			//q1--q2--p1--p2
+			intPt[0] = q2;
+			return DO_INTERSECT;
+		}
+		return DONT_INTERSECT;
+	}
+
+	
+	
+
+	/**
+	 * Test whether a point lies in the envelopes of both input segments. A
+	 * correctly computed intersection point should return <code>true</code>
+	 * for this test. Since this test is for debugging purposes only, no attempt
+	 * is made to optimize the envelope test.
+	 * 
+	 * @return <code>true</code> if the input point lies within both input
+	 *         segment envelopes
+	 */
+	private boolean isInSegmentEnvelopes(Coordinate intPt) {
+		Envelope env0 = new Envelope(inputLines[0][0], inputLines[0][1]);
+		Envelope env1 = new Envelope(inputLines[1][0], inputLines[1][1]);
+		
+		
+	    Envelope snapEnvelope = new Envelope(intPt.x - snapTolerance,
+									    		intPt.x + snapTolerance,
+									    		intPt.y - snapTolerance,
+									    		intPt.y + snapTolerance);
+	    //TODO Review if we must chech for intersections of containtment
+		return env0.intersects(snapEnvelope) && env1.intersects(snapEnvelope);
+//		return env0.contains(intPt) && env1.contains(intPt);
+	}
+	
+	
+	/***********************************
+	 * *********************************
+	 * Overwrited methods of LineIntersector
+	 * *********************************
+	 * *********************************
+	 * */
+	
+	  /**
+	   * Test whether a point is a intersection point of two line segments.
+	   * Note that if the intersection is a line segment, this method only tests for
+	   * equality with the endpoints of the intersection segment.
+	   * It does <b>not</b> return true if
+	   * the input point is internal to the intersection segment.
+	   *
+	   * @return true if the input point is one of the intersection points.
+	   */
+	  public boolean isIntersection(Coordinate pt) {
+	    for (int i = 0; i < result; i++) {
+	      if (intPt[i].distance(pt) <= snapTolerance) {
+	        return true;
+	      }
+	    }
+	    return false;
+	  }
+
+	 
+	  /**
+	   * Tests whether either intersection point is an interior point of the specified input segment.
+	   *
+	   * @return <code>true</code> if either intersection point is in the interior of the input segment
+	   */
+	  public boolean isInteriorIntersection(int inputLineIndex)
+	  {
+	    for (int i = 0; i < result; i++) {
+	      if (! (   intPt[i].distance(inputLines[inputLineIndex][0] ) <= snapTolerance
+	             || intPt[i].distance(inputLines[inputLineIndex][1])<= snapTolerance )) {
+	        return true;
+	      }
+	    }
+	    return false;
+	  }
+
+	  /*
+	   * TODO
+	   * Estos dos metodos finales hacen uso de static getEdgeDistance, que se ha
+	   * hecho sin tener en cuenta ningún tipo de snap o redondeo.
+	   * 
+	   * No se en que puede afectar (comprobar)
+	   * 
+	   * 
+	   * */
+	  protected void computeIntLineIndex(int segmentIndex) {
+	    double dist0 = getEdgeDistance(segmentIndex, 0);
+	    double dist1 = getEdgeDistance(segmentIndex, 1);
+	    if (dist0 > dist1) {
+	      intLineIndex[segmentIndex][0] = 0;
+	      intLineIndex[segmentIndex][1] = 1;
+	    }
+	    else {
+	      intLineIndex[segmentIndex][0] = 1;
+	      intLineIndex[segmentIndex][1] = 0;
+	    }
+	  }
+
+	  /**
+	   * Computes the "edge distance" of an intersection point along the specified input line segment.
+	   *
+	   * @param segmentIndex is 0 or 1
+	   * @param intIndex is 0 or 1
+	   *
+	   * @return the edge distance of the intersection point
+	   */
+	  public double getEdgeDistance(int segmentIndex, int intIndex) {
+	    double dist = computeEdgeDistance(intPt[intIndex], inputLines[segmentIndex][0],
+	        inputLines[segmentIndex][1]);
+	    return dist;
+	  }
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapLineIntersector.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapPolygonBuilder.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapPolygonBuilder.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapPolygonBuilder.java	(revision 30230)
@@ -0,0 +1,332 @@
+/*
+ * Created on 09-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.operation.overlay;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.EdgeRing;
+import com.vividsolutions.jts.geomgraph.SnappingPlanarGraph;
+import com.vividsolutions.jts.operation.overlay.MaximalEdgeRing;
+import com.vividsolutions.jts.operation.overlay.PolygonBuilder;
+import com.vividsolutions.jts.util.Assert;
+
+public class SnapPolygonBuilder extends PolygonBuilder {
+
+	 private GeometryFactory geometryFactory;
+	  private CGAlgorithms cga;
+	  //private List dirEdgeList;
+	  //private NodeMap nodes;
+	  private List shellList        = new ArrayList();
+
+	  public SnapPolygonBuilder(GeometryFactory geometryFactory, 
+			  CGAlgorithms cga)
+	  {
+		super(geometryFactory, cga);
+	    this.geometryFactory = geometryFactory;
+	    this.cga = cga;
+	  }
+
+	  /**
+	   * Add a complete graph.
+	   * The graph is assumed to contain one or more polygons,
+	   * possibly with holes.
+	   */
+	  public void add(SnappingPlanarGraph graph)
+	  {
+	    add(graph.getEdgeEnds(), graph.getNodes());
+	  }
+
+	  /**
+	   * Add a set of edges and nodes, which form a graph.
+	   * The graph is assumed to contain one or more polygons,
+	   * possibly with holes.
+	   */
+	  public void add(Collection dirEdges, Collection nodes)
+	  {
+		SnappingPlanarGraph.linkResultDirectedEdges(nodes);
+	    List maxEdgeRings = buildMaximalEdgeRings(dirEdges);
+	    List freeHoleList = new ArrayList();
+	    List edgeRings = buildMinimalEdgeRings(maxEdgeRings, shellList, freeHoleList);
+	    sortShellsAndHoles(edgeRings, shellList, freeHoleList);
+	    placeFreeHoles(shellList, freeHoleList);
+	  }
+
+	  public List getPolygons()
+	  {
+	    List resultPolyList = computePolygons(shellList);
+	    return resultPolyList;
+	  }
+
+
+	  /**
+	   * for all DirectedEdges in result, form them into MaximalEdgeRings
+	   */
+	  private List buildMaximalEdgeRings(Collection dirEdges)
+	  {
+	    List maxEdgeRings     = new ArrayList();
+	    for (Iterator it = dirEdges.iterator(); it.hasNext(); ) {
+	      DirectedEdge de = (DirectedEdge) it.next();
+	      if (de.isInResult() && de.getLabel().isArea() ) {
+	        // if this edge has not yet been processed
+	        if (de.getEdgeRing() == null) {
+	          MaximalEdgeRing er = new MaximalEdgeRing(de, geometryFactory, cga);
+	          maxEdgeRings.add(er);
+	          er.setInResult();
+//	System.out.println("max node degree = " + er.getMaxDegree());
+	        }
+	      }
+	    }
+	    return maxEdgeRings;
+	  }
+
+	  private List buildMinimalEdgeRings(List maxEdgeRings, List shellList, List freeHoleList)
+	  {
+	    List edgeRings = new ArrayList();
+	    for (Iterator it = maxEdgeRings.iterator(); it.hasNext(); ) {
+	      MaximalEdgeRing er = (MaximalEdgeRing) it.next();
+	      if (er.getMaxNodeDegree() > 2) {
+	        er.linkDirectedEdgesForMinimalEdgeRings();
+	        List minEdgeRings = er.buildMinimalRings();
+	        // at this point we can go ahead and attempt to place holes, if this EdgeRing is a polygon
+	        EdgeRing shell = findShell(minEdgeRings);
+	        if (shell != null) {
+	          placePolygonHoles(shell, minEdgeRings);
+	          shellList.add(shell);
+	        }
+	        else {
+	          freeHoleList.addAll(minEdgeRings);
+	        }
+	      }
+	      else {
+	        edgeRings.add(er);
+	      }
+	    }
+	    return edgeRings;
+	  }
+
+	  /**
+	   * This method takes a list of MinimalEdgeRings derived from a MaximalEdgeRing,
+	   * and tests whether they form a Polygon.  This is the case if there is a single shell
+	   * in the list.  In this case the shell is returned.
+	   * The other possibility is that they are a series of connected holes, in which case
+	   * no shell is returned.
+	   *
+	   * @return the shell EdgeRing, if there is one
+	   * @return null, if all the rings are holes
+	   */
+	  private EdgeRing findShell(List minEdgeRings)
+	  {
+	    int shellCount = 0;
+	    EdgeRing shell = null;
+	    for (Iterator it = minEdgeRings.iterator(); it.hasNext(); ) {
+	      EdgeRing er = (MinimalEdgeRing) it.next();
+	      if (! er.isHole()) {
+	        shell = er;
+	        shellCount++;
+	      }
+	    }
+	    Assert.isTrue(shellCount <= 1, "found two shells in MinimalEdgeRing list");
+	    return shell;
+	  }
+	  /**
+	   * This method assigns the holes for a Polygon (formed from a list of
+	   * MinimalEdgeRings) to its shell.
+	   * Determining the holes for a MinimalEdgeRing polygon serves two purposes:
+	   * <ul>
+	   * <li>it is faster than using a point-in-polygon check later on.
+	   * <li>it ensures correctness, since if the PIP test was used the point
+	   * chosen might lie on the shell, which might return an incorrect result from the
+	   * PIP test
+	   * </ul>
+	   */
+	  private void placePolygonHoles(EdgeRing shell, List minEdgeRings)
+	  {
+	    for (Iterator it = minEdgeRings.iterator(); it.hasNext(); ) {
+	      MinimalEdgeRing er = (MinimalEdgeRing) it.next();
+	      if (er.isHole()) {
+	        er.setShell(shell);
+	      }
+	    }
+	  }
+	  /**
+	   * For all rings in the input list,
+	   * determine whether the ring is a shell or a hole
+	   * and add it to the appropriate list.
+	   * Due to the way the DirectedEdges were linked,
+	   * a ring is a shell if it is oriented CW, a hole otherwise.
+	   */
+	  private void sortShellsAndHoles(List edgeRings, List shellList, List freeHoleList)
+	  {
+	    for (Iterator it = edgeRings.iterator(); it.hasNext(); ) {
+	      EdgeRing er = (EdgeRing) it.next();
+//	      er.setInResult();
+	      if (er.isHole() ) {
+	        freeHoleList.add(er);
+	      }
+	      else {
+	        shellList.add(er);
+	      }
+	    }
+	  }
+	  /**
+	   * This method determines finds a containing shell for all holes
+	   * which have not yet been assigned to a shell.
+	   * These "free" holes should
+	   * all be <b>properly</b> contained in their parent shells, so it is safe to use the
+	   * <code>findEdgeRingContaining</code> method.
+	   * (This is the case because any holes which are NOT
+	   * properly contained (i.e. are connected to their
+	   * parent shell) would have formed part of a MaximalEdgeRing
+	   * and been handled in a previous step).
+	   */
+	  private void placeFreeHoles(List shellList, List freeHoleList)
+	  {
+	    for (Iterator it = freeHoleList.iterator(); it.hasNext(); ) {
+	      EdgeRing hole = (EdgeRing) it.next();
+	      // only place this hole if it doesn't yet have a shell
+	      if (hole.getShell() == null) {
+	        EdgeRing shell = findEdgeRingContaining(hole, shellList);
+	        Assert.isTrue(shell != null, "unable to assign hole to a shell");
+	        hole.setShell(shell);
+	      }
+	    }
+	  }
+	  /**
+	   * Find the innermost enclosing shell EdgeRing containing the argument EdgeRing, if any.
+	   * The innermost enclosing ring is the <i>smallest</i> enclosing ring.
+	   * The algorithm used depends on the fact that:
+	   * <br>
+	   *  ring A contains ring B iff envelope(ring A) contains envelope(ring B)
+	   * <br>
+	   * This routine is only safe to use if the chosen point of the hole
+	   * is known to be properly contained in a shell
+	   * (which is guaranteed to be the case if the hole does not touch its shell)
+	   *
+	   * @return containing EdgeRing, if there is one
+	   * @return null if no containing EdgeRing is found
+	   */
+	  
+	  
+	  //TODO Estudiar como meter el snapping
+	  private EdgeRing findEdgeRingContaining(EdgeRing testEr, List shellList)
+	  {
+	    LinearRing testRing = testEr.getLinearRing();
+	    Envelope testEnv = testRing.getEnvelopeInternal();
+	    Coordinate testPt = testRing.getCoordinateN(0);
+
+	    EdgeRing minShell = null;
+	    Envelope minEnv = null;
+	    for (Iterator it = shellList.iterator(); it.hasNext(); ) {
+	      EdgeRing tryShell = (EdgeRing) it.next();
+	      LinearRing tryRing = tryShell.getLinearRing();
+	      Envelope tryEnv = tryRing.getEnvelopeInternal();
+	      if (minShell != null) minEnv = minShell.getLinearRing().getEnvelopeInternal();
+	      boolean isContained = false;
+	      if (tryEnv.contains(testEnv)
+	          && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates()) )
+	        isContained = true;
+	      // check if this new containing ring is smaller than the current minimum ring
+	      if (isContained) {
+	        if (minShell == null
+	            || minEnv.contains(tryEnv)) {
+	          minShell = tryShell;
+	        }
+	      }
+	    }
+	    return minShell;
+	  }
+	  private List computePolygons(List shellList)
+	  {
+	    List resultPolyList   = new ArrayList();
+	    // add Polygons for all shells
+	    for (Iterator it = shellList.iterator(); it.hasNext(); ) {
+	      EdgeRing er = (EdgeRing) it.next();
+	      Polygon poly = er.toPolygon(geometryFactory);
+	      resultPolyList.add(poly);
+	    }
+	    return resultPolyList;
+	  }
+
+	  /**
+	   * Checks the current set of shells (with their associated holes) to
+	   * see if any of them contain the point.
+	   */
+	  
+	  //TODO METER SNAPPING
+	  public boolean containsPoint(Coordinate p)
+	  {
+	    for (Iterator it = shellList.iterator(); it.hasNext(); ) {
+	      EdgeRing er = (EdgeRing) it.next();
+	      if (er.containsPoint(p))
+	       return true;
+	    }
+	    return false;
+	  }
+
+
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnapPolygonBuilder.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperation.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperation.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperation.java	(revision 30230)
@@ -0,0 +1,771 @@
+/*
+ * Created on 12-sep-2006 by azabala
+ *
+ */
+package com.vividsolutions.jts.operation.overlay;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.algorithm.LineIntersector;
+import com.vividsolutions.jts.algorithm.PointLocator;
+import com.vividsolutions.jts.algorithms.SnapPointLocator;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geomgraph.Depth;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.DirectedEdgeStar;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeList;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.PlanarGraph;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.geomgraph.SnapEdgeList;
+import com.vividsolutions.jts.geomgraph.SnappingGeometryGraph;
+import com.vividsolutions.jts.geomgraph.SnappingPlanarGraph;
+import com.vividsolutions.jts.io.ParseException;
+import com.vividsolutions.jts.operation.overlay.LineBuilder;
+import com.vividsolutions.jts.operation.overlay.OverlayNodeFactory;
+import com.vividsolutions.jts.operation.overlay.OverlayOp;
+import com.vividsolutions.jts.operation.overlay.PointBuilder;
+import com.vividsolutions.jts.operation.overlay.PolygonBuilder;
+import com.vividsolutions.jts.util.Assert;
+
+/**
+ * TODO 
+ * El codigo esta lleno de coordinateA.distance(coordinateB)
+ * <= snapTolerance;
+ * 
+ * CAMBIAR POR SnapCoordinate, de forma que equals haga
+ * esta comprobacin
+ * 
+ * 
+ */
+public class SnappingOverlayOperation extends OverlayOp {
+	
+	protected final SnapPointLocator ptLocator = new SnapPointLocator();
+	protected GeometryFactory geomFact;
+	protected Geometry resultGeom;
+
+	protected LineIntersector li;
+	
+	protected double snapTolerance;
+	
+	
+	/*Planar graph of the overlay operation*/
+	protected SnappingPlanarGraph graph;
+	
+	/*Geometry graph of each individual geometry*/
+	protected SnappingGeometryGraph[] arg;
+
+	
+	/*It saves all the new edges resulting from intersections of
+	 * edges of geometries A and B. It is a temporal repository, before
+	 * to save them in SnappingPlanarGraph*/
+	protected SnapEdgeList edgeList = null;
+
+	
+/*
+ * El resultado de una operacion de overlay puede contener
+ * puntos, lineas y poligonos.
+ * */	
+	protected List resultPolyList = new ArrayList();
+
+	protected List resultLineList = new ArrayList();
+
+	protected List resultPointList = new ArrayList();
+	
+
+	
+	public static Geometry overlayOp(Geometry geom0, Geometry geom1,
+			int opCode, double tolerance) {
+		SnappingOverlayOperation gov = new SnappingOverlayOperation(geom0,
+				geom1, tolerance);
+		Geometry geomOv = gov.getResultGeometry(opCode);
+		return geomOv;
+	}
+	
+
+	
+	public SnappingOverlayOperation(Geometry g0, Geometry g1, double tolerance) {
+		super(g0, g1);
+		graph = new SnappingPlanarGraph(new OverlayNodeFactory(), tolerance);
+		arg = new SnappingGeometryGraph[2];
+		arg[0] = new SnappingGeometryGraph(tolerance, 0, g0);
+		arg[1] = new SnappingGeometryGraph(tolerance, 1, g1);
+		geomFact = g0.getFactory();
+		li = new SnapLineIntersector(tolerance);
+		edgeList = new SnapEdgeList(tolerance);
+		this.snapTolerance = tolerance;
+	}
+
+	public Geometry getResultGeometry(int funcCode) {
+		computeOverlay(funcCode);
+		return resultGeom;
+	}
+
+	
+	public PlanarGraph getGraph() {
+		return graph;
+	}
+	
+	
+	private boolean isReused = false;
+	/**
+	 * Metodo de utilidad cuando vayamos a intersectar la geometria
+	 * g1 con varias geometrias (g2, g3, g4, .... , etc.)
+	 * 
+	 * Los calculos basicos no se repiten para g1
+	 * 
+	 * */
+	
+	
+	public void setSecondGeometry(Geometry geometry){
+		Geometry g0 = arg[0].getGeometry();
+		 if (g0.getPrecisionModel().compareTo(geometry.getPrecisionModel()) >= 0)
+		      setComputationPrecision(g0.getPrecisionModel());
+		    else
+		      setComputationPrecision(geometry.getPrecisionModel());
+		graph = new SnappingPlanarGraph(new OverlayNodeFactory(), snapTolerance);
+		
+		
+		/*
+		 *TODO
+		 *Deberiamos borrar todos los nodos del GeometryGraph,
+		 *o solo las intersecciones?????
+		 *De todos modos, aunque borrasemos los nodos, getBoundaryNodes
+		 *devolveria nodos cacheados 
+		 * 
+		 * TODO REVISAR
+		 * */
+		arg[0].clearIntersections();
+		
+		
+		
+		arg[1] = new SnappingGeometryGraph(snapTolerance, 1, geometry);
+		geomFact = g0.getFactory();
+		edgeList = new SnapEdgeList(snapTolerance);
+		
+		resultPolyList.clear();
+		resultLineList.clear();
+		resultPointList.clear();
+		
+		resultGeom = null;
+		
+		isReused = true;
+	}
+
+	
+	/*
+	 * ************************************************************
+	 * METODO PRINCIPAL
+	 * ************************************************************
+	 * */
+	private void computeOverlay(int opCode) {
+		
+		/*
+		 * Se copian los NODOS de las dos geometrias. 
+		 * ESTO ES IMPORTANTE, PUES:
+		 * a) un punto origina un nodo.
+		 * b) una linea origina dos nodos
+		 * c) un poligono origina un nodo.
+		 * 
+		 * */
+		copyPoints(0);
+		copyPoints(1);
+		if(! isReused) //esto solo se hace si no se ha calculado ya
+			arg[0].computeSelfNodes(li, false);
+		arg[1].computeSelfNodes(li, false);
+
+		
+		/*
+		 * Calcula las intersecciones.
+		 * Se supone que daran lugar a Nodes, ¿NO?
+		 * Como resultado, cada Edge guardará en sus EdgeIntersectionList
+		 * las intersecciones que hay en sus segmentos (EdgeIntersection).
+		 * 
+		 * Estas intersecciones se representan por:
+		 * -segmento del edge en que ocurren.
+		 * -coordenada
+		 * -distancia al primer vertice del segmento
+		 * 
+		 * ¡OJO¡ COMO RESULTADO DE ESTO NO SE GENERAN EJES NUEVOS.
+		 * PARA HACER SNAP EN LAS INTERSECCIONES TENDRIAMOS QUE RETOCAR LA 
+		 * CLASE EDGEINTERSECTIONLIST
+		 * 
+		 * */
+		arg[0].computeEdgeIntersections(arg[1], li, true);
+		/*
+		 * Ahora lo que se hace es: para cada Edge del grafo,
+		 * se parte (en función de sus intersecciones) y se añaden
+		 * los Edges fragmentados a la colección baseSplitEdges
+		 * 
+		 * */
+		
+		List baseSplitEdges = new ArrayList();
+		arg[0].computeSplitEdges(baseSplitEdges);
+		//TODO Quizas la clave esté tambien en la 2ª geometria
+		arg[1].computeSplitEdges(baseSplitEdges);
+		
+		
+		/*
+		 * Edges resulting of A intersection B, that are in baseSplitEdges 
+		 * Collection, are saved in EdgeList.
+		 * ¡OJO¡ Si aparecen ejes repetidos, no se duplican (pero si 
+		 * que se cambia su etiqueta)
+		 * */
+		//Se copian los nuevos Edges generados en EdgeList
+		insertUniqueEdges(baseSplitEdges);
+		
+		
+		/*Se etiquetan*/
+		computeLabelsFromDepths();
+		
+		/*
+		 * Quita los Edges que hayan sufrido colapso dimensional
+		 * (en la documentacíon de JTS viene algo de esto)
+		 * */
+		replaceCollapsedEdges();
+
+		
+        /*
+         * Finalmente, se añade al SnappingPlanarGraph resultado los Edges
+         * calculados como fruto de las intersecciones (contenidos en EdgeList).
+         * 
+         * Aquí se hace algo muy importante también: se añaden nuevos nodos
+         * al grafo (correspondientes con los extremos de los nuevos Edge
+         * que no estuvieran ya en el grafo)
+         * 
+         * */
+		graph.addEdges(edgeList.getEdges());
+		
+		
+		computeLabelling();
+		labelIncompleteNodes();
+		
+		/**
+		 * The ordering of building the result Geometries is important. Areas
+		 * must be built before lines, which must be built before points. This
+		 * is so that lines which are covered by areas are not included
+		 * explicitly, and similarly for points.
+		 */
+		findResultAreaEdges(opCode);
+		cancelDuplicateResultEdges();
+		
+		
+		//TODO Todos los builders deberán usar los metodos snap de locator
+		SnapPolygonBuilder polyBuilder = new SnapPolygonBuilder(geomFact, cga);
+		polyBuilder.add(graph);
+		resultPolyList = polyBuilder.getPolygons();
+
+		LineBuilder lineBuilder = new LineBuilder(this, geomFact, ptLocator);
+		resultLineList = lineBuilder.build(opCode);
+
+		PointBuilder pointBuilder = new PointBuilder(this, geomFact, ptLocator){
+			 public List build(int opCode)
+			  {
+				 for (Iterator nodeit = getGraph().getNodes().iterator(); nodeit.hasNext(); ) {
+				      Node n = (Node) nodeit.next();
+
+				      // filter out nodes which are known to be in the result
+				      if (n.isInResult())
+				        continue;
+				      // if an incident edge is in the result, then the node coordinate is included already
+				      if (n.isIncidentEdgeInResult())
+				        continue;
+				      if (n.getEdges().getDegree() == 0 || opCode == OverlayOp.INTERSECTION) {
+
+				        /**
+				         * For nodes on edges, only INTERSECTION can result in edge nodes being included even
+				         * if none of their incident edges are included
+				         */
+				          Label label = n.getLabel();
+				          if (SnappingOverlayOperation.checkLabelLocation(label.getLocation(0),
+				        		  label.getLocation(1), opCode)) {
+				            filterCoveredNodeToPoint(n);
+				          }
+				      }
+				 }
+			    return resultPointList;
+			  }
+			 
+			 
+				 
+			 private void filterCoveredNodeToPoint(Node n)
+			  {
+			    Coordinate coord = n.getCoordinate();
+			    if (! isCoveredByLA(coord)) {
+			      Point pt = geomFact.createPoint(coord);
+			      resultPointList.add(pt);
+			    }
+			  }	
+		};
+		resultPointList = pointBuilder.build(opCode);
+
+		// gather the results from all calculations into a single Geometry for
+		// the result set
+		resultGeom = computeGeometry(resultPointList, resultLineList,
+				resultPolyList);
+	}
+	
+	
+	 /**
+	   * This method will handle arguments of Location.NONE correctly
+	   *
+	   * @return true if the locations correspond to the opCode
+	   */
+	  public static boolean isResultOfOp(int loc0, int loc1, int opCode)
+	  {
+	    if (loc0 == Location.BOUNDARY) loc0 = Location.INTERIOR;
+	    if (loc1 == Location.BOUNDARY) loc1 = Location.INTERIOR;
+	    switch (opCode) {
+	    case INTERSECTION:
+	      return loc0 == Location.INTERIOR
+	          && loc1 == Location.INTERIOR;
+	    case UNION:
+	      return loc0 == Location.INTERIOR
+	          || loc1 == Location.INTERIOR;
+	    case DIFFERENCE:
+	      return loc0 == Location.INTERIOR
+	          && loc1 != Location.INTERIOR;
+	    case SYMDIFFERENCE:
+	      return   (     loc0 == Location.INTERIOR &&  loc1 != Location.INTERIOR)
+	            || (     loc0 != Location.INTERIOR &&  loc1 == Location.INTERIOR);
+	    }
+	    return false;
+	  }
+	  
+	  public static boolean isResultOfOp(Label label, int opCode)
+	  {
+	    int loc0 = label.getLocation(0);
+	    int loc1 = label.getLocation(1);
+	    return isResultOfOp(loc0, loc1, opCode);
+	  }
+
+	
+	//TODO Quitar esto de aqui
+	
+	 public static boolean checkLabelLocation(int loc0, int loc1, int opCode)
+	  {
+	    if (loc0 == Location.BOUNDARY) loc0 = Location.INTERIOR;
+	    if (loc1 == Location.BOUNDARY) loc1 = Location.INTERIOR;
+	    switch (opCode) {
+	    case INTERSECTION:
+	      return loc0 == Location.INTERIOR
+	          && loc1 == Location.INTERIOR;
+	    case UNION:
+	      return loc0 == Location.INTERIOR
+	          || loc1 == Location.INTERIOR;
+	    case DIFFERENCE:
+	      return loc0 == Location.INTERIOR
+	          && loc1 != Location.INTERIOR;
+	    case SYMDIFFERENCE:
+	      return   (     loc0 == Location.INTERIOR &&  loc1 != Location.INTERIOR)
+	            || (     loc0 != Location.INTERIOR &&  loc1 == Location.INTERIOR);
+	    }
+	    return false;
+	  }
+
+	private void insertUniqueEdges(List edges) {
+		for (Iterator i = edges.iterator(); i.hasNext();) {
+			Edge e = (Edge) i.next();
+			insertUniqueEdge(e);
+		}
+	}
+
+	/**
+	 * Insert an edge from one of the noded input graphs. Checks edges that are
+	 * inserted to see if an identical edge already exists. If so, the edge is
+	 * not inserted, but its label is merged with the existing edge.
+	 */
+	protected void insertUniqueEdge(Edge e) {
+		
+		//TODO Crear una clase SnapEdge y SnapEdgeList puede ser necesario???
+		//creo que si pq SnapEdgeList mantiene una cache que no considera snap
+		Edge existingEdge = edgeList.findEqualEdge(e);
+		// If an identical edge already exists, simply update its label
+		if (existingEdge != null) {
+			Label existingLabel = existingEdge.getLabel();
+			Label labelToMerge = e.getLabel();
+			
+			// check if new edge is in reverse direction to existing edge
+			// if so, must flip the label before merging it
+			if (!existingEdge.isPointwiseEqual(e)) {
+				labelToMerge = new Label(e.getLabel());
+				labelToMerge.flip();
+			}
+			Depth depth = existingEdge.getDepth();
+			// if this is the first duplicate found for this edge, initialize
+			// the depths
+			if (depth.isNull()) {
+				depth.add(existingLabel);
+			}
+			depth.add(labelToMerge);
+			existingLabel.merge(labelToMerge);
+		} else { // no matching existing edge was found
+			// add this new edge to the list of edges in this graph
+			edgeList.add(e);
+		}
+	}
+
+	
+	/**
+	 * Update the labels for edges according to their depths. For each edge, the
+	 * depths are first normalized. Then, if the depths for the edge are equal,
+	 * this edge must have collapsed into a line edge. If the depths are not
+	 * equal, update the label with the locations corresponding to the depths
+	 * (i.e. a depth of 0 corresponds to a Location of EXTERIOR, a depth of 1
+	 * corresponds to INTERIOR)
+	 */
+	private void computeLabelsFromDepths() {
+		for (Iterator it = edgeList.iterator(); it.hasNext();) {
+			Edge e = (Edge) it.next();
+			Label lbl = e.getLabel();
+			Depth depth = e.getDepth();
+			/*
+			 * Only check edges for which there were duplicates, since these are
+			 * the only ones which might be the result of dimensional collapses.
+			 */
+			if (!depth.isNull()) {
+				depth.normalize();
+				for (int i = 0; i < 2; i++) {
+					if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {
+						/**
+						 * if the depths are equal, this edge is the result of
+						 * the dimensional collapse of two or more edges. It has
+						 * the same location on both sides of the edge, so it
+						 * has collapsed to a line.
+						 */
+						if (depth.getDelta(i) == 0) {
+							lbl.toLine(i);
+						} else {
+							/**
+							 * This edge may be the result of a dimensional
+							 * collapse, but it still has different locations on
+							 * both sides. The label of the edge must be updated
+							 * to reflect the resultant side locations indicated
+							 * by the depth values.
+							 */
+							Assert
+									.isTrue(!depth.isNull(i, Position.LEFT),
+											"depth of LEFT side has not been initialized");
+							lbl.setLocation(i, Position.LEFT, depth
+									.getLocation(i, Position.LEFT));
+							Assert
+									.isTrue(!depth.isNull(i, Position.RIGHT),
+											"depth of RIGHT side has not been initialized");
+							lbl.setLocation(i, Position.RIGHT, depth
+									.getLocation(i, Position.RIGHT));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * If edges which have undergone dimensional collapse are found, replace
+	 * them with a new edge which is a L edge
+	 */
+	private void replaceCollapsedEdges() {
+		List newEdges = new ArrayList();
+		for (Iterator it = edgeList.iterator(); it.hasNext();) {
+			Edge e = (Edge) it.next();
+			if (e.isCollapsed()) {
+				//	Debug.print(e);
+				it.remove();
+				newEdges.add(e.getCollapsedEdge());
+			}
+		}
+		edgeList.addAll(newEdges);
+	}
+
+	/**
+	 * Copy all nodes from an arg geometry into this graph. The node label in
+	 * the arg geometry overrides any previously computed label for that
+	 * argIndex. (E.g. a node may be an intersection node with a previously
+	 * computed label of BOUNDARY, but in the original arg Geometry it is
+	 * actually in the interior due to the Boundary Determination Rule)
+	 */
+	private void copyPoints(int argIndex) {
+		for (Iterator i = arg[argIndex].getNodeIterator(); i.hasNext();) {
+			Node graphNode = (Node) i.next();
+			Node newNode = graph.addNode(graphNode.getCoordinate());
+			newNode.setLabel(argIndex, graphNode.getLabel().getLocation(
+					argIndex));
+		}
+	}
+
+	/**
+	 * Compute initial labelling for all DirectedEdges at each node. In this
+	 * step, DirectedEdges will acquire a complete labelling (i.e. one with
+	 * labels for both Geometries) only if they are incident on a node which has
+	 * edges for both Geometries
+	 */
+	private void computeLabelling() {
+		for (Iterator nodeit = graph.getNodes().iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			node.getEdges().computeLabelling(arg);
+		}
+		mergeSymLabels();
+		updateNodeLabelling();
+		
+	}
+
+	/**
+	 * For nodes which have edges from only one Geometry incident on them, the
+	 * previous step will have left their dirEdges with no labelling for the
+	 * other Geometry. However, the sym dirEdge may have a labelling for the
+	 * other Geometry, so merge the two labels.
+	 */
+	private void mergeSymLabels() {
+		for (Iterator nodeit = graph.getNodes().iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			((DirectedEdgeStar) node.getEdges()).mergeSymLabels();
+		}
+	}
+
+	private void updateNodeLabelling() {
+		// update the labels for nodes
+		// The label for a node is updated from the edges incident on it
+		// (Note that a node may have already been labelled
+		// because it is a point in one of the input geometries)
+		for (Iterator nodeit = graph.getNodes().iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			Label lbl = ((DirectedEdgeStar) node.getEdges()).getLabel();
+			Label otherLbl = node.getLabel();
+			otherLbl.merge(lbl);
+		}
+	}
+
+	/**
+	 * Incomplete nodes are nodes whose labels are incomplete. (e.g. the
+	 * location for one Geometry is null). These are either isolated nodes, or
+	 * nodes which have edges from only a single Geometry incident on them.
+	 * 
+	 * Isolated nodes are found because nodes in one graph which don't intersect
+	 * nodes in the other are not completely labelled by the initial process of
+	 * adding nodes to the nodeList. To complete the labelling we need to check
+	 * for nodes that lie in the interior of edges, and in the interior of
+	 * areas.
+	 * <p>
+	 * When each node labelling is completed, the labelling of the incident
+	 * edges is updated, to complete their labelling as well.
+	 */
+	private void labelIncompleteNodes() {
+		for (Iterator ni = graph.getNodes().iterator(); ni.hasNext();) {
+			Node n = (Node) ni.next();
+			Label label = n.getLabel();
+			if (n.isIsolated()) {
+				if (label.isNull(0))
+					labelIncompleteNode(n, 0);
+				else
+					labelIncompleteNode(n, 1);
+			}
+			// now update the labelling for the DirectedEdges incident on this
+			// node
+			((DirectedEdgeStar) n.getEdges()).updateLabelling(label);
+		}
+	}
+
+	/**
+	 * Label an isolated node with its relationship to the target geometry.
+	 */
+	private void labelIncompleteNode(Node n, int targetIndex) {
+	    //TODO Ver si el pointLocator deberia snapear
+		Coordinate coord = n.getCoordinate();
+	    Geometry geom = arg[targetIndex].getGeometry();
+		int loc = ptLocator.locate(coord, geom, snapTolerance);
+		n.getLabel().setLocation(targetIndex, loc);
+	}
+
+	/**
+	 * Find all edges whose label indicates that they are in the result area(s),
+	 * according to the operation being performed. Since we want polygon shells
+	 * to be oriented CW, choose dirEdges with the interior of the result on the
+	 * RHS. Mark them as being in the result. Interior Area edges are the result
+	 * of dimensional collapses. They do not form part of the result area
+	 * boundary.
+	 */
+	private void findResultAreaEdges(int opCode) {
+		for (Iterator it = graph.getEdgeEnds().iterator(); it.hasNext();) {
+			DirectedEdge de = (DirectedEdge) it.next();
+			// mark all dirEdges with the appropriate label
+			Label label = de.getLabel();
+			if (label.isArea()
+					&& !de.isInteriorAreaEdge()
+					&& isResultOfOp(label.getLocation(0, Position.RIGHT), label
+							.getLocation(1, Position.RIGHT), opCode)) {
+				de.setInResult(true);
+				//	Debug.print("in result "); Debug.println(de);
+			}
+		}
+	}
+
+	/**
+	 * If both a dirEdge and its sym are marked as being in the result, cancel
+	 * them out.
+	 */
+	private void cancelDuplicateResultEdges() {
+		// remove any dirEdges whose sym is also included
+		// (they "cancel each other out")
+		for (Iterator it = graph.getEdgeEnds().iterator(); it.hasNext();) {
+			DirectedEdge de = (DirectedEdge) it.next();
+			DirectedEdge sym = de.getSym();
+			if (de.isInResult() && sym.isInResult()) {
+				de.setInResult(false);
+				sym.setInResult(false);
+				//	Debug.print("cancelled "); Debug.println(de);
+				// Debug.println(sym);
+			}
+		}
+	}
+
+	/**
+	 * This method is used to decide if a point node should be included in the
+	 * result or not.
+	 * 
+	 * @return true if the coord point is covered by a result Line or Area
+	 *         geometry
+	 */
+	public boolean isCoveredByLA(Coordinate coord) {
+		if (isCovered(coord, resultLineList))
+			return true;
+		if (isCovered(coord, resultPolyList))
+			return true;
+		return false;
+	}
+
+	/**
+	 * This method is used to decide if an L edge should be included in the
+	 * result or not.
+	 * 
+	 * @return true if the coord point is covered by a result Area geometry
+	 */
+	public boolean isCoveredByA(Coordinate coord) {
+		if (isCovered(coord, resultPolyList))
+			return true;
+		return false;
+	}
+
+	/**
+	 * @return true if the coord is located in the interior or boundary of a
+	 *         geometry in the list.
+	 */
+	private boolean isCovered(Coordinate coord, List geomList) {
+		for (Iterator it = geomList.iterator(); it.hasNext();) {
+			Geometry geom = (Geometry) it.next();
+			int loc = ptLocator.locate(coord, geom, snapTolerance);
+			if (loc != Location.EXTERIOR)
+				return true;
+		}
+		return false;
+	}
+
+	private Geometry computeGeometry(List resultPointList, List resultLineList,
+			List resultPolyList) {
+		List geomList = new ArrayList();
+		// element geometries of the result are always in the order P,L,A
+		geomList.addAll(resultPointList);
+		geomList.addAll(resultLineList);
+		geomList.addAll(resultPolyList);
+		// build the most specific geometry possible
+		return geomFact.buildGeometry(geomList);
+	}
+	
+	
+	public static void main(String[] args){
+		GeometryFactory factory = new GeometryFactory();
+		com.vividsolutions.jts.io.WKTReader reader = new com.vividsolutions.jts.io.WKTReader(factory);
+		Geometry a, b, c, d;
+		try {
+		
+			//Snap en un extremo y en un vertice intermedio
+			a = reader.read("LINESTRING(0.001 0.001, 5.001 5.001)");
+			b = reader.read("LINESTRING(2.1 -3, 0.0 -0.001, -2.22 4.88, 10.0 10.0, 5.002 5.002)");
+			System.out.println(SnappingOverlayOperation.overlayOp(a, b, OverlayOp.INTERSECTION, 0.01));			
+//			//snap mediante líneas paralelas
+			c = reader.read("LINESTRING(0 0, 5 0, 10 0.001)");
+			d = reader.read("LINESTRING(0.001 0.01, 5.001 0.002, 10.001 0.002)");		
+			long t0 = System.currentTimeMillis();
+			System.out.println(SnappingOverlayOperation.overlayOp(c, d, OverlayOp.INTERSECTION, 0.1));		
+			long t1 = System.currentTimeMillis();
+			System.out.println(OverlayOp.overlayOp(c, d, OverlayOp.INTERSECTION));
+			long t2 = System.currentTimeMillis();
+			System.out.println("Con snap: "+(t1-t0)+" ms");
+			System.out.println("Sin snap: "+(t2-t1)+" ms");
+			
+			d = reader.read("LINESTRING(0 0, 5 0, 10 0.001)");
+			System.out.println(OverlayOp.overlayOp(c, d, OverlayOp.INTERSECTION));
+			
+			//lineas paralelas a una distancia superior a la de snap
+			//(para comprobar el criterio de paralelismo en LineIntersector
+			c = reader.read("LINESTRING(0 0, 5 0, 10 0.001)");
+			d = reader.read("LINESTRING(0 0.11, 5 0.12, 10 0.14)");
+			System.out.println(SnappingOverlayOperation.overlayOp(c, d, OverlayOp.INTERSECTION, 0.001));
+//			
+			c = reader.read("LINESTRING(1 0, 3 2)");
+			d = reader.read("LINESTRING(3.05 2.01, 5 1.25, 0.25 1.75)");
+			System.out.println(OverlayOp.overlayOp(c, d, OverlayOp.INTERSECTION));
+			System.out.println((SnappingOverlayOperation.overlayOp(c, d, OverlayOp.INTERSECTION, 0.1)));
+//			
+//			
+			d = reader.read("LINESTRING(3 2, 5 1.25, 0.25 1.75)");
+			System.out.println(OverlayOp.overlayOp(c, d, OverlayOp.INTERSECTION));
+			System.out.println((SnappingOverlayOperation.overlayOp(c, d, OverlayOp.INTERSECTION, 0.1)));
+			
+			//Que un polígono esté cerrado o no no es snap, sino regla topologica
+			
+			//TODO CON POLIGONOS ESTÁ DANDO PROBLEMAS. HABRA QUE REVISAR LINEAS Y POLIGONOS
+//			c = reader.read("POLYGON((0 0, 0 5, 5 5, 5 0,  0 0))");
+//			d = reader.read("POLYGON((-0.01 0, 3 8, 6 6 ,  -0.01 0))");
+			
+			c = reader.read("POLYGON((5 0, 5 5, 10 5, 10 0,  5 0))");
+			d = reader.read("POLYGON((4 3, 4.99 3.5, 10.01 3.5, 12 3,  4 3))");
+			
+			
+			
+			//REVISIÓN TOPOLOGICA 
+			/*
+			 * Un aspecto esencial de la topologia en JTS es el etiquetado.
+			 * Todo Eje del grafo asociado a un polígono tiene una etiqueta o Label, 
+			 * con tres valores posibles para la izquierda, derecha y encima del poligono
+			 * (EXTERIOR, BOUNDARY, INTERIOR)
+			 * 
+			 * Por tanto, si la orientación no es la correcta, todo se va al traste
+			 * (pues las cosas se invierten especularmente)
+			 * */
+			if(CGAlgorithms.isCCW(c.getCoordinates())){
+				System.out.println("Anillo exterior de poligono en orden incorrecto");
+			    System.out.println(c.toText());
+				System.exit(-2);
+			}
+			if(CGAlgorithms.isCCW(d.getCoordinates())){
+				System.out.println("Anillo exterior de poligono en orden incorrecto");
+				   System.out.println(d.toText());
+				System.exit(-2);
+			}
+		
+			System.out.println((SnappingOverlayOperation.overlayOp(c, d, OverlayOp.INTERSECTION, 0.1)));
+
+			Geometry pol1 = reader.read("POLYGON((0 0, -5 0, -10 5, 0 10,  10 5, 5 0, 0 0))");
+			Geometry pol2 = reader.read("POLYGON((10.01 0, 5 5, 5 10, 10 10, 10.01 0))");
+			
+			System.out.println((SnappingOverlayOperation.overlayOp(pol1, pol2, OverlayOp.INTERSECTION, 0.1)));
+			System.out.println((OverlayOp.overlayOp(pol1, pol2, OverlayOp.INTERSECTION)));
+			
+			
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		   
+
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperation.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperationTest.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperationTest.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperationTest.java	(revision 30230)
@@ -0,0 +1,182 @@
+/*
+ * Created on 03-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/10 18:50:57  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+*
+*/
+package com.vividsolutions.jts.operation.overlay;
+
+import junit.framework.TestCase;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.operation.overlay.OverlayOp;
+
+
+public class SnappingOverlayOperationTest extends TestCase {
+	
+	//test 1
+	Geometry a,b;
+	GeometryFactory factory ;
+	com.vividsolutions.jts.io.WKTReader reader;
+	
+	//test 2
+	Geometry c,d;
+	
+	//test 4
+	Geometry f;
+	
+	//test 5
+	Geometry g, h;
+	
+	
+	//test 6
+	Geometry pol1, pol2;
+	
+	public static void main(String[] args) {
+	}
+
+	public SnappingOverlayOperationTest(String name) {
+		super(name);
+	}
+
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		factory = new GeometryFactory();
+		reader = new com.vividsolutions.jts.io.WKTReader(factory);
+		a = reader.read("LINESTRING(0.001 0.001, 5.001 5.001)");
+		b = reader.read("LINESTRING(2.1 -3, 0.0 -0.001, -2.22 4.88, 10.0 10.0, 5.002 5.002)");
+		
+		c = reader.read("LINESTRING(0 0, 5 0, 10 0.001)");
+		d = reader.read("LINESTRING(0 0.01, 5 0.002, 10 0.002)");
+		
+		f = reader.read("LINESTRING(0 0.11, 5 0.12, 10 0.14)");
+		
+		
+		g = reader.read("LINESTRING(1 0, 3 2)");
+		h = reader.read("LINESTRING(3.05 2.01, 5 1.25, 0.25 1.75)");
+		
+		
+		pol1 = reader.read("POLYGON((0 0, -5 0, -10 5, 0 10,  10 5, 5 0, 0 0))");
+		pol2 = reader.read("POLYGON((10.01 0, 5 5, 5 10, 10 10, 10.01 0))");
+	}
+	
+		
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		factory = null;
+		reader = null;
+		a = null;
+		b = null;
+	}
+
+	/*
+	 * Test method for 'com.iver.cit.gvsig.fmap.topology.SnappingOverlayOperation.SnappingOverlayOperation(Geometry, Geometry, double)'
+	 */
+	public void testSnappingOverlayOperation() {
+		//test 1: dos lineas que intersectan en dos puntos: uno Nodo y otro vertice
+		Geometry geom = SnappingOverlayOperation.overlayOp(a, b, 
+									OverlayOp.INTERSECTION, 0.01);
+		assertTrue(geom.toString().equals("MULTIPOINT (0.001 0.001, 5.001 5.001)"));
+		
+		//test 2: dos lineas paralelas separadas por una distancia inferior a la
+		//de snap
+		geom = SnappingOverlayOperation.overlayOp(c, d, 
+				OverlayOp.INTERSECTION, 0.1);
+
+		assertTrue(geom.toString().equals("MULTILINESTRING ((0 0, 5 0), (5 0, 10 0.001))"));
+		
+		//test 3: identicas líneas pero reducimos la distancia de snap
+		geom = SnappingOverlayOperation.overlayOp(c, d, 
+				OverlayOp.INTERSECTION, 0.0001);
+		assertTrue(geom.toString().equals("GEOMETRYCOLLECTION EMPTY"));
+		
+		//test 4: identicas líneas, pero se separan un poco mas
+		geom = SnappingOverlayOperation.overlayOp(c, f, OverlayOp.INTERSECTION, 0.1);
+		assertTrue(geom.toString().equals("GEOMETRYCOLLECTION EMPTY"));
+		
+		
+		//test 5: interseccion de dos lineas, la solucion son dos puntos:
+		//uno con snap y el otro normal. Presentan cambios de orientacion
+		geom = SnappingOverlayOperation.overlayOp(g, h, OverlayOp.INTERSECTION, 0.1);
+		assertTrue(geom instanceof GeometryCollection);
+		assertTrue(geom.toString().equals("MULTIPOINT (2.511904761904762 1.5119047619047619, 3 2)"));
+		
+		geom = SnappingOverlayOperation.overlayOp(pol1, 
+												  pol2, 
+											OverlayOp.INTERSECTION, 
+											0.01);
+		assertTrue(geom instanceof Polygon);
+		assertTrue(geom.toString().equals("POLYGON ((5 7.5, 10 5, 7.502497502497502 2.5024975024975022, 5 5, 5 7.5))"));
+		
+
+		
+		
+		
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/SnappingOverlayOperationTest.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/NonRobustSnapLineIntersector.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/NonRobustSnapLineIntersector.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/NonRobustSnapLineIntersector.java	(revision 30230)
@@ -0,0 +1,93 @@
+/*
+ * Created on 28-sep-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:56  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.vividsolutions.jts.operation.overlay;
+
+
+import com.vividsolutions.jts.algorithm.NonRobustLineIntersector;
+
+public class NonRobustSnapLineIntersector extends NonRobustLineIntersector {
+
+	/**
+	   * @return true if both numbers are positive or if both numbers are negative.
+	   * Returns false if both numbers are zero.
+	   */
+	  public static boolean isSameSignAndNonZero(double a, double b) {
+	    if (a == 0 || b == 0) {
+	      return false;
+	    }
+	    return (a < 0 && b < 0) || (a > 0 && b > 0);
+	  }
+
+
+	  public NonRobustSnapLineIntersector() {
+	  }
+
+	  
+	  
+
+
+
+	
+
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/overlay/NonRobustSnapLineIntersector.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/JtsTests.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/JtsTests.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/JtsTests.java	(revision 30230)
@@ -0,0 +1,78 @@
+/*
+ * Created on 03-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+*
+*/
+package com.vividsolutions.jts.operation;
+
+import com.vividsolutions.jts.operation.overlay.SnappingOverlayOperationTest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class JtsTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for com.iver.cit.gvsig.fmap.topology");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(SnappingOverlayOperationTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/operation/JtsTests.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapPointLocator.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapPointLocator.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapPointLocator.java	(revision 30230)
@@ -0,0 +1,210 @@
+/*
+ * Created on 06-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.algorithms;
+
+import java.util.Iterator;
+
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryCollectionIterator;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPolygon;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geomgraph.SnappingGeometryGraph;
+
+public class SnapPointLocator extends com.vividsolutions.jts.algorithm.PointLocator {
+	 private boolean isIn;         // true if the point lies in or on any Geometry element
+	  private int numBoundaries;    // the number of sub-elements whose boundaries the point lies in
+
+	  public SnapPointLocator() {
+	  }
+
+	  /**
+	   * Convenience method to test a point for intersection with
+	   * a Geometry
+	   * @param p the coordinate to test
+	   * @param geom the Geometry to test
+	   * @return <code>true</code> if the point is in the interior or boundary of the Geometry
+	   */
+	  public boolean intersects(Coordinate p, Geometry geom, double snapTolerance)
+	  {
+	    return locate(p, geom, snapTolerance) != Location.EXTERIOR;
+	  }
+
+	  /**
+	   * Computes the topological relationship ({@link Location}) of a single point
+	   * to a Geometry.
+	   * It handles both single-element
+	   * and multi-element Geometries.
+	   * The algorithm for multi-part Geometries
+	   * takes into account the SFS Boundary Determination Rule.
+	   *
+	   * @return the {@link Location} of the point relative to the input Geometry
+	   */
+	  public int locate(Coordinate p, Geometry geom, double snapTolerance)
+	  {
+	    if (geom.isEmpty()) return Location.EXTERIOR;
+
+	    if (geom instanceof LinearRing) {
+	      return locate(p, (LinearRing) geom, snapTolerance);
+	    }
+	    if (geom instanceof LineString) {
+	      return locate(p, (LineString) geom, snapTolerance);
+	    }
+	    else if (geom instanceof Polygon) {
+	      return locate(p, (Polygon) geom, snapTolerance);
+	    }
+
+	    isIn = false;
+	    numBoundaries = 0;
+	    computeLocation(p, geom, snapTolerance);
+	    if (SnappingGeometryGraph.isInBoundary(numBoundaries)) 
+	    	return Location.BOUNDARY;
+	    if (numBoundaries > 0 || isIn) 
+	    	return Location.INTERIOR;
+	    return Location.EXTERIOR;
+	  }
+
+	  private void computeLocation(Coordinate p, Geometry geom, double snapTolerance)
+	  {
+	    if (geom instanceof LinearRing) {
+	      updateLocationInfo(locate(p, (LinearRing) geom, snapTolerance));
+	    }
+	    if (geom instanceof LineString) {
+	      updateLocationInfo(locate(p, (LineString) geom, snapTolerance));
+	    }
+	    else if (geom instanceof Polygon) {
+	      updateLocationInfo(locate(p, (Polygon) geom, snapTolerance));
+	    }
+	    else if (geom instanceof MultiLineString) {
+	      MultiLineString ml = (MultiLineString) geom;
+	      for (int i = 0; i < ml.getNumGeometries(); i++) {
+	        LineString l = (LineString) ml.getGeometryN(i);
+	        updateLocationInfo(locate(p, l, snapTolerance));
+	      }
+	    }
+	    else if (geom instanceof MultiPolygon) {
+	      MultiPolygon mpoly = (MultiPolygon) geom;
+	      for (int i = 0; i < mpoly.getNumGeometries(); i++) {
+	        Polygon poly = (Polygon) mpoly.getGeometryN(i);
+	        updateLocationInfo(locate(p, poly, snapTolerance));
+	      }
+	    }
+	    else if (geom instanceof GeometryCollection) {
+	      Iterator geomi = new GeometryCollectionIterator((GeometryCollection) geom);
+	      while (geomi.hasNext()) {
+	        Geometry g2 = (Geometry) geomi.next();
+	        if (g2 != geom)
+	          computeLocation(p, g2, snapTolerance);
+	      }
+	    }
+	  }
+
+	  private void updateLocationInfo(int loc)
+	  {
+	    if (loc == Location.INTERIOR) isIn = true;
+	    if (loc == Location.BOUNDARY) numBoundaries++;
+	  }
+
+	  private int locate(Coordinate p, LineString l, double snapTolerance)
+	  {
+	    Coordinate[] pt = l.getCoordinates();
+	    if (! l.isClosed()) {
+	      if (p.distance(pt[0]) <= snapTolerance
+	          || p.distance(pt[pt.length - 1]) <= snapTolerance ) {
+	        return Location.BOUNDARY;
+	      }
+	    }
+	    if (SnapCGAlgorithms.isOnLine(p, pt, snapTolerance))
+	      return Location.INTERIOR;
+	    return Location.EXTERIOR;
+	  }
+
+	  private int locate(Coordinate p, LinearRing ring, double snapTolerance)
+	  {
+	    // can this test be folded into isPointInRing ?
+	    if (SnapCGAlgorithms.isOnLine(p, ring.getCoordinates())) {
+	      return Location.BOUNDARY;
+	    }
+	    if (SnapCGAlgorithms.isPointInRing(p, ring.getCoordinates(), snapTolerance))
+	      return Location.INTERIOR;
+	    return Location.EXTERIOR;
+	  }
+
+	  private int locate(Coordinate p, Polygon poly, double snapTolerance)
+	  {
+	    if (poly.isEmpty()) return Location.EXTERIOR;
+	    LinearRing shell = (LinearRing) poly.getExteriorRing();
+
+	    int shellLoc = locate(p, shell, snapTolerance);
+	    if (shellLoc == Location.EXTERIOR) return Location.EXTERIOR;
+	    if (shellLoc == Location.BOUNDARY) return Location.BOUNDARY;
+	    // now test if the point lies in or on the holes
+	    for (int i = 0; i < poly.getNumInteriorRing(); i++) {
+	      LinearRing hole = (LinearRing) poly.getInteriorRingN(i);
+	      int holeLoc = locate(p, hole, snapTolerance);
+	      if (holeLoc == Location.INTERIOR) return Location.EXTERIOR;
+	      if (holeLoc == Location.BOUNDARY) return Location.BOUNDARY;
+	    }
+	    return Location.INTERIOR;
+	  }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapPointLocator.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapCGAlgorithms.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapCGAlgorithms.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapCGAlgorithms.java	(revision 30230)
@@ -0,0 +1,174 @@
+/*
+ * Created on 06-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.algorithms;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.algorithm.RobustDeterminant;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.operation.overlay.SnapLineIntersector;
+
+public class SnapCGAlgorithms extends CGAlgorithms {
+	/**
+	   * Test whether a point lies on the line segments defined by a
+	   * list of coordinates.
+	   *
+	   * @return true true if
+	   * the point is a vertex of the line or lies in the interior of a line
+	   * segment in the linestring
+	   */
+	  public static boolean isOnLine(Coordinate p, Coordinate[] pt, double snapTol) {
+	    SnapLineIntersector lineIntersector = new SnapLineIntersector(snapTol);
+	    for (int i = 1; i < pt.length; i++) {
+	      Coordinate p0 = pt[i - 1];
+	      Coordinate p1 = pt[i];
+	      lineIntersector.computeIntersection(p, p0, p1);
+	      if (lineIntersector.hasIntersection()) {
+	        return true;
+	      }
+	    }
+	    return false;
+	  }
+	  public static boolean isPointInRing(Coordinate p, Coordinate[] ring, double snapTolerance) {
+		    /*
+		     *  For each segment l = (i-1, i), see if it crosses ray from test point in positive x direction.
+		     */
+		    int crossings = 0;  // number of segment/ray crossings
+		    
+		    SnapLineIntersector lineIntersector = new SnapLineIntersector(snapTolerance);
+		    
+		    for (int i = 1; i < ring.length; i++) {
+		      int i1 = i - 1;
+		      Coordinate p1 = ring[i];
+		      Coordinate p2 = ring[i1];
+		      
+		      lineIntersector.computeIntersection(p, p1, p2);
+		      if (lineIntersector.hasIntersection()) {
+		        crossings ++;
+		      }
+
+//		      if (((p1.y > (p.y - snapTolerance)) && (p2.y <= (p.y + snapTolerance))) ||
+//		          ((p2.y > (p.y - snapTolerance)) && (p1.y <= (p.y) + snapTolerance))) {//si no se cumple, no pueden intersectar
+//		        
+//		    	double x1 = p1.x - p.x;
+//		        double y1 = p1.y - p.y;
+//		        double x2 = p2.x - p.x;
+//		        double y2 = p2.y - p.y;
+//		        /*
+//		        *  segment straddles x axis, so compute intersection with x-axis.
+//		         */
+//		        double xInt = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2) / (y2 - y1);
+//		        //xsave = xInt;
+//		        /*
+//		        *  crosses ray if strictly positive intersection.
+//		         */
+//		        if (xInt > 0.0) {
+//		          crossings++;
+//		        }
+//		      }
+		    }
+		    /*
+		     *  p is inside if number of crossings is odd.
+		     */
+		    if ((crossings % 2) == 1) {
+		      return true;
+		    }
+		    else {
+		      return false;
+		    }
+		  }
+	  
+	  /**
+	   * Computes the orientation of a point q to the directed line segment p1-p2.
+	   * The orientation of a point relative to a directed line segment indicates
+	   * which way you turn to get to q after travelling from p1 to p2.
+	   *
+	   * @return 1 if q is counter-clockwise from p1-p2
+	   * @return -1 if q is clockwise from p1-p2
+	   * @return 0 if q is collinear with p1-p2
+	   */
+	  public static int computeOrientation(Coordinate p1, Coordinate p2, Coordinate q) {
+	    return orientationIndex(p1, p2, q);
+	  }
+	  /**
+	   * Returns the index of the direction of the point <code>q</code>
+	   * relative to a
+	   * vector specified by <code>p1-p2</code>.
+	   *
+	   * @param p1 the origin point of the vector
+	   * @param p2 the final point of the vector
+	   * @param q the point to compute the direction to
+	   *
+	   * @return 1 if q is counter-clockwise (left) from p1-p2
+	   * @return -1 if q is clockwise (right) from p1-p2
+	   * @return 0 if q is collinear with p1-p2
+	   */
+	  public static int orientationIndex(Coordinate p1, Coordinate p2, Coordinate q) {
+	    // travelling along p1->p2, turn counter clockwise to get to q return 1,
+	    // travelling along p1->p2, turn clockwise to get to q return -1,
+	    // p1, p2 and q are colinear return 0.
+	    double dx1 = p2.x - p1.x;
+	    double dy1 = p2.y - p1.y;
+	    double dx2 = q.x - p2.x;
+	    double dy2 = q.y - p2.y;
+	    return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2);
+	  }
+	  
+	  
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapCGAlgorithms.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapSimplePointInAreaLocator.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapSimplePointInAreaLocator.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapSimplePointInAreaLocator.java	(revision 30230)
@@ -0,0 +1,111 @@
+/*
+ * Created on 06-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.algorithms;
+
+import java.util.Iterator;
+
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryCollectionIterator;
+import com.vividsolutions.jts.geom.LinearRing;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.Polygon;
+
+public class SnapSimplePointInAreaLocator extends
+		com.vividsolutions.jts.algorithm.SimplePointInAreaLocator {
+	 public static int locate(Coordinate p, Geometry geom, double snapTolerance)
+	  {
+	    if (geom.isEmpty()) return Location.EXTERIOR;
+
+	    if (containsPoint(p, geom, snapTolerance))
+	      return Location.INTERIOR;
+	    return Location.EXTERIOR;
+	  }
+
+	  private static boolean containsPoint(Coordinate p, Geometry geom, double snapTolerance)
+	  {
+	    if (geom instanceof Polygon) {
+	      return containsPointInPolygon(p, (Polygon) geom);
+	    }
+	    else if (geom instanceof GeometryCollection) {
+	      Iterator geomi = new GeometryCollectionIterator((GeometryCollection) geom);
+	      while (geomi.hasNext()) {
+	        Geometry g2 = (Geometry) geomi.next();
+	        if (g2 != geom)
+	          if (containsPoint(p, g2, snapTolerance))
+	            return true;
+	      }
+	    }
+	    return false;
+	  }
+
+	  public static boolean containsPointInPolygon(Coordinate p, Polygon poly, double snapTolerance)
+	  {
+	    if (poly.isEmpty()) return false;
+	    LinearRing shell = (LinearRing) poly.getExteriorRing();
+	    if (! SnapCGAlgorithms.isPointInRing(p, shell.getCoordinates(), snapTolerance)) return false;
+	    // now test if the point lies in or on the holes
+	    for (int i = 0; i < poly.getNumInteriorRing(); i++) {
+	      LinearRing hole = (LinearRing) poly.getInteriorRingN(i);
+	      if (SnapCGAlgorithms.isPointInRing(p, hole.getCoordinates(), snapTolerance)) return false;
+	    }
+	    return true;
+	  }
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/algorithms/SnapSimplePointInAreaLocator.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapMonotoneChainEdge.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapMonotoneChainEdge.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapMonotoneChainEdge.java	(revision 30230)
@@ -0,0 +1,174 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:26  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph.index;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geomgraph.SnappingEdge;
+import com.vividsolutions.jts.geomgraph.index.MonotoneChainEdge;
+import com.vividsolutions.jts.geomgraph.index.SegmentIntersector;
+
+public class SnapMonotoneChainEdge extends MonotoneChainEdge {
+	
+	  SnappingEdge e;
+	  int[] startIndex;
+	  double snapTolerance;
+	  
+
+	  public SnapMonotoneChainEdge(SnappingEdge e, double snapTolerance) {
+		super(e);	    
+		this.e = e;
+	    startIndex = super.getStartIndexes();
+	    this.snapTolerance = snapTolerance;
+	  }
+	  
+	  public SnappingEdge getEdge(){
+		  return e;
+	  }
+
+	  public void computeIntersects(MonotoneChainEdge mce,
+			                        SegmentIntersector si)
+	  {
+	   if (! (mce instanceof SnapMonotoneChainEdge))
+		   throw new IllegalArgumentException("Requiere MCE de snap");
+	    for (int i = 0; i < startIndex.length - 1; i++) {
+	      for (int j = 0; j < mce.getStartIndexes().length - 1; j++) {
+	        computeIntersectsForChain(i, mce, j, si );
+	      }//for
+	    }//for
+	  }
+	  
+	  
+	  public void computeIntersectsForChain(int chainIndex0, 
+			  							MonotoneChainEdge mce,
+			  								int chainIndex1,
+			  								SegmentIntersector si){
+		  if (! (mce instanceof SnapMonotoneChainEdge))
+			   throw new IllegalArgumentException("Requiere MCE de snap");
+	    computeIntersectsForChain(startIndex[chainIndex0], 
+	    		             startIndex[chainIndex0 + 1],
+	                           mce,
+	                           mce.getStartIndexes()[chainIndex1],
+                             mce.getStartIndexes()[chainIndex1 + 1],
+	                            si );
+	  }
+	  
+	  
+
+	  private void computeIntersectsForChain(int start0, int end0, 
+			  MonotoneChainEdge mce, int start1,
+			  int end1, SegmentIntersector ei){
+		  
+		  if (! (mce instanceof SnapMonotoneChainEdge))
+			   throw new IllegalArgumentException("Requiere MCE de snap");
+		
+		SnapMonotoneChainEdge snapMce = (SnapMonotoneChainEdge) mce;
+	    Coordinate p00 = super.getCoordinates()[start0];
+	    Coordinate p01 = super.getCoordinates()[end0];
+	    
+	    Coordinate p10 = mce.getCoordinates()[start1];
+	    Coordinate p11 = mce.getCoordinates()[end1];
+	    
+
+	    // terminating condition for the recursion
+	    if (end0 - start0 == 1 && end1 - start1 == 1) {
+	      ei.addIntersections(e, start0, snapMce.getEdge(), start1);
+	      return;
+	    }
+	    
+	    // nothing to do if the envelopes of these chains don't overlap
+	    Envelope env1 = new Envelope(p00, p01);
+		double newMinX = env1.getMinX() - snapTolerance;
+		double newMaxX = env1.getMaxX() + snapTolerance;
+		double newMinY = env1.getMinY() - snapTolerance;
+		double newMaxY = env1.getMaxY() + snapTolerance;
+		env1 = new Envelope(newMinX, newMaxX, newMinY, newMaxY);
+	 
+		Envelope env2 = new Envelope(p10, p11);
+		newMinX = env1.getMinX() - snapTolerance;
+		newMaxX = env1.getMaxX() + snapTolerance;
+		newMinY = env1.getMinY() - snapTolerance;
+		newMaxY = env1.getMaxY() + snapTolerance;
+		env2 = new Envelope(newMinX, newMaxX, newMinY, newMaxY);
+	    
+	    if (! env1.intersects(env2))
+	    	return;
+
+	    
+	    // the chains overlap, 
+	    //so split each in half and iterate  (binary search)
+	    int mid0 = (start0 + end0) / 2;
+	    int mid1 = (start1 + end1) / 2;
+
+	    if (start0 < mid0) {
+	      if (start1 < mid1) 
+	    	  computeIntersectsForChain(start0, mid0, mce, start1,  mid1, ei);
+	      if (mid1 < end1)   
+	    	  computeIntersectsForChain(start0, mid0, mce, mid1,    end1, ei);
+	    }
+	    
+	    if (mid0 < end0) {
+	      if (start1 < mid1) 
+	    	  computeIntersectsForChain(mid0, end0, mce, start1,  mid1, ei);
+	      if (mid1 < end1)   
+	    	  computeIntersectsForChain(mid0,   end0, mce, mid1,    end1, ei);
+	    }
+	  }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapMonotoneChainEdge.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapSimpleMCSweepLineIntersector.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapSimpleMCSweepLineIntersector.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapSimpleMCSweepLineIntersector.java	(revision 30230)
@@ -0,0 +1,184 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:26  azabala
+* First version in CVS
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph.index;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.index.MonotoneChain;
+import com.vividsolutions.jts.geomgraph.index.MonotoneChainEdge;
+import com.vividsolutions.jts.geomgraph.index.SegmentIntersector;
+import com.vividsolutions.jts.geomgraph.index.SimpleMCSweepLineIntersector;
+import com.vividsolutions.jts.geomgraph.index.SweepLineEvent;
+
+public class SnapSimpleMCSweepLineIntersector extends
+		SimpleMCSweepLineIntersector {
+	
+	 List events = new ArrayList();
+	  // statistics information
+	  int nOverlaps;
+
+	
+	  public SnapSimpleMCSweepLineIntersector() {
+	  }
+
+	  
+	  public void computeIntersections(List edges, 
+			  SegmentIntersector si, 
+			  boolean testAllSegments)
+	  {
+	    if (testAllSegments)
+	      add(edges, null);
+	    else
+	      add(edges);
+	    computeIntersections(si);
+	  }
+
+	  public void computeIntersections(List edges0, List edges1, SegmentIntersector si)
+	  {
+	    add(edges0, edges0);
+	    add(edges1, edges1);
+	    computeIntersections(si);
+	  }
+
+	  private void add(List edges)
+	  {
+	    for (Iterator i = edges.iterator(); i.hasNext(); ) {
+	      Edge edge = (Edge) i.next();
+	      // edge is its own group
+	      add(edge, edge);
+	    }
+	  }
+	  private void add(List edges, Object edgeSet)
+	  {
+	    for (Iterator i = edges.iterator(); i.hasNext(); ) {
+	      Edge edge = (Edge) i.next();
+	      add(edge, edgeSet);
+	    }
+	  }
+
+	  private void add(Edge edge, Object edgeSet)
+	  {
+	    MonotoneChainEdge mce = edge.getMonotoneChainEdge();
+	    int[] startIndex = mce.getStartIndexes();
+	    for (int i = 0; i < startIndex.length - 1; i++) {
+	      MonotoneChain mc = new MonotoneChain(mce, i);
+	      SweepLineEvent insertEvent = new SweepLineEvent(edgeSet, 
+	    		  mce.getMinX(i), 
+	    		  null, mc);
+	      events.add(insertEvent);
+	      events.add(new SweepLineEvent(edgeSet, mce.getMaxX(i), insertEvent, mc));
+	    }
+	  }
+
+	  /**
+	   * Because Delete Events have a link to their corresponding Insert event,
+	   * it is possible to compute exactly the range of events which must be
+	   * compared to a given Insert event object.
+	   */
+	  private void prepareEvents()
+	  {
+	    Collections.sort(events);
+	    for (int i = 0; i < events.size(); i++ )
+	    {
+	      SweepLineEvent ev = (SweepLineEvent) events.get(i);
+	      if (ev.isDelete()) {
+	        ev.getInsertEvent().setDeleteEventIndex(i);
+	      }
+	    }
+	  }
+
+	  private void computeIntersections(SegmentIntersector si)
+	  {
+	    nOverlaps = 0;
+	    prepareEvents();
+
+	    for (int i = 0; i < events.size(); i++ )
+	    {
+	      SweepLineEvent ev = (SweepLineEvent) events.get(i);
+	      if (ev.isInsert()) {
+	        processOverlaps(i, ev.getDeleteEventIndex(), ev, si);
+	      }
+	    }
+	  }
+
+	  private void processOverlaps(int start, int end, SweepLineEvent ev0, SegmentIntersector si)
+	  {
+	    MonotoneChain mc0 = (MonotoneChain) ev0.getObject();
+	    /**
+	     * Since we might need to test for self-intersections,
+	     * include current insert event object in list of event objects to test.
+	     * Last index can be skipped, because it must be a Delete event.
+	     */
+	    for (int i = start; i < end; i++ ) {
+	      SweepLineEvent ev1 = (SweepLineEvent) events.get(i);
+	      if (ev1.isInsert()) {
+	        MonotoneChain mc1 = (MonotoneChain) ev1.getObject();
+	        // don't compare edges in same group
+	        // null group indicates that edges should be compared
+	        if (ev0.edgeSet == null || (ev0.edgeSet != ev1.edgeSet)) {
+	          mc0.computeIntersections(mc1, si);
+	          nOverlaps++;
+	        }
+	      }
+	    }
+	  }
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/index/SnapSimpleMCSweepLineIntersector.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersectionList.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersectionList.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersectionList.java	(revision 30230)
@@ -0,0 +1,289 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:39  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.TreeMap;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.DirectedEdgeStar;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeEndStar;
+import com.vividsolutions.jts.geomgraph.EdgeIntersection;
+import com.vividsolutions.jts.geomgraph.EdgeIntersectionList;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+
+public class SnapEdgeIntersectionList extends EdgeIntersectionList {
+		
+	   class SnapEdgeIntersectNode extends Node implements Comparable{
+		    EdgeIntersection edgeIntersection;
+			public SnapEdgeIntersectNode(Coordinate arg0, 
+									EdgeEndStar arg1,
+									EdgeIntersection edgeIntersection) {
+				super(arg0, arg1);
+				this.edgeIntersection = edgeIntersection;
+			}
+			
+			//Esto me vale para Nodos a secas, pero para el caso de intersecciones no....
+			//porque tienen mas informacion (segmento asociado, etc.)
+			//Por ejemplo, primer y ultimo punto de un poligono cerrado no deben ser el 
+			//mismo nodo, sino nodos distintos
+			
+			public boolean equals(Object obj){
+				SnapEdgeIntersectNode other = (SnapEdgeIntersectNode) obj;
+				return (other.coord.distance(this.coord) 
+									<= snapTolerance) &&
+					   (other.edgeIntersection.segmentIndex == this.edgeIntersection.segmentIndex) &&
+					   ( Math.abs(other.edgeIntersection.dist - this.edgeIntersection.dist) <= snapTolerance);
+			}
+			public int hashCode() {
+			  return 1;   //esto no es eficiente 
+			}
+			
+			//Esto es necesario porque a la hora de recorrer
+			//las intersecciones de un Edge me interesa
+			//que estén ordenadas en el sentido de los vertices (0,1,2..etc)
+			public int compareTo(Object arg0) {
+				SnapEdgeIntersectNode other = (SnapEdgeIntersectNode)arg0;
+				return this.edgeIntersection.compareTo(other.edgeIntersection);
+			}
+		}//EdgeIntersectionNode
+		
+	    SnappingNodeMap nodeMap = null;
+	
+	 // a Map <EdgeIntersection, EdgeIntersection>
+	//TODO Ver si sustituimos por SnappingNodeMap
+//	  private TreeMap nodeMap = new TreeMap();
+	  SnappingEdge edge;  // the parent edge
+	  
+	  /*
+	   * El codigo de verificacion de snap está por todas partes.
+	   * Llevar a una clase auxiliar si procede
+	   * */
+	  private double snapTolerance;
+
+	  public SnapEdgeIntersectionList(SnappingEdge edge)
+	  {
+		  super(edge);
+	      this.edge = edge;
+	      this.snapTolerance = edge.getSnapTolerance();
+	      nodeMap = new SnappingNodeMap(new NodeFactory(), snapTolerance){
+	    	  public Node addNode(Node n)
+	    	  {
+	    		SnapEdgeIntersectNode newNode = (SnapEdgeIntersectNode)n;
+	    	    SnapEdgeIntersectNode eNode = (SnapEdgeIntersectNode) 
+	    	    	super.nodeMap.get(newNode);
+	    	    if(eNode != null){
+	    	    	eNode.mergeLabel(newNode);
+	    	    	return eNode;
+	    	    }else
+	    	    	super.nodeMap.put(newNode, newNode);
+	    	    return newNode;
+	    	  }  
+	    	  //TODO Esto hay que refinarlo. 
+	    	  /*
+	    	   * Por un lado quiero la rapidez del HashMap, y la posibilidad
+	    	   * de resolver conflictos a partir de equals...
+	    	   * 
+	    	   * Pero cuando me pidan las intersecciones ordenadas, es 
+	    	   * necesario hacerlo según el sentido de los vertices
+	    	   * (de mas cercana a mas lejana al vertice 0)
+	    	   * 
+	    	   * */
+	    	  
+	    	  public Iterator iterator()
+	    	  {
+	    		 long t0 = System.currentTimeMillis();
+	    		 TreeMap ordered = new TreeMap(nodeMap);
+	    		 long t1 = System.currentTimeMillis();
+//	    		 System.out.println((t1-t0)+" en crear el Map");
+	    		  return ordered.values().iterator();
+	    	  }
+	     
+	      };
+	  }
+
+	  /**
+	   * Adds an intersection into the list, if it isn't already there.
+	   * The input segmentIndex and dist are expected to be normalized.
+	   * @return the EdgeIntersection found or added
+	   */
+	  public EdgeIntersection add(Coordinate intPt,
+			  	int segmentIndex, double dist)
+	  {
+		  EdgeIntersection eiNew = new EdgeIntersection(intPt, 
+									    		segmentIndex, 
+									    		dist);
+		  
+		  SnapEdgeIntersectNode newNode = new SnapEdgeIntersectNode(intPt,
+				 new  DirectedEdgeStar(), eiNew);
+		  SnapEdgeIntersectNode solution = 
+			  (SnapEdgeIntersectNode) nodeMap.addNode(newNode);
+	      return solution.edgeIntersection;
+	  }
+
+	  /**
+	   * Returns an iterator of {@link EdgeIntersection}s
+	   *
+	   * @return an Iterator of EdgeIntersections
+	   */
+	  public Iterator iterator() { 
+//		  return nodeMap.values().iterator();
+		  return nodeMap.iterator();
+	  }
+
+	  /**
+	   * Tests if the given point is an edge intersection
+	   *
+	   * @param pt the point to test
+	   * @return true if the point is an intersection
+	   */
+	  public boolean isIntersection(Coordinate pt)
+	  {
+		  //TODO No seria mejor acudir al NodeMap???
+	    for (Iterator it = iterator(); it.hasNext(); ) {
+	      EdgeIntersection ei = ((SnapEdgeIntersectNode)it.next()).edgeIntersection;
+	      if (ei.coord.distance(pt) <= snapTolerance)
+	       return true;
+	    }
+	    return false;
+	  }
+	  
+	  /**
+	   * Creates new edges for all the edges that the intersections in this
+	   * list split the parent edge into.
+	   * Adds the edges to the input list (this is so a single list
+	   * can be used to accumulate all split edges for a Geometry).
+	   *
+	   * @param edgeList a list of EdgeIntersections
+	   */
+	  public void addSplitEdges(List edgeList)
+	  {
+	    // ensure that the list has entries for the first and last point of the edge
+	    addEndpoints();
+
+	    Iterator it = iterator();
+	    // there should always be at least two entries in the list
+	    //es decir, todo Edge tendrá al menos 2 EdgeIntersection...sus nodos
+	    EdgeIntersection eiPrev = ((SnapEdgeIntersectNode) it.next()).edgeIntersection;
+	    
+	    
+//	    UNA DE LAS CLAVES ESTÁ AQUI
+//	    SI TENEMOS COORDENADA-EDGEINTERSECTION-COORDENADA Y EDGEINTERSECTION
+//	    ES UN SNAP DE COORDENADA FINAL, APARECERAN COSAS SPUREAS.
+	    
+	    
+	    
+	    while (it.hasNext()) {
+	      EdgeIntersection ei = ((SnapEdgeIntersectNode)it.next()).edgeIntersection;
+	      Edge newEdge = this.createSplitEdge(eiPrev, ei);
+	      edgeList.add(newEdge);
+
+	      eiPrev = ei;
+	    }
+	  }
+	  
+	  public void addEndpoints()
+	  {
+	    int maxSegIndex = edge.getCoordinates().length - 1;
+	    add(edge.getCoordinates()[0], 0, 0.0);
+	    add(edge.getCoordinates()[maxSegIndex], maxSegIndex, 0.0);
+	  }
+
+	  /**
+	   * Create a new "split edge" with the section of points between
+	   * (and including) the two intersections.
+	   * The label for the new edge is the same as the label for the parent edge.
+	   */
+	  Edge createSplitEdge(EdgeIntersection ei0, EdgeIntersection ei1)
+	  {
+//	Debug.print("\ncreateSplitEdge"); Debug.print(ei0); Debug.print(ei1);
+	    int npts = ei1.segmentIndex - ei0.segmentIndex + 2;
+
+	    Coordinate lastSegStartPt = this.edge.getCoordinate(ei1.segmentIndex);
+	    // if the last intersection point is not equal to the its segment start pt,
+	    // add it to the points list as well.
+	    
+	    
+	    // (This check is needed because the distance metric is not totally reliable!)
+	    // The check for point equality is 2D only - Z values are ignored
+	   // boolean useIntPt1 = ei1.dist > 0.0 || ! ei1.coord.equals2D(lastSegStartPt);
+	    boolean useIntPt1 = ei1.dist > snapTolerance || ! 
+	    	(ei1.coord.distance(lastSegStartPt) <= snapTolerance);//Con esto se dejaria de usar el segundo punto...pero y el primero??? en el 1er segmento hay que considerarlo
+	    if (! useIntPt1) {
+	      npts--;
+	    }
+	    Coordinate[] pts = new Coordinate[npts];
+	    int ipt = 0;
+	    pts[ipt++] = new Coordinate(ei0.coord);
+	    for (int i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
+	      pts[ipt++] = this.edge.getCoordinate(i);
+	    }
+	    if (useIntPt1) pts[ipt] = ei1.coord;
+	    return new SnappingEdge(pts, new Label(this.edge.getLabel()), snapTolerance);
+	  }
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersectionList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapDirectedEdge.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapDirectedEdge.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapDirectedEdge.java	(revision 30230)
@@ -0,0 +1,138 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/09 19:10:56  azabala
+* First version in CVS
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:39  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph;
+
+import com.vividsolutions.jts.algorithms.SnapCGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.Quadrant;
+import com.vividsolutions.jts.util.Assert;
+
+public class SnapDirectedEdge extends DirectedEdge {
+
+	private Coordinate p0;
+	private Coordinate p1;
+	private double dx, dy;
+	int quadrant;
+	
+	public SnapDirectedEdge(Edge arg0, boolean arg1) {
+		super(arg0, arg1);
+	}
+	 
+	public Coordinate getCoordinate() { return p0; }
+	  public Coordinate getDirectedCoordinate() { return p1; }
+	  public int getQuadrant() { return quadrant; }
+	  public double getDx() { return dx; }
+	  public double getDy() { return dy; }
+
+ protected void init(Coordinate p0, Coordinate p1)
+  {
+    this.p0 = p0;
+    this.p1 = p1;
+    dx = p1.x - p0.x;
+    dy = p1.y - p0.y;
+    if(dx == 0 && dy == 0)
+    	System.out.println(p0.toString()+";"+p1.toString());
+    quadrant = Quadrant.quadrant(dx, dy);
+   
+    Assert.isTrue(! (dx == 0 && dy == 0), "EdgeEnd with identical endpoints found");
+  }
+ 
+ public String toString(){
+	 return this.p0.toString() + "," + p1.toString();
+ }
+ 
+ public int compareTo(Object obj)
+ {
+     SnapDirectedEdge de = (SnapDirectedEdge) obj;
+     return compareDirection(de);
+ }
+
+ /**
+  * Returns 1 if this DirectedEdge has a greater angle with the
+  * positive x-axis than b", 0 if the DirectedEdges are collinear, and -1 otherwise.
+  * <p>
+  * Using the obvious algorithm of simply computing the angle is not robust,
+  * since the angle calculation is susceptible to roundoff. A robust algorithm
+  * is:
+  * <ul>
+  * <li>first compare the quadrants. If the quadrants are different, it it
+  * trivial to determine which vector is "greater".
+  * <li>if the vectors lie in the same quadrant, the robust
+  * {@link RobustCGAlgorithms#computeOrientation(Coordinate, Coordinate, Coordinate)}
+  * function can be used to decide the relative orientation of the vectors.
+  * </ul>
+  */
+ public int compareDirection(SnapDirectedEdge e)
+ {
+   // if the rays are in different quadrants, determining the ordering is trivial
+   if (quadrant > e.quadrant) return 1;
+   if (quadrant < e.quadrant) return -1;
+   // vectors are in the same quadrant - check relative orientation of direction vectors
+   // this is > e if it is CCW of e
+   return SnapCGAlgorithms.computeOrientation(e.p0, e.p1, p1);
+ }
+ 
+   
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapDirectedEdge.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersection.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersection.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersection.java	(revision 30230)
@@ -0,0 +1,99 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:39  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.EdgeIntersection;
+
+public class SnapEdgeIntersection extends EdgeIntersection {
+	
+	
+	  public SnapEdgeIntersection(Coordinate coord, int segmentIndex, double dist) {
+		  super(coord, segmentIndex, dist);
+	  }
+
+	  public int compareTo(Object obj)
+	  {
+	    SnapEdgeIntersection other = (SnapEdgeIntersection) obj;
+	    return compare(other.segmentIndex, other.dist);
+	  }
+	  /**
+	   * @return -1 this EdgeIntersection is located before the argument location
+	   * @return 0 this EdgeIntersection is at the argument location
+	   * @return 1 this EdgeIntersection is located after the argument location
+	   */
+	  public int compare(int segmentIndex, double dist)
+	  {
+		  //TODO VER SI METER DISTANCIA DE SNAP
+	    if (this.segmentIndex < segmentIndex) return -1;
+	    if (this.segmentIndex > segmentIndex) return 1;
+	    if (this.dist < dist) return -1;
+	    if (this.dist > dist) return 1;
+	    return 0;
+	  }
+
+	  public boolean isEndPoint(int maxSegmentIndex)
+	  {
+		  //TODO VER SI METER DISTANCIA DE SNAP
+	    if (segmentIndex == 0 && dist == 0.0) return true;
+	    if (segmentIndex == maxSegmentIndex) return true;
+	    return false;
+	  }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeIntersection.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingGeometryGraph.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingGeometryGraph.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingGeometryGraph.java	(revision 30230)
@@ -0,0 +1,490 @@
+/*
+ * Created on 12-sep-2006 by azabala
+ *
+ */
+package com.vividsolutions.jts.geomgraph;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.algorithm.LineIntersector;
+import com.vividsolutions.jts.geom.*;
+import com.vividsolutions.jts.geomgraph.index.SegmentIntersector;
+import com.vividsolutions.jts.geomgraph.index.SimpleMCSweepLineIntersector;
+import com.vividsolutions.jts.geomgraph.index.SnapSimpleMCSweepLineIntersector;
+import com.vividsolutions.jts.util.Assert;
+
+/**
+ */
+public class SnappingGeometryGraph extends GeometryGraph {
+
+	// Properties of PlanarGraph that we want to overwrite to
+	// use snapping
+	public static final CGAlgorithms cga = new CGAlgorithms();
+
+	protected SnappingNodeMap nodes;
+
+
+	// overwrite to catch them when returned by Snapping map
+	protected Collection boundaryNodes;
+
+	protected int argIndex;
+
+	private boolean useBoundaryDeterminationRule = false;
+
+	private boolean hasTooFewPoints = false;
+
+	private Coordinate invalidPoint;
+
+	private Map lineEdgeMap = new HashMap(); 
+	
+	private Geometry parentGeometry;
+	
+	double snapTolerance;
+
+	public SnappingGeometryGraph(NodeFactory nodeFact, double tolerance,
+			int argIndex, Geometry parentGeometry) {
+		//le pasamos al constructor padre GeometryCollection vacia para que
+		//no replique la construccion del grafo
+		super(argIndex, new GeometryCollection(new Geometry[0], parentGeometry.getFactory()));
+		nodes = new SnappingNodeMap(nodeFact, tolerance);
+		this.argIndex = argIndex;
+		this.parentGeometry = parentGeometry;
+		this.snapTolerance = tolerance;
+		add(parentGeometry);
+	}
+	
+	
+	public Geometry getGeometry(){
+		return this.parentGeometry;
+	}
+	
+	
+	public void dumpNodes(){
+		this.nodes.dump();
+	}
+
+	public SnappingGeometryGraph(double tolerance, int argIndex, Geometry parent) {
+		super(argIndex, new GeometryCollection(new Geometry[0], parent.getFactory()));
+		nodes = new SnappingNodeMap(new NodeFactory(), tolerance);
+		this.argIndex = argIndex;
+		this.snapTolerance = tolerance;
+		this.parentGeometry = parent;
+		add(parent);
+	}
+
+	public Collection getBoundaryNodes() {
+		if (boundaryNodes == null)
+			boundaryNodes = nodes.getBoundaryNodes(argIndex);
+		return boundaryNodes;
+	}
+
+	public Coordinate[] getBoundaryPoints() {
+		Collection coll = getBoundaryNodes();
+		Coordinate[] pts = new Coordinate[coll.size()];
+		int i = 0;
+		for (Iterator it = coll.iterator(); it.hasNext();) {
+			Node node = (Node) it.next();
+			pts[i++] = (Coordinate) node.getCoordinate().clone();
+		}
+		return pts;
+	}
+
+	public Iterator getNodeIterator() {
+		return nodes.iterator();
+	}
+
+	public Collection getNodes() {
+		return nodes.values();
+	}
+
+	public Node addNode(Node node) {
+		return nodes.addNode(node);
+	}
+
+	public Node addNode(Coordinate coord) {
+		return nodes.addNode(coord);
+	}
+
+	/**
+	 * @return the node if found; null otherwise
+	 */
+	public Node find(Coordinate coord) {
+		return nodes.find(coord);
+	}
+	
+	public boolean isBoundaryNode(int geomIndex, Coordinate coord) {
+		Node node = nodes.find(coord);
+		if (node == null)
+			return false;
+		Label label = node.getLabel();
+		if (label != null && label.getLocation(geomIndex) == Location.BOUNDARY)
+			return true;
+		return false;
+	}
+
+	
+
+	public void add(EdgeEnd e) {
+		nodes.add(e);
+		edgeEndList.add(e);
+	}
+	
+	
+
+	/**
+	 * Link the DirectedEdges at the nodes of the graph. This allows clients to
+	 * link only a subset of nodes in the graph, for efficiency (because they
+	 * know that only a subset is of interest).
+	 */
+	public void linkResultDirectedEdges() {
+		for (Iterator nodeit = nodes.iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			((DirectedEdgeStar) node.getEdges()).linkResultDirectedEdges();
+		}
+	}
+
+	/**
+	 * Link the DirectedEdges at the nodes of the graph. This allows clients to
+	 * link only a subset of nodes in the graph, for efficiency (because they
+	 * know that only a subset is of interest).
+	 */
+	public void linkAllDirectedEdges() {
+		for (Iterator nodeit = nodes.iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			((DirectedEdgeStar) node.getEdges()).linkAllDirectedEdges();
+		}
+	}
+
+	/**
+	 * Returns the EdgeEnd which has edge e as its base edge (MD 18 Feb 2002 -
+	 * this should return a pair of edges)
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public EdgeEnd findEdgeEnd(Edge e) {
+		for (Iterator i = getEdgeEnds().iterator(); i.hasNext();) {
+			EdgeEnd ee = (EdgeEnd) i.next();
+			if (ee.getEdge() == e)
+				return ee;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the edge whose first two coordinates are p0 and p1
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public Edge findEdge(Coordinate p0, Coordinate p1) {
+		for (int i = 0; i < edges.size(); i++) {
+			Edge e = (Edge) edges.get(i);
+			Coordinate[] eCoord = e.getCoordinates();
+			if (p0.equals(eCoord[0]) && p1.equals(eCoord[1]))
+				return e;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the edge which starts at p0 and whose first segment is parallel
+	 * to p1
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public Edge findEdgeInSameDirection(Coordinate p0, Coordinate p1) {
+		for (int i = 0; i < edges.size(); i++) {
+			Edge e = (Edge) edges.get(i);
+
+			Coordinate[] eCoord = e.getCoordinates();
+			if (matchInSameDirection(p0, p1, eCoord[0], eCoord[1]))
+				return e;
+
+			if (matchInSameDirection(p0, p1, eCoord[eCoord.length - 1],
+					eCoord[eCoord.length - 2]))
+				return e;
+		}
+		return null;
+	}
+
+	/**
+	 * The coordinate pairs match if they define line segments lying in the same
+	 * direction. E.g. the segments are parallel and in the same quadrant (as
+	 * opposed to parallel and opposite!).
+	 */
+	private boolean matchInSameDirection(Coordinate p0, Coordinate p1,
+			Coordinate ep0, Coordinate ep1) {
+		if (!p0.equals(ep0))
+			return false;
+
+		if (CGAlgorithms.computeOrientation(p0, p1, ep1) == CGAlgorithms.COLLINEAR
+				&& Quadrant.quadrant(p0, p1) == Quadrant.quadrant(ep0, ep1))
+			return true;
+		return false;
+	}
+
+	
+	private void add(Geometry g)
+	  {
+	    if (g.isEmpty()) return;
+
+	    // check if this Geometry should obey the Boundary Determination Rule
+	    // all collections except MultiPolygons obey the rule
+	    if (g instanceof GeometryCollection
+	        && ! (g instanceof MultiPolygon))
+	            useBoundaryDeterminationRule = true;
+
+	    if (g instanceof Polygon)                 addPolygon((Polygon) g);
+	                        // LineString also handles LinearRings
+	    else if (g instanceof LineString)         addLineString((LineString) g);
+	    else if (g instanceof Point)              addPoint((Point) g);
+	    else if (g instanceof MultiPoint)         addCollection((MultiPoint) g);
+	    else if (g instanceof MultiLineString)    addCollection((MultiLineString) g);
+	    else if (g instanceof MultiPolygon)       addCollection((MultiPolygon) g);
+	    else if (g instanceof GeometryCollection) addCollection((GeometryCollection) g);
+	    else  throw new UnsupportedOperationException(g.getClass().getName());
+	  }
+
+	  private void addCollection(GeometryCollection gc)
+	  {
+	    for (int i = 0; i < gc.getNumGeometries(); i++) {
+	      Geometry g = gc.getGeometryN(i);
+	      add(g);
+	    }
+	  }
+	  /**
+	   * Add a Point to the graph.
+	   */
+	  private void addPoint(Point p)
+	  {
+	    Coordinate coord = p.getCoordinate();
+	    insertPoint(argIndex, coord, Location.INTERIOR);
+	  }
+	  /**
+	   * The left and right topological location arguments assume that the ring is oriented CW.
+	   * If the ring is in the opposite orientation,
+	   * the left and right locations must be interchanged.
+	   */
+	  private void addPolygonRing(LinearRing lr, int cwLeft, int cwRight)
+	  {
+	    Coordinate[] coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());
+
+	    if (coord.length < 4) {
+	      hasTooFewPoints = true;
+	      invalidPoint = coord[0];
+	      return;
+	    }
+
+	    int left  = cwLeft;
+	    int right = cwRight;
+	    if (cga.isCCW(coord)) {
+	      left = cwRight;
+	      right = cwLeft;
+	    }
+	    SnappingEdge e = new SnappingEdge(coord,
+	                        new Label(argIndex, Location.BOUNDARY, left, right), this.snapTolerance);
+	    lineEdgeMap.put(lr, e);
+
+	    insertEdge(e);
+	    // insert the endpoint as a node, to mark that it is on the boundary
+	    insertPoint(argIndex, coord[0], Location.BOUNDARY);
+	  }
+
+	  private void addPolygon(Polygon p)
+	  {
+	    addPolygonRing(
+	            (LinearRing) p.getExteriorRing(),
+	            Location.EXTERIOR,
+	            Location.INTERIOR);
+
+	    for (int i = 0; i < p.getNumInteriorRing(); i++) {
+	      // Holes are topologically labelled opposite to the shell, since
+	      // the interior of the polygon lies on their opposite side
+	      // (on the left, if the hole is oriented CW)
+	      addPolygonRing(
+	            (LinearRing) p.getInteriorRingN(i),
+	            Location.INTERIOR,
+	            Location.EXTERIOR);
+	    }
+	  }
+
+	  private void addLineString(LineString line)
+	  {
+	    Coordinate[] coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
+
+	    if (coord.length < 2) {
+	      hasTooFewPoints = true;
+	      invalidPoint = coord[0];
+	      return;
+	    }
+
+	    // add the edge for the LineString
+	    // line edges do not have locations for their left and right sides
+	    SnappingEdge e = new SnappingEdge(coord, new Label(argIndex, Location.INTERIOR) , this.snapTolerance);
+	    lineEdgeMap.put(line, e);
+	    insertEdge(e);
+	    /**
+	     * Add the boundary points of the LineString, if any.
+	     * Even if the LineString is closed, add both points as if they were endpoints.
+	     * This allows for the case that the node already exists and is a boundary point.
+	     */
+	    Assert.isTrue(coord.length >= 2, "found LineString with single point");
+	    insertBoundaryPoint(argIndex, coord[0]);
+	    insertBoundaryPoint(argIndex, coord[coord.length - 1]);
+
+	  }
+
+	  /**
+	   * Add an Edge computed externally.  The label on the Edge is assumed
+	   * to be correct.
+	   */
+	  public void addEdge(Edge e)
+	  {
+	    insertEdge(e);
+	    Coordinate[] coord = e.getCoordinates();
+	    // insert the endpoint as a node, to mark that it is on the boundary
+	    insertPoint(argIndex, coord[0], Location.BOUNDARY);
+	    insertPoint(argIndex, coord[coord.length - 1], Location.BOUNDARY);
+	  }
+
+	  /**
+	   * Add a point computed externally.  The point is assumed to be a
+	   * Point Geometry part, which has a location of INTERIOR.
+	   */
+	  public void addPoint(Coordinate pt)
+	  {
+	    insertPoint(argIndex, pt, Location.INTERIOR);
+	  }
+	  
+	  
+	  /**
+	   * Compute self-nodes, taking advantage of the Geometry type to
+	   * minimize the number of intersection tests.  (E.g. rings are
+	   * not tested for self-intersection, since they are assumed to be valid).
+	   * @param li the LineIntersector to use
+	   * @param computeRingSelfNodes if <false>, intersection checks are optimized to not test rings for self-intersection
+	   * @return the SegmentIntersector used, containing information about the intersections found
+	   */
+	  public SegmentIntersector computeSelfNodes(LineIntersector li, boolean computeRingSelfNodes)
+	  {
+	    SegmentIntersector si = new SegmentIntersector(li, true, false);
+	    SnapSimpleMCSweepLineIntersector esi = new SnapSimpleMCSweepLineIntersector();
+	    // optimized test for Polygons and Rings
+	    if (! computeRingSelfNodes
+	        && (parentGeometry instanceof LinearRing
+	        || parentGeometry instanceof Polygon
+	        || parentGeometry instanceof MultiPolygon)) {
+	      esi.computeIntersections(edges, si, false);
+	    }
+	    else {
+	      esi.computeIntersections(edges, si, true);
+	    }
+	    addSelfIntersectionNodes(argIndex);
+	    return si;
+	  }
+
+
+	  
+	  public SegmentIntersector computeEdgeIntersections(
+	    GeometryGraph g,
+	    LineIntersector li,
+	    boolean includeProper)
+	  {
+	    SegmentIntersector siSnap = new SegmentIntersector(li, includeProper, true);
+	    siSnap.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());
+
+	    SnapSimpleMCSweepLineIntersector esiSnap = new SnapSimpleMCSweepLineIntersector();
+	    esiSnap.computeIntersections(edges, g.edges, siSnap);
+	    return siSnap;
+		  
+//		  return super.computeEdgeIntersections(g, li, includeProper);
+	  }
+
+	 
+	 
+
+	  private void addSelfIntersectionNodes(int argIndex)
+	  {
+	    for (Iterator i = edges.iterator(); i.hasNext(); ) {
+	      Edge e = (Edge) i.next();
+	      int eLoc = e.getLabel().getLocation(argIndex);
+	      for (Iterator eiIt = e.eiList.iterator(); eiIt.hasNext(); ) {
+	        EdgeIntersection ei = (EdgeIntersection) eiIt.next();
+	        addSelfIntersectionNode(argIndex, ei.coord, eLoc);
+	      }
+	    }
+	  }
+	  /**
+	   * Add a node for a self-intersection.
+	   * If the node is a potential boundary node (e.g. came from an edge which
+	   * is a boundary) then insert it as a potential boundary node.
+	   * Otherwise, just add it as a regular node.
+	   */
+	  private void addSelfIntersectionNode(int argIndex, Coordinate coord, int loc)
+	  {
+	    // if this node is already a boundary node, don't change it
+	    if (isBoundaryNode(argIndex, coord)) return;
+	    if (loc == Location.BOUNDARY && useBoundaryDeterminationRule)
+	        insertBoundaryPoint(argIndex, coord);
+	    else
+	      insertPoint(argIndex, coord, loc);
+	  }
+
+	  private void insertPoint(int argIndex, Coordinate coord, int onLocation)
+	  {
+	    Node n = nodes.addNode(coord);
+	    Label lbl = n.getLabel();
+	    if (lbl == null) {
+	      n.label = new Label(argIndex, onLocation);
+	    }
+	    else
+	      lbl.setLocation(argIndex, onLocation);
+	  }
+	  
+	  /**
+	   * Adds points using the mod-2 rule of SFS.  This is used to add the boundary
+	   * points of dim-1 geometries (Curves/MultiCurves).  According to the SFS,
+	   * an endpoint of a Curve is on the boundary
+	   * iff if it is in the boundaries of an odd number of Geometries
+	   */
+	  private void insertBoundaryPoint(int argIndex, Coordinate coord)
+	  {
+	    Node n = nodes.addNode(coord);
+	    Label lbl = n.getLabel();
+	    // the new point to insert is on a boundary
+	    int boundaryCount = 1;
+	    // determine the current location for the point (if any)
+	    int loc = Location.NONE;
+	    if (lbl != null) loc = lbl.getLocation(argIndex, Position.ON);
+	    if (loc == Location.BOUNDARY) boundaryCount++;
+
+	    // determine the boundary status of the point according to the Boundary Determination Rule
+	    int newLoc = determineBoundary(boundaryCount);
+	    lbl.setLocation(argIndex, newLoc);
+	  }
+	  
+	  
+	  public void computeSplitEdges(List edgelist)
+	  {
+	    for (Iterator i = edges.iterator(); i.hasNext(); ) {
+	      SnappingEdge e = (SnappingEdge) i.next();
+	      e.getEdgeIntersectionList().addSplitEdges(edgelist);
+	    }
+	  }
+	  
+	  /**
+	   * Borra las intersecciones registradas en los nodos
+	   * (util de cara a reutilizar un GeometryGraph en multiples intersecciones)
+	   * */
+	  public void clearIntersections(){
+		  for (Iterator i = edges.iterator(); i.hasNext(); ) {
+		      SnappingEdge e = (SnappingEdge) i.next();
+		      e.clearIntersections();
+		    }
+	  }
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingGeometryGraph.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingPlanarGraph.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingPlanarGraph.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingPlanarGraph.java	(revision 30230)
@@ -0,0 +1,257 @@
+/*
+ * Created on 11-sep-2006 by azabala
+ *
+ */
+package com.vividsolutions.jts.geomgraph;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geomgraph.DirectedEdgeStar;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeEnd;
+import com.vividsolutions.jts.geomgraph.EdgeEndStar;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+import com.vividsolutions.jts.geomgraph.PlanarGraph;
+import com.vividsolutions.jts.geomgraph.Quadrant;
+
+/**
+ * @author alzabord
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class SnappingPlanarGraph extends PlanarGraph {
+
+	public static final CGAlgorithms cga = new CGAlgorithms();
+
+	protected List edges = new ArrayList();
+
+	protected SnappingNodeMap nodes;
+
+	protected List edgeEndList = new ArrayList();
+
+	
+	/**
+	 * For nodes in the Collection, link the DirectedEdges at the node that are
+	 * in the result. This allows clients to link only a subset of nodes in the
+	 * graph, for efficiency (because they know that only a subset is of
+	 * interest).
+	 */
+	public static void linkResultDirectedEdges(Collection nodes) {
+		for (Iterator nodeit = nodes.iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			DirectedEdgeStar edgeStar =  (DirectedEdgeStar) node.getEdges();
+			edgeStar.linkResultDirectedEdges();
+		}
+	}
+
+	public SnappingPlanarGraph(NodeFactory nodeFact, double tolerance) {
+		nodes = new SnappingNodeMap(nodeFact, tolerance);
+	}
+	
+
+	public SnappingPlanarGraph(double tolerance) {
+		nodes = new SnappingNodeMap(new NodeFactory(), tolerance);
+	}
+	
+
+	public Iterator getEdgeIterator() {
+		return edges.iterator();
+	}
+
+	public Collection getEdgeEnds() {
+		return edgeEndList;
+	}
+	
+
+	public boolean isBoundaryNode(int geomIndex, Coordinate coord) {
+		Node node = nodes.find(coord);
+		if (node == null)
+			return false;
+		Label label = node.getLabel();
+		if (label != null && label.getLocation(geomIndex) == Location.BOUNDARY)
+			return true;
+		return false;
+	}
+
+	protected void insertEdge(Edge e) {
+		edges.add(e);
+	}
+	
+
+	
+	public void add(EdgeEnd e) {
+		nodes.add(e);
+		edgeEndList.add(e);
+	}
+	
+	
+
+	public Iterator getNodeIterator() {
+		return nodes.iterator();
+	}
+
+	public Collection getNodes() {
+		return nodes.values();
+	}
+
+	public Node addNode(Node node) {
+		return nodes.addNode(node);
+	}
+
+	public Node addNode(Coordinate coord) {
+		return nodes.addNode(coord);
+	}
+
+	/**
+	 * @return the node if found; null otherwise
+	 */
+	public Node find(Coordinate coord) {
+		return nodes.find(coord);
+	}
+
+	
+	/**
+	 * Add a set of edges to the graph. 
+	 * For each edge two DirectedEdges will be
+	 * created. DirectedEdges are NOT linked by this method.
+	 */
+	public void addEdges(List edgesToAdd) {
+		// create all the nodes for the edges
+		for (Iterator it = edgesToAdd.iterator(); it.hasNext();) {
+			Edge e = (Edge) it.next();
+			edges.add(e);
+			SnapDirectedEdge de1 = new SnapDirectedEdge(e, true);
+			SnapDirectedEdge de2 = new SnapDirectedEdge(e, false);
+			de1.setSym(de2);
+			de2.setSym(de1);
+//IMPORTAR VER QUE PASA AQUÍ: Para cada nuevo Edge, construye un EdgeEnd que puede dar a lugar a un nodo y que origina un Edge
+			add(de1);
+			add(de2);
+		}
+	}
+
+	/**
+	 * Link the DirectedEdges at the nodes of the graph. This allows clients to
+	 * link only a subset of nodes in the graph, for efficiency (because they
+	 * know that only a subset is of interest).
+	 */
+	public void linkResultDirectedEdges() {
+		for (Iterator nodeit = nodes.iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			((DirectedEdgeStar) node.getEdges()).linkResultDirectedEdges();
+		}
+	}
+
+	/**
+	 * Link the DirectedEdges at the nodes of the graph. This allows clients to
+	 * link only a subset of nodes in the graph, for efficiency (because they
+	 * know that only a subset is of interest).
+	 */
+	public void linkAllDirectedEdges() {
+		for (Iterator nodeit = nodes.iterator(); nodeit.hasNext();) {
+			Node node = (Node) nodeit.next();
+			((DirectedEdgeStar) node.getEdges()).linkAllDirectedEdges();
+		}
+	}
+
+	/**
+	 * Returns the EdgeEnd which has edge e as its base edge (MD 18 Feb 2002 -
+	 * this should return a pair of edges)
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public EdgeEnd findEdgeEnd(Edge e) {
+		for (Iterator i = getEdgeEnds().iterator(); i.hasNext();) {
+			EdgeEnd ee = (EdgeEnd) i.next();
+			if (ee.getEdge() == e)
+				return ee;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the edge whose first two coordinates are p0 and p1
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public Edge findEdge(Coordinate p0, Coordinate p1) {
+		for (int i = 0; i < edges.size(); i++) {
+			Edge e = (Edge) edges.get(i);
+			Coordinate[] eCoord = e.getCoordinates();
+			if (p0.equals(eCoord[0]) && p1.equals(eCoord[1]))
+				return e;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the edge which starts at p0 and whose first segment is parallel
+	 * to p1
+	 * 
+	 * @return the edge, if found <code>null</code> if the edge was not found
+	 */
+	public Edge findEdgeInSameDirection(Coordinate p0, Coordinate p1) {
+		for (int i = 0; i < edges.size(); i++) {
+			Edge e = (Edge) edges.get(i);
+
+			Coordinate[] eCoord = e.getCoordinates();
+			if (matchInSameDirection(p0, p1, eCoord[0], eCoord[1]))
+				return e;
+
+			if (matchInSameDirection(p0, p1, eCoord[eCoord.length - 1],
+					eCoord[eCoord.length - 2]))
+				return e;
+		}
+		return null;
+	}
+
+	/**
+	 * The coordinate pairs match if they define line segments lying in the same
+	 * direction. E.g. the segments are parallel and in the same quadrant (as
+	 * opposed to parallel and opposite!).
+	 */
+	private boolean matchInSameDirection(Coordinate p0, Coordinate p1,
+			Coordinate ep0, Coordinate ep1) {
+		if (!p0.equals(ep0))
+			return false;
+
+		if (CGAlgorithms.computeOrientation(p0, p1, ep1) == CGAlgorithms.COLLINEAR
+				&& Quadrant.quadrant(p0, p1) == Quadrant.quadrant(ep0, ep1))
+			return true;
+		return false;
+	}
+	
+	public void dump(){
+		System.out.println("EDGES");
+		Iterator it = this.getEdgeIterator();
+		while(it.hasNext()){
+			Edge e = (Edge) it.next();
+			e.print(System.out);
+			System.out.println("");
+		}
+		System.out.println("NODES");
+		it = this.getNodeIterator();
+		while(it.hasNext()){
+			Node node = (Node) it.next();
+			System.out.println(node.getCoordinate());
+			System.out.println(node.getLabel());
+			List edges = node.getEdges().getEdges();
+			for(int z = 0; z < edges.size(); z++){
+				EdgeEnd ee = (EdgeEnd) edges.get(z);
+				Label eeL = ee.getLabel();
+				System.out.println(ee.toString() + "," + eeL.toString());
+			}
+		}
+//		nodes.dump();
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingPlanarGraph.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeList.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeList.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeList.java	(revision 30230)
@@ -0,0 +1,176 @@
+/*
+ * Created on 04-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph;
+
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import com.iver.cit.gvsig.fmap.spatialindex.RTreeJsi;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeList;
+import com.vividsolutions.jts.index.SpatialIndex;
+import com.vividsolutions.jts.index.quadtree.Quadtree;
+/**
+ * Overwrites jts' EdgeList to allow spatial queries
+ * consideering snap.
+ * 
+ * (for example, (0 0, 5 0) and (0.01 0.01, 5.01 0.02)
+ * arent equivalent in findEqualEdge, even thought with a
+ * snap distance of 0.1
+ * 
+ * 
+ * 
+ * */
+public class SnapEdgeList extends EdgeList {
+	private List edges = new ArrayList();
+	 
+//	  private SpatialIndex index = new Quadtree();
+	
+	//El quadtree no funciona bien para indexar dimensiones
+	//lineales o lineas.
+	
+	  private RTreeJsi spatialIndex = new RTreeJsi();
+	  private double snapTolerance;
+	  
+	  
+	  
+	  public SnapEdgeList(double snapTolerance) {
+		  this.snapTolerance = snapTolerance;
+	  }
+
+	  /**
+	   * Insert an edge unless it is already in the list
+	   */
+	  public void add(Edge e)
+	  {
+//        int position = edges.size();		  
+	    edges.add(e);
+	    //TODO me peta el indice espacial
+//	    Envelope oldEnvelope = e.getEnvelope();
+//		Rectangle2D newEnvelope = getEnvelopeForSnap(oldEnvelope);
+//		spatialIndex.insert(newEnvelope, position);
+	  }
+
+	  private Rectangle2D getEnvelopeForSnap(Envelope oldEnvelope){
+			double xmin = oldEnvelope.getMinX() - snapTolerance;
+		  	double ymin = oldEnvelope.getMinY() - snapTolerance;
+		  	double width = oldEnvelope.getWidth() + snapTolerance;
+		  	double height = oldEnvelope.getHeight() + snapTolerance;
+		  	
+		  	return new Rectangle2D.Double(xmin, ymin, width, height);
+	  }
+
+
+//	 <FIX> fast lookup for edges
+	  /**
+	   * If there is an edge equal to e already in the list, return it.
+	   * Otherwise return null.
+	   * @return  equal edge, if there is one already in the list
+	   *          null otherwise
+	   */
+	  public Edge findEqualEdge(Edge e)
+	  {
+		  //TODO NO ENCUENTRO UN INDICE ESPACIAL EN CONDICIONES
+//	    Collection testEdges = spatialIndex.
+//	     query(getEnvelopeForSnap(e.getEnvelope()));
+		  //PETA CON QUADTREE Y CON RTREE DE JSI
+
+		Collection testEdges = edges;  
+		  
+	    for (Iterator i = testEdges.iterator(); i.hasNext(); ) {
+	    	//TODO me peta el indice espacial
+//	      int index = ((Integer)i.next()).intValue();
+	      Edge testEdge = (Edge) i.next();	
+	    	
+//	      Edge testEdge = (Edge) edges.get(index);
+	      if (testEdge.equals(e) ) return testEdge;
+	    }
+	    return null;
+	  }
+	  
+	  public void addAll(Collection edgeColl)
+	  {
+	    for (Iterator i = edgeColl.iterator(); i.hasNext(); ) {
+	      add((Edge) i.next());
+	    }
+	  }
+	  
+	  public Iterator iterator() { return edges.iterator(); }
+
+	  public Edge get(int i) { return (Edge) edges.get(i); }
+
+	  /**
+	   * If the edge e is already in the list, return its index.
+	   * @return  index, if e is already in the list
+	   *          -1 otherwise
+	   */
+	  public int findEdgeIndex(Edge e)
+	  {
+	    for (int i = 0; i < edges.size(); i++) {
+	      if ( ((Edge) edges.get(i)).equals(e) ) return i;
+	    }
+	    return -1;
+	  }
+
+	  
+	  public List getEdges() { return edges; }
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnapEdgeList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingNodeMap.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingNodeMap.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingNodeMap.java	(revision 30230)
@@ -0,0 +1,515 @@
+/*
+ * Created on 11-sep-2006 by azabala
+ *
+ */
+package com.vividsolutions.jts.geomgraph;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vividsolutions.jts.algorithms.SnapSimplePointInAreaLocator;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.Location;
+import com.vividsolutions.jts.geom.TopologyException;
+import com.vividsolutions.jts.geomgraph.DirectedEdge;
+import com.vividsolutions.jts.geomgraph.DirectedEdgeStar;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeEnd;
+import com.vividsolutions.jts.geomgraph.EdgeEndStar;
+import com.vividsolutions.jts.geomgraph.GeometryGraph;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+import com.vividsolutions.jts.geomgraph.NodeMap;
+import com.vividsolutions.jts.geomgraph.Position;
+import com.vividsolutions.jts.util.Assert;
+
+/**
+ * Repository of nodes of a PlanarGraph that applies a snap tolerance.
+ * 
+ * If we ask for a node, and it founds a node in the tolerance distance it
+ * returns the found node.
+ * 
+ * 
+ * 
+ * @author alzabord
+ */
+public class SnappingNodeMap extends NodeMap {
+
+	
+
+	// Esto  va a ir muy lento
+	// buscar otros mecanismos (indice espacial, o hashmap)
+	protected HashMap nodeMap;
+
+	private class SnapDirectedEdgeStar extends DirectedEdgeStar {
+
+		/**
+		 * The location of the point for this star in Geometry i Areas
+		 */
+		private int[] ptInAreaLocation = { Location.NONE, Location.NONE };
+
+		private Label label;
+
+		List resultAreaEdgeList = null;
+
+		List getResultAreaEdges() {
+			if (resultAreaEdgeList != null)
+				return resultAreaEdgeList;
+			resultAreaEdgeList = new ArrayList();
+			for (Iterator it = iterator(); it.hasNext();) {
+				DirectedEdge de = (DirectedEdge) it.next();
+				if (de.isInResult() || de.getSym().isInResult())
+					resultAreaEdgeList.add(de);
+			}
+			return resultAreaEdgeList;
+		}
+
+		private final int SCANNING_FOR_INCOMING = 1;
+
+		private final int LINKING_TO_OUTGOING = 2;
+
+		private SnapDirectedEdgeStar() {
+			super();
+
+			edgeList = new ArrayList();
+
+		}
+
+		/**
+		 * Traverse the star of DirectedEdges, linking the included edges
+		 * together. To link two dirEdges, the <next> pointer for an incoming
+		 * dirEdge is set to the next outgoing edge.
+		 * <p>
+		 * DirEdges are only linked if:
+		 * <ul>
+		 * <li>they belong to an area (i.e. they have sides)
+		 * <li>they are marked as being in the result
+		 * </ul>
+		 * <p>
+		 * Edges are linked in CCW order (the order they are stored). This means
+		 * that rings have their face on the Right (in other words, the
+		 * topological location of the face is given by the RHS label of the
+		 * DirectedEdge)
+		 * <p>
+		 * PRECONDITION: No pair of dirEdges are both marked as being in the
+		 * result
+		 */
+		public void linkResultDirectedEdges() {
+			// make sure edges are copied to resultAreaEdges list
+			List resultEdges = getResultAreaEdges();
+			// find first area edge (if any) to start linking at
+			DirectedEdge firstOut = null;
+			DirectedEdge incoming = null;
+			int state = SCANNING_FOR_INCOMING;
+			// link edges in CCW order
+			for (int i = 0; i < resultAreaEdgeList.size(); i++) {
+				DirectedEdge nextOut = (DirectedEdge) resultEdges.get(i);
+				DirectedEdge nextIn = nextOut.getSym();
+
+				// skip de's that we're not interested in
+				if (!nextOut.getLabel().isArea())
+					continue;
+
+				// record first outgoing edge, in order to link the last
+				// incoming edge
+				if (firstOut == null && nextOut.isInResult())
+					firstOut = nextOut;
+				// assert: sym.isInResult() == false, since pairs of dirEdges
+				// should have been removed already
+
+				switch (state) {
+				case SCANNING_FOR_INCOMING:
+					if (!nextIn.isInResult())
+						continue;
+					incoming = nextIn;
+					state = LINKING_TO_OUTGOING;
+					break;
+				case LINKING_TO_OUTGOING:
+					if (!nextOut.isInResult())
+						continue;
+					incoming.setNext(nextOut);
+					state = SCANNING_FOR_INCOMING;
+					break;
+				}
+			}// for
+			if (state == LINKING_TO_OUTGOING) {
+				// Debug.print(firstOut == null, this);
+				if (firstOut == null)
+					throw new TopologyException("no outgoing dirEdge found",
+							getCoordinate());
+				// Assert.isTrue(firstOut != null, "no outgoing dirEdge found
+				// (at " + getCoordinate() );
+				Assert.isTrue(firstOut.isInResult(),
+						"unable to link last incoming dirEdge");
+				incoming.setNext(firstOut);
+			}
+		}
+
+		/**
+		 * Insert an EdgeEnd into the map, and clear the edgeList cache, since
+		 * the list of edges has now changed
+		 */
+		protected void insertEdgeEnd(EdgeEnd e, Object obj) {
+			edgeMap.put(e, obj);
+			if (edgeList == null)
+				edgeList = new ArrayList();
+			edgeList.add(e);
+
+			// Necesitamos que la "estrella" de Ejes asociada a un Nodo conserve
+			// siempre un orden antihorario. Por eso, cada vez que se añada un
+			// nuevo
+			// eje solo se inserta en el Map (que mantiene el orden)
+			// y la cache se pone a null
+
+			// edgeList = null;
+		}
+
+		public Iterator iterator() {
+			return getEdges().iterator();
+		}
+
+		public List getEdges() {
+			Collections.sort(edgeList, new Comparator() {
+				public int compare(Object arg0, Object arg1) {
+					EdgeEnd e0 = (EdgeEnd) arg0;
+					EdgeEnd e1 = (EdgeEnd) arg1;
+					return e0.compareTo(e1);
+				}
+			});
+			// if (edgeList == null) {
+			// edgeList = new ArrayList(edgeMap.values());
+			// }
+			return edgeList;
+		}
+
+		public Label getLabel() {
+			return label;
+		}
+
+		void computeEdgeEndLabels() {
+			// Compute edge label for each EdgeEnd
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd ee = (EdgeEnd) it.next();
+				ee.computeLabel();
+			}
+		}
+
+		void propagateSideLabels(int geomIndex) {
+			// Since edges are stored in CCW order around the node,
+			// As we move around the ring we move from the right to the left
+			// side of the edge
+			int startLoc = Location.NONE;
+			// initialize loc to location of last L side (if any)
+			// System.out.println("finding start location");
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd e = (EdgeEnd) it.next();
+				Label label = e.getLabel();
+				if (label.isArea(geomIndex)
+						&& label.getLocation(geomIndex, Position.LEFT) != Location.NONE)
+					startLoc = label.getLocation(geomIndex, Position.LEFT);
+			}
+			// no labelled sides found, so no labels to propagate
+			if (startLoc == Location.NONE)
+				return;
+
+			int currLoc = startLoc;
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd e = (EdgeEnd) it.next();
+				Label label = e.getLabel();
+				// set null ON values to be in current location
+				if (label.getLocation(geomIndex, Position.ON) == Location.NONE)
+					label.setLocation(geomIndex, Position.ON, currLoc);
+				// set side labels (if any)
+				// if (label.isArea()) { //ORIGINAL
+				if (label.isArea(geomIndex)) {
+					int leftLoc = label.getLocation(geomIndex, Position.LEFT);
+					int rightLoc = label.getLocation(geomIndex, Position.RIGHT);
+					// if there is a right location, that is the next location
+					// to propagate
+					if (rightLoc != Location.NONE) {
+						// Debug.print(rightLoc != currLoc, this);
+						if (rightLoc != currLoc)
+							throw new TopologyException(
+									"side location conflict", e.getCoordinate());
+						if (leftLoc == Location.NONE) {
+							Assert
+									.shouldNeverReachHere("found single null side (at "
+											+ e.getCoordinate() + ")");
+						}
+						currLoc = leftLoc;
+					} else {
+						/**
+						 * RHS is null - LHS must be null too. This must be an
+						 * edge from the other geometry, which has no location
+						 * labelling for this geometry. This edge must lie
+						 * wholly inside or outside the other geometry (which is
+						 * determined by the current location). Assign both
+						 * sides to be the current location.
+						 */
+						Assert.isTrue(label.getLocation(geomIndex,
+								Position.LEFT) == Location.NONE,
+								"found single null side");
+						label.setLocation(geomIndex, Position.RIGHT, currLoc);
+						label.setLocation(geomIndex, Position.LEFT, currLoc);
+					}
+				}
+			}
+		}
+
+		int getLocation(int geomIndex, Coordinate p, GeometryGraph[] geom) {
+			// compute location only on demand
+			if (ptInAreaLocation[geomIndex] == Location.NONE) {
+				ptInAreaLocation[geomIndex] = SnapSimplePointInAreaLocator
+						.locate(p, geom[geomIndex].getGeometry(), snapTolerance);
+			}
+			return ptInAreaLocation[geomIndex];
+		}
+
+		public void mergeSymLabels() {
+			for (Iterator it = iterator(); it.hasNext();) {
+				DirectedEdge de = (DirectedEdge) it.next();
+				Label label = de.getLabel();
+				Label symLabel = de.getSym().getLabel();
+				label.merge(symLabel);
+			}
+		}
+
+		/**
+		 * Update incomplete dirEdge labels from the labelling for the node
+		 */
+		public void updateLabelling(Label nodeLabel) {
+			for (Iterator it = iterator(); it.hasNext();) {
+				DirectedEdge de = (DirectedEdge) it.next();
+				Label label = de.getLabel();
+				label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));
+				label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));
+			}
+		}
+
+		public void computeLabelling(GeometryGraph[] geom) {
+			computeEdgeEndLabels();
+			propagateSideLabels(0);
+			propagateSideLabels(1);
+			boolean[] hasDimensionalCollapseEdge = { false, false };
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd e = (EdgeEnd) it.next();
+				Label label = e.getLabel();
+				for (int geomi = 0; geomi < 2; geomi++) {
+					if (label.isLine(geomi)
+							&& label.getLocation(geomi) == Location.BOUNDARY)
+						hasDimensionalCollapseEdge[geomi] = true;
+				}
+			}
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd e = (EdgeEnd) it.next();
+				Label label = e.getLabel();
+				for (int geomi = 0; geomi < 2; geomi++) {
+					if (label.isAnyNull(geomi)) {
+						int loc = Location.NONE;
+						if (hasDimensionalCollapseEdge[geomi]) {
+							loc = Location.EXTERIOR;
+						} else {
+							Coordinate p = e.getCoordinate();
+							loc = getLocation(geomi, p, geom);
+						}
+						label.setAllLocationsIfNull(geomi, loc);
+					}// if
+				}// for
+			}// for
+
+			// determine the overall labelling for this DirectedEdgeStar
+			// (i.e. for the node it is based at)
+			label = new Label(Location.NONE);
+			for (Iterator it = iterator(); it.hasNext();) {
+				EdgeEnd ee = (EdgeEnd) it.next();
+				Edge e = ee.getEdge();
+				Label eLabel = e.getLabel();
+				for (int i = 0; i < 2; i++) {
+					int eLoc = eLabel.getLocation(i);
+					if (eLoc == Location.INTERIOR || eLoc == Location.BOUNDARY)
+						label.setLocation(i, Location.INTERIOR);
+				}
+			}
+		}
+	}
+
+	class SnapNode extends Node {
+
+		public SnapNode(Coordinate arg0, EdgeEndStar arg1) {
+			super(arg0, arg1);
+		}
+
+		public boolean equals(Object obj) {
+			SnapNode other = (SnapNode) obj;
+			return other.coord.distance(this.coord) <= snapTolerance;
+		}
+
+		public int hashCode() {
+			return 1; // esto no es eficiente
+		}
+	}
+
+	private double snapTolerance;
+
+	public SnappingNodeMap(NodeFactory nodeFactory, double snapTolerance) {
+		super(nodeFactory);
+		this.snapTolerance = snapTolerance;
+		// spatialIndex = new Quadtree();
+		nodeMap = new HashMap();
+	}
+
+	class MinDistCoordComparator implements Comparator {
+		Coordinate coord;
+
+		MinDistCoordComparator(Coordinate coord) {
+			this.coord = coord;
+		}
+
+		public int compare(Object arg0, Object arg1) {
+			Coordinate c1 = ((Node) arg0).getCoordinate();
+			Coordinate c2 = ((Node) arg1).getCoordinate();
+
+			double d1 = c1.distance(coord);
+			double d2 = c2.distance(coord);
+
+			if (d1 < d2)
+				return 1;
+			if (d1 > d2)
+				return -1;
+			else
+				return 0;
+		}
+	}
+
+	private Envelope getQueryRect(Coordinate coord) {
+		double xmin = coord.x - snapTolerance;
+		double ymin = coord.y - snapTolerance;
+		double xmax = coord.x + snapTolerance;
+		double ymax = coord.y + snapTolerance;
+		Envelope queryRect = new Envelope(xmin, xmax, ymin, ymax);
+		return queryRect;
+	}
+
+	public Node addNode(final Coordinate coord) {
+		SnapNode candidate = null;
+		DirectedEdgeStar edgeStar = new SnapDirectedEdgeStar();
+		candidate = new SnapNode(coord, edgeStar);
+
+		/*
+		 * PRUEBA PARA VER POR QUÉ DA ERRORES CON POLIGONOS
+		 * 
+		 * 
+		 * 
+		 */
+
+		Node stored = (Node) nodeMap.get(candidate);
+		if (stored != null)
+			return stored;
+		else {
+			nodeMap.put(candidate, candidate);
+			return candidate;
+		}
+		// Envelope queryRect = getQueryRect(coord);
+		// List nodes = spatialIndex.query(queryRect);
+		// Spatial Index está devolviendo candidatos fuera del rectangulo
+		// será problema del quadtree
+		// if(nodes.size() != 0){
+		// Collections.sort(nodes, new MinDistCoordComparator(coord));
+		// Node candidate = (Node) nodes.get(0);
+		// if(candidate.getCoordinate().distance(coord) < snapTolerance )
+		// return candidate;
+		// }else{
+		// System.out.println("El nodo "+coord.x+","+coord.y+" no tiene entradas
+		// analogas en el quadtree");
+		// List all = this.spatialIndex.queryAll();
+		// System.out.println("en el quadtree "+all.size());
+		// for(int i = 0; i < all.size(); i++){
+		// Node node = (Node) all.get(i);
+		// Coordinate coord2 = node.getCoordinate();
+		// System.out.println(coord2.x + "," + coord2.y);
+		// }
+		// }
+		// Node solution = nodeFactory.createNode(coord);
+		// spatialIndex.insert(queryRect, solution);
+		// return solution;
+	}
+
+	// FIXME: REVISAR SI HABRÍA QUE HACER UN MERGE LABEL ARRIBA O AQUÍ
+	public Node addNode(Node n) {
+
+		Node node = addNode(n.getCoordinate());
+		node.mergeLabel(n);
+		return node;
+	}
+
+	/**
+	 * Adds a node for the start point of this EdgeEnd (if one does not already
+	 * exist in this map). Adds the EdgeEnd to the (possibly new) node.
+	 */
+	public void add(EdgeEnd e) {
+		Coordinate p = e.getCoordinate();
+		Node n = addNode(p);
+		n.add(e);// Si el nodo ya existe, se le añade una arista
+	}
+
+	/**
+	 * @return the node if found; null otherwise
+	 */
+	public Node find(Coordinate coord) {
+		// Envelope queryRect = getQueryRect(coord);
+		// List nodes = spatialIndex.query(getQueryRect(coord));
+		// Collections.sort(nodes, new MinDistCoordComparator(coord));
+		// Node candidate = (Node) nodes.get(0);
+		return (Node) nodeMap.get(new SnapNode(coord, null));
+		// return candidate;
+	}
+
+	public Iterator iterator() {
+		return nodeMap.values().iterator();
+		// return spatialIndex.queryAll().iterator();
+	}
+
+	public Collection values() {
+		return nodeMap.values();
+		// return spatialIndex.queryAll();
+	}
+
+	public Collection getBoundaryNodes(int geomIndex) {
+		Collection bdyNodes = new ArrayList();
+		for (Iterator i = iterator(); i.hasNext();) {
+			Node node = (Node) i.next();
+			if (node.getLabel().getLocation(geomIndex) == Location.BOUNDARY)
+				bdyNodes.add(node);
+		}
+		return bdyNodes;
+	}
+
+	public void dump() {
+		System.out.println(this.toString());
+		Iterator it = iterator();
+		while (it.hasNext()) {
+			Node node = (Node) it.next();
+			Coordinate coord = node.getCoordinate();
+			System.out.println("x= " + coord.x + ", y= " + coord.y);
+		}
+	}
+
+	public static void main(String[] args) {
+		SnappingNodeMap nodeMap = new SnappingNodeMap(new NodeFactory(), 0.01);
+		nodeMap.addNode(new Coordinate(0.001, 0.001));
+		nodeMap.addNode(new Coordinate(0.002, 0.002));
+		Iterator it = nodeMap.iterator();
+		while (it.hasNext()) {
+			Node node = (Node) it.next();
+			Coordinate coord = node.getCoordinate();
+			System.out.println("x= " + coord.x + ", y= " + coord.y);
+		}
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingNodeMap.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingEdge.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingEdge.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingEdge.java	(revision 30230)
@@ -0,0 +1,251 @@
+/*
+ * Created on 02-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/05 19:20:57  azabala
+* first version in cvs
+*
+* Revision 1.1  2006/10/02 19:06:39  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.vividsolutions.jts.geomgraph;
+
+import com.vividsolutions.jts.algorithm.LineIntersector;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.Edge;
+import com.vividsolutions.jts.geomgraph.EdgeIntersectionList;
+import com.vividsolutions.jts.geomgraph.Label;
+import com.vividsolutions.jts.geomgraph.index.MonotoneChainEdge;
+import com.vividsolutions.jts.geomgraph.index.SnapMonotoneChainEdge;
+
+public class SnappingEdge extends Edge {
+
+	  SnapEdgeIntersectionList eiList;
+	  private double snapTolerance;
+	  private SnapMonotoneChainEdge mce;
+	  
+	  /**
+	   * TODO->Esto es una cagada????
+	   * El problema es que no estoy aplicando SNAP
+	   * en el compute de intersecciones colineales
+	   * 
+	   * 
+	   * 
+	   * Nos permite snapear las coordenadas del Edge, para
+	   * que antes de añadir un SnapEdgeIntersection se verifique
+	   * si coincide con un vertice (y  snapearlo al vertice
+	   * para evitar que salgan cosas raras)
+	   * */
+	  private SnappingNodeMap nodes; 
+	 
+	  public SnappingEdge(Coordinate[] pts, Label label, double tolerance)
+	  {
+		super(pts, label);
+		this.snapTolerance = tolerance;
+		eiList = new SnapEdgeIntersectionList(this);
+		
+	  }
+	  
+	  public double getSnapTolerance(){
+		  return snapTolerance;
+	  }
+	  
+	  public SnappingEdge(Coordinate[] pts, double snapTolerance)
+	  {
+	    this(pts, null, snapTolerance);
+	  }
+
+	 
+	  public EdgeIntersectionList getEdgeIntersectionList() { 
+		  return eiList; 
+	  }
+
+	  
+	  public MonotoneChainEdge getMonotoneChainEdge()
+	  {
+	    if (mce == null) 
+	    	mce = new SnapMonotoneChainEdge(this, snapTolerance);
+	    return  mce;
+	  }
+	  
+	  public boolean isPointwiseEqual(Edge e)
+	  {
+		Coordinate[] thisCoordinates = this.getCoordinates();
+	    Coordinate[] otherCoordinates = e.getCoordinates();
+	    if (thisCoordinates.length != otherCoordinates.length) 
+	    	return false;
+
+	    for (int i = 0; i < thisCoordinates.length; i++) {
+	      if (! (thisCoordinates[i].distance(otherCoordinates[i]) <= snapTolerance)) {
+	         return false;
+	      }
+	    }
+	    return true;
+	  }
+	  
+	  public boolean equals(Object o)
+	  {
+	    if (! (o instanceof Edge)) return false;
+	    Edge e = (Edge) o;
+        Coordinate[] thisCoordinates = this.getCoordinates();
+        Coordinate[] otherCoordinates = e.getCoordinates();
+	    if (thisCoordinates.length != otherCoordinates.length) 
+	    	return false;
+
+	    boolean isEqualForward = true;
+	    boolean isEqualReverse = true;
+	    int iRev = thisCoordinates.length;
+	    for (int i = 0; i < thisCoordinates.length; i++) {
+	      if (! (thisCoordinates[i].distance(otherCoordinates[i])
+	    		  <= snapTolerance)) {
+	         isEqualForward = false;
+	      }
+	      if (!(thisCoordinates[i].distance(otherCoordinates[--iRev]) <= snapTolerance)) {
+	         isEqualReverse = false;
+	      }
+	      if (! isEqualForward && ! isEqualReverse) return false;
+	    }
+	    return true;
+	  }
+	 
+	  
+	  /**
+	   * Adds EdgeIntersections for one or both
+	   * intersections found for a segment of an edge to the edge intersection list.
+	   */
+	  public void addIntersections(LineIntersector li, 
+			  int segmentIndex,
+			  int geomIndex){
+		  
+		  //se supone que si es colineal, aquí se añaden los
+		  // dos puntos
+		  
+		    for (int i = 0; i < li.getIntersectionNum(); i++) {
+		      addIntersection(li, segmentIndex, geomIndex, i);
+		    }
+	  }
+	  
+	  /**
+	   * Add an EdgeIntersection for intersection intIndex.
+	   * An intersection that falls exactly on a vertex of the edge is normalized
+	   * to use the higher of the two possible segmentIndexes
+	   */
+	  public void addIntersection(LineIntersector li, 
+			  int segmentIndex, 
+			  int geomIndex, 
+			  int intIndex)
+	  {
+	      Coordinate intPt = new Coordinate(li.getIntersection(intIndex));
+	      
+	      
+//	      AQUI ESTA OTRA DE LAS CLAVES
+//	      intPt es una coordenada, que puede estar muy cerca de alguna coordenada
+//	      del EDGE. ¿Como gestionar esto?
+//	      CREO QUE LO MEJOR ES SNAPEAR
+	    
+	      int normalizedSegmentIndex = segmentIndex;
+	      double dist = li.getEdgeDistance(geomIndex, intIndex);
+	      // normalize the intersection point location
+	      int nextSegIndex = normalizedSegmentIndex + 1;
+	      if (nextSegIndex < super.getNumPoints()) {
+	        Coordinate nextPt = super.getCoordinate(nextSegIndex);
+	        
+	        //TODO VER ESTO DEL 0.0
+//	        AQUI PASA ALGO RARO TAMBIEN
+//	        PARA EL TEST Nº 1, TUVE QUE AÑADIR EL ELSE
+//	        PERO PARA EL SIGUIENTE TESTE CREO QUE ME ESTÁ PERDIENDO
+//	        LOS PUNTOS INTERMEDIOS
+	        
+	        
+	        //if (intPt.distance(nextPt) == 0.0) {
+	        if (intPt.distance(nextPt) <= snapTolerance) {
+	            normalizedSegmentIndex = nextSegIndex;
+	            dist = 0.0;
+	            intPt = nextPt;
+	            
+	        }else{
+	        	Coordinate previousPoint = this.getCoordinate(normalizedSegmentIndex);
+	        	if(intPt.distance(previousPoint) <= snapTolerance){
+	        		dist = 0.0;
+	        		intPt = previousPoint;
+	        	}
+	        }
+	        
+	        /*
+	        TODO
+	        Esto lo añado porque cuando la interseccion es un snapping, me conserva
+	        todos los puntos y me salen dos puntos seguidos iguales (probar)
+	        y luego la clase Quadrant me tira excepciones
+	        */
+//	        else if (intPt.distance(nextPt) <= snapTolerance) {
+//	            normalizedSegmentIndex = segmentIndex;
+//	            dist = 0.0;
+//				//TODO PRUEBA 
+//				intPt = nextPt;	            
+//	        }
+	      }
+	      
+	      eiList.add(intPt, normalizedSegmentIndex, dist);
+	  }	 
+	  
+	  /**
+	   * Util para volver a calcular intersecciones de este Edge
+	   * con los Edges de un geometrygraph distinto al original
+	   * 
+	   * */
+	  public void clearIntersections(){
+		  eiList = new SnapEdgeIntersectionList(this);
+	  }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/vividsolutions/jts/geomgraph/SnappingEdge.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/TopologyBuilder.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/TopologyBuilder.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/TopologyBuilder.java	(revision 30230)
@@ -0,0 +1,254 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.topology;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.FPoint2D;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.util.LinearComponentExtracter;
+import com.vividsolutions.jts.operation.polygonize.Polygonizer;
+import com.vividsolutions.jts.planargraph.NodeMap;
+
+/**
+ * @author fjp
+ * 
+ * This class do its job thanks to the work of Martin Davis in
+ * JTS (Java Topology Suite).
+ * The code is extracted from JCS (Java Conflation Suite), made by
+ * Vivid Solutions (www.vividsolutions.com)
+ *
+ */
+public class TopologyBuilder {
+	private double fuzzyTolerance;
+	private double dangleTolerance;
+	private FLyrVect inputLayer;
+	private FLyrVect outputLayer;
+	private String statusMessage;
+	private GeometryFactory fact = new GeometryFactory();
+	private boolean nodeInputLines = false;
+	private Polygonizer polygonizer = new Polygonizer();
+	
+	
+	public TopologyBuilder(double fuzzy, double dangle)
+	{
+		fuzzyTolerance = fuzzy;
+		dangleTolerance = dangle;
+	}
+	
+	private Collection getLines(FLyrVect lv) throws DriverException, DriverIOException
+	  {
+	    List linesList = new ArrayList();
+	    LinearComponentExtracter lineFilter = new LinearComponentExtracter(linesList);
+		FBitSet bitSet = lv.getRecordset().getSelection();
+		
+		for(int i=bitSet.nextSetBit(0); i>=0; i=bitSet.nextSetBit(i+1)) {
+			IGeometry g = lv.getSource().getShape(i);
+			Geometry jtsGeom = g.toJTSGeometry();
+			jtsGeom.apply(lineFilter);
+		}
+
+	    return linesList;
+	  }
+
+	  private Collection nodeLines(List lines)
+	  {
+
+	    Geometry linesGeom = fact.createMultiLineString(GeometryFactory.toLineStringArray(lines));
+	    Geometry empty = fact.createMultiLineString(null);
+	    Geometry noded = linesGeom.union(empty);
+	    List nodedList = new ArrayList();
+	    nodedList.add(noded);
+	    return nodedList;
+	  }
+
+	
+	public Collection buildPolygons() throws DriverException
+	{
+	    // monitor.report("Polygonizing...");
+		if (inputLayer == null)
+			throw new RuntimeException("Please, set inputLayer before buildPolygons");
+		
+	    statusMessage = "Polygonizing...";
+
+	    Collection lines;
+		try {
+			lines = getLines(inputLayer);
+	
+		    Collection nodedLines = lines;
+		    if (nodeInputLines) {
+		    	statusMessage = "Noding input lines";
+		    	nodedLines = nodeLines((List) lines);
+		    }
+	
+		    for (Iterator i = nodedLines.iterator(); i.hasNext(); ) {
+		      Geometry g = (Geometry) i.next();
+		      polygonizer.add(g);
+		    }		    
+		    return polygonizer.getPolygons(); 
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new DriverException(e);
+		}
+	}
+	public void buildLines()
+	{
+		
+	}
+	
+	public List getErrorNodes() throws DriverException
+	{
+		NodeMap nodeMap = new NodeMap();
+		FBitSet bitSet = inputLayer.getRecordset().getSelection();
+		
+		statusMessage = "Creando grafo...";
+		
+		for(int i=bitSet.nextSetBit(0); i>=0; i=bitSet.nextSetBit(i+1)) {
+			statusMessage = "Procesando registro " + i;
+			IGeometry g;
+			try {
+				g = inputLayer.getSource().getShape(i);
+			} catch (DriverIOException e) {
+				e.printStackTrace();
+				throw new DriverException(e);
+			}
+			Geometry jtsG = g.toJTSGeometry();
+			Coordinate[] coords = jtsG.getCoordinates();
+		    if (jtsG.isEmpty()) 
+		    	continue;
+		    Coordinate[] linePts = CoordinateArrays.removeRepeatedPoints(coords);
+		    Coordinate startPt = linePts[0];
+		    Coordinate endPt = linePts[linePts.length - 1];
+
+		    NodeError nStart = (NodeError) nodeMap.find(startPt);
+		    NodeError nEnd = (NodeError) nodeMap.find(endPt);
+		    if (nStart == null)
+		    {
+		    	nStart = new NodeError(startPt);
+		    	nodeMap.add(nStart);
+		    }
+		    else
+		    	nStart.setOccurrences(nStart.getOccurrences()+1);
+		    if (nEnd == null)
+		    {
+		    	nEnd = new NodeError(endPt);
+		    	nodeMap.add(nEnd);
+		    }
+		    else
+		    	nEnd.setOccurrences(nEnd.getOccurrences()+1);
+
+		}
+		
+		// Ahora recorremos todos los nodos y los que solo hayan sido
+		// añadidos una vez, son dangle o fuzzy.
+		// TODO: Poner una tolerancia para que las coordinate cercanas
+		// formen un solo nodo.
+		statusMessage = "Extrayendo fuzzy y dangle nodes...";
+		ArrayList nodeErrors = new ArrayList();
+		Iterator it = nodeMap.iterator();
+		while (it.hasNext())
+		{
+			NodeError node = (NodeError) it.next();
+			if (node.getOccurrences() == 1)
+			{				
+				FPoint2D p = FConverter.coordinate2FPoint2D(node.getCoordinate());
+				IGeometry gAux = ShapeFactory.createPoint2D(p);
+				nodeErrors.add(gAux);
+
+				
+			}
+		}
+		return nodeErrors;
+
+	}
+
+	public String getStatusMessage() {
+		return statusMessage;
+	}
+
+	public boolean isNodeInputLines() {
+		return nodeInputLines;
+	}
+
+	public void setNodeInputLines(boolean nodeInputLines) {
+		this.nodeInputLines = nodeInputLines;
+	}
+
+	public Collection getCutEdges() {
+		return polygonizer.getCutEdges();
+	}
+
+	public Collection getDangles() {
+		return polygonizer.getDangles();
+	}
+
+	public FLyrVect getInputLayer() {
+		return inputLayer;
+	}
+
+	public void setInputLayer(FLyrVect inputLayer) {
+		this.inputLayer = inputLayer;
+	}
+
+	public FLyrVect getOutputLayer() {
+		return outputLayer;
+	}
+
+	public void setOutputLayer(FLyrVect outputLayer) {
+		this.outputLayer = outputLayer;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/TopologyBuilder.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessPlugin.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessPlugin.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessPlugin.java	(revision 30230)
@@ -0,0 +1,124 @@
+/*
+ * Created on 10-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/10 18:50:17  azabala
+* First version in CVS
+*
+*
+*/
+package com.iver.cit.gvsig.topology.lineclean;
+
+import java.net.URL;
+import java.util.Locale;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.geoprocess.core.IGeoprocessController;
+import com.iver.cit.gvsig.geoprocess.core.IGeoprocessPlugin;
+import com.iver.cit.gvsig.geoprocess.core.gui.IGeoprocessPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.topology.lineclean.gui.LineCleanGeoprocessPanel;
+
+public class LineCleanGeoprocessPlugin implements IGeoprocessPlugin {
+
+	private static String dataConvertPkg;
+	private static String geoprocessName;
+	
+	static{
+		dataConvertPkg = 
+			PluginServices.getText(null, "Conversion_de_datos");
+		geoprocessName =
+			PluginServices.getText(null, "LineClean");
+	}
+	
+	
+	
+	public IGeoprocessPanel getGeoprocessPanel() {
+		View vista = (View)PluginServices.
+		getMDIManager().
+		getActiveWindow();
+		FLayers layers = vista.getModel().
+			getMapContext().
+			getLayers();
+		
+		return new LineCleanGeoprocessPanel(layers);
+	}
+
+	public URL getHtmlDescription() {
+		Locale locale = Locale.getDefault();
+		String localeStr = locale.getLanguage();
+		String urlStr = "resources/description_" +
+										localeStr +
+											".html";
+		URL url = LineCleanGeoprocessPlugin.class.
+		getResource(urlStr);
+		return url;
+	}
+
+	public URL getImgDescription() {
+		URL url = LineCleanGeoprocessPlugin.class.
+			getResource("resources/linecleandesc.png");
+		return url;
+	}
+
+	public IGeoprocessController getGpController() {
+		return new LineCleanGeoprocessController();
+	}
+
+	public String getNamespace() {
+		return dataConvertPkg + "/" + geoprocessName;
+	}
+	
+	public String toString(){
+		return geoprocessName;
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessPlugin.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java	(revision 30230)
@@ -0,0 +1,390 @@
+/*
+ * Created on 10-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.8  2006-11-14 18:34:16  azabala
+* *** empty log message ***
+*
+* Revision 1.7  2006/11/14 18:00:57  azabala
+* internationalized texts
+*
+* Revision 1.6  2006/11/13 20:41:08  azabala
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/10 13:22:57  azabala
+* better syncronization of clean and build network (use of pipetask)
+*
+* Revision 1.4  2006/11/09 21:08:32  azabala
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/19 16:06:48  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/10 18:50:17  azabala
+* First version in CVS
+*
+*
+*/
+package com.iver.cit.gvsig.topology.lineclean.fmap;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
+import com.iver.cit.gvsig.fmap.drivers.LayerDefinition;
+import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.edition.ShpSchemaManager;
+import com.iver.cit.gvsig.fmap.edition.writers.shp.MultiShpWriter;
+import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
+import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
+import com.iver.cit.gvsig.fmap.operations.strategies.StrategyManager;
+import com.iver.cit.gvsig.fmap.operations.strategies.VisitException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.AbstractGeoprocess;
+import com.iver.cit.gvsig.geoprocess.core.fmap.DefinitionUtils;
+import com.iver.cit.gvsig.geoprocess.core.fmap.FeaturePersisterProcessor2;
+import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.util.SnappingCoordinateMap;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+import com.iver.utiles.swing.threads.Cancellable;
+import com.iver.utiles.swing.threads.IMonitorableTask;
+import com.iver.utiles.swing.threads.IPipedTask;
+
+public class LineCleanGeoprocess extends AbstractGeoprocess {
+
+	/**
+	 * Schema of the result layer
+	 */
+	private ILayerDefinition resultLayerDefinition;
+
+	
+	/**
+	 * flag to only clip selection of input layer
+	 */
+	private boolean onlyFirstLayerSelection = false;
+	
+	/**
+	 * Processes features (writing them)
+	 */
+	FeaturePersisterProcessor2 processor;
+
+	/**
+	 * Writer to save in a temporal layer intersections
+	 */
+	private IWriter intersectionsWriter;
+	FeaturePersisterProcessor2 intersectsProcessor;
+	
+	
+	public LineCleanGeoprocess(FLyrVect inputLayer){
+		this.firstLayer = inputLayer;
+	}
+	
+	
+	public void setParameters(Map params) throws GeoprocessException {
+		Boolean firstLayerSelection = (Boolean) params.get("firstlayerselection");
+		if (firstLayerSelection != null)
+			this.onlyFirstLayerSelection = 
+				firstLayerSelection.booleanValue();
+
+	}
+
+	public void checkPreconditions() throws GeoprocessException {
+		if (firstLayer == null)
+			throw new GeoprocessException("CLEAN: capa de entrada a null");
+		if (this.writer == null || this.schemaManager == null) {
+			throw new GeoprocessException(
+					"Operacion de CLEAN sin especificar capa de resultados");
+		}
+		try {
+			if(firstLayer.getSource().getShapeCount() == 0){
+				throw new GeoprocessException(
+				"Capa de entrada vacia");
+			}
+		} catch (DriverIOException e) {
+			throw new GeoprocessException(
+			"Error al verificar si la capa está vacía");
+		} 
+	}
+
+	public void process() throws GeoprocessException {
+		try {
+			createTask().run();
+		} catch (Exception e) {
+			throw new GeoprocessException("Error al ejecutar el geoproceso");
+		}
+	}
+
+	public ILayerDefinition createLayerDefinition() {
+		if (resultLayerDefinition == null) {
+			try {
+				resultLayerDefinition = DefinitionUtils.
+							createLayerDefinition(firstLayer);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return resultLayerDefinition;
+	}
+	
+	
+	class LineCleanTask extends AbstractMonitorableTask implements IPipedTask{
+
+		private LineCleanTask() {
+			setInitialStep(0);
+			try {
+				if (onlyFirstLayerSelection) {
+					int numSelected = firstLayer.getRecordset().getSelection()
+							.cardinality();
+					setFinalStep(numSelected);
+				} else {
+					int numShapes = firstLayer.getSource().getShapeCount();
+					setFinalStep(numShapes);
+				}// else
+			} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (DriverIOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			setDeterminatedProcess(true);
+			setStatusMessage(PluginServices.getText(this,
+					"LineClean._Progress_Message"));
+
+		}
+	
+		/**
+		 * Verifies cancelation events, and return a boolean flag if processes must
+		 * be stopped for this cancelations events.
+		 * 
+		 * @param cancel
+		 * @param va
+		 * @param visitor
+		 * @return
+		 * @throws DriverIOException
+		 */
+		protected boolean verifyCancelation(ReadableVectorial va) {
+			if (isCanceled()) {
+				try {
+					va.stop();
+				} finally {
+					return true;
+				}
+			}
+			return false;
+		}
+		
+		
+		public void run() throws Exception {
+			processor =
+				new FeaturePersisterProcessor2(writer);
+			
+			intersectionsWriter = new ShpWriter();
+			String temp = System.getProperty("java.io.tmpdir") + 
+					"/intersections_" + 
+					System.currentTimeMillis() +
+					".shp";
+			File newFile = new File(temp);
+			((ShpWriter) intersectionsWriter).setFile(newFile);
+			
+			ILayerDefinition intersectDefinition = new SHPLayerDefinition();
+			intersectDefinition.setShapeType(XTypes.POINT);
+			FieldDescription[] intersectFields = new FieldDescription[2];
+			intersectFields[0] = new FieldDescription();
+			intersectFields[0].setFieldLength(10);
+			intersectFields[0].setFieldDecimalCount(0);
+			intersectFields[0].setFieldName("FID1");
+			intersectFields[0].setFieldType(XTypes.INTEGER);
+			intersectFields[1] = new FieldDescription();
+			intersectFields[1].setFieldLength(10);
+			intersectFields[1].setFieldDecimalCount(0);
+			intersectFields[1].setFieldName("FID2");
+			intersectFields[1].setFieldType(XTypes.INTEGER);
+			intersectDefinition.setFieldsDesc(intersectFields);
+			
+			((ShpWriter) intersectionsWriter).initialize(
+					(LayerDefinition) intersectDefinition);
+			((SHPLayerDefinition) intersectDefinition).setFile(newFile);
+			
+			ShpSchemaManager interSchMg = 
+				new ShpSchemaManager(newFile.getAbsolutePath());
+			interSchMg.createSchema(intersectDefinition);
+			
+			intersectsProcessor = new 
+				FeaturePersisterProcessor2(intersectionsWriter);
+			
+			FBitSet selection = null;
+			SnappingCoordinateMap coordMap = 
+				new SnappingCoordinateMap(LineCleanVisitor.DEFAULT_SNAP);
+			LineCleanVisitor visitor = 
+				new LineCleanVisitor(processor,
+						             intersectsProcessor,
+						onlyFirstLayerSelection, 
+						resultLayerDefinition,
+						intersectDefinition,
+						firstLayer,
+						firstLayer.getRecordset(), coordMap);
+			
+			try {
+				processor.start();
+				intersectsProcessor.start();
+				
+				ReadableVectorial va = firstLayer.getSource();
+				va.start();
+				for (int i = 0; i < va.getShapeCount(); i++) {// for each geometry
+					if (verifyCancelation(va)) {
+						intersectsProcessor.finish();
+						return;
+					}
+					if(selection != null){
+						if (selection.get(i)) {
+								reportStep();
+								visitor.visit(va.getShape(i), i);
+						}
+							
+					}else{
+						reportStep();
+						visitor.visit(va.getShape(i), i);
+					}
+				}// for
+				va.stop();
+				processor.finish();
+				intersectsProcessor.finish();
+				
+				
+			} catch (DriverIOException e) {
+				e.printStackTrace();
+			}
+		}
+
+		// TODO INTERNACIONALIZAR LOS MENSAJES
+		public String getNote() {
+			String cleaningText = PluginServices.getText(this, "Limpiando_lineas");
+			String of = PluginServices.getText(this, "de");
+			return cleaningText + " " + getCurrentStep() + " "
+					+ of + " " + getFinishStep();
+		}
+
+		public void cancel() {
+			setCanceled(true);
+			LineCleanGeoprocess.this.cancel();
+		}
+
+		/* (non-Javadoc)
+		 * @see com.iver.utiles.swing.threads.IPipedTask#getResult()
+		 */
+		public Object getResult() {
+			try {
+				return LineCleanGeoprocess.this.getResult();
+			} catch (GeoprocessException e) {
+				return null;
+			}
+		}
+
+		/* (non-Javadoc)
+		 * @see com.iver.utiles.swing.threads.IPipedTask#setEntry(java.lang.Object)
+		 */
+		public void setEntry(Object object) {
+			// TODO Auto-generated method stub
+			
+		}
+	}
+
+	
+	public IMonitorableTask createTask() {
+		return new LineCleanTask();
+	}
+	
+	
+	public FLayer getResult() throws GeoprocessException {
+		
+		FLyrVect cleanedLayer = (FLyrVect) createLayerFrom(this.writer);
+		FLyrVect pseudoNodes = (FLyrVect) createLayerFrom(this.intersectionsWriter);
+		try {
+			if(pseudoNodes.getSource().getShapeCount() == 0){
+				return cleanedLayer;
+			}else{
+				MapContext map = ((View)PluginServices.
+						getMDIManager().
+						getActiveWindow()).
+						getModel().
+						getMapContext();
+				FLayers solution = new FLayers(map, null);
+				solution.setName(this.firstLayer.getName()+"_cleaned");
+				solution.addLayer(cleanedLayer);
+				solution.addLayer(pseudoNodes);
+				return solution;
+			}
+		} catch (DriverIOException e) {
+			throw new GeoprocessException("Error de lectura de datos");
+		}
+		
+		
+		
+			
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanVisitor.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanVisitor.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanVisitor.java	(revision 30230)
@@ -0,0 +1,849 @@
+/*
+ * Created on 10-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.7.2.1  2007-07-12 12:20:51  azabala
+ * bug solved
+ *
+ * Revision 1.7  2006/11/14 18:34:16  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/11/14 18:01:09  azabala
+ * removed system.out.println
+ *
+ * Revision 1.5  2006/11/13 20:41:08  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/10/19 16:06:48  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/10/17 18:27:24  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 18:50:17  azabala
+ * First version in CVS
+ *
+ *
+ */
+package com.iver.cit.gvsig.topology.lineclean.fmap;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
+import com.iver.cit.gvsig.fmap.operations.strategies.FeatureVisitor;
+import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
+import com.iver.cit.gvsig.fmap.operations.strategies.StrategyManager;
+import com.iver.cit.gvsig.fmap.operations.strategies.VisitException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.FeatureFactory;
+import com.iver.cit.gvsig.geoprocess.core.fmap.FeaturePersisterProcessor2;
+import com.iver.cit.gvsig.geoprocess.core.fmap.FeatureProcessor;
+import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
+import com.iver.cit.gvsig.util.SnappingCoordinateMap;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geomgraph.Node;
+import com.vividsolutions.jts.geomgraph.NodeFactory;
+import com.vividsolutions.jts.geomgraph.SnappingNodeMap;
+import com.vividsolutions.jts.linearref.LengthIndexedLine;
+import com.vividsolutions.jts.linearref.LinearLocation;
+import com.vividsolutions.jts.linearref.LocationIndexedLine;
+import com.vividsolutions.jts.operation.overlay.SnappingOverlayOperation;
+
+/**
+ * <p>
+ * This visitor operates with features whose geometries are lines. <br>
+ * For each visited feature, it looks for features in its proximity (spatial
+ * query). If these features hasnt been processed, it intersects the visited
+ * feature with all of the neighbour features. If intersection points are not
+ * nodes (end points), it ignores them. split the
+ * </p>
+ * 
+ * @author azabala
+ */
+public class LineCleanVisitor implements FeatureVisitor {
+
+	/**
+	 * Recordset of the layer we are working with
+	 */
+	protected SelectableDataSource recordset;
+
+	/**
+	 * Layer which we are cleaning
+	 */
+	protected FLyrVect layerToClean;
+
+	/**
+	 * marks if we are going to clean only layer selection
+	 */
+	protected boolean cleanOnlySelection;
+
+	/*
+	 * TODO Meter esto en preferencias
+	 */
+	public final static double DEFAULT_SNAP = 0.1;
+
+	protected double snapTolerance = DEFAULT_SNAP;
+
+	/**
+	 * It marks all processed features (to ignore them in future intersections)
+	 */
+	protected FBitSet processedFeatures;
+
+	/**
+	 * Strategy of the layer we are working with.
+	 */
+	protected Strategy strategy;
+
+	/**
+	 * Saves features resulting of cleaning process
+	 */
+	protected FeatureProcessor featureProcessor;
+
+	protected ILayerDefinition layerDefinition;
+	
+	
+	/**
+	 * Saves pseudonodes found
+	 * */
+	protected FeatureProcessor intersectProcessor;
+	protected ILayerDefinition intersectDefinition;
+	
+	
+	/**
+	 * Counter of new features
+	 */
+	int fid = 0;
+	
+	/**
+	 * It caches all written pseudonodes, to avoid 
+	 * writing the same pseudonode twice.
+	 * 
+	 * */
+	SnappingCoordinateMap snapCoordMap;
+	
+	/**
+	 * Constructor.
+	 * @param processor
+	 * @param intersectsProcessor
+	 * @param cleanOnlySelection
+	 * @param layerDefinition
+	 * @param intersectDefinition
+	 * @param firstLayer
+	 * @param source
+	 * @param snapCoordMap
+	 */
+	public LineCleanVisitor(FeatureProcessor processor,
+			FeaturePersisterProcessor2 intersectsProcessor, 
+									boolean cleanOnlySelection, 
+									ILayerDefinition layerDefinition, 
+									ILayerDefinition intersectDefinition, 
+									FLyrVect firstLayer, 
+									SelectableDataSource source,
+									SnappingCoordinateMap snapCoordMap) {
+		this.featureProcessor = processor;
+		this.cleanOnlySelection = cleanOnlySelection;
+		processedFeatures = new FBitSet();
+		this.layerDefinition = layerDefinition;
+		this.intersectProcessor = intersectsProcessor;
+		this.intersectDefinition = intersectDefinition;
+		this.layerToClean = firstLayer;
+		this.recordset = source;
+		this.strategy = StrategyManager.getStrategy(layerToClean);
+		this.snapCoordMap = snapCoordMap;
+	}
+
+	public void setLayerDefinition(ILayerDefinition layerDefinition) {
+		this.layerDefinition = layerDefinition;
+	}
+
+	private boolean checkForLineGeometry(Geometry geometry) {
+		if (geometry instanceof LineString)
+			return true;
+		if (geometry instanceof MultiLineString)
+			return true;
+		if (geometry instanceof GeometryCollection) {
+			GeometryCollection col = (GeometryCollection) geometry;
+			for (int i = 0; i < col.getNumGeometries(); i++) {
+				if (!checkForLineGeometry(col.getGeometryN(i)))
+					return false;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public void visit(IGeometry g, final int index) throws VisitException {
+		// first, we check it isnt a null geometry and the geometry type
+		// is correct
+		if (g == null)
+			return;
+		int geometryType = g.getGeometryType();
+		if (geometryType != XTypes.ARC && geometryType != XTypes.LINE
+				&& geometryType != XTypes.MULTI)
+			return;
+
+		// after that, if we are going to clean only selected features, we
+		// check if this feature is selected
+		if (cleanOnlySelection) {
+			try {
+				if (!layerToClean.getRecordset().getSelection().get(index))
+					return;
+			} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+				throw new VisitException(
+						"Error verificando seleccion en CLEAN", e);
+			}
+		}// if cleanOnly
+
+		final Geometry jtsGeo = g.toJTSGeometry();
+
+		
+		// we check if jts geometry is a line (or a line collection)
+		if (!checkForLineGeometry(jtsGeo))
+			return;
+
+		final SnappingNodeMap nodes = new SnappingNodeMap(new NodeFactory(),
+				snapTolerance);
+		/*
+		 * Se nos plantea una problematica. Tenemos dos features: A y B, y he
+		 * calculado la interseccion de A y B. Ahora, hay dos alternativas: -a)
+		 * nunca mas calcular esta intersección, pero almacenar su resultado en
+		 * SnappingNodeMap. Así, en una segunda pasada, con todos los "Nodos"
+		 * calculados, podríamos fragmentar las lineas de forma individual.
+		 * PROBLEMA: SnappingNodeMap iría creciendo, almacenando todos los nodos
+		 * de una capa....(si se apoya sobre un IndexedShpDriver, no tendría por
+		 * qué)
+		 * 
+		 * 
+		 * -b) Calcular la intersección en los dos sentidos: A int B, y luego al
+		 * procesar B, B int A. En este caso, pasamos olímpicamente del bitset
+		 * 
+		 * De momento, por simplicidad, seguimos la alternativa -b)
+		 */
+
+		final boolean onlySelection = cleanOnlySelection;
+		try {
+			strategy.process(new FeatureVisitor() {
+				
+				
+				SnappingOverlayOperation overlayOp = null;
+
+				/**
+				 * From a given geometry, it returns its nodes (coordinate for a
+				 * point, extreme coordinates for a line, first coordinate for a
+				 * polygon)
+				 */
+				private Coordinate[] getNodesFor(Geometry processedGeometry) {
+					Coordinate[] geomNodes = null;
+					if (processedGeometry instanceof LineString) {
+						LineString line = (LineString) processedGeometry;
+						geomNodes = new Coordinate[2];
+						geomNodes[0] = line.getCoordinateN(0);
+						geomNodes[1] = line
+								.getCoordinateN(line.getNumPoints() - 1);
+					} else if (processedGeometry instanceof MultiLineString) {
+						MultiLineString lines = (MultiLineString) processedGeometry;
+						int numLines = lines.getNumGeometries();
+						geomNodes = new Coordinate[2 * numLines];
+						int index = 0;
+						for (int i = 0; i < numLines; i++) {
+							LineString line = (LineString) lines
+									.getGeometryN(i);
+							geomNodes[index] = line.getCoordinateN(0);
+							index++;
+							geomNodes[index] = line.getCoordinateN(line
+									.getNumPoints() - 1);
+							index++;
+						}
+					} else if (processedGeometry instanceof GeometryCollection) {
+						GeometryCollection col = (GeometryCollection) processedGeometry;
+						ArrayList coordinates = new ArrayList();
+						for (int i = 0; i < col.getNumGeometries(); i++) {
+							Geometry geom = col.getGeometryN(i);
+							Coordinate[] newNodes = getNodesFor(geom);
+							coordinates.addAll(Arrays.asList(newNodes));
+						}
+					}
+//					else {
+//						System.out
+//								.println("Este proceso solo debe trabajar con lineas");
+//						System.out.println(processedGeometry.getGeometryType());
+//					}
+					return geomNodes;
+				}
+
+				/**
+				 * Checks if a coordinate is on a node of a given set of nodes
+				 * 
+				 * @param coord
+				 * @param nodes
+				 * @return
+				 */
+				private boolean checkIsNode(Coordinate coord, Coordinate[] nodes) {
+					for (int i = 0; i < nodes.length; i++) {
+						if (coord.distance(nodes[i]) <= snapTolerance)
+							return true;
+					}
+					return false;
+				}
+
+				/**
+				 * From a given geometry, and the intersection of this geometry
+				 * with another geometry, it creates a new node with these
+				 * intersections if its points are not coincident with the nodes
+				 * of the original goemetry.
+				 * 
+				 */
+				private void processIntersections(com.vividsolutions.jts.geomgraph.SnappingNodeMap nodes,
+						Geometry processedGeometry, Geometry intersections, int fid1, int fid2) {
+
+					Coordinate[] geomNodes = getNodesFor(processedGeometry);
+					if (intersections instanceof Point) {
+						Point p = (Point) intersections;
+						Coordinate coord = p.getCoordinate();
+						if (!checkIsNode(coord, geomNodes)){
+							nodes.addNode(coord);
+							
+							/*
+							 * We are computing intersections twice: A intersection B
+							 * and B intersection A. This is simpler than manage caches.
+							 * With this logic, we avoid to write the same pseudonode twice
+							 * 
+							 * */
+							if(snapCoordMap.containsKey(coord))
+								return;
+							else{
+								snapCoordMap.put(coord, coord);
+								IFeature feature = createIntersectFeature(coord, fid1, fid2);
+								intersectProcessor.processFeature(feature);
+							}
+						} 	
+					} else if (intersections instanceof MultiPoint) {
+						MultiPoint points = (MultiPoint) intersections;
+						for (int i = 0; i < points.getNumGeometries(); i++) {
+							Coordinate coord = ((Point) points.getGeometryN(i))
+									.getCoordinate();
+							if (!checkIsNode(coord, geomNodes)){
+								nodes.addNode(coord);
+								if(snapCoordMap.containsKey(coord))
+									return;
+								else{
+									snapCoordMap.put(coord, coord);
+									IFeature feature = createIntersectFeature(coord, fid1, fid2);
+									intersectProcessor.processFeature(feature);
+								}
+							}	
+						}
+					} else if (intersections instanceof LineString) {
+						LineString line = (LineString) intersections;
+						int numPoints = line.getCoordinates().length;
+						Coordinate coord1 = line.getCoordinateN(0);
+						Coordinate coord2 = line.getCoordinateN(numPoints - 1);
+						if (!checkIsNode(coord1, geomNodes)){
+							nodes.addNode(coord1);
+							if(snapCoordMap.containsKey(coord1))
+								return;
+							else{
+								snapCoordMap.put(coord1, coord1);
+								IFeature feature = createIntersectFeature(coord1, fid1, fid2);
+								intersectProcessor.processFeature(feature);
+							}
+						}	
+						if (!checkIsNode(coord2, geomNodes)){
+							nodes.addNode(coord2);
+							if(snapCoordMap.containsKey(coord2))
+								return;
+							else{
+								snapCoordMap.put(coord2, coord2);
+								IFeature feature = createIntersectFeature(coord2, fid1, fid2);
+								intersectProcessor.processFeature(feature);
+							}
+						}	
+					} else if (intersections instanceof GeometryCollection) {
+						GeometryCollection col = (GeometryCollection) intersections;
+						for (int i = 0; i < col.getNumGeometries(); i++) {
+
+							// El tema está en que aquí el calculo de los nodos
+							// de la geometria intersectada se repite cada vez
+							// revisar, pues MultiLineString puede ser un
+							// resultado habitual
+							processIntersections(nodes, processedGeometry, col
+									.getGeometryN(i), fid1, fid2);
+						}
+					}
+//					else if (intersections instanceof Polygon) {
+//						System.out
+//								.println("Un poligono interseccion de 2 lineas???");
+//					}// else
+
+				}
+
+				public void visit(IGeometry g2, int indexOverlay)
+						throws VisitException {
+
+					if (g2 == null)
+						return;
+
+					if (index == indexOverlay)
+						return;
+
+					if (onlySelection) {
+						try {
+							if (!layerToClean.getRecordset().getSelection()
+									.get(indexOverlay))
+								return;
+						} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+							throw new VisitException(
+									"Error verificando seleccion en clean", e);
+						}// geometry g is not selected
+					}// if onlySelection
+
+					int geometryType = g2.getGeometryType();
+					if (geometryType != XTypes.ARC
+							&& geometryType != XTypes.LINE
+							&& geometryType != XTypes.MULTI)
+						return;
+
+					/*
+					 * TODO De momento no vamos a tener en cuenta que la
+					 * interseccion ya ha sido calculada... (Ver comentario al
+					 * instanciar SnappingNodeMap) // ya ha sido tratado
+					 * if(processedFeatures.get(indexOverlay)) return;
+					 */
+					Geometry jtsGeo2 = g2.toJTSGeometry();
+					if (!checkForLineGeometry(jtsGeo2))
+						return;
+
+					if(overlayOp == null)
+						overlayOp = new SnappingOverlayOperation(jtsGeo, jtsGeo2, snapTolerance);	
+					else{
+						overlayOp.setSecondGeometry(jtsGeo2);
+					}
+					
+					Geometry intersections = overlayOp.
+						getResultGeometry(SnappingOverlayOperation.INTERSECTION);
+						
+					processIntersections(nodes, jtsGeo, intersections, index, indexOverlay);
+
+					// IFeature cleanedFeature;
+					// try {
+					// cleanedFeature = createFeature(newGeoJts,
+					// index, indexOverlay);
+					// } catch (DriverException e) {
+					// throw new VisitException(
+					// "Error al crear el feature resultante del CLEAN");
+					// }
+					// featureProcessor.processFeature(cleanedFeature);
+
+				}
+
+				public String getProcessDescription() {
+					return "Computing intersections of a polygon with its adjacents";
+				}
+
+				public void stop(FLayer layer) {
+				}
+
+				public boolean start(FLayer layer) {
+					return true;
+				}
+			}, g.getBounds2D());
+
+			// At this point, nodes variable (SnappingNodeMap)
+			// has all intersections of the visited feature with the rest of
+			// features of the layer
+
+			// It computes linear distance of a point on the given jtsGeo linear
+			// geometry
+			boolean rightGeometry = true;
+			if (nodes.values().size() > 0) {
+				
+				LengthIndexedLine lengthLine = new LengthIndexedLine(jtsGeo);
+				Iterator nodesIt = nodes.iterator();
+				ArrayList nodeIntersections = new ArrayList();
+				while (nodesIt.hasNext()) {
+					Node node = (Node) nodesIt.next();
+					Coordinate coord = node.getCoordinate();
+					double lengthOfNode = lengthLine.indexOf(coord);
+					LineIntersection inters = new LineIntersection();
+					inters.coordinate = coord;
+					inters.lenght = lengthOfNode;
+					nodeIntersections.add(inters);
+				}
+				
+				if (nodeIntersections.size() > 0) {
+					// We sort the intersections by distance along the line
+					// (dynamic
+					// segmentation)
+					rightGeometry = false;
+					Collections.sort(nodeIntersections, new Comparator() {
+						public int compare(Object arg0, Object arg1) {
+							LineIntersection l1 = (LineIntersection) arg0;
+							LineIntersection l2 = (LineIntersection) arg1;
+							if (l1.lenght > l2.lenght)
+								return 1;
+							else if (l1.lenght < l2.lenght)
+								return -1;
+							else
+								return 0;
+						}
+					});
+
+					LinearLocation lastLocation = null;
+					LineIntersection lastIntersection = null;
+					LocationIndexedLine indexedLine = new LocationIndexedLine(
+							jtsGeo);
+					for (int i = 0; i < nodeIntersections.size(); i++) {
+						Geometry solution = null;
+						LineIntersection li = (LineIntersection) nodeIntersections
+								.get(i);
+
+						LinearLocation location = indexedLine
+								.indexOf(li.coordinate);// es posible que esto
+														// esté mal por no
+														// pasarle una longitud.
+														// REVISAR
+						if (lastLocation == null) {
+							LinearLocation from = new LinearLocation(0, 0d);
+							
+//							solution = splitLineString(jtsGeo, from, location,
+//									null, li);
+//							
+							
+							solution = indexedLine.extractLine(from, location);
+							
+							
+							lastLocation = location;
+							lastIntersection = li;
+							/*
+							 * Construimos una linea desde el primer punto hasta
+							 * el punto contenido en LineIntersection, con todos
+							 * los puntos intermedios de la linea.
+							 * 
+							 * 
+							 * 
+							 */
+						} else {
+							// Construimos una linea entre lastIntersection y la
+							// intersection
+							// actual
+							LinearLocation locationFrom = lastLocation;
+							
+//							solution = splitLineString(jtsGeo, locationFrom,
+//									location, lastIntersection, li);
+							
+							solution = indexedLine.extractLine(locationFrom, location);
+							lastLocation = location;
+							lastIntersection = li;
+
+						}
+
+						IFeature feature = createFeature(solution, index);
+						featureProcessor.processFeature(feature);
+						// TODO Podriamos guardar los puntos de interseccion
+						// para
+						// mostrar al usuario que puntos eran pseudonodos
+					}// for
+
+					// añadimos el ultimo segmento
+//					Coordinate[] geomCoords = jtsGeo.getCoordinates();
+//					ArrayList coordinates = new ArrayList();
+//					coordinates.add(lastIntersection.coordinate);
+//					int startIndex = lastLocation.getSegmentIndex() + 1;
+//					for (int i = startIndex; i < geomCoords.length; i++) {
+//						coordinates.add(geomCoords[i]);
+//					}
+//					Coordinate[] solutionCoords = new Coordinate[coordinates
+//							.size()];
+//					coordinates.toArray(solutionCoords);
+//					IFeature lastFeature = createFeature(new GeometryFactory()
+//							.createLineString(solutionCoords), index);
+					LinearLocation endLocation = new LinearLocation();
+					endLocation.setToEnd(jtsGeo);
+					Geometry geo = indexedLine.extractLine(lastLocation, endLocation);
+					IFeature lastFeature = createFeature(geo, index);
+					featureProcessor.processFeature(lastFeature);
+
+				}
+			} 
+			if(rightGeometry){
+				IFeature feature = createFeature(g, index);
+				featureProcessor.processFeature(feature);
+			}
+
+
+		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+			throw new VisitException(
+					"Error buscando los overlays que intersectan con un feature");
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	private Geometry splitLineString(Geometry linearGeometry,
+			LinearLocation from, LinearLocation to, LineIntersection fromInt,
+			LineIntersection toInt) {
+		Coordinate[] geomCoords = linearGeometry.getCoordinates();
+		ArrayList coordinates = new ArrayList();
+		if (fromInt != null)
+			coordinates.add(fromInt.coordinate);
+		int startIndex = from.getSegmentIndex();
+		/*
+		 * segmentIndex siempre referencia al punto inmediatamente anterior del
+		 * lineString. Nos interesa sumar 1, a no ser que sea el primer punto
+		 * del linestring
+		 */
+		if (startIndex != 0)
+			startIndex++;
+		
+		for (int i = startIndex; i <= to.getSegmentIndex(); i++) {
+			coordinates.add(geomCoords[i]);
+		}
+		coordinates.add(toInt.coordinate);
+		Coordinate[] solutionCoords = new Coordinate[coordinates.size()];
+		coordinates.toArray(solutionCoords);
+		return new GeometryFactory().createLineString(solutionCoords);
+
+	}
+
+	class LineIntersection {
+		Coordinate coordinate;
+
+		double lenght;
+	}
+
+	public String getProcessDescription() {
+		return "Cleaning lines of a vectorial line layer";
+	}
+
+	public void stop(FLayer layer) {
+		this.featureProcessor.finish();
+		this.intersectProcessor.finish();
+	}
+
+	public boolean start(FLayer layer) {
+		if (layer instanceof AlphanumericData && layer instanceof VectorialData) {
+			try {
+				layerToClean = (FLyrVect) layer;
+				recordset = ((AlphanumericData) layer).getRecordset();
+				strategy = StrategyManager.getStrategy(layerToClean);
+				featureProcessor.start();
+				intersectProcessor.start();
+			} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+				return false;
+			} catch (EditionException e) {
+				return false;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	private IFeature createFeature(Geometry jtsGeometry, int firstLayerIndex)
+			throws DriverException {
+		IFeature solution = null;
+		IGeometry cleanedGeometry = FConverter.jts_to_igeometry(jtsGeometry);
+		FieldDescription[] fields = layerDefinition.getFieldsDesc();
+		int numFields = fields.length;
+		Value[] featureAttr = new Value[fields.length];
+		for (int indexField = 0; indexField < numFields; indexField++) {
+			// for each field of firstRs
+			String fieldName = recordset.getFieldName(indexField);
+			for (int j = 0; j < fields.length; j++) {
+				if (fieldName.equalsIgnoreCase(fields[j].getFieldName())) {
+					featureAttr[j] = recordset.getFieldValue(firstLayerIndex,
+							indexField);
+					break;
+				}// if
+			}// for
+		}// for
+		// now we put null values
+		for (int i = 0; i < featureAttr.length; i++) {
+			if (featureAttr[i] == null)
+				featureAttr[i] = ValueFactory.createNullValue();
+		}
+		solution = FeatureFactory.createFeature(featureAttr, cleanedGeometry);
+		return solution;
+	}
+	
+	
+	
+	private IFeature createIntersectFeature(Coordinate coord,  int fid1, int fid2){
+		IFeature solution = null;
+		Point point = FConverter.geomFactory.createPoint(coord);
+		IGeometry cleanedGeometry = FConverter.jts_to_igeometry(point);
+		Value[] values = new Value[2];
+		values[0] = ValueFactory.createValue(fid1);
+		values[1] = ValueFactory.createValue(fid2);
+		solution = FeatureFactory.createFeature(values, cleanedGeometry);
+		return solution;
+	}
+
+	private IFeature createFeature(IGeometry g, int firstLayerIndex)
+			throws DriverException {
+		IFeature solution = null;
+		FieldDescription[] fields = layerDefinition.getFieldsDesc();
+		int numFields = fields.length;
+		Value[] featureAttr = new Value[fields.length];
+		for (int indexField = 0; indexField < numFields; indexField++) {
+			// for each field of firstRs
+			String fieldName = recordset.getFieldName(indexField);
+			for (int j = 0; j < fields.length; j++) {
+				if (fieldName.equalsIgnoreCase(fields[j].getFieldName())) {
+					featureAttr[j] = recordset.getFieldValue(firstLayerIndex,
+							indexField);
+					break;
+				}// if
+			}// for
+		}// for
+		// now we put null values
+		for (int i = 0; i < featureAttr.length; i++) {
+			if (featureAttr[i] == null)
+				featureAttr[i] = ValueFactory.createNullValue();
+		}
+		solution = FeatureFactory.createFeature(featureAttr, g);
+		return solution;
+	}
+
+//	public static void main(String[] args) {
+//		DriverManager dm = new DriverManager();
+//		dm.setValidation(new DriverValidation() {
+//			public boolean validate(Driver d) {
+//				return ((d instanceof ObjectDriver)
+//						|| (d instanceof FileDriver) || (d instanceof DBDriver));
+//			}
+//		});
+//		dm.loadDrivers(new File(
+//				"../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers"));
+//		LayerFactory
+//				.setDriversPath("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers");
+//
+//		// Setup del factory de DataSources
+//		DataSourceFactory dsf = LayerFactory.getDataSourceFactory();
+//		dsf.setDriverManager(dm);
+//
+//		// Setup de las tablas
+//		// dsf.addFileDataSource("gdbms dbf driver", "nodes", "c:/nodes.dbf");
+//		// dsf.addFileDataSource("gdbms dbf driver", "edges", "c:/edges.dbf");
+//
+//		IProjection prj = CRSFactory.getCRS("EPSG:23030");
+//		File shpFile = new File("C:/JUMP/datos/cauces_gv.shp");
+//		try {
+//			FLyrVect lyr = (FLyrVect) LayerFactory.createLayer("Ejes",
+//					"gvSIG shp driver", shpFile, prj);
+//			System.out.println(lyr.getSource().getShapeCount());
+//
+//			LayerDefinition definition = new LayerDefinition();
+//			FieldDescription cauNom = new FieldDescription();
+//			cauNom.setFieldName("CAUNOM");
+//			cauNom.setFieldType(XTypes.CHAR);
+//			cauNom.setFieldLength(10);
+//			cauNom.setFieldDecimalCount(0);
+//			definition.setFieldsDesc(new FieldDescription[]{cauNom});
+//			definition.setShapeType(XTypes.LINE);
+//			
+//			
+//			
+//			
+////			LineCleanVisitor visitor = new LineCleanVisitor(
+////					new FeatureProcessor() {
+////
+////						public void processFeature(IRow feature) {
+////							// TODO Auto-generated method stub
+////
+////						}
+////
+////						public void finish() {
+////							// TODO Auto-generated method stub
+////
+////						}
+////
+////						public void start() throws EditionException {
+////							// TODO Auto-generated method stub
+////
+////						}
+////					}, false, definition);
+//			Strategy str = StrategyManager.getStrategy(lyr);
+////			str.process(visitor);
+//
+////		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+////			// TODO Auto-generated catch block
+////			e.printStackTrace();
+////		} catch (DriverIOException e) {
+////			// TODO Auto-generated catch block
+////			e.printStackTrace();
+////		} catch (VisitException e) {
+////			// TODO Auto-generated catch block
+////			e.printStackTrace();
+////		}
+//	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanVisitor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/gui/LineCleanGeoprocessPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/gui/LineCleanGeoprocessPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/gui/LineCleanGeoprocessPanel.java	(revision 30230)
@@ -0,0 +1,80 @@
+/*
+ * Created on 10-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/10 18:50:17  azabala
+* First version in CVS
+*
+*
+*/
+package com.iver.cit.gvsig.topology.lineclean.gui;
+
+import java.awt.event.ItemEvent;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.geoprocess.core.gui.AbstractGeoprocessGridbagPanel;
+
+public class LineCleanGeoprocessPanel extends AbstractGeoprocessGridbagPanel {
+
+	public LineCleanGeoprocessPanel(FLayers arg0) {
+		super(arg0, PluginServices.getText(null, "Clean_de_lineas"));
+		// TODO Auto-generated constructor stub
+	}
+
+	protected void addSpecificDesign() {
+		initSelectedItemsJCheckBox();
+		updateNumSelectedFeaturesLabel();
+	}
+
+	protected void processLayerComboBoxStateChange(ItemEvent arg0) {
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/gui/LineCleanGeoprocessPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessController.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessController.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessController.java	(revision 30230)
@@ -0,0 +1,178 @@
+/*
+ * Created on 10-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-10-23 16:52:39  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/17 18:25:53  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/10 18:50:17  azabala
+* First version in CVS
+*
+*
+*/
+package com.iver.cit.gvsig.topology.lineclean;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.HashMap;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.edition.ShpSchemaManager;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.geoprocess.core.fmap.AbstractGeoprocessController;
+import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.IGeoprocess;
+import com.iver.cit.gvsig.geoprocess.core.gui.AddResultLayerTask;
+import com.iver.cit.gvsig.geoprocess.core.gui.IGeoprocessPanel;
+import com.iver.cit.gvsig.topology.lineclean.fmap.LineCleanGeoprocess;
+import com.iver.cit.gvsig.topology.lineclean.gui.LineCleanGeoprocessPanel;
+import com.iver.utiles.swing.threads.IMonitorableTask;
+import com.iver.utiles.swing.threads.MonitorableDecoratorMainFirst;
+
+public class LineCleanGeoprocessController extends AbstractGeoprocessController {
+
+	private LineCleanGeoprocessPanel panel;
+	private LineCleanGeoprocess geoprocess;
+	
+	public void setView(IGeoprocessPanel viewPanel) {
+		this.panel =  
+			(LineCleanGeoprocessPanel) viewPanel;
+	}
+	public IGeoprocess getGeoprocess() {
+		return geoprocess;
+	}
+
+	public boolean launchGeoprocess() {
+		
+		
+		/*
+		 * TODO
+		 * METER TODO ESTO EN LA CLASE ABSTRACTA
+		 * */
+		FLyrVect inputLayer = panel.getInputLayer();
+		FLayers layers = panel.getFLayers();
+		File outputFile = null;
+		try {
+			outputFile = panel.getOutputFile();
+		} catch (FileNotFoundException e3) {
+			String error = PluginServices.getText(this, "Error_entrada_datos");
+			String errorDescription = PluginServices.getText(this, "Error_seleccionar_resultado");
+			panel.error(errorDescription, error);
+			return false;
+		}
+		if (outputFile == null || (outputFile.getAbsolutePath().length() == 0)) {
+			String error = PluginServices.getText(this, "Error_entrada_datos");
+			String errorDescription = PluginServices.getText(this, "Error_seleccionar_resultado");
+			panel.error(errorDescription, error);
+			return false;
+		}
+		if (outputFile.exists()) {
+			if (!panel.askForOverwriteOutputFile(outputFile)) {
+				return false;
+			}
+		}
+		
+		
+		
+		
+		geoprocess = new LineCleanGeoprocess(inputLayer);
+
+		SHPLayerDefinition definition = (SHPLayerDefinition) geoprocess
+				.createLayerDefinition();
+		definition.setFile(outputFile);
+		ShpSchemaManager schemaManager = new ShpSchemaManager(outputFile.getAbsolutePath());
+		IWriter writer = null;
+		try {
+			writer = getShpWriter(definition);
+		} catch (Exception e1) {
+			String error = PluginServices.getText(this, "Error_escritura_resultados");
+			String errorDescription = PluginServices.getText(this, "Error_preparar_escritura_resultados");
+			panel.error(errorDescription, error);
+			return false;
+		} 
+		geoprocess.setResultLayerProperties(writer, schemaManager);
+		HashMap params = new HashMap();
+		boolean onlySelected = panel.isFirstOnlySelected();
+		params.put("layer_selection", new Boolean(onlySelected));
+		try {
+			geoprocess.setParameters(params);
+			geoprocess.checkPreconditions();
+			IMonitorableTask task1 = geoprocess.createTask();
+			if(task1 == null){
+				return false;
+				
+			}
+			AddResultLayerTask task2 = new AddResultLayerTask(geoprocess);
+			task2.setLayers(layers);
+			MonitorableDecoratorMainFirst globalTask = new MonitorableDecoratorMainFirst(task1,
+					task2);
+			if (globalTask.preprocess())
+				PluginServices.cancelableBackgroundExecution(globalTask);
+			
+		} catch (GeoprocessException e) {
+			String error = PluginServices.getText(this, "Error_ejecucion");
+			String errorDescription = PluginServices.getText(this, "Error_fallo_geoproceso");
+			panel.error(errorDescription, error);
+			return false;
+		}
+		return true;
+	}
+	public int getWidth() {
+		return 700;
+	}
+	public int getHeight() {
+		return 600;
+	}
+
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/LineCleanGeoprocessController.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/cleandesc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/cleandesc.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_en.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_en.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_en.html	(revision 30230)
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
+	<TITLE>Clean</TITLE>
+</HEAD>
+<BODY DIR="LTR">
+<P><FONT COLOR="#800000"><B>Clean</B></FONT>
+</P>
+<P>This geoprocess forces the input layer to have a correct line topology.
+</P>
+<P>
+"Correct line topology" means this layer cant have pseudonodes (their line geometries
+only could intersect in nodes, extreme points).
+</P>
+<P>
+<IMG SRC="cleandesc.png" NAME="Imagen1" ALIGN=LEFT BORDER=0>
+</P>
+<P>
+When this geoprocess founds a pseudonode, it breaks the intersecting lines
+and creates four new lines which intersects in an extreme point.
+</P>
+</BODY>
+</HTML>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_en.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_es.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_es.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_es.html	(revision 30230)
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
+	<TITLE>Clean</TITLE>
+</HEAD>
+<BODY LANG="es-ES" DIR="LTR">
+<P><FONT COLOR="#800000"><B>Clean</B></FONT>
+</P>
+<P>Este geoproceso corrige topológicamente las geometrías de una capa de líneas,
+de forma que esta capa pase a tener una topología de líneas correcta.
+</P>
+<P>
+Por "topología correcta de líneas", entendemos que las geometrías lineales de
+esta capa no se autointersecten, y que solamente intersecten con otras geometrías
+de líneas por sus puntos extremos (nodos).
+</P>
+<P>
+<IMG SRC="cleandesc.png" NAME="Imagen1" ALIGN=LEFT BORDER=0>
+</P>
+<P>
+Si durante la ejecución del mismo se detecta que dos líneas intersectan en un
+punto que no es nodo (pseudonodo), se fragmentará estas geometrías originando
+cuatro nuevas líneas que sí intersectarán en sus extremos.
+</P>
+</BODY>
+</HTML>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/resources/description_es.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/RegisterGeoprocessPlugin.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/RegisterGeoprocessPlugin.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/RegisterGeoprocessPlugin.java	(revision 30230)
@@ -0,0 +1,81 @@
+/*
+ * Created on 16-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-17 18:25:53  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.topology.lineclean;
+
+import com.iver.andami.plugins.Extension;
+import com.iver.utiles.extensionPoints.ExtensionPoints;
+import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
+
+public class RegisterGeoprocessPlugin extends Extension{
+
+	public void initialize() {
+		ExtensionPoints extensionPoints = 
+			ExtensionPointsSingleton.getInstance();
+		extensionPoints.add("GeoprocessManager",
+				"LINECLEAN", 
+				LineCleanGeoprocessPlugin.class);
+	}
+
+	public void execute(String actionCommand) {
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		return true;
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/lineclean/RegisterGeoprocessPlugin.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/NodeError.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/NodeError.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/NodeError.java	(revision 30230)
@@ -0,0 +1,81 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.topology;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.planargraph.Node;
+
+public class NodeError  extends Node
+{
+	public static int DANGLE = 1;
+	public static int FUZZY = 2;
+	
+	int occurrences;
+	int errorType;
+	
+	public NodeError(Coordinate pt) {
+		super(pt);
+		occurrences = 1;
+	}
+
+	
+
+	public int getOccurrences() {
+		return occurrences;
+	}
+
+	public void setOccurrences(int occurrences) {
+		this.occurrences = occurrences;
+	}
+
+	public int getErrorType() {
+		return errorType;
+	}
+
+
+
+	public void setErrorType(int errorType) {
+		this.errorType = errorType;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/NodeError.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Triangulation.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Triangulation.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Triangulation.java	(revision 30230)
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2005 by L. Paul Chew.
+ * 
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, subject to the following 
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be included 
+ * in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+package com.iver.cit.gvsig.topology.triangulation;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * A Triangulation on vertices (generic type V).
+ * A Triangulation is a set of Simplices (see Simplex below).
+ * For efficiency, we keep track of the neighbors of each Simplex.
+ * Two Simplices are neighbors of they share a facet.
+ * 
+ * @author Paul Chew
+ * 
+ * Created July 2005.  Derived from an earlier, messier version.
+ */
+public class Triangulation {
+    
+    private HashMap neighbors;  // Maps Simplex to Set of neighbors
+    
+    /**
+     * Constructor.
+     * @param simplex the initial Simplex.
+     */
+    public Triangulation (Simplex simplex) {
+        neighbors = new HashMap();
+        neighbors.put(simplex, new HashSet());
+    }
+    
+    /**
+     * String representation.
+     * Shows number of simplices currently in the Triangulation.
+     * @return a String representing the Triangulation
+     */
+    public String toString () {
+        return "Triangulation (with " + neighbors.size() + " elements)";
+    }
+    
+    /**
+     * Size (# of Simplices) in Triangulation.
+     * @return the number of Simplices in this Triangulation
+     */
+    public int size () {
+        return neighbors.size();
+    }
+    
+    /**
+     * True iff the simplex is in this Triangulation.
+     * @param simplex the simplex to check
+     * @return true iff the simplex is in this Triangulation
+     */
+    public boolean contains (Simplex simplex) {
+        return this.neighbors.containsKey(simplex);
+    }
+    
+    /**
+     * Iterator.
+     * @return an iterator for every Simplex in the Triangulation
+     */
+    public Iterator iterator () {
+        return Collections.unmodifiableSet(this.neighbors.keySet()).iterator();
+    }
+    
+    /**
+     * Print stuff about a Triangulation.
+     * Used for debugging.
+     */
+    public void printStuff () {
+        boolean remember = Simplex.moreInfo;
+        System.out.println("Neighbor data for " + this);
+        for (Iterator it = neighbors.keySet().iterator(); it.hasNext();) {
+            Simplex simplex = (Simplex) it.next();
+            Simplex.moreInfo = true;
+            System.out.print("    " + simplex + ":");
+            Simplex.moreInfo = false;
+            for (Iterator otherIt = ((Set) neighbors.get(simplex)).iterator(); 
+                 otherIt.hasNext();)
+                System.out.print(" " + otherIt.next());
+            System.out.println();
+        }
+        Simplex.moreInfo = remember;
+    }
+    
+    /* Navigation */
+    
+    /**
+     * Report neighbor opposite the given vertex of simplex.
+     * @param vertex a vertex of simplex
+     * @param simplex we want the neighbor of this Simplex
+     * @return the neighbor opposite vertex of simplex; null if none
+     * @throws IllegalArgumentException if vertex is not in this Simplex
+     */
+    public Simplex neighborOpposite (Object vertex, Simplex simplex) {
+        if (!simplex.contains(vertex))
+            throw new IllegalArgumentException("Bad vertex; not in simplex");
+        SimplexLoop: for (Iterator it = ((Set) neighbors.get(simplex)).iterator(); 
+                          it.hasNext();) {
+            Simplex s = (Simplex) it.next();
+            for (Iterator otherIt = simplex.iterator(); otherIt.hasNext(); ) {
+                Object v = otherIt.next();
+                if (v.equals(vertex)) continue;
+                if (!s.contains(v)) continue SimplexLoop;
+            }
+            return s;
+        }
+        return null;
+    }
+    
+    /**
+     * Report neighbors of the given simplex.
+     * @param simplex a Simplex
+     * @return the Set of neighbors of simplex
+     */
+    public Set neighbors (Simplex simplex) {
+        return new HashSet((Set) this.neighbors.get(simplex));
+    }
+    
+    /* Modification */
+    
+    /**
+     * Update by replacing one set of Simplices with another.
+     * Both sets of simplices must fill the same "hole" in the
+     * Triangulation.
+     * @param oldSet set of Simplices to be replaced
+     * @param newSet set of replacement Simplices
+     */
+    public void update (Set oldSet, 
+                        Set newSet) {
+        // Collect all simplices neighboring the oldSet
+        Set allNeighbors = new HashSet();
+        for (Iterator it = oldSet.iterator(); it.hasNext();)
+            allNeighbors.addAll((Set) neighbors.get((Simplex) it.next()));
+        // Delete the oldSet
+        for (Iterator it = oldSet.iterator(); it.hasNext();) {
+            Simplex simplex = (Simplex) it.next();
+            for (Iterator otherIt = ((Set) neighbors.get(simplex)).iterator(); 
+                 otherIt.hasNext();)
+                ((Set) neighbors.get(otherIt.next())).remove(simplex);
+            neighbors.remove(simplex);
+            allNeighbors.remove(simplex);
+        }
+        // Include the newSet simplices as possible neighbors
+        allNeighbors.addAll(newSet);
+        // Create entries for the simplices in the newSet
+        for (Iterator it = newSet.iterator(); it.hasNext();)
+            neighbors.put((Simplex) it.next(), new HashSet());
+        // Update all the neighbors info
+        for (Iterator it = newSet.iterator(); it.hasNext();) {
+            Simplex s1 = (Simplex) it.next();
+            for (Iterator otherIt = allNeighbors.iterator(); otherIt.hasNext();) {
+                Simplex s2 = (Simplex) otherIt.next();
+                if (!s1.isNeighbor(s2)) continue;
+                ((Set) neighbors.get(s1)).add(s2);
+                ((Set) neighbors.get(s2)).add(s1);
+            }
+        }
+    }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Triangulation.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Pnt.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Pnt.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Pnt.java	(revision 30230)
@@ -0,0 +1,483 @@
+/*
+ * Copyright (c) 2005 by L. Paul Chew.
+ * 
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, subject to the following 
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be included 
+ * in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ * DEALINGS IN THE SOFTWARE.
+ */
+package com.iver.cit.gvsig.topology.triangulation;
+/**
+ * Points in Euclidean space, implemented as double[].
+ * 
+ * Includes simple geometric operations.
+ * Uses matrices; a matrix is represented as an array of Pnts.
+ * Uses simplices; a simplex is represented as an array of Pnts.
+ * 
+ * @author Paul Chew
+ * 
+ * Created July 2005.  Derived from an earlier, messier version.
+ */
+public class Pnt {
+    
+    private double[] coordinates;          // The point's coordinates
+    
+    /**
+     * Constructor.
+     * @param coords the coordinates
+     */
+    public Pnt (double[] coords) {
+        // Copying is done here to ensure that Pnt's coords cannot be altered.
+        coordinates = new double[coords.length];
+        System.arraycopy(coords, 0, coordinates, 0, coords.length);
+    }
+    
+    /**
+     * Constructor.
+     * @param coordA
+     * @param coordB
+     */
+    public Pnt (double coordA, double coordB) {
+        this(new double[] {coordA, coordB});
+    }
+    
+    /**
+     * Constructor.
+     * @param coordA
+     * @param coordB
+     * @param coordC
+     */
+    public Pnt (double coordA, double coordB, double coordC) {
+        this(new double[] {coordA, coordB, coordC});
+    }
+    
+    /**
+     * Create a String for this Pnt.
+     * @return a String representation of this Pnt.
+     */
+    public String toString () {
+        if (coordinates.length == 0) return "()";
+        String result = "Pnt(" + coordinates[0];
+        for (int i = 1; i < coordinates.length; i++)
+            result = result + "," + coordinates[i];
+        result = result + ")";
+        return result;
+    }
+    
+    /**
+     * Equality.
+     * @param other the other Object to compare to
+     * @return true iff the Pnts have the same coordinates
+     */
+    public boolean equals (Object other) {
+        if (!(other instanceof Pnt)) return false;
+        Pnt p = (Pnt) other;
+        if (this.coordinates.length != p.coordinates.length) return false;
+        for (int i = 0; i < this.coordinates.length; i++)
+            if (this.coordinates[i] != p.coordinates[i]) return false;
+        return true;
+    }
+    
+    /**
+     * HashCode.
+     * @return the hashCode for this Pnt
+     */
+    public int hashCode () {
+        int hash = 0;
+        for (int i = 0; i < this.coordinates.length; i++) {
+            long bits = Double.doubleToLongBits(this.coordinates[i]);
+            hash = (31*hash) ^ (int)(bits ^ (bits >> 32));
+        }
+        return hash;
+    }
+    
+    /* Pnts as vectors */
+    
+    /**
+     * @return the specified coordinate of this Pnt
+     * @throws ArrayIndexOutOfBoundsException for bad coordinate
+     */
+    public double coord (int i) {
+        return this.coordinates[i];
+    }
+    
+    /**
+     * @return this Pnt's dimension.
+     */
+    public int dimension () {
+        return coordinates.length;
+    }
+    
+    /**
+     * Check that dimensions match.
+     * @param p the Pnt to check (against this Pnt)
+     * @return the dimension of the Pnts
+     * @throws IllegalArgumentException if dimension fail to match
+     */
+    public int dimCheck (Pnt p) {
+        int len = this.coordinates.length;
+        if (len != p.coordinates.length)
+            throw new IllegalArgumentException("Dimension mismatch");
+        return len;
+    }
+    
+    /**
+     * Create a new Pnt by adding additional coordinates to this Pnt.
+     * @param coords the new coordinates (added on the right end)
+     * @return a new Pnt with the additional coordinates
+     */
+    public Pnt extend (double[] coords) {
+        double[] result = new double[coordinates.length + coords.length];
+        System.arraycopy(coordinates, 0, result, 0, coordinates.length);
+        System.arraycopy(coords, 0, result, coordinates.length, coords.length);
+        return new Pnt(result);
+    }
+    
+    /**
+     * Dot product.
+     * @param p the other Pnt
+     * @return dot product of this Pnt and p
+     */
+    public double dot (Pnt p) {
+        int len = dimCheck(p);
+        double sum = 0;
+        for (int i = 0; i < len; i++)
+            sum += this.coordinates[i] * p.coordinates[i];
+        return sum;
+    }
+    
+    /**
+     * Magnitude (as a vector).
+     * @return the Euclidean length of this vector
+     */
+    public double magnitude () {
+        return Math.sqrt(this.dot(this));
+    }
+    
+    /**
+     * Subtract.
+     * @param p the other Pnt
+     * @return a new Pnt = this - p
+     */
+    public Pnt subtract (Pnt p) {
+        int len = dimCheck(p);
+        double[] coords = new double[len];
+        for (int i = 0; i < len; i++)
+            coords[i] = this.coordinates[i] - p.coordinates[i];
+        return new Pnt(coords);
+    }
+    
+    /**
+     * Add.
+     * @param p the other Pnt
+     * @return a new Pnt = this + p
+     */
+    public Pnt add (Pnt p) {
+        int len = dimCheck(p);
+        double[] coords = new double[len];
+        for (int i = 0; i < len; i++)
+            coords[i] = this.coordinates[i] + p.coordinates[i];
+        return new Pnt(coords);
+    }
+    
+    /**
+     * Angle (in radians) between two Pnts (treated as vectors).
+     * @param p the other Pnt
+     * @return the angle (in radians) between the two Pnts
+     */
+    public double angle (Pnt p) {
+        return Math.acos(this.dot(p) / (this.magnitude() * p.magnitude()));
+    }
+    
+    /**
+     * Perpendicular bisector of two Pnts.
+     * Works in any dimension.  The coefficients are returned as a Pnt of one
+     * higher dimension (e.g., (A,B,C,D) for an equation of the form
+     * Ax + By + Cz + D = 0).
+     * @param point the other point
+     * @return the coefficients of the perpendicular bisector
+     */
+    public Pnt bisector (Pnt point) {
+        int dim = dimCheck(point);
+        Pnt diff = this.subtract(point);
+        Pnt sum = this.add(point);
+        double dot = diff.dot(sum);
+        return diff.extend(new double[] {-dot / 2});
+    }
+    
+    /* Pnts as matrices */
+    
+    /**
+     * Create a String for a matrix.
+     * @param matrix the matrix (an array of Pnts)
+     * @return a String represenation of the matrix
+     */
+    public static String toString (Pnt[] matrix) {
+        StringBuffer buf = new StringBuffer("{");
+        for (int i = 0; i < matrix.length; i++) buf.append(" " + matrix[i]);
+        buf.append(" }");
+        return buf.toString();
+    }
+    
+    /**
+     * Compute the determinant of a matrix (array of Pnts).
+     * This is not an efficient implementation, but should be adequate 
+     * for low dimension.
+     * @param matrix the matrix as an array of Pnts
+     * @return the determinnant of the input matrix
+     * @throws IllegalArgumentException if dimensions are wrong
+     */
+    public static double determinant (Pnt[] matrix) {
+        if (matrix.length != matrix[0].dimension())
+            throw new IllegalArgumentException("Matrix is not square");
+        boolean[] columns = new boolean[matrix.length];
+        for (int i = 0; i < matrix.length; i++) columns[i] = true;
+        try {return determinant(matrix, 0, columns);}
+        catch (ArrayIndexOutOfBoundsException e) {
+            throw new IllegalArgumentException("Matrix is wrong shape");
+        }
+    }
+    
+    /**
+     * Compute the determinant of a submatrix specified by starting row
+     * and by "active" columns.
+     * @param matrix the matrix as an array of Pnts
+     * @param row the starting row
+     * @param columns a boolean array indicating the "active" columns
+     * @return the determinant of the specified submatrix
+     * @throws ArrayIndexOutOfBoundsException if dimensions are wrong
+     */
+    private static double determinant(Pnt[] matrix, int row, boolean[] columns) {
+        if (row == matrix.length) return 1;
+        double sum = 0;
+        int sign = 1;
+        for (int col = 0; col < columns.length; col++) {
+            if (!columns[col]) continue;
+            columns[col] = false;
+            sum += sign * matrix[row].coordinates[col] *
+                   determinant(matrix, row+1, columns);
+            columns[col] = true;
+            sign = -sign;
+        }
+        return sum;
+    }
+    
+    /**
+     * Compute generalized cross-product of the rows of a matrix.
+     * The result is a Pnt perpendicular (as a vector) to each row of
+     * the matrix.  This is not an efficient implementation, but should 
+     * be adequate for low dimension.
+     * @param matrix the matrix of Pnts (one less row than the Pnt dimension)
+     * @return a Pnt perpendicular to each row Pnt
+     * @throws IllegalArgumentException if matrix is wrong shape
+     */
+    public static Pnt cross (Pnt[] matrix) {
+        int len = matrix.length + 1;
+        if (len != matrix[0].dimension())
+            throw new IllegalArgumentException("Dimension mismatch");
+        boolean[] columns = new boolean[len];
+        for (int i = 0; i < len; i++) columns[i] = true;
+        double[] result = new double[len];
+        int sign = 1;
+        try {
+            for (int i = 0; i < len; i++) {
+                columns[i] = false;
+                result[i] = sign * determinant(matrix, 0, columns);
+                columns[i] = true;
+                sign = -sign;
+            }
+        } catch (ArrayIndexOutOfBoundsException e) {
+            throw new IllegalArgumentException("Matrix is wrong shape");
+        }
+        return new Pnt(result);
+    }
+    
+    /* Pnts as simplices */
+    
+    /**
+     * Determine the signed content (i.e., area or volume, etc.) of a simplex.
+     * @param simplex the simplex (as an array of Pnts)
+     * @return the signed content of the simplex
+     */
+    public static double content (Pnt[] simplex) {
+        Pnt[] matrix = new Pnt[simplex.length];
+        for (int i = 0; i < matrix.length; i++)
+            matrix[i] = simplex[i].extend(new double[] {1});
+        int fact = 1;
+        for (int i = 1; i < matrix.length; i++) fact = fact*i;
+        return determinant(matrix) / fact;
+    }
+    
+    /**
+     * Relation between this Pnt and a simplex (represented as an array of Pnts).
+     * Result is an array of signs, one for each vertex of the simplex, indicating
+     * the relation between the vertex, the vertex's opposite facet, and this
+     * Pnt. <pre>
+     *   -1 means Pnt is on same side of facet
+     *    0 means Pnt is on the facet
+     *   +1 means Pnt is on opposite side of facet</pre>
+     * @param simplex an array of Pnts representing a simplex
+     * @return an array of signs showing relation between this Pnt and the simplex
+     * @throws IllegalArgumentExcpetion if the simplex is degenerate
+     */
+    public int[] relation (Pnt[] simplex) {
+        /* In 2D, we compute the cross of this matrix:
+         *    1   1   1   1
+         *    p0  a0  b0  c0
+         *    p1  a1  b1  c1
+         * where (a, b, c) is the simplex and p is this Pnt.  The result
+         * is a vector in which the first coordinate is the signed area
+         * (all signed areas are off by the same constant factor) of
+         * the simplex and the remaining coordinates are the *negated*
+         * signed areas for the simplices in which p is substituted for
+         * each of the vertices. Analogous results occur in higher dimensions.
+         */
+        int dim = simplex.length - 1;
+        if (this.dimension() != dim)
+            throw new IllegalArgumentException("Dimension mismatch");
+        
+        /* Create and load the matrix */
+        Pnt[] matrix = new Pnt[dim+1];
+        /* First row */
+        double[] coords = new double[dim+2];
+        for (int j = 0; j < coords.length; j++) coords[j] = 1;
+        matrix[0] = new Pnt(coords);
+        /* Other rows */
+        for (int i = 0; i < dim; i++) {
+            coords[0] = this.coordinates[i];
+            for (int j = 0; j < simplex.length; j++) 
+                coords[j+1] = simplex[j].coordinates[i];
+            matrix[i+1] = new Pnt(coords);
+        }
+        
+        /* Compute and analyze the vector of areas/volumes/contents */
+        Pnt vector = cross(matrix);
+        double content = vector.coordinates[0];
+        int[] result = new int[dim+1];
+        for (int i = 0; i < result.length; i++) {
+            double value = vector.coordinates[i+1];
+            if (Math.abs(value) <= 1.0e-6 * Math.abs(content)) result[i] = 0;
+            else if (value < 0) result[i] = -1;
+            else result[i] = 1;
+        }
+        if (content < 0) {
+            for (int i = 0; i < result.length; i++) result[i] = -result[i];
+        }
+        if (content == 0) {
+            for (int i = 0; i < result.length; i++) result[i] = Math.abs(result[i]);
+        }
+        return result;
+    }
+    
+    /**
+     * Test if this Pnt is outside of simplex.
+     * @param simplex the simplex (an array of Pnts)
+     * @return the simplex Pnt that "witnesses" outsideness (or null if not outside)
+     */
+    public Pnt isOutside (Pnt[] simplex) {
+        int[] result = this.relation(simplex);
+        for (int i = 0; i < result.length; i++) {
+            if (result[i] > 0) return simplex[i];
+        }
+        return null;
+    }
+    
+    /**
+     * Test if this Pnt is on a simplex.
+     * @param simplex the simplex (an array of Pnts)
+     * @return the simplex Pnt that "witnesses" on-ness (or null if not on)
+     */
+    public Pnt isOn (Pnt[] simplex) {
+        int[] result = this.relation(simplex);
+        Pnt witness = null;
+        for (int i = 0; i < result.length; i++) {
+            if (result[i] == 0) witness = simplex[i];
+            else if (result[i] > 0) return null;
+        }
+        return witness;
+    }
+    
+    /**
+     * Test if this Pnt is inside a simplex.
+     * @param simplex the simplex (an arary of Pnts)
+     * @return true iff this Pnt is inside simplex.
+     */
+    public boolean isInside (Pnt[] simplex) {
+        int[] result = this.relation(simplex);
+        for (int i = 0; i < result.length; i++) if (result[i] >= 0) return false;
+        return true;
+    }
+    
+    /**
+     * Test relation between this Pnt and circumcircle of a simplex.
+     * @param simplex the simplex (as an array of Pnts)
+     * @return -1, 0, or +1 for inside, on, or outside of circumcircle
+     */
+    public int vsCircumcircle (Pnt[] simplex) {
+        Pnt[] matrix = new Pnt[simplex.length + 1];
+        for (int i = 0; i < simplex.length; i++)
+            matrix[i] = simplex[i].extend(new double[] {1, simplex[i].dot(simplex[i])});
+        matrix[simplex.length] = this.extend(new double[] {1, this.dot(this)});
+        double d = determinant(matrix);
+        int result = (d < 0)? -1 : ((d > 0)? +1 : 0);
+        if (content(simplex) < 0) result = - result;
+        return result;
+    }
+    
+    /**
+     * Circumcenter of a simplex.
+     * @param simplex the simplex (as an array of Pnts)
+     * @return the circumcenter (a Pnt) of simplex
+     */
+    public static Pnt circumcenter (Pnt[] simplex) {
+        int dim = simplex[0].dimension();
+        if (simplex.length - 1 != dim)
+            throw new IllegalArgumentException("Dimension mismatch");
+        Pnt[] matrix = new Pnt[dim];
+        for (int i = 0; i < dim; i++) 
+            matrix[i] = simplex[i].bisector(simplex[i+1]);
+        Pnt hCenter = cross(matrix);      // Center in homogeneous coordinates
+        double last = hCenter.coordinates[dim];
+        double[] result = new double[dim];
+        for (int i = 0; i < dim; i++) result[i] = hCenter.coordinates[i] / last;
+        return new Pnt(result);
+    }
+     
+    /**
+     * Main program (used for testing).
+     */
+    public static void main (String[] args) {
+        Pnt p = new Pnt(1, 2, 3);
+        System.out.println("Pnt created: " + p);
+        Pnt[] matrix1 = {new Pnt(1,2), new Pnt(3,4)};
+        Pnt[] matrix2 = {new Pnt(7,0,5), new Pnt(2,4,6), new Pnt(3,8,1)};
+        System.out.print("Results should be -2 and -288: ");
+        System.out.println(determinant(matrix1) + " " + determinant(matrix2));
+        Pnt p1 = new Pnt(1,1); Pnt p2 = new Pnt(-1,1);
+        System.out.println("Angle between " + p1 + " and " + p2 + ": " + p1.angle(p2));
+        System.out.println(p1 + " subtract " + p2 + ": " + p1.subtract(p2));
+        Pnt v0 = new Pnt(0,0), v1 = new Pnt(1,1), v2 = new Pnt(2,2);
+        Pnt[] vs = {v0, new Pnt(0,1), new Pnt(1,0)};
+        Pnt vp = new Pnt(.1, .1);
+        System.out.println(vp + " isInside " + toString(vs) + ": " + vp.isInside(vs));
+        System.out.println(v1 + " isInside " + toString(vs) + ": " + v1.isInside(vs));
+        System.out.println(vp + " vsCircumcircle " + toString(vs) + ": " +
+                           vp.vsCircumcircle(vs));
+        System.out.println(v1 + " vsCircumcircle " + toString(vs) + ": " +
+                           v1.vsCircumcircle(vs));
+        System.out.println(v2 + " vsCircumcircle " + toString(vs) + ": " +
+                           v2.vsCircumcircle(vs));
+        System.out.println("Circumcenter of " + toString(vs) + " is " + circumcenter(vs));
+    }
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Pnt.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Simplex.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Simplex.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Simplex.java	(revision 30230)
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2005 by L. Paul Chew.
+ * 
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, subject to the following 
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be included 
+ * in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ * DEALINGS IN THE SOFTWARE.
+ */
+package com.iver.cit.gvsig.topology.triangulation;
+
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * A Simplex is an immutable set of vertices (usually Pnts).
+ * 
+ * @author Paul Chew
+ * 
+ * Created July 2005. Derived from an earlier, messier version.
+ */
+public class Simplex extends AbstractSet implements Set {
+    
+    private List vertices;                  // The simplex's vertices
+    private long idNumber;                  // The id number
+    private static long idGenerator = 0;    // Used to create id numbers
+    public static boolean moreInfo = false; // True iff more info in toString
+    
+    /**
+     * Constructor.
+     * @param collection a Collection holding the Simplex vertices
+     * @throws IllegalArgumentException if there are duplicate vertices
+     */
+    public Simplex (Collection collection) {
+        this.vertices = Collections.unmodifiableList(new ArrayList(collection));
+        this.idNumber = idGenerator++;
+        Set noDups = new HashSet(this);
+        if (noDups.size() != this.vertices.size())
+            throw new IllegalArgumentException("Duplicate vertices in Simplex");
+    }
+    
+    /**
+     * Constructor.
+     * @param vertices the vertices of the Simplex.
+     * @throws IllegalArgumentException if there are duplicate vertices
+     */
+    public Simplex (Object[] vertices) {
+        this(Arrays.asList(vertices));
+    }
+    
+    /**
+     * String representation.
+     * @return the String representation of this Simplex
+     */
+    public String toString () {
+        if (!moreInfo) return "Simplex" + idNumber;
+        return "Simplex" + idNumber + super.toString();
+    }
+    
+    /**
+     * Dimension of the Simplex.
+     * @return dimension of Simplex (one less than number of vertices)
+     */
+    public int dimension () {
+        return this.vertices.size() - 1;
+    }
+    
+    /**
+     * True iff simplices are neighbors.
+     * Two simplices are neighbors if they are the same dimension and they share
+     * a facet.
+     * @param simplex the other Simplex
+     * @return true iff this Simplex is a neighbor of simplex
+     */
+    public boolean isNeighbor (Simplex simplex) {
+        HashSet h = new HashSet(this);
+        h.removeAll(simplex);
+        return (this.size() == simplex.size()) && (h.size() == 1);
+    }
+    
+    /**
+     * Report the facets of this Simplex.
+     * Each facet is a set of vertices.
+     * @return an Iterable for the facets of this Simplex
+     */
+    public List facets () {
+        List theFacets = new LinkedList();
+        for (Iterator it = this.iterator(); it.hasNext();) {
+            Object v = it.next();
+            Set facet = new HashSet(this);
+            facet.remove(v);
+            theFacets.add(facet);
+        }
+        return theFacets;
+    }
+    
+    /**
+     * Report the boundary of a Set of Simplices.
+     * The boundary is a Set of facets where each facet is a Set of vertices.
+     * @return an Iterator for the facets that make up the boundary
+     */
+    public static Set boundary (Set simplexSet) {
+        Set theBoundary = new HashSet();
+        for (Iterator it = simplexSet.iterator(); it.hasNext();) {
+            Simplex simplex = (Simplex) it.next();
+            for (Iterator otherIt = simplex.facets().iterator(); otherIt.hasNext();) {
+                Set facet = (Set) otherIt.next();
+                if (theBoundary.contains(facet)) theBoundary.remove(facet);
+                else theBoundary.add(facet);
+            }
+        }
+        return theBoundary;
+    }
+    
+    /* Remaining methods are those required by AbstractSet */
+    
+    /**
+     * @return Iterator for Simplex's vertices.
+     */
+    public Iterator iterator () {
+        return this.vertices.iterator();
+    }
+    
+    /**
+     * @return the size (# of vertices) of this Simplex
+     */
+    public int size () {
+        return this.vertices.size();
+    }
+    
+    /**
+     * @return the hashCode of this Simplex
+     */
+    public int hashCode () {
+        return (int)(idNumber^(idNumber>>>32));
+    }
+    
+    /**
+     * We want to allow for different simplices that share the same vertex set.
+     * @return true for equal Simplices
+     */
+    public boolean equals (Object o) {
+        return (this == o);
+    }
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/Simplex.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/DelaunayTriangulation.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/DelaunayTriangulation.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/DelaunayTriangulation.java	(revision 30230)
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2005 by L. Paul Chew.
+ * 
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, subject to the following 
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be included 
+ * in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ * DEALINGS IN THE SOFTWARE.
+ */
+package com.iver.cit.gvsig.topology.triangulation;
+
+import java.awt.geom.Point2D;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+/**
+ * A 2D Delaunay Triangulation (DT) with incremental site insertion.
+ * This is not the fastest way to build a DT, but it's a reasonable way
+ * to build the DT incrementally and it makes a nice interactive display.
+ * There are several O(n log n) methods, but they require that either (1) 
+ * the sites are all known initially or (2) the sites are inserted in random
+ * order.
+ * 
+ * @author Paul Chew
+ * 
+ * Created July 2005.  Derived from an earlier, messier version.
+ */
+public class DelaunayTriangulation extends Triangulation {
+    
+    private Simplex mostRecent = null;       // Most recently inserted triangle
+    public boolean debug = false;            // Used for debugging
+    private static double initialSize = Double.MAX_VALUE / 2.0;
+//    private static Simplex initialTriangle = new Simplex(new Pnt[] {new Pnt(-10,10), new Pnt(10,10), new Pnt(0,-10)});
+    private static Simplex initialTriangle = new Simplex(new Pnt[] {
+            new Pnt(-initialSize, initialSize),
+            new Pnt( initialSize, initialSize),
+            new Pnt(           0,  -initialSize)});
+    
+    
+    
+    /**
+     * Constructor.
+     * All sites must fall within the initial triangle.
+     * @param triangle the initial triangle
+     */
+    public DelaunayTriangulation (Simplex triangle) {
+        super(triangle);
+        mostRecent = triangle;
+    }
+
+    public DelaunayTriangulation()
+    {
+    	super(initialTriangle);
+    	mostRecent = initialTriangle;
+    }
+
+    /**
+     * Locate the triangle with point (a Pnt) inside (or on) it.
+     * @param point the Pnt to locate
+     * @return triangle (Simplex<Pnt>) that holds the point; null if no such triangle
+     */
+    public Simplex locate (Pnt point) {
+        Simplex triangle = mostRecent;
+        if (!this.contains(triangle)) triangle = null;
+        
+        // Try a directed walk (this works fine in 2D, but can fail in 3D)
+        Set visited = new HashSet();
+        while (triangle != null) {
+            if (visited.contains(triangle)) { // This should never happen
+                System.out.println("Warning: Caught in a locate loop");
+                break;
+            }
+            visited.add(triangle);
+            // Corner opposite point
+            Pnt corner = point.isOutside((Pnt[]) triangle.toArray(new Pnt[0]));
+            if (corner == null) return triangle;
+            triangle = this.neighborOpposite(corner, triangle);
+        }
+        // No luck; try brute force
+        System.out.println("Warning: Checking all triangles for " + point);
+        for (Iterator it = this.iterator(); it.hasNext();) {
+            Simplex tri = (Simplex) it.next();
+            if (point.isOutside((Pnt[])tri.toArray(new Pnt[0])) == null) return tri;
+        }
+        // No such triangle
+        System.out.println("Warning: No triangle holds " + point);
+        return null;
+    }
+    
+    /**
+     * Place a new point site into the DT.
+     * @param site the new Pnt
+     * @return set of all new triangles created
+     */
+    public Set delaunayPlace (Pnt site) {
+        Set newTriangles = new HashSet();
+        Set oldTriangles = new HashSet();
+        Set doneSet = new HashSet();
+        LinkedList waitingQ = new LinkedList();
+        
+        // Locate containing triangle
+        if (debug) System.out.println("Locate");
+        Simplex triangle = locate(site);
+        
+        // Give up if no containing triangle or if site is already in DT
+        if (triangle == null || triangle.contains(site)) return newTriangles;
+        
+        // Find Delaunay cavity (those triangles with site in their circumcircles)
+        if (debug) System.out.println("Cavity");
+        waitingQ.add(triangle);
+        while (!waitingQ.isEmpty()) {
+            triangle = (Simplex) waitingQ.removeFirst();      
+            if (site.vsCircumcircle((Pnt[]) triangle.toArray(new Pnt[0])) == 1) continue;
+            oldTriangles.add(triangle);
+            Iterator it = this.neighbors(triangle).iterator();
+            for (; it.hasNext();) {
+                Simplex tri = (Simplex) it.next();
+                if (doneSet.contains(tri)) continue;
+                doneSet.add(tri);
+                waitingQ.add(tri);
+            }
+        }
+        // Create the new triangles
+        if (debug) System.out.println("Create");
+        for (Iterator it = Simplex.boundary(oldTriangles).iterator(); it.hasNext();) {
+            Set facet = (Set) it.next();
+            facet.add(site);
+            newTriangles.add(new Simplex(facet));
+        }
+        // Replace old triangles with new triangles
+        if (debug) System.out.println("Update");
+        this.update(oldTriangles, newTriangles);
+        
+        // Update mostRecent triangle
+        if (!newTriangles.isEmpty()) mostRecent = (Simplex) newTriangles.iterator().next();
+        return newTriangles;
+    }
+    
+    /**
+     * Main program; used for testing.
+     */
+    public static void main (String[] args) {
+//        Simplex tri = new Simplex(new Pnt[] {new Pnt(-10,10), new Pnt(10,10), new Pnt(0,-10)});
+//        System.out.println("Triangle created: " + tri);
+//        DelaunayTriangulation dt = new DelaunayTriangulation(tri);
+    	DelaunayTriangulation dt = new DelaunayTriangulation();
+        System.out.println("DelaunayTriangulation created: " + dt);
+        dt.delaunayPlace(new Pnt(0,0));
+        dt.delaunayPlace(new Pnt(1,0));
+        dt.delaunayPlace(new Pnt(0,1));
+        System.out.println("After adding 3 points, the DelaunayTriangulation is a " + dt);
+        dt.printStuff();
+    }
+    
+    public void delaunayPlace(Point2D p)
+    {
+    	Pnt aux = new Pnt(p.getX(), p.getY());
+    	delaunayPlace(aux);
+    }
+
+	public void delaunayPlace(Coordinate c) {
+    	Pnt aux = new Pnt(c.x, c.y);
+    	delaunayPlace(aux);		
+	}
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/topology/triangulation/DelaunayTriangulation.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java	(revision 30230)
@@ -0,0 +1,172 @@
+/*
+ * Created on 09-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.2  2006-11-13 20:41:08  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/11/09 21:08:32  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.util;
+
+import java.util.Comparator;
+import java.util.Hashtable;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geomgraph.Node;
+
+public class SnappingCoordinateMap extends Hashtable {
+	class SnapCoordinate extends Coordinate {
+		public SnapCoordinate(Coordinate arg0) {
+			super(arg0);
+		}
+
+		public boolean equals(Object obj) {
+			if(! (obj instanceof SnapCoordinate))
+				return false;
+			SnapCoordinate other = (SnapCoordinate) obj;
+			return other.distance(this) <= snapTolerance;
+		}
+
+		public int hashCode() {
+			 int result = 17;
+			 double xs = simplify(x);
+			 double ys = simplify(y);
+			 result = 37 * result + hashCode(xs);
+			 result = 37 * result + hashCode(ys);
+			 return result;
+				
+//			return 1; // esto no es eficiente
+		}
+		
+		public double simplify(double coordinate){
+			if(scaleFactor == 0d)
+				return coordinate;
+			return Math.round(coordinate * scaleFactor) / scaleFactor;
+		}
+	}
+	
+	
+
+	private double snapTolerance;
+	private double scaleFactor;
+
+	public SnappingCoordinateMap(double snapTolerance) {
+		super();
+		this.snapTolerance = snapTolerance;
+		if(snapTolerance != 0d)
+			this.scaleFactor = 1d / snapTolerance;
+	}
+
+	class MinDistCoordComparator implements Comparator {
+		Coordinate coord;
+
+		MinDistCoordComparator(Coordinate coord) {
+			this.coord = coord;
+		}
+
+		public int compare(Object arg0, Object arg1) {
+			Coordinate c1 = ((Node) arg0).getCoordinate();
+			Coordinate c2 = ((Node) arg1).getCoordinate();
+
+			double d1 = c1.distance(coord);
+			double d2 = c2.distance(coord);
+
+			if (d1 < d2)
+				return 1;
+			if (d1 > d2)
+				return -1;
+			else
+				return 0;
+		}
+	}
+	
+	
+	public Object put(Object key, Object obj){
+		if(! (key instanceof Coordinate) )
+			return null;
+		return super.put(new SnapCoordinate((Coordinate)key),
+				obj);
+	}
+	
+	public Object get(Object key){
+		if(! (key instanceof Coordinate) )
+			return null;
+		return super.get(new SnapCoordinate((Coordinate)key));
+	}
+	
+	public boolean containsKey(Object key){
+		if(! (key instanceof Coordinate) )
+			return false;
+		return super.containsKey(new SnapCoordinate((Coordinate)key));
+	}
+	
+	public static void main(String[] args){
+		SnappingCoordinateMap map = 
+			new SnappingCoordinateMap(0.1);
+		Coordinate c0 = new Coordinate(0, 0);
+		Coordinate c1 = new Coordinate(0.01, 0.01);
+		Coordinate c2 = new Coordinate(0.31, 0.41);
+		Coordinate c3 = new Coordinate(0.29, 0.39);
+		Coordinate c4 = new Coordinate(0.299, 0.411);
+		map.put(c0, c0);
+		map.put(c1, c1);
+		map.put(c2, c2);
+		map.put(c3, c3);
+		map.put(c4, c4);
+		System.out.println(map.size());
+		java.util.Set values = map.entrySet();
+		System.out.println(values.size());
+		
+		
+		
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/GvSession.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/GvSession.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/GvSession.java	(revision 30230)
@@ -0,0 +1,108 @@
+/*
+ * Created on 06-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-11-09 13:30:40  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/11/07 19:50:54  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.util;
+
+import java.util.Map;
+
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.vividsolutions.jump.util.Blackboard;
+
+
+/**
+ * 
+ * Prototype of user's session.
+ * 
+ * This class will save information of the
+ * user session, to recover later.
+ * 
+ * The key of the session will be the Andami's view
+ * (to allows a user to save different user sessions
+ * for different views)
+ * */
+
+public class GvSession {
+	private final static GvSession session = new GvSession();
+	
+	Blackboard blackboard = new Blackboard();
+	
+	private GvSession(){}
+	
+	public static GvSession getInstance(){
+		return session;
+	}
+	
+	public void put(MapControl map, String key, Object sessionObject){
+		String gKey = map.toString() + ":" + key;
+		blackboard.put(gKey, sessionObject );
+	}
+	
+	public Object get(MapControl map, String key){
+		return blackboard.get(map.toString() + ":" + key);
+	}
+	
+	public void delete(MapControl map, String key){
+		Map props = blackboard.getProperties();
+		String newKey = map.toString()+":"+key;
+		if(props.containsKey(newKey))
+		{
+			props.remove(newKey);
+		}
+		
+	}
+	
+	
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/util/GvSession.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/package.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/package.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/package.html	(revision 30230)
@@ -0,0 +1 @@
+este package debe de estar en appgvSIG
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelector.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelector.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelector.java	(revision 30230)
@@ -0,0 +1,632 @@
+/*
+ * Created on 26-abr-2005
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileWriter;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.ListCellRenderer;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+
+import org.exolab.castor.xml.Marshaller;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.gui.panels.ColorChooserPanel;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+import de.ios.framework.swing.JDecimalField;
+import de.ios.framework.swing.JNumberField;
+
+/**
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SymbolSelector extends JPanel implements IWindow{
+
+    private JTree treeFamilies = null;
+    private JList jListSymbols = null;
+    private JPanel jPanel = null;
+    private JScrollPane jScrollPane = null;
+    private JScrollPane jScrollPane1 = null;
+    private SymbolPreview jPanelPreview = null;
+    private GridBagLayoutPanel jPanelOptions = null;
+	private WindowInfo wi;
+	private JSplitPane jSplitPane = null;
+	private File symbolDir;
+	private AcceptCancelPanel okCancelPanel;
+	private ISymbol selectedSymbol = null;
+	private JPanel northPanel;
+	private ColorChooserPanel jcc1;
+	private ColorChooserPanel jcc2;
+	private JNumberField txtSize;
+	private JDecimalField txtAngle;
+	private JPanel jPanelButtons;
+	private JButton btnProperties;
+	private int shapeType;
+	private JButton btnSaveSymbol;
+	private JButton btnResetSymbol;
+	private ActionListener buttonListener = new MyButtonListener();
+    /**
+     * This method initializes
+     *
+     */
+    public SymbolSelector(ISymbol symbol, int shapeType) {
+    	super();
+    	this.selectedSymbol = symbol;
+    	this.shapeType = shapeType;
+    	this.symbolDir = new File(getClass().
+  				getClassLoader().
+  				getResource("symbols").
+  				getFile());
+    	initialize();
+    }
+
+    /**
+     * This method initializes
+     *
+     */
+    public SymbolSelector(ISymbol symbol, int shapeType, File symbolDir) {
+    	super();
+    	this.selectedSymbol = symbol;
+    	this.shapeType = shapeType;
+    	this.symbolDir = symbolDir;
+    	initialize();
+    }
+    /**
+     * This method initializes this
+     *
+     */
+    private void initialize() {
+
+        this.setLayout(new BorderLayout());
+        this.setSize(400, 221);
+
+        this.add(getJNorthPanel(), BorderLayout.NORTH);
+        this.add(getJSplitPane(), BorderLayout.CENTER);
+        this.add(getJEastPanel(), BorderLayout.EAST);
+        ActionListener okAction = new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			PluginServices.getMDIManager().closeWindow(SymbolSelector.this);
+    		}
+    	}, cancelAction = new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			setSymbol(null);
+    			PluginServices.getMDIManager().closeWindow(SymbolSelector.this);
+    		}
+    	};
+
+        okCancelPanel = new AcceptCancelPanel(okAction, cancelAction);
+
+
+        this.add(okCancelPanel, BorderLayout.SOUTH);
+    }
+
+    private JPanel getJNorthPanel() throws IllegalArgumentException {
+		if (northPanel == null) {
+			String text = "";
+			switch (shapeType) {
+			case FShape.POINT:
+				text = PluginServices.getText(this, "point_symbols");
+				break;
+			case FShape.LINE:
+				text = PluginServices.getText(this, "line_symbols");
+				break;
+			case FShape.POLYGON:
+				text = PluginServices.getText(this, "polygon_symbols");
+				break;
+			default:
+				throw new IllegalArgumentException(PluginServices.getText(this, "shape_type_not_yet_supported"));
+			}
+			northPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			JLabel lbl = new JLabel(text);
+			lbl.setFont(lbl.getFont().deriveFont(Font.BOLD));
+			northPanel.add(lbl);
+		}
+		return northPanel;
+	}
+
+	/**
+     * This method initializes jList
+     *
+     * @return javax.swing.JList
+     */
+    private JTree getJListFav() {
+    	if (treeFamilies == null) {
+    		treeFamilies = new JTree();
+    		treeFamilies.setPreferredSize(new java.awt.Dimension(70,100));
+    		try {
+    			treeFamilies.setModel(new TreeModel() {
+    				final class MyFile extends File {
+    					public MyFile(String pathname) {
+    						super(pathname);
+    					}
+
+    					public String toString() {
+    						if (this.equals(root))
+    							return PluginServices.getText(this, "symbol_library");
+    						String path = getAbsolutePath();
+    						String prefixToRemove = symbolDir.getAbsolutePath();
+    						path = path.substring(prefixToRemove.length()+1, path.length());
+    						return path;
+    					}
+    				};
+    				MyFile root = new MyFile(symbolDir.getAbsolutePath());
+
+    				private FileFilter ff = new FileFilter() {
+    					public boolean accept(File pathname) {
+    						return pathname.isDirectory();
+    					}
+    				};
+
+    				public Object getRoot() {
+    					return root;
+    				}
+
+    				public int getChildCount(Object parent) {
+    					return ((File) parent).listFiles(ff).length;
+    				}
+
+    				public boolean isLeaf(Object node) {
+    					return getChildCount(node)==0;
+    				}
+
+    				public void addTreeModelListener(TreeModelListener l) {
+    					// TODO Necessite?
+
+    				}
+
+    				public void removeTreeModelListener(TreeModelListener l) {
+    					// TODO Auto-generated method stub
+
+    				}
+
+    				public Object getChild(Object parent, int index) {
+    					return new MyFile(((File) parent).listFiles(ff)[index].getAbsolutePath());
+    				}
+
+    				public int getIndexOfChild(Object parent, Object child) {
+    					if (parent == null)
+    						return -1;
+    					File[] files = ((File) parent).listFiles(ff);
+    					for (int i = 0; i < files.length; i++) {
+    						if (files[i].equals((File) child))
+    							return i;
+    					}
+    					return -1;
+    				}
+
+    				public void valueForPathChanged(TreePath path, Object newValue) {
+    					// TODO Auto-generated method stub
+    				}
+
+    			});
+    			treeFamilies.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
+					public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
+						 File node = (File)
+	                       treeFamilies.getLastSelectedPathComponent();
+
+						 	if (node == null) return;
+						 	jListSymbols.setModel(
+					          		new SymbolSelectorListModel(node));
+					}
+				});
+    		} catch ( ExceptionInInitializerError ex ) {
+    			JOptionPane.showMessageDialog(this, PluginServices.getText(this, "could_not_find_symbol_directory"));
+    		}
+    	}
+    	return treeFamilies;
+    }
+
+    /**
+     * This method initializes jList
+     *
+     * @return javax.swing.JList
+     */
+    private JList getJListSymbols() {
+    	if (jListSymbols == null) {
+    		jListSymbols = new JList();
+    		jListSymbols.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+            jListSymbols.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+            jListSymbols.setVisibleRowCount(-1);
+            jListSymbols.addListSelectionListener(new ListSelectionListener() {
+            	public void valueChanged(ListSelectionEvent e) {
+            		setSymbol((ISymbol) jListSymbols.getSelectedValue());
+            		updateOptionsPanel();
+            	}
+            });
+            ListCellRenderer renderer = new ListCellRenderer() {
+        		private Color mySelectedBGColor = new Color(255,145,100,255);
+    			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+    				ISymbol sym = (ISymbol) value;
+    				JPanel pnl = new JPanel();
+    				BoxLayout layout = new BoxLayout(pnl, BoxLayout.Y_AXIS);
+    				pnl.setLayout(layout);
+    				Color bgColor = (isSelected) ? mySelectedBGColor
+    							 : getJListSymbols().getBackground();
+
+    				pnl.setBackground(bgColor);
+    				SymbolPreview sp = new SymbolPreview();
+    				sp.setAlignmentX(Component.CENTER_ALIGNMENT);
+    				sp.setPreferredSize(new Dimension(50, 50));
+    				sp.setSymbol(sym);
+    				sp.setBackground(bgColor);
+    				pnl.add(sp);
+    				JLabel lbl = new JLabel(sym.getDescription());
+    				lbl.setBackground(bgColor);
+    				lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
+    				pnl.add(lbl);
+
+    				return pnl;
+    			}
+
+        	};
+        	jListSymbols.setCellRenderer(renderer);
+    	}
+    	return jListSymbols;
+    }
+
+    protected void updateOptionsPanel() {
+    	ISymbol sym = ((ISymbol) jListSymbols.getSelectedValue());
+    	if (sym == null)
+    		return;
+
+		XMLEntity xml = sym.getXMLEntity();
+
+		Color c = null;
+    	if (xml.contains("color")) {
+    		c = StringUtilities.string2Color(xml.getStringProperty("color"));
+    	}
+		jcc1.setColor(c);
+
+		if (jcc2 == null)
+			return;
+		if (xml.contains("outline")) {
+    		c = StringUtilities.string2Color(xml.getStringProperty("outline"));
+    		jcc2.setEnabled(true);
+    		jcc2.setColor(c);
+    	} else {
+    		jcc2.setEnabled(false);
+    	}
+
+
+	}
+
+	/**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJEastPanel() {
+    	if (jPanel == null) {
+    		jPanel = new JPanel();
+    		jPanel.setLayout(new BorderLayout());
+    		jPanel.add(getJPanelOptions(), BorderLayout.CENTER);
+    		JPanel aux = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+    		aux.setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "preview")));
+    		aux.add(getJPanelPreview());
+    		jPanel.add(aux, BorderLayout.NORTH);
+
+    		aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+    		aux.setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "options")));
+    		aux.add(getJPanelOptions());
+    		jPanel.add(aux, BorderLayout.CENTER);
+    		aux = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
+    		aux.add(getJPanelButtons());
+    		jPanel.add(aux, BorderLayout.SOUTH);
+    	}
+    	return jPanel;
+    }
+
+    private JPanel getJPanelButtons() {
+		if (jPanelButtons == null) {
+			jPanelButtons = new JPanel();
+			GridLayout layout = new GridLayout();
+			layout.setColumns(1);
+			layout.setVgap(5);
+			jPanelButtons.add(getBtnSaveSymbol());
+			jPanelButtons.add(getBtnResetSymbol());
+			jPanelButtons.add(getBtnProperties());
+
+			// do not add components bellow this line!
+			layout.setRows(jPanelButtons.getComponentCount());
+			jPanelButtons.setLayout(layout);
+		}
+		return jPanelButtons;
+	}
+
+	private JButton getBtnResetSymbol() {
+		if (btnResetSymbol == null) {
+			btnResetSymbol = new JButton();
+			btnResetSymbol.setName("btnResetSymbol");
+			btnResetSymbol.setText(PluginServices.getText(this, "reset"));
+			btnResetSymbol.addActionListener(buttonListener);
+		}
+		return btnResetSymbol;
+	}
+
+	private JButton getBtnSaveSymbol() {
+		if (btnSaveSymbol == null) {
+			btnSaveSymbol = new JButton();
+			btnSaveSymbol.setName("btnSaveSymbol");
+			btnSaveSymbol.setText(PluginServices.getText(this, "save"));
+			btnSaveSymbol.addActionListener(buttonListener);
+		}
+		return btnSaveSymbol;
+	}
+
+	private JButton getBtnProperties() {
+		if (btnProperties == null) {
+			btnProperties = new JButton();
+			btnProperties.setName("btnProperties");
+			btnProperties.setText(PluginServices.getText(this, "properties"));
+			btnProperties.addActionListener(buttonListener);
+		}
+		return btnProperties;
+	}
+
+	/**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+    	if (jScrollPane == null) {
+    		jScrollPane = new JScrollPane();
+    		jScrollPane.setPreferredSize(new java.awt.Dimension(80,130));
+    		jScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    		jScrollPane.setViewportView(getJListFav());
+    	}
+    	return jScrollPane;
+    }
+
+    /**
+     * This method initializes jScrollPane1
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane1() {
+    	if (jScrollPane1 == null) {
+    		jScrollPane1 = new JScrollPane();
+    		jScrollPane1.setViewportView(getJListSymbols());
+    	}
+    	return jScrollPane1;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private SymbolPreview getJPanelPreview() {
+    	if (jPanelPreview == null) {
+    		jPanelPreview = new SymbolPreview();
+    		jPanelPreview.setPreferredSize(new java.awt.Dimension(100,100));
+    		jPanelPreview.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+    	}
+    	return jPanelPreview;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanelOptions() {
+    	if (jPanelOptions == null) {
+    		jPanelOptions = new GridBagLayoutPanel();
+
+    		jcc1 = new ColorChooserPanel();
+    		jcc2 = new ColorChooserPanel();
+    		jcc1.setAlpha(255);
+    		jcc2.setAlpha(255);
+    		jcc1.addActionListener(buttonListener);
+    		jcc2.addActionListener(buttonListener);
+    		if (shapeType == FShape.POINT) {
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "color")+":", jcc1);
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "size")+":",
+    					txtSize = new JNumberField());
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "angle")+":",
+    					txtAngle = new JDecimalField());
+    		} else if (shapeType == FShape.LINE) {
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "color")+":", jcc1);
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "width")+":",
+    					txtSize = new JNumberField());
+    			jPanelOptions.addComponent(new JLabel("AQUI VA EL COMBO DE PATTERN DE LINEA"));
+    		} else if (shapeType == FShape.POLYGON) {
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "fill_color")+":", jcc1);
+    			jPanelOptions.addComponent(
+    					PluginServices.getText(this, "outline_color")+":", jcc2);
+    			jPanelOptions.addComponent(
+    					new JLabel("AQUI VA EL ANCHO DEL CONTORNO"));
+    		}
+    	}
+    	return jPanelOptions;
+    }
+
+	public WindowInfo getWindowInfo() {
+		if (wi == null) {
+			wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+			wi.setWidth(706);
+			wi.setHeight(500);
+			wi.setTitle(PluginServices.getText(this, "symbol_selector"));
+		}
+		return wi;
+	}
+
+	/**
+	 * This method initializes jSplitPane
+	 *
+	 * @return javax.swing.JSplitPane
+	 */
+	private JSplitPane getJSplitPane() {
+		if (jSplitPane == null) {
+			jSplitPane = new JSplitPane();
+			jSplitPane.setDividerLocation(200);
+			jSplitPane.setResizeWeight(0.4);
+	        jSplitPane.setLeftComponent(getJScrollPane());
+	        jSplitPane.setRightComponent(getJScrollPane1());
+		}
+		return jSplitPane;
+	}
+
+	/**
+	 * Returns the symbol selected by the user or null if none
+	 * @return
+	 */
+	public ISymbol getSymbol() {
+		return selectedSymbol;
+	}
+
+	private void setSymbol(ISymbol symbol) {
+		selectedSymbol = symbol;
+		jPanelPreview.setSymbol(symbol);
+	}
+
+
+	private class MyButtonListener implements ActionListener {
+		public void actionPerformed(ActionEvent e) {
+			if (selectedSymbol ==null)
+				return;
+
+			JComponent comp = (JComponent) e.getSource();
+			XMLEntity xml = selectedSymbol.getXMLEntity();
+
+			if ( comp.equals(getBtnProperties()) ) {
+				// properties pressed
+				SymbolEditor se = new SymbolEditor(selectedSymbol, shapeType);
+				PluginServices.getMDIManager().addWindow(se);
+				setSymbol(se.getSymbol());
+			} else if ( comp.equals(getBtnResetSymbol()) ) {
+				// reset pressed
+				setSymbol(null);
+			} else if ( comp.equals(getBtnSaveSymbol()) ) {
+				// save pressed
+				JFileChooser jfc = new JFileChooser(SymbolSelectorListModel.SYMBOL_DIRECTORY);
+				javax.swing.filechooser.FileFilter ff = new javax.swing.filechooser.FileFilter() {
+					public boolean accept(File f) {
+						return f.getAbsolutePath().
+						toLowerCase().
+						endsWith(SymbolSelectorListModel.
+								SYMBOL_FILE_EXTENSION);
+					}
+
+					public String getDescription() {
+						return PluginServices.getText(
+								this, "gvSIG_symbol_definition_file")+ " (*.sym)";
+					}
+				};
+				jfc.setFileFilter(ff);
+				if (jfc.showSaveDialog(SymbolSelector.this) == JFileChooser.APPROVE_OPTION) {
+					File targetFile = jfc.getSelectedFile();
+					String fExtension = SymbolSelectorListModel.SYMBOL_FILE_EXTENSION;
+					if (!targetFile.
+							getAbsolutePath().
+							toLowerCase().
+							endsWith(fExtension))
+						targetFile = new File(targetFile.getAbsolutePath() + fExtension);
+					FileWriter writer;
+					try {
+						writer = new FileWriter(targetFile.getAbsolutePath());
+						Marshaller m = new Marshaller(writer);
+						m.setEncoding("ISO-8859-1");
+						m.marshal(xml.getXmlTag());
+
+					} catch (Exception ex) {
+						NotificationManager.addError(
+								PluginServices.getText(this, "save_error"), ex);
+					}
+				}
+			} else if (comp.equals(jcc1) && xml != null) {
+				xml.putProperty("color", StringUtilities.color2String(jcc1.getColor()));
+				selectedSymbol.setXMLEntity(xml);
+				setSymbol(selectedSymbol);
+			} else if (comp.equals(jcc2) && xml != null) {
+				xml.putProperty("outline", StringUtilities.color2String(jcc2.getColor()));
+				selectedSymbol.setXMLEntity(xml);
+				setSymbol(selectedSymbol);
+			}
+
+			SymbolSelector.this.repaint();
+		}
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelector.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolPreview.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolPreview.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolPreview.java	(revision 30230)
@@ -0,0 +1,131 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.7  2006-10-30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/10/29 23:53:49  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/10/29 21:45:12  jaume
+* centers in x the "none selected message"
+*
+* Revision 1.4  2006/10/29 21:43:34  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/29 21:40:29  jaume
+* centers in x the "none selected message"
+*
+* Revision 1.2  2006/10/26 07:46:58  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/25 10:50:41  jaume
+* movement of classes and gui stuff
+*
+* Revision 1.2  2006/10/24 19:54:55  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/24 16:31:12  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.AffineTransform;
+
+import javax.swing.JPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+
+public class SymbolPreview extends JPanel {
+	private int hGap = 5, vGap = 5;
+	private ISymbol symbol;
+
+
+	public SymbolPreview() {
+		super();
+		setBackground(Color.WHITE);
+	}
+
+	public ISymbol getSymbol() {
+		return symbol;
+	}
+
+	public void setSymbol(ISymbol symbol) {
+		this.symbol = symbol;
+		repaint();
+	}
+
+	public void paint(Graphics g) {
+		super.paint(g);
+		Graphics2D g2 = (Graphics2D) g;
+		g2.translate(hGap, vGap);
+		Rectangle r = getBounds();
+		r = new Rectangle(0, 0, (int) (r.getWidth()-(hGap*2)), (int) (r.getHeight()-(vGap*2)));
+
+		if (symbol != null) {
+			symbol.drawInsideRectangle(g2, new AffineTransform(), r);
+		} else {
+			String noneSelected = "["+PluginServices.getText(this, "none_selected")+"]";
+			FontMetrics fm = g2.getFontMetrics();
+			int lineWidth = fm.stringWidth(noneSelected);
+			float scale = (float) r.getWidth() / lineWidth;
+			Font f = g2.getFont();
+			float fontSize = f.getSize()*scale;
+			g2.setFont(	f.deriveFont( fontSize ) );
+
+			g2.drawString(noneSelected,	 (r.x*scale) - (hGap/2), r.height/2+vGap*scale);
+		}
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolPreview.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/MarkerFill.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/MarkerFill.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/MarkerFill.java	(revision 30230)
@@ -0,0 +1,310 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.7  2006-11-13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.6  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/02 17:19:28  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/29 23:53:49  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 12:41:09  jaume
+* GUI
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.symbols.AbstractFillSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.AbstractMarkerSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.MarkerFillSymbol;
+import com.iver.cit.gvsig.gui.panels.ColorChooserPanel;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+import de.ios.framework.swing.JDecimalField;
+
+public class MarkerFill extends AbstractTypeSymbolEditorPanel implements ActionListener {
+    private static final String NAME = PluginServices.
+    getText(MarkerFill.class, "marker_fill");
+    private static final double DEFAULT_SEPARATION = 20;
+    private static final double DEFAULT_OFFSET = 10;
+    private ArrayList tabs = new ArrayList();
+    private JDecimalField txtOffsetX;
+    private JDecimalField txtOffsetY;
+    private JDecimalField txtSeparationX;
+    private JDecimalField txtSeparationY;
+    private ColorChooserPanel markerCC;
+    private JButton btnChooseMarker;
+    private JButton btnOutline;
+    private JRadioButton rdGrid;
+    private JRadioButton rdRandom;
+    private MarkerFillSymbol mfs = new MarkerFillSymbol();
+    public MarkerFill(SymbolEditor owner) {
+        super(owner);
+        initialize();
+    }
+
+    private void initialize() {
+        GridLayout layout;
+        JPanel myTab;
+        // Marker fill tab
+
+        {
+        	myTab = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
+        	myTab.setName(PluginServices.getText(this, "marker_fill"));
+
+        	GridBagLayoutPanel p = new GridBagLayoutPanel();
+        	JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+            markerCC = new ColorChooserPanel();
+            markerCC.setAlpha(255);
+            markerCC.addActionListener(this);
+            aux.add(markerCC);
+
+            p.addComponent(PluginServices.getText(this, "color"), aux);
+            btnChooseMarker = new JButton(PluginServices.getText(this, "choose_marker"));
+            btnChooseMarker.addActionListener(this);
+            aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+            aux.add(btnChooseMarker);
+            p.addComponent("", aux);
+
+            aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+            btnOutline = new JButton(PluginServices.getText(this, "outline"));
+            aux.add(btnOutline);
+            btnOutline.setEnabled(false);
+            p.addComponent("", aux);
+
+            ButtonGroup group = new ButtonGroup();
+            rdGrid = new JRadioButton(PluginServices.getText(this, "grid"));
+            rdGrid.addActionListener(this);
+            rdRandom = new JRadioButton(PluginServices.getText(this, "random"));
+            rdRandom.addActionListener(this);
+            group.add(rdGrid);
+            group.add(rdRandom);
+
+
+
+            aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
+            aux.add(rdGrid);
+            aux.add(rdRandom);
+
+            p.addComponent("", aux);
+
+            myTab.add(p);
+
+        }
+        tabs.add(myTab);
+
+        // Fill properties tab
+        {
+            layout = new GridLayout();
+            layout.setColumns(1);
+            layout.setVgap(5);
+            myTab = new JPanel();
+            myTab.setName(PluginServices.getText(this, "fill_properties"));
+            JPanel offsetPnl = new JPanel();
+            offsetPnl.setBorder(BorderFactory.
+                        createTitledBorder(null,
+                                PluginServices.getText(this, "offset")));
+
+            // add components to the offset panel here
+            {
+                JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+                aux.add(new JLabel("X:"));
+                aux.add(txtOffsetX = new JDecimalField(10));
+                offsetPnl.add(aux);
+
+                aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+                aux.add(new JLabel("Y:"));
+                aux.add(txtOffsetY = new JDecimalField(10));
+                offsetPnl.add(aux);
+
+
+
+            }
+            layout.setRows(offsetPnl.getComponentCount());
+            offsetPnl.setLayout(layout);
+
+            myTab.add(offsetPnl);
+
+            JPanel separationPnl = new JPanel();
+            layout = new GridLayout();
+            layout.setColumns(1);
+            layout.setVgap(5);
+            separationPnl.setBorder(BorderFactory.
+                        createTitledBorder(null,
+                                PluginServices.getText(this, "separation")));
+
+            // add components to the separation panel here
+            {
+                JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+                aux.add(new JLabel("X:"));
+                aux.add(txtSeparationX = new JDecimalField(10));
+                separationPnl.add(aux);
+
+                aux = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+                aux.add(new JLabel("Y:"));
+                aux.add(txtSeparationY = new JDecimalField(10));
+                separationPnl.add(aux);
+            }
+            layout.setRows(separationPnl.getComponentCount());
+            separationPnl.setLayout(layout);
+            myTab.add(separationPnl);
+            layout = new GridLayout();
+            layout.setColumns(1);
+            layout.setVgap(5);
+            layout.setRows(myTab.getComponentCount());
+            myTab.setLayout(layout);
+        }
+       tabs.add(myTab);
+    }
+
+    public void refreshControls(int layerIndex) {
+        AbstractFillSymbol sym = (AbstractFillSymbol) owner.getSymbol();
+        if (sym.getLayer(layerIndex) == null) {
+        	// set defaults
+           	markerCC.setColor(Color.BLACK);
+           	rdGrid.setSelected(true);
+    		rdRandom.setSelected(false);
+    		txtOffsetX.setText(String.valueOf(DEFAULT_OFFSET));
+    		txtOffsetY.setText(String.valueOf(DEFAULT_OFFSET));
+    		txtSeparationX.setText(String.valueOf(DEFAULT_SEPARATION));
+    		txtSeparationY.setText(String.valueOf(DEFAULT_SEPARATION));
+        } else {
+        	XMLEntity xml = sym.getLayer(layerIndex).getXMLEntity();
+
+        	// TODO este marker color es del MarkerSymbol,
+        	// no del MarkerFill (l'has de buscar dins del fill d'este xmlEntity)
+//        	markerCC.setColor(StringUtilities.string2Color(xml.getStringProperty("color")));
+        	boolean b = xml.getBooleanProperty("grid");
+        	rdGrid.setSelected(b);
+        	rdRandom.setSelected(!b);
+
+        	txtOffsetX.setText(String.valueOf(xml.getDoubleProperty("xOffset")));
+        	txtOffsetY.setText(String.valueOf(xml.getDoubleProperty("yOffset")));
+
+        	txtSeparationX.setText(String.valueOf(xml.getDoubleProperty("xSeparation")));
+        	txtSeparationY.setText(String.valueOf(xml.getDoubleProperty("ySeparation")));
+        }
+    }
+
+    public XMLEntity getXMLEntity() {
+        return mfs.getXMLEntity();
+    }
+
+    public String getName() {
+        return NAME;
+    }
+
+    public JPanel[] getTabs() {
+        return (JPanel[]) tabs.toArray(new JPanel[0]);
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        JComponent comp = (JComponent) e.getSource();
+        if (comp.equals(btnChooseMarker)) {
+            AbstractFillSymbol ownersSymbol = (AbstractFillSymbol) owner.getSymbol();
+
+
+            SymbolSelector symSelect = new SymbolSelector( ownersSymbol.getLayer(layerIndex), FShape.POINT);
+            PluginServices.getMDIManager().addWindow(symSelect);
+            AbstractMarkerSymbol marker = (AbstractMarkerSymbol) symSelect.getSymbol();
+            mfs.setMarker(marker);
+        }
+        try {
+            mfs.setXOffset(Double.parseDouble(txtOffsetX.getText()));
+        } catch (Exception ex) {}
+        try {
+            mfs.setYOffset(Double.parseDouble(txtOffsetY.getText()));
+        } catch (Exception ex) {}
+        try {
+            mfs.setXSeparation(Double.parseDouble(txtSeparationX.getText()));
+        } catch (Exception ex) {}
+        try {
+            mfs.setYSeparation(Double.parseDouble(txtSeparationY.getText()));
+        } catch (Exception ex) {}
+        try {
+            mfs.setGrid(rdGrid.isSelected());
+        } catch (Exception ex) {}
+
+        fireSymbolChangedEvent();
+    }
+
+	public Class getSymbolClass() {
+		return MarkerFillSymbol.class;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/MarkerFill.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolEditor.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolEditor.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolEditor.java	(revision 30230)
@@ -0,0 +1,427 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.10  2006-11-13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.9  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.6  2006/11/02 17:19:28  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/29 23:53:49  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/27 12:41:09  jaume
+* GUI
+*
+* Revision 1.1  2006/10/26 16:31:21  jaume
+* GUI
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.TreeSet;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+
+import org.gvsig.gui.beans.AcceptCancelPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.XMLEntity;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class SymbolEditor extends JPanel implements IWindow {
+
+    private WindowInfo wi;
+    private JPanel pnlWest = null;
+    private JPanel pnlCenter = null;
+    private JPanel pnlPreview = null;
+    private JPanel pnlLayers = null;
+    private AcceptCancelPanel okCancelPanel;
+    private ISymbol symbol;
+    private SymbolPreview symbolPreview = null;
+    private JPanel pnlTypeAndUnits = null;
+    private JComboBox cmbType;
+    private JComboBox cmbUnits;
+    private JTabbedPane tabbedPane = null;
+    private int shapeType;
+    private XMLEntity oldSymbolProperties;
+    private ActionListener cmbTypeActionListener;
+
+    private AbstractTypeSymbolEditorPanel[] tabs;
+	private SymbolLayerManager layerManager;
+
+
+    public SymbolEditor(ISymbol symbol, int shapeType) {
+    	this.symbol = symbol;
+        this.oldSymbolProperties = symbol.getXMLEntity();
+        this.shapeType = shapeType;
+        initialize();
+    }
+
+
+    /**
+     * This method initializes this
+     *
+     */
+    private void initialize() {
+
+    	cmbTypeActionListener = new ActionListener() {
+    		int prevIndex = -2;
+    		public void actionPerformed(ActionEvent e) {
+    			int index = getCmbType().getSelectedIndex();
+    			if (prevIndex != index) {
+    				// needs to refresh
+    				prevIndex = index;
+
+    				if (tabbedPane != null)
+    					getPnlCenter().remove(tabbedPane);
+    				AbstractTypeSymbolEditorPanel options =
+    					(AbstractTypeSymbolEditorPanel) getCmbType().getSelectedItem();
+    				options.refreshControls(getSelectedLayerIndex());
+    				JPanel[] tabs = options.getTabs();
+    				tabbedPane = new JTabbedPane();
+    				tabbedPane.setPreferredSize(new Dimension(300, 300));
+    				for (int i = 0; i < tabs.length; i++) {
+    					tabbedPane.addTab(tabs[i].getName(), tabs[i]);
+    				}
+    				getPnlCenter().add(tabbedPane, BorderLayout.CENTER);
+    				getPnlCenter().doLayout();
+    			}
+    		}
+    	};
+
+    	Comparator tabComparator = new Comparator() {
+			public int compare(Object o1, Object o2) {
+				if (! (o1 instanceof AbstractTypeSymbolEditorPanel
+					|| o1 instanceof AbstractTypeSymbolEditorPanel))
+					throw new IllegalArgumentException(PluginServices.getText(this, "trying_to_add_a_non_TypeSymbolEditor_panel"));
+				AbstractTypeSymbolEditorPanel pnl1 = (AbstractTypeSymbolEditorPanel) o1,
+				pnl2 = (AbstractTypeSymbolEditorPanel) o2;
+				int result = pnl1.getName().compareTo(pnl2.getName());
+				if (result == 0)
+					throw new IllegalArgumentException(PluginServices.getText(this, "two_panels_with_the_same_name"));
+				return result;
+			}
+		};
+		TreeSet set = new TreeSet(tabComparator);
+
+    	if (shapeType == FShape.POLYGON)
+    	{
+    		// Polygon options
+
+        	// add here your options for polygon symbols
+        	set.add(new SimpleFill(SymbolEditor.this));
+        	set.add(new MarkerFill(SymbolEditor.this));
+        }
+        else if (shapeType == FShape.POINT)
+        {
+        	// Point options
+
+        	// add here your options for point symbol
+        	set.add(new CharacterMarker(SymbolEditor.this));
+        }
+    	tabs = (AbstractTypeSymbolEditorPanel[]) set.toArray(new AbstractTypeSymbolEditorPanel[0]);
+
+        this.setLayout(new BorderLayout());
+        this.add(getPnlWest(), BorderLayout.WEST);
+        this.add(getPnlCenter(), BorderLayout.CENTER);
+        this.add(getOkCancelPanel(), BorderLayout.SOUTH);
+
+
+        cmbTypeActionListener.actionPerformed(null);
+        refresh();
+    }
+
+    private AcceptCancelPanel getOkCancelPanel() {
+        if (okCancelPanel == null) {
+            ActionListener action = new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    if ("CANCEL".equals(e.getActionCommand())) {
+                        symbol = null;
+                    }
+                    PluginServices.getMDIManager().closeWindow(SymbolEditor.this);
+                }
+            };
+            okCancelPanel = new AcceptCancelPanel(action, action);
+        }
+        return okCancelPanel;
+    }
+
+
+    public WindowInfo getWindowInfo() {
+        if (wi == null) {
+            wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+            wi.setWidth(600);
+            wi.setHeight(400);
+            wi.setTitle(PluginServices.getText(this, "symbol_property_editor"));
+        }
+        return wi;
+    }
+
+    public ISymbol getSymbol() {
+        return symbol;
+    }
+    /**
+     * This method initializes pnlWest
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlWest() {
+        if (pnlWest == null) {
+            pnlWest = new JPanel();
+            pnlWest.setLayout(new BorderLayout());
+            pnlWest.add(getPnlPreview(), java.awt.BorderLayout.NORTH);
+            pnlWest.add(getPnlLayers(), java.awt.BorderLayout.SOUTH);
+        }
+        return pnlWest;
+    }
+    /**
+     * This method initializes pnlCenter
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlCenter() {
+        if (pnlCenter == null) {
+            pnlCenter = new JPanel(new BorderLayout());
+            pnlCenter.setBorder(BorderFactory.
+                    createTitledBorder(null,
+                            PluginServices.getText(this, "properties")));
+            pnlCenter.add(getPnlTypeAndUnits(), java.awt.BorderLayout.NORTH);
+        }
+        return pnlCenter;
+    }
+    /**
+     * This method initializes pnlPreview
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlPreview() {
+        if (pnlPreview == null) {
+            pnlPreview = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+            pnlPreview.setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "preview")));
+            pnlPreview.add(getSymbolPreview());
+        }
+        return pnlPreview;
+    }
+    /**
+     * This method initializes pnlLayers
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlLayers() {
+        if (pnlLayers == null) {
+            pnlLayers = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5));
+            pnlLayers.setBorder(
+            		BorderFactory.createTitledBorder(
+            				null, PluginServices.getText(this, "layers")));
+            pnlLayers.add(getLayerManager());
+        }
+        return pnlLayers;
+    }
+
+
+    private SymbolLayerManager getLayerManager() {
+    	if (layerManager == null) {
+    		layerManager = new SymbolLayerManager(this);
+    	}
+    	return layerManager;
+    }
+
+
+	/**
+     * This method initializes symbolPreview
+     *
+     * @return com.iver.cit.gvsig.gvsig.gui.styling.SymbolPreview
+     */
+    private SymbolPreview getSymbolPreview() {
+        if (symbolPreview == null) {
+            symbolPreview = new SymbolPreview();
+            symbolPreview.setPreferredSize(new Dimension(120, 100));
+
+        }
+        return symbolPreview;
+    }
+
+
+
+    /**
+     * This method initializes pnlTypeAndUnits
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlTypeAndUnits() {
+        if (pnlTypeAndUnits == null) {
+            pnlTypeAndUnits = new JPanel();
+            pnlTypeAndUnits.setLayout(new BorderLayout());
+            JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEADING));
+            aux.add(new JLabel(PluginServices.getText(this, "type")));
+            aux.add(getCmbType());
+            pnlTypeAndUnits.add(aux, BorderLayout.WEST);
+
+            aux =  new JPanel(new FlowLayout(FlowLayout.LEADING));
+            aux.add(new JLabel(PluginServices.getText(this, "units")));
+            aux.add(getCmbUnits());
+            pnlTypeAndUnits.add(aux, BorderLayout.EAST);
+
+        }
+        return pnlTypeAndUnits;
+    }
+
+    private JComboBox getCmbUnits() {
+        if (cmbUnits == null) {
+            cmbUnits = new JComboBox(new String[] {"unidad1", "unidad2"});
+        }
+        return cmbUnits;
+    }
+
+    private JComboBox getCmbType() {
+        if (cmbType == null) {
+            cmbType = new JComboBox(tabs);
+            cmbType.addActionListener(cmbTypeActionListener);
+        }
+        return cmbType;
+    }
+
+    protected void changeSymbolProperties(XMLEntity newXMLEntity) {
+    	XMLEntity symXML = symbol.getXMLEntity();
+    	for (int i = 0; i < newXMLEntity.getPropertyCount(); i++) {
+			String pName = newXMLEntity.getPropertyName(i);
+			symXML.putProperty(pName, newXMLEntity.getStringProperty(pName));
+		}
+		refresh();
+	}
+
+	protected void setLayerToSymbol(int layerIndex, XMLEntity layerXML) {
+    	XMLEntity symXML = symbol.getXMLEntity();
+    	ArrayList layers = new ArrayList();
+    	for (int i = 0; i < symXML.getChildrenCount(); i++) {
+			layers.add(symXML.getChild(i));
+		}
+    	layers.add(layerIndex, layerXML);
+    	symXML.removeAllChildren();
+    	for (int i = 0; i < layers.size(); i++) {
+    		symXML.addChild((XMLEntity) layers.get(i));
+		}
+    	symbol.setXMLEntity(symXML);
+    	refresh();
+    }
+
+    protected void removeAllLayersFromSymbol() {
+    	symbol.getXMLEntity().removeAllChildren();
+    	refresh();
+    }
+
+    public void refresh() {
+    	getSymbolPreview().setSymbol(symbol);
+    	doLayout();
+	}
+
+	public int getSelectedLayerIndex() {
+		int index =getLayerManager().getSelectedLayerIndex();
+		if (index == -1)
+			return 0;
+		return index;
+	}
+
+	/**
+	 * <p>
+	 * Returns the type of the symbol that this panels is created for.<br>
+	 * </p>
+	 * <p>
+	 * Possible values returned by this method are
+	 *   <ol>
+	 *     <li> <b> FShape.POINT </b>, for maker symbols </li>
+	 *     <li> <b> FShape.POLYGON </b>, for fill symbols </li>
+	 *     <li> <b> FShape.LINE </b>, for line symbols (not yet implemented) </li>
+	 *     <li> <b> FShape.TEXT </b>, for text symbols (not yet implemented) </li>
+	 *     <li> maybe some other in the future </li>
+	 *   </ol>
+	 * </p>
+	 * @return
+	 */
+	public int getShapeType() {
+		return shapeType;
+	}
+
+	public Class getNewSymbolClass() {
+		return ((AbstractTypeSymbolEditorPanel) getCmbType()
+					.getSelectedItem()).getSymbolClass();
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolEditor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolLayerManager.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolLayerManager.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolLayerManager.java	(revision 30230)
@@ -0,0 +1,464 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.6  2006-11-08 10:56:47  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/07 08:52:30  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.1  2006/11/02 17:19:28  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+
+import javax.swing.AbstractListModel;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListDataListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.CharacterMarkerSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.SymbolFactory;
+import com.iver.utiles.XMLEntity;
+
+/**
+ * A component linked to a SymbolEditor that shows the layers
+ *
+ * @author jaume
+ *
+ */
+public class SymbolLayerManager extends JPanel implements ActionListener{
+    private SymbolEditor owner;
+    private JList jListLayers;
+    private ISymbol activeLayer;
+    private ISymbol symbol;
+    private JButton btnAddLayer = null;
+    private JPanel pnlButtons = null;
+    private JButton btnRemoveLayer = null;
+    private JButton btnMoveUpLayer = null;
+    private JButton btnMoveDownLayer = null;
+    private final Dimension btnDimension = new Dimension(24, 24);
+    private JScrollPane scroll;
+    private Color cellSelectedBGColor = Color.BLUE;
+
+
+    public SymbolLayerManager(SymbolEditor owner) {
+        this.owner = owner;
+        this.symbol = owner.getSymbol();
+        initialize();
+    }
+
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new java.awt.Dimension(155,106));
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        this.add(getPnlButtons(), java.awt.BorderLayout.SOUTH);
+    }
+
+    private JScrollPane getJScrollPane() {
+        if (scroll ==  null) {
+            scroll = new JScrollPane();
+            scroll.setViewportView(getJListLayers());
+            scroll.setPreferredSize(new Dimension(120, 160));
+        }
+        return scroll;
+    }
+
+    /**
+     * This method initializes jList
+     *
+     * @return javax.swing.JList
+     */
+    private JList getJListLayers() {
+        if (jListLayers == null) {
+            jListLayers = new JList();
+            jListLayers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+            jListLayers.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+
+            jListLayers.setVisibleRowCount(-1);
+            jListLayers.addListSelectionListener(new ListSelectionListener() {
+                public void valueChanged(ListSelectionEvent e) {
+                    setLayer((ISymbol) jListLayers.getSelectedValue());
+                }
+            });
+            jListLayers.setModel(new SymbolLayerListModel(symbol));
+            jListLayers.setCellRenderer(new DefaultListCellRenderer() {
+
+                public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+                    return getListCell(list, value, index, isSelected, cellHasFocus);
+                }
+
+            });
+
+            jListLayers.addMouseListener(new MouseAdapter() {
+				public void mouseClicked(MouseEvent e) {
+					if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
+						SymbolSelector symSel = new SymbolSelector(activeLayer, owner.getShapeType());
+						PluginServices.getMDIManager().addWindow(symSel);
+						updateSymbol(symSel.getSymbol());
+						setLayer(symSel.getSymbol());
+					}
+
+				}
+            });
+        }
+        return jListLayers;
+    }
+
+    public Component getListCell(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+    	ISymbol sym = (ISymbol) value;
+        JPanel pnl = new JPanel();
+        LayoutManager layout = new FlowLayout(FlowLayout.LEFT, 3, 3);
+        pnl.setLayout(layout);
+        Color bgColor = (isSelected) ? cellSelectedBGColor
+                 : Color.WHITE;
+        pnl.setBackground(bgColor);
+        SymbolPreview sp = new SymbolPreview();
+        sp.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        sp.setAlignmentX(Component.LEFT_ALIGNMENT);
+        sp.setPreferredSize(new Dimension(80, 30));
+        sp.setSize(new Dimension(80, 30));
+        sp.setSymbol(sym);
+        sp.setBackground(Color.WHITE);
+        pnl.add(sp);
+
+        XMLEntity xml = sym.getXMLEntity();
+        String source;
+        if (xml.contains("locked"))
+            source = xml.getBooleanProperty("locked") ?
+                    "images/locked.png" :
+                    "images/unlocked.png";
+         else
+            source = "images/unlocked.png";
+
+        ImageIcon icon = new ImageIcon(getClass().
+                getClassLoader().getResource(source));
+        JButton btnLock = new JButton(icon);
+        btnLock.setSize(btnDimension);
+        btnLock.setPreferredSize(btnDimension);
+        btnLock.setActionCommand("LOCK");
+        btnLock.setBackground(bgColor);
+        btnLock.setAlignmentX(Component.CENTER_ALIGNMENT);
+        pnl.add(btnLock);
+        pnl.setPreferredSize(new Dimension(150,37));
+        return pnl;
+    }
+
+    /**
+     * replaces current selected layer with this symbol
+     * @param layer
+     */
+    private void updateSymbol(ISymbol layer) {
+    	if (layer != null) {
+    		int index = getJListLayers().getSelectedIndex();
+    		XMLEntity xml = symbol.getXMLEntity();
+    		ArrayList layers = new ArrayList() ;
+    		for (int i = 0; i < xml.getChildrenCount(); i++) {
+    			if (i == index) {
+    				layers.add(layer.getXMLEntity());
+    			} else {
+    				layers.add(xml.getChild(i));
+    			}
+    		}
+    		xml.removeAllChildren();
+    		for (int i = 0; i < layers.size(); i++) {
+    			xml.addChild((XMLEntity) layers.get(i));
+    		}
+    		symbol.setXMLEntity(xml);
+    		owner.refresh();
+    		getJListLayers().repaint();
+    	}
+    }
+
+    private void setLayer(ISymbol symbol) {
+    	if (symbol!=null) {
+    		activeLayer = symbol;
+
+    	}
+    }
+
+    /**
+     * This method initializes jButton
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBtnAddLayer() {
+        if (btnAddLayer == null) {
+            btnAddLayer = new JButton(new ImageIcon(getClass().
+                    getClassLoader().getResource("images/add-layer.png")));
+            btnAddLayer.setActionCommand("ADD");
+            btnAddLayer.setSize(btnDimension);
+            btnAddLayer.setPreferredSize(btnDimension);
+            btnAddLayer.addActionListener(this);
+        }
+        return btnAddLayer;
+    }
+
+    /**
+     * This method initializes pnlButtons
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlButtons() {
+        if (pnlButtons == null) {
+            pnlButtons = new JPanel();
+            pnlButtons.add(getBtnAddLayer(), null);
+            pnlButtons.add(getBtnRemoveLayer(), null);
+            pnlButtons.add(getBtnMoveUpLayer(), null);
+            pnlButtons.add(getBtnMoveDown(), null);
+        }
+        return pnlButtons;
+    }
+
+    /**
+     * This method initializes jButton1
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBtnRemoveLayer() {
+        if (btnRemoveLayer == null) {
+            btnRemoveLayer = new JButton(new ImageIcon(getClass().
+                    getClassLoader().getResource("images/delete.png")));
+            btnRemoveLayer.setActionCommand("REMOVE");
+            btnRemoveLayer.setSize(btnDimension);
+            btnRemoveLayer.setPreferredSize(btnDimension);
+            btnRemoveLayer.addActionListener(this);
+        }
+        return btnRemoveLayer;
+    }
+
+    /**
+     * This method initializes jButton2
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBtnMoveUpLayer() {
+        if (btnMoveUpLayer == null) {
+            btnMoveUpLayer = new JButton(new ImageIcon(getClass().
+                    getClassLoader().getResource("images/up-arrow.png")));
+            btnMoveUpLayer.setActionCommand("MOVE_UP");
+            btnMoveUpLayer.setSize(btnDimension);
+            btnMoveUpLayer.setPreferredSize(btnDimension);
+            btnMoveUpLayer.addActionListener(this);
+        }
+        return btnMoveUpLayer;
+    }
+
+    /**
+     * This method initializes jButton3
+     *
+     * @return javax.swing.JButton
+     */
+    private JButton getBtnMoveDown() {
+        if (btnMoveDownLayer == null) {
+            btnMoveDownLayer = new JButton(new ImageIcon(getClass().
+                    getClassLoader().getResource("images/down-arrow.png")));
+            btnMoveDownLayer.setActionCommand("MOVE_DOWN");
+            btnMoveDownLayer.setSize(btnDimension);
+            btnMoveDownLayer.setPreferredSize(btnDimension);
+            btnMoveDownLayer.addActionListener(this);
+        }
+        return btnMoveDownLayer;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String command = e.getActionCommand();
+        XMLEntity xml = symbol.getXMLEntity();
+        int index = getJListLayers().getSelectedIndex();
+        if (command.equals("ADD")) {
+    		String className = null;
+    		ISymbol newLayer = null;
+        	try {
+
+        		Class symbolClass = owner.getNewSymbolClass();
+				className = symbolClass.getName();
+				newLayer = (ISymbol) symbolClass.newInstance();
+        	} catch (InstantiationException iE) {
+        		NotificationManager.
+        		addError("Trying to instantiate an interface" +
+        				" or abstract class '"+className+"'", iE);
+        		return;
+        	} catch (IllegalAccessException iaE) {
+        		NotificationManager.addError(null, iaE);
+        		return;
+        	}
+        	xml.addChild(newLayer.getXMLEntity());
+            index = xml.getChildrenCount()-1;
+        } else if (command.equals("REMOVE")) {
+        	int selectedIndex = getJListLayers().getSelectedIndex();
+        	if (selectedIndex == 0)
+        		return;
+        	try {
+        		xml.removeChild(selectedIndex-1);
+        	} catch (Exception ex) {
+        		// Index out of bounds or so, we don't care
+        	}
+        } else if (command.equals("MOVE_UP")) {
+            if (index>0) {
+                ArrayList layers = new ArrayList();
+                for (int i = 0; i < xml.getChildrenCount(); i++) {
+                    if (i == index)
+                        layers.add(i-1, xml.getChild(i));
+                    else
+                        layers.add(xml.getChild(i));
+                }
+                xml.removeAllChildren();
+                for (int i = 0; i < layers.size(); i++) {
+                    xml.addChild((XMLEntity) layers.get(i));
+                }
+                index --;
+            }
+        } else if (command.equals("MOVE_DOWN")) {
+            if (index < xml.getChildrenCount()-1) {
+                ArrayList layers = new ArrayList();
+                for (int i = 0; i < xml.getChildrenCount(); i++) {
+                    if (i == index) {
+                        layers.add(i, xml.getChild(i+1));
+                        layers.add(i+1, xml.getChild(i));
+                        i++;
+                    }
+                    else
+                        layers.add(xml.getChild(i));
+                }
+                xml.removeAllChildren();
+                for (int i = 0; i < layers.size(); i++) {
+                    xml.addChild((XMLEntity) layers.get(i));
+                }
+                index++;
+            }
+        } else if (command.equals("LOCK")) {
+            try {
+                XMLEntity layerXML = xml.getChild(index);
+                boolean locked = !xml.contains("locked") || !xml.getBooleanProperty("locked");
+                layerXML.putProperty("locked", locked);
+            } catch (Exception ex) {
+                // Index out of bounds or so, we don't care
+            }
+        }
+        symbol.setXMLEntity(xml);
+        getJListLayers().setSelectedIndex(index);
+        owner.refresh();
+        getJListLayers().repaint();
+    }
+
+    public int getSelectedLayerIndex() {
+        /*int i = getJListLayers().getSelectedIndex();
+        if (i==-1 && symbol.getXMLEntity().getChildrenCount()==0)
+            i = 0;
+        return i;*/
+        return getJListLayers().getSelectedIndex();
+    }
+}
+
+class SymbolLayerListModel extends AbstractListModel {
+
+    private ISymbol symbol;
+	private ArrayList listeners = new ArrayList();
+
+    public SymbolLayerListModel(ISymbol symbol) {
+        this.symbol = symbol;
+    }
+
+    public int getSize() {
+        return symbol.getXMLEntity().getChildrenCount()+1;
+    }
+
+    public Object getElementAt(int index) {
+    	XMLEntity xml = symbol.getXMLEntity();
+
+    	if (index == 0) {
+    		xml.removeAllChildren();
+    		return SymbolFactory.createFromXML(xml,
+    	        		PluginServices.getText(this, "layer")+0);
+    	}
+        return SymbolFactory.createFromXML(xml.getChild(index-1),
+        		PluginServices.getText(this, "layer")+index);
+    }
+
+    public void addListDataListener(ListDataListener l) {
+    	listeners.add(l);
+    }
+
+    public void removeListDataListener(ListDataListener l) {
+    	listeners.remove(l);
+    }
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolLayerManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/CharacterMarker.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/CharacterMarker.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/CharacterMarker.java	(revision 30230)
@@ -0,0 +1,107 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-11-06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.XMLEntity;
+
+public class CharacterMarker extends AbstractTypeSymbolEditorPanel{
+
+	private ArrayList tabs = new ArrayList();
+
+	public CharacterMarker(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	private void initialize() {
+		JPanel myTab;
+		{
+			myTab = new JPanel();
+			myTab.setName(PluginServices.getText(this, "character_marker"));
+			tabs.add(myTab);
+		}
+
+	}
+
+	public XMLEntity getXMLEntity() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getName() {
+		return PluginServices.getText(this, "character_marker_symbol");
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs .toArray(new JPanel[0]);
+	}
+
+	public void refreshControls(int layerIndex) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Class getSymbolClass() {
+		return CharacterMarker.class;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/CharacterMarker.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/package.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/package.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/package.html	(revision 30230)
@@ -0,0 +1 @@
+este package debe de estar en appgvSIG
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SimpleFill.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SimpleFill.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SimpleFill.java	(revision 30230)
@@ -0,0 +1,135 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-11-13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.3  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 12:41:09  jaume
+* GUI
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.gui.panels.ColorChooserPanel;
+import com.iver.utiles.XMLEntity;
+
+import de.ios.framework.swing.JDecimalField;
+
+public class SimpleFill extends AbstractTypeSymbolEditorPanel {
+	private static final String NAME = PluginServices.
+		getText(SimpleFill.class, "simple_fill");
+	private ColorChooserPanel jccFillColor;
+	private ColorChooserPanel jccOutlineColor;
+	private JDecimalField txtOutlineWidth;
+	private ArrayList tabs = new ArrayList();
+
+	public SimpleFill(SymbolEditor owner) {
+		super(owner);
+		initialize();
+	}
+
+	public String getName() {
+		return NAME;
+	}
+
+	public JPanel[] getTabs() {
+		return (JPanel[]) tabs.toArray(new JPanel[0]);
+	}
+
+	private void initialize() {
+		JPanel myTab = new JPanel(new FlowLayout(FlowLayout.LEADING, 5,5));
+		myTab.setName(PluginServices.getText(this, "simple_fill"));
+		GridBagLayoutPanel aux = new GridBagLayoutPanel();
+		jccFillColor = new ColorChooserPanel();
+		jccFillColor.setAlpha(255);
+		// TODO restore previous color
+		aux.addComponent(PluginServices.getText(this, "fill_color")+":",
+			jccFillColor	);
+		jccOutlineColor = new ColorChooserPanel();
+		jccOutlineColor.setAlpha(255);
+		// TODO restore previous outline color
+		aux.addComponent(PluginServices.getText(this, "outline_color")+":",
+			jccOutlineColor	);
+		txtOutlineWidth = new JDecimalField(25);
+		// TODO restore previous outline width
+		aux.addComponent(PluginServices.getText(this, "outline_width")+":",
+			txtOutlineWidth );
+		aux.setPreferredSize(new Dimension(300, 300));
+		myTab.add(aux);
+
+		tabs.add(myTab);
+	}
+
+	public XMLEntity getXMLEntity() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public void refreshControls(int layerIndex) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public Class getSymbolClass() {
+		return SimpleFill.class;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SimpleFill.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/AbstractTypeSymbolEditorPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/AbstractTypeSymbolEditorPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/AbstractTypeSymbolEditorPanel.java	(revision 30230)
@@ -0,0 +1,150 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.6  2006-11-13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.5  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/29 23:53:49  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 12:41:09  jaume
+* GUI
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import javax.swing.JPanel;
+
+import com.iver.utiles.XMLEntity;
+/**
+ * Abstract class that all the Symbol settings interface must extend.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class AbstractTypeSymbolEditorPanel {
+
+	protected SymbolEditor owner;
+	protected int layerIndex = 0;
+
+	/**
+	 * Produces and returns an XMLEntity object describing the ISymbol according with
+	 * the user settings. This XMLEntity must be self-defining far enough to be directly
+	 * passed to the SymbolFactory.createFromXML() in order to produce correctly a new
+	 * ISymbol instance of the class of this panel's ISymbol denoted by the getSymbolClass()
+	 * method.
+	 * @return XMLEntity defining the ISymbol.
+	 * @see getSymbolClass() method
+	 */
+	public abstract XMLEntity getXMLEntity();
+
+	/**
+	 * Creates a new instance of this type symbol editor panel associated to
+	 * its parent SymbolEditor which will be notified of the changes in
+	 * order to keep the symbol preview in sync with the user settings.
+	 * @param owner, the SymbolEditor which created this.
+	 */
+	public AbstractTypeSymbolEditorPanel(SymbolEditor owner) {
+		this.owner = owner;
+	}
+
+	/**
+	 * <p>Returns the name of the config tabs that will be shown in the selector combo box.
+	 * This is typically a human-readable (and also translatable) name for the symbol that
+	 * this TypeEditorPanel deals with, but maybe you prefer to use any other one.<br>
+	 * </p>
+	 * <p>
+	 * The order of the entries in the combo is alphabetically-based. So you can force a
+	 * position by defining a name that suits your needs.
+	 * </p>
+	 * @return A human-readable text naming this panel
+	 */
+	public abstract String getName();
+
+	/**
+	 * <p>Due to the complexity that many symbols settings can reach, the SymbolEditorPanel is
+	 * designed in a tabbed-based fashion. So, you can use as many of pages you want to put
+	 * your components. This pages are regular JPanels that will be automatically added to
+	 * the SymbolEditor dialog.<br>
+	 * </p>
+	 * <p>
+	 * In case you need only one page, just return a JPanel array with a length of 1.
+	 * </p>
+	 * @return An array of JPanel containing the setting's interface.
+	 */
+	public abstract JPanel[] getTabs();
+
+	/**
+	 * Invoked when the user selects or adds a new layer. This method fills up
+	 * the components on the right according on the layer properties
+	 * @param <b>int</b> layerIndex
+	 */
+	public abstract void refreshControls(int layerIndex);
+
+	public final String toString() {
+		return getName();
+	}
+
+	protected final void fireSymbolChangedEvent() {
+		owner.setLayerToSymbol(owner.getSelectedLayerIndex(), getXMLEntity());
+		owner.refresh();
+	}
+
+	/**
+	 * Returns the symbol class that is handled by this configuration panel.
+	 * @return <b>Class</b> (of the concrete ISymbol that this configuration panel deals with)
+	 */
+	public abstract Class getSymbolClass();
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/AbstractTypeSymbolEditorPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelectorListModel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelectorListModel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelectorListModel.java	(revision 30230)
@@ -0,0 +1,190 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.6  2006-11-06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.4  2006/11/02 17:19:28  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/26 16:31:21  jaume
+* GUI
+*
+* Revision 1.1  2006/10/25 10:50:41  jaume
+* movement of classes and gui stuff
+*
+* Revision 1.2  2006/10/24 22:26:18  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/24 16:31:12  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.gvsig.gui.styling;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.event.ListDataListener;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.ValidationException;
+
+import com.iver.andami.messages.NotificationManager;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.SymbolFactory;
+import com.iver.utiles.XMLEntity;
+import com.iver.utiles.listManager.ListModel;
+import com.iver.utiles.xmlEntity.generate.XmlTag;
+// TODO remove org.castor.exolab....jar from the classpath when moving this to appgvSIG
+public class SymbolSelectorListModel implements ListModel {
+	public static File SYMBOL_DIRECTORY;
+	public static final String SYMBOL_FILE_EXTENSION = ".sym";
+
+	private static final FileFilter filter = new FileFilter() {
+		public boolean accept(File pathname) {
+			return pathname.getAbsolutePath().toLowerCase().endsWith(SYMBOL_FILE_EXTENSION);
+		}
+	};
+
+	private Vector symbols;
+	private ArrayList listeners;
+
+	public SymbolSelectorListModel(File file) {
+		SYMBOL_DIRECTORY = file;
+	}
+
+	public Object remove(int i) throws ArrayIndexOutOfBoundsException {
+		return symbols.remove(i);
+	}
+
+	public void insertAt(int i, Object o) {
+		getObjects().insertElementAt(o, i);
+	}
+
+	public void add(Object o) {
+		TreeSet map = new TreeSet(new Comparator() {
+
+			public int compare(Object o1, Object o2) {
+				ISymbol sym1 = (ISymbol) o1;
+				ISymbol sym2 = (ISymbol) o2;
+				int result = sym1.getDescription().compareTo(sym2.getDescription());
+				return (result!=0) ? result: 1; /* this will allow adding symbols with
+												   the same value for description than
+												   a previous one. */
+			}
+
+		});
+
+		map.addAll(symbols);
+		map.add(o);
+		symbols = new Vector(map);
+
+	}
+
+	public Vector getObjects() {
+		if (symbols == null) {
+			symbols = new Vector();
+
+			File[] ff = SYMBOL_DIRECTORY.listFiles(filter);
+			for (int i = 0; i < ff.length; i++) {
+
+				XMLEntity xml;
+				try {
+					xml = new XMLEntity((XmlTag) XmlTag.unmarshal(new FileReader(ff[i])));
+					ISymbol sym = SymbolFactory.createFromXML(xml, ff[i].getName());
+					add(sym);
+				} catch (MarshalException e) {
+					NotificationManager.
+						addWarning("Error in file ["+ff[i].getAbsolutePath()+"]. " +
+								"File corrupted! Skiping it...", e);
+				} catch (ValidationException e) {
+					NotificationManager.
+						addWarning("Error validating symbol file ["+ff[i].getAbsolutePath()+"].", e);
+				} catch (FileNotFoundException e) {
+					// unreachable code, but anyway...
+					NotificationManager.
+						addWarning("File not found: "+ ff[i].getAbsolutePath(), e);
+				}
+
+			}
+		}
+		return symbols;
+	}
+
+	public int getSize() {
+		return getObjects().size();
+	}
+
+	public Object getElementAt(int index) {
+		return getObjects().get(index);
+	}
+
+	public void addListDataListener(ListDataListener l) {
+		if (listeners == null)
+			listeners = new ArrayList();
+		listeners.add(l);
+	}
+
+	public void removeListDataListener(ListDataListener l) {
+		if (listeners!=null)
+			listeners.remove(l);
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/gvsig/gui/styling/SymbolSelectorListModel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvGraph.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvGraph.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvGraph.java	(revision 30230)
@@ -0,0 +1,132 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Hashtable;
+
+import edu.uci.ics.jung.utils.Pair;
+
+public class GvGraph implements IGraph {
+	private ArrayList nodes;
+	private ArrayList edges;
+	private Hashtable indexArcsEdges;
+
+	public GvGraph()
+	{
+		nodes = new ArrayList();
+		edges = new ArrayList();
+		indexArcsEdges = new Hashtable();		
+	}
+
+	public GvGraph(int numArcs, int numEdges, int numNodes) {
+		nodes = new ArrayList(numNodes);
+		edges = new ArrayList(numEdges);
+		indexArcsEdges = new Hashtable(numArcs);					
+	}
+
+	public GvNode getNodeByID(int idNode) {
+		return (GvNode) nodes.get(idNode);
+	}
+
+	public GvEdge getEdgeByID(int idEdge) {
+		return (GvEdge) edges.get(idEdge);
+	}
+
+	public int numVertices() {
+		return nodes.size();
+	}
+
+	public int numEdges() {
+		return edges.size();
+	}
+
+	public EdgePair getEdgesByIdArc(int idArc) {
+		// if (idArc < indexArcsEdges.size())
+			return (EdgePair) indexArcsEdges.get(new Integer(idArc));
+		// return null;
+	}
+
+	public void addEdge(GvEdge edge) {
+		edges.add(edge);
+	}
+
+	public void addNode(GvNode node) {
+		nodes.add(node);
+		
+	}
+
+	public void addEdgePair(int idArc, EdgePair edgePair) {
+//		assert(indexArcsEdges.size() == edgePair.idArc);
+		Object aux = indexArcsEdges.put(new Integer(idArc), edgePair);
+		// assert(aux == null);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.graph.core.IGraph#removeEdge(int)
+	 */
+	public void removeEdge(int idEdge) {
+		// TODO: Solo se usa para edges añadidos debido a la incorporación
+		// de flags. Si se usara para los otros arcos, habría que 
+		// revisar indexArcsEdges para ver si es necesario quitarlo
+		// también de ahí.
+		edges.remove(idEdge);
+	}
+
+	public void removeNode(int idNode) {
+		nodes.remove(idNode);		
+	}
+
+//	public void addEdge(int i, GvEdge edge) {
+//		edges.set(i, edge);
+//		
+//	}
+//	public void addNode(int i, GvNode node) {
+//		nodes.set(i, node);
+//		
+//	}
+	
+	
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvGraph.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkWriter.java	(revision 30230)
@@ -0,0 +1,65 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package com.iver.cit.gvsig.graph.core;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+
+public interface INetworkWriter {
+
+	public void setLayer(FLyrVect lyr);
+
+	/**
+	 * We iterate by each geometry and add Nodes and Edges using writers. Each
+	 * node must have its own ID.
+	 * 
+	 * @throws DriverIOException
+	 * @throws EditionException
+	 * @throws DriverException
+	 * 
+	 */
+	public void writeNetwork() throws EditionException,
+			DriverException;
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvEdge.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvEdge.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvEdge.java	(revision 30230)
@@ -0,0 +1,114 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+public class GvEdge {
+
+	private int idArc;
+	private int idEdge;
+	private int direc;
+	private int idNodeOrig;
+	private int idNodeEnd;
+	private int type;
+	private double distance;
+	private double weight;
+	
+	private int numSoluc;
+	
+	public int getDirec() {
+		return direc;
+	}
+	public void setDirec(int direc) {
+		this.direc = direc;
+	}
+	public double getDistance() {
+		return distance;
+	}
+	public void setDistance(double distance) {
+		this.distance = distance;
+	}
+	public int getIdArc() {
+		return idArc;
+	}
+	public void setIdArc(int idArc) {
+		this.idArc = idArc;
+	}
+	public int getIdNodeEnd() {
+		return idNodeEnd;
+	}
+	public void setIdNodeEnd(int idNodeEnd) {
+		this.idNodeEnd = idNodeEnd;
+	}
+	public int getIdNodeOrig() {
+		return idNodeOrig;
+	}
+	public void setIdNodeOrig(int idNodeOrig) {
+		this.idNodeOrig = idNodeOrig;
+	}
+	public int getType() {
+		return type;
+	}
+	public void setType(int type) {
+		this.type = type;
+	}
+	public double getWeight() {
+		return weight;
+	}
+	public void setWeight(double weight) {
+		this.weight = weight;
+	}
+	public int getNumSoluc() {
+		return numSoluc;
+	}
+	public void setNumSoluc(int numSoluc) {
+		this.numSoluc = numSoluc;
+	}
+	public int getIdEdge() {
+		return idEdge;
+	}
+	public void setIdEdge(int idEdge) {
+		this.idEdge = idEdge;
+	}
+
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvEdge.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/AbstractNetSolver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/AbstractNetSolver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/AbstractNetSolver.java	(revision 30230)
@@ -0,0 +1,59 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+
+public class AbstractNetSolver implements INetSolver {
+	public static int numSolucGlobal = 0;
+	protected Network net;
+	public Network getNetwork() {
+		return net;
+	}
+	public void setNetwork(Network net) {
+		this.net = net;
+	}
+	
+	
+	
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/AbstractNetSolver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvFlag.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvFlag.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvFlag.java	(revision 30230)
@@ -0,0 +1,216 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.awt.geom.Point2D;
+
+import com.iver.andami.PluginServices;
+
+public class GvFlag {
+	/*
+	 * Indexes of flag features' fields.
+	 * 
+	 * */
+	public static final int ID_FLAG_INDEX = 0;
+	public static final int ID_ARC_INDEX = 1;
+	public static final int PCT_INDEX = 2;
+	public static final int COST_INDEX = 3;
+	public static final int DIREC_INDEX = 4;
+	public static final int DESCRIPTION_INDEX = 5;
+	
+	
+	
+	
+	
+	public final static int DIGIT_DIRECTION = 1;
+	public final static int INVERSE_DIGIT_DIRECTION = -1;
+	public final static int BOTH_DIRECTIONS = 0;
+
+
+	private int idArc;
+	private int direc;
+	private double pct;
+	private int idFlag;
+	private Point2D originalPoint;
+	private String description;
+	private boolean enabled = true;
+	private double cost = -1;
+	private double accumulatedLength;
+	private static int flagNumber = 0;
+
+	public GvFlag(double x, double y) {
+		this.originalPoint = new Point2D.Double(x, y);
+		this.description = PluginServices.getText(this, "new_flag")+flagNumber++;
+	}
+
+	public GvFlag(double x, double y, double cost) {
+		this.originalPoint = new Point2D.Double(x, y);
+		this.description = PluginServices.getText(this, "new_flag")+flagNumber++;
+		this.cost = cost;
+	}
+
+
+	public GvFlag(double x, double y, String description) {
+		this.originalPoint = new Point2D.Double(x, y);
+		this.description = description;
+	}
+
+
+	public GvFlag(double x, double y, String description, double cost) {
+		this.originalPoint = new Point2D.Double(x, y);
+		this.description = description;
+		this.cost = cost;
+	}
+
+	/**
+	 * Returns the cost for this flag. The cost represents the amount of resource of
+	 * the user's cost unit required to reach this flag from the previous one in
+	 * the route.
+	 * @return
+	 */
+	public double getCost() {
+		return cost;
+	}
+
+	/**
+	 * Sets the cost of this flag. The cost represents the amount of resource of
+	 * the user's cost unit required to reach this flag from the previous one in
+	 * the route.
+	 * @param cost
+	 */
+	public void setCost(double cost) {
+		this.cost = cost;
+	}
+
+	/**
+	 * Returns a human-readable description of this flag. This is typically a name
+	 * for this marker.
+	 * @return
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * Sets the description of this flag. The description should be a human readable
+	 * description for this flag such is street name or something like that. But
+	 * it can be whatever.
+	 *
+	 * @param description
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	/**
+	 * Tells if this flag is being taken in account when calculating the route.
+	 * @return
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	/**
+	 * Enables or disables this flag. A disabled flag is not taken in account to
+	 * compute the route.
+	 * @param enabled
+	 */
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public int getIdArc() {
+		return idArc;
+	}
+
+	public void setIdArc(int idArc) {
+		this.idArc = idArc;
+	}
+
+	public int getDirec() {
+		return direc;
+	}
+
+	public void setDirec(int sense) {
+		this.direc = sense;
+	}
+
+	public double getPct() {
+		return pct;
+	}
+
+	public void setPct(double pct) {
+		this.pct = pct;
+	}
+
+	public void setIdFlag(int i) {
+		idFlag = i;
+	}
+
+	public int getIdFlag() {
+		return idFlag;
+	}
+
+	public Point2D getOriginalPoint() {
+		return originalPoint;
+	}
+
+	public String toString() {
+		return description;
+	}
+
+	public void setOriginalPoint(double x, double y) {
+		originalPoint.setLocation(x, y);
+		
+	}
+
+	public void setAccumulatedLength(double accumulatedLength) {
+		this.accumulatedLength = accumulatedLength;
+		
+	}
+
+	public double getAccumulatedLength() {
+		return accumulatedLength;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvFlag.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvModifiedCost.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvModifiedCost.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvModifiedCost.java	(revision 30230)
@@ -0,0 +1,117 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+/**
+ * @author fjp
+ * To set barriers or modified cost to a graph.
+ * This objects are stored in arrayList modifiedCosts (inside
+ * Network class). Useful to remove barriers, for example (restore
+ * a cost). Be careful: You need to call applyModifiedCosts 
+ * each time you call setVelocities (setVelocities recalculate
+ * cost (weight?) field in graph 
+ */
+public class GvModifiedCost {
+	private int idArc;
+	private int idEdge;
+	private int idInverseEdge;
+	private int direction; // 1, 2 -> inverse, 3 -> both
+	private double oldCost;
+	private double newCost;
+	private double oldInverseCost;
+	
+	private boolean applied;
+	public GvModifiedCost(int idArc, double newCost, int direction) {
+		this.idArc = idArc;
+		this.newCost = newCost;
+		this.direction = direction;
+	}
+	public boolean isApplied() {
+		return applied;
+	}
+	public void setApplied(boolean applied) {
+		this.applied = applied;
+	}
+	public int getIdArc() {
+		return idArc;
+	}
+	public void setIdArc(int idArc) {
+		this.idArc = idArc;
+	}
+	public int getIdEdge() {
+		return idEdge;
+	}
+	public void setIdEdge(int idEdge) {
+		this.idEdge = idEdge;
+	}
+	public int getDirection() {
+		return direction;
+	}
+	public void setDirection(int direction) {
+		this.direction = direction;
+	}
+	public int getIdInverseEdge() {
+		return idInverseEdge;
+	}
+	public void setIdInverseEdge(int idInverseEdge) {
+		this.idInverseEdge = idInverseEdge;
+	}
+	public double getNewCost() {
+		return newCost;
+	}
+	public void setNewCost(double newCost) {
+		this.newCost = newCost;
+	}
+	public double getOldCost() {
+		return oldCost;
+	}
+	public void setOldCost(double oldCost) {
+		this.oldCost = oldCost;
+	}
+	public double getOldInverseCost() {
+		return oldInverseCost;
+	}
+	public void setOldInverseCost(double oldInverseCost) {
+		this.oldInverseCost = oldInverseCost;
+	}
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvModifiedCost.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkRedLoader.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkRedLoader.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkRedLoader.java	(revision 30230)
@@ -0,0 +1,300 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.loaders;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteOrder;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+
+import javax.imageio.stream.FileImageOutputStream;
+
+import com.iver.cit.gvsig.graph.core.EdgePair;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvGraph;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.INetworkLoader;
+
+import edu.uci.ics.jung.graph.Graph;
+import edu.uci.ics.jung.graph.Vertex;
+import edu.uci.ics.jung.graph.decorators.Indexer;
+import edu.uci.ics.jung.graph.impl.DirectedSparseEdge;
+import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
+import edu.uci.ics.jung.graph.impl.SparseGraph;
+
+/**
+ * @author fjp
+ * 
+ * Primero vienen los arcos, y luego los nodos. En la cabecera, 3 enteros
+ * con el numero de tramos, el de arcos y el de nodos.
+ *
+ */
+public class NetworkRedLoader implements INetworkLoader {
+	
+	private File netFile = new File("c:/ejes.red");
+
+	public IGraph loadNetwork() {
+		
+		long t1 = System.currentTimeMillis();
+		
+		int numArcs;
+		int numEdges;
+		int numNodes;
+		
+		short sentidoDigit; // => 1 en esa dirección. 0=> Al contrario. SOLO
+		// SE UTILIZA PARA LOS CALCULOS POR IDTRAMO Y
+		// PORCENTAJE
+		// PARA SABER SI ESTÁ MÁS CERCA DE UN NODO O DEL OTRO.
+
+
+			RandomAccessFile file;
+			try {
+				file = new RandomAccessFile(netFile.getPath(),
+						"r");
+				FileChannel channel = file.getChannel();
+				MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
+				buf.order(ByteOrder.LITTLE_ENDIAN);
+	
+				numArcs = buf.getInt();
+				numEdges = buf.getInt();
+				numNodes = buf.getInt();
+		
+				GvGraph g = new GvGraph(numArcs, numEdges, numNodes);
+
+				// Nodes
+				
+				// NOTE: EDGES ARE WRITEN BEFORE. LOOK TO NetworkFileRedWriter.
+//					output.writeInt(id);    		4
+//					output.writeInt(sense);			4
+//
+//					output.writeInt(idNodeOrig);	4
+//					output.writeInt(idNodeEnd);		4
+//					output.writeInt(tipoTramo);		4
+//					output.writeDouble(dist);		8
+//					output.writeDouble(cost);		8
+				// TOTAL = 5x4 + 2x8 = 20 + 16 = 36 bytes /edge
+
+				buf.position(36*numEdges + 12);
+				for (int i=0; i < numNodes; i++)
+				{
+					GvNode node = readNode(buf);
+					g.addNode(node);
+				}
+				// Arcos			
+				buf.position(12);
+				for (int i=0; i < numEdges; i++)
+				{
+					GvEdge edge = readEdge(buf);
+					edge.setIdEdge(i);
+					g.addEdge(edge);
+					GvNode node = g.getNodeByID(edge.getIdNodeOrig());
+					node.getEnlaces().add(edge);
+					EdgePair edgePair = g.getEdgesByIdArc(edge.getIdArc());
+					if (edgePair == null)
+					{
+						edgePair = new EdgePair();						
+						g.addEdgePair(edge.getIdArc(), edgePair);
+					}
+					if (edge.getDirec() == 1)
+						edgePair.setIdEdge(i);
+					else
+						edgePair.setIdInverseEdge(i);
+					
+				}
+			
+			long t2 = System.currentTimeMillis();
+			System.out.println("Tiempo de carga: " + (t2-t1) + " msecs");
+			System.out.println("NumEdges = " + g.numEdges());
+			return g;
+			} catch (FileNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		return null;
+	}
+	
+	public Graph loadJungNetwork()
+	{
+		SparseGraph g = new SparseGraph();
+		long t1 = System.currentTimeMillis();
+		
+		RandomAccessFile file;
+		try {
+			file = new RandomAccessFile(netFile.getPath(),
+					"r");
+			FileChannel channel = file.getChannel();
+			MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
+			buf.order(ByteOrder.LITTLE_ENDIAN);
+
+			int numArcs = buf.getInt();
+			int numEdges = buf.getInt();
+			int numNodes = buf.getInt();
+			
+			// Nodes
+			buf.position(24*numEdges + 12);
+			for (int i=0; i < numNodes; i++)
+			{
+				GvNode node = readNode(buf);
+				
+				Vertex v = new DirectedSparseVertex();
+//				v.addUserDatum("ID", node.idNode, UserData.CLONE);
+//				v.addUserDatum("X", node.x, UserData.CLONE);
+//				v.addUserDatum("Y", node.y, UserData.CLONE);
+	//			v_locations.setLocation(v, new Point2D.Double(x.doubleValue(),y.doubleValue()));
+				g.addVertex(v);				
+			}
+			Indexer indexer = Indexer.getIndexer(g);
+		
+			buf.position(12);
+			for (int i=0; i < numEdges; i++)
+			{
+				GvEdge edge = readEdge(buf);
+				
+				int nodeOrig = edge.getIdNodeOrig();
+				int nodeEnd = edge.getIdNodeEnd();
+				
+				Vertex vFrom = (Vertex) indexer.getVertex(nodeOrig);
+				Vertex vTo = (Vertex) indexer.getVertex(nodeEnd);
+				
+				DirectedSparseEdge edgeJ = new DirectedSparseEdge(vFrom, vTo);
+				g.addEdge(edgeJ);
+			}
+			long t2 = System.currentTimeMillis();
+			System.out.println("Tiempo de carga: " + (t2-t1) + " msecs");
+			return g;
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	private GvNode readNode(MappedByteBuffer buf) {
+		GvNode node = new GvNode();
+		node.setIdNode(buf.getInt());
+		node.setX(buf.getDouble());
+		node.setY(buf.getDouble());
+		return node;
+	}
+
+	private GvEdge readEdge(MappedByteBuffer buf) {
+		GvEdge edge = new GvEdge();
+		// memcpy(&Arcos[link_num].idTramo,puntero,sizeof(long));
+		edge.setIdArc(buf.getInt());
+
+		
+		// Sentido de digitalización.Un 1 indica que va en ese sentido, un cero al contrario.
+		// memcpy(&Arcos[link_num].sentido,puntero,sizeof(int));
+		edge.setDirec(buf.getInt());
+
+		// idNodeOrig
+		edge.setIdNodeOrig(buf.getInt());
+		// memcpy(&node_num1,puntero,sizeof(long));
+		
+		// idNodeEnd
+		edge.setIdNodeEnd(buf.getInt());
+//		memcpy(&node_num2,puntero,sizeof(long));
+
+		// Read the link costs.
+		// Type
+		edge.setType(buf.getInt());
+//		memcpy(&Arcos[link_num].TipoTramo,puntero,sizeof(int));
+
+		// Distance
+		edge.setDistance(buf.getDouble());
+		edge.setWeight(buf.getDouble());
+		
+//		memcpy(&Arcos[link_num].Coste2,puntero,sizeof(float));
+
+//		pNodo1 = &Nodos[node_num1];
+//		Arcos[link_num].idNodo1 = node_num1;
+//
+//		Arcos[link_num].idNodo2 = node_num2;
+		// pNodo2->Enlaces.Add(link_num);
+
+//		// NUEVO 11-JUL-2002
+//			if (Arcos[link_num].sentido)
+//			IndiceArcos[Arcos[link_num].idTramo].idArco = link_num;
+//		else
+//			IndiceArcos[Arcos[link_num].idTramo].idContraArco = link_num;
+//
+//		// NUEVO 27-JUL-2003
+//		Arcos[link_num].numSoluc = 0;
+//
+//		// NUEVO 23_2_2005
+//		CreaConectores(link_num);
+		return edge;
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		NetworkRedLoader redLoader = new NetworkRedLoader();
+		
+		redLoader.loadNetwork();
+		redLoader.loadJungNetwork();
+
+	}
+
+	public File getNetFile() {
+		return netFile;
+	}
+
+	public void setNetFile(File netFile) {
+		this.netFile = netFile;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkRedLoader.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkLoader.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkLoader.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkLoader.java	(revision 30230)
@@ -0,0 +1,432 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.loaders;
+
+import java.awt.geom.Point2D;
+import java.io.File;
+
+import com.hardcode.driverManager.Driver;
+import com.hardcode.driverManager.DriverLoadException;
+import com.hardcode.driverManager.DriverManager;
+import com.hardcode.driverManager.DriverValidation;
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.NoSuchTableException;
+import com.hardcode.gdbms.engine.data.driver.DBDriver;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.data.driver.FileDriver;
+import com.hardcode.gdbms.engine.data.driver.ObjectDriver;
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.graph.core.EdgeWeightLabeller;
+import com.iver.cit.gvsig.graph.core.FEdge;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvGraph;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.INetworkLoader;
+
+import edu.uci.ics.jung.algorithms.shortestpath.DijkstraDistance;
+import edu.uci.ics.jung.graph.ArchetypeVertex;
+import edu.uci.ics.jung.graph.Graph;
+import edu.uci.ics.jung.graph.Vertex;
+import edu.uci.ics.jung.graph.decorators.Indexer;
+import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
+import edu.uci.ics.jung.graph.impl.SparseGraph;
+import edu.uci.ics.jung.utils.UserData;
+import edu.uci.ics.jung.visualization.DefaultSettableVertexLocationFunction;
+import edu.uci.ics.jung.visualization.SettableVertexLocationFunction;
+
+public class NetworkLoader implements INetworkLoader {
+
+	private String fieldNodeId = "NODEID";
+	private String fieldNodeX = "X";
+	private String fieldNodeY = "Y";
+
+	private String fieldArcId = "ARCID";
+	private String fieldDirection = "DIRECTION";
+	private String fieldNodeOrig = "NODEORIGIN";
+	private String fieldNodeEnd = "NODEEND";
+	private String fieldType = "TYPE";
+	private String fieldDist = "DIST";
+	private String fieldCost = "COST";
+
+	private SelectableDataSource nodeReader;
+	private SelectableDataSource edgeReader;
+
+	private Indexer indexer;
+
+	private boolean bUseCostField;
+
+	/**
+     * The user data key used to retrieve the vertex locations (if any) defined by this class.
+     */
+    public static final String LOCATIONS = "jung.io.GvSIGNetReader.LOCATIONS";
+
+	protected SettableVertexLocationFunction v_locations = new DefaultSettableVertexLocationFunction();
+
+
+	/**
+	 * By default, the fields are:
+	 * private String fieldNodeId = "NODEID";
+	 * 	 fieldNodeX = "X";
+	 * 	 fieldNodeY = "Y";
+	 *
+	 * 	 fieldArcId = "NODEID";
+	 * 	 fieldDirection = "X";
+	 * 	 fieldNodeOrig = "Y";
+	 * 	 fieldNodeEnd = "NODEORIGIN";
+	 * 	 fieldType = "NODEEND";
+	 * 	 fieldDist = "DIST";
+	 *
+	 * If you need to change any, use the correspondant "setFieldXXXX"
+	 * BEFORE calling loadNetwork. And remember to set nodeReader and
+	 * edgeReader also.
+	 */
+	public NetworkLoader(boolean bUseCostField) {
+		this.bUseCostField = bUseCostField;
+	}
+
+
+	public String getFieldArcId() {
+		return fieldArcId;
+	}
+
+	public void setFieldArcId(String fieldArcId) {
+		this.fieldArcId = fieldArcId;
+	}
+
+	public String getFieldDirection() {
+		return fieldDirection;
+	}
+
+	public void setFieldDirection(String fieldDirection) {
+		this.fieldDirection = fieldDirection;
+	}
+
+	public String getFieldDist() {
+		return fieldDist;
+	}
+
+	public void setFieldDist(String fieldDist) {
+		this.fieldDist = fieldDist;
+	}
+
+	public String getFieldNodeEnd() {
+		return fieldNodeEnd;
+	}
+
+	public void setFieldNodeEnd(String fieldNodeEnd) {
+		this.fieldNodeEnd = fieldNodeEnd;
+	}
+
+	public String getFieldNodeId() {
+		return fieldNodeId;
+	}
+
+	public void setFieldNodeId(String fieldNodeId) {
+		this.fieldNodeId = fieldNodeId;
+	}
+
+	public String getFieldNodeOrig() {
+		return fieldNodeOrig;
+	}
+
+	public void setFieldNodeOrig(String fieldNodeOrig) {
+		this.fieldNodeOrig = fieldNodeOrig;
+	}
+
+	public String getFieldNodeX() {
+		return fieldNodeX;
+	}
+
+	public void setFieldNodeX(String fieldNodeX) {
+		this.fieldNodeX = fieldNodeX;
+	}
+
+	public String getFieldNodeY() {
+		return fieldNodeY;
+	}
+
+	public void setFieldNodeY(String fieldNodeY) {
+		this.fieldNodeY = fieldNodeY;
+	}
+
+	public String getFieldType() {
+		return fieldType;
+	}
+
+	public void setFieldType(String fieldType) {
+		this.fieldType = fieldType;
+	}
+
+	public void setEdgeReader(SelectableDataSource edgeReader) {
+		this.edgeReader = edgeReader;
+	}
+
+	public void setNodeReader(SelectableDataSource nodeReader) {
+		this.nodeReader = nodeReader;
+	}
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		NetworkLoader netLoader = new NetworkLoader(false);
+
+		//Setup de los drivers
+		DriverManager dm = new DriverManager();
+		dm.setValidation(new DriverValidation() {
+				public boolean validate(Driver d) {
+					return ((d instanceof ObjectDriver) ||
+					(d instanceof FileDriver) ||
+					(d instanceof DBDriver));
+				}
+			});
+		dm.loadDrivers(new File("../_fwAndami/gvSIG/extensiones/com.iver.cit.gvsig/drivers"));
+
+		//Setup del factory de DataSources
+        DataSourceFactory dsf = LayerFactory.getDataSourceFactory();
+		dsf.setDriverManager(dm);
+
+		//Setup de las tablas
+		dsf.addFileDataSource("gdbms dbf driver", "nodes", "c:/nodes.dbf");
+		dsf.addFileDataSource("gdbms dbf driver", "edges", "c:/edges.dbf");
+
+        DataSource dsNodes;
+		try {
+			dsNodes = dsf.createRandomDataSource("nodes",
+			        DataSourceFactory.AUTOMATIC_OPENING);//MANUAL_OPENING);
+
+	        DataSource dsEdges = dsf.createRandomDataSource("edges",
+	                DataSourceFactory.AUTOMATIC_OPENING);//MANUAL_OPENING);
+
+
+			SelectableDataSource sdsNodes = new SelectableDataSource(dsNodes);
+			SelectableDataSource sdsEdges = new SelectableDataSource(dsEdges);
+
+			netLoader.setNodeReader(sdsNodes);
+			netLoader.setEdgeReader(sdsEdges);
+
+
+			Graph g = netLoader.loadJungNetwork();
+
+			System.out.println("Num nodos=" + g.numVertices() + " numEdges = " + g.numEdges());
+
+			// Probamos la algoritmia: distancia entre nodo 1 y nodo 1000
+			DijkstraDistance distCalculator = new DijkstraDistance(g, new EdgeWeightLabeller());
+			ArchetypeVertex vOrig = netLoader.indexer.getVertex(1);
+			ArchetypeVertex vEnd = netLoader.indexer.getVertex(1000);
+			long t1 = System.currentTimeMillis();
+			Number dist = distCalculator.getDistance(vOrig, vEnd);
+			long t2 = System.currentTimeMillis();
+
+
+			System.out.println("dist =" + dist + " meters. msecs: " + (t2-t1));
+			System.out.println(vOrig + " - " + vEnd);
+			System.out.println(vOrig.getUserDatum("X") + ", " + vOrig.getUserDatum("Y")
+							+ " - " + vEnd.getUserDatum("X") + ", " + vEnd.getUserDatum("Y"));
+
+		} catch (DriverLoadException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (NoSuchTableException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+	}
+
+	public Graph loadJungNetwork() {
+		try {
+			int fieldIndexIdNode = nodeReader.getFieldIndexByName(fieldNodeId);
+			int fieldIndexX = nodeReader.getFieldIndexByName(fieldNodeX);;
+			int fieldIndexY = nodeReader.getFieldIndexByName(fieldNodeY);;
+
+			int fieldIndexArcID = edgeReader.getFieldIndexByName(fieldArcId);
+			int fieldIndexDirection = edgeReader.getFieldIndexByName(fieldDirection);
+			int fieldIndexNodeOrig = edgeReader.getFieldIndexByName(fieldNodeOrig);
+			int fieldIndexNodeEnd = edgeReader.getFieldIndexByName(fieldNodeEnd);
+			int fieldIndexType = edgeReader.getFieldIndexByName(fieldType);
+			int fieldIndexDist = edgeReader.getFieldIndexByName(fieldDist);
+
+
+			SparseGraph g = new SparseGraph();
+//			g.getEdgeConstraints().clear();
+			long t1 = System.currentTimeMillis();
+
+			// Mirar NumberEdgeVAlue e Indexer
+			for (int i=0; i < nodeReader.getRowCount(); i++)
+			{
+				NumericValue id = (NumericValue) nodeReader.getFieldValue(i, fieldIndexIdNode);
+				NumericValue x = (NumericValue) nodeReader.getFieldValue(i, fieldIndexX);
+				NumericValue y = (NumericValue) nodeReader.getFieldValue(i, fieldIndexY);
+				Vertex v = new DirectedSparseVertex();
+				v.addUserDatum("ID", id, UserData.CLONE);
+				v.addUserDatum("X", x, UserData.CLONE);
+				v.addUserDatum("Y", y, UserData.CLONE);
+				v_locations.setLocation(v, new Point2D.Double(x.doubleValue(),y.doubleValue()));
+				g.addVertex(v);
+			}
+			indexer = Indexer.getIndexer(g);
+
+			for (int i=0; i < edgeReader.getRowCount(); i++)
+			{
+				NumericValue arcID = (NumericValue) edgeReader.getFieldValue(i, fieldIndexArcID);
+				NumericValue direc = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDirection);
+				NumericValue nodeOrig = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeOrig);
+				NumericValue nodeEnd = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeEnd);
+				NumericValue type = (NumericValue) edgeReader.getFieldValue(i, fieldIndexType);
+				NumericValue dist = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDist);
+
+				Vertex vFrom = (Vertex) indexer.getVertex(nodeOrig.intValue());
+				Vertex vTo = (Vertex) indexer.getVertex(nodeEnd.intValue());
+
+				FEdge edge = new FEdge(vFrom, vTo);
+				edge.setArcID(arcID.intValue());
+				edge.setDirection(direc.intValue());
+				edge.setIdNodeOrig(nodeOrig.intValue());
+				edge.setIdNodeEnd(nodeEnd.intValue());
+				edge.setType(type.intValue());
+				edge.setWeight(dist.doubleValue());
+
+				g.addEdge(edge);
+			}
+			long t2 = System.currentTimeMillis();
+			System.out.println("Tiempo de carga desde nodes.dbf y edges.dbf y generando JUNG network: " + (t2-t1) + " msecs");
+			return g;
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+
+	public IGraph loadNetwork() {
+		try {
+			int fieldIndexIdNode = nodeReader.getFieldIndexByName(fieldNodeId);
+			int fieldIndexX = nodeReader.getFieldIndexByName(fieldNodeX);;
+			int fieldIndexY = nodeReader.getFieldIndexByName(fieldNodeY);;
+
+			int fieldIndexArcID = edgeReader.getFieldIndexByName(fieldArcId);
+			int fieldIndexDirection = edgeReader.getFieldIndexByName(fieldDirection);
+			int fieldIndexNodeOrig = edgeReader.getFieldIndexByName(fieldNodeOrig);
+			int fieldIndexNodeEnd = edgeReader.getFieldIndexByName(fieldNodeEnd);
+			int fieldIndexType = edgeReader.getFieldIndexByName(fieldType);
+			int fieldIndexDist = edgeReader.getFieldIndexByName(fieldDist);
+			int fieldIndexCost = edgeReader.getFieldIndexByName(fieldCost);
+
+
+			GvGraph g = new GvGraph();
+			long t1 = System.currentTimeMillis();
+
+			// Mirar NumberEdgeVAlue e Indexer
+			for (int i=0; i < nodeReader.getRowCount(); i++)
+			{
+				NumericValue id = (NumericValue) nodeReader.getFieldValue(i, fieldIndexIdNode);
+				NumericValue x = (NumericValue) nodeReader.getFieldValue(i, fieldIndexX);
+				NumericValue y = (NumericValue) nodeReader.getFieldValue(i, fieldIndexY);
+				GvNode node = new GvNode();
+				node.setX(x.doubleValue());
+				node.setY(y.doubleValue());
+				node.setIdNode(i);
+				g.addNode(node);
+			}
+
+			for (int i=0; i < edgeReader.getRowCount(); i++)
+			{
+				NumericValue arcID = (NumericValue) edgeReader.getFieldValue(i, fieldIndexArcID);
+				NumericValue direc = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDirection);
+				NumericValue nodeOrig = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeOrig);
+				NumericValue nodeEnd = (NumericValue) edgeReader.getFieldValue(i, fieldIndexNodeEnd);
+				NumericValue type = (NumericValue) edgeReader.getFieldValue(i, fieldIndexType);
+				NumericValue dist = (NumericValue) edgeReader.getFieldValue(i, fieldIndexDist);
+
+				GvEdge edge = new GvEdge();
+				edge.setIdArc(arcID.intValue());
+				edge.setIdEdge(i);
+				edge.setDirec(direc.intValue());
+				edge.setIdNodeOrig(nodeOrig.intValue());
+				edge.setIdNodeEnd(nodeEnd.intValue());
+				edge.setType(type.intValue());
+				edge.setDistance(dist.doubleValue());
+				if (bUseCostField)
+				{
+					NumericValue cost = (NumericValue) edgeReader.getFieldValue(i, fieldIndexCost);
+					edge.setWeight(cost.doubleValue());
+				}
+
+				g.addEdge(edge);
+			}
+			long t2 = System.currentTimeMillis();
+			System.out.println("Tiempo de carga desde nodes.dbf y edges.dbf y generando JUNG network: " + (t2-t1) + " msecs");
+			return g;
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+
+	}
+
+
+	public String getFieldCost() {
+		return fieldCost;
+	}
+
+
+	public void setFieldCost(String fieldCost) {
+		this.fieldCost = fieldCost;
+	}
+
+
+	public Indexer getIndexer() {
+		return indexer;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/loaders/NetworkLoader.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FEdge.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FEdge.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FEdge.java	(revision 30230)
@@ -0,0 +1,113 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import edu.uci.ics.jung.graph.Vertex;
+import edu.uci.ics.jung.graph.impl.DirectedSparseEdge;
+
+public class FEdge extends DirectedSparseEdge {
+
+	private int arcID;
+	private int type;
+	private int direction;
+	private double cost1;
+	private double cost2;
+	private int idNodeOrig;
+	private int idNodeEnd;
+	private int numSoluc;
+	public FEdge(Vertex from, Vertex to) {
+		super(from, to);
+	}
+	public double getWeight() {
+		return cost1;
+	}
+	public int getArcID() {
+		return arcID;
+	}
+	public void setArcID(int arcID) {
+		this.arcID = arcID;
+	}
+	public double getCost1() {
+		return cost1;
+	}
+	public void setWeight(double cost1) {
+		this.cost1 = cost1;
+	}
+	public double getCost2() {
+		return cost2;
+	}
+	public void setCost2(double d) {
+		this.cost2 = d;
+	}
+	public int getDirection() {
+		return direction;
+	}
+	public void setDirection(int direction) {
+		this.direction = direction;
+	}
+	public int getIdNodeEnd() {
+		return idNodeEnd;
+	}
+	public void setIdNodeEnd(int idNodeEnd) {
+		this.idNodeEnd = idNodeEnd;
+	}
+	public int getIdNodeOrig() {
+		return idNodeOrig;
+	}
+	public void setIdNodeOrig(int idNodeOrig) {
+		this.idNodeOrig = idNodeOrig;
+	}
+	public int getNumSoluc() {
+		return numSoluc;
+	}
+	public void setNumSoluc(int numSoluc) {
+		this.numSoluc = numSoluc;
+	}
+	public int getType() {
+		return type;
+	}
+	public void setType(int type) {
+		this.type = type;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FEdge.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IGraph.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IGraph.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IGraph.java	(revision 30230)
@@ -0,0 +1,66 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+/**
+ * @author fjp
+ * 
+ * Grafo simple que nos permitirá trabajar en el futuro con
+ * ficheros en lugar de en memoria. Como se puede comprobar, su
+ * modelo puede ser un arrayList, o simplemente 2 tablas.
+ *
+ */
+public interface IGraph {
+	public GvNode getNodeByID(int idNode);
+	public GvEdge getEdgeByID(int idEdge);
+	public int numVertices();
+	public int numEdges();
+	
+	public EdgePair getEdgesByIdArc(int idArc);
+	
+	public void addEdge(GvEdge edge);
+	public void addNode(GvNode node);
+	public void addEdgePair(int arcId, EdgePair edgePair);
+	public void removeEdge(int idEdge);
+	public void removeNode(int idNode);
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IGraph.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkGvTableWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkGvTableWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkGvTableWriter.java	(revision 30230)
@@ -0,0 +1,337 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.writers;
+
+import java.sql.Types;
+import java.util.Hashtable;
+
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.DefaultRow;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
+import com.iver.cit.gvsig.fmap.drivers.TableDefinition;
+import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.IRowEdited;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.core.NodeGv;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+
+public class NetworkGvTableWriter extends AbstractNetworkWriter {
+	
+	private IWriter nodeWriter;
+
+	private IWriter edgeWriter;
+
+	private void createFields() {
+		// Set up fields for table nodes
+		nodeFields = new FieldDescription[3];
+		FieldDescription fieldNodeId = new FieldDescription();
+		fieldNodeId.setFieldName("NODEID");
+		fieldNodeId.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldX = new FieldDescription();
+		fieldX.setFieldName("X");
+		fieldX.setFieldType(Types.DOUBLE);
+		fieldX.setFieldDecimalCount(2);
+
+		FieldDescription fieldY = new FieldDescription();
+		fieldY.setFieldName("Y");
+		fieldY.setFieldType(Types.DOUBLE);
+		fieldY.setFieldDecimalCount(2);
+		
+		nodeFields[0] = fieldNodeId;
+		nodeFields[1] = fieldX;
+		nodeFields[2] = fieldY;
+
+		
+		// Set up fields for table edges
+		edgeFields = new FieldDescription[7];
+
+		// ID_TRAMO ORIGINAL!!!
+		FieldDescription fieldArcID = new FieldDescription();
+		fieldArcID.setFieldName("ArcID");
+		fieldArcID.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldDirection = new FieldDescription();
+		fieldDirection.setFieldName("Direction");
+		fieldDirection.setFieldType(Types.SMALLINT);
+		
+		FieldDescription fieldNodeOrigin = new FieldDescription();
+		fieldNodeOrigin.setFieldName("NodeOrigin");
+		fieldNodeOrigin.setFieldType(Types.INTEGER);
+		FieldDescription fieldNodeEnd = new FieldDescription();
+		fieldNodeEnd.setFieldName("NodeEnd");
+		fieldNodeEnd.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldType = new FieldDescription();
+		fieldType.setFieldName("Type");
+		fieldType.setFieldType(Types.SMALLINT);
+
+		FieldDescription fieldDistanceDist = new FieldDescription();
+		fieldDistanceDist.setFieldName("Dist");
+		fieldDistanceDist.setFieldType(Types.DOUBLE);
+		
+		FieldDescription fieldDistanceCost = new FieldDescription();
+		fieldDistanceCost.setFieldName("Cost");
+		fieldDistanceCost.setFieldType(Types.DOUBLE);
+		
+		edgeFields[0] = fieldArcID;
+		edgeFields[1] = fieldDirection;
+		edgeFields[2] = fieldNodeOrigin;
+		edgeFields[3] = fieldNodeEnd;
+		edgeFields[4] = fieldType;
+		edgeFields[5] = fieldDistanceDist;
+		edgeFields[6] = fieldDistanceCost;
+		
+	}
+	public void writeNetwork() throws EditionException, DriverException {
+		double distance;
+		double cost;
+		short arcType;
+		int direction;
+		int i;
+		int idNodo1, idNodo2, nodeCount, edgeCount;
+		short sentidoDigit; // => 1 en esa dirección. 0=> Al contrario. SOLO
+		// SE UTILIZA PARA LOS CALCULOS POR IDTRAMO Y
+		// PORCENTAJE
+		// PARA SABER SI ESTÁ MÁS CERCA DE UN NODO O DEL OTRO.
+
+		createFields();
+		
+		VectorialAdapter adapter = (VectorialAdapter) lyr.getSource();
+
+		try {
+			int numEntities = adapter.getShapeCount();
+			Hashtable nodeHash = new Hashtable();
+
+			SelectableDataSource sds = lyr.getRecordset();
+			
+			int senseFieldIndex = -1;
+			int distFieldIndex = -1;
+			int typeFieldIndex = -1;
+			int costFieldIndex = -1;
+			
+			if (fieldSense != null)
+				senseFieldIndex = sds.getFieldIndexByName(fieldSense);
+			if (fieldDist != null)
+				distFieldIndex = sds.getFieldIndexByName(fieldDist);
+			if (fieldType != null)
+				typeFieldIndex = sds.getFieldIndexByName(fieldType);
+			if (fieldCost != null)
+				costFieldIndex = sds.getFieldIndexByName(fieldCost);
+
+			// We create a table definition for node table.
+			ITableDefinition nodesTableDef = new TableDefinition();
+			nodesTableDef.setFieldsDesc(nodeFields);
+			nodesTableDef.setName("Nodes");
+
+			// We create a table definition for edges table.
+			ITableDefinition edgeTableDef = new TableDefinition();
+			edgeTableDef.setFieldsDesc(edgeFields);
+			edgeTableDef.setName("Edges");
+
+			nodeWriter.initialize(nodesTableDef);
+			edgeWriter.initialize(edgeTableDef);
+			
+			nodeWriter.preProcess();
+			edgeWriter.preProcess();
+			
+			edgeCount = 0;
+			nodeCount = 0; 
+			
+			NumericValue valAux = null;
+
+			for (i = 0; i < numEntities; i++) {
+				IGeometry geom = adapter.getShape(i);
+				Geometry jtsGeom = geom.toJTSGeometry();
+				Coordinate[] coords = jtsGeom.getCoordinates();
+				Coordinate c1 = coords[0];
+				Coordinate c2 = coords[coords.length - 1];
+
+				NodeGv nodeAux;
+				if (!nodeHash.containsKey(c1)) // No está.
+				{
+					idNodo1 = nodeCount++;
+					nodeAux = new NodeGv(c1, idNodo1);
+					nodeHash.put(c1, nodeAux);
+					writeNode(nodeAux);
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c1);
+				}
+				idNodo1 = nodeAux.getId().intValue();
+
+				if (!nodeHash.containsKey(c2)) // No está.
+				{
+					idNodo2 = nodeCount++;
+					nodeAux = new NodeGv(c2, idNodo2);
+					nodeHash.put(c2, nodeAux);
+					writeNode(nodeAux);
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c2);
+				}
+				idNodo2 = nodeAux.getId().intValue();
+
+				if (typeFieldIndex != -1)
+					valAux = (NumericValue) sds.getFieldValue(i, typeFieldIndex);
+				else
+					valAux = ValueFactory.createValue(0); // no hay tipo
+				arcType = valAux.shortValue();
+				// TipoTramo = DBFReadIntegerAttribute(hDBF, i, indiceCampo1);
+				
+				if (distFieldIndex != -1)
+					valAux = (NumericValue) sds.getFieldValue(i, distFieldIndex);
+				else
+					valAux = ValueFactory.createValue(jtsGeom.getLength());
+				distance = valAux.floatValue();
+				// Distancia = (float) DBFReadDoubleAttribute(hDBF, i,
+				// indiceCampo2);
+				if (costFieldIndex != -1)
+				{
+					valAux = (NumericValue) sds.getFieldValue(i, costFieldIndex);
+					cost = valAux.doubleValue();
+				}
+				else
+					cost = distance;
+				
+				direction = -1;
+
+				if (senseFieldIndex == -1)
+					direction = 3; // 3-> Doble sentido, 1-> según viene, 2 ->
+				// al revés, cualquier otro valor-> No hay
+				// arco
+				else {
+					valAux = (NumericValue) sds.getFieldValue(i,
+							senseFieldIndex);
+					direction = valAux.shortValue();
+				}
+				
+				if (direction == 3) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(i, sentidoDigit, idNodo1, idNodo2, arcType,
+							distance, cost);
+					edgeCount++;
+
+					sentidoDigit = 0;
+					writeEdge(i, sentidoDigit, idNodo2, idNodo1, arcType,
+							distance, cost);
+					edgeCount++;
+
+				}
+				if (direction == 1) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(i, sentidoDigit, idNodo1, idNodo2, arcType,
+							distance, cost);
+					edgeCount++;
+				}
+				if (direction == 2) {
+					sentidoDigit = 0;
+					writeEdge(i, sentidoDigit, idNodo2, idNodo1, arcType,
+							distance, cost);
+					edgeCount++;
+
+				}
+
+			}
+
+			nodeWriter.postProcess();
+			edgeWriter.postProcess();
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			e.printStackTrace();
+			throw new DriverException(e);
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new DriverException(e);
+		}
+
+		
+	}
+
+	private void writeEdge(int id, short sense, int idNodeOrig, int idNodeEnd,
+			short tipoTramo, double dist, double cost) throws EditionException {
+		Value[] values = new Value[edgeFields.length];
+		values[0] = ValueFactory.createValue(id);
+		values[1] = ValueFactory.createValue(sense);
+		values[2] = ValueFactory.createValue(idNodeOrig);
+		values[3] = ValueFactory.createValue(idNodeEnd);
+		values[4] = ValueFactory.createValue(tipoTramo);
+		values[5] = ValueFactory.createValue(dist);
+		values[6] = ValueFactory.createValue(cost);
+		DefaultRow myRow = new DefaultRow(values, id + "");
+		IRowEdited editedRow = new DefaultRowEdited(myRow,
+				DefaultRowEdited.STATUS_ADDED, id);
+
+		edgeWriter.process(editedRow);
+	}
+	
+	private void writeNode(NodeGv node) throws EditionException {
+		Value[] values = new Value[nodeFields.length];
+		int id = node.getId().intValue();
+		values[0] = ValueFactory.createValue(id);
+		values[1] = ValueFactory.createValue(node.getCoordinate().x);
+		values[2] = ValueFactory.createValue(node.getCoordinate().y);
+		DefaultRow myRow = new DefaultRow(values, id + "");
+		IRowEdited editedRow = new DefaultRowEdited(myRow,
+				DefaultRowEdited.STATUS_ADDED, id);
+
+		nodeWriter.process(editedRow);	
+	}
+
+	public void setEdgeWriter(IWriter edgeWriter) {
+		this.edgeWriter = edgeWriter;
+	}
+
+	public void setNodeWriter(IWriter nodeWriter) {
+		this.nodeWriter = nodeWriter;
+	}
+
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkGvTableWriter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkFileRedWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkFileRedWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkFileRedWriter.java	(revision 30230)
@@ -0,0 +1,433 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.writers;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteOrder;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import javax.imageio.stream.FileImageOutputStream;
+
+import org.cresques.cts.ICoordTrans;
+
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.drivers.DriverAttributes;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.core.NodeGv;
+import com.iver.cit.gvsig.util.SnappingCoordinateMap;
+import com.iver.utiles.swing.threads.CancellableMonitorable;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+
+/**
+ * @author fjp
+ *
+ * 
+ */
+public class NetworkFileRedWriter extends AbstractNetworkWriter {
+	File redFile;
+	CancellableMonitorable cancel;
+	private double snapTolerance = 0d;
+	public NetworkFileRedWriter() {
+		
+		// Set up fields for table nodes
+		nodeFields = new FieldDescription[3];
+		FieldDescription fieldNodeId = new FieldDescription();
+		fieldNodeId.setFieldName("NODEID");
+		fieldNodeId.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldX = new FieldDescription();
+		fieldX.setFieldName("X");
+		fieldX.setFieldType(Types.DOUBLE);
+		fieldX.setFieldDecimalCount(2);
+
+		FieldDescription fieldY = new FieldDescription();
+		fieldY.setFieldName("Y");
+		fieldY.setFieldType(Types.DOUBLE);
+		fieldY.setFieldDecimalCount(2);
+		
+		nodeFields[0] = fieldNodeId;
+		nodeFields[1] = fieldX;
+		nodeFields[2] = fieldY;
+
+		
+		// Set up fields for table edges
+		edgeFields = new FieldDescription[7];
+
+		// ID_TRAMO ORIGINAL!!!
+		FieldDescription fieldArcID = new FieldDescription();
+		fieldArcID.setFieldName("ArcID");
+		fieldArcID.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldDirection = new FieldDescription();
+		fieldDirection.setFieldName("Direction");
+		fieldDirection.setFieldType(Types.SMALLINT);
+		
+		FieldDescription fieldNodeOrigin = new FieldDescription();
+		fieldNodeOrigin.setFieldName("NodeOrigin");
+		fieldNodeOrigin.setFieldType(Types.INTEGER);
+		FieldDescription fieldNodeEnd = new FieldDescription();
+		fieldNodeEnd.setFieldName("NodeEnd");
+		fieldNodeEnd.setFieldType(Types.INTEGER);
+
+		FieldDescription fieldType = new FieldDescription();
+		fieldType.setFieldName("Type");
+		fieldType.setFieldType(Types.SMALLINT);
+
+		FieldDescription fieldDistanceDist = new FieldDescription();
+		fieldDistanceDist.setFieldName("Dist");
+		fieldDistanceDist.setFieldType(Types.DOUBLE);
+		
+		FieldDescription fieldDistanceCost = new FieldDescription();
+		fieldDistanceCost.setFieldName("Cost");
+		fieldDistanceCost.setFieldType(Types.DOUBLE);
+		
+		edgeFields[0] = fieldArcID;
+		edgeFields[1] = fieldDirection;
+		edgeFields[2] = fieldNodeOrigin;
+		edgeFields[3] = fieldNodeEnd;
+		edgeFields[4] = fieldType;
+		edgeFields[5] = fieldDistanceDist;
+		edgeFields[6] = fieldDistanceCost;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.graph.core.INetworkWriter#writeNetwork(boolean)
+	 */
+	public void writeNetwork() throws EditionException {
+		// PRIMERO VAN EL NUMERO DE TRAMOS, LUEGO EL NUMERO DE ARCOS Y LUEGO
+		// EL NUMERO DE NODOS, DESPUES
+		// IDTRAMO-SENTIDO_DIGITALIZACION-IDNODOORIGEN-IDNODODESTINO-TIPOTRAMO-DISTANCIA
+		// Y POR FIN
+		// IDNODO-Xdouble-Ydouble
+
+		// El campo sentido indica //3-> Doble sentido, 1-> según viene, 2
+		// -> al revés, cualquier otro valor-> No hay arco
+		// TipoTamo va a ser un campo numérico, entero.
+		// 0-> Autopista.
+		// 1-> Autovía.
+		// 2-> Nacional.
+		// 3-> Nacional - Comarcal.
+		// 4-> Comarcal.
+		// 5-> Otras.
+		// 6-> Ferry.
+		// 7-> Conexiones
+		// Los nombres son orientativos. Basta saber que puede haber hasta X
+		// tipos distintos de tramos, cada uno
+		// con su velocidad. Esa velocidad se fijará en la función
+		// FijaVelocidades. OJO, empezar siempre desde el 0
+
+		double distance, cost;
+		short arcType;
+		int direction;
+		int i;
+		int idNodo1, idNodo2, nodeCount, edgeCount;
+		short sentidoDigit; // => 1 en esa dirección. 0=> Al contrario. SOLO
+		// SE UTILIZA PARA LOS CALCULOS POR IDTRAMO Y
+		// PORCENTAJE
+		// PARA SABER SI ESTÁ MÁS CERCA DE UN NODO O DEL OTRO.
+		Hashtable nodeHash = null;
+		if(snapTolerance != 0d)
+			nodeHash = new SnappingCoordinateMap(snapTolerance);
+		else
+			nodeHash = new Hashtable();
+		ArrayList nodes = new ArrayList();
+
+		try {
+			if (lyr.getShapeType() != FShape.LINE) {
+				return;
+			}
+			RandomAccessFile file = new RandomAccessFile(redFile.getPath(),
+					"rw");
+			FileImageOutputStream output = new FileImageOutputStream(file);
+//			FileChannel channel = file.getChannel();
+//			MappedByteBuffer buf = channel.map(MapMode.READ_WRITE, 0,
+//					16 * 1024);
+//			buf.order(ByteOrder.LITTLE_ENDIAN);
+			output.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+
+			nodeCount = 0;
+			VectorialAdapter adapter = (VectorialAdapter) lyr.getSource();
+			adapter.start();
+			int numTramos;
+			
+			ICoordTrans ct = lyr.getCoordTrans();
+
+			numTramos = adapter.getShapeCount();
+			// Cambiamos otra vez: Escribimos primero el nº de tramos. Luego va
+			// el nº de arcos y el de nodos.
+			// buf.putInt(numTramos);
+			output.writeInt(numTramos);
+			// /////// Cambiamos el formato: primero van los arcos y luego los
+			// nodos
+			// file.writeInt(0);
+			output.writeInt(0);
+			// OJO: El numero de arcos todavía no lo sabemos, habrá que volver
+			// luego y escribir el numero correcto. Es por lo de los sentidos.
+			// Metemos 2 arcos si es doble sentido, y uno si es de un solo
+			// sentido
+
+			// Guardamos un long. Luego volveremos aquí y grabaremos el nº de
+			// nodos
+			// file.writeInt(0);
+			output.writeInt(numTramos);
+			// AHORA METEMOS LOS NOMBRES DE LOS CAMPOS. EN EL CARGA RED LOS
+			// USAREMOS PARA LEER DEL DBF.
+
+			edgeCount = 0;
+
+			SelectableDataSource sds = lyr.getRecordset();
+			int senseFieldIndex = -1;
+			int distFieldIndex = -1;
+			int typeFieldIndex = -1;
+			int costFieldIndex = -1;
+			
+			if (fieldSense != null)
+				senseFieldIndex = sds.getFieldIndexByName(fieldSense);
+			if (fieldDist != null)
+				distFieldIndex = sds.getFieldIndexByName(fieldDist);
+			if (fieldType != null)
+				typeFieldIndex = sds.getFieldIndexByName(fieldType);
+			if (fieldCost != null)
+				costFieldIndex = sds.getFieldIndexByName(fieldCost);
+
+	        DriverAttributes attr = adapter.getDriverAttributes();
+	        boolean bMustClone = false;
+	        if (attr != null)
+	        {
+	            if (attr.isLoadedInMemory())
+	            {
+	                bMustClone = attr.isLoadedInMemory();               
+	            }
+	        }
+
+			
+			NumericValue valAux = null;
+			for (i = 0; i < numTramos; i++) {
+				IGeometry geom = adapter.getShape(i);
+				if (ct != null)
+				{
+	                if (bMustClone)
+	                    geom = geom.cloneGeometry();
+	                geom.reProject(ct);
+
+				}
+				Geometry jtsGeom = geom.toJTSGeometry();
+				Coordinate[] coords = jtsGeom.getCoordinates();
+				Coordinate c1 = coords[0];
+				Coordinate c2 = coords[coords.length - 1];
+				
+				NodeGv nodeAux;
+				if (!nodeHash.containsKey(c1)) // No está.
+				{
+					idNodo1 = nodeCount++;
+					nodeAux = new NodeGv(c1, idNodo1);
+					nodeHash.put(c1, nodeAux);
+					nodes.add(nodeAux);
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c1);
+				}
+				idNodo1 = nodeAux.getId().intValue();
+
+				if (!nodeHash.containsKey(c2)) // No está.
+				{
+					idNodo2 = nodeCount++;
+					nodeAux = new NodeGv(c2, idNodo2);
+					nodeHash.put(c2, nodeAux);
+					nodes.add(nodeAux);
+
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c2);
+				}
+				idNodo2 = nodeAux.getId().intValue();
+
+				if (typeFieldIndex != -1)
+					valAux = (NumericValue) sds.getFieldValue(i, typeFieldIndex);
+				else
+					valAux = ValueFactory.createValue(0); // no hay tipo
+				arcType = valAux.shortValue();
+				// TipoTramo = DBFReadIntegerAttribute(hDBF, i, indiceCampo1);
+				
+				if (distFieldIndex != -1)
+					valAux = (NumericValue) sds.getFieldValue(i, distFieldIndex);
+				else
+					valAux = ValueFactory.createValue(jtsGeom.getLength());
+				distance = valAux.floatValue();
+				// Distancia = (float) DBFReadDoubleAttribute(hDBF, i,
+				// indiceCampo2);
+				if (costFieldIndex != -1)
+				{
+					valAux = (NumericValue) sds.getFieldValue(i, costFieldIndex);
+					cost = valAux.doubleValue();
+				}
+				else
+					cost = distance;
+				
+				
+
+				direction = -1;
+
+				if (senseFieldIndex == -1)
+					direction = 3; // 3-> Doble sentido, 1-> según viene, 2 ->
+				// al revés, cualquier otro valor-> No hay
+				// arco
+				else {
+					valAux = (NumericValue) sds.getFieldValue(i,
+							senseFieldIndex);
+					direction = valAux.shortValue();
+				}
+
+				if (direction == 3) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(output, i, sentidoDigit, idNodo1, idNodo2, arcType,
+							distance, cost);
+					edgeCount++;
+
+					sentidoDigit = 0;
+					writeEdge(output, i, sentidoDigit, idNodo2, idNodo1, arcType,
+							distance, cost);
+					edgeCount++;
+
+				}
+				if (direction == 1) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(output, i, sentidoDigit, idNodo1, idNodo2, arcType,
+							distance, cost);
+					edgeCount++;
+				}
+				if (direction == 2) {
+					sentidoDigit = 0;
+					writeEdge(output, i, sentidoDigit, idNodo2, idNodo1, arcType,
+							distance, cost);
+					edgeCount++;
+
+				}
+				
+				if(cancel != null){
+					cancel.reportStep();
+					
+				}
+			}//for
+
+
+			for (int j=0; j < nodes.size(); j++) {
+				NodeGv node = (NodeGv) nodes.get(j);
+				output.writeInt(node.getId().intValue());
+				output.writeDouble(node.getCoordinate().x);
+				output.writeDouble(node.getCoordinate().y);
+			}
+
+			output.seek(0);
+			// buf.position(0);
+			output.writeInt(numTramos);
+			output.writeInt(edgeCount);
+			output.writeInt(nodes.size());
+
+			// buf.force();
+			output.close();
+			file.close();
+			
+			adapter.stop();
+			
+			cancel.setCurrentStep(cancel.getFinalStep());
+
+			return ;
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			e.printStackTrace();
+			throw new EditionException(e);
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+			throw new EditionException(e);
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new EditionException(e);
+		} catch (DriverException e) {		
+			e.printStackTrace();
+			throw new EditionException(e);
+		}
+	}
+
+
+	public void setCancellableMonitorable(CancellableMonitorable cancel) {
+		this.cancel = cancel;
+		
+	}
+
+	public void setRedFile(File redFile) {
+		this.redFile = redFile;
+		
+	}
+
+	private void writeEdge(FileImageOutputStream output, int id, short sense,
+			int idNodeOrig, int idNodeEnd, short tipoTramo, double dist, double cost)
+			throws IOException {
+		output.writeInt(id);
+		output.writeInt(sense);
+
+		output.writeInt(idNodeOrig);
+		output.writeInt(idNodeEnd);
+		output.writeInt(tipoTramo);
+		output.writeDouble(dist);
+		output.writeDouble(cost);
+
+	}
+
+	public void setSnapTolerance(double snapTolerance) {
+		this.snapTolerance = snapTolerance;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkFileRedWriter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkJdbcWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkJdbcWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkJdbcWriter.java	(revision 30230)
@@ -0,0 +1,298 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.writers;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Hashtable;
+
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.core.NodeGv;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+
+public class NetworkJdbcWriter extends AbstractNetworkWriter {
+
+	private Connection conn;
+	private ResultSet rsNodes;
+	private ResultSet rsEdges;
+
+	private void createTables() throws SQLException {
+		Statement stCreate = conn.createStatement();
+		int indexPoint = lyr.getName().indexOf('.');
+		String layerName;
+		if (indexPoint == -1)
+			layerName = lyr.getName();
+		else
+			layerName = lyr.getName().substring(0, indexPoint);
+		
+		try {
+			stCreate.execute("DROP TABLE " + layerName + "_nodes;");
+		} catch (SQLException e1) {
+			// Si no existe la tabla, no hay que borrarla.
+		}
+		try {
+			stCreate.execute("DROP TABLE " + layerName + "_edges;");
+		} catch (SQLException e1) {
+			// Si no existe la tabla, no hay que borrarla.
+		}
+
+		stCreate.execute("CREATE TABLE " + layerName
+				+ "_nodes (NODEID int4, X float8, Y float8);");
+		stCreate.execute("ALTER TABLE "
+						+ layerName
+						+ "_nodes MODIFY COLUMN NODEID INTEGER, ADD PRIMARY KEY(NODEID);");
+		stCreate.execute("CREATE TABLE "
+						+ layerName
+						+ "_edges (EdgeId int4, ArcID int4, Direction int2, NodeOrigin int4, "
+						+ "NodeEnd int4, Type int4, Dist float8, Cost float8);");
+		stCreate.execute("ALTER TABLE "
+						+ layerName
+						+ "_edges MODIFY COLUMN EdgeId INTEGER, ADD PRIMARY KEY(EdgeId);");
+
+		conn.setAutoCommit(false);
+		conn.commit();
+		// conn.setAutoCommit(true);
+
+		Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+				ResultSet.CONCUR_UPDATABLE);
+		rsNodes = st.executeQuery("SELECT * FROM " + layerName + "_nodes;");
+		if (rsNodes.getConcurrency() != ResultSet.CONCUR_UPDATABLE) {
+			System.err.println("Error: No se puede editar la tabla nodes");
+			return;
+		}
+		Statement st2 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+				ResultSet.CONCUR_UPDATABLE);
+
+		rsEdges = st2.executeQuery("SELECT * FROM " + layerName + "_edges;");
+
+	}
+
+	public void writeNetwork() throws EditionException, DriverException {
+		try {
+			createTables();
+			
+			conn.setAutoCommit(false);
+			
+			double distance;
+			double cost;
+			short arcType;
+			int direction;
+			int i;
+			int idNodo1, idNodo2, nodeCount, edgeCount;
+			short sentidoDigit; // => 1 en esa dirección. 0=> Al contrario. SOLO
+			// SE UTILIZA PARA LOS CALCULOS POR IDTRAMO Y
+			// PORCENTAJE
+			// PARA SABER SI ESTÁ MÁS CERCA DE UN NODO O DEL OTRO.
+
+			VectorialAdapter adapter = (VectorialAdapter) lyr.getSource();
+
+			int numEntities = adapter.getShapeCount();
+			Hashtable nodeHash = new Hashtable();
+			SelectableDataSource sds = lyr.getRecordset();
+
+			int senseFieldIndex = -1;
+			int distFieldIndex = -1;
+			int typeFieldIndex = -1;
+			int costFieldIndex = -1;
+
+			if (fieldSense != null)
+				senseFieldIndex = sds.getFieldIndexByName(fieldSense);
+			if (fieldDist != null)
+				distFieldIndex = sds.getFieldIndexByName(fieldDist);
+			if (fieldType != null)
+				typeFieldIndex = sds.getFieldIndexByName(fieldType);
+			if (fieldCost != null)
+				costFieldIndex = sds.getFieldIndexByName(fieldCost);
+
+			edgeCount = 0;
+			nodeCount = 0;
+
+			NumericValue valAux = null;
+
+			for (i = 0; i < numEntities; i++) {
+				IGeometry geom = adapter.getShape(i);
+				Geometry jtsGeom = geom.toJTSGeometry();
+				Coordinate[] coords = jtsGeom.getCoordinates();
+				Coordinate c1 = coords[0];
+				Coordinate c2 = coords[coords.length - 1];
+
+				NodeGv nodeAux;
+				if (!nodeHash.containsKey(c1)) // No está.
+				{
+					idNodo1 = nodeCount++;
+					nodeAux = new NodeGv(c1, idNodo1);
+					nodeHash.put(c1, nodeAux);
+					writeNode(nodeAux);
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c1);
+				}
+				idNodo1 = nodeAux.getId().intValue();
+
+				if (!nodeHash.containsKey(c2)) // No está.
+				{
+					idNodo2 = nodeCount++;
+					nodeAux = new NodeGv(c2, idNodo2);
+					nodeHash.put(c2, nodeAux);
+					writeNode(nodeAux);
+				} else {
+					nodeAux = (NodeGv) nodeHash.get(c2);
+				}
+				idNodo2 = nodeAux.getId().intValue();
+
+				if (typeFieldIndex != -1)
+					valAux = (NumericValue) sds
+							.getFieldValue(i, typeFieldIndex);
+				else
+					valAux = ValueFactory.createValue(0); // no hay tipo
+				arcType = valAux.shortValue();
+				// TipoTramo = DBFReadIntegerAttribute(hDBF, i, indiceCampo1);
+
+				if (distFieldIndex != -1)
+					valAux = (NumericValue) sds
+							.getFieldValue(i, distFieldIndex);
+				else
+					valAux = ValueFactory.createValue(jtsGeom.getLength());
+				distance = valAux.floatValue();
+				// Distancia = (float) DBFReadDoubleAttribute(hDBF, i,
+				// indiceCampo2);
+				if (costFieldIndex != -1) {
+					valAux = (NumericValue) sds
+							.getFieldValue(i, costFieldIndex);
+					cost = valAux.doubleValue();
+				} else
+					cost = distance;
+
+				direction = -1;
+
+				if (senseFieldIndex == -1)
+					direction = 3; // 3-> Doble sentido, 1-> según viene, 2 ->
+				// al revés, cualquier otro valor-> No hay
+				// arco
+				else {
+					valAux = (NumericValue) sds.getFieldValue(i,
+							senseFieldIndex);
+					direction = valAux.shortValue();
+				}
+
+				if (direction == 3) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(edgeCount, i, sentidoDigit, idNodo1, idNodo2,
+							arcType, distance, cost);
+					edgeCount++;
+
+					sentidoDigit = 0;
+					writeEdge(edgeCount, i, sentidoDigit, idNodo2, idNodo1,
+							arcType, distance, cost);
+					edgeCount++;
+
+				}
+				if (direction == 1) {
+					sentidoDigit = 1; // En esa dirección
+					writeEdge(edgeCount, i, sentidoDigit, idNodo1, idNodo2,
+							arcType, distance, cost);
+					edgeCount++;
+				}
+				if (direction == 2) {
+					sentidoDigit = 0;
+					writeEdge(edgeCount, i, sentidoDigit, idNodo2, idNodo1,
+							arcType, distance, cost);
+					edgeCount++;
+
+				}
+
+			}
+			conn.commit();
+
+		} catch (SQLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			e.printStackTrace();
+			throw new DriverException(e);
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new DriverException(e);
+		}
+
+	}
+
+	private void writeEdge(int edgeId, int id, short sense, int idNodeOrig,
+			int idNodeEnd, short tipoTramo, double dist, double cost) throws SQLException
+			 {
+		rsEdges.moveToInsertRow();
+		rsEdges.updateInt(1, edgeId);
+		rsEdges.updateInt(2, id);
+		rsEdges.updateInt(3, sense);
+		rsEdges.updateInt(4, idNodeOrig);
+		rsEdges.updateInt(5, idNodeEnd);
+		rsEdges.updateInt(6, tipoTramo);
+		rsEdges.updateDouble(7, dist);
+		rsEdges.updateDouble(8, cost);
+		rsEdges.insertRow();
+//		System.out.println("writing edge " + edgeId);
+	}
+
+	private void writeNode(NodeGv node) throws SQLException {
+		rsNodes.moveToInsertRow();
+		int id = node.getId().intValue();
+		rsNodes.updateInt(1, id);
+		rsNodes.updateDouble(2, node.getCoordinate().x);
+		rsNodes.updateDouble(3, node.getCoordinate().y);
+		rsNodes.insertRow();		
+//		System.out.println("writing node " + id);
+
+	}
+
+	public void setConnection(Connection conn) {
+		this.conn = conn;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/NetworkJdbcWriter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/AbstractNetworkWriter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/AbstractNetworkWriter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/AbstractNetworkWriter.java	(revision 30230)
@@ -0,0 +1,99 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core.writers;
+
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.graph.core.INetworkWriter;
+
+public abstract class AbstractNetworkWriter implements INetworkWriter {
+
+	protected FLyrVect lyr;
+	protected String fieldType;
+	protected String fieldDist;
+	protected String fieldCost;
+	protected String fieldSense;
+	protected FieldDescription[] nodeFields;
+	protected FieldDescription[] edgeFields;
+
+	public FLyrVect getLayer() {
+		return lyr;
+	}
+
+	public void setLayer(FLyrVect lyr) {
+		this.lyr = lyr;
+	}
+
+	public String getFieldCost() {
+		return fieldCost;
+	}
+
+	public void setFieldCost(String fieldCost) {
+		this.fieldCost = fieldCost;
+	}
+
+	public String getFieldDist() {
+		return fieldDist;
+	}
+
+	public void setFieldDist(String fieldDist) {
+		this.fieldDist = fieldDist;
+	}
+
+	public String getFieldSense() {
+		return fieldSense;
+	}
+
+	public void setFieldSense(String fieldSense) {
+		this.fieldSense = fieldSense;
+	}
+
+	public String getFieldType() {
+		return fieldType;
+	}
+
+	public void setFieldType(String fieldType) {
+		this.fieldType = fieldType;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/writers/AbstractNetworkWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgeWeightLabeller.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgeWeightLabeller.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgeWeightLabeller.java	(revision 30230)
@@ -0,0 +1,66 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import edu.uci.ics.jung.graph.ArchetypeEdge;
+import edu.uci.ics.jung.graph.decorators.NumberEdgeValue;
+
+/**
+ * @author fjp
+ * Suponemos que edge es de tipo FEdge, que extiendo ArchetypeEdge
+ *
+ */
+public class EdgeWeightLabeller implements NumberEdgeValue {
+		
+	public Number getNumber(ArchetypeEdge e) {
+		FEdge fe = (FEdge) e;
+		double weight = fe.getWeight();
+		return new Double(weight);
+	}
+
+	public void setNumber(ArchetypeEdge e, Number n) {
+		FEdge fe = (FEdge) e;
+		fe.setWeight(n.doubleValue());
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgeWeightLabeller.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgePair.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgePair.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgePair.java	(revision 30230)
@@ -0,0 +1,66 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+public class EdgePair {
+	int idEdge = -1;
+	int idInverseEdge = -1;
+//	int idArc;
+//	
+//	public EdgePair(int idArc) {
+//		this.idArc = idArc;
+//	}
+	public int getIdEdge() {
+		return idEdge;
+	}
+	public void setIdEdge(int idEdge) {
+		this.idEdge = idEdge;
+	}
+	public int getIdInverseEdge() {
+		return idInverseEdge;
+	}
+	public void setIdInverseEdge(int idInverseEdge) {
+		this.idInverseEdge = idInverseEdge;
+	}
+	
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/EdgePair.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/NodeGv.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/NodeGv.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/NodeGv.java	(revision 30230)
@@ -0,0 +1,68 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import com.vividsolutions.jts.geom.Coordinate;
+
+public class NodeGv {
+
+	private Integer id;
+	private Coordinate c;
+	public NodeGv(Coordinate pt, int id) {
+		c = pt;
+		this.id = new Integer(id);
+	}
+	public Coordinate getCoordinate() {
+		return c;
+	}
+	public void setCoordinate(Coordinate c) {
+		this.c = c;
+	}
+	public Integer getId() {
+		return id;
+	}
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/NodeGv.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvNode.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvNode.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvNode.java	(revision 30230)
@@ -0,0 +1,162 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.util.ArrayList;
+
+public class GvNode {
+	public final static int statNotInList = 0;
+	public final static int statNowInList = 1;
+	public final static int statWasInList = 2;
+	private int idNode;
+	private double x;
+	private double y;
+	
+	int from_link = -1; // id del Arco desde el que hemos llegado
+	int   numSoluc = 0; // Empezamos con esto a cero en toda la red. 
+					// De manera global, habrá una variable numSolucGlobal que indica el nº de cada petición de ruta.
+					// Sirve para no tener que inicializar siempre tooooda la red. Lo que hacemos es comparar el 
+					// nº de petición global con este. Si no coinciden, antes de hacer nada hay que inicializar su
+					// best_cost a infinito.
+
+	double best_cost = Double.MAX_VALUE;
+	double accumulatedLength = 0;
+	double stimation = Double.MAX_VALUE; // bestCost + algo relacionado con la distancia al destino
+	int status;
+	ArrayList enlaces  = new ArrayList(); // Enlaces con los vecinos
+	ArrayList giros = new ArrayList(); // Costes de los giros. Si existe un CGiro, miraremos su coste y lo añadimos.
+						  // Si es negativo, suponemos que es un giro prohibido.
+
+	public GvNode() {
+		initialize();
+	}
+	
+	public void initialize() {
+		numSoluc = AbstractNetSolver.numSolucGlobal;
+		from_link = -1;
+		best_cost = Double.MAX_VALUE;
+		stimation = Double.MAX_VALUE;
+		accumulatedLength = 0;
+		status = statNotInList;
+
+	}
+	
+	public int getIdNode() {
+		return idNode;
+	}
+	public void setIdNode(int idNode) {
+		this.idNode = idNode;
+	}
+	public double getX() {
+		return x;
+	}
+	public void setX(double x) {
+		this.x = x;
+	}
+	public double getY() {
+		return y;
+	}
+	public void setY(double y) {
+		this.y = y;
+	}
+	public double getBestCost() {
+		return best_cost;
+	}
+	public void setBestCost(double best_cost) {
+		this.best_cost = best_cost;
+	}
+	public ArrayList getEnlaces() {
+		return enlaces;
+	}
+	public void setEnlaces(ArrayList enlaces) {
+		this.enlaces = enlaces;
+	}
+	public double getStimation() {
+		return stimation;
+	}
+	public void setStimation(double estimacion) {
+		this.stimation = estimacion;
+	}
+	public int getFromLink() {
+		return from_link;
+	}
+	public void setFromLink(int from_link) {
+		this.from_link = from_link;
+	}
+	public ArrayList getTurns() {
+		return giros;
+	}
+	public void setTurns(ArrayList turns) {
+		this.giros = turns;
+	}
+	public int getNumSoluc() {
+		return numSoluc;
+	}
+	public void setNumSoluc(int numSoluc) {
+		this.numSoluc = numSoluc;
+	}
+	public int getStatus() {
+		return status;
+	}
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public void calculateStimation(GvNode finalNode, double newCost) {
+		double DeltaX = ((finalNode.getX() - x)/1000.0)*((finalNode.getX() - x)/1000.0);
+		double DeltaY = ((finalNode.getY() - y)/1000.0)*((finalNode.getY() - y)/1000.0);
+		double distLineaRecta = Math.sqrt(DeltaX + DeltaY); // En Km
+		stimation = newCost + (distLineaRecta* 30.0);  // Segundos que tardamos en recorrer esos Km a 120 Km/hora
+
+		
+	}
+
+	public double getAccumulatedLength() {
+		return accumulatedLength;
+	}
+
+	public void setAccumulatedLength(double accumulatedLength) {
+		this.accumulatedLength = accumulatedLength;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvNode.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungGraph.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungGraph.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungGraph.java	(revision 30230)
@@ -0,0 +1,110 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.util.ArrayList;
+
+import edu.uci.ics.jung.graph.Vertex;
+import edu.uci.ics.jung.graph.impl.AbstractSparseGraph;
+
+public class JungGraph extends AbstractSparseGraph {
+	// Estamos obligados a mantener una lista privada porque los nodos
+	// y los edges en Jung se numeran incrementando una variable
+	// estática (ver nextGlobalEdgeId, en AbstractSparseEdge)
+	// TODO: NO heredar de AbstractSparseGraph, sino copiar y pegar código.
+	// de esta forma quizás obtengamos una clase de jung, pero mucho más rápida y
+	// eficiente en consumo de memoria. Y compatible por completo con IGraph
+	private ArrayList myVertexList;
+	private ArrayList myEdgeList;
+	public JungGraph(IGraph g) {
+		super();
+		long t1 = System.currentTimeMillis();
+		myVertexList = new ArrayList(g.numVertices());
+		myEdgeList = new ArrayList(g.numEdges());
+		for (int i=0; i < g.numVertices(); i++)
+		{
+			GvNode n = g.getNodeByID(i);
+			FNode v = new FNode(i, n.getX(), n.getY());
+			addVertex(v);
+			myVertexList.add(v);
+			
+		}
+		for (int i=0; i < g.numEdges(); i++)
+		{
+			GvEdge e = g.getEdgeByID(i);
+			Vertex vFrom = getVertexByID(e.getIdNodeOrig()); // (Vertex) indexer.getVertex(e.getIdNodeOrig());
+			Vertex vTo = getVertexByID(e.getIdNodeEnd()); //indexer.getVertex(e.getIdNodeEnd());
+			
+			FEdge edge = new FEdge(vFrom, vTo);
+			edge.setArcID(e.getIdArc());
+			edge.setDirection(e.getDirec());
+			edge.setIdNodeOrig(e.getIdNodeOrig());
+			edge.setIdNodeEnd(e.getIdNodeEnd());
+			edge.setType(e.getType());
+			edge.setWeight(e.getDistance());
+			edge.setCost2(e.getWeight());
+			
+			addEdge(edge);
+			myEdgeList.add(edge);
+		}
+		long t2 = System.currentTimeMillis();
+		System.out.println("Tiempo de carga copiando desde IGraph a JUNG network: " + (t2-t1) + " msecs");
+		
+	}
+	
+	public FNode getVertexByID(int idNode) {
+		
+		return (FNode) myVertexList.get(idNode);
+	}
+
+	public FEdge getEdgeByID(int idEdge) {
+		return (FEdge) myEdgeList.get(idEdge);
+	}
+
+//	public EdgePair getEdgesByIdArc(int idArc) {
+//		// TODO Auto-generated method stub
+//		return null;
+//	}
+	
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungGraph.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvTurn.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvTurn.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvTurn.java	(revision 30230)
@@ -0,0 +1,67 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+public class GvTurn {
+	private int idArcFrom;
+	private int idArcTo;
+	private double cost;
+	public double getCost() {
+		return cost;
+	}
+	public void setCost(double cost) {
+		this.cost = cost;
+	}
+	public int getIdArcFrom() {
+		return idArcFrom;
+	}
+	public void setIdArcFrom(int idArcFrom) {
+		this.idArcFrom = idArcFrom;
+	}
+	public int getIdArcTo() {
+		return idArcTo;
+	}
+	public void setIdArcTo(int idArcTo) {
+		this.idArcTo = idArcTo;
+	}
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/GvTurn.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/TurnUtil.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/TurnUtil.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/TurnUtil.java	(revision 30230)
@@ -0,0 +1,156 @@
+/*
+ * Created on 20-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-10-26 11:42:42  fjp
+* Ya pita, ya.
+*
+* Revision 1.3  2006/10/25 15:51:20  fjp
+* por terminar lo de los giros
+*
+* Revision 1.2  2006/10/23 18:51:42  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/20 19:54:01  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.core;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.vividsolutions.jts.algorithm.CGAlgorithms;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.LineSegment;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+public class TurnUtil {
+	public static final int TURN_RIGHT = 0;
+	public static final int TURN_LEFT = 1;
+	public static final int GO_STRAIGH_ON = 2;
+	public static final int TURN_U = 4;
+	
+	
+	public static boolean checkIsLine(Geometry geometry){
+		if(geometry instanceof LineString || geometry instanceof MultiLineString)
+			return true;
+		else
+			return false;
+		
+	}	
+	
+	
+	
+	public static final int getDirection(IFeature feature1, IFeature feature2){
+		Geometry geom1 = feature1.getGeometry().toJTSGeometry();
+		Geometry geom2 = feature2.getGeometry().toJTSGeometry();
+		if(!checkIsLine(geom1))
+			return -1;
+		if(!checkIsLine(geom2))
+			return -1;
+	    Coordinate[] coords1 = geom1.getCoordinates();
+	    Coordinate p0 = coords1[coords1.length -2];
+	    Coordinate p1 = coords1[coords1.length -1];
+	    Coordinate[] coords2 = geom2.getCoordinates();
+	    Coordinate p2 = coords2[1];
+	    
+	     double deegreeAngle = angle(p0, p1, p2);
+	         
+	     if(Math.abs(deegreeAngle) <= 30)
+	    	 return GO_STRAIGH_ON;
+	     else if(deegreeAngle > 180)
+	    	 return TURN_LEFT;
+	     else
+	    	 return TURN_RIGHT;
+	}	
+	public static double angle(Coordinate c1, Coordinate c2, Coordinate c3) {
+		double resul = 0.0;
+		// Normalizamos:
+		Coordinate origin = new Coordinate(0.0, 0.0);
+		Coordinate cAux1 = new Coordinate(c2.x-c1.x, c2.y-c1.y);
+		Coordinate cAux2 = new Coordinate(c3.x-c2.x, c3.y-c2.y);
+		LineSegment v1 = new LineSegment(origin, cAux1);
+		LineSegment v2 = new LineSegment(origin, cAux2);
+		double prodEscalar = cAux1.x*cAux2.x + cAux1.y*cAux2.y;
+		double cosAlpha = prodEscalar / (v1.getLength() * v2.getLength()) ; 
+		resul = Math.toDegrees(Math.acos(cosAlpha));
+		
+        if (cAux1.x * cAux2.y > cAux1.y * cAux2.x) {
+            resul = 360 - resul;
+        }
+
+//		System.out.println("angulo = " + resul);
+		return resul;
+	}
+	
+	/**
+	 * 
+	 * Code extracted from JUMP
+	 * 
+	   * Returns the angle between two vectors.
+	   * @param a1 the angle of one vector, between -Pi and Pi
+	   * @param a2 the angle of the other vector, between -Pi and Pi
+	   * @return the angle (in radians) between the two vectors, between 0 and Pi
+	   */
+//	  public static double diff(double a1, double a2) {
+//	      double da;
+//
+//	      if (a1 < a2) {
+//	          da = a2 - a1;
+//	      } else {
+//	          da = a1 - a2;
+//	      }
+//
+//	      if (da > Math.PI) {
+//	          da = (2 * Math.PI) - da;
+//	      }
+//	      return da;
+//	  }
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/TurnUtil.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IFlagListener.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IFlagListener.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IFlagListener.java	(revision 30230)
@@ -0,0 +1,59 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+/**
+ * @author fjp
+ * Util para avisar de un cambio en los flags (añadido, borrado
+ * cambio de orden....). Los listener (el manager, por ejemplo)
+ * tendrán que refrescar su contenido y redibujar el graphics
+ * del mapcontrol
+ */
+public interface IFlagListener {
+	public final static int FLAG_ADDED = 0;
+	public final static int FLAG_REMOVED = 1;
+	public final static int FLAG_REORDER = 2;
+	public final static int FLAG_MANY_CHANGES = 3;
+	
+	void flagsChanged(int reason);
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/IFlagListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkLoader.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkLoader.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkLoader.java	(revision 30230)
@@ -0,0 +1,49 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+
+public interface INetworkLoader {
+	IGraph loadNetwork();
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetworkLoader.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/Network.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/Network.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/Network.java	(revision 30230)
@@ -0,0 +1,952 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.CancelationException;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.LineSegment;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+public class Network {
+	protected FLyrVect lyrVect;
+
+	protected IGraph graph;
+
+	protected ArrayList flags = new ArrayList();
+
+	protected int numOriginalEdges;
+
+	protected int numOriginalNodes;
+
+	private ArrayList modifiedCosts = new ArrayList();
+	private ArrayList flagListeners = new ArrayList();
+	private boolean dispatching = true;
+
+	private Hashtable velocities = null;
+
+	public void reconstruyeTramo(int idArc) {
+		GvNode pN1;
+		int i;
+		
+		// Si encontramos un enlace con idEdge >= numOriginalEdges, lo cambiamos.
+		// Y CON ESE IDarc!!
+		// Si hay varios, no pasa nada, volvemos a llamar a esta función con IdTramo
+
+		EdgePair edgePair = graph.getEdgesByIdArc(idArc);
+		if (edgePair.getIdEdge() != -1)
+		{
+			// Restauramos los enlaces de los nodos de ese tramo.
+//			pN1 = &Nodos[Arcos[IndiceArcos[idTramo].idArco].idNodo1];
+//			pN2 = &Nodos[Arcos[IndiceArcos[idTramo].idArco].idNodo2];
+			GvEdge edge = graph.getEdgeByID(edgePair.getIdEdge());
+			pN1 = graph.getNodeByID(edge.getIdNodeOrig());
+
+			// Metemos idArco en los enlaces de Nodo1
+			for (i=0; i< pN1.getEnlaces().size(); i++)
+			{
+				GvEdge auxEdge = (GvEdge) pN1.getEnlaces().get(i);
+				if (auxEdge.getIdArc() == idArc)
+				{
+					if (auxEdge.getIdEdge() >= numOriginalEdges) 
+					{
+						pN1.getEnlaces().set(i, graph.getEdgeByID(edgePair.getIdEdge()));
+						break;
+					}
+				}
+			}
+		}
+
+		if (edgePair.idInverseEdge != -1)
+		{
+//			pN1 = &Nodos[Arcos[IndiceArcos[idTramo].idContraArco].idNodo1];
+//			pN2 = &Nodos[Arcos[IndiceArcos[idTramo].idContraArco].idNodo2];
+			GvEdge edge = graph.getEdgeByID(edgePair.getIdInverseEdge());
+			pN1 = graph.getNodeByID(edge.getIdNodeOrig());
+
+			for (i=0; i< pN1.getEnlaces().size(); i++)
+			{
+				if (edge.getIdArc() == idArc)
+				{
+					GvEdge auxEdge = (GvEdge) pN1.getEnlaces().get(i);
+					if (auxEdge.getIdEdge() >= numOriginalEdges) 
+					{
+						pN1.getEnlaces().set(i, graph.getEdgeByID(edgePair.getIdInverseEdge()));
+						break;
+					}
+				}
+			}
+		}
+
+		int numEdges = graph.numEdges();
+		int numNodes = graph.numVertices();
+		for (int idEdge = numEdges-1; idEdge >= numOriginalEdges; idEdge--)
+		{
+			graph.removeEdge(idEdge);
+		}
+		for (int idNode = numNodes-1; idNode >= numOriginalNodes; idNode--)
+		{
+			graph.removeNode(idNode);
+		}
+
+	}
+
+	/**
+	 * Closest ID to this point. -1 if out from tolerance.
+	 * @param x
+	 * @param y
+	 * @param tolerance
+	 * @param nearest. Point to receive the nearest point ON arc.
+	 * @return
+	 */
+	public int findClosestArc(double x, double y, double tolerance, Point2D nearestPoint) {
+		Point2D p = new Point2D.Double(x, y);
+		FBitSet bitSet;
+		try {
+			bitSet = lyrVect.queryByPoint(p, tolerance);
+			VectorialAdapter va = (VectorialAdapter) lyrVect.getSource();
+			va.start();
+			double minDist = tolerance;
+			int foundGeom = -1;
+			for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet
+					.nextSetBit(i + 1)) {
+				IGeometry geom;
+				geom = va.getShape(i);
+				Point2D nearest = getNearestPoint(p, geom, tolerance);
+				if (nearest != null) {
+					double dist = nearest.distance(p);
+					if (dist < minDist) {
+						minDist = dist;
+						foundGeom = i;
+						nearestPoint.setLocation(nearest);
+					}
+				}
+			}
+			va.stop();
+			return foundGeom;
+		} catch (DriverException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (DriverIOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return -1;
+
+	}
+
+	protected Point2D getNearestPoint(Point2D point, IGeometry geom,
+			double tolerance) {
+		Point2D resul = null;
+		Coordinate c = new Coordinate(point.getX(), point.getY());
+
+		PathIterator theIterator = geom.getPathIterator(null,
+				FConverter.FLATNESS); // polyLine.getPathIterator(null,
+										// flatness);
+		double[] theData = new double[6];
+		double minDist = tolerance;
+		Coordinate from = null, first = null;
+		while (!theIterator.isDone()) {
+			// while not done
+			int theType = theIterator.currentSegment(theData);
+
+			switch (theType) {
+			case PathIterator.SEG_MOVETO:
+				from = new Coordinate(theData[0], theData[1]);
+				first = from;
+				break;
+
+			case PathIterator.SEG_LINETO:
+
+				// System.out.println("SEG_LINETO");
+				Coordinate to = new Coordinate(theData[0], theData[1]);
+				LineSegment line = new LineSegment(from, to);
+				Coordinate closestPoint = line.closestPoint(c);
+				double dist = c.distance(closestPoint);
+				if ((dist < minDist)) {
+					resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+					minDist = dist;
+				}
+
+				from = to;
+				break;
+			case PathIterator.SEG_CLOSE:
+				line = new LineSegment(from, first);
+				closestPoint = line.closestPoint(c);
+				dist = c.distance(closestPoint);
+				if ((dist < minDist)) {
+					resul = new Point2D.Double(closestPoint.x, closestPoint.y);
+					minDist = dist;
+				}
+
+				from = first;
+				break;
+
+			} // end switch
+
+			theIterator.next();
+		}
+
+		return resul;
+	}
+
+	/**
+	 * TODO: POR TERMINAR!!!
+	 * 
+	 * @param flag
+	 * @return
+	 */
+	public int creaArcosVirtuales(GvFlag flag) {
+		// Devuelve el idNodo del nodo virtual creado.
+		/*
+		 * 0.- Creamos el nuevo Nodo virtual. 1.- Recorremos los arcos nuevos
+		 * mirando su idTramo. 2.- Si existe ese idtramo=> Ya hemos partido
+		 * antes ese idTramo. Buscamos el arco virtual que contiene ese nodo y
+		 * lo partimos. Ojo, recorrer hasta el final los tramos para asegurarnos
+		 * de que es el trozo más pequeño. 3.- Si NO existe, utilizamos el
+		 * IndiceArcos para coger los arcos que toca y partirlos.
+		 * 
+		 * 4.- OJO: Si el porcentaje es 0 ó 100, no partimos el arco, devolvemos
+		 * el id del nodo que toca.
+		 */
+		// NUEVO: 20/7/2004:
+		// Cuando trabajamos con sentidos, al partir un arco no podemos insertar
+		// 2 nuevos sin mirar
+		// si es o no de un único sentido.) (Mirar idArco. Si es -1, no partimos
+		// el arco).
+		// FIN NUEVO
+		int idNodo1, idNodo2;
+		int idArco, elIdArco, elIdContraArco;
+		boolean encontrado;
+		GvNode newNode;
+
+		// Sacamos los idNodos del tramo
+		EdgePair edgePair = graph.getEdgesByIdArc(flag.getIdArc());
+		if (edgePair.getIdEdge() != -1) {
+			// idNodo1 = Arcos[IndiceArcos[idTramo].idArco].idNodo1;
+			// idNodo2 = Arcos[IndiceArcos[idTramo].idArco].idNodo2;
+			idNodo1 = graph.getEdgeByID(edgePair.getIdEdge()).getIdNodeOrig();
+			idNodo2 = graph.getEdgeByID(edgePair.getIdEdge()).getIdNodeEnd();
+
+		} else {
+			// idNodo2 = Arcos[IndiceArcos[idTramo].idContraArco].idNodo1;
+			// idNodo1 = Arcos[IndiceArcos[idTramo].idContraArco].idNodo2;
+			idNodo2 = graph.getEdgeByID(edgePair.getIdInverseEdge())
+					.getIdNodeOrig();
+			idNodo1 = graph.getEdgeByID(edgePair.getIdInverseEdge())
+					.getIdNodeEnd();
+
+		}
+
+		if (flag.getPct() == 0)
+			return idNodo1;
+		if (flag.getPct() == 1)
+			return idNodo2;
+
+		// Creamos el nodo de enmedio
+
+		// if (numNodos == maxNodos) // La jodimos, Tórtola, hay que usar
+		// reallocate
+		// {
+		// // NOTA: ESTO EN DEBUG HACE QUE FALLE AL USAR DESPUES EnlacesSTL. ES
+		// POR NO SÉ QUÉ HISTORIA
+		// // DEL HEAP. EN RELEASE NO FALLA. (TAMPOCO SÉ SI FASTIDIA ALGO).
+		// Nodos = (CNode *) realloc(Nodos,(numNodos + MAX_RESERVA_NODOS) *
+		// sizeof(CNode)); // Deberíamos chequear que devuelve algo correcto
+		// maxNodos = numNodos + MAX_RESERVA_NODOS;
+		// }
+
+		newNode = new GvNode();
+		// Nodo = &Nodos[numNodos];
+
+		// pNuevoNodo->idNodo = numNodos;
+		newNode.setIdNode(graph.numVertices());
+
+		// OJO: Las coordenadas estas puede que no tengan que ver con la
+		// realidad. Algo más correcto
+		// sería tener en cuenta el shape de verdad, pero creo que no influye en
+		// el resultado final.
+		// pNuevoNodo->x = Nodos[idNodo1].x + (Nodos[idNodo2].x -
+		// Nodos[idNodo1].x) * Porcentaje;
+		// pNuevoNodo->y = Nodos[idNodo1].y + (Nodos[idNodo2].y -
+		// Nodos[idNodo1].y) * Porcentaje;
+		GvNode node1 = graph.getNodeByID(idNodo1);
+		GvNode node2 = graph.getNodeByID(idNodo2);
+		newNode.setX(node1.getX() + (node2.getX() - node1.getX())
+				* flag.getPct());
+		newNode.setY(node1.getY() + (node2.getY() - node1.getY())
+				* flag.getPct());
+		graph.addNode(newNode);
+		Coordinate newC = new Coordinate(newNode.getX(), newNode.getY());
+
+		encontrado = false;
+
+		elIdArco = -1;
+		elIdContraArco = -1;
+
+		boolean bIdTramoYaPartido = false;
+
+		// TODO: POR AQUI VOY
+		for (idArco = numOriginalEdges; idArco < graph.numEdges(); idArco++) {
+			GvEdge addedEdge = graph.getEdgeByID(idArco);
+			if (addedEdge.getIdArc() == flag.getIdArc()) {
+				bIdTramoYaPartido = true;
+
+				idNodo1 = addedEdge.getIdNodeOrig();
+				idNodo2 = addedEdge.getIdNodeEnd();
+
+				// Comprobamos si está enmedio
+				GvNode n1 = graph.getNodeByID(idNodo1);
+				GvNode n2 = graph.getNodeByID(idNodo2);
+				Coordinate c1 = new Coordinate(n1.getX(), n1.getY());
+				Coordinate c2 = new Coordinate(n2.getX(), n2.getY());
+				LineSegment line = new LineSegment(c1, c2);
+				double t = line.projectionFactor(newC);
+
+				// Si la proyección es positiva y menor que la magnitud d, está
+				// en medio
+				if ((t >= 0) && (t <= 1)) {
+					encontrado = true;
+					if (t == 0)
+						return idNodo1; // No partimos
+					if (t == 1)
+						return idNodo2; // Tampoco partimos
+
+					if (addedEdge.getDirec() == 1)
+						elIdArco = idArco;
+					else
+						elIdContraArco = idArco;
+
+				} // if está enmedio
+			} // if idTramo encontrado
+		} // for idArco
+		if (bIdTramoYaPartido && (!encontrado))
+			throw new RuntimeException(
+					"Algo va mal con lo del producto escalar");
+
+		if (encontrado) {
+			// sprintf(Mensaje,"Voy a partir el idTramo= %ld (idArco
+			// %ld)",idTramo,elIdArco);
+			// MessageBox(NULL,Mensaje,"",MB_OK);
+			if (elIdArco != -1)
+				PartirArco(elIdArco, newNode.getIdNode());
+
+			if (elIdContraArco != -1)
+				PartirArco(elIdContraArco, newNode.getIdNode());
+		} else {
+			// Creamos 2 Arcos por cada arco que teníamos antes.
+			if (edgePair.getIdEdge() != -1)
+				PartirArco(edgePair.getIdEdge(), newNode.getIdNode());
+
+			if (edgePair.getIdInverseEdge() != -1)
+				PartirArco(edgePair.getIdInverseEdge(), newNode.getIdNode());
+
+		} // else encontrado
+
+		return newNode.getIdNode();
+
+	}
+
+	/**
+	 * Cogemos el nodo más cercano y ponemos el pct a ese flag.
+	 * 
+	 * @param flag
+	 * @return
+	 */
+	public int getClosestIdNode(GvFlag flag) {
+		EdgePair pair = graph.getEdgesByIdArc(flag.getIdArc());
+		if (pair.getIdEdge() != -1) {
+			GvEdge edge = graph.getEdgeByID(pair.getIdEdge());
+			GvNode from = graph.getNodeByID(edge.getIdNodeOrig());
+			GvNode to = graph.getNodeByID(edge.getIdNodeEnd());
+
+			double dist1 = flag.getOriginalPoint().distance(from.getX(),
+					from.getY());
+			double dist2 = flag.getOriginalPoint().distance(to.getX(),
+					to.getY());
+			if (dist1 < dist2) {
+				flag.setPct(0);
+				return from.getIdNode();
+			}
+			else
+			{
+				flag.setPct(1.0);
+				return to.getIdNode();
+			}
+		} else {
+			GvEdge edge = graph.getEdgeByID(pair.getIdInverseEdge());
+			GvNode from = graph.getNodeByID(edge.getIdNodeOrig());
+			GvNode to = graph.getNodeByID(edge.getIdNodeEnd());
+
+			double dist1 = flag.getOriginalPoint().distance(from.getX(),
+					from.getY());
+			double dist2 = flag.getOriginalPoint().distance(to.getX(),
+					to.getY());
+			if (dist1 < dist2)
+			{
+				flag.setPct(0);
+				return from.getIdNode();
+			}
+			else
+			{
+				flag.setPct(1.0);
+				return to.getIdNode();
+			}
+			// if (flag.getPct() < 0.5)
+			// return to.getIdNode();
+			// else
+			// return from.getIdNode();
+		}
+	}
+
+	/**
+	 * @param idArc
+	 * @param x
+	 * @param y
+	 * @return entre 0.0 y 1.0
+	 * @throws DriverIOException
+	 */
+	private double percentAlong(int idArc, double x, double y)
+			throws DriverIOException {
+		// Le pasamos el idTramo, la coordenada X de donde hemos pulsado y la
+		// coordenada Y
+		// Primero calculamos la longitud total del shape.
+		// Luego calculamos el punto más cercano y su distancia para cada
+		// segmento del shape.
+		// Nos quedamos con el que esté más cerca y luego recorremos hasta él
+		// acumulando distancia.
+		// Finalmente, dividimos esa distancia por la longitud total.
+		lyrVect.getSource().start();
+		IGeometry geom = lyrVect.getSource().getShape(idArc);
+		MultiLineString jtsGeom = (MultiLineString) geom.toJTSGeometry();
+
+		Coordinate[] coords = jtsGeom.getCoordinates();
+
+		Coordinate userCoord = new Coordinate(x, y);
+
+		double longReal = 0;
+		// Le pegamos una primera pasada para saber su longitud real.
+		// OJO, NO TRABAJAMOS CON SHAPES MULTIPARTE, NO TIENE SENTIDO CON LAS
+		// REDES (CREO)
+		// POR ESO SUPONEMOS UNA ÚNICA PARTE (LÍNEA CONTÍNUA)
+		// A la vez calculamos el punto más cercano y su distancia para cada
+		// segmento.
+		double minDist = Double.MAX_VALUE;
+		double distTo = 0;
+		double dist = 0;
+		Coordinate cOrig = null;
+		Coordinate closestPoint = null;
+		for (int j = 0; j < coords.length - 1; j++) {
+			Coordinate c1 = coords[j];
+			Coordinate c2 = coords[j + 1];
+			LineSegment line = new LineSegment(c1, c2);
+
+			Coordinate auxPoint = line.closestPoint(userCoord);
+			dist = userCoord.distance(auxPoint);
+			if ((dist < minDist)) {
+				minDist = dist;
+				cOrig = c1;
+				closestPoint = auxPoint;
+				distTo = longReal;
+			}
+			longReal += line.getLength();
+		}
+		lyrVect.getSource().stop();
+		dist = cOrig.distance(closestPoint);
+		double longBuscada = distTo + dist;
+
+		double pct;
+		if (longReal > 0)
+			pct = longBuscada / longReal;
+		else
+			pct = 0.0;
+
+		return pct;
+	}
+
+	/**
+	 * Adds a flag on a network. flagDirection set if the flag must be on left
+	 * or right edge.
+	 * 
+	 * @param x
+	 * @param y
+	 * @param flagDirection
+	 * @param tol
+	 *            tolerance in map units
+	 * @return null if there is no place to add flag. You can increase the
+	 *         tolerance, then.
+	 * @throws GraphException
+	 */
+	public GvFlag addFlag(double x, double y, int flagDirection, double tol)
+			throws GraphException {
+		try {
+			Point2D nearestPoint = new Point2D.Double();
+			int idArc = findClosestArc(x, y, tol, nearestPoint);
+			if (idArc == -1)
+				return null;
+			GvFlag flag = new GvFlag(x, y);
+			flag.setIdArc(idArc);
+
+			flag.setPct(percentAlong(idArc, x, y));
+			flag.setDirec(flagDirection);
+			flag.setIdFlag(flags.size());
+			callFlagsChanged(IFlagListener.FLAG_ADDED);
+			return flag;
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new GraphException(e);
+		}
+
+	}
+
+	/**
+	 * Adds 2 flags on a network. (On both sides of an arc)
+	 * 
+	 * @param x
+	 * @param y
+	 * @param tol
+	 *            tolerance in map units
+	 * @return null if there is no place to add flag. You can increase the
+	 *         tolerance, then.
+	 * @throws GraphException 
+	 */
+	public GvFlag addFlag(double x, double y, double tol) throws GraphException {
+		try {
+			Point2D nearestPoint = new Point2D.Double();
+			int idArc = findClosestArc(x, y, tol, nearestPoint);
+			if (idArc == -1)
+				return null;
+
+			GvFlag flag = new GvFlag(x, y);
+			flag.setIdArc(idArc);
+			EdgePair edgePair = graph.getEdgesByIdArc(idArc);
+			flag.setDirec(GvFlag.BOTH_DIRECTIONS);
+
+			flag.setPct(percentAlong(idArc, x, y));
+			flag.setIdFlag(flags.size());
+			flags.add(flag);
+			callFlagsChanged(IFlagListener.FLAG_ADDED);
+			return flag;
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new GraphException(e);
+		}
+
+	}
+
+	/**
+	 * Create a flag in both directions, but NOT add it to the Network.
+	 * We use it on onetomany solver
+	 * @param x
+	 * @param y
+	 * @param tol
+	 * @return
+	 * @throws GraphException
+	 */
+	public GvFlag createFlag(double x, double y, double tol) throws GraphException {
+		try {
+			Point2D nearestPoint = new Point2D.Double();
+			int idArc = findClosestArc(x, y, tol, nearestPoint);
+			if (idArc == -1)
+				return null;
+
+			GvFlag flag = new GvFlag(x, y);
+			flag.setIdArc(idArc);
+//			EdgePair edgePair = graph.getEdgesByIdArc(idArc);
+			flag.setDirec(GvFlag.BOTH_DIRECTIONS);
+
+			flag.setPct(percentAlong(idArc, x, y));
+			flag.setIdFlag(flags.size());
+			return flag;
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			throw new GraphException(e);
+		}
+
+	}
+
+	public GvFlag addFlagToNode(double x, double y, double tol) throws GraphException {
+		Point2D nearestPoint = new Point2D.Double();
+		int idArc = findClosestArc(x, y, tol, nearestPoint);
+		if (idArc == -1)
+			return null;
+
+		GvFlag flag = new GvFlag(x, y);
+		flag.setIdArc(idArc);
+		flag.setDirec(GvFlag.BOTH_DIRECTIONS);
+		int idNode = getClosestIdNode(flag);
+		
+		GvNode node = graph.getNodeByID(idNode);
+		flag.setOriginalPoint(node.getX(), node.getY());
+		flag.setIdFlag(flags.size());
+		flags.add(flag);
+		callFlagsChanged(IFlagListener.FLAG_ADDED);
+		return flag;
+
+	}
+
+
+	public void addFlag(GvFlag flag) {
+		flags.add(flag);
+		callFlagsChanged(IFlagListener.FLAG_ADDED);
+	}
+
+	public GvFlag[] getFlags() {
+		ArrayList aux = new ArrayList();
+		for (int i=0; i < getOriginaFlags().size(); i++)
+		{
+			GvFlag flag = (GvFlag) getOriginaFlags().get(i);
+			if (flag.isEnabled()) aux.add(flag);
+		}
+
+		return (GvFlag[]) aux.toArray(new GvFlag[0]);
+	}
+	
+	/**
+	 * Suitable to change directly the flags collection
+	 * @return
+	 */
+	public ArrayList getOriginaFlags() {
+		return flags;
+	}
+
+
+	public void setFlags(ArrayList flags) {
+		this.flags = flags;
+	}
+
+	public IGraph getGraph() {
+		return graph;
+	}
+
+	public void setGraph(IGraph graph) {
+		this.graph = graph;
+		numOriginalEdges = graph.numEdges();
+		numOriginalNodes = graph.numVertices();
+	}
+
+	public FLyrVect getLayer() {
+		return lyrVect;
+	}
+
+	public void setLayer(FLyrVect lyr) {
+		this.lyrVect = lyr;
+	}
+
+	public void removeFlags() {
+		flags = new ArrayList();
+		callFlagsChanged(IFlagListener.FLAG_REMOVED);
+	}
+	
+	public void removeFlag(GvFlag flag){
+		flags.remove(flag);
+		callFlagsChanged(IFlagListener.FLAG_REMOVED);
+	}
+
+	void PartirArco(int idEdge, int idNode) {
+		// Se supone que el nuevo Nodo YA está creado. Aqui dentro se coge el
+		// arco viejo y se le pega un tajo.
+		// (Se modifican los enlaces de los nodos de ese arco y se crean los
+		// arcos nuevos, fijando sus costes).
+		// Para sacar el porcentaje nos aprovechamos de que el nuevo nodo está
+		// puesto en base a ese porcentaje
+		// en distancia de los extremos.
+		GvEdge oldEdge;
+		GvNode pN1, pN2;
+		double pct;
+
+		oldEdge = graph.getEdgeByID(idEdge);
+
+		// OJO, controlando los ceros por si acaso la recta es horizontal o
+		// vertical (Y si mide cero???)
+
+		// pN1 = &Nodos[Arcos[idArco].idNodo1];
+		// pN2 = &Nodos[Arcos[idArco].idNodo2];
+		pN1 = graph.getNodeByID(graph.getEdgeByID(idEdge).getIdNodeOrig());
+		pN2 = graph.getNodeByID(graph.getEdgeByID(idEdge).getIdNodeEnd());
+		GvNode newNode = graph.getNodeByID(idNode);
+
+		if (newNode.getX() != pN1.getX())
+			pct = Math.abs((newNode.getX() - pN1.getX())
+					/ (pN2.getX() - pN1.getX()));
+		else
+			pct = Math.abs((newNode.getY() - pN1.getY())
+					/ (pN2.getY() - pN1.getY()));
+
+		GvEdge first = new GvEdge();
+		first.setIdEdge(graph.numEdges());
+		first.setIdArc(oldEdge.getIdArc());
+		first.setDistance(oldEdge.getDistance() * pct);
+		first.setWeight(oldEdge.getWeight() * pct);
+
+		first.setDirec(oldEdge.getDirec());
+		first.setIdNodeOrig(oldEdge.getIdNodeOrig());
+		first.setType(oldEdge.getType());
+		first.setIdNodeEnd(idNode);
+		graph.addEdge(first);
+
+		GvEdge second = new GvEdge();
+		second.setIdEdge(graph.numEdges());
+		second.setDistance(oldEdge.getDistance() * (1.0 - pct));
+		second.setWeight(oldEdge.getWeight() * (1.0 - pct));
+		second.setIdArc(oldEdge.getIdArc());
+		second.setDirec(oldEdge.getDirec());
+		second.setType(oldEdge.getType());
+		second.setIdNodeOrig(idNode);
+		second.setIdNodeEnd(oldEdge.getIdNodeEnd());
+		graph.addEdge(second);
+
+		// ////////////////////////////////////////////////////
+		// Ahora retocamos los enlaces que salen de cada nodo
+		// ////////////////////////////////////////////////////
+		int i;
+		// boolean encontrado = false;
+		for (i = 0; i < pN1.getEnlaces().size(); i++) {
+			GvEdge aux = (GvEdge) pN1.getEnlaces().get(i);
+			if (aux.getIdEdge() == idEdge) {
+				pN1.getEnlaces().set(i, first);
+				// encontrado = true;
+				break;
+			}
+		} // for
+
+		newNode.getEnlaces().add(second);
+
+	}
+
+	public ArrayList getModifiedCosts() {
+		return modifiedCosts;
+		
+	}
+
+	/**
+	 * Create, add and apply a new modified cost to the graph. 
+	 * @param idArc where the cost will be applied.
+	 * @param newCost. -1 if you want tu put a BARRIER.
+	 * @param direction. 1-> edge of digitalized direction. 2-> inverse edge. 3-> Both directions
+	 */
+	public GvModifiedCost addModifiedCost(int idArc, double newCost, int direction) {
+		GvModifiedCost modifiedCost = new GvModifiedCost(idArc, newCost, direction);
+		EdgePair edgePair = getGraph().getEdgesByIdArc(idArc);
+		modifiedCost.setIdEdge(edgePair.idEdge);
+		modifiedCost.setIdInverseEdge(edgePair.idInverseEdge);
+		if (direction == 3)
+		{
+			if (edgePair.getIdEdge() != -1)
+			{
+				GvEdge edge = getGraph().getEdgeByID(edgePair.getIdEdge());
+				modifiedCost.setOldCost(edge.getWeight());
+				edge.setWeight(-1.0);
+			}
+			if (edgePair.getIdInverseEdge() != -1)
+			{
+				GvEdge inverseEdge = getGraph().getEdgeByID(edgePair.getIdInverseEdge());
+				modifiedCost.setOldInverseCost(inverseEdge.getWeight());
+				inverseEdge.setWeight(-1.0);
+			}
+		}
+		if (direction == 1)
+		{
+			if (edgePair.getIdEdge() != -1)
+			{
+				GvEdge edge = getGraph().getEdgeByID(edgePair.getIdEdge());
+				modifiedCost.setOldCost(edge.getWeight());
+				edge.setWeight(-1.0);
+			}
+		}
+		if (direction == 2)
+		{
+			if (edgePair.getIdInverseEdge() != -1)
+			{
+				GvEdge inverseEdge = getGraph().getEdgeByID(edgePair.getIdInverseEdge());
+				modifiedCost.setOldInverseCost(inverseEdge.getWeight());
+				inverseEdge.setWeight(-1.0);
+			}
+		}
+		modifiedCosts.add(modifiedCost);
+		modifiedCost.setApplied(true);
+		return modifiedCost;
+	}
+
+	/**
+	 * Be careful about the ORDER!!!!
+	 * @param modifiedCost
+	 */
+	public boolean removeModifiedCost(GvModifiedCost modifiedCost) {
+		if (!modifiedCosts.remove(modifiedCost))
+			return false;
+		int idArc = modifiedCost.getIdArc();
+		int direction = modifiedCost.getDirection();
+		EdgePair edgePair = getGraph().getEdgesByIdArc(idArc);
+		if (direction == 3)
+		{
+			if (edgePair.getIdEdge() != -1)
+			{
+				GvEdge edge = getGraph().getEdgeByID(edgePair.getIdEdge());
+				edge.setWeight(modifiedCost.getOldCost());
+			}
+			if (edgePair.getIdInverseEdge() != -1)
+			{
+				GvEdge inverseEdge = getGraph().getEdgeByID(edgePair.getIdInverseEdge());
+				inverseEdge.setWeight(modifiedCost.getOldInverseCost());
+			}
+		}
+		if (direction == 1)
+		{
+			if (edgePair.getIdEdge() != -1)
+			{
+				GvEdge edge = getGraph().getEdgeByID(edgePair.getIdEdge());
+				edge.setWeight(modifiedCost.getOldCost());
+			}
+		}
+		if (direction == 2)
+		{
+			if (edgePair.getIdInverseEdge() != -1)
+			{
+				GvEdge inverseEdge = getGraph().getEdgeByID(edgePair.getIdInverseEdge());
+				inverseEdge.setWeight(modifiedCost.getOldInverseCost());
+			}
+		}
+		return true;
+	}
+
+	public void addFlagListener(IFlagListener listener) {
+		if (!flagListeners.contains(listener)) {
+			flagListeners.add(listener);
+		}
+	}
+	
+	private void callFlagsChanged(int reason) {
+		if (dispatching) {
+			for (int i=0; i < flagListeners.size(); i++)
+			{
+				IFlagListener listener = (IFlagListener) flagListeners.get(i);
+				listener.flagsChanged(reason);
+			}
+		}
+	}
+	
+	/**
+	 * Useful to do batch modifies. (For example, add lot of flags
+	 * and when finished (endModifying), throw event.
+	 */
+	public void beginModifyingFlags() {
+		dispatching = false;
+	}
+
+	public void endModifyingFlags() {
+		dispatching = true;
+		callFlagsChanged(IFlagListener.FLAG_MANY_CHANGES);
+	}
+	/**
+	 * Mueve un flag de la posición from a la posición to.
+	 *
+	 * @param from origen.
+	 * @param to destino.
+	 * 
+	 */
+	public void moveTo(int from, int to) throws CancelationException {
+		int newfrom=flags.size()-from-1;
+		int newto=flags.size()-to-1;
+		if ( newfrom < 0 || newfrom >=flags.size() || newto < 0 || newto >= flags.size()) return;
+		GvFlag aux = (GvFlag) flags.get(newfrom);
+		flags.remove(newfrom);
+		flags.add(newto, aux);
+		callFlagsChanged(IFlagListener.FLAG_REORDER);
+	}
+
+	public ArrayList getEdgeTypes() {
+		// TODO: Tener esto precalculado
+		TreeMap map = new TreeMap();
+		ArrayList ret = new ArrayList();
+		for (int i = 0; i < graph.numEdges(); i++)
+		{
+			GvEdge edge = graph.getEdgeByID(i);
+			Integer type = new Integer(edge.getType());
+			if (!map.containsKey(type))
+			{
+				map.put(type, type);				
+			}
+		}
+		Iterator it = map.entrySet().iterator();
+		while (it.hasNext())
+		{
+			Map.Entry entry = (Map.Entry) it.next();
+			Integer type = (Integer) entry.getKey();
+			ret.add(type);
+		}
+		return ret;
+	}
+
+	public Hashtable getVelocities() {
+		return velocities ;
+	}
+
+	public void setVelocities(Hashtable veloMeters) {
+		for (int i=0; i < getGraph().numEdges(); i++)
+		{
+			GvEdge edge = getGraph().getEdgeByID(i);
+			
+			Integer key = new Integer(edge.getType());
+			Double vel = (Double) veloMeters.get(key);
+			edge.setWeight(edge.getDistance() / vel.doubleValue()); // segundos
+		}
+		this.velocities = veloMeters;
+
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/Network.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetSolver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetSolver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetSolver.java	(revision 30230)
@@ -0,0 +1,51 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+package com.iver.cit.gvsig.graph.core;
+
+
+public interface INetSolver {
+
+	public void setNetwork(Network net);
+	
+	public Network getNetwork();
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/INetSolver.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FNode.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FNode.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FNode.java	(revision 30230)
@@ -0,0 +1,74 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.util.ArrayList;
+
+import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
+
+public class FNode extends DirectedSparseVertex {
+	private int idNode;
+	private double x;
+	private double y;
+	
+	private int numSoluc;
+	private double estimation;
+	private int status;
+	ArrayList conectors;
+	ArrayList turnCosts;
+	
+	public FNode(int i, double x, double y) {
+		idNode = i;
+		this.x = x;
+		this.y = y;
+	}
+	public int getIdNode() {
+		return idNode;
+	}
+	public double getX() {
+		return x;
+	}
+	public double getY() {
+		return y;
+	}
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/FNode.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungConverter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungConverter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungConverter.java	(revision 30230)
@@ -0,0 +1,116 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.core;
+
+import java.awt.geom.Point2D;
+
+import com.hardcode.gdbms.engine.values.NumericValue;
+
+import edu.uci.ics.jung.graph.ArchetypeGraph;
+import edu.uci.ics.jung.graph.Graph;
+import edu.uci.ics.jung.graph.Vertex;
+import edu.uci.ics.jung.graph.decorators.Indexer;
+import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
+import edu.uci.ics.jung.graph.impl.SparseGraph;
+import edu.uci.ics.jung.utils.UserData;
+import edu.uci.ics.jung.visualization.DefaultSettableVertexLocationFunction;
+import edu.uci.ics.jung.visualization.SettableVertexLocationFunction;
+
+public class JungConverter {
+	
+	IGraph g;
+	Graph gJ;
+	Indexer indexer;
+	
+	
+	public void setGraph(IGraph g) {
+		this.g = g;
+	}
+	
+	public void convert() {
+		// TODO: Hacer y lanzar una excepción si algo ha ido mal
+		if (g == null)
+			throw new RuntimeException("Please, use setGraph() before convert()");
+		gJ = new SparseGraph();
+		long t1 = System.currentTimeMillis();
+		
+		for (int i=0; i < g.numVertices(); i++)
+		{
+			GvNode n = g.getNodeByID(i);
+			FNode v = new FNode(i, n.getX(), n.getY());
+			gJ.addVertex(v);				
+		}
+		indexer = Indexer.getIndexer(gJ);
+		
+		for (int i=0; i < g.numEdges(); i++)
+		{
+			GvEdge e = g.getEdgeByID(i);
+			Vertex vFrom = (Vertex) indexer.getVertex(e.getIdNodeOrig());
+			Vertex vTo = (Vertex) indexer.getVertex(e.getIdNodeEnd());
+			
+			FEdge edge = new FEdge(vFrom, vTo);
+			edge.setArcID(e.getIdArc());
+			edge.setDirection(e.getDirec());
+			edge.setIdNodeOrig(e.getIdNodeOrig());
+			edge.setIdNodeEnd(e.getIdNodeEnd());
+			edge.setType(e.getType());
+			edge.setWeight(e.getDistance());
+			edge.setCost2(e.getWeight());
+			
+			gJ.addEdge(edge);
+		}
+		long t2 = System.currentTimeMillis();
+		System.out.println("Tiempo de carga desde nodes.dbf y edges.dbf y generando JUNG network: " + (t2-t1) + " msecs");
+	}
+	
+	public ArchetypeGraph getJungGraph() {
+		if (gJ == null)
+			throw new RuntimeException("You should call convert() before use this method.");
+		return gJ;
+	}
+	
+	public Indexer getIndexer() {
+		return indexer;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/core/JungConverter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TopologyExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TopologyExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TopologyExtension.java	(revision 30230)
@@ -0,0 +1,384 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Color;
+import java.awt.geom.Rectangle2D;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FPoint2D;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.GeneralPathX;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.FBitSet;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.toc.FLyrVectEditPropertiesTocMenuEntry2;
+import com.iver.cit.gvsig.topology.TopologyBuilder;
+import com.iver.cit.gvsig.topology.triangulation.DelaunayTriangulation;
+import com.iver.cit.gvsig.topology.triangulation.Pnt;
+import com.iver.cit.gvsig.topology.triangulation.Simplex;
+import com.iver.utiles.extensionPoints.ExtensionPoint;
+import com.iver.utiles.extensionPoints.ExtensionPoints;
+import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateArrays;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.planargraph.Node;
+import com.vividsolutions.jts.planargraph.NodeMap;
+
+/**
+ * @author fjp Primera prueba acerca de la creación de polígonos a partir de una
+ *         capa de líneas
+ *
+ */
+public class TopologyExtension extends Extension {
+
+	private class MyNode extends Node {
+		public MyNode(Coordinate pt) {
+			super(pt);
+			occurrences = 1;
+		}
+
+		int occurrences;
+
+		public int getOccurrences() {
+			return occurrences;
+		}
+
+		public void setOccurrences(int occurrences) {
+			this.occurrences = occurrences;
+		}
+
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String s) {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mc = v.getMapControl();
+		FLayer[] actives = mc.getMapContext().getLayers().getActives();
+		try {
+			for (int i = 0; i < actives.length; i++) {
+				if (actives[i] instanceof FLyrVect) {
+					FLyrVect lv = (FLyrVect) actives[i];
+					if (s.compareTo("CLEAN") == 0)
+						doClean(lv);
+					if (s.compareTo("TRIANGULATION") == 0)
+						doTriangulation(lv);
+					if (s.compareTo("SHOW_ERRORS") == 0)
+						doShowNodeErrors(lv);
+
+				}
+			}
+		} catch (DriverException e) {
+			e.printStackTrace();
+			NotificationManager.addError(e);
+		} catch (DriverIOException e) {
+			e.printStackTrace();
+			NotificationManager.addError(e);
+		}
+
+	}
+
+	private void doTriangulation(FLyrVect lv) throws DriverException,
+			DriverIOException {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mc = v.getMapControl();
+
+		FBitSet bitSet = lv.getRecordset().getSelection();
+		Rectangle2D fullExtent = lv.getFullExtent();
+	    Simplex initialTriangle = new Simplex(new Pnt[] {
+	            new Pnt(fullExtent.getX(), fullExtent.getY()),
+	            new Pnt(fullExtent.getMaxX(), fullExtent.getY()),
+	            new Pnt(fullExtent.getCenterX(),  fullExtent.getMaxY())});
+
+		DelaunayTriangulation triangulator = new DelaunayTriangulation(initialTriangle);
+
+		for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet.nextSetBit(i + 1)) {
+			IGeometry g = lv.getSource().getShape(i);
+			Geometry jtsG = g.toJTSGeometry();
+			Coordinate[] coords = jtsG.getCoordinates();
+			if (jtsG.isEmpty())
+				continue;
+			Coordinate[] linePts = CoordinateArrays
+					.removeRepeatedPoints(coords);
+			Coordinate startPt = linePts[0];
+			Coordinate endPt = linePts[linePts.length - 1];
+			triangulator.delaunayPlace(startPt);
+			triangulator.delaunayPlace(endPt);
+
+		}
+
+		// Ahora recorremos todos los nodos y los que solo hayan sido
+		// añadidos una vez, son dangle o fuzzy.
+		// TODO: Poner una tolerancia para que las coordinate cercanas
+		// formen un solo nodo.
+		GraphicLayer graphicLayer = mc.getMapContext().getGraphicsLayer();
+		FSymbol simNodeError = new FSymbol(FShape.POINT, Color.RED);
+		simNodeError.setSize(10);
+		simNodeError.setStyle(FConstant.SYMBOL_STYLE_MARKER_SQUARE);
+		simNodeError.setFill(null);
+		simNodeError.setOutlined(true);
+		simNodeError.setOutlineColor(Color.RED);
+
+		int idSymbolPoint = graphicLayer.addSymbol(simNodeError);
+
+		Iterator it = triangulator.iterator();
+
+		while (it.hasNext()) {
+			Simplex triangle = (Simplex) it.next();
+			for (Iterator otherIt = triangle.facets().iterator(); otherIt
+					.hasNext();) {
+				Set facet = (Set) otherIt.next();
+				Pnt[] endpoint = (Pnt[]) facet.toArray(new Pnt[2]);
+				GeneralPathX gp = new GeneralPathX();
+				System.err.println(endpoint[0].toString());
+				gp.moveTo(endpoint[0].coord(0), endpoint[0].coord(1));
+				gp.lineTo(endpoint[1].coord(0), endpoint[1].coord(1));
+				IGeometry gAux = ShapeFactory.createPolyline2D(gp);
+				FGraphic graphic = new FGraphic(gAux, idSymbolPoint);
+				graphicLayer.addGraphic(graphic);
+			}
+		}
+		mc.drawGraphics();
+
+	}
+
+	/**
+	 * @param lv
+	 *            FLayerVect de líneas para convertir a polígonos.
+	 */
+	private void doClean(FLyrVect lv) {
+		TopologyBuilder topologyBuilder = new TopologyBuilder(0, 0);
+		topologyBuilder.setInputLayer(lv);
+
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mc = v.getMapControl();
+
+		try {
+			FBitSet bitSet = lv.getRecordset().getSelection();
+
+			// // First, we need to do "noding"
+			// // TODO: This step must be optional
+			// ArrayList lineStrings = new ArrayList();
+			// for(int i=bitSet.nextSetBit(0); i>=0; i=bitSet.nextSetBit(i+1)) {
+			// IGeometry g = lv.getSource().getShape(i);
+			// lineStrings.add(g.toJTSGeometry());
+			// }
+			//
+			// Geometry nodedLineStrings = (Geometry) lineStrings.get(0);
+			// for (int i = 1; i < lineStrings.size(); i++) {
+			// nodedLineStrings =
+			// nodedLineStrings.union((Geometry)lineStrings.get(i));
+			// }
+			//
+			// // FIN noding
+			//
+			//
+			// polygonizer.add(nodedLineStrings);
+
+			Collection polygons = topologyBuilder.buildPolygons();
+			Iterator it = polygons.iterator();
+			GraphicLayer graphicLayer = mc.getMapContext().getGraphicsLayer();
+			int idSymbolPol = graphicLayer
+					.addSymbol(new FSymbol(FShape.POLYGON));
+			int idSymbolCutEdge = graphicLayer.addSymbol(new FSymbol(
+					FShape.LINE, Color.BLUE));
+			int idSymbolDangle = graphicLayer.addSymbol(new FSymbol(
+					FShape.LINE, Color.RED));
+			while (it.hasNext()) {
+				Polygon pol = (Polygon) it.next();
+				IGeometry gAux = FConverter.jts_to_igeometry(pol);
+				FGraphic graphic = new FGraphic(gAux, idSymbolPol);
+				graphicLayer.addGraphic(graphic);
+			}
+
+			// LINEAS QUE PARTEN POLIGONOS
+			Collection cutEdges = topologyBuilder.getCutEdges();
+			it = cutEdges.iterator();
+			while (it.hasNext()) {
+				LineString lin = (LineString) it.next();
+				IGeometry gAux = FConverter.jts_to_igeometry(lin);
+				FGraphic graphic = new FGraphic(gAux, idSymbolCutEdge);
+				graphicLayer.addGraphic(graphic);
+			}
+
+			// LINEAS COLGANTES, QUE NO FORMAN POLIGONO
+			Collection dangles = topologyBuilder.getDangles();
+			it = dangles.iterator();
+			while (it.hasNext()) {
+				LineString lin = (LineString) it.next();
+				IGeometry gAux = FConverter.jts_to_igeometry(lin);
+				FGraphic graphic = new FGraphic(gAux, idSymbolDangle);
+				graphicLayer.addGraphic(graphic);
+			}
+
+			mc.drawGraphics();
+		} catch (DriverException e) {
+			e.printStackTrace();
+			NotificationManager.addError(e);
+		}
+
+	}
+
+	/**
+	 * We search for origin-endpoints in LineString. Each one will generate a
+	 * Node. We also fill a map Node-numOccurrences. Dangle and Fuzzy nodes will
+	 * be those that have an occurrence count = 1. (Node with degree cero in
+	 * graph's language)
+	 *
+	 * @param lyr
+	 * @throws DriverException
+	 * @throws DriverIOException
+	 */
+	private void doShowNodeErrors(FLyrVect lv) throws DriverException,
+			DriverIOException {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mc = v.getMapControl();
+
+		// ArrayList nodeErrors = new ArrayList();
+		NodeMap nodeMap = new NodeMap();
+		FBitSet bitSet = lv.getRecordset().getSelection();
+
+		for (int i = bitSet.nextSetBit(0); i >= 0; i = bitSet.nextSetBit(i + 1)) {
+			IGeometry g = lv.getSource().getShape(i);
+			Geometry jtsG = g.toJTSGeometry();
+			Coordinate[] coords = jtsG.getCoordinates();
+			if (jtsG.isEmpty())
+				continue;
+			Coordinate[] linePts = CoordinateArrays
+					.removeRepeatedPoints(coords);
+			Coordinate startPt = linePts[0];
+			Coordinate endPt = linePts[linePts.length - 1];
+
+			MyNode nStart = (MyNode) nodeMap.find(startPt);
+			MyNode nEnd = (MyNode) nodeMap.find(endPt);
+			if (nStart == null) {
+				nStart = new MyNode(startPt);
+				nodeMap.add(nStart);
+			} else
+				nStart.setOccurrences(nStart.getOccurrences() + 1);
+			if (nEnd == null) {
+				nEnd = new MyNode(endPt);
+				nodeMap.add(nEnd);
+			} else
+				nEnd.setOccurrences(nEnd.getOccurrences() + 1);
+
+		}
+
+		// Ahora recorremos todos los nodos y los que solo hayan sido
+		// añadidos una vez, son dangle o fuzzy.
+		// TODO: Poner una tolerancia para que las coordinate cercanas
+		// formen un solo nodo.
+		GraphicLayer graphicLayer = mc.getMapContext().getGraphicsLayer();
+		FSymbol simNodeError = new FSymbol(FShape.POINT, Color.RED);
+		simNodeError.setSize(10);
+		simNodeError.setStyle(FConstant.SYMBOL_STYLE_MARKER_SQUARE);
+		simNodeError.setFill(null);
+		simNodeError.setOutlined(true);
+		simNodeError.setOutlineColor(Color.RED);
+
+		int idSymbolPoint = graphicLayer.addSymbol(simNodeError);
+
+		Iterator it = nodeMap.iterator();
+		while (it.hasNext()) {
+			MyNode node = (MyNode) it.next();
+			if (node.getOccurrences() == 1) {
+				FPoint2D p = FConverter.coordinate2FPoint2D(node
+						.getCoordinate());
+				IGeometry gAux = ShapeFactory.createPoint2D(p);
+				FGraphic graphic = new FGraphic(gAux, idSymbolPoint);
+				graphicLayer.addGraphic(graphic);
+
+			}
+		}
+		mc.drawGraphics();
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mc = v.getMapControl();
+		if (mc.getMapContext().getLayers().getActives().length > 0)
+			return true;
+		return false;
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+//		IWindow v = PluginServices.getMDIManager().getActiveWindow();
+//		if (v instanceof View)
+//			return true;
+		return false;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TopologyExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkUtils.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkUtils.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkUtils.java	(revision 30230)
@@ -0,0 +1,128 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Color;
+import java.io.File;
+
+import javax.swing.ImageIcon;
+
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.util.GvSession;
+
+public class NetworkUtils {
+	static int idSymbolFlag = -1;
+	public static void clearBarriersFromGraphics(MapControl mc) {
+		GraphicLayer graphics = mc.getMapContext().getGraphicsLayer();
+		for (int i = graphics.getNumGraphics() - 1; i >= 0; i--) {
+			FGraphic aux = graphics.getGraphic(i);
+			if (aux.getTag() != null)
+				if (aux.getTag().equalsIgnoreCase("BARRIER"))
+					graphics.removeGraphic(aux);
+		}
+	}
+
+	public static void clearFlagsFromGraphics(MapControl mc) {
+		GraphicLayer graphics = mc.getMapContext().getGraphicsLayer();
+		for (int i = graphics.getNumGraphics() - 1; i >= 0; i--) {
+			FGraphic aux = graphics.getGraphic(i);
+			if (aux.getTag() != null)
+				if (aux.getTag().equalsIgnoreCase("FLAG"))
+					graphics.removeGraphic(aux);
+		}
+	}
+
+	public static void clearFlagFromGraphics(MapControl mc, GvFlag flag) {
+		GraphicLayer graphics = mc.getMapContext().getGraphicsLayer();
+		FGraphic graphic = graphics.getGraphicByObjectTag(flag);
+		graphics.removeGraphic(graphic);
+	}
+
+	public static void clearRouteFromGraphics(MapControl mc) {
+		GraphicLayer graphics = mc.getMapContext().getGraphicsLayer();
+		for (int i = graphics.getNumGraphics() - 1; i >= 0; i--) {
+			FGraphic aux = graphics.getGraphic(i);
+			if (aux.getTag() != null)
+				if (aux.getTag().equalsIgnoreCase("ROUTE"))
+					graphics.removeGraphic(aux);
+		}
+	}
+	
+	public static File getNetworkFile(FLayer lyr) {
+			String directoryName = System.getProperty("java.io.tmpdir");
+			String aux = lyr.getName().replaceAll("\\Q.shp\\E", ".net");
+			File newFile = new File(directoryName +
+					File.separator +
+					aux);
+			return newFile;
+
+	}
+
+	public static void addGraphicFlag(MapControl mapControl, GvFlag flag) {
+		GraphicLayer graphicLayer = mapControl.getMapContext().getGraphicsLayer();
+		if (idSymbolFlag == -1)
+		{
+			FSymbol simFlag = new FSymbol(FShape.POINT, Color.BLUE);
+			simFlag.setSize(24);
+			simFlag.setStyle(FConstant.SYMBOL_STYLE_MARKER_IMAGEN);
+			ImageIcon icon = new ImageIcon(NetworkUtils.class.getClassLoader()
+					.getResource("images/pushpin.png"));
+			simFlag.setIcon(icon.getImage());
+			idSymbolFlag = graphicLayer.addSymbol(simFlag);
+		}
+		IGeometry gAux = ShapeFactory.createPoint2D(
+				flag.getOriginalPoint().getX(), flag.getOriginalPoint().getY());
+		FGraphic graphic = new FGraphic(gAux, idSymbolFlag);
+		graphic.setTag("FLAG");
+		graphic.setObjectTag(flag);
+		graphicLayer.addGraphic(graphic);
+
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkUtils.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TestExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TestExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TestExtension.java	(revision 30230)
@@ -0,0 +1,246 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.core.FEdge;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.solvers.OneToManySolver;
+import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverDijkstra;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class TestExtension extends Extension {
+
+	public static ShortestPathSolverDijkstra solver = new ShortestPathSolverDijkstra();
+	private int idSymbolLine = -1;
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapContext map = v.getMapControl().getMapContext();
+		SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+		
+		if (actionCommand.equals("ODMATRIX")) {
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+
+				if ( net != null)
+				{
+					GvFlag[] flags = net.getFlags();
+					if(flags.length == 0)
+					{
+						JOptionPane.showMessageDialog(null, "Primero carga las paradas.");
+						return;
+					}
+					setVelocities(net);
+//					PluginServices.getMDIManager().addWindow(new RouteControlPanel(net));
+					JFileChooser dlg = new JFileChooser();
+					if (dlg.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION)
+					{
+//						RandomAccessFile file = null;
+//						try {
+//							file = new RandomAccessFile(dlg.getSelectedFile(), "rw");
+//						} catch (FileNotFoundException e1) {
+//							// TODO Auto-generated catch block
+//							e1.printStackTrace();
+//						}
+						BufferedWriter output;
+						try {
+							output = new BufferedWriter(new FileWriter(dlg.getSelectedFile()));
+	//						output.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+	
+							OneToManySolver solver = new OneToManySolver();
+							solver.setNetwork(net);
+							solver.putDestinationsOnNetwork();
+							for (int i=0; i < flags.length; i++)
+							{
+								
+								solver.setSourceFlag(flags[i]);
+								long t1 = System.currentTimeMillis();
+								
+								solver.calculate();
+								long t2 = System.currentTimeMillis();
+								System.out.println("Punto " + i + " de " + flags.length + ". " + (t2-t1) + " msecs.");
+								// Escribe el resultado
+								// idNodo1 idNodo2 tiempo distancia
+								
+								for (int j=0; j < flags.length; j++)
+								{
+									long secs = Math.round(flags[j].getCost());
+									long meters = Math.round(flags[j].getAccumulatedLength());
+									String strAux = i + "\t" + j + "\t" + secs + "\t" + meters;
+									output.write(strAux);
+									output.newLine();
+									
+								}
+								long t3 = System.currentTimeMillis();
+								System.out.println("T. de escritura: " + (t3-t2) + " msecs.");
+								
+							}
+							solver.removeDestinationsFromNetwork();
+							output.flush();
+							output.close();
+						} catch (IOException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						} catch (GraphException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						}
+					} // if
+					
+					return;
+				}
+			}
+		}
+		
+
+	}
+
+	/**
+	 * Asignamos el coste en función de un array de velocidades y el tipo de via. Las velocidades, en metros/seg
+	 * @param net
+	 */
+	private void setVelocities(Network net) {
+		double[] veloKm = {120, 110, 90, 80, 70, 60, 50, 40};
+		ArrayList veloMeters = new ArrayList();
+		for (int i=0; i<veloKm.length; i++)
+		{
+			veloMeters.add(new Double(veloKm[i] / 3.6));
+		}
+		
+		for (int i=0; i < net.getGraph().numEdges(); i++)
+		{
+			GvEdge edge = net.getGraph().getEdgeByID(i);
+			Double vel = (Double) veloMeters.get(edge.getType());
+			edge.setWeight(edge.getDistance() / vel.doubleValue()); // segundos
+		}
+		
+	}
+
+	private void createGraphicsFrom(Collection featureList, MapControl mapControl) {
+		Iterator it = featureList.iterator();
+		GraphicLayer graphicLayer = mapControl.getMapContext().getGraphicsLayer();
+		if (idSymbolLine == -1)
+		{
+			Color color = new Color(0.9f, 0.0f, 0.0f, 0.3f);
+			FSymbol lineSymbol = new FSymbol(FShape.LINE, color);
+			lineSymbol.setStroke(new BasicStroke(3.0f));
+			idSymbolLine = graphicLayer.addSymbol(lineSymbol);
+		}
+		while (it.hasNext()) {
+			IFeature feat = (IFeature) it.next();
+			IGeometry gAux = feat.getGeometry();
+			FGraphic graphic = new FGraphic(gAux, idSymbolLine);
+			graphicLayer.insertGraphic(0, graphic);
+		}
+		mapControl.drawGraphics();
+
+	}
+
+	private void createGraphicsFrom(ListIterator it, MapControl mapControl) throws DriverException {
+		GraphicLayer graphicLayer = mapControl.getMapContext().getGraphicsLayer();
+		Color color = new Color(0.5f, 0.8f, 0.0f, 0.5f);
+		FSymbol lineSymbol = new FSymbol(FShape.LINE, color);
+		lineSymbol.setStroke(new BasicStroke(7.0f));
+		int idSymbol = graphicLayer.addSymbol(lineSymbol);
+		VectorialAdapter va = (VectorialAdapter) solver.getNetwork().getLayer().getSource();
+		while (it.hasNext()) {
+			FEdge edge = (FEdge) it.next();
+			IFeature feat = va.getFeature(edge.getArcID());
+			IGeometry gAux = feat.getGeometry();
+			FGraphic graphic = new FGraphic(gAux, idSymbol);
+			graphicLayer.insertGraphic(0, graphic);
+		}
+		mapControl.drawGraphics();
+
+	}
+
+
+	public boolean isEnabled() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+	public boolean isVisible() {
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/TestExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/EdgesMemoryDriver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/EdgesMemoryDriver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/EdgesMemoryDriver.java	(revision 30230)
@@ -0,0 +1,361 @@
+/*
+ * Created on 06-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1.2.2  2007-08-09 12:18:27  fjp
+ * Area de influencia con leyenda
+ *
+ * Revision 1.1.2.1  2007/08/08 11:43:40  fjp
+ * Principio de giros y area de influencia
+ *
+ * Revision 1.2  2006/11/08 19:32:36  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/11/07 19:49:28  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.awt.Color;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.sql.Types;
+import java.text.NumberFormat;
+
+import javax.swing.JOptionPane;
+
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.data.driver.ObjectDriver;
+import com.hardcode.gdbms.engine.data.edition.DataWare;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.GeneralPathX;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.drivers.DriverAttributes;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
+import com.iver.cit.gvsig.fmap.drivers.WithDefaultLegend;
+import com.iver.cit.gvsig.fmap.rendering.FInterval;
+import com.iver.cit.gvsig.fmap.rendering.Legend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialIntervalLegend;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.Network;
+
+/**
+ * Driver wrapper around arcs from a network. It may be useful to show the arcs
+ * as a layer without consuming more memory. Maybe it could be useful also to
+ * have an Edges version instead of Arcs.
+ * 
+ * @author Fco. José Peñarrubia
+ * 
+ */
+public class EdgesMemoryDriver implements VectorialDriver, ObjectDriver,
+		WithDefaultLegend {
+	static FieldDescription[] fields = new FieldDescription[6];
+	static {
+		FieldDescription fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("IDARC");
+		fieldDesc.setFieldType(Types.INTEGER);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[0] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("WEIGHT");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[1] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("LENGTH");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[2] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("TEXT");
+		fieldDesc.setFieldType(Types.VARCHAR);
+		fieldDesc.setFieldLength(25);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[3] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("COSTN1");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[4] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("COSTN2");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[5] = fieldDesc;
+
+	}
+
+	Network net;
+
+	Rectangle2D fullExtent;
+
+	public EdgesMemoryDriver(Network net) {
+		this.net = net;
+	}
+
+	public int getShapeType() {
+		return FShape.LINE;
+	}
+
+	public String getName() {
+		return "EdgeDriver";
+	}
+
+	public DriverAttributes getDriverAttributes() {
+		return null;
+	}
+
+	public boolean isWritable() {
+		return false;
+	}
+
+	public int[] getPrimaryKeys()
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+		return null;
+	}
+
+	public void write(DataWare dataWare)
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+	}
+
+	/**
+	 * Returns de field type of the specified field index.
+	 * 
+	 * @return field type of i field
+	 */
+	public int getFieldType(int i) throws DriverException {
+		// azabala: we overwrite MemoryDriver because type resolution
+		// is based in first register value (it could be null)
+		if (i >= fields.length)
+			throw new DriverException("Excedido el numero de campos");
+		return fields[i].getFieldType();
+	}
+
+	public int getShapeCount() throws IOException {
+		return net.getGraph().numEdges();
+	}
+
+	public Rectangle2D getFullExtent() throws IOException {
+		try {
+			return net.getLayer().getFullExtent();
+		} catch (com.iver.cit.gvsig.fmap.DriverException e) {
+			e.printStackTrace();
+			throw new IOException(e.getMessage());
+		}
+	}
+
+	public IGeometry getShape(int index) {
+		GvEdge edge = net.getGraph().getEdgeByID(index);
+		GvNode n1 = net.getGraph().getNodeByID(edge.getIdNodeOrig());
+		GvNode n2 = net.getGraph().getNodeByID(edge.getIdNodeEnd());
+		Line2D.Double line = new Line2D.Double(n1.getX(), n1.getY(), n2.getX(),
+				n2.getY());
+		return ShapeFactory.createPolyline2D(new GeneralPathX(line));
+	}
+
+	public void reload() throws IOException, DriverException {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getFieldValue(long, int)
+	 */
+	public Value getFieldValue(long rowIndex, int fieldId)
+			throws DriverException {
+		Value val = ValueFactory.createNullValue();
+		GvEdge edge = net.getGraph().getEdgeByID((int) rowIndex);
+		switch (fieldId) {
+		case 0: // idArc
+			return ValueFactory.createValue(edge.getIdArc());
+		case 1: // weight
+			return ValueFactory.createValue(edge.getWeight());
+		case 2: // length
+			return ValueFactory.createValue(edge.getDistance());
+		case 3:
+			return ValueFactory.createValue(edge.getType() + "");
+		case 4: // cost node1
+			GvNode n1 = net.getGraph().getNodeByID(edge.getIdNodeOrig());
+
+			if (n1.getBestCost() == Double.MAX_VALUE)
+				return ValueFactory.createValue(-1.0);
+			else
+				return ValueFactory.createValue(n1.getBestCost());
+		case 5: // cost node2
+			GvNode n2 = net.getGraph().getNodeByID(edge.getIdNodeOrig());
+			if (n2.getBestCost() == Double.MAX_VALUE)
+				return ValueFactory.createValue(-1.0);
+			else
+				return ValueFactory.createValue(n2.getBestCost());
+
+		}
+		return val;
+	}
+
+	public int getFieldCount() throws DriverException {
+		return fields.length;
+	}
+
+	public String getFieldName(int fieldId) throws DriverException {
+		return fields[fieldId].getFieldName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getRowCount()
+	 */
+	public long getRowCount() throws DriverException {
+		return net.getGraph().numEdges();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.hardcode.gdbms.engine.data.driver.GDBMSDriver#setDataSourceFactory(com.hardcode.gdbms.engine.data.DataSourceFactory)
+	 */
+	public void setDataSourceFactory(DataSourceFactory dsf) {
+	}
+
+	public int getFieldWidth(int fieldId) {
+		return fields[fieldId].getFieldLength();
+	}
+
+	private FInterval[] calculateEqualIntervals(int numIntervals,
+			double minValue, double maxValue) {
+		FInterval[] theIntervalArray = new FInterval[numIntervals];
+		double step = (maxValue - minValue) / numIntervals;
+
+		if (numIntervals > 1) {
+			theIntervalArray[0] = new FInterval(minValue, minValue + step);
+
+			for (int i = 1; i < (numIntervals - 1); i++) {
+				theIntervalArray[i] = new FInterval(minValue + (i * step)
+						+ 0.01, minValue + ((i + 1) * step));
+			}
+
+			theIntervalArray[numIntervals - 1] = new FInterval(minValue
+					+ ((numIntervals - 1) * step) + 0.01, maxValue);
+		} else {
+			theIntervalArray[0] = new FInterval(minValue, maxValue);
+		}
+
+		return theIntervalArray;
+	}
+
+	public Legend getDefaultLegend() {
+		VectorialIntervalLegend legend = new VectorialIntervalLegend(
+				FShape.LINE);
+		legend.setFieldName("COSTN1");
+		legend.setStartColor(Color.RED);
+		legend.setEndColor(Color.BLUE);
+		FInterval[] arrayIntervalos = calculateEqualIntervals(20, 0, 20000);
+            FInterval elIntervalo;
+            NumberFormat.getInstance().setMaximumFractionDigits(2);
+
+            int r;
+            int g;
+            int b;
+            int stepR;
+            int stepG;
+            int stepB;
+            r = legend.getStartColor().getRed();
+            g = legend.getStartColor().getGreen();
+            b = legend.getStartColor().getBlue();
+            stepR = (legend.getEndColor().getRed() - r) / arrayIntervalos.length;
+            stepG = (legend.getEndColor().getGreen() - g) / arrayIntervalos.length;
+            stepB = (legend.getEndColor().getBlue() - b) / arrayIntervalos.length;
+		
+        for (int k = 0; k < arrayIntervalos.length; k++) {
+            elIntervalo = arrayIntervalos[k];
+
+            // clave = elIntervalo; // elIntervalo.getMin() + " - " +
+			// elIntervalo.getMax();
+            // System.out.println("k = " + k + " clave = " + clave);
+            // //Comprobar que no esta repetido y no hace falta introducir en el
+			// hashtable el campo junto con el simbolo.
+            // if (!m_Renderer.m_symbolList.containsKey(elIntervalo)) {
+            // si no esta creado el simbolo se crea
+            FSymbol theSymbol = new FSymbol(FShape.LINE, new Color(r, g, b));
+            theSymbol.setDescription(NumberFormat.getInstance().format(elIntervalo.getMin()) +
+                " - " +
+                NumberFormat.getInstance().format(elIntervalo.getMax()));
+
+            // ////////////////////////////////////
+            // CALCULAMOS UN COLOR APROPIADO
+            r = r + stepR;
+            g = g + stepG;
+            b = b + stepB;
+
+            // ///////////////////////////////
+            legend.addSymbol(elIntervalo, theSymbol);
+        } // for
+
+		return legend;
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/EdgesMemoryDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/Route.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/Route.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/Route.java	(revision 30230)
@@ -0,0 +1,133 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.util.ArrayList;
+
+import com.hardcode.gdbms.engine.values.DoubleValue;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.core.DefaultFeature;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+
+/**
+ * @author fjp
+ * featureList es un array de IFeature.
+ * Los campos que tiene cada feature son:
+ * 0-> Id_Tramo (idArc sobre el que está ese tramo de ruta.
+ * 1-> Weight
+ * 2-> Length
+ * 3-> Texto calle o via por la que pasa.
+ *
+ */
+public class Route {
+	
+	public static final int ID_ARC_INDEX = 0;
+	public static final int WEIGHT_INDEX = 1;
+	public static final int LENGTH_INDEX = 2;
+	public static final int TEXT_INDEX = 3;
+	
+	
+	
+	
+	
+	
+	
+	public IFeature addRouteFeature(IGeometry geom, int idArc, double weight, double length, String text)
+	{
+		Value[] values = new Value[4];
+		values[0] = ValueFactory.createValue(idArc);
+		values[1] = ValueFactory.createValue(weight);
+		values[2] = ValueFactory.createValue(length);
+		values[3] = ValueFactory.createValue(text);
+		// System.out.println("Añado text= " + idArc + ": " + text);
+		DefaultFeature feat = new DefaultFeature(geom, values, featureList.size() + "");
+		featureList.add(feat);
+		return feat;
+	}
+	private ArrayList featureList = new ArrayList();
+	
+	public ArrayList getFeatureList() 
+	{
+		return featureList;
+	}
+	
+	public String getInstructions() {
+		String instructions = "";
+		double  distTotal = 0;
+		for (int i=featureList.size()-1; i>=0; i--)
+		{
+			IFeature feat = (IFeature) featureList.get(i);
+			DoubleValue length = (DoubleValue) feat.getAttribute(2);
+			double dist = length.doubleValue();
+			distTotal += dist;
+			instructions = instructions + "\n" + feat.getAttribute(3) + " dist=" + dist;
+		}
+		return instructions;
+	}
+	
+	public double getLength() {
+		double  distTotal = 0;
+		for (int i=0; i < featureList.size(); i++)
+		{
+			IFeature feat = (IFeature) featureList.get(i);
+			DoubleValue length = (DoubleValue) feat.getAttribute(2);
+			double dist = length.doubleValue();
+			distTotal += dist;
+		}
+		return distTotal;
+	}
+	
+	public double getCost() {
+		double  costTotal = 0;
+		for (int i=0; i < featureList.size(); i++)
+		{
+			IFeature feat = (IFeature) featureList.get(i);
+			DoubleValue costVal = (DoubleValue) feat.getAttribute(1);
+			double cost = costVal.doubleValue();
+			costTotal += cost;
+		}
+		return costTotal;		
+	}
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/Route.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverAStar.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverAStar.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverAStar.java	(revision 30230)
@@ -0,0 +1,634 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.util.ArrayList;
+import java.util.Stack;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.AbstractNetSolver;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.GvTurn;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+/**
+ * @author fjp
+ * Este es útil solo cuando podemos calcular la distancia estimada entre
+ * 2 nodos. (Es decir, para temas de cartografía). Para analizar relaciones
+ * creo que no serviría).
+ */
+public class ShortestPathSolverAStar extends AbstractNetSolver {
+	
+	private GeometryFactory geomFactory = new GeometryFactory();
+	
+	protected Route route = new Route();
+	private int fieldIndexStreetName;
+	
+	private class InfoShp {
+		public int idArc;
+		public double pct;
+		public double cost;
+		public double distance;
+		public int direction;
+		public boolean bFlip;
+
+	}
+	
+	public void setFielStreetName(String name) {
+		try {
+			int aux = net.getLayer().getRecordset().getFieldIndexByName(name);
+			if (aux == -1)
+				throw new RuntimeException("Field " + name + " not found.");
+			fieldIndexStreetName = aux;
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+	}
+
+	/**
+	 * @return a list of features
+	 * @throws GraphException 
+	 */
+	public Route calculateRoute() throws GraphException {
+		GvFlag[] flags = net.getFlags();
+		if (flags.length == 0)
+			throw new RuntimeException("Please, add flags before");
+		int desde = 0;
+		int hasta = 1;
+		double elCoste1 = 0;
+		route = new Route();
+		GvFlag fFrom = flags[0];
+		fFrom.setCost(0);
+		for (int i = 0; i < flags.length - 1; i++) {
+			fFrom = flags[desde];
+			GvFlag fTo = flags[hasta];
+
+			if (fFrom != fTo) {
+				int idStart = net.creaArcosVirtuales(fFrom);
+				int idStop = net.creaArcosVirtuales(fTo);
+
+				double newCost = AStar(idStart, idStop);
+				
+				elCoste1 += newCost;
+				fTo.setCost(elCoste1);
+
+				if (newCost != Double.MAX_VALUE)
+				{
+					try {
+						populateRoute(fFrom, fTo, idStart, idStop);
+					} catch (DriverException e) {
+						e.printStackTrace();
+						throw new GraphException(e);
+					}
+				}
+				else
+				{
+					// No way
+				}
+
+				net.reconstruyeTramo(fFrom.getIdArc());
+				net.reconstruyeTramo(fTo.getIdArc());
+				desde = hasta;
+			} // if son puntos distintos
+			hasta++;
+		}
+
+		return route;
+	}
+
+	private void populateRouteSimple(int idStart, int idEnd) throws DriverException {
+		int idEnlace;
+		GvNode node;
+		GvEdge link;
+		double costeEntrada;
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		double Coste = 0;
+		double Coste2 = 0;
+		IGraph graph = net.getGraph();
+		node = graph.getNodeByID(idEnd);
+		int from_link = node.getFromLink();
+		VectorialAdapter va = (VectorialAdapter) net.getLayer().getSource();
+		while (node.getIdNode() != idStart)
+		{
+			if (from_link == -1)
+			{
+				throw new RuntimeException("Fallo al recorrer de manera inversa la solución. Encontrado arco con -1");
+				// break; // FALLO!!
+			} 
+			link = graph.getEdgeByID(from_link);
+			IFeature feat = va.getFeature(link.getIdArc());
+			route.addRouteFeature(feat.getGeometry(), link.getIdArc(), 
+					link.getWeight(), link.getDistance(), feat.getAttribute(getFieldIndexStreetName()).toString());
+
+			node = graph.getNodeByID(link.getIdNodeOrig());
+
+			Coste = Coste + link.getWeight();
+			Coste2 = Coste2 + link.getDistance();
+
+			// TODO:
+			// from_link = node.get_from_link(idEnlace, &costeEntrada);
+			from_link = node.getFromLink();
+			
+	    }	
+		System.out.println("Salgo con node = " + node.getIdNode());
+	}
+
+	private void populateRoute(GvFlag origin, GvFlag dest, int idStart, int idEnd) throws DriverException {
+		int idEnlace;
+		GvNode node;
+		GvEdge link;
+		double costeEntrada;
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		
+		if (idStart == idEnd)
+			return;
+		IGraph graph = net.getGraph();
+		node = graph.getNodeByID(idEnd);
+		int from_link = node.getFromLink();
+		VectorialAdapter va = (VectorialAdapter) net.getLayer().getSource();
+		try {
+			va.start();
+		/*	Miramos los nodos de los tramos inicio y final, y cogemos el nodo que tenga el from_link rellenado. E IGUAL A NUMSOLUCGLOBAL!!!!
+			A partir de ahí, recorremos hacia atrás y tenemos el cuerpo principal del shape. Luego, para
+			las puntas hay que tener en cuenta los porcentajes, viendo el trozo que está pegando a los nodos
+			que sabemos que están en el path
+		*/
+
+		/* 22/9/2003 Corregimos el fallo que había de escribir el shape de atrás adelante.
+		*  Guardamos lo que necesitamos en listaShapes y recorremos esa lista guardando los tramos
+		*	con el sentido adecuado.
+		*/
+
+		/* 3/Febrero/2005 Limpieza de código superfluo y correción de un fallo raro. Ahora es más simple y parece
+		* que no falla. A ver si dura. IDEA: quizás se necesite meter el porcentaje en los arcos partidos.
+		*/	
+
+		// Define a template class for a vector of IDs.
+		InfoShp infoShp;
+		Stack pilaShapes = new Stack();
+//		typedef stack<CInfoShp> PILAINFO;
+//		PILAINFO pilaShapes;
+
+		double costeTramoFinal=-1;
+		GvNode nodeEnd = graph.getNodeByID(idEnd);
+		GvEdge finalEdge = graph.getEdgeByID(nodeEnd.getFromLink());
+		costeTramoFinal = finalEdge.getWeight();
+
+		GvNode pNodo;
+		GvEdge pEnlace;
+		
+		boolean bFlipearShape = false;
+
+		double pctMax, pctMin;
+
+
+
+		//////////////////////////////////////////////////////////////////////////////////////
+		// Trozo del final
+		// El shape va de idStop1 a idStop2, y el porcentaje viene en ese sentido.
+		// Si el idEnd es idStop1, quiere decir que el tramo que falta va en ese sentido también,
+		// así que recorremos ese shape desde idStop1 hasta que rebasemos o igualemos ese porcentaje.
+		// Si no, hemos pasado por idStop2 y la parte que hay que meter es desde el pto interior a idStop2
+		///////////////////////////////////////////////////////////////////////////////////////
+		IFeature feat = va.getFeature(finalEdge.getIdArc());
+		MultiLineString jtsGeom = (MultiLineString) feat.getGeometry().toJTSGeometry();
+//		CoordinateFilter removeDuplicates = new UniqueCoordinateArrayFilter(); 
+//		jtsGeom.apply(removeDuplicates);
+//		jtsGeom.geometryChanged();
+		
+		
+		
+		// SI ESTAMOS SOBRE EL MISMO TRAMO, CASO PARTICULAR
+		// y el sentido de circulación es correcto
+		if ((origin.getIdArc() == dest.getIdArc()) && (nodeEnd.getBestCost() <= costeTramoFinal))
+		{
+			if (dest.getPct() > origin.getPct())
+			{
+				pctMax = dest.getPct();
+				pctMin = origin.getPct(); 
+			}
+			else
+			{
+				pctMax = origin.getPct();
+				pctMin = dest.getPct();
+				bFlipearShape = true;
+			}
+
+			LineString line = SituaSobreTramo(jtsGeom,dest.getIdArc(), dest.getPct(),1);
+			
+			pctMin = pctMin / pctMax; // Porque ha cambiado la longitud del shape
+
+			line = SituaSobreTramo(line,dest.getIdArc(), pctMin,0);
+
+			if (bFlipearShape)
+				line = line.reverse();
+			
+			IGeometry geom = FConverter.jts_to_igeometry(line);
+			// TODO: Calcular bien el length de este arco, 
+			// basandonos en el porcentaje costeTramoFinal / costeOriginal
+			route.addRouteFeature(geom, origin.getIdArc(), 
+					costeTramoFinal, line.getLength(), feat.getAttribute(getFieldIndexStreetName()).toString());
+
+
+			return ; // Debería sacar el coste
+		}
+
+		
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		pNodo = graph.getNodeByID(idEnd);
+
+		while ((pNodo.getIdNode() != idStart)) 
+		{
+			idEnlace = pNodo.getFromLink();
+			pEnlace = graph.getEdgeByID(idEnlace);
+
+			pNodo = graph.getNodeByID(pEnlace.getIdNodeOrig());
+			
+			infoShp = new InfoShp();
+			infoShp.distance = pEnlace.getDistance();
+			infoShp.cost = pEnlace.getWeight();
+
+			if ((pEnlace.getIdArc() == origin.getIdArc()) || (pEnlace.getIdArc() == dest.getIdArc()))
+			{
+				if (pEnlace.getIdArc() == origin.getIdArc())
+				{
+					infoShp.pct = origin.getPct();
+					infoShp.idArc = origin.getIdArc();
+					if (pEnlace.getDirec() == 0) 
+					{
+						infoShp.direction = 1;
+						infoShp.bFlip = true;
+					}
+					else // Hemos pasado por el 2
+					{
+						infoShp.direction = 0;
+						infoShp.bFlip = false;
+					} // if else */
+				}
+				else
+				{
+					infoShp.pct = dest.getPct();
+					infoShp.idArc = dest.getIdArc();
+					if (pEnlace.getDirec() == 0)
+					{
+						infoShp.direction = 0;
+						infoShp.bFlip = true;
+					}
+					else
+					{
+						infoShp.direction = 1;
+						infoShp.bFlip = false;
+					} // if else */
+				}
+			}
+			else
+			{
+				infoShp.pct = 1.0;
+				infoShp.idArc = pEnlace.getIdArc();
+				
+				infoShp.direction =1;
+				if (pEnlace.getDirec() == 1)
+					infoShp.bFlip = false;
+				else
+					infoShp.bFlip = true;
+			}
+
+			pilaShapes.push(infoShp);
+		}
+
+		// Y ahora recorremos hacia atrás el vector y escribimos los shapes.
+		// VECTORINFO::iterator theIterator;
+		int auxC = 0;
+		
+		while (!pilaShapes.empty())  
+		{
+			infoShp = (InfoShp) pilaShapes.peek();
+			feat = va.getFeature(infoShp.idArc);
+			MultiLineString line = (MultiLineString) feat.getGeometry().toJTSGeometry();
+//			line.apply(removeDuplicates);
+//			line.geometryChanged();
+			
+			LineString aux = null;
+			if (infoShp.pct < 1.0)
+				aux = SituaSobreTramo(line,infoShp.idArc, infoShp.pct, infoShp.direction);
+
+			IGeometry geom = null;
+			if (aux == null)
+			{
+				if (infoShp.bFlip)
+					line = line.reverse();
+				geom = FConverter.jts_to_igeometry(line);
+			}	
+			else
+			{
+				if (infoShp.bFlip)
+					aux = aux.reverse();
+				geom = FConverter.jts_to_igeometry(aux);
+			}	
+
+
+			route.addRouteFeature(geom, infoShp.idArc, 
+					infoShp.cost, infoShp.distance, feat.getAttribute(getFieldIndexStreetName()).toString());
+
+
+			pilaShapes.pop();
+			auxC++;
+			
+		}
+		va.stop();
+		} catch (DriverIOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		return;
+
+		
+	}
+
+	LineString SituaSobreTramo(Geometry geom, int idArc, double pct, int parte)
+//	 Si parte vale cero, los válidos son los primeros. Si no, los segundos.
+	{
+		int j, numVertices;
+		double longAcum, longReal, longBuscada, distSobre, miniPorcentaje;
+		double nuevaX, nuevaY; // Por cuestiones de claridad al programar
+		double dist=0;
+
+		longAcum = 0;
+		longReal = geom.getLength();
+		longBuscada = longReal * pct;
+		Coordinate[] coords = geom.getCoordinates();
+		Coordinate c1 = null, c2 = null;
+		ArrayList savedCoords = new ArrayList();
+
+	 	if (parte > 0) // Hemos entrado por el 1 hacia el 2 (al 2 no llegamos)
+		{
+			for( j = 0; j < coords.length-1; j++ ) 
+			{
+				c1 = coords[j];
+				c2 = coords[j+1];
+				dist = c1.distance(c2);
+				longAcum += dist;
+				savedCoords.add(c1);
+				if (longAcum >= longBuscada)
+				{
+					// Hasta aquí. Ahora ahi que poner el punto sobre el tramo
+					distSobre = dist - (longAcum - longBuscada);
+					miniPorcentaje = distSobre/dist;
+
+					nuevaX = c1.x + (c2.x-c1.x) * miniPorcentaje;
+					nuevaY = c1.y + (c2.y-c1.y) * miniPorcentaje;
+		
+					savedCoords.add(new Coordinate(nuevaX, nuevaY));
+					break;
+				} // if longAcum >= longBuscada
+			} // for j
+			
+		}
+		else // Hemos entrado por el 2 hacia el 1
+		{
+			numVertices = 0;
+			for( j = 0; j < coords.length; j++ ) 
+			{
+				////////////////////////////////////////////////////////////////
+				// 13_ene_2005: Si el último punto es el último punto no
+				// podemos acceder al elemento j+1 porque nos salimos del shape
+				/////////////////////////////////////////////////////////////////
+				c1 = coords[j];
+				if (j < coords.length -1)
+				{					
+					c2 = coords[j+1];
+
+					dist = c1.distance(c2);
+					longAcum += dist;
+				}
+
+				if (longAcum >= longBuscada)
+				{
+					// Hasta aquí. Empezamos a meter puntos
+
+					if (numVertices == 0) 
+					{
+						distSobre = dist - (longAcum - longBuscada);
+						miniPorcentaje = distSobre/dist;
+						nuevaX = c1.x + (c2.x-c1.x) * miniPorcentaje;
+						nuevaY = c1.y + (c2.y-c1.y) * miniPorcentaje;
+						
+						savedCoords.add(new Coordinate(nuevaX, nuevaY));
+					}
+					else
+					{
+						savedCoords.add(c2);
+					}
+					numVertices ++;
+					// break;
+				} // if longAcum >= longBuscada
+			} // for j
+			
+			// savedCoords.add(c2);
+			
+		} // if else
+
+	 	
+	 	return geomFactory.createLineString((Coordinate[] )savedCoords.toArray(new Coordinate[0]));
+	}
+
+	private int getFieldIndexStreetName() {
+		return fieldIndexStreetName;
+	}
+
+	private double AStar(int idStart, int idStop) {
+		int nodeNum;
+		int linkNum;
+		double newCost;
+		int idSiguienteNodo;
+		GvNode node, toNode, finalNode, bestNode; // , *pNodoProv;
+		GvEdge link;
+		boolean bExit = false;
+
+		boolean bGiroProhibido;
+		ArrayList candidatos = new ArrayList();
+
+		// char Mensaje[200];
+		
+		IGraph graph = net.getGraph();
+
+		// NUEVO: 27-6-2003
+		// Cada nodo y cada arco llevan un nuemero de solución. Se supone
+		// que si lo del nodo y el arco no coincide con
+		// este numero, todavía no ha sido inicializado y hay que hacerlo.
+		// Para evitar coincidencias cuando de la vuelta el contador, cada
+		// 65000 peticiones (por ejemplo), repasamos toda
+		// la red y ponemos numSolucGlobal a -1
+		if (numSolucGlobal > 65000) {
+			numSolucGlobal = -1;
+
+			for (nodeNum = 0; nodeNum < graph.numVertices(); nodeNum++) {
+				node = graph.getNodeByID(nodeNum);
+				node.initialize();
+			} // for nodeNum */
+
+		}
+		numSolucGlobal++;
+
+		candidatos.clear();
+		// Añadimos el Start Node a la lista de candidatosSTL
+		// Nodo final
+		finalNode = graph.getNodeByID(idStop);
+		finalNode.initialize();
+
+		node = graph.getNodeByID(idStart);
+		node.initialize();
+		bestNode = node;
+
+		candidatos.add(node);
+		node.setBestCost(0);
+		node.setStatus(GvNode.statNowInList);
+		node.calculateStimation(finalNode, 0);
+
+		// Mientras que la lista de candidatosSTL no esté vacía, procesamos
+		// Nodos
+		double bestStimation;
+
+		while ((!bExit) && (candidatos.size() > 0)) {
+			// Buscamos el nodo con mínimo coste
+			node = (GvNode) candidatos.get(0);
+			bestNode = node;
+			bestStimation = node.getStimation();
+			for (nodeNum = 1; nodeNum < candidatos.size(); nodeNum++) {
+				node = (GvNode) candidatos.get(nodeNum);
+				if (node.getStimation() < bestStimation) {
+					bestStimation = node.getStimation();
+					bestNode = node;
+				}
+			} // for nodeNum candidatosSTL
+
+			node = bestNode;
+			// Borramos el mejor nodo de la lista de candidatosSTL
+			node.setStatus(GvNode.statWasInList);
+			// TODO: BORRAR POR INDEX, NO ASÍ. ES MÁS LENTO QUE SI BORRAMOS EL i-ésimo.
+			candidatos.remove(node);
+			// System.out.println("LINK " + link.getIdArc() + " from ");
+			// System.out.println("from " + idStart + " to " + finalNode.getIdNode() + ". node=" + node.getIdNode());
+			// Miramos si hemos llegado donde queríamos
+			if (bestNode.getIdNode() == idStop) {
+				bExit = true;
+				break;
+			}
+
+			// sprintf(Mensaje,"Enlaces en el nodo %ld:
+			// %ld.",pNodo->idNodo,pNodo->Enlaces.GetSize());
+			// AfxMessageBox(Mensaje);
+
+			// Añadimos a la lista de candidatosSTL los vecinos del nodo que
+			// acabamos de borrar
+			// HAY Arcos QUE SALEN Y Arcos QUE LLEGAN. SOLO MIRAMOS LOS QUE
+			// SALEN.
+			for (linkNum = 0; linkNum < node.getEnlaces().size(); linkNum++) {
+				// Pillamos el nodo vecino
+				link = (GvEdge) node.getEnlaces().get(linkNum);
+				idSiguienteNodo = link.getIdNodeEnd();
+
+				toNode = graph.getNodeByID(idSiguienteNodo);
+
+				// 27_5_2004
+				// Si un arco tiene coste negativo, lo ignoramos
+				if (link.getWeight() < 0)
+					continue;
+
+				// Fin arco con coste negativo
+
+				// NUEVO: 26-7-2003: Comprobamos si está inicializado
+				if (toNode.getNumSoluc() != numSolucGlobal) {
+					toNode.initialize();
+				}
+				else
+				{
+					// System.out.println("Nodo ya inicializado");
+				}
+
+				// Miramos a ver si podemos mejorar su best_cost
+				newCost = node.getBestCost() + link.getWeight();
+
+				if (newCost < toNode.getBestCost()) {
+					// Es una mejora, así que actualizamos el vecino y
+					// lo añadimos a los candidatosSTL
+					toNode.setBestCost(newCost);					 
+					toNode.setFromLink(link.getIdEdge());
+					
+					toNode.calculateStimation(finalNode, newCost);
+
+					if (toNode.getStatus() != GvNode.statNowInList) {
+						toNode.setStatus(GvNode.statNowInList);
+						candidatos.add(toNode);
+					}
+				} // Si hay mejora
+
+			} // for linkNum
+		} // while candidatosSTL
+
+		newCost = finalNode.getBestCost();
+
+		return newCost;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverAStar.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverDijkstra.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverDijkstra.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverDijkstra.java	(revision 30230)
@@ -0,0 +1,654 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.util.ArrayList;
+import java.util.Stack;
+
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.AbstractNetSolver;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.GvTurn;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiLineString;
+
+public class ShortestPathSolverDijkstra extends AbstractNetSolver {
+	
+	private GeometryFactory geomFactory = new GeometryFactory();
+	
+	protected Route route = new Route();
+	private int fieldIndexStreetName;
+	
+	private class InfoShp {
+		public int idArc;
+		public double pct;
+		public double cost;
+		public double distance;
+		public int direction;
+		public boolean bFlip;
+
+	}
+	
+	public void setFielStreetName(String name) {
+		try {
+			int aux = net.getLayer().getRecordset().getFieldIndexByName(name);
+			if (aux == -1)
+				throw new RuntimeException("Field " + name + " not found.");
+			fieldIndexStreetName = aux;
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+	}
+
+	/**
+	 * @return a list of features
+	 * @throws GraphException 
+	 */
+	public Route calculateRoute() throws GraphException {
+		GvFlag[] flags = net.getFlags();
+		if (flags.length == 0)
+			throw new RuntimeException("Please, add flags before");
+		int desde = 0;
+		int hasta = 1;
+		double elCoste1 = 0;
+		route = new Route();
+		for (int i = 0; i < flags.length - 1; i++) {
+			GvFlag fFrom = flags[desde];
+			GvFlag fTo = flags[hasta];
+
+			if (fFrom != fTo) {
+				int idStart = net.creaArcosVirtuales(fFrom);
+				int idStop = net.creaArcosVirtuales(fTo);
+
+				double newCost = dijkstra(idStart, idStop);
+				elCoste1 += newCost;
+
+				if (newCost != Double.MAX_VALUE)
+				{
+					try {
+						populateRoute(fFrom, fTo, idStart, idStop);
+					} catch (DriverException e) {
+						e.printStackTrace();
+						throw new GraphException(e);
+					}
+				}
+				else
+				{
+					// No way
+				}
+
+				net.reconstruyeTramo(fFrom.getIdArc());
+				net.reconstruyeTramo(fTo.getIdArc());
+				desde = hasta;
+			} // if son puntos distintos
+			hasta++;
+		}
+
+		return route;
+	}
+
+	private void populateRouteSimple(int idStart, int idEnd) throws DriverException {
+		int idEnlace;
+		GvNode node;
+		GvEdge link;
+		double costeEntrada;
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		double Coste = 0;
+		double Coste2 = 0;
+		IGraph graph = net.getGraph();
+		node = graph.getNodeByID(idEnd);
+		int from_link = node.getFromLink();
+		VectorialAdapter va = (VectorialAdapter) net.getLayer().getSource();
+		while (node.getIdNode() != idStart)
+		{
+			if (from_link == -1)
+			{
+				throw new RuntimeException("Fallo al recorrer de manera inversa la solución. Encontrado arco con -1");
+				// break; // FALLO!!
+			} 
+			link = graph.getEdgeByID(from_link);
+			IFeature feat = va.getFeature(link.getIdArc());
+			route.addRouteFeature(feat.getGeometry(), link.getIdArc(), 
+					link.getWeight(), link.getDistance(), feat.getAttribute(getFieldIndexStreetName()).toString());
+
+			node = graph.getNodeByID(link.getIdNodeOrig());
+
+			Coste = Coste + link.getWeight();
+			Coste2 = Coste2 + link.getDistance();
+
+			// TODO:
+			// from_link = node.get_from_link(idEnlace, &costeEntrada);
+			from_link = node.getFromLink();
+			
+	    }	
+		System.out.println("Salgo con node = " + node.getIdNode());
+	}
+
+	private void populateRoute(GvFlag origin, GvFlag dest, int idStart, int idEnd) throws DriverException {
+		int idEnlace;
+		GvNode node;
+		GvEdge link;
+		double costeEntrada;
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		IGraph graph = net.getGraph();
+		node = graph.getNodeByID(idEnd);
+		int from_link = node.getFromLink();
+		VectorialAdapter va = (VectorialAdapter) net.getLayer().getSource();
+		
+		/*	Miramos los nodos de los tramos inicio y final, y cogemos el nodo que tenga el from_link rellenado. E IGUAL A NUMSOLUCGLOBAL!!!!
+			A partir de ahí, recorremos hacia atrás y tenemos el cuerpo principal del shape. Luego, para
+			las puntas hay que tener en cuenta los porcentajes, viendo el trozo que está pegando a los nodos
+			que sabemos que están en el path
+		*/
+
+		/* 22/9/2003 Corregimos el fallo que había de escribir el shape de atrás adelante.
+		*  Guardamos lo que necesitamos en listaShapes y recorremos esa lista guardando los tramos
+		*	con el sentido adecuado.
+		*/
+
+		/* 3/Febrero/2005 Limpieza de código superfluo y correción de un fallo raro. Ahora es más simple y parece
+		* que no falla. A ver si dura. IDEA: quizás se necesite meter el porcentaje en los arcos partidos.
+		*/	
+
+		// Define a template class for a vector of IDs.
+		InfoShp infoShp;
+		Stack pilaShapes = new Stack();
+//		typedef stack<CInfoShp> PILAINFO;
+//		PILAINFO pilaShapes;
+
+		double costeTramoFinal=-1;
+		GvNode nodeEnd = graph.getNodeByID(idEnd);
+		GvEdge finalEdge = graph.getEdgeByID(nodeEnd.getFromLink());
+		costeTramoFinal = finalEdge.getWeight();
+
+		GvNode pNodo;
+		GvEdge pEnlace;
+		
+		boolean bFlipearShape = false;
+
+		double pctMax, pctMin;
+
+
+
+		//////////////////////////////////////////////////////////////////////////////////////
+		// Trozo del final
+		// El shape va de idStop1 a idStop2, y el porcentaje viene en ese sentido.
+		// Si el idEnd es idStop1, quiere decir que el tramo que falta va en ese sentido también,
+		// así que recorremos ese shape desde idStop1 hasta que rebasemos o igualemos ese porcentaje.
+		// Si no, hemos pasado por idStop2 y la parte que hay que meter es desde el pto interior a idStop2
+		///////////////////////////////////////////////////////////////////////////////////////
+		IFeature feat = va.getFeature(finalEdge.getIdArc());
+		MultiLineString jtsGeom = (MultiLineString) feat.getGeometry().toJTSGeometry();
+//		CoordinateFilter removeDuplicates = new UniqueCoordinateArrayFilter(); 
+//		jtsGeom.apply(removeDuplicates);
+//		jtsGeom.geometryChanged();
+		
+		
+		
+		// SI ESTAMOS SOBRE EL MISMO TRAMO, CASO PARTICULAR
+		// y el sentido de circulación es correcto
+		if ((origin.getIdArc() == dest.getIdArc()) && (nodeEnd.getBestCost() <= costeTramoFinal))
+		{
+			if (dest.getPct() > origin.getPct())
+			{
+				pctMax = dest.getPct();
+				pctMin = origin.getPct(); 
+			}
+			else
+			{
+				pctMax = origin.getPct();
+				pctMin = dest.getPct();
+				bFlipearShape = true;
+			}
+
+			LineString line = SituaSobreTramo(jtsGeom,dest.getIdArc(), dest.getPct(),1);
+			
+			pctMin = pctMin / pctMax; // Porque ha cambiado la longitud del shape
+
+			line = SituaSobreTramo(line,dest.getIdArc(), pctMin,0);
+
+			if (bFlipearShape)
+				line = line.reverse();
+			
+			IGeometry geom = FConverter.jts_to_igeometry(line);
+			// TODO: Calcular bien el length de este arco, 
+			// basandonos en el porcentaje costeTramoFinal / costeOriginal
+			route.addRouteFeature(geom, origin.getIdArc(), 
+					costeTramoFinal, line.getLength(), feat.getAttribute(getFieldIndexStreetName()).toString());
+
+
+			return ; // Debería sacar el coste
+		}
+
+		
+
+		// Trazar el camino desde idEnd hasta idStart hacia atrás marcando los Enlaces
+		pNodo = graph.getNodeByID(idEnd);
+
+		while ((pNodo.getIdNode() != idStart)) 
+		{
+			idEnlace = pNodo.getFromLink();
+			pEnlace = graph.getEdgeByID(idEnlace);
+
+			pNodo = graph.getNodeByID(pEnlace.getIdNodeOrig());
+			
+			infoShp = new InfoShp();
+			infoShp.distance = pEnlace.getDistance();
+			infoShp.cost = pEnlace.getWeight();
+
+			if ((pEnlace.getIdArc() == origin.getIdArc()) || (pEnlace.getIdArc() == dest.getIdArc()))
+			{
+				if (pEnlace.getIdArc() == origin.getIdArc())
+				{
+					infoShp.pct = origin.getPct();
+					infoShp.idArc = origin.getIdArc();
+					if (pEnlace.getDirec() == 0) 
+					{
+						infoShp.direction = 1;
+						infoShp.bFlip = true;
+					}
+					else // Hemos pasado por el 2
+					{
+						infoShp.direction = 0;
+						infoShp.bFlip = false;
+					} // if else */
+				}
+				else
+				{
+					infoShp.pct = dest.getPct();
+					infoShp.idArc = dest.getIdArc();
+					if (pEnlace.getDirec() == 0)
+					{
+						infoShp.direction = 0;
+						infoShp.bFlip = true;
+					}
+					else
+					{
+						infoShp.direction = 1;
+						infoShp.bFlip = false;
+					} // if else */
+				}
+			}
+			else
+			{
+				infoShp.pct = 1.0;
+				infoShp.idArc = pEnlace.getIdArc();
+				
+				infoShp.direction =1;
+				if (pEnlace.getDirec() == 1)
+					infoShp.bFlip = false;
+				else
+					infoShp.bFlip = true;
+			}
+
+			pilaShapes.push(infoShp);
+		}
+
+		// Y ahora recorremos hacia atrás el vector y escribimos los shapes.
+		// VECTORINFO::iterator theIterator;
+		int auxC = 0;
+		
+		while (!pilaShapes.empty())  
+		{
+			infoShp = (InfoShp) pilaShapes.peek();
+			feat = va.getFeature(infoShp.idArc);
+			MultiLineString line = (MultiLineString) feat.getGeometry().toJTSGeometry();
+//			line.apply(removeDuplicates);
+//			line.geometryChanged();
+			
+			LineString aux = null;
+			if (infoShp.pct < 1.0)
+				aux = SituaSobreTramo(line,infoShp.idArc, infoShp.pct, infoShp.direction);
+
+			IGeometry geom = null;
+			if (aux == null)
+			{
+				if (infoShp.bFlip)
+					line = line.reverse();
+				geom = FConverter.jts_to_igeometry(line);
+			}	
+			else
+			{
+				if (infoShp.bFlip)
+					aux = aux.reverse();
+				geom = FConverter.jts_to_igeometry(aux);
+			}	
+
+
+			route.addRouteFeature(geom, infoShp.idArc, 
+					infoShp.cost, infoShp.distance, feat.getAttribute(getFieldIndexStreetName()).toString());
+
+
+			pilaShapes.pop();
+			auxC++;
+			
+		}
+
+		return;
+
+		
+	}
+
+	LineString SituaSobreTramo(Geometry geom, int idArc, double pct, int parte)
+//	 Si parte vale cero, los válidos son los primeros. Si no, los segundos.
+	{
+		int j, numVertices;
+		double longAcum, longReal, longBuscada, distSobre, miniPorcentaje;
+		double nuevaX, nuevaY; // Por cuestiones de claridad al programar
+		double dist=0;
+
+		longAcum = 0;
+		longReal = geom.getLength();
+		longBuscada = longReal * pct;
+		Coordinate[] coords = geom.getCoordinates();
+		Coordinate c1 = null, c2 = null;
+		ArrayList savedCoords = new ArrayList();
+
+	 	if (parte > 0) // Hemos entrado por el 1 hacia el 2 (al 2 no llegamos)
+		{
+			for( j = 0; j < coords.length-1; j++ ) 
+			{
+				c1 = coords[j];
+				c2 = coords[j+1];
+				dist = c1.distance(c2);
+				longAcum += dist;
+				savedCoords.add(c1);
+				if (longAcum >= longBuscada)
+				{
+					// Hasta aquí. Ahora ahi que poner el punto sobre el tramo
+					distSobre = dist - (longAcum - longBuscada);
+					miniPorcentaje = distSobre/dist;
+
+					nuevaX = c1.x + (c2.x-c1.x) * miniPorcentaje;
+					nuevaY = c1.y + (c2.y-c1.y) * miniPorcentaje;
+		
+					savedCoords.add(new Coordinate(nuevaX, nuevaY));
+					break;
+				} // if longAcum >= longBuscada
+			} // for j
+			
+		}
+		else // Hemos entrado por el 2 hacia el 1
+		{
+			numVertices = 0;
+			for( j = 0; j < coords.length; j++ ) 
+			{
+				////////////////////////////////////////////////////////////////
+				// 13_ene_2005: Si el último punto es el último punto no
+				// podemos acceder al elemento j+1 porque nos salimos del shape
+				/////////////////////////////////////////////////////////////////
+				c1 = coords[j];
+				if (j < coords.length -1)
+				{					
+					c2 = coords[j+1];
+
+					dist = c1.distance(c2);
+					longAcum += dist;
+				}
+
+				if (longAcum >= longBuscada)
+				{
+					// Hasta aquí. Empezamos a meter puntos
+
+					if (numVertices == 0) 
+					{
+						distSobre = dist - (longAcum - longBuscada);
+						miniPorcentaje = distSobre/dist;
+						nuevaX = c1.x + (c2.x-c1.x) * miniPorcentaje;
+						nuevaY = c1.y + (c2.y-c1.y) * miniPorcentaje;
+						
+						savedCoords.add(new Coordinate(nuevaX, nuevaY));
+					}
+					else
+					{
+						savedCoords.add(c2);
+					}
+					numVertices ++;
+					// break;
+				} // if longAcum >= longBuscada
+			} // for j
+			
+			// savedCoords.add(c2);
+			
+		} // if else
+
+	 	
+	 	return geomFactory.createLineString((Coordinate[] )savedCoords.toArray(new Coordinate[0]));
+	}
+
+	private int getFieldIndexStreetName() {
+		return fieldIndexStreetName;
+	}
+
+	private double dijkstra(int idStart, int idStop) {
+		int nodeNum;
+		int linkNum;
+		double newCost;
+		int idSiguienteNodo;
+		GvNode node, toNode, finalNode, bestNode; // , *pNodoProv;
+		GvEdge link;
+		boolean bExit = false;
+		double bestCost;
+
+		boolean bGiroProhibido;
+		ArrayList candidatos = new ArrayList();
+
+		GvTurn theTurn;
+		// char Mensaje[200];
+		
+		IGraph graph = net.getGraph();
+
+		// NUEVO: 27-6-2003
+		// Cada nodo y cada arco llevan un numero de solución. Se supone
+		// que si lo del nodo y el arco no coincide con
+		// este numero, todavía no ha sido inicializado y hay que hacerlo.
+		// Para evitar coincidencias cuando de la vuelta el contador, cada
+		// 65000 peticiones (por ejemplo), repasamos toda
+		// la red y ponemos numSolucGlobal a -1
+		if (numSolucGlobal > 65000) {
+			numSolucGlobal = -1;
+
+			for (nodeNum = 0; nodeNum < graph.numVertices(); nodeNum++) {
+				node = graph.getNodeByID(nodeNum);
+				node.initialize();
+			} // for nodeNum */
+
+		}
+		numSolucGlobal++;
+
+		candidatos.clear();
+		// Añadimos el Start Node a la lista de candidatosSTL
+		// Nodo final
+		finalNode = graph.getNodeByID(idStop);
+		finalNode.initialize();
+
+		node = graph.getNodeByID(idStart);
+		node.initialize();
+		bestNode = node;
+
+		candidatos.add(node);
+		node.setBestCost(0);
+		node.setStatus(GvNode.statNowInList);
+		bestCost = Double.MAX_VALUE;
+
+		// Mientras que la lista de candidatosSTL no esté vacía, procesamos
+		// Nodos
+
+		while ((!bExit) && (candidatos.size() > 0)) {
+			// Buscamos el nodo con mínimo coste
+			node = (GvNode) candidatos.get(0);
+			bestNode = node;
+			bestCost = node.getBestCost();
+			for (nodeNum = 1; nodeNum < candidatos.size(); nodeNum++) {
+				node = (GvNode) candidatos.get(nodeNum);
+				if (node.getBestCost() < bestCost) {
+					bestCost = node.getBestCost();
+					bestNode = node;
+				}
+			} // for nodeNum candidatosSTL
+
+			node = bestNode;
+			// Borramos el mejor nodo de la lista de candidatosSTL
+			node.setStatus(GvNode.statWasInList);
+			// TODO: BORRAR POR INDEX, NO ASÍ. ES MÁS LENTO QUE SI BORRAMOS EL i-ésimo.
+			candidatos.remove(node);
+			// System.out.println("LINK " + link.getIdArc() + " from ");
+			// System.out.println("from " + idStart + " to " + finalNode.getIdNode() + ". node=" + node.getIdNode());
+			// Miramos si hemos llegado donde queríamos
+			if (bestNode.getIdNode() == idStop) {
+				bExit = true;
+				break;
+			}
+
+			// sprintf(Mensaje,"Enlaces en el nodo %ld:
+			// %ld.",pNodo->idNodo,pNodo->Enlaces.GetSize());
+			// AfxMessageBox(Mensaje);
+
+			// Añadimos a la lista de candidatosSTL los vecinos del nodo que
+			// acabamos de borrar
+			// HAY Arcos QUE SALEN Y Arcos QUE LLEGAN. SOLO MIRAMOS LOS QUE
+			// SALEN.
+			for (linkNum = 0; linkNum < node.getEnlaces().size(); linkNum++) {
+				// Pillamos el nodo vecino
+				link = (GvEdge) node.getEnlaces().get(linkNum);
+				idSiguienteNodo = link.getIdNodeEnd();
+
+				toNode = graph.getNodeByID(idSiguienteNodo);
+
+				// 27_5_2004
+				// Si un arco tiene coste negativo, lo ignoramos
+				if (link.getWeight() < 0)
+					continue;
+
+				// Fin arco con coste negativo
+
+				// NUEVO: 26-7-2003: Comprobamos si está inicializado
+				if (toNode.getNumSoluc() != numSolucGlobal) {
+					toNode.initialize();
+				}
+				else
+				{
+					// System.out.println("Nodo ya inicializado");
+				}
+
+				// Miramos si ese nodo ya ha estado antes en la lista de
+				// candidatos
+				if (toNode.getStatus() != GvNode.statWasInList) {
+					// Miramos a ver si podemos mejorar su best_cost
+					newCost = node.getBestCost() + link.getWeight();
+
+					// Miramos la lista de Giros de ese nodo
+					bGiroProhibido = false;
+					for (int idGiro = 0; idGiro < node.getTurns().size(); idGiro++) {
+						// Si está prohibido, a por otro
+						theTurn = (GvTurn) node.getTurns().get(idGiro);
+						 if ((theTurn.getIdArcFrom() ==	 graph.getEdgeByID(node.getFromLink()).getIdArc()) &&
+								 (theTurn.getIdArcTo() == link.getIdArc()))
+						 {
+							 if (theTurn.getCost() < 0)
+							 {
+								 bGiroProhibido = true;
+								 // No podemos inicializar por completo el nodo porque entonces
+								 // perdemos el fromLink (el arco desde donde hemos llegado hasta
+								 // este nodo, que es necesario para calcular los costes y generar
+								 // el shape recorriendo hacia atrás el camino realizado.
+								 // Si había más de un nodo con costes prohibidos, cabía la posibilidad
+								 // de que perdieramos este enlace.
+																	
+								 // Para que pueda volver a entrar en cálculos
+								 node.setStatus(GvNode.statNotInList);
+								 node.setBestCost(Double.MAX_VALUE);						
+							 }
+							 else
+								 newCost += theTurn.getCost();
+							 break; // Salimos del for porque ya hemos encontrado el giro
+						 }
+					}
+					// Si está prohibido, vamos a por otro enlace, PERO
+					// MARCAMOS EL NODO
+					// COMO NO VISITADO PARA QUE PUEDA VOLVER A ENTRAR EN LA
+					// LISTA DE CANDIDATOS
+					// SI VENIMOS POR OTRO LADO.
+					if (bGiroProhibido) {
+						continue;
+					}
+
+					if (newCost < toNode.getBestCost()) {
+						// Es una mejora, así que actualizamos el vecino y
+						// lo añadimos a los candidatosSTL
+						toNode.setBestCost(newCost);
+						 
+						toNode.setFromLink(link.getIdEdge());
+
+						if (toNode.getStatus() != GvNode.statNowInList) {
+							toNode.setStatus(GvNode.statNowInList);
+							candidatos.add(toNode);
+						}
+					} // Si hay mejora
+				} // if ese nodo no ha estado en la lista de candidatosSTL
+
+			} // for linkNum
+		} // while candidatosSTL
+
+		newCost = finalNode.getBestCost();
+
+		return newCost;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverDijkstra.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/FlagsMemoryDriver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/FlagsMemoryDriver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/FlagsMemoryDriver.java	(revision 30230)
@@ -0,0 +1,303 @@
+/*
+ * Created on 07-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.2  2006-11-08 19:32:36  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/11/07 19:49:28  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.swing.table.DefaultTableModel;
+
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.data.edition.DataWare;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.cit.gvsig.fmap.core.DefaultFeature;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.drivers.DriverAttributes;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.MemoryDriver;
+import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
+import com.iver.cit.gvsig.fmap.operations.strategies.MemoryShapeInfo;
+
+public class FlagsMemoryDriver extends MemoryDriver implements VectorialDriver {
+
+	// TODO Internationalize field names
+	static FieldDescription[] fields = new FieldDescription[6];
+	static {
+		FieldDescription fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("IDFLAG");
+		fieldDesc.setFieldType(Types.INTEGER);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[0] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("IDARC");
+		fieldDesc.setFieldType(Types.INTEGER);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[1] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("PCT");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[2] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("COST");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[3] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("DIREC");
+		fieldDesc.setFieldType(Types.INTEGER);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[4] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("DESCRIPTION");
+		fieldDesc.setFieldType(Types.VARCHAR);
+		fieldDesc.setFieldLength(254);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[5] = fieldDesc;
+	}
+
+	/*
+	 * TODO Eliminar FlagsMemoryDriver y RouteMemoryDriver y crear una clase que
+	 * sea SchemedMemoryDriver. En el constructor habría que pasar: a)
+	 * FieldDescription[] (esquema) b) Tipo de geometria
+	 * 
+	 * o bien un LayerDefinition....
+	 * 
+	 * 
+	 */
+
+	List features;
+
+	Rectangle2D fullExtent;
+
+	public FlagsMemoryDriver(List features) {
+		this.features = features;
+		computeFullExtent();
+	}
+
+	void computeFullExtent() {
+		if (features.size() > 0) {
+			IFeature feature = (IFeature) features.get(0);
+			fullExtent = feature.getGeometry().getBounds2D();
+			for (int i = 1; i < features.size(); i++) {
+				feature = (IFeature) features.get(i);
+				Rectangle2D rAux = feature.getGeometry().getBounds2D();
+				fullExtent.add(rAux);
+			}
+		}
+	}
+
+	public int getShapeType() {
+		return FShape.POINT;
+	}
+
+	public String getName() {
+		return "";
+	}
+
+	public DriverAttributes getDriverAttributes() {
+		return null;
+	}
+
+	public boolean isWritable() {
+		return false;
+	}
+
+	public int[] getPrimaryKeys()
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+		return null;
+	}
+
+	public void write(DataWare dataWare)
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+	}
+
+	/**
+	 * Returns de field type of the specified field index.
+	 * 
+	 * @return field type of i field
+	 */
+	public int getFieldType(int i) throws DriverException {
+		// azabala: we overwrite MemoryDriver because type resolution
+		// is based in first register value (it could be null)
+		if (i >= fields.length)
+			throw new DriverException("Excedido el numero de campos del dxf");
+		return fields[i].getFieldType();
+	}
+
+	public int getShapeCount() throws IOException {
+		return features.size();
+	}
+
+	public Rectangle2D getFullExtent() throws IOException {
+		return fullExtent;
+	}
+
+	public IGeometry getShape(int index) {
+		if (index < features.size())
+			return ((IFeature) features.get(index)).getGeometry();
+		else
+			return null;
+	}
+
+	public void reload() throws IOException, DriverException {
+	}
+	
+	
+	/**
+	 * Devuelve el modelo de la tabla.
+	 *
+	 * @return modelo de la tabla.
+	 */
+	public DefaultTableModel getTableModel() {
+		return null;
+	}
+
+	/**
+	 * Añade un shape.
+	 *
+	 * @param geom shape.
+	 * @param row fila.
+	 */
+	public void addGeometry(IGeometry geom, Object[] row) {
+	}
+
+	
+	/**
+	 * Método de conveniencia, para poder añadir directamente un shape
+	 * o una IGeometry. (Arriba está el de añadir una IGeometry.
+	 * @param shp
+	 * @param row
+	 */
+	public void addShape(FShape shp, Object[] row) {
+	}
+
+	/**
+	 * Devuelve el extent a partir de un índice.
+	 *
+	 * @param index Índice.
+	 *
+	 * @return Extent.
+	 *
+	 * @throws IOException
+	 */
+	public Rectangle2D getShapeBounds(int index) throws IOException {
+		return ((IFeature)features.get(index)).getGeometry().getBounds2D();
+	}
+
+	
+	public int getShapeType(int index) {
+		return ((IFeature)features.get(index)).getGeometry().getGeometryType();
+	}
+
+
+	/* (non-Javadoc)
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getFieldValue(long, int)
+	 */
+	public Value getFieldValue(long rowIndex, int fieldId)
+		throws DriverException {
+		IFeature feature = (IFeature) features.get((int) rowIndex);
+		return feature.getAttributes()[fieldId];
+	}
+
+	
+	public int getFieldCount() throws DriverException {
+		return fields.length;
+	}
+
+	
+	public String getFieldName(int fieldId) throws DriverException {
+		return fields[fieldId].getFieldName();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getRowCount()
+	 */
+	public long getRowCount() throws DriverException {
+		return features.size();
+	}
+    
+    /* (non-Javadoc)
+     * @see com.hardcode.gdbms.engine.data.driver.GDBMSDriver#setDataSourceFactory(com.hardcode.gdbms.engine.data.DataSourceFactory)
+     */
+    public void setDataSourceFactory(DataSourceFactory dsf) {
+    }
+
+    public int getFieldWidth(int fieldId)
+    {
+    	// TODO
+    	return 30;
+    }
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/FlagsMemoryDriver.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/RouteMemoryDriver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/RouteMemoryDriver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/RouteMemoryDriver.java	(revision 30230)
@@ -0,0 +1,279 @@
+/*
+ * Created on 06-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.2  2006-11-08 19:32:36  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/11/07 19:49:28  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.sql.Types;
+import java.util.List;
+
+import javax.swing.table.DefaultTableModel;
+
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.data.edition.DataWare;
+import com.hardcode.gdbms.engine.values.Value;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.drivers.DriverAttributes;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.drivers.MemoryDriver;
+import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
+
+/**
+ * Memory driver to work with Network's Route features
+ * 
+ * @author azabala
+ * 
+ */
+public class RouteMemoryDriver extends MemoryDriver implements VectorialDriver {
+	// TODO Internationalize field names
+	static FieldDescription[] fields = new FieldDescription[4];
+	static {
+		FieldDescription fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("IDARC");
+		fieldDesc.setFieldType(Types.INTEGER);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[0] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("WEIGHT");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[1] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("LENGTH");
+		fieldDesc.setFieldType(Types.DOUBLE);
+		fieldDesc.setFieldLength(20);
+		fieldDesc.setFieldDecimalCount(5);
+		fields[2] = fieldDesc;
+
+		fieldDesc = new FieldDescription();
+		fieldDesc.setFieldName("TEXT");
+		fieldDesc.setFieldType(Types.VARCHAR);
+		fieldDesc.setFieldLength(254);
+		fieldDesc.setFieldDecimalCount(0);
+		fields[3] = fieldDesc;
+	}
+
+	
+	List features;
+
+	Rectangle2D fullExtent;
+
+	public RouteMemoryDriver(List features) {
+		this.features = features;
+		computeFullExtent();
+	}
+
+	void computeFullExtent() {
+		if (features.size() > 0) {
+			IFeature feature = (IFeature) features.get(0);
+			fullExtent = feature.getGeometry().getBounds2D();
+			for (int i = 1; i < features.size(); i++) {
+				feature = (IFeature) features.get(i);
+				Rectangle2D rAux = feature.getGeometry().getBounds2D();
+				fullExtent.add(rAux);
+			}
+		}
+	}
+
+	public int getShapeType() {
+		return FShape.LINE;
+	}
+
+	public String getName() {
+		return "";
+	}
+
+	public DriverAttributes getDriverAttributes() {
+		return null;
+	}
+
+	public boolean isWritable() {
+		return false;
+	}
+
+	public int[] getPrimaryKeys()
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+		return null;
+	}
+
+	public void write(DataWare dataWare)
+			throws com.hardcode.gdbms.engine.data.driver.DriverException {
+	}
+
+	/**
+	 * Returns de field type of the specified field index.
+	 * 
+	 * @return field type of i field
+	 */
+	public int getFieldType(int i) throws DriverException {
+		// azabala: we overwrite MemoryDriver because type resolution
+		// is based in first register value (it could be null)
+		if (i >= fields.length)
+			throw new DriverException("Excedido el numero de campos");
+		return fields[i].getFieldType();
+	}
+
+	public int getShapeCount() throws IOException {
+		return features.size();
+	}
+
+	public Rectangle2D getFullExtent() throws IOException {
+		return fullExtent;
+	}
+
+	public IGeometry getShape(int index) {
+		if(index <  features.size())
+			return ((IFeature) features.get(index)).getGeometry();
+		else
+			return null;
+	}
+
+	public void reload() throws IOException, DriverException {
+
+	}
+	
+	/**
+	 * Devuelve el modelo de la tabla.
+	 *
+	 * @return modelo de la tabla.
+	 */
+	public DefaultTableModel getTableModel() {
+		return null;
+	}
+
+	/**
+	 * Añade un shape.
+	 *
+	 * @param geom shape.
+	 * @param row fila.
+	 */
+	public void addGeometry(IGeometry geom, Object[] row) {
+	}
+
+	
+	/**
+	 * Método de conveniencia, para poder añadir directamente un shape
+	 * o una IGeometry. (Arriba está el de añadir una IGeometry.
+	 * @param shp
+	 * @param row
+	 */
+	public void addShape(FShape shp, Object[] row) {
+	}
+
+	/**
+	 * Devuelve el extent a partir de un índice.
+	 *
+	 * @param index Índice.
+	 *
+	 * @return Extent.
+	 *
+	 * @throws IOException
+	 */
+	public Rectangle2D getShapeBounds(int index) throws IOException {
+		return ((IFeature)features.get(index)).getGeometry().getBounds2D();
+	}
+
+	
+	public int getShapeType(int index) {
+		return ((IFeature)features.get(index)).getGeometry().getGeometryType();
+	}
+
+
+	/* (non-Javadoc)
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getFieldValue(long, int)
+	 */
+	public Value getFieldValue(long rowIndex, int fieldId)
+		throws DriverException {
+		IFeature feature = (IFeature) features.get((int) rowIndex);
+		return feature.getAttributes()[fieldId];
+	}
+
+	
+	public int getFieldCount() throws DriverException {
+		return fields.length;
+	}
+
+	
+	public String getFieldName(int fieldId) throws DriverException {
+		return fields[fieldId].getFieldName();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.hardcode.gdbms.engine.data.ReadDriver#getRowCount()
+	 */
+	public long getRowCount() throws DriverException {
+		return features.size();
+	}
+    
+    /* (non-Javadoc)
+     * @see com.hardcode.gdbms.engine.data.driver.GDBMSDriver#setDataSourceFactory(com.hardcode.gdbms.engine.data.DataSourceFactory)
+     */
+    public void setDataSourceFactory(DataSourceFactory dsf) {
+    }
+
+    public int getFieldWidth(int fieldId)
+    {
+    	// TODO
+    	return 30;
+    }
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/RouteMemoryDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/OneToManySolver.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/OneToManySolver.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/OneToManySolver.java	(revision 30230)
@@ -0,0 +1,393 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.solvers;
+
+import java.util.ArrayList;
+
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.AbstractNetSolver;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.IGraph;
+
+public class OneToManySolver extends AbstractNetSolver {
+
+	private int idStart = -1;
+	private ArrayList idStops = null;
+	
+	private class StopAux {
+		public StopAux(Integer idStop2) {
+			idStop = idStop2;
+			bFound = false;
+		}
+		private Integer idStop;
+		private boolean bFound;
+		public boolean isFound() {
+			return bFound;
+		}
+		public void setFound(boolean found) {
+			bFound = found;
+		}
+		public Integer getIdStop() {
+			return idStop;
+		}
+	}
+	
+	private GvFlag sourceFlag;
+	private boolean bExploreAll = false; // by default
+	
+
+	
+	/**
+	 * We have this method separated from calculate to speed up odmatrix calculations.
+	 * The developer can position flags once, and call calculate only changing source
+	 * (idStart). This way, destination flags are positionned only once.
+	 * @throws GraphException
+	 */
+	public void putDestinationsOnNetwork() throws GraphException
+	{
+		GvFlag[] flags = net.getFlags(); // Destinations
+		
+		if (flags.length == 0)
+			throw new RuntimeException("Please, add flags before");
+		
+		idStops = new ArrayList();
+		for (int i = 0; i < flags.length; i++) {
+			GvFlag fTo = flags[i];
+
+			int idStop = net.creaArcosVirtuales(fTo);
+			idStops.add(new Integer(idStop));
+		}
+		
+	}
+	public void removeDestinationsFromNetwork()
+	{
+		GvFlag[] flags = net.getFlags(); // Destinations
+		for (int i = 0; i < flags.length; i++)
+		{
+			GvFlag fTo = flags[i];
+			net.reconstruyeTramo(fTo.getIdArc());			
+		}
+		
+	}
+	/**
+	 * @throws GraphException 
+	 */
+	public void calculate() throws GraphException {
+		if (idStops == null)
+		{
+			throw new RuntimeException("Please, call putDestinationsOnNetwork before calculate()");
+		}
+		GvFlag[] flags = net.getFlags(); // Destinations
+		idStart = net.creaArcosVirtuales(sourceFlag);
+		dijkstra(idStart, idStops);
+		
+		IGraph graph = net.getGraph();
+		for (int i = 0; i < flags.length; i++)
+		{
+			GvFlag fTo = flags[i];
+			Integer auxId = (Integer) idStops.get(i);
+			GvNode auxNode = graph.getNodeByID(auxId.intValue());
+//			System.out.println("Asigno bestCost = " + auxNode.getBestCost());
+			if (auxNode.getBestCost() == Double.MAX_VALUE)
+			{
+				fTo.setCost(-1);
+				fTo.setAccumulatedLength(-1);
+			}
+			else
+			{
+				fTo.setCost(auxNode.getBestCost());
+				fTo.setAccumulatedLength(auxNode.getAccumulatedLength());				
+			}
+		}
+		
+		// TODO: No podemos reconstruir el tramo porque perdemos la conectividad
+		// con el resto de destinos.
+//		net.reconstruyeTramo(sourceFlag.getIdArc());
+	}
+
+
+	private void dijkstra(int idStart, ArrayList stops) {
+		int nodeNum;
+		int linkNum;
+		double newCost;
+		int idSiguienteNodo;
+		GvNode node, toNode, bestNode; // , *pNodoProv;
+		GvEdge link;
+		boolean bExit = false;
+		double bestCost;
+
+		boolean bGiroProhibido;
+		// List clonedStops = Collections.synchronizedList(stops);
+		ArrayList clonedStops = new ArrayList();
+		for (int i=0; i < stops.size(); i++)
+		{
+			Integer idStop = (Integer) stops.get(i);
+			clonedStops.add(new StopAux(idStop));
+		}
+		ArrayList candidatos = new ArrayList();
+
+//		GvTurn elGiro;
+		// char Mensaje[200];
+		
+		IGraph graph = net.getGraph();
+
+		// NUEVO: 27-6-2003
+		// Cada nodo y cada arco llevan un nuemero de solución. Se supone
+		// que si lo del nodo y el arco no coincide con
+		// este numero, todavía no ha sido inicializado y hay que hacerlo.
+		// Para evitar coincidencias cuando de la vuelta el contador, cada
+		// 65000 peticiones (por ejemplo), repasamos toda
+		// la red y ponemos numSolucGlobal a -1
+		if (numSolucGlobal > 65000) {
+			numSolucGlobal = -1;
+
+			for (nodeNum = 0; nodeNum < graph.numVertices(); nodeNum++) {
+				node = graph.getNodeByID(nodeNum);
+				node.initialize();
+			} // for nodeNum */
+
+		}
+		numSolucGlobal++;
+
+		candidatos.clear();
+		// Añadimos el Start Node a la lista de candidatosSTL
+		// Nodos finales
+		for (int h=0; h < clonedStops.size(); h++)
+		{
+			StopAux auxStop = (StopAux) clonedStops.get(h);
+			int idStop = auxStop.getIdStop().intValue();
+		
+			GvNode auxNode = graph.getNodeByID(idStop);
+			auxNode.initialize();
+		}
+		node = graph.getNodeByID(idStart);
+		node.initialize();
+		bestNode = node;
+
+		candidatos.add(node);
+		node.setBestCost(0);
+		node.setStatus(GvNode.statNowInList);
+		bestCost = Double.MAX_VALUE;
+
+		// Mientras que la lista de candidatosSTL no esté vacía, procesamos
+		// Nodos
+		int stopActual = 0;
+
+		while ((!bExit) && (candidatos.size() > 0)) {
+			// Buscamos el nodo con mínimo coste
+			node = (GvNode) candidatos.get(0);
+			bestNode = node;
+			bestCost = node.getBestCost();
+			for (nodeNum = 1; nodeNum < candidatos.size(); nodeNum++) {
+				node = (GvNode) candidatos.get(nodeNum);
+				if (node.getBestCost() < bestCost) {
+					bestCost = node.getBestCost();
+					bestNode = node;
+				}
+			} // for nodeNum candidatosSTL
+
+			node = bestNode;
+			// Borramos el mejor nodo de la lista de candidatosSTL
+			node.setStatus(GvNode.statWasInList);
+			// TODO: BORRAR POR INDEX, NO ASÍ. ES MÁS LENTO QUE SI BORRAMOS EL i-ésimo.
+			candidatos.remove(node);
+			// System.out.println("LINK " + link.getIdArc() + " from ");
+			// System.out.println("from " + idStart + " to " + finalNode.getIdNode() + ". node=" + node.getIdNode());
+			if (!bExploreAll)
+			{
+				// Miramos si hemos llegado donde queríamos
+				StopAux auxStop = (StopAux) clonedStops.get(stopActual);
+				int idStop = auxStop.getIdStop().intValue();
+				
+				if (bestNode.getIdNode() == idStop) {
+					// Hemos llegado a ese punto. Miramos el resto de puntos destino
+					// a ver si ya hemos pasado por alguno de ellos.
+					// Si con algun punto no pasamos por aquí, no habremos llegado a ese punto.
+					// No importa, puede que al resto sí, y esos nodos a los que sí hemos llegado
+					// tendrán bien rellenado el coste.
+					auxStop.setFound(true);
+					for (int i=stopActual; i < clonedStops.size(); i++)
+					{
+						auxStop = (StopAux) clonedStops.get(i);
+						if (!auxStop.isFound())
+						{
+							Integer id = auxStop.getIdStop();
+		
+							GvNode auxNode = graph.getNodeByID(id.intValue());
+							if (auxNode.getStatus() == GvNode.statWasInList)
+							{
+								auxStop.setFound(true);
+							}
+							else
+							{
+								stopActual = i;
+								break;
+							}
+						}
+					}						
+					if (clonedStops.size() == 0)
+					{
+						bExit = true;
+						break; // Ya hemos llegado a todos los nodos
+					}				
+				}
+			} // if bExploreAll
+			
+			// sprintf(Mensaje,"Enlaces en el nodo %ld:
+			// %ld.",pNodo->idNodo,pNodo->Enlaces.GetSize());
+			// AfxMessageBox(Mensaje);
+
+			// Añadimos a la lista de candidatosSTL los vecinos del nodo que
+			// acabamos de borrar
+			// HAY Arcos QUE SALEN Y Arcos QUE LLEGAN. SOLO MIRAMOS LOS QUE
+			// SALEN.
+			for (linkNum = 0; linkNum < node.getEnlaces().size(); linkNum++) {
+				// Pillamos el nodo vecino
+				link = (GvEdge) node.getEnlaces().get(linkNum);
+				idSiguienteNodo = link.getIdNodeEnd();
+
+				toNode = graph.getNodeByID(idSiguienteNodo);
+
+				// 27_5_2004
+				// Si un arco tiene coste negativo, lo ignoramos
+				if (link.getWeight() < 0)
+					continue;
+
+				// Fin arco con coste negativo
+
+				// NUEVO: 26-7-2003: Comprobamos si está inicializado
+				if (toNode.getNumSoluc() != numSolucGlobal) {
+					toNode.initialize();
+				}
+				else
+				{
+					// System.out.println("Nodo ya inicializado");
+				}
+
+				// Miramos si ese nodo ya ha estado antes en la lista de
+				// candidatos
+				if (toNode.getStatus() != GvNode.statWasInList) {
+					// Miramos a ver si podemos mejorar su best_cost
+					newCost = node.getBestCost() + link.getWeight();
+					
+
+					// Miramos la lista de Giros de ese nodo
+					bGiroProhibido = false;
+					for (int idGiro = 0; idGiro < node.getTurns().size(); idGiro++) {
+						// Si está prohibido, a por otro
+//						elGiro = (GvTurn) node.getTurns().get(idGiro);
+						// TODO: HABILITAR ESTO
+						// if ((elGiro.idTramoOrigen ==
+						// Arcos[pNodo->from_link].idTramo) &&
+						// (elGiro.idTramoDestino == pEnlace->idTramo))
+						// {
+						// if (elGiro.cost < 0)
+						// {
+						// bGiroProhibido = true;
+						// // No podemos inicializar por completo el nodo porque
+						// entonces
+						// // perdemos el fromLink (el arco desde donde hemos
+						// llegado hasta
+						// // este nodo, que es necesario para calcular los
+						// costes y generar
+						// // el shape recorriendo hacia atrás el camino
+						// realizado.
+						// // Si había más de un nodo con costes prohibidos,
+						// cabía la posibilidad
+						// // de que perdieramos este enlace.
+						//									
+						// // Para que pueda volver a entrar en cálculos
+						// pNodo->status = statNotInList;
+						// pNodo->best_cost = INFINITO;
+						//
+						// }
+						// else
+						// newCost += elGiro.cost;
+						// break; // Salimos del for porque ya hemos encontrado
+						// el giro
+						// }
+					}
+					// Si está prohibido, vamos a por otro enlace, PERO
+					// MARCAMOS EL NODO
+					// COMO NO VISITADO PARA QUE PUEDA VOLVER A ENTRAR EN LA
+					// LISTA DE CANDIDATOS
+					// SI VENIMOS POR OTRO LADO.
+					if (bGiroProhibido) {
+						continue;
+					}
+
+					if (newCost < toNode.getBestCost()) {
+						// Es una mejora, así que actualizamos el vecino y
+						// lo añadimos a los candidatosSTL
+						toNode.setBestCost(newCost);
+						double newLength = node.getAccumulatedLength() + link.getDistance();
+						toNode.setAccumulatedLength(newLength);
+						toNode.setFromLink(link.getIdEdge());
+
+						if (toNode.getStatus() != GvNode.statNowInList) {
+							toNode.setStatus(GvNode.statNowInList);
+							candidatos.add(toNode);
+						}
+					} // Si hay mejora
+				} // if ese nodo no ha estado en la lista de candidatosSTL
+
+			} // for linkNum
+		} // while candidatosSTL
+
+	}
+
+
+	public GvFlag getSourceFlag() {
+		return sourceFlag;
+	}
+
+
+	public void setSourceFlag(GvFlag sourceFlag) {
+		this.sourceFlag = sourceFlag;
+		
+	}
+	public void setExploreAllNetwork(boolean b) {
+		bExploreAll  = b;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/solvers/OneToManySolver.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearBarriersExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearBarriersExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearBarriersExtension.java	(revision 30230)
@@ -0,0 +1,156 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.core.GvModifiedCost;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class ClearBarriersExtension extends Extension {
+
+	public void initialize() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void execute(String actionCommand) {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					if (actionCommand.equalsIgnoreCase("CLEAR_BARRIERS"))
+					{
+						if (net.getModifiedCosts().size() > 0)
+						{
+							for (int i=net.getModifiedCosts().size()-1; i >=0; i--)
+							{
+								GvModifiedCost barrier = (GvModifiedCost) net.getModifiedCosts().get(i);
+								net.removeModifiedCost(barrier);
+							}
+							NetworkUtils.clearBarriersFromGraphics(mapCtrl);
+							mapCtrl.drawMap(false);
+						}
+					}
+				}
+			}
+		}
+		
+	}
+
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					// TODO:
+					// if (net.getModifiedCosts().length > 0)
+					{
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+
+	}
+
+	public boolean isVisible() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearBarriersExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/SingletonRegisteredNetworks.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/SingletonRegisteredNetworks.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/SingletonRegisteredNetworks.java	(revision 30230)
@@ -0,0 +1,74 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.util.Hashtable;
+
+/**
+ * @author fjp
+ * TODO: Esto será necesario si creamos un objeto que 
+ * contenga la capa, el grafo y los flags sobre ese grafo.
+ * Cada solver, pedirá los flags a este objeto (o creará los
+ * suyos propios) y luego resolverá el problema.
+ */
+public class SingletonRegisteredNetworks {
+	private static SingletonRegisteredNetworks singleton;
+	
+	private Hashtable networks = new Hashtable();
+
+	static SingletonRegisteredNetworks getInstance() {
+		if (singleton == null)
+			singleton = new SingletonRegisteredNetworks();
+		return singleton;
+	}
+
+	
+	private SingletonRegisteredNetworks() {
+		
+	}
+	
+//	public void registerNetwork(IGraph graph, FLyrVect lyr) {
+//		
+//	}
+	
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/SingletonRegisteredNetworks.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/package.html
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/package.html	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/package.html	(revision 30230)
@@ -0,0 +1,7 @@
+<p>
+This package has classes to work with network analysis
+algorithms in gvSIG.
+By the moment, we are going to work with
+edu.uci.ics.jung.graph.Graph (JUNG graph implementation)
+
+</p>
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/package.html
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/BarrierListener.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/BarrierListener.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/BarrierListener.java	(revision 30230)
@@ -0,0 +1,155 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.tools;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Image;
+import java.awt.geom.Point2D;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.PluginClassLoader;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.fmap.tools.BehaviorException;
+import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;
+import com.iver.cit.gvsig.fmap.tools.Listeners.PointListener;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.core.EdgePair;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.Network;
+
+public class BarrierListener implements PointListener {
+	private MapControl mapCtrl;
+
+	private int idSymbolBarrier = -1;
+
+	private Cursor cur = java.awt.Cursor
+			.getPredefinedCursor(Cursor.HAND_CURSOR);
+
+	public BarrierListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 *      The PointEvent method bring you a point in pixel coordinates. You
+	 *      need to transform it to world coordinates. The class to do
+	 *      conversions is ViewPort, obtained thru the MapContext of mapCtrl.
+	 */
+	public void point(PointEvent event) throws BehaviorException {
+
+		Point2D pReal = mapCtrl.getMapContext().getViewPort().toMapPoint(
+				event.getPoint());
+
+		SingleLayerIterator it = new SingleLayerIterator(mapCtrl
+				.getMapContext().getLayers());
+		while (it.hasNext()) {
+			FLayer aux = it.next();
+			if (!aux.isActive())
+				continue;
+			Network net = (Network) aux.getProperty("network");			
+
+			if (net != null) {
+				Point2D nearestPoint = new Point2D.Double();
+				double realTol = mapCtrl.getViewPort().toMapDistance(
+						FlagListener.pixelTolerance);
+				int idArc = net.findClosestArc(pReal.getX(), pReal.getY(),
+						realTol, nearestPoint);
+				if (idArc == -1) {
+					JOptionPane.showMessageDialog(null, "No está sobre la red");
+					return;
+				}
+				
+				net.addModifiedCost(idArc, -1.0, 3);
+				GraphicLayer graphicLayer = mapCtrl.getMapContext()
+						.getGraphicsLayer();
+				if (idSymbolBarrier == -1) {
+					FSymbol simFlag = new FSymbol(FShape.POINT, Color.BLUE);
+					simFlag.setSize(16);
+					simFlag.setStyle(FConstant.SYMBOL_STYLE_MARKER_IMAGEN);
+					ImageIcon icon = new ImageIcon(this.getClass()
+							.getClassLoader().getResource("images/barrier.png"));
+					simFlag.setIcon(icon.getImage());
+
+					idSymbolBarrier = graphicLayer.addSymbol(simFlag);
+				}
+				IGeometry gAux = ShapeFactory.createPoint2D(nearestPoint.getX(),
+						nearestPoint.getY());
+				FGraphic graphic = new FGraphic(gAux, idSymbolBarrier);
+				graphic.setTag("BARRIER");
+				graphicLayer.addGraphic(graphic);
+				mapCtrl.drawGraphics();
+				PluginServices.getMainFrame().enableControls();
+
+			}
+		}
+
+	}
+
+	public Cursor getCursor() {
+		return cur;
+	}
+
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/BarrierListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/FlagListener.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/FlagListener.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/FlagListener.java	(revision 30230)
@@ -0,0 +1,154 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.tools;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Image;
+import java.awt.geom.Point2D;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.PluginClassLoader;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.fmap.tools.BehaviorException;
+import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;
+import com.iver.cit.gvsig.fmap.tools.Listeners.PointListener;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.NetworkUtils;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.Network;
+
+public class FlagListener implements PointListener {
+	public static final int TO_ARC = 0;
+	public static final int TO_NODE = 1;
+	public static int pixelTolerance = 10;
+    private MapControl mapCtrl;
+    private int idSymbolFlag = -1;
+    private Cursor cur = java.awt.Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
+	private int mode;
+
+    
+    public FlagListener(MapControl mc) {
+        this.mapCtrl = mc;
+    }
+
+
+    /* (non-Javadoc)
+     * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+     * The PointEvent method bring you a point in pixel coordinates. You
+     * need to transform it to world coordinates. The class to do conversions
+     * is ViewPort, obtained thru the MapContext of mapCtrl.
+     */
+    public void point(PointEvent event) throws BehaviorException {
+        
+        Point2D pReal = mapCtrl.getMapContext().getViewPort().toMapPoint(event.getPoint());
+        
+		SingleLayerIterator it = new SingleLayerIterator(mapCtrl.getMapContext().getLayers());
+		while (it.hasNext())
+		{
+			FLayer aux = it.next();
+			if (!aux.isActive())
+				continue;
+			Network net = (Network) aux.getProperty("network");
+			
+			if ( net != null)
+			{
+				double realTol = mapCtrl.getViewPort().toMapDistance(pixelTolerance);
+				GvFlag flag;
+				try {
+					if (mode == TO_ARC)
+						flag = net.addFlag(pReal.getX(), pReal.getY(), realTol);
+					else
+						flag = net.addFlagToNode(pReal.getX(), pReal.getY(), realTol);
+					if (flag == null)
+					{
+						JOptionPane.showMessageDialog(null, "No está sobre la red");
+						return;
+					}
+					NetworkUtils.addGraphicFlag(mapCtrl, flag);
+					mapCtrl.drawGraphics();
+					PluginServices.getMainFrame().enableControls();
+				} catch (GraphException e) {
+					e.printStackTrace();
+					NotificationManager.addError(e);
+				}
+				
+			}
+		}
+        
+        
+    }
+
+    public Cursor getCursor() {
+        return cur;
+    }
+
+    public boolean cancelDrawing() {
+        return false;
+    }
+
+
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+		
+	}
+
+
+	public void setMode(int mode) {
+		this.mode = mode;
+		
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/tools/FlagListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GraphException.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GraphException.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GraphException.java	(revision 30230)
@@ -0,0 +1,30 @@
+/*
+ * Created on 20-jun-2006 by azabala
+ *
+ */
+package com.iver.cit.gvsig.graph;
+
+/**
+ * Exception throwed by any class of the Graph package.
+ * @author alzabord
+ *
+ */
+public class GraphException extends Exception {
+	public GraphException(Exception e){
+		super(e);
+	}
+	
+	public GraphException(){
+		super();
+	}
+	
+	public GraphException(String msg){
+		super(msg);
+	}
+	
+	public GraphException(String msg, Exception e){
+		super(msg, e);
+	}
+	
+	
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GraphException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/preferences/RoutePage.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/preferences/RoutePage.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/preferences/RoutePage.java	(revision 30230)
@@ -0,0 +1,159 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.7  2006-10-30 19:30:35  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/10/26 16:31:21  jaume
+ * GUI
+ *
+ * Revision 1.5  2006/10/26 07:46:58  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/10/25 10:50:41  jaume
+ * movement of classes and gui stuff
+ *
+ * Revision 1.3  2006/10/24 16:31:40  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/10/23 16:00:20  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/23 08:05:39  jaume
+ * GUI
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.preferences;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.preferences.AbstractPreferencePage;
+import com.iver.andami.preferences.StoreException;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.gvsig.gui.styling.SymbolPreview;
+import com.iver.cit.gvsig.gvsig.gui.styling.SymbolSelector;
+
+public class RoutePage extends AbstractPreferencePage {
+	private ImageIcon icon;
+	private SymbolPreview symbolPreview;
+	private JButton btnChangeSymbol;
+
+	public RoutePage() {
+		icon = new ImageIcon(this.getClass().getClassLoader().getResource(
+				"images/net-analyst-icon.png"));
+		symbolPreview = new SymbolPreview();
+		symbolPreview.setPreferredSize(new Dimension(100, 100));
+		symbolPreview.setBorder(BorderFactory.createBevelBorder(1));
+
+		JPanel aux = new JPanel();
+		aux.add(symbolPreview);
+		addComponent(PluginServices.getText(this, "use_symbol") +":", aux);
+		aux = new JPanel();
+		aux.add(btnChangeSymbol = new JButton(PluginServices.getText(this, "change")));
+		btnChangeSymbol.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				SymbolSelector symbSelec = new SymbolSelector(null, FShape.POLYGON);
+				PluginServices.getMDIManager().addWindow(symbSelec);
+				ISymbol sym = symbSelec.getSymbol();
+				if (sym!=null)
+					symbolPreview.setSymbol(sym);
+			}
+		});
+		addComponent("", aux);
+	}
+
+	public void storeValues() throws StoreException {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setChangesApplied() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public String getID() {
+		return getClass().getName();
+	}
+
+	public String getTitle() {
+		return PluginServices.getText(this, "net_analyst");
+	}
+
+	public JPanel getPanel() {
+		return this;
+	}
+
+	public void initializeValues() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void initializeDefaults() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public ImageIcon getIcon() {
+		return icon;
+	}
+
+	public boolean isValueChanged() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/preferences/RoutePage.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ODMatrixExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ODMatrixExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ODMatrixExtension.java	(revision 30230)
@@ -0,0 +1,201 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Component;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.solvers.OneToManySolver;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class ODMatrixExtension extends Extension {
+
+
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapContext map = v.getMapControl().getMapContext();
+		SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+		
+		if (actionCommand.equals("ODMATRIX")) {
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+
+				if ( net != null)
+				{
+					GvFlag[] flags = net.getFlags();
+					if(flags.length == 0)
+					{
+						JOptionPane.showMessageDialog(null, "Primero carga las paradas.");
+						return;
+					}
+
+//					PluginServices.getMDIManager().addWindow(new RouteControlPanel(net));
+					JFileChooser dlg = new JFileChooser();
+					if (dlg.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION)
+					{
+//						RandomAccessFile file = null;
+//						try {
+//							file = new RandomAccessFile(dlg.getSelectedFile(), "rw");
+//						} catch (FileNotFoundException e1) {
+//							// TODO Auto-generated catch block
+//							e1.printStackTrace();
+//						}
+						BufferedWriter output;
+						try {
+							output = new BufferedWriter(new FileWriter(dlg.getSelectedFile()));
+	//						output.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+	
+							OneToManySolver solver = new OneToManySolver();
+							solver.setNetwork(net);
+							solver.putDestinationsOnNetwork();
+							for (int i=0; i < flags.length; i++)
+							{
+								
+								solver.setSourceFlag(flags[i]);
+								long t1 = System.currentTimeMillis();
+								
+								solver.calculate();
+								long t2 = System.currentTimeMillis();
+								System.out.println("Punto " + i + " de " + flags.length + ". " + (t2-t1) + " msecs.");
+								// Escribe el resultado
+								// idNodo1 idNodo2 tiempo distancia
+								
+								for (int j=0; j < flags.length; j++)
+								{
+									long secs = Math.round(flags[j].getCost());
+									long meters = Math.round(flags[j].getAccumulatedLength());
+									String strAux = i + "\t" + j + "\t" + secs + "\t" + meters;
+									output.write(strAux);
+									output.newLine();
+									
+								}
+								long t3 = System.currentTimeMillis();
+								System.out.println("T. de escritura: " + (t3-t2) + " msecs.");
+								
+							}
+							solver.removeDestinationsFromNetwork();
+							output.flush();
+							output.close();
+							JOptionPane.showMessageDialog((Component) PluginServices.getMainFrame(),
+									PluginServices.getText(this,"fichero_generado"));
+						} catch (IOException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						} catch (GraphException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						}
+					} // if
+					
+					return;
+				}
+			}
+		}
+		
+
+	}
+
+	
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f instanceof View) {
+			return true;
+		}
+		return false;
+
+	}
+
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ODMatrixExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ShortestPathExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ShortestPathExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ShortestPathExtension.java	(revision 30230)
@@ -0,0 +1,219 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FArrowSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.IFlagListener;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.gui.RouteControlPanel;
+import com.iver.cit.gvsig.graph.gui.RouteReportPanel;
+import com.iver.cit.gvsig.graph.solvers.Route;
+import com.iver.cit.gvsig.graph.solvers.ShortestPathSolverAStar;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.util.GvSession;
+
+public class ShortestPathExtension extends Extension {
+
+	public static ShortestPathSolverAStar solver = new ShortestPathSolverAStar();
+	private int idSymbolLine = -1;
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapCtrl = v.getMapControl();
+		MapContext map = mapCtrl.getMapContext();
+		SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+		while (it.hasNext())
+		{
+			FLayer aux = it.next();
+			if (!aux.isActive())
+				continue;
+			Network net = (Network) aux.getProperty("network");
+
+			if ( net != null)
+			{
+				Route route;
+				try {
+					solver.setNetwork(net);
+//					solver.setFielStreetName("STREET_NAM");
+					route = solver.calculateRoute();
+					if (route.getFeatureList().size() == 0)
+					{
+						JOptionPane.showMessageDialog((JComponent) PluginServices.getMDIManager().getActiveWindow(),
+								PluginServices.getText(this, "shortest_path_not_found"));
+						return;
+					}
+					List routes = (List) GvSession.getInstance().get(mapCtrl, "Route");
+					if(routes == null){
+						routes = new ArrayList();
+						GvSession.getInstance().put(mapCtrl, "Route", routes);
+					}
+					routes.add(route);
+					
+					createGraphicsFrom(route.getFeatureList(), v.getMapControl());
+					RouteReportPanel routeReport = new RouteReportPanel(route, v.getMapControl());
+					PluginServices.getMDIManager().addWindow(routeReport);
+					List reportsPanels = (List) GvSession.getInstance().get(mapCtrl, "RouteReport");
+					if(reportsPanels == null){
+						reportsPanels = new ArrayList();
+						GvSession.getInstance().put(mapCtrl, "RouteReport", reportsPanels);
+					}	
+					reportsPanels.add(routeReport);
+					RouteControlPanel controlPanel = (RouteControlPanel) GvSession.getInstance().get(mapCtrl, "RouteControlPanel");
+					if (controlPanel != null)
+						controlPanel.refresh();
+					
+				} catch (GraphException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+
+
+
+	}
+
+	private void createGraphicsFrom(Collection featureList, MapControl mapControl) {
+		Iterator it = featureList.iterator();
+		GraphicLayer graphicLayer = mapControl.getMapContext().getGraphicsLayer();
+//		if (idSymbolLine == -1)
+		{
+			FArrowSymbol arrowSymbol = new FArrowSymbol(Color.RED);
+			// FSymbol arrowSymbol = new FSymbol(FConstant.SYMBOL_TYPE_LINE);
+			arrowSymbol.setStroke(new BasicStroke(3.0f));
+			idSymbolLine = graphicLayer.addSymbol(arrowSymbol);
+			
+		}
+		// Para evitar hacer reallocate de los elementos de la
+		// graphicList cada vez, creamos primero la lista
+		// y la insertamos toda de una vez.
+		ArrayList graphicsRoute = new ArrayList();
+		while (it.hasNext()) {
+			IFeature feat = (IFeature) it.next();
+			IGeometry gAux = feat.getGeometry();
+			FGraphic graphic = new FGraphic(gAux, idSymbolLine);
+			graphic.setTag("ROUTE");
+			graphicsRoute.add(graphic);
+//			graphicLayer.insertGraphic(0, graphic);
+		}
+		// Lo insertamos al principio de la lista para que los
+		// pushpins se dibujen después.
+
+		graphicLayer.inserGraphics(0, graphicsRoute);
+		mapControl.drawGraphics();
+
+	}
+
+	public boolean isEnabled() {
+		com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f instanceof View) {
+		    View v = (View) f;
+			MapContext map = v.getMapControl().getMapContext();
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+
+				if ( net != null)
+				{
+					int count = 0;
+					for (int i=0; i < net.getOriginaFlags().size(); i++)
+					{
+						GvFlag flag = (GvFlag) net.getOriginaFlags().get(i);
+						if (flag.isEnabled()) count++;
+					}
+					if (count > 1) return true;
+				}
+			}
+			return false;
+
+		}
+		return false;
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f instanceof View) {
+			return true;
+		}
+		return false;
+
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ShortestPathExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ServiceAreaExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ServiceAreaExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ServiceAreaExtension.java	(revision 30230)
@@ -0,0 +1,232 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Color;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FLabel;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.fmap.rendering.FGraphicLabel;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.GvNode;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.solvers.EdgesMemoryDriver;
+import com.iver.cit.gvsig.graph.solvers.OneToManySolver;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+/**
+ * @author fjp
+ * 
+ * Extension to perform ServiceArea calculations. Here you will find code to:
+ * 1.- See the distances to every node on the network to one or many point
+ * sources. 2.- TODO: Calculate a polyline layer with costs and length
+ * calculated to nearest source point. 3.- TODO: Calculate polygons covering
+ * those service areas.
+ */
+public class ServiceAreaExtension extends Extension {
+
+	private int idSymbolLine = -1;
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapCtrl = v.getMapControl();
+		MapContext map = mapCtrl.getMapContext();
+		SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+
+		if (actionCommand.equals("LABEL_NODE_DISTANCES")) {
+			while (it.hasNext()) {
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+
+				if (net != null) {
+					GvFlag[] flags = net.getFlags();
+					if (flags.length == 0) {
+						JOptionPane.showMessageDialog(null,
+								"Primero carga las paradas.");
+						return;
+					}
+//					setVelocities(net);
+					try {
+						OneToManySolver solver = new OneToManySolver();
+						solver.setNetwork(net);
+						solver.putDestinationsOnNetwork();
+						GraphicLayer graphicLayer = mapCtrl.getMapContext()
+								.getGraphicsLayer();
+						removeOldLabels(graphicLayer);
+						for (int i = 0; i < flags.length; i++) {
+
+							solver.setSourceFlag(flags[i]);
+							long t1 = System.currentTimeMillis();
+							solver.setExploreAllNetwork(true);
+							solver.calculate();
+							long t2 = System.currentTimeMillis();
+							System.out.println("Punto " + i + " de "
+									+ flags.length + ". " + (t2 - t1)
+									+ " msecs.");
+							// Después de esto, los nodos de la red están
+							// etiquetados con los costes al nodo orígen
+							EdgesMemoryDriver driver = new EdgesMemoryDriver(net);
+							FLayer lyr = LayerFactory.createLayer("Edges", driver, null);
+							map.getLayers().addLayer(lyr);
+							// doLabeling(mapCtrl, net, flags[i]);
+
+						}
+
+						solver.removeDestinationsFromNetwork();
+					} catch (GraphException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+
+					return;
+				}
+			}
+		}
+
+	}
+
+	private FSymbol getTextSymbol() {
+		FSymbol theSymbol = new FSymbol(FConstant.SYMBOL_TYPE_TEXT);
+		theSymbol.setColor(Color.RED);
+		theSymbol.setStyle(FConstant.SYMBOL_STYLE_MARKER_CIRCLE);
+		theSymbol.setFontColor(Color.BLACK);
+		theSymbol.setSizeInPixels(true);
+		theSymbol.setSize(9);
+		return theSymbol;
+	}
+
+	private void removeOldLabels(GraphicLayer gLyr) {
+		for (int i = gLyr.getNumGraphics() - 1; i >= 0; i--) {
+			FGraphic gr = gLyr.getGraphic(i);
+			if (gr.equals("N"))
+				gLyr.removeGraphic(i);
+
+		}
+	}
+
+	private void doLabeling(MapControl mapControl, Network net, GvFlag flag) {
+		GraphicLayer graphicLayer = mapControl.getMapContext()
+				.getGraphicsLayer();
+		IGraph g = net.getGraph();
+		int idSymbol = graphicLayer.addSymbol(getTextSymbol());
+		String tag = "N";
+		for (int i = 0; i < g.numVertices(); i++) {
+			GvNode node = g.getNodeByID(i);
+			IGeometry geom = ShapeFactory.createPoint2D(node.getX(), node
+					.getY());
+			NumberFormat nf = NumberFormat.getInstance();
+			nf.setMaximumFractionDigits(1);
+			String aux = "\u221E"; // infinito
+			if (node.getBestCost() < Double.MAX_VALUE)
+				aux = nf.format(node.getBestCost()) + " - " + nf.format(node.getAccumulatedLength());
+			FGraphicLabel theGLabel = new FGraphicLabel(geom, idSymbol, aux);
+			theGLabel.setObjectTag(tag);
+			theGLabel.getLabel().setJustification(FLabel.CENTER_TOP);
+			graphicLayer.addGraphic(theGLabel);
+		}
+		mapControl.drawGraphics();
+
+	}
+
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f instanceof View) {
+			return true;
+		}
+		return false;
+
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ServiceAreaExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/LoadNetworkExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/LoadNetworkExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/LoadNetworkExtension.java	(revision 30230)
@@ -0,0 +1,262 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Component;
+import java.io.File;
+import java.sql.Types;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.ProjectExtension;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.core.IGraph;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.core.loaders.NetworkLoader;
+import com.iver.cit.gvsig.graph.core.loaders.NetworkRedLoader;
+import com.iver.cit.gvsig.project.documents.table.ProjectTable;
+import com.iver.cit.gvsig.project.documents.view.IProjectView;
+import com.iver.cit.gvsig.project.documents.view.gui.IView;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class LoadNetworkExtension extends Extension {
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		IView view = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = view.getMapControl();
+		MapContext map = mapControl.getMapContext();
+		SingleLayerIterator lyrIterator = new SingleLayerIterator(map
+				.getLayers());
+		while (lyrIterator.hasNext()) {
+			FLayer lyr = lyrIterator.next();
+			if ((lyr.isActive()) && (lyr instanceof FLyrVect))
+			{
+				FLyrVect lyrVect = (FLyrVect) lyr;
+				int shapeType;
+				try {
+					shapeType = lyrVect.getShapeType();
+					if (shapeType == FShape.LINE)
+					{
+						if (actionCommand.equalsIgnoreCase("LOAD_RED")) {
+							loadNetwork(lyrVect);
+							return;
+						}
+					}
+				} catch (DriverException e) {
+					e.printStackTrace();
+					NotificationManager.addError(e);
+				} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+					e.printStackTrace();
+					NotificationManager.addError(e);
+				}
+
+			}
+		}
+
+
+	}
+
+	/**
+	 * Suponemos que en el proyecto hay 2 tablas, una con los nodos
+	 * y otro con los edges.
+	 * Cargamos la red a partir de esas tablas y se la
+	 * asociamos a la capa. A partir de ahí, nuestras
+	 * herramientas pueden ver si la capa activa tiene
+	 * asociada o no una red y ponerse visibles / invisibles
+	 * Otra posible solución es llevar nuestra propia lista de capas
+	 * con red (que será pequeñita), y así, en lugar de recorrer
+	 * el MapContext, recorremos nuestra lista para ver la
+	 * capa que está activa y con red. Me empieza a preocupar
+	 * que todas las herramientas iteren por la colección de
+	 * capas para habilitarse/deshabilitarse:
+	 * 100 herramientas * 100 capas = 10.000 comprobaciones
+	 * Si comprobar algo cuesta 1 mseg => 10 segundos!!!
+	 * @param lyrVect
+	 */
+	private void loadNetworkFromTables(FLyrVect lyrVect) {
+		// Aquí mostrar un diálgo para seleccionar las tablas
+		// de nodos y edges
+		// y hacer un mapping (si es necesario) entre los
+		// nombres de campos
+		String tableNodes = "Nodes";
+		String tableEdges = "Edges";
+
+		ProjectExtension projectExt = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
+
+		ProjectTable ptNodes = projectExt.getProject().getTable(tableNodes);
+		ProjectTable ptEdges = projectExt.getProject().getTable(tableEdges);
+
+		SelectableDataSource sdsNodes = ptNodes.getModelo().getRecordset();
+
+
+		SelectableDataSource sdsEdges = ptEdges.getModelo().getRecordset();
+
+		NetworkLoader netLoader = new NetworkLoader(true);
+
+		netLoader.setNodeReader(sdsNodes);
+		netLoader.setEdgeReader(sdsEdges);
+
+		IGraph g = netLoader.loadNetwork();
+
+		System.out.println("Num nodos=" + g.numVertices() + " numEdges = " + g.numEdges());
+
+		lyrVect.setProperty("network", g);
+
+	}
+	private void loadNetwork(FLyrVect lyrVect) throws com.hardcode.gdbms.engine.data.driver.DriverException, DriverException {
+		// Aquí mostrar un diálgo para seleccionar las tablas
+		// de nodos y edges
+		// y hacer un mapping (si es necesario) entre los
+		// nombres de campos
+
+		// TODO: MOSTRAR UN CUADRO DE DIÁLOGO CON UN COMBOBOX PARA QUE ESCOJA EL CAMPO DE NOMBRE DE CALLE.
+		ArrayList aux = new ArrayList();
+		FieldDescription[] fields = lyrVect.getRecordset().getFieldsDescription();
+		for (int i=0; i<fields.length; i++)
+		{
+			if (fields[i].getFieldType() == Types.VARCHAR)
+			{
+				aux.add(fields[i].getFieldName());
+			}
+		}
+		String fieldStreetName = (String) JOptionPane.showInputDialog((Component) PluginServices.getMainFrame(),
+				PluginServices.getText(this, "select_street_route_field_name"),
+				"gvSIG",
+				JOptionPane.QUESTION_MESSAGE, 
+				null,
+				(Object[]) aux.toArray(new String[0]), 
+				"NOMBRE");
+		
+		if (fieldStreetName == null)
+			return;
+
+		
+		NetworkRedLoader netLoader = new NetworkRedLoader();
+		File redFile = NetworkUtils.getNetworkFile(lyrVect);
+		netLoader.setNetFile(redFile);
+
+		IGraph g = netLoader.loadNetwork();
+		
+		System.out.println("Num nodos=" + g.numVertices() + " numEdges = " + g.numEdges());
+
+		Network net = new Network();
+		// lyrVect.createSpatialIndex();
+		net.setGraph(g);
+		net.setLayer(lyrVect);
+		ShortestPathExtension.solver.setNetwork(net);
+		ShortestPathExtension.solver.setFielStreetName(fieldStreetName);
+
+		lyrVect.setProperty("network", net);
+
+	}
+
+	public boolean isEnabled() {
+		IWindow f = PluginServices.getMDIManager().getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof View) {
+			View vista = (View) f;
+			IProjectView model = vista.getModel();
+			MapContext mapa = model.getMapContext();
+			FLayer[] activeLayers = mapa.getLayers().getActives();
+			if (activeLayers.length > 0)
+				if (activeLayers[0] instanceof FLyrVect){
+					FLyrVect lyrVect = (FLyrVect) activeLayers[0];
+					File netFile = NetworkUtils.getNetworkFile(lyrVect);
+					if (netFile.exists())
+						return true;
+
+				}
+		}
+		return false;
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager().getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof View) {
+			View vista = (View) f;
+			IProjectView model = vista.getModel();
+			MapContext mapa = model.getMapContext();
+			FLayer[] activeLayers = mapa.getLayers().getActives();
+			if (activeLayers.length > 0)
+				if (activeLayers[0] instanceof FLyrVect){
+					FLyrVect lyrVect = (FLyrVect) activeLayers[0];
+					int shapeType ;
+					try {
+						shapeType = lyrVect.getShapeType();
+						if (shapeType == FShape.LINE)
+							return true;
+					} catch (DriverException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}	
+		}
+		return false;
+
+	}
+
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/LoadNetworkExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkAddFlag.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkAddFlag.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkAddFlag.java	(revision 30230)
@@ -0,0 +1,158 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.tools.Behavior.PointBehavior;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.tools.BarrierListener;
+import com.iver.cit.gvsig.graph.tools.FlagListener;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class NetworkAddFlag extends Extension {		
+    FlagListener flagListener = null;
+    BarrierListener barrierListener = null;
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		View v = (View) PluginServices.getMDIManager().getActiveWindow();
+        MapControl mapCtrl = v.getMapControl();
+
+        if (!mapCtrl.hasTool("addFlag")) // We create it for the first time.
+        {
+        	flagListener = new FlagListener(mapCtrl);
+            mapCtrl.addMapTool("addFlag", new PointBehavior(flagListener));
+        }
+
+        if (!mapCtrl.hasTool("addBarrier")) // We create it for the first time.
+        {
+        	barrierListener = new BarrierListener(mapCtrl);
+            mapCtrl.addMapTool("addBarrier", new PointBehavior(barrierListener));
+        }
+        
+        if (actionCommand.compareTo("ADD_FLAG_TO_NETWORK") == 0)
+        {
+        	flagListener.setMode(FlagListener.TO_ARC);
+            mapCtrl.setTool("addFlag");
+        }
+        if (actionCommand.compareTo("ADD_FLAG_TO_NODE") == 0)
+        {
+        	flagListener.setMode(FlagListener.TO_NODE);
+            mapCtrl.setTool("addFlag");
+        }
+        if (actionCommand.compareTo("ADD_BARRIER") == 0)
+        {
+            mapCtrl.setTool("addBarrier");
+        }        
+//        else
+//        {
+//        	JOptionPane.showMessageDialog((JComponent) PluginServices.getMDIManager().getActiveWindow(), 
+//        			"Not implemented yet");
+//        }
+
+		
+	}
+
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+
+	}
+
+	public boolean isVisible() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/NetworkAddFlag.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearFlagsExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearFlagsExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearFlagsExtension.java	(revision 30230)
@@ -0,0 +1,150 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class ClearFlagsExtension extends Extension {
+
+	public void initialize() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void execute(String actionCommand) {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					if (actionCommand.equalsIgnoreCase("CLEAR_FLAGS"))
+					{
+						if (net.getFlags().length > 0)
+						{
+							net.removeFlags();
+							NetworkUtils.clearFlagsFromGraphics(mapCtrl);
+							mapCtrl.drawMap(false);
+						}
+					}
+				}
+			}
+		}
+		
+	}
+
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					if (net.getFlags().length > 0)
+					{
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+
+	}
+
+	public boolean isVisible() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearFlagsExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java	(revision 30230)
@@ -0,0 +1,500 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.awt.Component;
+import java.io.File;
+import java.util.HashMap;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.preferences.IPreference;
+import com.iver.andami.preferences.IPreferenceExtension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.edition.IWriter;
+import com.iver.cit.gvsig.fmap.edition.ShpSchemaManager;
+import com.iver.cit.gvsig.fmap.edition.writers.dbf.DbfWriter;
+import com.iver.cit.gvsig.fmap.edition.writers.shp.MultiShpWriter;
+import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessException;
+import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
+import com.iver.cit.gvsig.graph.core.writers.NetworkFileRedWriter;
+import com.iver.cit.gvsig.graph.core.writers.NetworkGvTableWriter;
+import com.iver.cit.gvsig.graph.gui.wizard.NetWizard;
+import com.iver.cit.gvsig.graph.preferences.RoutePage;
+import com.iver.cit.gvsig.project.documents.view.IProjectView;
+import com.iver.cit.gvsig.project.documents.view.gui.IView;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.toc.FLyrVectEditPropertiesTocMenuEntry2;
+import com.iver.cit.gvsig.topology.lineclean.fmap.LineCleanGeoprocess;
+import com.iver.utiles.SimpleFileFilter;
+import com.iver.utiles.extensionPoints.ExtensionPoint;
+import com.iver.utiles.extensionPoints.ExtensionPoints;
+import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
+import com.iver.utiles.swing.threads.AbstractMonitorableTask;
+import com.iver.utiles.swing.threads.IPipedTask;
+import com.iver.utiles.swing.threads.PipeTask;
+
+
+public class GenerateNetworkExtension extends Extension implements
+		IPreferenceExtension {
+	private static final IPreference thePreferencePage = new RoutePage();
+	public void initialize() {
+		ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+		((ExtensionPoint) extensionPoints.get("View_TocActions")).remove("FLyrVectEditProperties");
+		((ExtensionPoint) extensionPoints.get("View_TocActions")).remove("FLyrVectEditProperties2");
+		((ExtensionPoint) extensionPoints.get("View_TocActions")).put("FLyrVectEditProperties",new FLyrVectEditPropertiesTocMenuEntry2());
+    	//extensionPoints.add("View_TocActions","FLyrVectEditProperties2",new FLyrVectEditPropertiesTocMenuEntry2());
+		
+	}
+
+	public void execute(String actionCommand) {
+		IView view = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = view.getMapControl();
+		MapContext map = mapControl.getMapContext();
+		FLayers tocLyrs = map.getLayers();
+		SingleLayerIterator lyrIterator = new SingleLayerIterator(tocLyrs);
+		while (lyrIterator.hasNext()) {
+			FLayer lyr = lyrIterator.next();
+			if ((lyr.isActive()) && (lyr instanceof FLyrVect)) {
+				FLyrVect lyrVect = (FLyrVect) lyr;
+				int shapeType;
+				try {
+					shapeType = lyrVect.getShapeType();
+					if (shapeType == FShape.LINE) {
+						if (actionCommand.equalsIgnoreCase("GENERATE_RED")) {
+							generateRedNetwork(lyrVect, tocLyrs);
+							return;
+						}
+					}
+				} catch (DriverException e) {
+					e.printStackTrace();
+					NotificationManager.addError(e);
+				}
+
+			}
+		}
+
+	}
+
+	private void generateNetwork(FLyrVect lyr) {
+		NetworkGvTableWriter netBuilder = new NetworkGvTableWriter();
+		// Por ahora, a pelo, pero hay que sacar un cuadro
+		// de diálogo para hecer el mapping.
+		// También un cuadro de diálogo para seleccionar
+		// en qué tablas quiere escribir, y su formato
+		// (dbf, postgres, etc)
+		String fieldType = "tipored";
+		String fieldDist = "length";
+		String fieldSense = "sen";
+		String fieldCost = "cost";
+		try {
+			netBuilder.setLayer(lyr);
+			netBuilder.setFieldType(fieldType);
+			netBuilder.setFieldDist(fieldDist);
+			netBuilder.setFieldSense(fieldSense);
+			netBuilder.setFieldCost(fieldCost);
+			DbfWriter nodeWriter = new DbfWriter();
+			nodeWriter.setFile(new File("c:/nodes.dbf"));
+
+			DbfWriter edgeWriter = new DbfWriter();
+			edgeWriter.setFile(new File("c:/edges.dbf"));
+
+			netBuilder.setEdgeWriter(edgeWriter);
+			netBuilder.setNodeWriter(nodeWriter);
+
+			netBuilder.writeNetwork();
+		} catch (DriverException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (EditionException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		JOptionPane.showMessageDialog(null, PluginServices
+				.getText(this, "done"));
+	}
+	
+	class GenerateRedNetworkAfterCleanTask 
+		extends AbstractMonitorableTask implements IPipedTask{
+		
+		File redFile;
+		NetworkFileRedWriter netBuilder;
+		
+		FLyrVect inputLayer;
+		FLyrVect pseudonodes;
+		FLayers tocLyrs;
+		
+		/**
+		 * Constructor
+		 * @param tocLyrs
+		 */
+		GenerateRedNetworkAfterCleanTask(NetworkFileRedWriter netBuilder, FLayers tocLyrs) {
+			this.netBuilder = netBuilder;
+			this.tocLyrs = tocLyrs;
+			setInitialStep(0);
+			setDeterminatedProcess(true);
+			setStatusMessage(PluginServices.getText(this,
+			"Generando_red_a_partir_de_capa_lineal"));
+		}
+
+		public void run() throws Exception {
+			int numShapes;
+			try { 	
+				numShapes = inputLayer.getSource().getShapeCount();
+				// lo del 10 es para que termine después de 
+				// escribir los puntos
+				setFinalStep(numShapes + 10);
+				
+				
+			} catch (DriverIOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			netBuilder.setLayer(inputLayer);
+			netBuilder.setCancellableMonitorable(this);
+			netBuilder.setRedFile(redFile);
+			netBuilder.writeNetwork();
+			tocLyrs.addLayer(inputLayer);
+			tocLyrs.addLayer(pseudonodes);
+			enableControls();
+		}
+
+		public String getNote() {
+			String processText = PluginServices.getText(this, "Procesando_linea");
+			String of = PluginServices.getText(this, "de");
+			return processText + " " + getCurrentStep() + " " + of
+					+ " " + getFinishStep();
+		}
+
+		public void cancel() {
+			setCanceled(true);
+		}
+		
+		public boolean isFinished() {
+			return (getCurrentStep() >= getFinalStep());
+		}
+
+		/* (non-Javadoc)
+		 * @see com.iver.utiles.swing.threads.IPipedTask#getResult()
+		 */
+		public Object getResult() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		/**
+		 * Implementation of PipeTask interface
+		 * */
+		public void setEntry(Object object) {
+			//The previous task of this piped task is clean geoprocess
+			//whose result es FLayers with two layers
+			//first layer has cleaned layer
+			//and second layer has pseudonodes layer
+			FLayers layers  = (FLayers) object;
+			this.inputLayer = (FLyrVect) layers.getLayer(0);
+			inputLayer.createSpatialIndex();
+			this.redFile = NetworkUtils.getNetworkFile(inputLayer);
+			this.pseudonodes = (FLyrVect) layers.getLayer(1);
+		}
+	}
+	
+	public void enableControls(){
+		PluginServices.backgroundExecution(new Runnable(){
+			public void run() {
+				PluginServices.getMainFrame().enableControls();
+				
+			}});
+	}
+	
+
+	class GenerateRedNetworkTask extends AbstractMonitorableTask {
+		FLyrVect layer;
+
+		File redFile;
+
+		NetworkFileRedWriter netBuilder;
+		
+		
+
+		/**
+		 * Constructor
+		 */
+		GenerateRedNetworkTask(FLyrVect layer, File redFile,
+				NetworkFileRedWriter netBuilder) {
+			this.layer = layer;
+			if(! layer.isSpatiallyIndexed())
+				layer.createSpatialIndex();
+			
+			this.redFile = redFile;
+			this.netBuilder = netBuilder;
+			setInitialStep(0);
+			int numShapes;
+			try {
+				numShapes = layer.getSource().getShapeCount();
+				// lo del 10 es porque escribimos los nodos después de
+				// los tramos.
+				setFinalStep(numShapes + 10);
+				setDeterminatedProcess(true);
+				setStatusMessage(PluginServices.getText(this,
+						"Generando_red_a_partir_de_capa_lineal"));
+			} catch (DriverIOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		}
+
+		public void run() throws Exception {
+			netBuilder.setLayer(layer);
+			netBuilder.setCancellableMonitorable(this);
+			netBuilder.setRedFile(redFile);
+			netBuilder.writeNetwork();
+			enableControls();
+		}
+
+		public String getNote() {
+			String processText = PluginServices.getText(this, "Procesando_linea");
+			String of = PluginServices.getText(this, "de");
+			return processText + " " + getCurrentStep() + " " + of
+					+ " " + getFinishStep();
+		}
+
+		public void cancel() {
+			setCanceled(true);
+		}
+		
+		public Object getResult(){
+			return null;
+		
+		}
+		public void setEntry(Object object){
+			this.layer = (FLyrVect) object;
+		}
+	}
+
+	/**
+	 * It returns a geoprocess to make a CLEAN of the input layer 
+	 * */
+	private LineCleanGeoprocess createCleanGeoprocess(FLyrVect lineLyr) {
+		 File outputFile = null;
+		 JOptionPane.showMessageDialog(null,
+				PluginServices.getText(null, "Especifique_fichero_shp_resultante"),
+				PluginServices.getText(null, "Fichero_para_capa_corregida"),
+				JOptionPane.INFORMATION_MESSAGE);
+		 JFileChooser jfc = new JFileChooser();
+		SimpleFileFilter filterShp = new SimpleFileFilter("shp", PluginServices
+				.getText(this, "shp_files"));
+		jfc.setFileFilter(filterShp);
+		if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+			File newFile = jfc.getSelectedFile();
+			String path = newFile.getAbsolutePath();
+			if (newFile.exists()) {
+				int resp = JOptionPane.showConfirmDialog(
+						(Component) PluginServices.getMainFrame(),
+						PluginServices.getText(this,
+								"fichero_ya_existe_seguro_desea_guardarlo"),
+						PluginServices.getText(this, "guardar"),
+						JOptionPane.YES_NO_OPTION);
+				if (resp != JOptionPane.YES_OPTION) {
+					return null;
+				}
+			}// if
+			if (!(path.toLowerCase().endsWith(".shp"))) {
+				path = path + ".shp";
+			}
+			outputFile = new File(path);
+		} else {
+			return null;
+		}
+		LineCleanGeoprocess geoprocess = new LineCleanGeoprocess(lineLyr);
+		SHPLayerDefinition definition = (SHPLayerDefinition) geoprocess
+				.createLayerDefinition();
+		definition.setFile(outputFile);
+		ShpSchemaManager schemaManager = new ShpSchemaManager(outputFile
+				.getAbsolutePath());
+		IWriter writer = null;
+		try {
+			int shapeType = definition.getShapeType();
+			if (shapeType != XTypes.MULTI) {
+				writer = new ShpWriter();
+				((ShpWriter) writer).setFile(definition.getFile());
+				writer.initialize(definition);
+			} else {
+				writer = new MultiShpWriter();
+				((MultiShpWriter) writer).setFile(definition.getFile());
+				writer.initialize(definition);
+			}
+		} catch (Exception e1) {
+			String error = PluginServices.getText(this,
+					"Error_escritura_resultados");
+			String errorDescription = PluginServices.getText(this,
+					"Error_preparar_escritura_resultados");
+			return null;
+		}
+		geoprocess.setResultLayerProperties(writer, schemaManager);
+		HashMap params = new HashMap();
+		params.put("layer_selection", new Boolean(false));
+		try {
+			geoprocess.setParameters(params);
+			geoprocess.checkPreconditions();
+			return geoprocess;
+			
+		} catch (GeoprocessException e) {
+			String error = PluginServices.getText(this, "Error_ejecucion");
+			String errorDescription = PluginServices.getText(this,
+					"Error_fallo_geoproceso");
+			return null;
+		}
+
+	}
+
+	private void generateRedNetwork(FLyrVect lyr, FLayers tocLyrs) {
+		lyr.createSpatialIndex();
+		NetworkFileRedWriter netBuilder = new NetworkFileRedWriter();
+		// Por ahora, a pelo, pero hay que sacar un cuadro
+		// de diálogo para hecer el mapping.
+		// También un cuadro de diálogo para seleccionar
+		// en qué tablas quiere escribir, y su formato
+		// (dbf, postgres, etc)
+
+		ImageIcon icon = new ImageIcon(this.getClass().getClassLoader()
+				.getResource("images/net-wizard-logo.jpg"));
+
+		NetWizard wiz = new NetWizard(icon, lyr);
+		PluginServices.getMDIManager().addWindow(wiz);
+		if (!wiz.wasFinishPressed())
+			return;
+		// try {
+		String fieldType = wiz.getFieldType();
+		String fieldLength = wiz.getFieldLength();
+		String fieldCost = wiz.getFieldCost();
+		String fieldSense = wiz.getFieldSense();
+		netBuilder.setLayer(lyr);
+		netBuilder.setFieldType(fieldType);
+		netBuilder.setFieldDist(fieldLength);
+		netBuilder.setFieldSense(fieldSense);
+		netBuilder.setFieldCost(fieldCost);
+		File redFile = NetworkUtils.getNetworkFile(lyr);
+
+		boolean cleanOrigLyr = wiz.getCleanOriginalLayer();
+		LineCleanGeoprocess clean = null;
+		if(cleanOrigLyr)
+			clean = createCleanGeoprocess(lyr);
+		boolean applySnap = wiz.getApplySnapTolerance();
+		if(applySnap){
+			double snapTolerance = wiz.getSnapTolerance();
+			netBuilder.setSnapTolerance(snapTolerance);
+		}	
+		if(clean != null){
+			//we wont start the process of network creation
+			//until clean geoprocess will be finished
+			IPipedTask cleanTask = (IPipedTask) clean.createTask();
+			GenerateRedNetworkAfterCleanTask task = 
+				new GenerateRedNetworkAfterCleanTask(netBuilder, tocLyrs);
+			
+			PipeTask pipe = new PipeTask(cleanTask, (IPipedTask)task);
+			
+			PluginServices.cancelableBackgroundExecution(pipe);
+//			PluginServices.cancelableBackgroundExecution(task);
+			
+		}else{
+			GenerateRedNetworkTask task = new GenerateRedNetworkTask(lyr, redFile,
+					netBuilder);
+			PluginServices.cancelableBackgroundExecution(task);
+		}
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager().getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof View) {
+			View vista = (View) f;
+			IProjectView model = vista.getModel();
+			MapContext mapa = model.getMapContext();
+			FLayer[] activeLayers = mapa.getLayers().getActives();
+			if (activeLayers.length > 0)
+				if (activeLayers[0] instanceof FLyrVect) {
+					FLyrVect lyrVect = (FLyrVect) activeLayers[0];
+					int shapeType;
+					try {
+						shapeType = lyrVect.getShapeType();
+						if (shapeType == FShape.LINE)
+							return true;
+					} catch (DriverException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}
+		}
+		return false;
+
+	}
+
+	public IPreference getPreferencesPage() {
+		return thePreferencePage;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearRouteExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearRouteExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearRouteExtension.java	(revision 30230)
@@ -0,0 +1,155 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import java.util.List;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.gui.RouteReportPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.util.GvSession;
+
+public class ClearRouteExtension extends Extension {
+
+	public void initialize() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void execute(String actionCommand) {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					if (actionCommand.equalsIgnoreCase("CLEAR_ROUTES"))
+					{
+						NetworkUtils.clearRouteFromGraphics(mapCtrl);
+						GvSession.getInstance().delete(mapCtrl, "Route");
+						List reportPanels = (List) GvSession.
+												getInstance().
+												get(mapCtrl, "RouteReport");
+						if(reportPanels != null){
+							for(int i = 0; i < reportPanels.size(); i++){
+								PluginServices.getMDIManager().
+								closeWindow((RouteReportPanel)reportPanels.get(i));
+							}
+						}
+				
+						GvSession.getInstance().delete(mapCtrl, "RouteReport");
+						mapCtrl.drawMap(false);
+					}
+					
+				}
+			}
+		}
+		
+	}
+
+	public boolean isEnabled() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+	        GraphicLayer grafLayer = mapCtrl.getMapContext().getGraphicsLayer(); 
+	        for (int i=0; i < grafLayer.getNumGraphics(); i++)
+	        {
+	        	FGraphic graf = grafLayer.getGraphic(i);
+	        	if (graf.getTag() != null)
+	        		if (graf.getTag().compareTo("ROUTE") == 0)
+						return true;
+			}
+		}
+		return false;
+
+	}
+
+	public boolean isVisible() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if (window instanceof View)
+		{
+			View v = (View) window;
+	        MapControl mapCtrl = v.getMapControl();
+			MapContext map = mapCtrl.getMapContext();
+			
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+				
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+
+	}
+
+}
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ClearRouteExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ManageFlagsExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ManageFlagsExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ManageFlagsExtension.java	(revision 30230)
@@ -0,0 +1,182 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.gui.RouteControlPanel;
+import com.iver.cit.gvsig.project.documents.view.IProjectView;
+import com.iver.cit.gvsig.project.documents.view.gui.IView;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.util.GvSession;
+
+public class ManageFlagsExtension extends Extension {
+	/**
+	 * Component to control flags and routes
+	 * */
+	private RouteControlPanel controlPanel;
+	
+//	private String fieldType;
+//	private String fieldDist;
+//	private String fieldSense;
+
+	public void initialize() {
+	}
+
+	public void execute(String actionCommand) {
+		IView view = (View) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapControl = view.getMapControl();
+		MapContext map = mapControl.getMapContext();
+		SingleLayerIterator lyrIterator = new SingleLayerIterator(map
+				.getLayers());
+		while (lyrIterator.hasNext()) {
+			FLayer lyr = lyrIterator.next();
+			if ((lyr.isActive()) && (lyr instanceof FLyrVect))
+			{
+				FLyrVect lyrVect = (FLyrVect) lyr;
+				Network net = (Network) lyr.getProperty("network");
+
+				if ( net != null)
+				{
+					manageFlags(lyrVect, mapControl);
+				}
+			}
+		}
+
+
+	}
+
+	private void manageFlags(FLyrVect lyrVect, MapControl mapControl) {
+		Network net = (Network) lyrVect.getProperty("network");
+
+		if ( net != null)
+		{
+				if(controlPanel == null)
+				{
+				
+					controlPanel = new RouteControlPanel(net);
+				}
+				controlPanel.setMapControl(mapControl, net);
+				//lo guardamos en una variable de sesion para poder recuperarlo
+				//(ejemplo: cuando borremos los flags de la red de la capa activa
+				//borraremos a su vez el contenido del control panel		
+				controlPanel = (RouteControlPanel) PluginServices.getMDIManager().addWindow(controlPanel);
+				GvSession.getInstance().put(mapControl, "RouteControlPanel", controlPanel);
+		}
+		else
+		{
+			JOptionPane.showMessageDialog((JComponent) PluginServices.getMDIManager().getActiveWindow(),
+						PluginServices.getText(this, "la_capa_no_tiene_red_asociada"));
+		}
+	}
+
+	public boolean isEnabled() {
+		IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f instanceof View) {
+		    View v = (View) f;
+			MapContext map = v.getMapControl().getMapContext();
+			SingleLayerIterator it = new SingleLayerIterator(map.getLayers());
+			while (it.hasNext())
+			{
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				Network net = (Network) aux.getProperty("network");
+
+				if ( net != null)
+				{
+					return true;
+				}
+			}
+			return false;
+
+		}
+		return false;
+
+	}
+
+	public boolean isVisible() {
+		IWindow f = PluginServices.getMDIManager().getActiveWindow();
+
+		if (f == null) {
+			return false;
+		}
+
+		if (f instanceof View) {
+			View vista = (View) f;
+			IProjectView model = vista.getModel();
+			MapContext mapa = model.getMapContext();
+			FLayer[] activeLayers = mapa.getLayers().getActives();
+			if (activeLayers.length > 0)
+				if (activeLayers[0] instanceof FLyrVect){
+					FLyrVect lyrVect = (FLyrVect) activeLayers[0];
+					int shapeType ;
+					try {
+						shapeType = lyrVect.getShapeType();
+						if (shapeType == FShape.LINE)
+							return true;
+					} catch (DriverException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}	
+		}
+		return false;
+
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/ManageFlagsExtension.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/DlgDirections.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/DlgDirections.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/DlgDirections.java	(revision 30230)
@@ -0,0 +1,147 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.Frame;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+
+import javax.swing.JDialog;
+import javax.swing.JScrollPane;
+import javax.swing.JTextPane;
+import com.hardcode.gdbms.engine.values.DoubleValue;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+
+public class DlgDirections extends JDialog {
+
+	private JScrollPane jScrollPane = null;
+
+	private JTextPane jTextPane = null;
+
+	/**
+	 * This method initializes
+	 *
+	 * @param b
+	 * @param frame
+	 *
+	 */
+	public DlgDirections(Frame frame, boolean b) {
+		super(frame, b);
+		initialize();
+	}
+
+	/**
+	 * Es responsabilidad del interfaz de usuario presentar el modelo a su
+	 * manera.
+	 *
+	 * @param features
+	 */
+	public void setModel(ArrayList featureList) {
+		String cad = "Pasa por:";
+		int cont = 0;
+		double longitud = 0, sumaLong = 0, longAnt = 0;
+		String cadAnt = "";
+		NumberFormat nf = NumberFormat.getInstance();
+		nf.setMaximumFractionDigits(2);
+		for (int i = featureList.size() - 1; i >= 0; i--) {
+			// INSTRUCCIONES
+			IFeature feat = (IFeature) featureList.get(i);
+			DoubleValue length = (DoubleValue) feat.getAttribute(2);
+			double dist = length.doubleValue();
+			longitud = longitud + dist;
+			sumaLong = sumaLong + dist;
+
+			String cadProv = feat.getAttribute(3).toString();
+			if ((cadAnt.compareTo(cadProv) != 0) && (cont > 0)) {
+				longitud = dist;
+				cad = cad + "\n" + cadAnt + " " + nf.format(longAnt)
+						+ " metros";
+
+			}
+			longAnt = longitud;
+			cadAnt = cadProv;
+
+			cont = cont + 1;
+		}
+		cad = cad + "\n" + cadAnt + " " + nf.format(longAnt) + " metros";
+		cad = cad + "\n" + "=================" + "\n"
+				+ "Distancia total recorrida: " + nf.format(sumaLong)
+				+ " metros";
+		getJTextPane().setText(cad);
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		this.setSize(new java.awt.Dimension(363, 254));
+		this.setContentPane(getJScrollPane());
+
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJTextPane());
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jTextPane
+	 *
+	 * @return javax.swing.JTextPane
+	 */
+	private JTextPane getJTextPane() {
+		if (jTextPane == null) {
+			jTextPane = new JTextPane();
+		}
+		return jTextPane;
+	}
+
+} // @jve:decl-index=0:visual-constraint="10,10"
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/DlgDirections.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteReportPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteReportPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteReportPanel.java	(revision 30230)
@@ -0,0 +1,478 @@
+/*
+ * Created on 19-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.14  2006-11-20 08:44:55  fjp
+* borrar tramos amarillos, seleccionar solo campos numéricos y situar las barreras encima del tramo invalidado
+*
+* Revision 1.13  2006/11/14 16:12:01  fjp
+* *** empty log message ***
+*
+* Revision 1.12  2006/11/08 16:48:20  fjp
+* *** empty log message ***
+*
+* Revision 1.11  2006/11/06 17:19:02  fjp
+* Depurando el aspecto
+*
+* Revision 1.10  2006/11/06 13:21:38  fjp
+* detalles
+*
+* Revision 1.9  2006/10/27 10:17:27  fjp
+* Correcto. Falta ponerlo bonito.
+*
+* Revision 1.8  2006/10/26 17:47:14  fjp
+* previo a formato
+*
+* Revision 1.7  2006/10/26 11:42:42  fjp
+* Ya pita, ya.
+*
+* Revision 1.6  2006/10/25 15:51:20  fjp
+* por terminar lo de los giros
+*
+* Revision 1.5  2006/10/25 14:47:34  fjp
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/24 18:42:05  azabala
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/23 18:51:42  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/20 19:54:01  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 19:09:43  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.BasicStroke;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.geom.Rectangle2D;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+
+
+
+import com.hardcode.gdbms.engine.values.DoubleValue;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.core.TurnUtil;
+import com.iver.cit.gvsig.graph.solvers.Route;
+
+public class RouteReportPanel extends JPanel implements IWindow{
+	
+	private final String START_IMAGE = "<img src=\"images/drapeau_depart.gif\">";
+	private final String STOP_IMAGE = "<img src=\"images/drapeau_arrivee.gif\">";
+	private final String LEFT_IMAGE = "<img src=\"images/turn-left.png\">";
+	private final String RIGHT_IMAGE = "<img src=\"images/turn-right.png\">";
+	private final String STRAIGHT_IMAGE = "<img src=\"images/gtk-go-up.png\">";
+	
+	private final String LINE_SEPARATOR = "<hr width =\"70%\">";
+	
+	private Route route;
+	
+	private JScrollPane scrollPanel;
+	private JEditorPane htmlPanel;
+	private WindowInfo viewInfo;
+	
+	
+	private String htmlText;
+	private MapControl mapControl;
+	
+	//Para poder poner duración, etc.
+	private String weightText = "Longitud:";
+	
+	//Distancias y costes acumulados (entre dos cambios de calles)
+	private double acumuledLenght = 0d;
+	private double acumuledWeight = 0d;
+	
+	private double totalLenght = 0d;
+	private double totalWeight = 0d;
+	
+	
+	
+	private int numberOfStreets = 1;//partimos de 1 porque consideramos la salida
+	private ArrayList tramesOfSameStreet = new ArrayList();
+	
+	NumberFormat nf = NumberFormat.getInstance();
+	
+	
+	public RouteReportPanel(Route route, MapControl mapControl){
+		super();
+		setLayout(new BorderLayout());
+		this.route = route;
+		this.mapControl = mapControl;
+		scrollPanel = new JScrollPane();
+		htmlPanel = new JEditorPane();
+		htmlPanel.setEditable(false);
+		htmlPanel.setEditorKit(new HTMLEditorKit());
+		
+		nf.setMaximumFractionDigits(2);
+		
+		final MapControl map = mapControl;
+		final Route routeTemp = route;
+		final MapControl mapControlTemp = mapControl;
+		htmlPanel.addHyperlinkListener(new HyperlinkListener(){
+			ArrayList previousSelection;
+			public void hyperlinkUpdate(HyperlinkEvent e) {
+				if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+					Rectangle2D bounds = null; 
+					StringTokenizer st = new StringTokenizer(e.getDescription(),",");
+					System.err.println("E.GETDESCRIPTION():" + e.getDescription());
+					ArrayList features = new ArrayList();
+				     while (st.hasMoreTokens()) {
+				    	 int indexOfFeature = Integer.parseInt(st.nextToken());
+				    	 IFeature feature = (IFeature) routeTemp.getFeatureList().get(indexOfFeature);
+				    	 if(bounds == null)
+				    		 bounds = feature.getGeometry().getBounds2D();
+				    	 else
+				    		 bounds.add(feature.getGeometry().getBounds2D());
+				    	 features.add(feature);
+				     }
+					if(bounds != null){
+						bounds = expand(bounds);
+						GraphicLayer graphicLayer = mapControlTemp.getMapContext().getGraphicsLayer();
+						if(previousSelection != null){
+							for(int i = 0; i < previousSelection.size(); i++){
+								graphicLayer.removeGraphic((FGraphic) previousSelection.get(i));
+							}
+						}
+						previousSelection = new ArrayList();
+						FSymbol lineSymbol = new FSymbol(FShape.LINE, Color.YELLOW);
+						lineSymbol.setStroke(new BasicStroke(3.0f));
+						int idSymbolLine = graphicLayer.addSymbol(lineSymbol);
+						for(int i = 0; i < features.size(); i++ ){
+							IGeometry gAux = ((IFeature)features.get(i)).getGeometry();
+							FGraphic graphic = new FGraphic(gAux, idSymbolLine);
+							graphic.setTag("ROUTE");
+							graphicLayer.addGraphic( graphic);
+							previousSelection.add(graphic);
+						}
+						mapControlTemp.drawGraphics();
+						map.getMapContext().getViewPort().setExtent(bounds);
+					}	
+			      }
+			}});
+		initialize();
+		scrollPanel.setViewportView(htmlPanel);
+		add(scrollPanel, BorderLayout.CENTER);
+	}
+	
+	
+	private Rectangle2D expand(Rectangle2D rect){
+		double xmin = rect.getMinX();
+		double ymin = rect.getMinY();
+		double width = rect.getWidth();
+		double height = rect.getHeight();
+		
+		xmin -= width ;
+		ymin -= height ;
+		double newWidth = width * 2;
+		double newHeight = height * 2 ;
+		return new Rectangle2D.Double(xmin, ymin, newWidth, newHeight);
+	}
+	
+	
+	public void setRoute(Route route){
+		this.route = route;
+		initialize();
+	}
+	
+	private void initialize(){
+		htmlText = "<head>";
+		htmlText += "<style type='text/css'>";
+		htmlText += "<!-- ";
+		htmlText += "  .normal { ";
+		htmlText += "	font-family: Arial, Helvetica, sans-serif;	font-size: 10px; font-style: normal; color: #333333;";
+		htmlText += "}";
+		htmlText += "  a { ";
+		htmlText += "	font-family: Arial, Helvetica, sans-serif;	font-size: 10px; font-style: italic; font-weight: bold;";
+		htmlText += "}";
+		htmlText += "  h1 { ";
+		htmlText += "	font-family: Arial, Helvetica, sans-serif;	font-size: 14px;";
+		htmlText += "}";		
+		htmlText += "  .distancia { ";
+		htmlText += "	font-family: Arial, Helvetica, sans-serif;	font-size: 10px; color: #666666;";
+		htmlText += "}";
+		htmlText += "  .resumen { ";
+		htmlText += "	font-family: Arial, Helvetica, sans-serif;	font-size: 12px; color: #333333;";
+		htmlText += "}";
+		htmlText += "  .left { ";
+		htmlText += "	font-weight: bold; color: #990000;";
+		htmlText += "}";
+		htmlText += "  .right { ";
+		htmlText += "	font-weight: bold; color: #0033FF;";
+		htmlText += "}";
+		
+		htmlText += " -->";
+		htmlText += "</style>";
+		htmlText += "</head>";
+		htmlText += "<body>";
+		ArrayList features = route.getFeatureList();
+		
+		//Route is ordered from the the start to the end
+		IFeature firstFeature = (IFeature) features.get(0);
+		IFeature lastFeature = (IFeature) features.get(features.size() - 1);
+		
+		renderHeader(firstFeature, lastFeature);
+		renderFirstStrech(firstFeature);
+		
+		IFeature previousFeature = firstFeature;
+		for (int i = 1; i < features.size() ; i++) {
+			IFeature feature = (IFeature) features.get(i);
+			renderStrech(feature , previousFeature, i);
+			previousFeature = feature;
+		}
+		
+		//TODO
+		//Invertir el FIRST y el LAST
+		//Borrar el graphics resaltado cuando se resalte otro
+		renderLastStretch((IFeature)features.get(features.size() -1), previousFeature);
+		htmlText += "</body>";
+		System.out.println(htmlText);
+		htmlPanel.setText(htmlText);
+		
+	}
+	
+	
+	
+	
+	
+	private void renderHeader(IFeature firstFeature, IFeature lastFeature){
+		String startName = firstFeature.getAttribute(Route.TEXT_INDEX).toString();
+		String stopName = lastFeature.getAttribute(Route.TEXT_INDEX).toString();
+		htmlText += "<h1>";
+		htmlText += "Informe de Ruta:" + startName + "-" + stopName ;//TODO INTERNACIONALIZAR ESTO
+		htmlText += "</h1><br>";
+		htmlText += "<span class='resumen'>Salida desde: <b>";//TODO INTERNAC
+		htmlText += startName;
+		htmlText += "</b><br>";
+		htmlText += "Llegada a:<b> ";//TODO INTERNAC
+		htmlText += stopName + "</b><br>";
+		
+		//TODO METER LA LONGITUD TOTAL DEL TRAYECTO AQUI
+		htmlText += "Longitud total del trayecto: <b>" + nf.format(getLengthOfRoute()) + "</b></span>";
+		htmlText += LINE_SEPARATOR;
+	}
+	
+	private double getLengthOfRoute() {
+		double solution = 0d;
+		ArrayList featureList = route.getFeatureList();
+		for(int i = 0; i < featureList.size(); i++){
+			IFeature feature = (IFeature) featureList.get(i);
+			solution += ((DoubleValue)feature.getAttribute(Route.LENGTH_INDEX)).getValue();
+		}
+		return solution;
+	}
+
+
+	private void renderFirstStrech(IFeature feature){
+		htmlText += "<table>";
+		htmlText += "<tr>";
+		htmlText += "<td width='40'>";
+		htmlText += START_IMAGE;
+		htmlText += "</td>";
+		htmlText += "<td class='normal'>";
+		htmlText += "1. Salir de:<b> ";//TODO INTERNAC
+		htmlText += feature.getAttribute(Route.TEXT_INDEX);
+		htmlText += "</b></td></tr>";
+		htmlText += "<tr>"; 
+		htmlText += "<td width='40'></td><td><a href=\""+0+"\">Ver sobre el mapa</a><td></tr>";
+		htmlText += "</table>";
+		htmlText += LINE_SEPARATOR;
+		
+		double length = ((DoubleValue)feature.getAttribute(Route.LENGTH_INDEX)).getValue();
+		double weight = ((DoubleValue)feature.getAttribute(Route.WEIGHT_INDEX)).getValue();
+		acumuledLenght += length;
+		acumuledWeight += weight;
+		
+		totalLenght += length;
+		totalWeight += weight;
+		
+		tramesOfSameStreet.add(new Integer(0));
+	}
+	
+	private void renderStrech(IFeature feature, IFeature previousFeature, int index){
+		String street1 =  previousFeature.getAttribute(Route.TEXT_INDEX).toString();
+		String street2 = feature.getAttribute(Route.TEXT_INDEX).toString();
+		boolean changeStreet = ! street1.equalsIgnoreCase(street2);
+		double length = ((DoubleValue)feature.getAttribute(Route.LENGTH_INDEX)).getValue();
+		double weight = ((DoubleValue)feature.getAttribute(Route.WEIGHT_INDEX)).getValue();
+		
+		String textoTramo = null;
+		String imageTurn = null;
+		
+		if(changeStreet){
+			numberOfStreets++;
+			String prefix = "Continúe por <b>" + street1 + "</b> durante  "+
+			nf.format(acumuledLenght)+" y ";
+			int direction = TurnUtil.getDirection(previousFeature, feature);
+			
+			if(direction == TurnUtil.GO_STRAIGH_ON){
+				textoTramo = prefix + " prosiga por <b>"+ street2 + "</b>";
+				imageTurn = STRAIGHT_IMAGE;
+				
+			}else if(direction == TurnUtil.TURN_LEFT){
+				textoTramo = prefix += " gire a la <span class='left'><b>izquierda</b></span> por <b>" + street2 + "</b>";
+				imageTurn = LEFT_IMAGE;
+				
+			}else if(direction == TurnUtil.TURN_RIGHT){
+				textoTramo = prefix += " gire a la <span class='right'><b>derecha</b></span> por <b>" + street2 + "</b>";
+				imageTurn = RIGHT_IMAGE;	
+			}
+			htmlText += "<table>";
+			htmlText += "<tr>";
+			htmlText += "<td width='40'>";
+			htmlText += imageTurn;
+			htmlText += "</td>";
+			htmlText += "<td class='normal'>";
+			htmlText += numberOfStreets+" "+textoTramo;//TODO INTERNAC
+			htmlText += "</td></tr>";
+			htmlText += "<tr>";
+			htmlText += "<td with='40'></td><td class='distancia'>Distancia acumulada:"+nf.format(totalLenght)+"</td></tr>";
+			
+			if(!weightText.equalsIgnoreCase("Longitud:"))
+			{
+				htmlText += "<tr>";
+				htmlText += "<td with='40'></td><td class='distancia'>Coste:"+nf.format(totalWeight)+"</td></tr>";
+			}
+			
+			String features = "";
+			for(int i = 0; i < tramesOfSameStreet.size() -1; i++){
+				int featureIndex = ((Integer) tramesOfSameStreet.get(i)).intValue();
+				features += featureIndex + ",";
+			}
+			
+			features += ((Integer)tramesOfSameStreet.get(tramesOfSameStreet.size()-1)).intValue();
+//			System.out.println("features = " + features);
+			htmlText += "<tr><td with='40'></td><td><a href=\""+features+"\">Ver sobre el mapa</a><td></tr>";
+			htmlText += "</table>";
+			htmlText += LINE_SEPARATOR;
+			
+			acumuledLenght = length;
+			acumuledWeight = weight;
+			tramesOfSameStreet.clear();
+	
+			
+		}else{
+			acumuledLenght += length;
+			acumuledWeight += weight;
+		}
+		
+		tramesOfSameStreet.add(new Integer(index));
+		totalLenght += length;
+		totalWeight += weight;
+		
+	}
+	
+	
+	
+	private void renderLastStretch(IFeature feature, IFeature previousFeature){
+		
+//		double length = ((DoubleValue)feature.getAttribute(Route.LENGTH_INDEX)).getValue();
+//		double weight = ((DoubleValue)feature.getAttribute(Route.WEIGHT_INDEX)).getValue();
+//		
+//		
+//		totalLenght += length;
+//		totalWeight += weight;
+		
+		htmlText += "<table>";
+		htmlText += "<tr>";
+		htmlText += "<td width='40'>";
+		htmlText += STOP_IMAGE;
+		htmlText += "</td>";
+		htmlText += "<td>";
+		htmlText += numberOfStreets+". Llegada: ";//TODO INTERNAC
+		htmlText += feature.getAttribute(Route.TEXT_INDEX);
+		htmlText += "</td></tr>";
+		htmlText += "<tr><td with='40'></td><td>Longitud:"+nf.format(totalLenght)+"</td></tr>";
+		
+		if(!weightText.equalsIgnoreCase("Longitud:"))
+			htmlText += "<tr><td with='40'></td><td class='distancia'>Coste:"+totalWeight+"</td></tr>";
+		htmlText += "<tr><td with='40'></td><td><a href=\""+(route.getFeatureList().size()-1)+"\">Ver sobre el mapa</a><td></tr>";
+		htmlText += "</table>";
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (viewInfo == null) {
+			viewInfo = new WindowInfo(WindowInfo.MODELESSDIALOG | 
+										WindowInfo.RESIZABLE | 
+										WindowInfo.MAXIMIZABLE |
+										WindowInfo.ICONIFIABLE | 
+										WindowInfo.PALETTE);
+			viewInfo.setTitle("Informe de la ruta calculada");//Internacionalizar esto
+			viewInfo.setWidth(400);
+			viewInfo.setHeight(350);
+		}
+		return viewInfo;
+	}
+	
+	
+	
+	
+	
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteReportPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/ImageView.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/ImageView.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/ImageView.java	(revision 30230)
@@ -0,0 +1,874 @@
+/*
+ * Created on 20-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-10-20 19:54:01  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.image.ImageObserver;
+import java.io.*;
+import java.net.*;
+import java.util.Dictionary;
+import javax.swing.*;
+import javax.swing.text.*;
+import javax.swing.text.html.*;
+import javax.swing.event.*;
+
+import com.iver.cit.gvsig.geoprocess.wizard.GeoProcessingExtension;
+
+public class ImageView extends View implements ImageObserver, MouseListener, MouseMotionListener{
+
+ // --- Attribute Values ------------------------------------------
+    
+    public static final String
+    	TOP = "top",
+    	TEXTTOP = "texttop",
+    	MIDDLE = "middle",
+    	ABSMIDDLE = "absmiddle",
+    	CENTER = "center",
+    	BOTTOM = "bottom";
+    
+    Class pluginEnvironmentClass;
+    // --- Construction ----------------------------------------------
+
+    /**
+     * Creates a new view that represents an IMG element.
+     *
+     * @param elem the element to create a view for
+     */
+    public ImageView(Element elem, Class aClass) {
+    	super(elem);
+    	this.pluginEnvironmentClass = aClass;
+    	initialize(elem);
+	StyleSheet sheet = getStyleSheet();
+	attr = sheet.getViewAttributes(this);
+	
+    }
+    
+    
+    private void initialize( Element elem ) {
+	synchronized(this) {
+	    loading = true;
+	    fWidth = fHeight = 0;
+	}
+	int width = 0;
+	int height = 0;
+	boolean customWidth = false;
+	boolean customHeight = false;
+	try {
+	    fElement = elem;
+        
+	    // Request image from document's cache:
+	    AttributeSet attr = elem.getAttributes();
+            if (isURL()) {
+	      URL src = getSourceURL();
+	      if( src != null ) {
+		  Dictionary cache = (Dictionary) getDocument().getProperty(IMAGE_CACHE_PROPERTY);
+		  if( cache != null )
+		      fImage = (Image) cache.get(src);
+		  else
+		      fImage = Toolkit.getDefaultToolkit().getImage(src);
+	      }
+            }
+            else {
+
+              /******** Code to load from relative path *************/
+              String src =
+                (String) fElement.getAttributes().getAttribute
+                   (HTML.Attribute.SRC);
+//TODO
+// src = processSrcPath(src);
+              URL url = pluginEnvironmentClass.getClassLoader().getResource(src);
+              fImage = Toolkit.getDefaultToolkit().createImage(url);
+              try { waitForImage(); }
+              catch (InterruptedException e) { fImage = null; }
+              /******************************************************/
+
+            }
+	
+	    // Get height/width from params or image or defaults:
+	    height = getIntAttr(HTML.Attribute.HEIGHT,-1);
+	    customHeight = (height>0);
+	    if( !customHeight && fImage != null )
+		height = fImage.getHeight(this);
+	    if( height <= 0 )
+		height = DEFAULT_HEIGHT;
+		
+	    width = getIntAttr(HTML.Attribute.WIDTH,-1);
+	    customWidth = (width>0);
+	    if( !customWidth && fImage != null )
+		width = fImage.getWidth(this);
+	    if( width <= 0 )
+		width = DEFAULT_WIDTH;
+
+	    // Make sure the image starts loading:
+	    if( fImage != null )
+		if( customWidth && customHeight )
+		    Toolkit.getDefaultToolkit().prepareImage(fImage,height,
+							     width,this);
+		else
+		    Toolkit.getDefaultToolkit().prepareImage(fImage,-1,-1,
+							     this);
+	
+            /********************************************************
+            // Rob took this out. Changed scope of src.
+	    if( DEBUG ) {
+		if( fImage != null )
+		    System.out.println("ImageInfo: new on "+src+
+				       " ("+fWidth+"x"+fHeight+")");
+		else
+		    System.out.println("ImageInfo: couldn't get image at "+
+				       src);
+		if(isLink())
+		    System.out.println("           It's a link! Border = "+
+				       getBorder());
+		//((AbstractDocument.AbstractElement)elem).dump(System.out,4);
+	    }
+            ********************************************************/
+	} finally {
+	    synchronized(this) {
+		loading = false;
+		if (customWidth || fWidth == 0) {
+		    fWidth = width;
+		}
+		if (customHeight || fHeight == 0) {
+		    fHeight = height;
+		}
+	    }
+	}
+    }
+
+    /** Determines if path is in the form of a URL */
+    private boolean isURL() {
+        String src =
+          (String) fElement.getAttributes().getAttribute(HTML.Attribute.SRC);
+        return src.toLowerCase().startsWith("file") ||
+               src.toLowerCase().startsWith("http");
+    }    
+
+    /** Checks to see if the absolute path is availabe thru an application
+        global static variable or thru a system variable. If so, appends
+        the relative path to the absolute path and returns the String. */
+//    private String processSrcPath(String src) {
+//      String val = src; 
+//
+//      File imageFile = new File(src);
+//      if (imageFile.isAbsolute()) return src;
+//
+//      //try to get application images path...
+//      if (PicTest.ApplicationImagePath != null) {
+//        String imagePath = PicTest.ApplicationImagePath;
+//        val = (new File(imagePath, imageFile.getPath())).toString();
+//      }
+//      //try to get system images path...
+//      else {
+//        String imagePath = System.getProperty("system.image.path.key");
+//        if (imagePath != null) {
+//          val = (new File(imagePath, imageFile.getPath())).toString();
+//        }
+//      }
+//
+//      //System.out.println("src before: " + src + ", src after: " + val);
+//      return val;
+//    }
+
+    /** Added this guy to make sure an image is loaded - ie no broken 
+        images. So far its used only for images loaded off the disk (non-URL). 
+        It seems to work marvelously. By the way, it does the same thing as
+        MediaTracker, but you dont need to know the component its being 
+        rendered on. Rob */
+    private void waitForImage() throws InterruptedException { 
+      int w = fImage.getWidth(this);
+      int h = fImage.getHeight(this);
+
+      while (true) {
+        int flags = Toolkit.getDefaultToolkit().checkImage(fImage, w, h, this);
+
+        if ( ((flags & ERROR) != 0) || ((flags & ABORT) != 0 ) )
+          throw new InterruptedException();
+        else if ((flags & (ALLBITS | FRAMEBITS)) != 0) 
+          return;
+        Thread.sleep(10);
+        //System.out.println("rise and shine...");
+      }
+    }
+
+    
+    /**
+     * Fetches the attributes to use when rendering.  This is
+     * implemented to multiplex the attributes specified in the
+     * model with a StyleSheet.
+     */
+    public AttributeSet getAttributes() {
+	return attr;
+    }
+
+    /** Is this image within a link? */
+    boolean isLink( ) {
+        //! It would be nice to cache this but in an editor it can change
+        // See if I have an HREF attribute courtesy of the enclosing A tag:
+	AttributeSet anchorAttr = (AttributeSet)
+	    fElement.getAttributes().getAttribute(HTML.Tag.A);
+	if (anchorAttr != null) {
+	    return anchorAttr.isDefined(HTML.Attribute.HREF);
+	}
+	return false;
+    }
+    
+    /** Returns the size of the border to use. */
+    int getBorder( ) {
+        return getIntAttr(HTML.Attribute.BORDER, isLink() ?DEFAULT_BORDER :0);
+    }
+    
+    /** Returns the amount of extra space to add along an axis. */
+    int getSpace( int axis ) {
+    	return getIntAttr( axis==X_AXIS ?HTML.Attribute.HSPACE :HTML.Attribute.VSPACE,
+    			   0 );
+    }
+    
+    /** Returns the border's color, or null if this is not a link. */
+    Color getBorderColor( ) {
+    	StyledDocument doc = (StyledDocument) getDocument();
+        return doc.getForeground(getAttributes());
+    }
+    
+    /** Returns the image's vertical alignment. */
+    float getVerticalAlignment( ) {
+	String align = (String) fElement.getAttributes().getAttribute(HTML.Attribute.ALIGN);
+	if( align != null ) {
+	    align = align.toLowerCase();
+	    if( align.equals(TOP) || align.equals(TEXTTOP) )
+	        return 0.0f;
+	    else if( align.equals(this.CENTER) || align.equals(MIDDLE)
+					       || align.equals(ABSMIDDLE) )
+	        return 0.5f;
+	}
+	return 1.0f;		// default alignment is bottom
+    }
+    
+    boolean hasPixels( ImageObserver obs ) {
+        return fImage != null && fImage.getHeight(obs)>0
+			      && fImage.getWidth(obs)>0;
+    }
+    
+
+    /** Return a URL for the image source, 
+        or null if it could not be determined. */
+    private URL getSourceURL( ) {
+ 	String src = (String) fElement.getAttributes().getAttribute(HTML.Attribute.SRC);
+ 	if( src==null ) return null;
+
+	URL reference = ((HTMLDocument)getDocument()).getBase();
+        try {
+ 	    URL u = new URL(reference,src);
+	    return u;
+        } catch (MalformedURLException e) {
+	    return null;
+        }
+    }
+    
+    /** Look up an integer-valued attribute. <b>Not</b> recursive. */
+    private int getIntAttr(HTML.Attribute name, int deflt ) {
+    	AttributeSet attr = fElement.getAttributes();
+    	if( attr.isDefined(name) ) {		// does not check parents!
+    	    int i;
+ 	    String val = (String) attr.getAttribute(name);
+ 	    if( val == null )
+ 	    	i = deflt;
+ 	    else
+ 	    	try{
+ 	            i = Math.max(0, Integer.parseInt(val));
+ 	    	}catch( NumberFormatException x ) {
+ 	    	    i = deflt;
+ 	    	}
+	    return i;
+	} else
+	    return deflt;
+    }
+    
+
+    /**
+     * Establishes the parent view for this view.
+     * Seize this moment to cache the AWT Container I'm in.
+     */
+    public void setParent(View parent) {
+	super.setParent(parent);
+	fContainer = parent!=null ?getContainer() :null;
+	if( parent==null && fComponent!=null ) {
+	    fComponent.getParent().remove(fComponent);
+	    fComponent = null;
+	}
+    }
+
+    /** My attributes may have changed. */
+    public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) {
+if(DEBUG) System.out.println("ImageView: changedUpdate begin...");
+    	super.changedUpdate(e,a,f);
+    	float align = getVerticalAlignment();
+    	
+    	int height = fHeight;
+    	int width  = fWidth;
+    	
+    	initialize(getElement());
+    	
+    	boolean hChanged = fHeight!=height;
+    	boolean wChanged = fWidth!=width;
+    	if( hChanged || wChanged || getVerticalAlignment()!=align ) {
+    	    if(DEBUG) System.out.println("ImageView: calling preferenceChanged");
+    	    getParent().preferenceChanged(this,hChanged,wChanged);
+    	}
+if(DEBUG) System.out.println("ImageView: changedUpdate end; valign="+getVerticalAlignment());
+    }
+
+
+    // --- Painting --------------------------------------------------------
+
+    /**
+     * Paints the image.
+     *
+     * @param g the rendering surface to use
+     * @param a the allocated region to render into
+     * @see View#paint
+     */
+    public void paint(Graphics g, Shape a) {
+	Color oldColor = g.getColor();
+	fBounds = a.getBounds();
+        int border = getBorder();
+	int x = fBounds.x + border + getSpace(X_AXIS);
+	int y = fBounds.y + border + getSpace(Y_AXIS);
+	int width = fWidth;
+	int height = fHeight;
+	int sel = getSelectionState();
+	
+	// Make sure my Component is in the right place:
+/*
+	if( fComponent == null ) {
+	    fComponent = new Component() { };
+	    fComponent.addMouseListener(this);
+	    fComponent.addMouseMotionListener(this);
+	    fComponent.setCursor(Cursor.getDefaultCursor());	// use arrow cursor
+	    fContainer.add(fComponent);
+	}
+	fComponent.setBounds(x,y,width,height);
+	*/
+	// If no pixels yet, draw gray outline and icon:
+	if( ! hasPixels(this) ) {
+	    g.setColor(Color.lightGray);
+	    g.drawRect(x,y,width-1,height-1);
+	    g.setColor(oldColor);
+	    loadIcons();
+	    Icon icon = fImage==null ?sMissingImageIcon :sPendingImageIcon;
+	    if( icon != null )
+	        icon.paintIcon(getContainer(), g, x, y);
+	}
+		    
+	// Draw image:
+	if( fImage != null ) {
+	    g.drawImage(fImage,x, y,width,height,this);
+	    // Use the following instead of g.drawImage when
+	    // BufferedImageGraphics2D.setXORMode is fixed (4158822).
+
+	    //  Use Xor mode when selected/highlighted.
+	    //! Could darken image instead, but it would be more expensive.
+/*
+	    if( sel > 0 )
+	    	g.setXORMode(Color.white);
+	    g.drawImage(fImage,x, y,
+	    		width,height,this);
+	    if( sel > 0 )
+	        g.setPaintMode();
+*/
+	}
+	
+	// If selected exactly, we need a black border & grow-box:
+	Color bc = getBorderColor();
+	if( sel == 2 ) {
+	    // Make sure there's room for a border:
+	    int delta = 2-border;
+	    if( delta > 0 ) {
+	    	x += delta;
+	    	y += delta;
+	    	width -= delta<<1;
+	    	height -= delta<<1;
+	    	border = 2;
+	    }
+	    bc = null;
+	    g.setColor(Color.black);
+	    // Draw grow box:
+	    g.fillRect(x+width-5,y+height-5,5,5);
+	}
+
+	// Draw border:
+	if( border > 0 ) {
+	    if( bc != null ) g.setColor(bc);
+	    // Draw a thick rectangle:
+	    for( int i=1; i<=border; i++ )
+	        g.drawRect(x-i, y-i, width-1+i+i, height-1+i+i);
+	    g.setColor(oldColor);
+	}
+    }
+
+    /** Request that this view be repainted.
+        Assumes the view is still at its last-drawn location. */
+    protected void repaint( long delay ) {
+    	if( fContainer != null && fBounds!=null ) {
+	    fContainer.repaint(delay,
+	   	      fBounds.x,fBounds.y,fBounds.width,fBounds.height);
+    	}
+    }
+    
+    /** Determines whether the image is selected, and if it's the only thing selected.
+    	@return  0 if not selected, 1 if selected, 2 if exclusively selected.
+    		 "Exclusive" selection is only returned when editable. */
+    protected int getSelectionState( ) {
+    	int p0 = fElement.getStartOffset();
+    	int p1 = fElement.getEndOffset();
+	if (fContainer instanceof JTextComponent) {
+	    JTextComponent textComp = (JTextComponent)fContainer;
+	    int start = textComp.getSelectionStart();
+	    int end = textComp.getSelectionEnd();
+	    if( start<=p0 && end>=p1 ) {
+		if( start==p0 && end==p1 && isEditable() )
+		    return 2;
+		else
+		    return 1;
+	    }
+	}
+    	return 0;
+    }
+    
+    protected boolean isEditable( ) {
+    	return fContainer instanceof JEditorPane
+    	    && ((JEditorPane)fContainer).isEditable();
+    }
+    
+    /** Returns the text editor's highlight color. */
+    protected Color getHighlightColor( ) {
+    	JTextComponent textComp = (JTextComponent)fContainer;
+    	return textComp.getSelectionColor();
+    }
+
+    // --- Progressive display ---------------------------------------------
+    
+    // This can come on any thread. If we are in the process of reloading
+    // the image and determining our state (loading == true) we don't fire
+    // preference changed, or repaint, we just reset the fWidth/fHeight as
+    // necessary and return. This is ok as we know when loading finishes
+    // it will pick up the new height/width, if necessary.
+    public boolean imageUpdate( Image img, int flags, int x, int y,
+    				int width, int height ) {
+    	if( fImage==null || fImage != img )
+    	    return false;
+    	    
+    	// Bail out if there was an error:
+        if( (flags & (ABORT|ERROR)) != 0 ) {
+            fImage = null;
+            repaint(0);
+            return false;
+        }
+        
+        // Resize image if necessary:
+	short changed = 0;
+        if( (flags & ImageObserver.HEIGHT) != 0 )
+            if( ! getElement().getAttributes().isDefined(HTML.Attribute.HEIGHT) ) {
+		changed |= 1;
+            }
+        if( (flags & ImageObserver.WIDTH) != 0 )
+            if( ! getElement().getAttributes().isDefined(HTML.Attribute.WIDTH) ) {
+		changed |= 2;
+            }
+	synchronized(this) {
+	    if ((changed & 1) == 1) {
+		fWidth = width;
+	    }
+	    if ((changed & 2) == 2) {
+		fHeight = height;
+	    }
+	    if (loading) {
+		// No need to resize or repaint, still in the process of
+		// loading.
+		return true;
+	    }
+	}
+        if( changed != 0 ) {
+            // May need to resize myself, asynchronously:
+            if( DEBUG ) System.out.println("ImageView: resized to "+fWidth+"x"+fHeight);
+	    
+	    Document doc = getDocument();
+	    try {
+	      if (doc instanceof AbstractDocument) {
+		((AbstractDocument)doc).readLock();
+	      }
+	      preferenceChanged(this,true,true);
+	    } finally {
+	      if (doc instanceof AbstractDocument) {
+		((AbstractDocument)doc).readUnlock();
+	      }
+	    }			
+	      
+	    return true;
+        }
+	
+	// Repaint when done or when new pixels arrive:
+	if( (flags & (FRAMEBITS|ALLBITS)) != 0 )
+	    repaint(0);
+	else if( (flags & SOMEBITS) != 0 )
+	    if( sIsInc )
+	        repaint(sIncRate);
+        
+        return ((flags & ALLBITS) == 0);
+    }
+					  /*        
+    /**
+     * Static properties for incremental drawing.
+     * Swiped from Component.java
+     * @see #imageUpdate
+     */
+    private static boolean sIsInc = true;
+    private static int sIncRate = 100;
+
+    // --- Layout ----------------------------------------------------------
+
+    /**
+     * Determines the preferred span for this view along an
+     * axis.
+     *
+     * @param axis may be either X_AXIS or Y_AXIS
+     * @returns  the span the view would like to be rendered into.
+     *           Typically the view is told to render into the span
+     *           that is returned, although there is no guarantee.  
+     *           The parent may choose to resize or break the view.
+     */
+    public float getPreferredSpan(int axis) {
+//if(DEBUG)System.out.println("ImageView: getPreferredSpan");
+        int extra = 2*(getBorder()+getSpace(axis));
+	switch (axis) {
+	case View.X_AXIS:
+	    return fWidth+extra;
+	case View.Y_AXIS:
+	    return fHeight+extra;
+	default:
+	    throw new IllegalArgumentException("Invalid axis: " + axis);
+	}
+    }
+
+    /**
+     * Determines the desired alignment for this view along an
+     * axis.  This is implemented to give the alignment to the
+     * bottom of the icon along the y axis, and the default
+     * along the x axis.
+     *
+     * @param axis may be either X_AXIS or Y_AXIS
+     * @returns the desired alignment.  This should be a value
+     *   between 0.0 and 1.0 where 0 indicates alignment at the
+     *   origin and 1.0 indicates alignment to the full span
+     *   away from the origin.  An alignment of 0.5 would be the
+     *   center of the view.
+     */
+    public float getAlignment(int axis) {
+	switch (axis) {
+	case View.Y_AXIS:
+	    return getVerticalAlignment();
+	default:
+	    return super.getAlignment(axis);
+	}
+    }
+
+    /**
+     * Provides a mapping from the document model coordinate space
+     * to the coordinate space of the view mapped to it.
+     *
+     * @param pos the position to convert
+     * @param a the allocated region to render into
+     * @return the bounding box of the given position
+     * @exception BadLocationException  if the given position does not represent a
+     *   valid location in the associated document
+     * @see View#modelToView
+     */
+    public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException {
+	int p0 = getStartOffset();
+	int p1 = getEndOffset();
+	if ((pos >= p0) && (pos <= p1)) {
+	    Rectangle r = a.getBounds();
+	    if (pos == p1) {
+		r.x += r.width;
+	    }
+	    r.width = 0;
+	    return r;
+	}
+	return null;
+    }
+
+    /**
+     * Provides a mapping from the view coordinate space to the logical
+     * coordinate space of the model.
+     *
+     * @param x the X coordinate
+     * @param y the Y coordinate
+     * @param a the allocated region to render into
+     * @return the location within the model that best represents the
+     *  given point of view
+     * @see View#viewToModel
+     */
+    public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) {
+	Rectangle alloc = (Rectangle) a;
+	if (x < alloc.x + alloc.width) {
+	    bias[0] = Position.Bias.Forward;
+	    return getStartOffset();
+	}
+	bias[0] = Position.Bias.Backward;
+	return getEndOffset();
+    }
+
+    /**
+     * Set the size of the view. (Ignored.)
+     *
+     * @param width the width
+     * @param height the height
+     */
+    public void setSize(float width, float height) {
+    	// Ignore this -- image size is determined by the tag attrs and
+    	// the image itself, not the surrounding layout!
+    }
+    
+    /** Change the size of this image. This alters the HEIGHT and WIDTH
+    	attributes of the Element and causes a re-layout. */
+    protected void resize( int width, int height ) {
+    	if( width==fWidth && height==fHeight )
+    	    return;
+    	
+    	fWidth = width;
+    	fHeight= height;
+    	
+    	// Replace attributes in document:
+	MutableAttributeSet attr = new SimpleAttributeSet();
+	attr.addAttribute(HTML.Attribute.WIDTH ,Integer.toString(width));
+	attr.addAttribute(HTML.Attribute.HEIGHT,Integer.toString(height));
+	((StyledDocument)getDocument()).setCharacterAttributes(
+			fElement.getStartOffset(),
+			fElement.getEndOffset(),
+			attr, false);
+    }
+    
+    // --- Mouse event handling --------------------------------------------
+    
+    /** Select or grow image when clicked. */
+    public void mousePressed(MouseEvent e){
+    	Dimension size = fComponent.getSize();
+    	if( e.getX() >= size.width-7 && e.getY() >= size.height-7
+    			&& getSelectionState()==2 ) {
+    	    // Click in selected grow-box:
+    	    if(DEBUG)System.out.println("ImageView: grow!!! Size="+fWidth+"x"+fHeight);
+    	    Point loc = fComponent.getLocationOnScreen();
+    	    fGrowBase = new Point(loc.x+e.getX() - fWidth,
+    	    			  loc.y+e.getY() - fHeight);
+    	    fGrowProportionally = e.isShiftDown();
+    	} else {
+    	    // Else select image:
+    	    fGrowBase = null;
+    	    JTextComponent comp = (JTextComponent)fContainer;
+    	    int start = fElement.getStartOffset();
+    	    int end = fElement.getEndOffset();
+    	    int mark = comp.getCaret().getMark();
+    	    int dot  = comp.getCaret().getDot();
+    	    if( e.isShiftDown() ) {
+    	    	// extend selection if shift key down:
+    	    	if( mark <= start )
+    	    	    comp.moveCaretPosition(end);
+    	    	else
+    	    	    comp.moveCaretPosition(start);
+    	    } else {
+    	    	// just select image, without shift:
+    	    	if( mark!=start )
+    	            comp.setCaretPosition(start);
+    	        if( dot!=end )
+    	            comp.moveCaretPosition(end);
+    	    }
+    	}
+    }
+    
+    /** Resize image if initial click was in grow-box: */
+    public void mouseDragged(MouseEvent e ) {
+    	if( fGrowBase != null ) {
+    	    Point loc = fComponent.getLocationOnScreen();
+    	    int width = Math.max(2, loc.x+e.getX() - fGrowBase.x);
+    	    int height= Math.max(2, loc.y+e.getY() - fGrowBase.y);
+    	    
+    	    if( e.isShiftDown() && fImage!=null ) {
+    	    	// Make sure size is proportional to actual image size:
+    	    	float imgWidth = fImage.getWidth(this);
+    	    	float imgHeight = fImage.getHeight(this);
+    	    	if( imgWidth>0 && imgHeight>0 ) {
+    	    	    float prop = imgHeight / imgWidth;
+    	    	    float pwidth = height / prop;
+    	    	    float pheight= width * prop;
+    	    	    if( pwidth > width )
+    	    	        width = (int) pwidth;
+    	    	    else
+    	    	        height = (int) pheight;
+    	    	}
+    	    }
+    	    
+    	    resize(width,height);
+    	}
+    }
+
+    public void mouseReleased(MouseEvent e){
+    	fGrowBase = null;
+    	//! Should post some command to make the action undo-able
+    }
+
+    /** On double-click, open image properties dialog. */
+    public void mouseClicked(MouseEvent e){
+    	if( e.getClickCount() == 2 ) {
+    	    //$ IMPLEMENT
+    	}
+    }
+
+    public void mouseEntered(MouseEvent e){
+    }
+    public void mouseMoved(MouseEvent e ) {
+    }
+    public void mouseExited(MouseEvent e){
+    }
+    
+    // --- Static icon accessors -------------------------------------------
+
+    private Icon makeIcon(final String gifFile) throws IOException {
+        /* Copy resource into a byte array.  This is
+         * necessary because several browsers consider
+         * Class.getResource a security risk because it
+         * can be used to load additional classes.
+         * Class.getResourceAsStream just returns raw
+         * bytes, which we can convert to an image.
+         */
+	InputStream resource = ImageView.class.getResourceAsStream(gifFile);
+
+        if (resource == null) {
+            System.err.println(ImageView.class.getName() + "/" + 
+                               gifFile + " not found.");
+            return null; 
+        }
+        BufferedInputStream in = 
+            new BufferedInputStream(resource);
+        ByteArrayOutputStream out = 
+            new ByteArrayOutputStream(1024);
+        byte[] buffer = new byte[1024];
+        int n;
+        while ((n = in.read(buffer)) > 0) {
+            out.write(buffer, 0, n);
+        }
+        in.close();
+        out.flush();
+
+        buffer = out.toByteArray();
+        if (buffer.length == 0) {
+            System.err.println("warning: " + gifFile + 
+                               " is zero-length");
+            return null;
+        }
+        return new ImageIcon(buffer);
+    }
+
+    private void loadIcons( ) {
+        try{
+            if( sPendingImageIcon == null )
+            	sPendingImageIcon = makeIcon(PENDING_IMAGE_SRC);
+            if( sMissingImageIcon == null )
+            	sMissingImageIcon = makeIcon(MISSING_IMAGE_SRC);
+	}catch( Exception x ) {
+	    System.err.println("ImageView: Couldn't load image icons");
+	}
+    }
+    
+    protected StyleSheet getStyleSheet() {
+	HTMLDocument doc = (HTMLDocument) getDocument();
+	return doc.getStyleSheet();
+    }
+
+    // --- member variables ------------------------------------------------
+
+    private AttributeSet attr;
+    private Element   fElement;
+    private Image     fImage;
+    private int       fHeight,fWidth;
+    private Container fContainer;
+    private Rectangle fBounds;
+    private Component fComponent;
+    private Point     fGrowBase;        // base of drag while growing image
+    private boolean   fGrowProportionally;	// should grow be proportional?
+    /** Set to true, while the receiver is locked, to indicate the reciever
+     * is loading the image. This is used in imageUpdate. */
+    private boolean   loading;
+    
+    // --- constants and static stuff --------------------------------
+
+    private static Icon sPendingImageIcon,
+    			sMissingImageIcon;
+    private static final String
+        PENDING_IMAGE_SRC = "icons/image-delayed.gif",  // both stolen from HotJava
+        MISSING_IMAGE_SRC = "icons/image-failed.gif";
+    
+    private static final boolean DEBUG = false;
+    
+    //$ move this someplace public
+    static final String IMAGE_CACHE_PROPERTY = "imageCache";
+    
+    // Height/width to use before we know the real size:
+    private static final int
+        DEFAULT_WIDTH = 32,
+        DEFAULT_HEIGHT= 32,
+    // Default value of BORDER param:      //? possibly move into stylesheet?
+        DEFAULT_BORDER=  2;
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/ImageView.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteControlPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteControlPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteControlPanel.java	(revision 30230)
@@ -0,0 +1,1249 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.25.2.5  2007-08-06 16:54:34  fjp
+ * Versión en desarrollo con velocidades y un esbozo de áreas de influencia
+ *
+ * Revision 1.25.2.4  2007/06/14 10:02:25  fjp
+ * Pliego de redes a publicar SIN el cuadro de diálogo setVelocities (bueno, con , pero invisible)
+ *
+ * Revision 1.25.2.3  2007/05/24 11:33:36  fjp
+ * Para que puedas añadir los puntos que estén cerca de la red. Los que no lo estén, lanzan un error informando de qué punto no está cerca de la red.
+ *
+ * Revision 1.25.2.2  2007/05/15 07:08:21  fjp
+ * Para calcular matrices de distancias
+ *
+ * Revision 1.25  2006/11/14 18:32:32  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.24  2006/11/14 16:12:01  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.23  2006/11/14 09:23:30  fjp
+ * cargar paradas desde cualquier tema de puntos
+ *
+ * Revision 1.22  2006/11/10 13:57:04  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.21  2006/11/09 21:08:32  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.20  2006/11/09 12:51:12  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.19  2006/11/09 11:00:43  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.18  2006/11/09 10:59:53  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.17  2006/11/09 10:27:50  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.16  2006/11/09 10:24:11  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.15  2006/11/09 09:16:35  fjp
+ * Ya va!!
+ *
+ * Revision 1.14  2006/11/08 20:14:52  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.13  2006/11/08 19:32:22  azabala
+ * saveroute and saveflags modifications
+ *
+ * Revision 1.12  2006/11/08 18:16:28  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.11  2006/11/08 16:48:19  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.10  2006/11/08 16:00:39  fjp
+ * Por terminar el enlace flags-cuadro de diálogo
+ *
+ * Revision 1.9  2006/11/08 13:18:46  fjp
+ * Por terminar el enlace flags-cuadro de diálogo
+ *
+ * Revision 1.8  2006/11/07 19:49:38  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.7  2006/11/06 13:13:53  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/11/06 10:29:32  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/11/03 19:39:29  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/10/27 18:26:22  azabala
+ * added implementation of load stages method
+ *
+ * Revision 1.3  2006/10/27 12:41:09  jaume
+ * GUI
+ *
+ * Revision 1.2  2006/10/26 16:31:21  jaume
+ * GUI
+ *
+ * Revision 1.1  2006/10/25 10:50:41  jaume
+ * movement of classes and gui stuff
+ *
+ * Revision 1.4  2006/10/24 08:04:41  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/10/23 16:00:20  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/10/23 08:05:39  jaume
+ * GUI
+ *
+ * Revision 1.1  2006/10/20 12:02:50  jaume
+ * GUI
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Rectangle2D;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
+
+import org.cresques.cts.IProjection;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+import org.gvsig.gui.beans.swing.JBlank;
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.SingletonWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.ViewPort;
+import com.iver.cit.gvsig.fmap.core.DefaultFeature;
+import com.iver.cit.gvsig.fmap.core.FPoint2D;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ShapeFactory;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.edition.EditionException;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.LayerEvent;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.LayerListenerAdapter;
+import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
+import com.iver.cit.gvsig.graph.GraphException;
+import com.iver.cit.gvsig.graph.NetworkUtils;
+import com.iver.cit.gvsig.graph.core.GvEdge;
+import com.iver.cit.gvsig.graph.core.GvFlag;
+import com.iver.cit.gvsig.graph.core.IFlagListener;
+import com.iver.cit.gvsig.graph.core.Network;
+import com.iver.cit.gvsig.graph.solvers.FlagsMemoryDriver;
+import com.iver.cit.gvsig.graph.solvers.Route;
+import com.iver.cit.gvsig.graph.solvers.RouteMemoryDriver;
+import com.iver.cit.gvsig.graph.tools.FlagListener;
+import com.iver.cit.gvsig.project.documents.gui.FOpenDialog;
+import com.iver.cit.gvsig.project.documents.view.gui.IView;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.util.GvSession;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.MultiPoint;
+import com.vividsolutions.jts.geom.Point;
+
+public class RouteControlPanel extends JPanel implements SingletonWindow,
+		ActionListener, IFlagListener {
+	WindowInfo wi;
+
+	private JPanel westPanel = null;
+
+	private JScrollPane scrlStages = null;
+
+	private JTable tblStages = null;
+
+	private GridBagLayoutPanel eastPanel = null;
+
+	private MyTableModel tableModel = new MyTableModel(); // @jve:decl-index=0:visual-constraint=""
+
+	private JButton btnLoadStage = null;
+
+	private JButton btnSaveStage = null;
+	
+	private JButton btnSetVelocities = null;
+
+	private Network network;
+
+	private ArrayList routeFlags;
+
+	private JLabel lblCost;
+
+	private JLabel lblFlagAmout;
+
+	private JButton btnPullDownStage;
+
+	private JButton btnPushUpStage;
+
+	private JButton btnRemoveStage;
+
+	private JPanel southPanel;
+
+	private final String[] colName = new String[] {
+			PluginServices.getText(this, "enable"),
+			PluginServices.getText(this, "stage"),
+			PluginServices.getText(this, "cost"), };
+
+	private JButton btnCenterOnFlag;
+
+	private JButton btnSaveRoute;
+
+	private MapControl mapCtrl;
+
+	private class MyTableModel extends AbstractTableModel {
+		public int getColumnCount() {
+			return 3;
+		}
+
+		public int getRowCount() {
+			return _getFlags().size();
+		}
+
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			GvFlag flag = (GvFlag) _getFlags().get(rowIndex);
+			switch (columnIndex) {
+			case 0:
+				return new Boolean(flag.isEnabled());
+			case 1:
+				return flag.getDescription();
+			case 2:
+				return new Double(flag.getCost());
+			}
+
+			return null;
+		}
+
+		public Class getColumnClass(int columnIndex) {
+			switch (columnIndex)
+			{
+			case 0:
+				return Boolean.class;
+			case 1:
+				return String.class;
+			case 2:
+				return Double.class;
+
+			}
+			return super.getColumnClass(columnIndex);
+		}
+
+		public String getColumnName(int column) {
+			return colName[column];
+		}
+
+		public boolean isCellEditable(int rowIndex, int columnIndex) {
+			if (columnIndex == 2)
+				return false;
+			return true;
+
+		}
+
+		public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+			GvFlag flag = (GvFlag) _getFlags().get(rowIndex);
+			switch (columnIndex)
+			{
+			case 0:
+				Boolean bAux = (Boolean) aValue;
+				flag.setEnabled(bAux.booleanValue());
+				PluginServices.getMainFrame().enableControls();
+				return;
+			case 1:
+				String strAux = (String) aValue;
+				flag.setDescription(strAux);
+				return;
+
+//			case 2: // No es editable
+//				Double dblAux = (Double) aValue;
+//				flag.setCost(dblAux.doubleValue());
+//				return;
+
+			}
+
+		}
+
+	}
+
+	/**
+	 * This method initializes
+	 *
+	 */
+	public RouteControlPanel(Network network) {
+		super();
+		this.network = network;
+//		GvFlag[] flags = network.getFlags();
+//		List vflags = _getFlags();
+//		for (int i = 0; i < flags.length; i++) {
+//			vflags.add(flags[i]);
+//		}
+		initialize();
+	}
+
+	/**
+	 * Method to remove all flags (use
+	 * */
+	public void refresh(){
+//		GvFlag[] flags = network.getFlags();
+//		List vflags = _getFlags();
+//		List tempFlags = Arrays.asList(flags);
+//		vflags.addAll(tempFlags);
+		lblFlagAmout.setText(String.valueOf(_getFlags()
+				.size()));
+		updateTotalCost();
+		ListSelectionModel rowSM = tblStages.getSelectionModel();
+		if (_getFlags().size() == 0)
+			getBtnCenterOnFlag().setEnabled(false);
+		else
+			getBtnCenterOnFlag().setEnabled(!rowSM.isSelectionEmpty());
+		getTblStages().revalidate();
+		System.out.println("Actualizo tabla");
+
+	}
+	private void processLayer(FLayer layer) {
+		if (layer.isActive()) {
+			if (layer instanceof FLyrVect) {
+				Network net = (Network) layer
+						.getProperty("network");
+				if (net != null) {
+					network = net;
+					network.addFlagListener(this);
+					refresh();
+				}// if
+			}// if
+		}// if
+
+	}
+
+	public void setMapControl(MapControl mapCtrl, Network net) {
+		if (mapCtrl != null) {
+			this.mapCtrl = mapCtrl;
+			LayerListenerAdapter listener = new LayerListenerAdapter() {
+				public void activationChanged(LayerEvent e) {
+					processLayer(e.getSource());
+				}
+			};
+			mapCtrl.getMapContext().getLayers().addLayerListener(listener);
+			mapCtrl.getMapContext().getLayers().addLayerCollectionListener(
+					listener);
+			if (net != null) {
+				network = net;
+				network.addFlagListener(this);
+			}
+		}
+	}
+
+	public RouteControlPanel() {
+		super();
+		initialize();
+	}
+
+	public void setCostUnits(String unitsName) {
+		colName[2] = unitsName;
+		getTblStages().repaint();
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 */
+	private void initialize() {
+		BorderLayout borderLayout = new BorderLayout();
+		borderLayout.setHgap(10);
+		borderLayout.setVgap(10);
+		JPanel cont = new JPanel(borderLayout);
+//		cont.setPreferredSize(new Dimension(490, 320));
+		this.setPreferredSize(new Dimension(460, 280));
+		cont.add(getWestPanel(), BorderLayout.CENTER);
+		cont.add(getEastPanel(), BorderLayout.EAST);
+		cont.add(getSouthPanel(), BorderLayout.SOUTH);
+		this.setLayout(new FlowLayout(FlowLayout.LEADING, 10, 10));
+		this.add(cont);
+		updateFlags();
+	}
+
+	private void updateFlags() {
+		lblFlagAmout.setText(String.valueOf(_getFlags().size()));
+		updateTotalCost();
+		getTblStages().repaint();
+	}
+
+	private JPanel getSouthPanel() {
+		if (southPanel == null) {
+			southPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+			southPanel.add(getBtnRemoveStage());
+			southPanel.add(new JBlank(50, 20));
+			southPanel.add(getBtnPushUpStage());
+			southPanel.add(getBtnPullDownStage());
+			southPanel.add(new JLabel(PluginServices.getText(this,
+					"flag_amount")));
+			lblFlagAmout = new JLabel();
+			lblFlagAmout.setFont(lblFlagAmout.getFont().deriveFont(Font.BOLD));
+			southPanel.add(lblFlagAmout);
+		}
+		return southPanel;
+	}
+
+	public Object getWindowModel() {
+		return this.getClass();
+	}
+
+	public WindowInfo getWindowInfo() {
+		if (wi == null) {
+			wi = new WindowInfo(WindowInfo.MODELESSDIALOG
+				    | WindowInfo.MAXIMIZABLE
+					| WindowInfo.ICONIFIABLE | WindowInfo.PALETTE);
+			wi.setWidth((int) this.getPreferredSize().getWidth());
+			wi.setHeight((int) this.getPreferredSize().getHeight());
+			wi.setTitle(PluginServices.getText(this, "route_control_panel"));
+		}
+		return wi;
+	}
+
+	/**
+	 * This method initializes westPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getWestPanel() {
+		if (westPanel == null) {
+			westPanel = new JPanel(new BorderLayout(5, 5));
+			lblCost = new JLabel();
+			lblCost.setFont(lblCost.getFont().deriveFont(Font.BOLD));
+			GridBagLayoutPanel aux = new GridBagLayoutPanel();
+			aux.addComponent(PluginServices.getText(this, "total_route_cost")
+					+ ":", lblCost);
+			aux.addComponent(getScrlStages());
+
+			westPanel.add(aux);
+		}
+		return westPanel;
+	}
+
+	private JButton getBtnPullDownStage() {
+		if (btnPullDownStage == null) {
+			btnPullDownStage = new JButton(new ImageIcon(this.getClass()
+					.getClassLoader().getResource("images/down-arrow.png")));
+			// btnPullDownStage.setName("btnPullDownStage");
+			btnPullDownStage.addActionListener(this);
+		}
+		return btnPullDownStage;
+	}
+
+	private JButton getBtnPushUpStage() {
+		if (btnPushUpStage == null) {
+			btnPushUpStage = new JButton(new ImageIcon(this.getClass()
+					.getClassLoader().getResource("images/up-arrow.png")));
+			// btnPushUpStage.setName("btnPushUpStage");
+			btnPushUpStage.addActionListener(this);
+		}
+		return btnPushUpStage;
+	}
+
+	private JButton getBtnRemoveStage() {
+		if (btnRemoveStage == null) {
+			btnRemoveStage = new JButton(new ImageIcon(this.getClass()
+					.getClassLoader().getResource("images/delete.png")));
+			// btnRemoveStage.setName("btnRemoveStage");
+			btnRemoveStage.addActionListener(this);
+		}
+		return btnRemoveStage;
+	}
+
+	/**
+	 * This method initializes scrlStages
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getScrlStages() {
+		if (scrlStages == null) {
+			scrlStages = new JScrollPane();
+			scrlStages.setViewportView(getTblStages());
+			scrlStages.setPreferredSize(new Dimension(270, 200));
+		}
+		return scrlStages;
+	}
+
+	/**
+	 * @deprecated
+	 * @param flag
+	 */
+	public void addFlag(GvFlag flag) {
+		_getFlags().add(flag);
+		lblFlagAmout.setText(String.valueOf(_getFlags().size()));
+		updateTotalCost();
+		getTblStages().repaint();
+	}
+
+	private void updateTotalCost() {
+		GvFlag[] flags = getFlags();
+		double cost = 0;
+		for (int i = 0; i < flags.length; i++) {
+			if (!flags[i].isEnabled())
+				continue;
+			if (flags[i].getCost() >= Double.MAX_VALUE)
+			{
+				lblCost.setText(PluginServices.getText(this, "no_se_puede_pasar_por_todas_las_paradas"));
+				return;
+			}
+			if (flags[i].getCost() < 0)
+			{
+				lblCost.setText(PluginServices.getText(this, "solucion_no_valida"));
+				return;
+			}
+				
+			cost += flags[i].getCost();
+		}
+		NumberFormat nf = NumberFormat.getInstance();
+		nf.setMaximumFractionDigits(2);
+		lblCost.setText(nf.format(cost) + getCostUnitName());
+	}
+
+	private String getCostUnitName() {
+		if (colName[2].equals(PluginServices.getText(this, "cost")))
+			return "";
+		return colName[2];
+	}
+
+	public void removeFlag(GvFlag flag) {
+		removeFlag(_getFlags().indexOf(flag));
+	}
+
+	public void removeFlag(int index) {
+		_getFlags().remove(index);
+		lblFlagAmout.setText(String.valueOf(_getFlags().size()));
+		getTblStages().repaint();
+	}
+
+	/**
+	 * This method initializes tblStages
+	 *
+	 * @return javax.swing.JTable
+	 */
+	private JTable getTblStages() {
+		if (tblStages == null) {
+			tblStages = new JTable();
+			tblStages
+					.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
+			tblStages.setModel(getTableModel());
+			TableColumnModel cm = tblStages.getColumnModel();
+
+			int tablePreferredWidth = (int) tblStages.getPreferredSize()
+					.getWidth();
+			int colSize = tblStages.getFontMetrics(tblStages.getFont())
+					.stringWidth(tblStages.getModel().getColumnName(0)) * 2;
+			cm.getColumn(0).setPreferredWidth((int) (colSize));
+			cm.getColumn(0).setMinWidth((int) (colSize));
+			cm.getColumn(0).setMaxWidth((int) (colSize));
+			tablePreferredWidth -= colSize;
+			cm.getColumn(1)
+					.setPreferredWidth((int) (tablePreferredWidth * 0.7));
+			cm.getColumn(2)
+					.setPreferredWidth((int) (tablePreferredWidth * 0.3));
+
+			// Ask to be notified of selection changes.
+			ListSelectionModel rowSM = tblStages.getSelectionModel();
+			rowSM.addListSelectionListener(new ListSelectionListener() {
+			    public void valueChanged(ListSelectionEvent e) {
+			        //Ignore extra messages.
+			        if (e.getValueIsAdjusting())
+			        	return;
+
+			        ListSelectionModel lsm =
+			            (ListSelectionModel)e.getSource();
+		        	getBtnCenterOnFlag().setEnabled(!lsm.isSelectionEmpty());
+			    }
+			});
+			
+			tblStages.getModel().addTableModelListener(new TableModelListener() {
+
+				public void tableChanged(TableModelEvent e) {
+					System.out.println("Table model changed");
+//					getBtnCenterOnFlag().setEnabled(false);
+				}
+				
+			});
+
+			
+		}
+		return tblStages;
+	}
+
+	protected int getFlagCount() {
+		return _getFlags().size();
+	}
+
+	private List _getFlags() {
+//		if (routeFlags == null) {
+//			routeFlags = new ArrayList();
+//		}
+//		return routeFlags;
+
+		return network.getOriginaFlags();
+	}
+
+	protected boolean isSelected(int row) {
+		return ((GvFlag) _getFlags().get(row)).isEnabled();
+	}
+
+	/**
+	 * This method initializes eastPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getEastPanel() {
+		if (eastPanel == null) {
+			GridLayout layout = new GridLayout();
+			layout.setColumns(1);
+			layout.setVgap(5);
+			JPanel aux = new JPanel();
+			aux.add(getBtnLoadStage());
+			aux.add(getBtnSaveStage());
+			aux.add(getBtnSaveRoute());
+			aux.add(getBtnCenterOnFlag());
+			aux.add(getBtnSetVelocities());
+			layout.setRows(aux.getComponentCount());
+			aux.setLayout(layout);
+			eastPanel = new GridBagLayoutPanel();
+			eastPanel.addComponent(aux);
+		}
+		return eastPanel;
+	}
+
+	private JButton getBtnCenterOnFlag() {
+		if (btnCenterOnFlag == null) {
+			btnCenterOnFlag = new JButton();
+			btnCenterOnFlag.setText(PluginServices.getText(this,
+					"center_on_flag"));
+			btnCenterOnFlag.setEnabled(false);
+			btnCenterOnFlag.addActionListener(this);
+		}
+		return btnCenterOnFlag;
+	}
+
+	private JButton getBtnSetVelocities() {
+		if (btnSetVelocities == null) {
+			btnSetVelocities = new JButton();
+			btnSetVelocities.setText(PluginServices.getText(this,
+					"set_velocities"));
+//			btnSetVelocities.setEnabled(false);
+			
+			// TODO: PONERLO VISIBLE CUANDO SE CORRIJA LO DE ABRIR EL
+			// DIALOGO Y LEER LAS VELOCIDADES QUE HABÍA ANTES.
+			btnSetVelocities.setVisible(true);
+			btnSetVelocities.addActionListener(this);
+		}
+		return btnSetVelocities;
+	}
+
+	private JButton getBtnSaveRoute() {
+		if (btnSaveRoute == null) {
+			btnSaveRoute = new JButton();
+			btnSaveRoute.setText(PluginServices.getText(this, "save_route"));
+			btnSaveRoute.addActionListener(this);
+		}
+		return btnSaveRoute;
+	}
+
+	/**
+	 * This method initializes defaultTableModel
+	 *
+	 * @return javax.swing.table.DefaultTableModel
+	 */
+	private TableModel getTableModel() {
+		return tableModel;
+	}
+
+	/**
+	 * This method initializes btnLoadStage
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnLoadStage() {
+		if (btnLoadStage == null) {
+			btnLoadStage = new JButton();
+			btnLoadStage.setText(PluginServices.getText(this, "load_stages"));
+			btnLoadStage.addActionListener(this);
+		}
+		return btnLoadStage;
+	}
+
+	/**
+	 * This method initializes btnSaveStages
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnSaveStage() {
+		if (btnSaveStage == null) {
+			btnSaveStage = new JButton();
+			btnSaveStage.setText(PluginServices.getText(this, "save_stages"));
+			btnSaveStage.addActionListener(this);
+		}
+		return btnSaveStage;
+	}
+
+	class FormatSelectionPanel extends JPanel implements IWindow {
+
+		JComboBox formats;
+		WindowInfo wi = null;
+
+		public FormatSelectionPanel(String introductoryText) {
+			super(new BorderLayout());
+			String[] formatos = { "SHP", "DXF", "POSTGIS", "GML" };
+			formats = new JComboBox(formatos);
+			GridBagLayoutPanel contentPanel =
+				new GridBagLayoutPanel();
+			contentPanel.addComponent(new JLabel(introductoryText));
+			contentPanel.addComponent(formats);
+			JButton okButton = new JButton(PluginServices.getText(null,
+					"Aceptar"));
+			okButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent arg0) {
+					close();
+				}
+			});
+			contentPanel.addComponent(okButton);
+
+			add(contentPanel);
+		}
+
+		void close() {
+			PluginServices.getMDIManager().closeWindow(this);
+		}
+
+		public String getSelectedFormat() {
+			return (String) formats.getSelectedItem();
+		}
+
+		public WindowInfo getWindowInfo() {
+			if (wi == null) {
+				wi = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.PALETTE);
+				wi.setTitle(PluginServices
+						.getText(null, "Seleccion_de_formato"));// Internacionalizar
+																// esto
+				wi.setWidth(300);
+				wi.setHeight(55);
+			}
+			return wi;
+		}
+
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		Component c = (Component) e.getSource();
+		if (c.equals(getBtnLoadStage())) {
+			loadStages();
+		} else if (c.equals(getBtnSaveStage())) {
+			saveStage();
+		} else if (c.equals(getBtnPushUpStage())) {
+			int[] selected = tblStages.getSelectedRows();
+			if (selected.length == 0 || selected[0] == 0)
+				return;
+			tblStages.clearSelection();
+			for (int i = 0; i < selected.length; i++) {
+				Object aux = _getFlags().get(selected[i] - 1);
+				_getFlags().set(selected[i] - 1, _getFlags().get(selected[i]));
+				_getFlags().set(selected[i], aux);
+				selected[i]--;
+				tblStages.addRowSelectionInterval(selected[i], selected[i]);
+			}
+			invalidateSolution();
+		} else if (c.equals(getBtnPullDownStage())) {
+			// pull down
+			int[] selected = tblStages.getSelectedRows();
+			if (selected.length == 0
+					|| selected[selected.length - 1] >= _getFlags().size() - 1)
+				return;
+
+			// move rows
+			tblStages.clearSelection();
+			for (int i = selected.length - 1; i >= 0; i--) {
+				Object aux = _getFlags().get(selected[i] + 1);
+				_getFlags().set(selected[i] + 1, _getFlags().get(selected[i]));
+				_getFlags().set(selected[i], aux);
+				selected[i]++;
+				tblStages.addRowSelectionInterval(selected[i], selected[i]);
+			}
+			invalidateSolution();
+
+		} else if (c.equals(getBtnRemoveStage())) {
+			removeStage();			
+		} else if (c.equals(getBtnSaveRoute())) {
+			saveRoute();
+		} else if (c.equals(getBtnSetVelocities())) {
+			setVelocities();			
+		} else if (c.equals(getBtnCenterOnFlag())) {
+			// Center on first selected flag.
+			int[] selected = tblStages.getSelectedRows();
+			if (selected.length == 0)
+				return;
+			GvFlag flag = (GvFlag) _getFlags().get(selected[0]);
+			IWindow window = PluginServices.getMDIManager().getActiveWindow();
+			if(! (window instanceof IView))
+				return;
+			IView view = (IView) window;
+			ViewPort vp = view.getMapControl().getViewPort();
+			Rectangle2D extent = vp.getAdjustedExtent();
+			double xNC = flag.getOriginalPoint().getX();
+			double yNC = flag.getOriginalPoint().getY();
+			double width = extent.getWidth();
+			double height = extent.getHeight();
+			
+			Rectangle2D.Double r = new Rectangle2D.Double();
+			
+			r.width = width;
+			r.height = height;
+			r.x = xNC - width/2;
+			r.y = yNC - height/2;
+
+			vp.setExtent(r);
+
+			
+				
+		}
+		repaint();
+	}
+
+	private void setVelocities() {
+		if(network == null){
+			IWindow window = PluginServices.getMDIManager().getActiveWindow();
+			if(! (window instanceof IView))
+				return;
+			IView view = (View) window;
+			MapControl mapControl = view.getMapControl();
+			MapContext map = mapControl.getMapContext();
+			FLayers layers = map.getLayers();
+			SingleLayerIterator it = new SingleLayerIterator(layers);
+			while (it.hasNext() && network == null) {
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				network = (Network) aux.getProperty("network");
+			}
+		}
+		if (network == null)
+			return;
+		
+		ArrayList lstTipoTramo = network.getEdgeTypes();
+		
+		// I try to use a generic multiinputdialog. All this stuff can be extracted
+		// from here and subclass MultiInputDlg
+		Hashtable veloMeters  = network.getVelocities();	
+		ArrayList veloKm = new ArrayList(lstTipoTramo.size());
+		if (veloMeters != null)
+		{			
+			NumberFormat nf = NumberFormat.getInstance();
+			for (int i=0; i<lstTipoTramo.size(); i++)
+			{
+				Object key = lstTipoTramo.get(i);
+				Double velM = (Double) veloMeters.get(key);
+				System.out.println("Vel. Metros / seg = " + velM);
+				if (velM != null)					
+					veloKm.add(i, nf.format(velM.doubleValue() * 3.6));
+				else
+					veloKm.add(i, "0");
+			} // for
+		}
+		else
+		{			
+			for (int i=0; i<lstTipoTramo.size(); i++)
+			{
+				veloKm.add(i, "60");
+			} // for			
+		}
+		try
+		{
+			String msg = PluginServices.getText(this, "msg_set_velocities");
+			MultiInputDlg dlg = new MultiInputDlg(msg, lstTipoTramo, veloKm);
+			String col1 = PluginServices.getText(this, "col_arc_type");
+			String col2 = PluginServices.getText(this, "col_km_per_hour");
+			dlg.setColumnNames(col1, col2);
+			dlg.setModal(true);
+			dlg.setVisible(true);
+			if (dlg.isCanceled())
+				return;
+			
+			veloKm = dlg.getRightValues(); //{120, 110, 90, 80, 70, 60, 50, 40};
+			veloMeters = new Hashtable(veloKm.size());
+			for (int i=0; i<veloKm.size(); i++)
+			{
+				Object key = lstTipoTramo.get(i);
+				veloMeters.put(key, new Double(Double.parseDouble((String) veloKm.get(i)) / 3.6));
+			}
+			
+			network.setVelocities(veloMeters);
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+
+		
+	}
+
+	private void invalidateSolution() {
+		for (int i=0; i < _getFlags().size(); i++)
+		{
+			GvFlag flag = (GvFlag) _getFlags().get(i);
+			flag.setCost(-1.0);
+		}
+		updateTotalCost();
+	}
+
+	private void saveStage(){
+		if(network == null){
+			IWindow window = PluginServices.getMDIManager().getActiveWindow();
+			if(! (window instanceof IView))
+				return;
+			IView view = (View) window;
+			MapControl mapControl = view.getMapControl();
+			MapContext map = mapControl.getMapContext();
+			FLayers layers = map.getLayers();
+			SingleLayerIterator it = new SingleLayerIterator(layers);
+			while (it.hasNext() && network == null) {
+				FLayer aux = it.next();
+				if (!aux.isActive())
+					continue;
+				network = (Network) aux.getProperty("network");
+			}
+		}
+		if (network == null)
+			return;
+
+		List features = new ArrayList();
+		GvFlag[] flags = network.getFlags();
+		for(int i = 0; i < flags.length; i++){
+			GvFlag flag = flags[i];
+			// Solo se guardan los flags habilitados
+			if (!flag.isEnabled())
+				continue;
+			FPoint2D point = new FPoint2D(flag.getOriginalPoint());
+			Value[] values = new Value[6];
+			values[GvFlag.ID_FLAG_INDEX] = ValueFactory.createValue(flag.getIdFlag());
+			values[GvFlag.ID_ARC_INDEX] = ValueFactory.createValue(flag.getIdArc());
+			values[GvFlag.DESCRIPTION_INDEX] = ValueFactory.createValue(flag.getDescription());
+			values[GvFlag.DIREC_INDEX] = ValueFactory.createValue(flag.getDirec());
+			values[GvFlag.PCT_INDEX] = ValueFactory.createValue(flag.getPct());
+			values[GvFlag.COST_INDEX] = ValueFactory.createValue(flag.getCost());
+			IGeometry geo = ShapeFactory.createPoint2D(point);
+			DefaultFeature feature = new DefaultFeature(geo, values, new Integer(flag.getIdFlag()).toString() );
+			features.add(feature);
+		}
+
+		FlagsMemoryDriver driver = new FlagsMemoryDriver(features);
+		IProjection projection = FOpenDialog.getLastProjection();
+		FLyrVect routeLayer = (FLyrVect) LayerFactory.createLayer("Flags",
+				driver, projection);
+
+		FormatSelectionPanel selectionPanel =
+			new FormatSelectionPanel(PluginServices.
+					getText(null,
+				"Seleccione_un_formato_para_guardar_los_flags"));
+		PluginServices.getMDIManager().addWindow(selectionPanel);
+
+		String format = selectionPanel.getSelectedFormat();
+		com.iver.cit.gvsig.ExportTo export = new com.iver.cit.gvsig.ExportTo();
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if(! (window instanceof IView))
+			return;
+		IView view = (View) window;
+		MapControl mapControl = view.getMapControl();
+		MapContext context = mapControl.getMapContext();
+		try {
+			if (format.equalsIgnoreCase("SHP")) {
+				export.saveToShp(context, routeLayer);
+			} else if (format.equalsIgnoreCase("DXF")) {
+				export.saveToDxf(context, routeLayer);
+			} else if (format.equalsIgnoreCase("GML")) {
+				export.saveToGml(context, routeLayer);
+			} else if (format.equalsIgnoreCase("POSTGIS")) {
+				export.saveToPostGIS(context, routeLayer);
+			}
+		} catch (EditionException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (DriverIOException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+
+	}
+	private void saveRoute() {
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if(! (window instanceof IView))
+			return;
+		IView view = (View) window;
+		MapControl mapControl = view.getMapControl();
+		List routes = (List) GvSession.getInstance().get(mapControl, "Route");
+		if(routes == null || routes.size() == 0){
+			JOptionPane.showMessageDialog(this, PluginServices.getText(this, "Ruta_borrada_o_inexistente"),
+					PluginServices.getText(this, "Ruta_no_encontrada"),
+					JOptionPane.ERROR_MESSAGE);
+			return;
+		}	
+		Route lastRoute = (Route) routes.get(routes.size() - 1);
+		RouteMemoryDriver driver = new RouteMemoryDriver(lastRoute.getFeatureList());
+		IProjection projection = FOpenDialog.getLastProjection();
+		FLyrVect routeLayer = (FLyrVect) LayerFactory.createLayer("Route",
+				driver, projection);
+
+		FormatSelectionPanel selectionPanel = new FormatSelectionPanel(PluginServices.getText(null,
+		"Seleccione_un_formato_para_guardar_la_ruta"));
+		PluginServices.getMDIManager().addWindow(selectionPanel);
+
+		String format = selectionPanel.getSelectedFormat();
+		com.iver.cit.gvsig.ExportTo export = new com.iver.cit.gvsig.ExportTo();
+		MapContext context = mapControl.getMapContext();
+		try {
+			if (format.equalsIgnoreCase("SHP")) {
+				export.saveToShp(context, routeLayer);
+			} else if (format.equalsIgnoreCase("DXF")) {
+				export.saveToDxf(context, routeLayer);
+			} else if (format.equalsIgnoreCase("GML")) {
+				export.saveToGml(context, routeLayer);
+			} else if (format.equalsIgnoreCase("POSTGIS")) {
+				export.saveToPostGIS(context, routeLayer);
+			}
+		} catch (EditionException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (DriverIOException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+	}
+
+	/**
+	 * Converts a point layer loaded in the active view's toc in a collection of
+	 * flags of the active network
+	 *
+	 */
+	private void loadStages() {
+
+		IWindow window = PluginServices.getMDIManager().getActiveWindow();
+		if(! (window instanceof IView))
+			return;
+		IView view = (IView) window;
+		MapControl mapControl = view.getMapControl();
+		MapContext map = mapControl.getMapContext();
+		FLayers layers = map.getLayers();
+
+		String title = PluginServices.getText(this,
+				"Seleccionar_capa_con_puntos_de_parada");
+		String introductoryText = PluginServices.getText(this,
+				"Seleccione_una_capa_de_puntos_para_crear_paradas");
+
+		LayerSelectionPanel selectionPanel = new LayerSelectionPanel(layers,
+				title, introductoryText, FLyrVect.class, FShape.POINT);
+		PluginServices.getMDIManager().addWindow(selectionPanel);
+
+		if (!selectionPanel.wasFinishPressed())
+			return;
+		else {
+			FLayer layer = selectionPanel.getLayer();
+			if (layer == null)
+				return;
+			if (!(layer instanceof FLyrVect))
+				return;
+			FLyrVect vectLyr = (FLyrVect) layer;
+
+			try {
+				if (vectLyr.getShapeType() != FShape.POINT)
+					return;
+
+				// TODO
+				// Hay que refinar bastante, para que el usuario elija
+				// con que red y con qué capa lineal quiere trabajar
+				// tal y como está, si hubiese varias se trabajaria
+				// con la primera que devuelva el iterador
+
+				Network net = null;
+				SingleLayerIterator it = new SingleLayerIterator(layers);
+				while (it.hasNext() && net == null) {
+					FLayer aux = it.next();
+					if (!aux.isActive())
+						continue;
+					net = (Network) aux.getProperty("network");
+				}
+				if (net == null)
+					return;
+
+				// Por si queremos añadir paradas a otras ya existentes
+//				_getFlags().clear();
+				
+				GvFlag flag;
+				ReadableVectorial reader = vectLyr.getSource();
+				SelectableDataSource recordset = vectLyr.getRecordset();
+				int numShapes = reader.getShapeCount();
+
+				double realTol = mapCtrl.getViewPort()
+						.toMapDistance(FlagListener.pixelTolerance);
+				reader.start();
+				for (int i = 0; i < numShapes; i++) {
+					Geometry geo = reader.getShape(i).toJTSGeometry();
+					if (!((geo instanceof Point) || (geo instanceof MultiPoint)))
+						continue;
+					
+					
+
+					Coordinate[] coords = geo.getCoordinates();
+					for (int j = 0; j < coords.length; j++) {
+
+						try {
+							flag = net.addFlag(coords[j].x, coords[j].y, realTol);
+							if (flag == null)
+							{
+								// segundo intento:
+								flag = net.addFlag(coords[j].x, coords[j].y, 4*realTol);
+								if (flag == null)
+								{								
+									NullPointerException e = new NullPointerException("Punto " + i + " fuera de la red. Tolerancia=" + realTol);
+									NotificationManager.addError("No se puedo situar el registro " + i + 
+											"Por favor, compruebe que está encima de la red o aumente la toleracina.", e);
+								}
+							}
+							if (flag != null)
+							{
+							// TODO: Create use a IFlagListener to do this
+							// inside flagsChanged. The best solution is
+							// to put all the code in RouteControlPanel
+								NetworkUtils.addGraphicFlag(mapControl, flag);
+							}
+						} catch (GraphException e) {
+							e.printStackTrace();
+							NotificationManager.addError("No se puedo situar el registro " + i + 
+									"Por favor, compruebe que está encima de la red.", e);
+						}
+
+					} // for j
+				} // for i
+				reader.stop();
+				mapControl.drawGraphics();
+				PluginServices.getMainFrame().enableControls();
+
+			} catch (DriverException e1) {
+				return;
+			} catch (DriverIOException e2) {
+				return;
+			}
+		}
+	}
+
+	/**
+	 * Removes the selected flags in the component's table from: -the graphic
+	 * layer of the active view -the active network -the own table
+	 *
+	 */
+	private void removeStage() {
+		int[] selected = tblStages.getSelectedRows();
+
+		for (int i = selected.length - 1; i >= 0; i--) {
+			try {
+				// removeFlag(selected[i]);
+				if (network != null) {
+					final GvFlag flag = (GvFlag) _getFlags().get(selected[i]);
+					NetworkUtils.clearFlagFromGraphics(mapCtrl, flag);
+					network.removeFlag(flag);
+					mapCtrl.repaint();
+				}
+			} catch (IndexOutOfBoundsException iobEx) {
+			}
+
+		}// for
+		tblStages.clearSelection();
+		invalidateSolution();
+		mapCtrl.drawMap(false);
+	}
+
+	public GvFlag[] getFlags() {
+		return (GvFlag[]) _getFlags().toArray(new GvFlag[0]);
+	}
+
+	public void flagsChanged(int reason) {
+		refresh();
+		mapCtrl.drawGraphics();
+
+	}
+} // @jve:decl-index=0:visual-constraint="17,9"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/RouteControlPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage0.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage0.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage0.java	(revision 30230)
@@ -0,0 +1,188 @@
+/*
+ * Created on 09-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.9  2006-12-04 17:13:39  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.8  2006/11/13 20:41:08  azabala
+ * *** empty log message ***
+ *
+ * Revision 1.7  2006/11/09 21:08:32  azabala
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JEditorPane;
+import javax.swing.JRadioButton;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.graph.gui.HTMLEditorKit;
+
+/**
+ * First page of the wizard.
+ * It prevents user of pseudonodes in a linear layer, and offers
+ * them to launch clean geoprocess to remove pseudonodes.
+ * 
+ * Also, it offers users to work with a snap tolerance in node definition.
+ * 
+ * @author alzabord
+ *
+ */
+public class NetPage0 extends JWizardPanel  {
+	private NetWizard owner;
+	
+	JRadioButton originalLayerBtn;
+	JRadioButton cleanedLayerBtn;
+	JRadioButton originalCoordinatesBtn;
+	JRadioButton snappedCoordinatesBtn;
+	JSpinner snapTolerance;
+	
+	NetPage0(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+		initialize();
+	}
+	
+	
+	public boolean cleanOriginalLayer(){
+		return cleanedLayerBtn.isSelected();
+	}
+	
+	public boolean applySnapTolerance(){
+		return snappedCoordinatesBtn.isSelected();
+	}
+	
+	public double getSnapTolerance(){
+		if(applySnapTolerance())
+			return ((Number) snapTolerance.getValue()).doubleValue();
+		else
+			return 0d;
+	}
+	
+	
+	 public void next() {
+        super.next();
+        owner.setCleanOriginalLayer(cleanOriginalLayer());
+        boolean applySnap = applySnapTolerance();
+        if(applySnap){
+        	owner.setSnapTolerance(getSnapTolerance());
+        }
+	 	owner.setApplySnapTolerance(applySnap);  
+    }
+	
+
+	private void initialize() {
+		// this.setSize(new java.awt.Dimension(319,234));
+		GridBagLayoutPanel contentPane = new GridBagLayoutPanel();
+		
+		JEditorPane htmlPanel = new JEditorPane();
+		htmlPanel.setEditable(false);
+		htmlPanel.setEditorKit(new HTMLEditorKit());
+		String layerName = owner.getLayer().getName();
+		String htmlText = "<p><font face='Arial, Helvetica, sans-serif'>Se va a construir una red para la capa de líneas " + 
+		layerName +
+		" .<br> La presencia de pseudonodos puede originar <br>resultados no deseados. " +
+		"<img src=\"images/lmust_not_dangle.gif\">" +
+		"<br> Por favor, marque lo que desea hacer: </font></p>";
+		htmlPanel.setText(htmlText);
+		contentPane.addComponent(htmlPanel);
+		
+		
+		contentPane.addBlank();
+		contentPane.addBlank();
+		contentPane.addBlank();
+		
+		originalLayerBtn = new JRadioButton(PluginServices.getText(this, "Calcular_la_red_sobre_la_capa_original"));
+		originalLayerBtn.setSelected(true);
+		
+		cleanedLayerBtn = new JRadioButton(PluginServices.getText(this, "Aplicar_un_CLEAN_sobre_la_capa_original"));
+		
+		ButtonGroup cleanGroup = new ButtonGroup();
+		cleanGroup.add(originalLayerBtn);
+		cleanGroup.add(cleanedLayerBtn);
+		
+		contentPane.addComponent(originalLayerBtn);
+		contentPane.addComponent(cleanedLayerBtn);
+		
+		contentPane.addBlank();
+		contentPane.addBlank();
+		contentPane.addBlank();
+		
+		originalCoordinatesBtn = new JRadioButton(PluginServices.getText(this, "Trabajar_con_las_coordenadas_originales"));
+		originalCoordinatesBtn.setSelected(true);
+		
+		snappedCoordinatesBtn = new JRadioButton(PluginServices.getText(this, "Aplicar_tolerancia_de_snap"));
+		SpinnerNumberModel spinnerModel =
+			new SpinnerNumberModel(0.01, 0d, 100d, 0.01 );
+		snapTolerance = new JSpinner(spinnerModel);
+//		 Disable keyboard edits in the spinner
+//		JFormattedTextField tf = ((JSpinner.DefaultEditor) snapTolerance
+//				.getEditor()).getTextField();
+//		tf.setEditable(false);
+//		tf.setBackground(Color.white);
+		               
+		ButtonGroup snapGroup = new ButtonGroup();
+		snapGroup.add(originalCoordinatesBtn);
+		snapGroup.add(snappedCoordinatesBtn);
+		
+		contentPane.addComponent(originalCoordinatesBtn);
+		contentPane.addComponent(snappedCoordinatesBtn, snapTolerance);
+		
+		
+		this.add(contentPane);
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage0.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage1.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage1.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage1.java	(revision 30230)
@@ -0,0 +1,225 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.5  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/20 08:44:55  fjp
+* borrar tramos amarillos, seleccionar solo campos numéricos y situar las barreras encima del tramo invalidado
+*
+* Revision 1.3  2006/11/09 10:12:24  fjp
+* Traducciones
+*
+* Revision 1.2  2006/10/24 08:04:41  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Hashtable;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+/**
+ * Configures the length
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+class NetPage1 extends JWizardPanel implements ActionListener {
+	private NetWizard owner;
+	private JComboBox cmbLengthField;
+	// TODO comprobar si  es necesario
+	private Hashtable exceptions;
+	private JComboBox cmbTypeField;
+	private JComboBox cmbSenseField;
+	private JComboBox cmbCostUnits;
+	private JComboBox cmbCostField;
+
+	private Object useLineLengthItem = "< "+PluginServices.getText(this, "use_line_length")+" >";
+
+	private Object nullValue = "- "+PluginServices.getText(this, "none")+" -";
+	private JCheckBox chkTypeField;
+	private JCheckBox chkLengthField;
+	private JCheckBox chkCostUnits;
+	private JCheckBox chkSenseField;
+	private JCheckBox chkCostField;
+
+	NetPage1(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+		initialize();
+	}
+
+	private void initialize() {
+		GridBagLayoutPanel contentPane = new GridBagLayoutPanel();
+		contentPane.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+				PluginServices.getText(this, "field_configuration"),
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+
+		// Way type
+		cmbTypeField = new JComboBox();
+		cmbTypeField.addItem(nullValue);
+		cmbTypeField.setToolTipText(PluginServices.getText(this, "type_field_text"));
+		String[] ss = owner.getNumericLayerFieldNames();
+		for (int i = 0; i < ss.length; i++) {
+			cmbTypeField.addItem(ss[i]);
+		}
+		chkTypeField = new JCheckBox(PluginServices.getText(this, "select_type_field")+":");
+		chkTypeField.addActionListener(this);
+		contentPane.addComponent(chkTypeField, cmbTypeField);
+
+		// Length
+		cmbLengthField = new JComboBox();
+		cmbLengthField.addItem(nullValue);
+		cmbLengthField.setToolTipText(PluginServices.getText(this, "length_field_text"));
+		ss = owner.getNumericLayerFieldNames();
+		for (int i = 0; i < ss.length; i++) {
+			cmbLengthField.addItem(ss[i]);
+		}
+		chkLengthField = new JCheckBox(PluginServices.getText(this, "select_length_field")+":");
+		chkLengthField.addActionListener(this);
+		contentPane.addComponent(chkLengthField, cmbLengthField);
+
+		// Cost
+		chkCostField = new JCheckBox(PluginServices.getText(this, "cost_field")+":");
+		chkCostField.addActionListener(this);
+		contentPane.addComponent(chkCostField, cmbCostField = new JComboBox());
+
+		cmbCostField.addItem(useLineLengthItem );
+		cmbCostField.setToolTipText(PluginServices.getText(this, "cost_field_text"));
+		cmbCostField.addActionListener(this);
+		String[] numericFields = owner.getNumericLayerFieldNames();
+
+		for (int i = 0; i < numericFields.length; i++)
+			cmbCostField.addItem(numericFields[i]);
+
+		// Costs units
+		cmbCostUnits = new JComboBox(NetWizard.COST_UNITS);
+		chkCostUnits = new JCheckBox(PluginServices.getText(this, "cost_units")+":");
+		chkCostUnits.addActionListener(this);
+		contentPane.addComponent(chkCostUnits, cmbCostUnits);
+		cmbCostUnits.setToolTipText(PluginServices.getText(this, "cost_units_text"));
+
+		// Sense
+		cmbSenseField = new JComboBox();
+		cmbSenseField.addItem(nullValue);
+		String[] fieldNames = owner.getNumericLayerFieldNames();
+		for (int i = 0; i < fieldNames.length; i++) {
+			cmbSenseField.addItem(fieldNames[i]);
+		}
+		cmbSenseField.addActionListener(this);
+		cmbSenseField.setToolTipText(PluginServices.getText(this, "sense_field_text"));
+		chkSenseField = new JCheckBox(PluginServices.getText(this, "select_sense_field")+":");
+		chkSenseField.addActionListener(this);
+		contentPane.addComponent(chkSenseField, cmbSenseField);
+		contentPane.addComponent(new JLabel(PluginServices.getText(this,
+				"explanation_sense_field")));
+		actionPerformed(null);
+		this.add(contentPane);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+
+		cmbCostUnits.setEnabled(
+				!cmbCostField.getSelectedItem().equals(useLineLengthItem));
+		if (chkTypeField.isSelected()) {
+			owner.setTypeField(cmbTypeField.getSelectedItem().equals(nullValue)?
+					null : (String) cmbTypeField.getSelectedItem());
+			cmbTypeField.setEnabled(true);
+		} else {
+			owner.setTypeField(null);
+			cmbTypeField.setEnabled(false);
+		}
+
+		if (chkLengthField.isSelected()) {
+			owner.setLengthField(cmbLengthField.getSelectedItem().equals(nullValue)?
+				null : (String) cmbLengthField.getSelectedItem());
+			cmbLengthField.setEnabled(true);
+		} else {
+			owner.setLengthField(null);
+			cmbLengthField.setEnabled(false);
+		}
+
+		if (chkSenseField.isSelected()) {
+			owner.setSenseField(cmbSenseField.getSelectedItem().equals(nullValue)?
+					null : (String) cmbSenseField.getSelectedItem());
+			cmbSenseField.setEnabled(true);
+		} else {
+			owner.setSenseField(null);
+			cmbSenseField.setEnabled(false);
+		}
+
+		if (chkCostField.isSelected()) {
+			owner.setCostField(cmbCostField.getSelectedItem().equals(useLineLengthItem)?
+				null : (String) cmbCostField.getSelectedItem());
+			cmbCostField.setEnabled(true);
+		} else {
+			owner.setCostField(null);
+			cmbCostField.setEnabled(false);
+		}
+
+		if (chkCostUnits.isSelected()) {
+			owner.setCostsUnit((String) cmbCostUnits.getSelectedItem());
+			cmbCostUnits.setEnabled(true);
+		} else {
+			owner.setCostsUnit(null); // TODO use unknown?
+			cmbCostUnits.setEnabled(false);
+		}
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage1.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetFinishAction.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetFinishAction.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetFinishAction.java	(revision 30230)
@@ -0,0 +1,75 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/25 19:13:55  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import jwizardcomponent.FinishAction;
+
+import com.iver.andami.PluginServices;
+
+class NetFinishAction extends FinishAction {
+	private NetWizard owner;
+
+	NetFinishAction(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+	}
+	public void performAction() {
+		owner.setWasFinishPressed(true);
+		PluginServices.getMDIManager().closeWindow(owner);
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetFinishAction.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage2.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage2.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage2.java	(revision 30230)
@@ -0,0 +1,124 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/14 11:10:27  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/19 15:15:27  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JRadioButton;
+
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+/**
+ * Select costs or way type.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * @deprecated
+ */
+public class NetPage2 extends JWizardPanel {
+
+	private NetWizard owner;
+	private JRadioButton rdBtnCosts;
+	private JRadioButton rdBtnWayType;
+
+	NetPage2(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+		initialize();
+	}
+
+	private void initialize() {
+		GridBagLayoutPanel contentPane = new GridBagLayoutPanel();
+		contentPane.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
+				PluginServices.getText(this, "criterium"),
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+
+		contentPane.addComponent(
+				rdBtnCosts = new JRadioButton(
+						PluginServices.getText(this, "cost_from_a_table_field")));
+		contentPane.addComponent(
+				rdBtnWayType = new JRadioButton(
+						PluginServices.getText(this, "based_upon_the_road_type")));
+
+		ButtonGroup group = new ButtonGroup();
+		group.add(rdBtnCosts);
+		group.add(rdBtnWayType);
+		this.add(contentPane);
+	}
+
+	public void next() {
+		Boolean costs = null;
+		if (rdBtnCosts.isSelected())
+			costs = new Boolean(true);
+		if (rdBtnWayType.isSelected())
+			costs = new Boolean(false);
+
+		if (costs!=null) {
+			owner.setUsingCosts(costs);
+			((NetPage3) owner.getWizardComponents().getWizardPanel(2))
+				.refresh();
+			goNext();
+		}
+
+	}
+
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage2.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage3.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage3.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage3.java	(revision 30230)
@@ -0,0 +1,134 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-10-24 08:04:41  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/19 15:15:27  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+/**
+ * Configure costs or way types
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * @deprecated
+ */
+class NetPage3 extends JWizardPanel implements ActionListener {
+
+	private NetWizard owner;
+	private JComboBox cmbCostField;
+	private JComboBox cmbCostUnits;
+	private Boolean usingCosts;
+	private Object useLineLengthItem = "< "+PluginServices.getText(this, "use_line_length")+" >";
+
+	NetPage3(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+	}
+
+	public void refresh() {
+		removeAll();
+		GridBagLayoutPanel contentPane = new GridBagLayoutPanel();
+		usingCosts = owner.isUsingCosts();
+		if (usingCosts == null) {
+			goBack();
+		} else if (usingCosts.booleanValue() == true) {
+			contentPane.addComponent(
+					PluginServices.getText(this, "cost_field"),
+					cmbCostField = new JComboBox());
+
+			cmbCostField.addItem(useLineLengthItem );
+			cmbCostField.addActionListener(this);
+			String[] numericFields = owner.getNumericLayerFieldNames();
+
+			for (int i = 0; i < numericFields.length; i++)
+				cmbCostField.addItem(numericFields[i]);
+
+			contentPane.addComponent(
+					PluginServices.getText(this, "cost_units"),
+					cmbCostUnits = new JComboBox(NetWizard.COST_UNITS));
+		} else {
+			// TODO missing configure tipo de via
+		}
+		this.add(contentPane);
+		actionPerformed(null);
+	}
+
+	public void next() {
+		if (usingCosts==null) return;
+
+		if (usingCosts.equals(Boolean.TRUE)) {
+			owner.setCostField(
+					cmbCostField.getSelectedIndex() == 0 ?
+							"" : (String)cmbCostField.getSelectedItem());
+			owner.setCostsUnit(
+					(String) NetWizard.COST_UNITS[cmbCostUnits.getSelectedIndex()]);
+		} else {
+
+		}
+		goNext();
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		cmbCostUnits.setEnabled(
+			!cmbCostField.getSelectedItem().equals(useLineLengthItem));
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage3.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage4.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage4.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage4.java	(revision 30230)
@@ -0,0 +1,111 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/24 08:04:41  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/19 15:15:27  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import jwizardcomponent.JWizardPanel;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+
+/**
+ * Configuring sense
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * @deprecated
+ */
+class NetPage4 extends JWizardPanel implements ActionListener {
+	private NetWizard owner;
+	private JComboBox cmbSenseField;
+	private Object nullValue = "- "+PluginServices.getText(this, "none")+" -";
+
+	NetPage4(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+		initialize();
+	}
+
+	private void initialize() {
+		GridBagLayoutPanel contentPane = new GridBagLayoutPanel();
+
+		cmbSenseField = new JComboBox();
+		cmbSenseField.addItem(nullValue);
+		String[] fieldNames = owner.getLayerFieldNames();
+		for (int i = 0; i < fieldNames.length; i++) {
+			cmbSenseField.addItem(fieldNames[i]);
+		}
+		cmbSenseField.addActionListener(this);
+		contentPane.addComponent(PluginServices.getText(this, "select_sense_field"),cmbSenseField);
+		add(contentPane);
+		actionPerformed(null);
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		// refresh table
+		owner.setSenseField(cmbSenseField.getSelectedItem().equals(nullValue)?
+				"" : (String) cmbSenseField.getSelectedItem());
+	}
+
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage4.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetWizard.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetWizard.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetWizard.java	(revision 30230)
@@ -0,0 +1,272 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.9  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.8  2006/11/09 13:30:40  azabala
+* *** empty log message ***
+*
+* Revision 1.7  2006/11/09 12:51:12  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/11/09 09:01:05  azabala
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/08 20:14:42  azabala
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/25 19:13:55  azabala
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/24 08:04:41  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/10/20 12:02:50  jaume
+* GUI
+*
+* Revision 1.1  2006/10/19 15:12:10  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import java.sql.Types;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.andami.ui.wizard.WizardAndami;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+
+public class NetWizard extends WizardAndami implements IWindow{
+    public final static String[] COST_UNITS = {
+    	PluginServices.getText(NetWizard.class, "seconds" ),
+    	PluginServices.getText(NetWizard.class, "hours" ),
+        PluginServices.getText(NetWizard.class, "minutes" ),
+                                                "hh:mm:ss" ,
+        PluginServices.getText(NetWizard.class, "millimeters" ),
+        PluginServices.getText(NetWizard.class, "meters" ),
+        PluginServices.getText(NetWizard.class, "inches" ),
+        PluginServices.getText(NetWizard.class, "feet" ),
+        PluginServices.getText(NetWizard.class, "yards" ),
+        PluginServices.getText(NetWizard.class, "miles" ),
+        PluginServices.getText(NetWizard.class, "nautic_miles" ),
+        PluginServices.getText(NetWizard.class, "monetary" ), // unidades monetarias
+        PluginServices.getText(NetWizard.class, "unknown_longitude_units" ),
+        PluginServices.getText(NetWizard.class, "unknown_time_units" ),
+        PluginServices.getText(NetWizard.class, "unknown_units" ),
+    }; // TODO push it to the corresponding geoprocess class
+    private FLyrVect lyr;
+    private WindowInfo wi;
+    private String[] numericLayerFieldNames;
+    private String fieldLength;
+    private Boolean usingCosts;
+    private String costUnit;
+	private String[] layerFieldNames;
+	private String fieldType;
+	private String fieldSense;
+	private String fieldCost;
+	
+	/**
+	 * flag that tells us if user pressed finish button
+	 * or cancel button
+	 * */
+	private boolean wasFinishPressed = false;
+	
+	
+	private boolean cleanOriginalLayer = false;
+	private boolean applySnapTolerance = false;
+	private double snapTolerance = 0d;
+	
+
+    public NetWizard(ImageIcon logo, FLyrVect lyr) {
+        super(logo);
+        this.lyr = lyr;
+        getWizardComponents().addWizardPanel(new NetPage0(this));
+        getWizardComponents().addWizardPanel(new NetPage1(this));
+//        getWizardComponents().addWizardPanel(new NetPage2(this));
+//        getWizardComponents().addWizardPanel(new NetPage3(this));
+//        getWizardComponents().addWizardPanel(new NetPage4(this));
+        getWizardComponents().setFinishAction(new NetFinishAction(this));
+        getWizardComponents().setCancelAction(new NetCancelAction(this));
+    }
+    
+    
+    public FLyrVect getLayer(){
+    	return lyr;
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (wi==null) {
+            wi = new WindowInfo(WindowInfo.RESIZABLE | WindowInfo.MODALDIALOG);
+            wi.setWidth(720);
+            wi.setHeight(370);
+            wi.setTitle(PluginServices.getText(this, "create_network") + "...");
+        }
+        return wi;
+    }
+    
+    public void setCleanOriginalLayer(boolean value){
+    	this.cleanOriginalLayer = value;
+    }
+    
+    public boolean getCleanOriginalLayer(){
+    	return cleanOriginalLayer;
+    }
+    
+    public void setApplySnapTolerance(boolean value){
+    	this.applySnapTolerance = value;
+    }
+    
+    public boolean getApplySnapTolerance(){
+    	return applySnapTolerance;
+    }
+    
+    public void setSnapTolerance(double value){
+    	this.snapTolerance = value;
+    }
+    
+    public double getSnapTolerance(){
+    	return snapTolerance;
+    }
+    
+    
+    public void setWasFinishPressed(boolean wasFinish){
+    	this.wasFinishPressed = wasFinish;
+    }
+    
+    public boolean wasFinishPressed(){
+    	return wasFinishPressed;
+    }
+
+    public String[] getNumericLayerFieldNames() {
+        if (numericLayerFieldNames == null) {
+            try {
+                String[] aux = lyr.getRecordset().getFieldNames();
+                ArrayList temp = new ArrayList();
+                for (int i = 0; i < aux.length; i++) {
+                    switch (lyr.getRecordset().getFieldType(i)) {
+                    case Types.BIGINT:
+                    case Types.DECIMAL:
+                    case Types.DOUBLE:
+                    case Types.FLOAT:
+                    case Types.INTEGER:
+                    case Types.NUMERIC:
+                    case Types.REAL:
+                    case Types.SMALLINT:
+                    case Types.TINYINT:
+                        temp.add(aux[i]);
+                    }
+                }
+                numericLayerFieldNames = (String[]) temp.toArray(new String[0]);
+            } catch (Exception e) {
+                return new String[] {PluginServices.getText(this, "invalid_layer")+"!"};
+            }
+        }
+        return numericLayerFieldNames;
+    }
+
+    public String[] getLayerFieldNames() {
+    	if (layerFieldNames == null) {
+            try {
+            	layerFieldNames = lyr.getRecordset().getFieldNames();
+            } catch (Exception e) {
+            	return new String[] {PluginServices.getText(this, "invalid_layer")+"!"};
+            }
+    	}
+    	return layerFieldNames;
+    }
+
+    public void setLengthField(String lengthField) {
+        this.fieldLength = lengthField;
+    }
+
+	public void setTypeField(String fieldType) {
+		this.fieldType = fieldType;
+	}
+
+	public void setCostField(String fieldCost) {
+        this.fieldCost = fieldCost;
+    }
+
+	public void setSenseField(String fieldSense) {
+		this.fieldSense = fieldSense;
+	}
+
+    public void setCostsUnit(String costUnit) {
+        this.costUnit = costUnit;
+    }
+
+    public void setUsingCosts(Boolean costs) {
+        this.usingCosts = costs;
+    }
+
+    public Boolean isUsingCosts() {
+        return usingCosts;
+    }
+
+	public String getFieldType() {
+		return this.fieldType;
+	}
+
+	public String getFieldLength() {
+		return this.fieldLength;
+	}
+
+	public String getFieldSense() {
+		return this.fieldSense;
+	}
+
+	public String getFieldCost() {
+		return this.fieldCost;
+	}
+
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetWizard.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetCancelAction.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetCancelAction.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetCancelAction.java	(revision 30230)
@@ -0,0 +1,76 @@
+/*
+ * Created on 25-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/25 19:13:55  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui.wizard;
+
+import jwizardcomponent.CancelAction;
+
+import com.iver.andami.PluginServices;
+
+public class NetCancelAction extends CancelAction {
+	
+	private NetWizard owner;
+	public NetCancelAction(NetWizard wizard) {
+		super(wizard.getWizardComponents());
+		this.owner = wizard;
+	}
+
+	public void performAction() {
+		owner.setWasFinishPressed(false);
+		PluginServices.getMDIManager().closeWindow(owner);
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/wizard/NetCancelAction.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/MultiInputDlg.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/MultiInputDlg.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/MultiInputDlg.java	(revision 30230)
@@ -0,0 +1,171 @@
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.TextArea;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.table.DefaultTableModel;
+
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import java.awt.SystemColor;
+
+public class MultiInputDlg extends JDialog {
+	private boolean canceled = false;
+	private class MyListener implements ActionListener {
+
+		private MultiInputDlg dlg;
+		public MyListener(MultiInputDlg dlg)
+		{
+			this.dlg = dlg;
+		}
+		public void actionPerformed(ActionEvent e) {
+			if (e.getActionCommand().equalsIgnoreCase("OK"))
+			{
+				dlg.dispose();
+			}
+			if (e.getActionCommand().equalsIgnoreCase("CANCEL"))
+			{
+				dlg.canceled = true;
+				dlg.dispose();
+				
+			}			
+		}
+		
+	}
+
+	private class MyModel extends DefaultTableModel {
+
+		private ArrayList l;
+		private ArrayList r;
+
+		MyModel(ArrayList leftList, ArrayList rightList) {
+			l = leftList;
+			r = rightList;
+		}
+		
+		public ArrayList getRigthValues()
+		{
+			return r;
+		}
+		public int getColumnCount() {
+			return 2;
+		}
+
+		public int getRowCount() {
+			if (l == null) return 0;
+			return l.size();
+		}
+
+		public Object getValueAt(int row, int column) {
+			if (column == 0)
+				return l.get(row);
+			return r.get(row);
+		}
+
+		public boolean isCellEditable(int row, int column) {
+			if (column == 1)
+				return true;
+			else
+				return false;
+		}
+
+		public void setValueAt(Object aValue, int row, int column) {
+			r.set(row, aValue);
+		}
+		
+	}
+	private ArrayList firstList;
+	private ArrayList secondList;
+	
+	private String msg;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1914037292995440998L;
+	private JTextArea jLblMsg = null;  //  @jve:decl-index=0:visual-constraint="220,10"
+	private JScrollPane jScrollPane = null;  //  @jve:decl-index=0:visual-constraint="183,139"
+	private JTable jTable = null;
+	private String colName1;
+	private String colName2;
+
+	public MultiInputDlg(String msg, ArrayList leftValues, ArrayList veloKm) {
+		firstList = leftValues;
+		secondList = veloKm;
+		this.msg = msg;
+		initialize();
+	}
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		jLblMsg = new JTextArea();
+		jLblMsg.setText(msg);
+		jLblMsg.setBackground(SystemColor.control);
+		jLblMsg.setLineWrap(true);
+		jLblMsg.setPreferredSize(new Dimension(200, 100));
+		
+		BorderLayout layout = new BorderLayout();
+		layout.setHgap(30);
+		layout.setVgap(10);
+		this.getContentPane().setLayout(new BorderLayout());
+		this.getContentPane().add(jLblMsg, BorderLayout.NORTH);
+		this.setSize(new Dimension(300, 350));
+		this.getContentPane().add(getJScrollPane(), BorderLayout.CENTER);
+		MyListener myListener = new MyListener(this);
+		AcceptCancelPanel okCancelPanel = new AcceptCancelPanel(myListener, myListener);
+		this.getContentPane().add(okCancelPanel, BorderLayout.SOUTH);
+	
+	}
+
+	public ArrayList getRightValues() {
+		return secondList;
+	}
+	/**
+	 * This method initializes jScrollPane	
+	 * 	
+	 * @return javax.swing.JScrollPane	
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getJTable());
+		}
+		return jScrollPane;
+	}
+	/**
+	 * This method initializes jTable	
+	 * 	
+	 * @return javax.swing.JTable	
+	 */
+	private JTable getJTable() {
+		if (jTable == null) {
+			jTable = new JTable();
+			MyModel myModel = new MyModel(firstList, secondList);
+			jTable.setModel(myModel);
+		}
+		return jTable;
+	}
+	public void actionPerformed(ActionEvent e) {
+		
+		
+	}
+	public boolean isCanceled() {
+		return canceled;
+	}
+	public void setColumnNames(String col1, String col2) {
+		this.colName1 = col1;
+		this.colName2 = col2;
+		jTable.getColumnModel().getColumn(0).setHeaderValue(col1);
+		jTable.getColumnModel().getColumn(1).setHeaderValue(col2);
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/MultiInputDlg.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/LayerSelectionPanel.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/LayerSelectionPanel.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/LayerSelectionPanel.java	(revision 30230)
@@ -0,0 +1,283 @@
+/*
+ * Created on 27-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-11-08 19:32:44  azabala
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/03 19:39:29  azabala
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/27 18:26:07  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.GridBagConstraints;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import org.gvsig.gui.beans.AcceptCancelPanel;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+
+/**
+ * Component that shows in a combobox all the TOC's layers, and allows
+ * user to select one of them.
+ * 
+ * It optionally allows to filter layers for a given geometry type.
+ * 
+ * 
+ * */
+public class LayerSelectionPanel extends JPanel implements IWindow{
+
+	private GridBagLayoutPanel contentPanel;
+	
+	FLayers layers = null;
+	JComboBox layersComboBox = null;
+	AcceptCancelPanel buttonPanel = null;
+	
+	
+	private ActionListener okActionListener = new ActionListener(){
+		public void actionPerformed(ActionEvent arg0) {
+			wasFinishPressed = true;
+			closeParent(LayerSelectionPanel.this);
+		}
+	};
+
+	private ActionListener cancelActionListener = new ActionListener(){
+		public void actionPerformed(ActionEvent arg0) {
+			wasFinishPressed = false;
+			closeParent(LayerSelectionPanel.this);
+		}
+	};
+	String title = null;
+	String introductoryText = null;
+	
+	boolean wasFinishPressed = false;
+	
+	/**
+	 * Optinal filter to show in the combo box layers of a given
+	 * geometry typ0e
+	 * */
+	int geometryType = -1;
+	
+	/**
+	 * If it is not null, we'll filter layers to only show
+	 * types of this class
+	 * */
+	Class layerType;
+	private WindowInfo wi;
+	
+	
+	
+	public LayerSelectionPanel(FLayers tocLayers, 
+			String title, 
+			String introductoryText){
+		this(tocLayers, title, introductoryText, (Class) null, -1);
+		
+	}
+	
+	public LayerSelectionPanel(FLayers layers, String title, 
+				String introductoryText, Class class1, int geometryType) {
+		super();
+		this.layers = layers;
+		this.introductoryText = introductoryText;
+		this.layerType = class1;
+		this.geometryType = geometryType;
+		initialize();
+	}
+
+	public void setGeometryTypeConstraint(int geometryType){
+		if(layerType == null || !(layerType.isAssignableFrom(FLyrVect.class)))
+			return;
+		this.geometryType = geometryType;
+	}
+	
+	public void setLayerTypeConstraint(Class layerClass){
+		this.layerType = layerClass;
+	}
+		
+	
+	public FLayer getLayer() {
+		FLayer solution = null;
+		String selectedLayer = (String)layersComboBox.getSelectedItem();
+		if(selectedLayer != null){
+			if(!(selectedLayer.trim().equals("")))
+				solution = layers.getLayer(selectedLayer);
+		}
+        
+        return solution;
+	}
+	
+	public void setFLayers(FLayers layers){
+		this.layers = layers;
+		updateLayerCombo();
+	}
+	
+	public void initialize(){
+		setLayout(new BorderLayout());
+		contentPanel = new GridBagLayoutPanel();
+		contentPanel.addComponent(new JLabel(introductoryText), GridBagConstraints.BOTH);
+		JComboBox comboBox = getLayersComboBox();
+		contentPanel.addComponent(PluginServices.getText(null, "Capas:"), comboBox);
+		add(contentPanel, BorderLayout.NORTH);
+		add(getButtonPanel(), BorderLayout.SOUTH);
+		
+	}
+	
+	AcceptCancelPanel getButtonPanel() {
+		if (buttonPanel == null) {
+			buttonPanel = new AcceptCancelPanel();
+			buttonPanel.setOkButtonActionListener(okActionListener);
+			buttonPanel.setCancelButtonActionListener(cancelActionListener);
+		}
+		return buttonPanel;
+	}
+	
+	
+	void updateLayerCombo(){
+		DefaultComboBoxModel defaultModel = 
+        	new DefaultComboBoxModel(getLayerNames());
+        layersComboBox.setModel(defaultModel);
+	}
+	
+	public boolean wasFinishPressed(){
+		return wasFinishPressed;
+	}
+	
+	protected FLayer[] getLayerForType(FLayers layers){
+		FLayer[] solution = null;
+		int numLayers = layers.getLayersCount();
+		if(layers != null &&  numLayers > 0){
+			ArrayList list = new ArrayList();
+			for(int i = 0; i < numLayers; i++){
+				FLayer layer = layers.getLayer(i);
+				if(layerType != null){
+					if(!layer.getClass().isAssignableFrom(layerType))
+						continue;
+					if(layer instanceof FLyrVect){
+						try {
+							if(((FLyrVect)layer).getShapeType() != geometryType)
+								continue;
+							list.add(layer);
+						} catch (DriverException e) {
+							continue;
+						}
+					}//if	
+				}//if
+				if(layer instanceof FLayers){
+					list.addAll(Arrays.asList(getLayerForType((FLayers)layer)));
+				}
+			}//for
+			solution = new FLyrVect[list.size()];
+			list.toArray(solution);
+		}//if
+		return solution;
+	}
+	
+	protected String[] getLayerNames() {
+		String[] solution = null;
+		ArrayList nameList = new ArrayList();
+		FLayer[] layers = getLayerForType(this.layers);
+		for(int i = 0; i < layers.length; i++){
+			nameList.add(layers[i].getName());
+		}
+		solution = new String[nameList.size()];
+		nameList.toArray(solution);
+		return solution;
+	}
+	
+	private JComboBox getLayersComboBox() {
+		if (layersComboBox == null) {
+            layersComboBox = new JComboBox();
+		}
+		updateLayerCombo();
+		return layersComboBox;
+	}
+	
+	public static void closeParent(JPanel component){
+		Container container = component.getParent();
+		Container parentOfContainer = null;
+		while(! (container instanceof Window)){
+			parentOfContainer = container.getParent();
+			container = parentOfContainer;
+		}
+		((Window)container).dispose();
+	}
+	
+	
+	
+	public WindowInfo getWindowInfo() {
+		  if (wi==null) {
+	            wi = new WindowInfo(WindowInfo.MODALDIALOG);
+	            wi.setWidth(290);
+	            wi.setHeight(120);
+	            wi.setTitle(title);
+	        }
+	        return wi;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/LayerSelectionPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/HTMLEditorKit.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/HTMLEditorKit.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/HTMLEditorKit.java	(revision 30230)
@@ -0,0 +1,90 @@
+/*
+ * Created on 20-oct-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-11-09 12:25:06  fjp
+* El fichero de red pasa a llamarse .net y se escribe sobre el directorio temporal del usuario. También se mira si existe ahí para habilitar/deshabilitar la opción de carga.
+*
+* Revision 1.1  2006/10/20 19:54:01  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.graph.gui;
+
+import javax.swing.text.Element;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.View;
+import javax.swing.text.ViewFactory;
+import javax.swing.text.html.HTML;
+
+import com.iver.cit.gvsig.graph.GenerateNetworkExtension;
+
+
+public class HTMLEditorKit extends javax.swing.text.html.HTMLEditorKit {
+	 public ViewFactory getViewFactory() {
+		    return new HTMLFactoryX();
+		  }
+
+
+		  public static class HTMLFactoryX extends HTMLFactory
+		    implements ViewFactory {
+		    
+		    public View create(Element elem) {
+		      Object o = 
+		        elem.getAttributes().getAttribute(StyleConstants.NameAttribute);
+		      if (o instanceof HTML.Tag) {
+			HTML.Tag kind = (HTML.Tag) o;
+		        if (kind == HTML.Tag.IMG) 
+		          return new ImageView(elem, GenerateNetworkExtension.class );
+		      }
+		      return super.create( elem );
+		    }
+		  }
+}
+
+
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/graph/gui/HTMLEditorKit.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/v02/FArrowSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/v02/FArrowSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/v02/FArrowSymbol.java	(revision 30230)
@@ -0,0 +1,314 @@
+/*
+ * Created on 25-oct-2006 by azabala
+ *
+ */
+package com.iver.cit.gvsig.fmap.core.v02;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import com.iver.cit.gvsig.fmap.core.FPolygon2D;
+import com.iver.cit.gvsig.fmap.core.FPolyline2D;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.GeneralPathX;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+/**
+ * Symbol to draw a line with an arrow at the end.
+ * @author alzabord
+ */
+public class FArrowSymbol implements ISymbol {
+
+	protected static Color selectionColor = Color.YELLOW;
+	
+	protected static BufferedImage img = new BufferedImage(1, 1,
+			BufferedImage.TYPE_INT_ARGB);
+	
+	protected static Rectangle rect = new Rectangle(0, 0, 1, 1);
+	
+	protected Color symColor;
+	
+	protected Stroke m_Stroke;
+	
+	protected int m_symbolType = FConstant.SYMBOL_TYPE_LINE;
+
+	protected String m_Descrip;
+	
+	protected int rgb;
+
+	protected boolean m_bDrawShape = true;
+	
+	protected int lenghtArrow = 15;
+	protected int widthArrow = 10;
+	
+	
+	
+	
+	public FArrowSymbol(Color symColor){
+		this.symColor = symColor;
+		calculateRgb();
+	}
+	
+	public void calculateRgb() {
+		// Recalculamos el RGB
+		Graphics2D g2 = img.createGraphics();
+		drawInsideRectangle(g2, g2.getTransform(), rect);
+		rgb = img.getRGB(0, 0);
+	}
+	
+	/**
+	 * Devuelve el color que se aplica a los shapes seleccionados.
+	 *
+	 * @return DOCUMENT ME!
+	 */
+	public static Color getSelectionColor() {
+		return selectionColor;
+	}
+	
+	
+	public Color getColor(){
+		return symColor;
+	}
+	
+	public Stroke getStroke(){
+		return m_Stroke;
+	}
+	
+	public void setStroke(Stroke stroke){
+		this.m_Stroke = stroke;
+	}
+	
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.core.ISymbol#getSymbolForSelection()
+	 */
+	public ISymbol getSymbolForSelection() {
+		FArrowSymbol solution = new FArrowSymbol(selectionColor);
+		solution.m_bDrawShape = m_bDrawShape;
+		solution.m_Stroke = m_Stroke;
+		return solution;
+	}
+	
+	
+	
+
+	
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		
+		//1º dibujamos la linea
+		if (shp == null || (! isShapeVisible())) {
+			return;
+		}
+        g.setColor(getColor());
+		if (getStroke() != null) {
+			g.setStroke(getStroke());
+		}
+		g.draw(shp);	
+		
+		/*
+		 * Ahora intentamos obtener el ultimo segmento
+		 * */
+		PathIterator theIterator;
+		theIterator = shp.getPathIterator(null, 0.8);
+		int theType;
+		double[] theData = new double[2];
+		ArrayList arrayCoords = new ArrayList();
+		while (!theIterator.isDone()) {
+			theType = theIterator.currentSegment(theData);
+		    if(theType == PathIterator.SEG_LINETO || theType == PathIterator.SEG_MOVETO)
+		    	arrayCoords.add(theData);
+		    theData = new double[2];
+			theIterator.next();
+		} //end while loop
+		
+		double length = 0d;
+		double[] previous = null;
+		for(int i = 0; i < arrayCoords.size(); i++ ){
+			double[] coords = (double[]) arrayCoords.get(i);
+			if(previous == null)
+				previous = coords;
+			else{
+				double dx = coords[0] - previous[0];
+				double dy = coords[1] - previous[1];
+				double dist = Math.sqrt( ( dx * dx ) + (dy * dy));
+				length += dist;
+			}//else
+		}//for
+		
+		if(lenghtArrow > (0.5 * length))//to avoid arrows collisions
+			return;
+		
+		double[] last = (double[]) arrayCoords.get(arrayCoords.size() -1);
+		double[] prevLast = (double[]) arrayCoords.get(arrayCoords.size() -2);
+		
+		
+		double mx = last[0];
+		double my = last[1];
+		double Mx = prevLast[0];
+		double My = prevLast[1];
+//		
+
+		// tamaño de la flecha
+		double tipLength = lenghtArrow;
+		double tipWidth = widthArrow;
+
+		double	tip1x = mx + (((Mx - mx) * tipLength + ( tipWidth / 2)*(my - My))/
+						Math.sqrt(( my - My) * (my - My)+(mx-Mx)*(mx-Mx)));
+		
+		double  tip2x = mx + (((Mx-mx) * tipLength-(tipWidth/2)*(my-My))/
+						Math.sqrt((my-My)*(my-My)+(mx-Mx)*(mx-Mx)));
+		
+		double  tip1y = my + (((My-my)*tipLength-(tipWidth/2)*(mx-Mx))/
+				 		Math.sqrt((my-My)*(my-My)+(mx-Mx)*(mx-Mx)));
+		
+		double tip2y = my + (((My-my)*tipLength+(tipWidth/2)*(mx-Mx))/
+			            Math.sqrt((my-My)*(my-My)+(mx-Mx)*(mx-Mx)));
+		
+		GeneralPathX path = new GeneralPathX();
+		path.moveTo(mx, my);
+		path.lineTo(tip1x, tip1y);
+		path.lineTo(tip2x, tip2y);
+		path.closePath();
+		FPolygon2D arrow = new FPolygon2D(path);
+		g.fill(arrow);
+	}
+
+	
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform, Shape shp) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	
+	
+	
+	
+	public int getOnePointRgb() {
+		return rgb;
+	}
+
+	
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className",this.getClass().getName());
+		xml.putProperty("m_symbolType", getSymbolType());
+		if (getColor() != null) {
+			xml.putProperty("m_Color", StringUtilities.color2String(getColor()));
+		}
+		xml.putProperty("m_bDrawShape", isShapeVisible());
+		
+		
+		//Ancho del stroke en float
+		if (getStroke() != null) {
+			xml.putProperty("m_stroke",
+				((BasicStroke) getStroke()).getLineWidth());
+		} else {
+			xml.putProperty("m_stroke", 0f);
+		}
+		xml.putProperty("rgb", rgb);
+
+		return xml;
+	}
+
+	
+	
+	public String getDescription() {
+		return null;
+	}
+
+	
+	
+	
+	
+	public boolean isShapeVisible() {
+		return m_bDrawShape;
+	}
+	
+	
+	
+	public void setDescription(String m_Descrip) {
+		this.m_Descrip = m_Descrip;
+	}
+
+	
+	public int getSymbolType() {
+		return m_symbolType;
+	}
+	
+	
+
+	public boolean isSuitableFor(IGeometry geom) {
+		return true;
+	}
+
+	//TODO Copypasteado de graphics utilities para symboltype LINE
+	public void drawInsideRectangle(Graphics2D g, 
+			AffineTransform scaleInstance, 
+			Rectangle r) {
+		
+		FShape shp;
+		AffineTransform mT = new AffineTransform();
+		mT.setToIdentity();
+
+		Rectangle rect = mT.createTransformedShape(r).getBounds();
+		GeneralPathX line = new GeneralPathX();
+		
+		
+		
+		line.moveTo(rect.x, rect.y + (rect.height / 2));
+		line.curveTo(rect.x + (rect.width / 3),
+			rect.y + (2 * rect.height),
+			rect.x + ((2 * rect.width) / 3), rect.y - rect.height,
+			rect.x + rect.width, rect.y + (rect.height / 2));
+
+		shp = new FPolyline2D(line);
+		draw(g, mT, shp);
+	}
+
+	
+	
+
+	
+	public void setXMLEntity(XMLEntity xml) {
+		
+		
+	}
+
+
+	public String getClassName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	
+	/**
+	 * @return Returns the m_bDrawShape.
+	 */
+	public boolean isM_bDrawShape() {
+		return m_bDrawShape;
+	}
+	/**
+	 * @param drawShape The m_bDrawShape to set.
+	 */
+	public void setM_bDrawShape(boolean drawShape) {
+		m_bDrawShape = drawShape;
+	}
+
+	public void setPrintingProperties(PrintRequestAttributeSet printProperties) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/v02/FArrowSymbol.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractFillSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractFillSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractFillSymbol.java	(revision 30230)
@@ -0,0 +1,126 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.6  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/14 11:10:27  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.2  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.Color;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+
+/**
+ * Abstract class that any FILL SYMBOL should extend
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public abstract class AbstractFillSymbol implements ISymbol {
+	Color color = Color.WHITE;
+	Color outline = Color.BLACK; // TODO això canviarà a AbsrtactLineSymbol quan existisca
+	protected boolean isShapeVisible;
+	protected String desc;
+	protected ISymbol[] layers;
+
+	public boolean isShapeVisible() {
+		return isShapeVisible;
+	}
+
+	public void setDescription(String desc) {
+		this.desc = desc;
+	}
+
+	public String getDescription() {
+		return desc;
+	}
+
+	public boolean isSuitableFor(IGeometry geom) {
+		return geom.getGeometryType() == FShape.POLYGON;
+	}
+
+	public ISymbol getLayer(int layerIndex) {
+		try{
+			return layers[layerIndex];
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public int getOnePointRgb() {
+		return outline.getRGB();
+	}
+
+	public ISymbol getLayerByIndex(int i) {
+		return layers[i];
+	}
+	
+	public void setPrintingProperties(PrintRequestAttributeSet printProperties) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractFillSymbol.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleMarkerSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleMarkerSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleMarkerSymbol.java	(revision 30230)
@@ -0,0 +1,123 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-11-14 11:10:27  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+public class SimpleMarkerSymbol extends AbstractMarkerSymbol {
+	private boolean outline;
+	private Color outlineColor;
+	private double outlineSize;
+
+
+	private ISymbol selectionSymbol;
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			XMLEntity xml = getXMLEntity();
+			xml.putProperty("color", StringUtilities.color2String(Color.YELLOW));
+			selectionSymbol = SymbolFactory.createFromXML(xml, getDescription() + " version for selection.");
+		}
+		return selectionSymbol;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform, Shape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public XMLEntity getXMLEntity() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public int getSymbolType() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public String getClassName() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+
+	}
+
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleMarkerSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/DotDensityFillSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/DotDensityFillSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/DotDensityFillSymbol.java	(revision 30230)
@@ -0,0 +1,234 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-11-14 11:10:27  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/13 09:15:23  jaume
+* javadoc and some clean-up
+*
+* Revision 1.2  2006/11/09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/11/09 10:22:50  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.util.Random;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+/**
+ * <p>
+ * Symbol that draws a set of points within a polygon. The amount of points is
+ * defined by the field dotCount.<br>
+ * </p>
+ * <p>
+ * This symbol only draws the points. The outline and the fill of the polygon is
+ * handled by a SimpleFillSymboll where a DotDensityFillSymbol should be
+ * embedded.<br>
+ * </p>
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class DotDensityFillSymbol extends AbstractFillSymbol {
+	private int  dotCount;
+	private double dotSize;
+	private double dotSpacing;
+	private boolean fixedPlacement;
+	public DotDensityFillSymbol() {
+		super();
+		isShapeVisible = true;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		return this; // the selection color is applied in the SimpleFillSymbol
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		int width = shp.getBounds().width;
+		int height = shp.getBounds().height;
+		int minx = shp.getBounds().x;
+		int miny = shp.getBounds().y;
+		Random random = new Random();
+		g.setClip(shp);
+		g.setColor(color);
+		g.setBackground(null);
+		int size = (int) dotSize;
+		for (int i = 0; i < dotCount; i++) {
+			int x = (int) Math.abs(random.nextDouble() * width);
+			int y = (int) Math.abs(random.nextDouble() * height);
+			x = x + minx;
+			y = y + miny;
+			g.fillRect(x, y, size, size);
+		}
+		g.setClip(null);
+	}
+
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform,
+			Shape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+
+		// color
+		xml.putProperty("color", StringUtilities.color2String(color));
+
+		// description
+		xml.putProperty("desc", desc);
+
+		// is shape visible
+		xml.putProperty("isShapeVisible", isShapeVisible);
+
+		// dot count
+		xml.putProperty("dotCount", dotCount);
+
+		// dot size
+		xml.putProperty("dotSize", dotSize);
+
+		// dot spacing
+		xml.putProperty("dotSpacing", dotSpacing);
+
+		return xml;
+	}
+
+	public int getSymbolType() {
+		return FShape.POLYGON;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r) {
+		int x = r.x;
+		int y = r.y;
+		int width = r.width;
+		int height= r.height;
+		int size = height / 8;
+		g.setColor(color);
+		g.setBackground(null);
+		g.fillRect((int) (x+height*0.2), (int) (y+width*0.2), size, size);
+		g.fillRect((int) (x+height*0.25), (int) (y+width*0.7), size, size);
+		g.fillRect((int) (x+height*0.65), (int) (y+width*0.5), size, size);
+		g.fillRect((int) (x+height*0.8), (int) (y+width*0.1), size, size);
+		g.fillRect((int) (x+height*0.8), (int) (y+width*0.8), size, size);
+		g.fillRect((int) (x+height*0.9), (int) (y+width*0.3), size, size);
+		g.fillRect((int) (x+height*1.1), (int) (y+width*0.8), size, size);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		// color
+		color = StringUtilities.string2Color(xml.getStringProperty("color"));
+
+		// description
+		desc = xml.getStringProperty("desc");
+
+		// is shape visible
+		isShapeVisible = xml.getBooleanProperty("isShapeVisible");
+
+		// dot count
+		dotCount = xml.getIntProperty("dotCount");
+
+		// dot size
+		dotSize = xml.getDoubleProperty("dotSize");
+
+		// dot spacing
+		dotSpacing = xml.getDoubleProperty("dotSpacing");
+
+		layers = new ISymbol[xml.getChildrenCount()];
+
+	}
+
+	public int getDotCount() {
+		return dotCount;
+	}
+
+	public void setDotCount(int dotCount) {
+		this.dotCount = dotCount;
+	}
+
+	public double getDotSize() {
+		return dotSize;
+	}
+
+	public void setDotSize(double dotSize) {
+		this.dotSize = dotSize;
+	}
+
+	public double getDotSpacing() {
+		return dotSpacing;
+	}
+
+	public void setDotSpacing(double dotSpacing) {
+		this.dotSpacing = dotSpacing;
+	}
+
+	public Color getDotColor() {
+		return color;
+	}
+
+	public void setDotColor(Color dotColor) {
+		this.color = dotColor;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/DotDensityFillSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/CharacterMarkerSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/CharacterMarkerSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/CharacterMarkerSymbol.java	(revision 30230)
@@ -0,0 +1,306 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.6  2006-12-04 17:13:39  fjp
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/11/14 11:10:27  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/11/09 18:39:05  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/11/08 10:56:47  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/11/06 17:08:45  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/31 16:16:34  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/10/30 19:30:35  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/10/29 23:53:49  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/10/26 16:27:33  jaume
+ * support for composite marker symbols (not tested)
+ *
+ * Revision 1.1  2006/10/25 10:50:41  jaume
+ * movement of classes and gui stuff
+ *
+ * Revision 1.3  2006/10/24 19:54:16  jaume
+ * added IPersistence
+ *
+ * Revision 1.2  2006/10/24 08:02:51  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/18 07:54:06  jaume
+ * *** empty log message ***
+ *
+ *
+ */
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import org.apache.batik.ext.awt.geom.PathLength;
+
+import com.iver.cit.gvsig.fmap.core.FPoint2D;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.fmap.core.v02.FConstant;
+import com.iver.cit.gvsig.fmap.core.v02.FConverter;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+import com.vividsolutions.jts.geom.Geometry;
+
+
+// TODO quitar batik-util.jar del classpath de extGraph cuando movamos esto a FMap
+/**
+ * Symbol that manages symbols from a TrueType font source
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class CharacterMarkerSymbol extends AbstractMarkerSymbol {
+	private Font font = new Font("Arial", Font.PLAIN, 20);
+	private int symbol;
+	private ISymbol selectionSymbol;
+
+	/**
+	 * Creates a new instance of CharacterMarker with default values
+	 *
+	 */
+	public CharacterMarkerSymbol() {
+		super();
+	}
+
+	/**
+	 * Creates a new instance of CharacterMarker specifying the marker source
+	 * font, the character code corresponding to the symbol, and the color that
+	 * will be used in rendering time.
+	 *
+	 * @param font -
+	 *            src Font
+	 * @param charCode -
+	 *            character code of the symbol for this font
+	 * @param color -
+	 *            color to be used in when rendering.
+	 */
+	public CharacterMarkerSymbol(Font font, int charCode, Color color) {
+		super();
+		this.font = font;
+		symbol = charCode;
+		this.color = color;
+	}
+
+	public Font getFont() {
+		return font;
+	}
+
+	public void setFont(Font font) {
+		this.font = font;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		if (selectionSymbol == null) {
+			XMLEntity xml = getXMLEntity();
+			xml.putProperty("color", StringUtilities.color2String(Color.YELLOW));
+			selectionSymbol = SymbolFactory.createFromXML(xml, getDescription() + " version for selection.");
+		}
+		return selectionSymbol;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		g.setFont(getFont());
+		g.setColor(color);
+		g.rotate(getRotation());
+		Point2D p = null;
+		switch (shp.getShapeType()) {
+		case FShape.POINT:
+			p = new Point2D.Double(((FPoint2D) shp).getX(), ((FPoint2D) shp)
+					.getY());
+			break;
+		case FShape.LINE:
+			PathLength pathLen = new PathLength(shp);
+			float midDistance = pathLen.lengthOfPath() / 2;
+			p = pathLen.pointAtLength(midDistance);
+			break;
+		case FShape.POLYGON:
+			Geometry geom = FConverter.java2d_to_jts(shp);
+			com.vividsolutions.jts.geom.Point centroid = geom.getCentroid();
+			p = new Point2D.Double(centroid.getX(), centroid.getY());
+		}
+		// p = affineTransform.transform(p, null);
+
+		char[] text = new char[] { (char) symbol };
+		g.drawChars(text, 0, text.length, (int) p.getX(), (int) p.getY());
+
+		if (subSymbols!=null) {
+			for (int i = 0; i < subSymbols.length; i++) {
+				subSymbols[i].draw(g, affineTransform, shp);
+			}
+		}
+	}
+
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform,
+			Shape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+
+		// the class name
+		xml.putProperty("className", getClassName());
+
+		// color
+		xml.putProperty("color", StringUtilities.color2String(color));
+
+		// font
+		xml.putProperty("font", font.getFontName());
+
+		// font style
+		xml.putProperty("fontStyle", font.getStyle());
+
+		// symbol code
+		xml.putProperty("symbolCode", symbol);
+
+		// description
+		xml.putProperty("desc", desc);
+
+		// is shape visible
+		xml.putProperty("isShapeVisible", isShapeVisible);
+
+		// x offset
+		xml.putProperty("xOffset", getOffset().getX());
+
+		// y offset
+		xml.putProperty("yOffset", getOffset().getY());
+
+		// rotation
+		xml.putProperty("rotation", rotation);
+		return xml;
+	}
+
+	public int getSymbolType() {
+		return CHARACTER_MARKER;
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r) {
+		g.rotate(getRotation());
+		// Sirve de algo el scaleInstance???
+		// g.setFont(font.deriveFont(scaleInstance));
+		double h = r.getHeight();
+		Font myFont = font.deriveFont(
+				(float) (h * FConstant.FONT_HEIGHT_SCALE_FACTOR)).deriveFont(
+						scaleInstance);
+		g.setFont(myFont);
+		g.setColor(color);
+		r.y = (int) h;
+
+		// center character in case the rectangle is not square
+		int x = r.x;
+		int y = r.y;
+		int width = (int) r.getHeight();
+		int height = (int) r.getWidth();
+		int diff = (width-height);
+		if (diff<0) {
+			x -= diff /2;
+		} else {
+			y += diff /2;
+		}
+
+		// and apply the offset
+		x = x + (int) offset.getX(); // TODO scale offset
+		y = y + (int) offset.getY(); // TODO scale offset
+		char[] text = new char[] { (char) symbol };
+		g.drawChars(text, 0, text.length, x, y);
+
+		// finally, draw the subsymbols if any
+		if (subSymbols!=null) {
+			for (int i = 0; i < subSymbols.length; i++) {
+				subSymbols[i].drawInsideRectangle(g, scaleInstance, r);
+			}
+		}
+	}
+
+	public void setCharacter(int symbol) {
+		this.symbol = symbol;
+	}
+
+	public String getClassName() {
+		return this.getClass().getName();
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		color = StringUtilities.string2Color(xml.getStringProperty("color"));
+		Point p = new Point();
+		p.setLocation(xml.getDoubleProperty("xOffset"), xml.getDoubleProperty("yOffset"));
+
+		desc = xml.getStringProperty("desc");
+		font = new Font(xml.getStringProperty("font"),
+				xml.getIntProperty("fontStyle"),
+				100 /* or whatever*/);
+		isShapeVisible = xml.getBooleanProperty("isShapeVisible");
+		symbol = xml.getIntProperty("symbolCode");
+		offset = p;
+		rotation = xml.getDoubleProperty("rotation");
+
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/CharacterMarkerSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleFillSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleFillSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleFillSymbol.java	(revision 30230)
@@ -0,0 +1,192 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.7  2006-11-14 11:10:27  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/11/09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/09 10:22:50  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/08 13:05:51  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/08 10:56:47  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+/**
+ * Basic fill symbol. It will allow to paint a shape with its filling color (and transparency)
+ * and the outline.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class SimpleFillSymbol extends AbstractFillSymbol {
+	private SimpleFillSymbol symbolForSelection;
+
+	public ISymbol getSymbolForSelection() {
+		if (symbolForSelection == null) {
+			XMLEntity xml = getXMLEntity();
+			xml.putProperty("color", StringUtilities.color2String(Color.YELLOW));
+			symbolForSelection = (SimpleFillSymbol) SymbolFactory.
+					createFromXML(xml, getDescription()+" version for selection");
+		}
+		return symbolForSelection;
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		g.setColor(color);
+		g.fill(shp);
+		g.setColor(outline);
+		g.setStroke(new BasicStroke(1));
+		g.draw(shp);
+		for (int i = 0; i < layers.length; i++) {
+			layers[i].draw(g, affineTransform, shp);
+		}
+	}
+
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform,
+			Shape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+
+		// the class name
+		xml.putProperty("className", getClassName());
+
+		// color
+		xml.putProperty("color", StringUtilities.color2String(color));
+
+		// outline
+		xml.putProperty("outline", StringUtilities.color2String(outline));
+
+		// description
+		xml.putProperty("desc", desc);
+
+		// is shape visible
+		xml.putProperty("isShapeVisible", isShapeVisible);
+
+		// layers
+		if (layers!=null)
+			for (int i = 0; i < layers.length; i++) {
+				xml.addChild(layers[i].getXMLEntity());
+			}
+		return xml;
+	}
+
+	public int getSymbolType() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public void drawInsideRectangle(Graphics2D g,
+			AffineTransform scaleInstance, Rectangle r) {
+		int height = (int) r.getHeight();
+		int width = (int) r.getWidth();
+		g.setColor(color);
+		for (int i = 0; i < height; i++) {
+			g.drawLine(0, i, width, i);
+		}
+		g.setColor(outline);
+		// TODO canviar esto per draw de AbstractLineSymbol
+		g.drawRect(0, 0, width, height);
+
+
+		r.setFrame(((int) r.getMinX())+1, ((int) r.getMinY())+1, ((int) r.getMaxX())-1, ((int) r.getMaxY())-1);
+		for (int i = 0; layers != null && i < layers.length; i++) {
+			layers[i].drawInsideRectangle(g, scaleInstance, r);
+		}
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		// color
+		color = StringUtilities.string2Color(xml.getStringProperty("color"));
+
+		// outline
+		outline = StringUtilities.string2Color(xml.getStringProperty("outline"));
+
+		// description
+		desc = xml.getStringProperty("desc");
+
+		// is shape visible
+		isShapeVisible = xml.getBooleanProperty("isShapeVisible");
+
+		// layers
+		layers = new ISymbol[xml.getChildrenCount()];
+		for (int i = 0; i < layers.length; i++) {
+			layers[i] = SymbolFactory.createFromXML(xml.getChild(i), null);
+		}
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SimpleFillSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractMarkerSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractMarkerSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractMarkerSymbol.java	(revision 30230)
@@ -0,0 +1,177 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4  2006-12-04 17:13:39  fjp
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/14 11:10:27  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/10/26 16:27:33  jaume
+* support for composite marker symbols (not tested)
+*
+* Revision 1.2  2006/10/26 07:46:58  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/25 10:50:41  jaume
+* movement of classes and gui stuff
+*
+* Revision 1.1  2006/10/18 07:54:06  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+
+/**
+ * Abstract class that any MARKER SYMBOL should extend.
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public abstract class AbstractMarkerSymbol implements ISymbol {
+	protected Color color = Color.BLACK;
+	protected boolean isShapeVisible = true;
+	protected String desc;
+	protected double rotation;
+	protected Point2D offset;
+	protected ISymbol[] subSymbols; // TODO maybe push it up to ISymbol
+
+	public String getDescription() {
+		return desc;
+	}
+
+	public boolean isShapeVisible() {
+		return isShapeVisible;
+	}
+	public void setDescription(String desc) {
+		this.desc = desc;
+	}
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	public void setRotation(double r) {
+		this.rotation = r;
+	}
+	public Point2D getOffset() {
+		if (offset == null) {
+			offset = new Point();
+		}
+		return offset;
+	}
+
+	public void setOffset(Point offset) {
+		this.offset = offset;
+	}
+
+	/**
+	 * TODO maybe push it up to ISymbol
+	 * @param sym
+	 */
+	public void addSymbol(ISymbol sym) {
+		int capacity = 0;
+		if (subSymbols != null)
+			capacity = subSymbols.length;
+		ArrayList lst = new ArrayList(capacity);
+		for (int i = 0; i < capacity; i++) {
+			lst.add(subSymbols[i]);
+		}
+		subSymbols = (ISymbol[])lst.toArray(new ISymbol[0]);
+	}
+
+	/**
+	 * TODO maybe push it up to ISymbol
+	 * @param sym
+	 * @return true if this symbol contains the removed one
+	 */
+	public boolean removeSymbol(ISymbol sym) {
+
+		int capacity = 0;
+		if (subSymbols != null)
+			capacity = subSymbols.length;
+		ArrayList lst = new ArrayList(capacity);
+		for (int i = 0; i < capacity; i++) {
+			lst.add(subSymbols[i]);
+		}
+		boolean contains = lst.remove(sym);
+		subSymbols = (ISymbol[])lst.toArray(new ISymbol[0]);
+		return contains;
+	}
+
+	public boolean isSuitableFor(IGeometry geom) {
+		return geom.getGeometryType() == FShape.POINT;
+	}
+
+	public int getOnePointRgb() {
+		return color.getRGB();
+	}
+	
+	public void setPrintingProperties(PrintRequestAttributeSet printProperties) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/AbstractMarkerSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SymbolFactory.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SymbolFactory.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SymbolFactory.java	(revision 30230)
@@ -0,0 +1,121 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.3  2006-11-06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.2  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.1  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import com.iver.andami.messages.NotificationManager;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.NotExistInXMLEntity;
+import com.iver.utiles.XMLEntity;
+
+/**
+ * Factory for obtaining ISymbols of any kind from several sources like.
+ * <ol>
+ * 	<li>
+ * 		<b>XMLEntity's</b> that, at least, contains a full class name
+ * 			string property that defines which class handles such symbol.
+ *  </li>
+ * </ol>
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ */
+public class SymbolFactory {
+	/**
+	 * Factory that allows to create ISymbol from an ISymbol xml
+	 * descriptor. A barely specific XMLEntity object. The string passed in the
+	 * second argument is the description text that will be used in case no description
+	 * is supplied by the symbol
+	 */
+	public static ISymbol createFromXML(XMLEntity xml, String defaultDescription) {
+		String className = null;
+		try {
+			className = xml.getStringProperty("className");
+		} catch (NotExistInXMLEntity e) {
+			NotificationManager.
+				addError("Symbol class name not set.\n" +
+						" Maybe you forgot to add the" +
+						" putProperty(\"className\", yourClassName)" +
+						" call in the getXMLEntity method of your symbol", e);
+		}
+
+		if (!xml.contains("desc"))
+			xml.putProperty("desc", defaultDescription);
+
+		Class clazz = null;
+		ISymbol sym = null;
+
+		try {
+			clazz = Class.forName(className);
+			sym = (ISymbol) clazz.newInstance();
+			sym.setXMLEntity(xml);
+		} catch (InstantiationException e) {
+			NotificationManager.
+				addError("Trying to instantiate an interface" +
+						" or abstract class + "+className, e);
+		} catch (IllegalAccessException e) {
+			NotificationManager.addError(null, e);
+		} catch (ClassNotFoundException e) {
+			NotificationManager.addError("No class called " + className +
+					" was found.\nCheck the following.\n<br>" +
+					"\t- The fullname of the class you're looking " +
+						"for matches the value in the className " +
+						"property of the XMLEntity ("+className+").\n<br>" +
+					"\t- The jar file containing your symbol class is in" +
+						"the application classpath<br>", e);
+		}
+		return sym;
+	}
+}
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/SymbolFactory.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/MarkerFillSymbol.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/MarkerFillSymbol.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/MarkerFillSymbol.java	(revision 30230)
@@ -0,0 +1,283 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.10  2006-11-09 18:39:05  jaume
+* *** empty log message ***
+*
+* Revision 1.9  2006/11/09 10:22:50  jaume
+* *** empty log message ***
+*
+* Revision 1.8  2006/11/08 13:05:51  jaume
+* *** empty log message ***
+*
+* Revision 1.7  2006/11/08 10:56:47  jaume
+* *** empty log message ***
+*
+* Revision 1.6  2006/11/07 08:52:30  jaume
+* *** empty log message ***
+*
+* Revision 1.5  2006/11/06 17:08:45  jaume
+* *** empty log message ***
+*
+* Revision 1.4  2006/11/06 16:06:52  jaume
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/06 07:33:54  jaume
+* javadoc, source style
+*
+* Revision 1.2  2006/10/31 16:16:34  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/10/30 19:30:35  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.core.symbols;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.TexturePaint;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+public class MarkerFillSymbol extends AbstractFillSymbol {
+	private double rotation;
+	private AbstractMarkerSymbol markerSymbol = new CharacterMarkerSymbol();
+	private boolean grid = true;
+	private double xOffset = 0;
+	private double yOffset = 0;
+	private double xSeparation = 20;
+	private double ySeparation = 20;
+
+	public boolean isGrid() {
+		return grid;
+	}
+
+	public void setGrid(boolean grid) {
+		this.grid = grid;
+	}
+
+	public AbstractMarkerSymbol getMarkerSymbol() {
+		return markerSymbol;
+	}
+
+	public void setMarkerSymbol(AbstractMarkerSymbol markerSymbol) {
+		this.markerSymbol = markerSymbol;
+	}
+
+	public double getRotation() {
+		return rotation;
+	}
+
+	public void setRotation(double rotation) {
+		this.rotation = rotation;
+	}
+
+	public double getXOffset() {
+		return xOffset;
+	}
+
+	public void setXOffset(double offset) {
+		xOffset = offset;
+	}
+
+	public double getXSeparation() {
+		return xSeparation;
+	}
+
+	public void setXSeparation(double separation) {
+		xSeparation = separation;
+	}
+
+	public double getYOffset() {
+		return yOffset;
+	}
+
+	public void setYOffset(double offset) {
+		yOffset = offset;
+	}
+
+	public double getYSeparation() {
+		return ySeparation;
+	}
+
+	public void setYSeparation(double separation) {
+		ySeparation = separation;
+	}
+
+	public ISymbol getSymbolForSelection() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public void draw(Graphics2D g, AffineTransform affineTransform, FShape shp) {
+		g.setColor(null);
+		g.setStroke(new BasicStroke(0));
+		int w=7;
+		int h=7;
+
+		BufferedImage bi = null;
+
+
+		Rectangle rProv = new Rectangle();
+		rProv.setFrame(0, 0,w,h);
+
+		Paint resulPatternFill = null;
+		bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+		Graphics2D gAux = bi.createGraphics();
+		markerSymbol.drawInsideRectangle(gAux, new AffineTransform(), rProv);
+		resulPatternFill = new TexturePaint(bi,rProv);
+		g.setColor(null);
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+				RenderingHints.VALUE_ANTIALIAS_ON);
+
+		g.setPaint(resulPatternFill);
+		g.fill(shp);
+		//g.draw(shp);
+		if (layers!=null)  {
+			for (int i = 0; i < layers.length; i++) {
+				layers[i].draw(g, affineTransform, shp);
+			}
+		}
+	}
+
+	public int getPixExtentPlus(Graphics2D g, AffineTransform affineTransform, Shape shp) {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public XMLEntity getXMLEntity() {
+		XMLEntity xml = new XMLEntity();
+		xml.putProperty("className", getClassName());
+		// color
+		xml.putProperty("color", StringUtilities.color2String(color));
+
+		xml.putProperty("rotation", rotation);
+		xml.putProperty("grid", grid);
+		xml.putProperty("xOffset", xOffset);
+		xml.putProperty("yOffset", yOffset);
+		xml.putProperty("xSeparation", xSeparation);
+		xml.putProperty("ySeparation", ySeparation);
+
+		xml.addChild(markerSymbol.getXMLEntity());
+		return xml;
+	}
+
+	public int getSymbolType() {
+		// TODO Auto-generated method stub
+		throw new Error("Not yet implemented!");
+	}
+
+	public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r) {
+		if (isGrid()) {
+			// Use a TexturePaint
+			int w=7;
+			int h=7;
+
+			BufferedImage bi = null;
+
+			Rectangle rProv = new Rectangle();
+			rProv.setFrame(0, 0,w,h);
+
+			Paint resulPatternFill = null;
+			bi= new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+			Graphics2D gAux = bi.createGraphics();
+			markerSymbol.drawInsideRectangle(gAux, new AffineTransform(), rProv);
+			resulPatternFill = new TexturePaint(bi,rProv);
+			g.setColor(null);
+			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+					RenderingHints.VALUE_ANTIALIAS_ON);
+
+			g.setPaint(resulPatternFill);
+			g.fill(r);
+			g.drawRect(0, 0, r.width, r.height);
+		} else {
+			Point2D[] points = ramdonizePoints(r);
+			for (int i = 0; i < points.length; i++) {
+
+			}
+		}
+	}
+
+	private Point2D[] ramdonizePoints(Rectangle r) {
+		ArrayList points = new ArrayList();
+			throw new Error("Not yet implemented!");
+//		return (Point2D[]) points.toArray(new Point2D[0]);
+	}
+
+	public String getClassName() {
+		return getClass().getName();
+	}
+
+	public void setXMLEntity(XMLEntity xml) {
+		rotation = xml.getDoubleProperty("rotation");
+		grid = xml.getBooleanProperty("grid");
+		xOffset = xml.getDoubleProperty("xOffset");
+		yOffset = xml.getDoubleProperty("yOffset");
+		xSeparation = xml.getDoubleProperty("xSeparation");
+		ySeparation = xml.getDoubleProperty("ySeparation");
+		markerSymbol = (AbstractMarkerSymbol) SymbolFactory.
+							createFromXML(xml.getChild(0), null);
+	}
+
+	public void setMarker(AbstractMarkerSymbol marker) {
+		this.markerSymbol = marker;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/core/symbols/MarkerFillSymbol.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/rendering/DotDensityLegend.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/rendering/DotDensityLegend.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/rendering/DotDensityLegend.java	(revision 30230)
@@ -0,0 +1,148 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.2  2006-11-17 12:49:58  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/11/14 12:30:26  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.rendering;
+
+import java.awt.Color;
+
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.hardcode.gdbms.engine.values.Value;
+import com.iver.cit.gvsig.fmap.core.IFeature;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.DotDensityFillSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.SimpleFillSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.SymbolFactory;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+
+public class DotDensityLegend extends VectorialUniqueValueLegend {
+
+
+    private double dotValue;
+
+    public ISymbol getSymbolByValue(Value key) {
+        SimpleFillSymbol sym = (SimpleFillSymbol) getDefaultSymbol();
+        ((DotDensityFillSymbol) sym.getLayerByIndex(0)).
+            setDotCount((int) (((NumericValue) key).doubleValue()/dotValue));
+        return sym;
+    }
+
+    public ISymbol getSymbolByFeature(IFeature feat) {
+        return getSymbolByValue(feat.getAttribute(fieldId));
+    }
+
+    public void setDotValue(double dotValue) {
+        this.dotValue = dotValue;
+    }
+
+    public XMLEntity getXMLEntity() {
+        XMLEntity xml = new XMLEntity();
+        xml.putProperty("className", getClass().getName());
+        xml.putProperty("dotValue", dotValue);
+        xml.putProperty("fieldName", getFieldName());
+        xml.addChild(getDefaultSymbol().getXMLEntity());
+        return xml;
+    }
+
+    public void setXMLEntity(XMLEntity xml) {
+        dotValue = xml.getDoubleProperty("dotValue");
+        setFieldName(xml.getStringProperty("fieldName"));
+        setDefaultSymbol(SymbolFactory.createFromXML(xml.getChild(0), null));
+    }
+
+    public Color getOutlineColor() {
+    	try {
+            XMLEntity xml = getDefaultSymbol().getXMLEntity();
+        	return StringUtilities.string2Color(xml.getStringProperty("outline"));
+        } catch (NullPointerException npE) {
+        	return null;
+        }
+    }
+
+    public Color getDotColor() {
+    	try {
+            XMLEntity xml = getDefaultSymbol().getXMLEntity().getChild(0);
+        	return StringUtilities.string2Color(xml.getStringProperty("color"));
+        } catch (NullPointerException npE) {
+        	return null;
+        }
+    }
+
+    public Color getBGColor() {
+    	try {
+            XMLEntity xml = getDefaultSymbol().getXMLEntity();
+        	return StringUtilities.string2Color(xml.getStringProperty("color"));
+        } catch (NullPointerException npE) {
+        	return null;
+        }
+    }
+
+    public double getDotValue() {
+    	try {
+        	XMLEntity xml = getXMLEntity();
+    		return xml.getDoubleProperty("dotValue");
+    	} catch (NullPointerException npE) {
+    		return 0;
+    	}
+    }
+
+    public double getDotSize() {
+    	try {
+    		XMLEntity xml = getDefaultSymbol().getXMLEntity().getChild(0);
+    		return xml.getDoubleProperty("dotSize");
+    	} catch (NullPointerException npE) {
+    		return -1; // TODO define default
+    	}
+    }
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/rendering/DotDensityLegend.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/layers/LayerListenerAdapter.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/layers/LayerListenerAdapter.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/layers/LayerListenerAdapter.java	(revision 30230)
@@ -0,0 +1,104 @@
+/*
+ * Created on 06-nov-2006
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.1  2006-11-07 19:49:55  azabala
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.fmap.layers;
+
+/**
+ * Empty implementation of LayerCollectionListener
+ * 
+ * (allows to extending classes to implements only interesting
+ * methods, for example, only listen for layer selection events)
+ * 
+ * */
+public class LayerListenerAdapter implements LayerCollectionListener, LayerListener {
+
+	public void layerAdded(LayerCollectionEvent e) {
+	}
+
+	public void layerMoved(LayerPositionEvent e) {
+	}
+
+	public void layerRemoved(LayerCollectionEvent e) {
+	}
+
+	public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+	}
+
+	public void layerMoving(LayerPositionEvent e) throws CancelationException {
+	}
+
+	public void layerRemoving(LayerCollectionEvent e)
+			throws CancelationException {
+	}
+
+	public void activationChanged(LayerCollectionEvent e)
+			throws CancelationException {
+	}
+
+	public void visibilityChanged(LayerCollectionEvent e)
+			throws CancelationException {
+	}
+
+	public void visibilityChanged(LayerEvent e) {
+	}
+
+	public void activationChanged(LayerEvent e) {
+	}
+
+	public void nameChanged(LayerEvent e) {
+	}
+
+	public void editionChanged(LayerEvent e) {
+	}
+
+}
+

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/fmap/layers/LayerListenerAdapter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/SymbolTest.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/SymbolTest.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/SymbolTest.java	(revision 30230)
@@ -0,0 +1,154 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.preferences.IPreference;
+import com.iver.andami.preferences.IPreferenceExtension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.IGeometry;
+import com.iver.cit.gvsig.fmap.core.ISymbol;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.rendering.FGraphic;
+import com.iver.cit.gvsig.graph.preferences.RoutePage;
+import com.iver.cit.gvsig.gvsig.gui.styling.SymbolSelector;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+
+public class SymbolTest extends Extension implements IPreferenceExtension{
+	private static final IPreference thePreferencePage = new RoutePage();
+
+	public void initialize() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void execute(String actionCommand) {
+		IWindow w = PluginServices.getMDIManager().getActiveWindow();
+
+		View v = (View) w;
+		MapControl mCtrl = v.getMapControl();
+		MapContext mc = mCtrl.getMapContext();
+
+		GraphicLayer graphicLayer = mc.getGraphicsLayer();
+
+
+		if (actionCommand.equals("DALE!")) {
+			FLayer lyr = null;
+
+			SymbolSelector symSel = new SymbolSelector(null, FShape.POLYGON);
+			PluginServices.getMDIManager().addWindow(symSel);
+			ISymbol sym = symSel.getSymbol();
+//			DotDensityFillSymbol sym = new DotDensityFillSymbol();
+//			sym.setDotColor(Color.RED);
+//			sym.setDotCount(20);
+//			sym.setDotSize(2);
+
+			FLayer[] actives = mc.getLayers().getActives();
+			for (int i = 0; i < actives.length; i++) {
+				if (actives[i] instanceof FLyrVect)
+					lyr = actives[i];
+			}
+			if (lyr == null) {
+				System.err.println("no hay capas");
+				return;
+			}
+			FLyrVect l = (FLyrVect) lyr;
+			int idSymbol = graphicLayer.addSymbol(sym);
+			graphicLayer.clearAllGraphics();
+			try {
+				SelectableDataSource sds = l.getRecordset();
+				long rows = sds.getRowCount();
+				for (int i = 0; i < rows; i++) {
+					IGeometry geom = l.getSource().getShape(i);
+					System.err.println(i+") "+geom.toString());
+					FGraphic gra = new FGraphic(geom, idSymbol);
+					graphicLayer.addGraphic(gra);
+				}
+
+
+			} catch (DriverException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (DriverIOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			mCtrl.drawGraphics();
+		} else if (actionCommand.equals("CLEAN_GRAPHICS")) {
+			graphicLayer.clearAllGraphics();
+		}
+	}
+
+	public boolean isEnabled() {
+		return true;
+	}
+
+	public boolean isVisible() {
+		IWindow w = PluginServices.getMDIManager().getActiveWindow();
+		try {
+			View v = (View) w;
+			MapContext mc = v.getMapControl().getMapContext();
+			FLayer[] actives = mc.getLayers().getActives();
+			for (int i = 0; i < actives.length; i++) {
+				if (actives[i] instanceof FLyrVect)
+					return true;
+			}
+		} catch (Exception e) {}
+		return false;
+	}
+
+	public IPreference getPreferencesPage() {
+		return thePreferencePage;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/SymbolTest.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/PanelLegendDotDensity.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/PanelLegendDotDensity.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/PanelLegendDotDensity.java	(revision 30230)
@@ -0,0 +1,568 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+
+/* CVS MESSAGES:
+*
+* $Id$
+* $Log$
+* Revision 1.4.2.1  2007-04-20 07:49:39  caballero
+* cambio de key para el símbolo
+*
+* Revision 1.4  2006/11/17 13:53:45  cesar
+* *** empty log message ***
+*
+* Revision 1.3  2006/11/17 12:50:36  jaume
+* tamaño de punto defecto 2
+*
+* Revision 1.2  2006/11/15 12:57:31  jaume
+* *** empty log message ***
+*
+* Revision 1.1  2006/11/14 11:10:27  jaume
+* *** empty log message ***
+*
+*
+*/
+package com.iver.cit.gvsig.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.ComponentOrientation;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.sql.Types;
+import java.text.NumberFormat;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.values.NumericValue;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.cit.gvsig.fmap.core.FShape;
+import com.iver.cit.gvsig.fmap.core.symbols.DotDensityFillSymbol;
+import com.iver.cit.gvsig.fmap.core.symbols.SimpleFillSymbol;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.fmap.rendering.DotDensityLegend;
+import com.iver.cit.gvsig.fmap.rendering.Legend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend;
+import com.iver.cit.gvsig.gui.panels.ColorChooserPanel;
+import com.iver.cit.gvsig.project.documents.view.legend.gui.ILegendPanel;
+import com.iver.utiles.StringUtilities;
+import com.iver.utiles.XMLEntity;
+
+/**
+ *
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class PanelLegendDotDensity extends JPanel implements ILegendPanel {
+	private FLyrVect layer;
+	private JPanel northPanel = null;
+	private GridBagLayoutPanel densityButtonsPanel = null;
+	private JPanel pnlDensities = null;
+	private JComboBox cmbLegendField = null;
+	private JRadioButton rdBtnHigh = null;
+	private JRadioButton rdBtnMedium = null;
+	private JRadioButton rdBtnLow = null;
+	private JTextField numDotSize = null;
+	private double max, min, mean;
+	private JTextField nmbrDotValue = null;
+	private JLabel lblLabellingField = null;
+	private DotDensityLegend legend;
+	private String fieldName;
+	private MyListener cmbAction = new MyListener();
+	NumberFormat nf = NumberFormat.getInstance();
+
+	{
+		nf.setMaximumFractionDigits(3);
+	}
+
+	private class MyListener implements ItemListener, ActionListener {
+
+		public void itemStateChanged(ItemEvent e) {
+			doIt();
+		}
+
+		public void actionPerformed(ActionEvent e) {
+			doIt();
+		}
+
+		private void doIt() {
+			int index = cmbLegendField.getSelectedIndex();
+            try {
+                SelectableDataSource sds = layer.getRecordset();
+
+                if (index != -1) {
+                    fieldName = (String) cmbLegendField.getSelectedItem();
+                } else {
+                    fieldName = (String) cmbLegendField.getItemAt(0);
+                }
+
+                String sql = "select "+fieldName+" from '"+sds.getName()+"';";
+
+                DataSource recordset = sds.getDataSourceFactory().executeSQL(sql, DataSourceFactory.AUTOMATIC_OPENING );
+                // TODO implement MAX() and MIN() functions in GDBMS!!!!!
+                max = Double.MIN_VALUE;
+                min = Double.MAX_VALUE;
+                for (int i = 0; i < sds.getRowCount(); i++) {
+                    double value = ((NumericValue) recordset.getFieldValue(i,0)).doubleValue();
+                    max = Math.max(max, value);
+                    min = Math.min(min, value);
+                }
+                mean = (max+min) /2;
+                buttonsListener.actionPerformed(null);
+
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+		}
+	};
+	private ActionListener buttonsListener = new ActionListener() {
+    	public void actionPerformed(ActionEvent e) {
+    		if (getRdBtnHigh().isSelected()) {
+    			getSldDensity().setValue(66);
+    		} else if (getRdBtnLow().isSelected()) {
+    			getSldDensity().setValue(33);
+    		} else if (getRdBtnMedium().isSelected()) {
+    			getSldDensity().setValue(50);
+    		}
+    	}
+    };
+	private JPanel centerPanel = null;
+	private JSlider sldDensity = null;
+	private JPanel pnlSldDensity;
+	private ChangeListener sldListener = new ChangeListener() {
+
+		public void stateChanged(ChangeEvent e) {
+
+			// This is my messy statistic aggregation function
+			// TODO if I can, I'll have a look to my statistic books to figure out one better
+			int quantileIndex = getSldDensity().getValue();
+			final int topLimit = 98;
+			if (quantileIndex > topLimit)
+				quantileIndex = topLimit;
+			double quantileAmount = (max-min)/100;
+			nmbrDotValue.setText(nf.format(3*quantileAmount/Math.log(quantileIndex)));
+		}
+
+	};
+	private ColorChooserPanel jcc;
+	private ColorChooserPanel outlineColorChooserPanel;
+	public PanelLegendDotDensity() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(new java.awt.Dimension(492,278));
+        this.add(getNorthPanel(), java.awt.BorderLayout.NORTH);
+
+        this.add(getCenterPanel(), java.awt.BorderLayout.CENTER);
+    }
+
+    public void setLayer(FLayer lyr, Legend legend) {
+        this.layer = (FLyrVect) lyr;
+        try {
+        	SelectableDataSource sds = layer.getRecordset();
+        	cmbLegendField.removeItemListener(cmbAction);
+        	cmbLegendField.removeAllItems();
+        	String[] fNames = sds.getFieldNames();
+        	for (int i = 0; i < fNames.length; i++) {
+        		if (isNumericField(sds.getFieldType(i))) {
+        			cmbLegendField.addItem(fNames[i]);
+        		}
+        	}
+        	if (!(legend instanceof DotDensityLegend)) {
+        		legend = new DotDensityLegend();
+        		((DotDensityLegend) legend).setFieldName((String) cmbLegendField.getItemAt(0));
+        	}
+
+        	DotDensityLegend theLegend = (DotDensityLegend) legend;
+
+        	cmbLegendField.addItemListener(cmbAction);
+        	cmbLegendField.addActionListener(cmbAction);
+        	cmbLegendField.setSelectedItem(theLegend.getFieldName());
+        	try {
+        		getDotColorChooserPanel().setColor(theLegend.getDotColor());
+        	} catch (NullPointerException npEx) {
+        		getDotColorChooserPanel().setColor(Color.RED);
+        	}
+        	try {
+        		getOutlineColorChooserPanel().setColor(theLegend.getOutlineColor());
+        	} catch (NullPointerException npEx) {
+        		getOutlineColorChooserPanel().setColor(Color.BLACK);
+        	}
+        	try {
+        		double dotValue = theLegend.getDotValue();
+        		if (dotValue <= 0)
+        			dotValue = 100;
+        		getNmbrDotValue().setText(String.valueOf(dotValue));
+        	} catch (NullPointerException npEx) {
+        		getNmbrDotValue().setText(String.valueOf(max));
+        	}
+        	try {
+        		double dotSize = theLegend.getDotSize();
+        		if (dotSize <= 0)
+        			dotSize = 2;
+        		getNumDotSize().setText(String.valueOf(dotSize));
+        	} catch (NullPointerException npEx) {
+        		getNumDotSize().setText(String.valueOf(3));
+        	}
+
+        } catch (Exception e) {
+        	e.printStackTrace();
+        }
+    }
+
+    private boolean isNumericField(int fieldType) {
+        switch (fieldType) {
+        case Types.BIGINT:
+        case Types.DECIMAL:
+        case Types.DOUBLE:
+        case Types.FLOAT:
+        case Types.INTEGER:
+        case Types.NUMERIC:
+        case Types.REAL:
+        case Types.SMALLINT:
+        case Types.TINYINT:
+            return true;
+        default:
+            return false;
+        }
+
+    }
+
+    public Legend getLegend() {
+    	try {
+			SimpleFillSymbol symbol = null;
+
+
+    		int shapeType = layer.getShapeType(); // should be always polygon
+    		if (shapeType != FShape.POLYGON) {
+    			NotificationManager.addError(PluginServices.getText(this, "cannot_apply_to_a_non_polygon_layer"), new Exception());
+    		}
+    		SelectableDataSource sds;
+    		sds = layer.getRecordset();
+    		if (-1 == sds.getFieldIndexByName(fieldName))
+    			return null;
+
+    		double dotValue;
+    		double dotSize;
+    		try {
+    			dotValue = Double.parseDouble(nmbrDotValue.getText());
+    		} catch (Exception e) {
+    			dotValue = nf.parse(nmbrDotValue.getText()).doubleValue();
+    		}
+    		if (dotValue == 0)
+    			dotValue = 1;
+    		try {
+    			dotSize = Double.parseDouble(numDotSize.getText());
+    		} catch (Exception e) {
+    			dotSize = nf.parse(numDotSize.getText()).doubleValue();
+    		}
+    		DotDensityFillSymbol densitySym = new DotDensityFillSymbol();
+    		densitySym.setDotSize(dotSize);
+    		densitySym.setDotColor(getDotColorChooserPanel().getColor());
+    		symbol = new SimpleFillSymbol();
+    		XMLEntity xml = symbol.getXMLEntity();
+    		xml.putProperty("color", StringUtilities.color2String(Color.WHITE));
+    		xml.putProperty("outline", StringUtilities.color2String(getOutlineColorChooserPanel().getColor()));
+
+    		xml.addChild(densitySym.getXMLEntity());
+    		symbol.setXMLEntity(xml);
+
+    		legend = new DotDensityLegend();
+    		legend.addSymbol(ValueFactory.createValue("theSymbol"), symbol);
+    		legend.setDefaultSymbol(symbol);
+    		legend.setDotValue(dotValue);
+    		legend.setFieldName(fieldName);
+
+
+    	} catch (Exception e) {
+    		NotificationManager.addError(PluginServices.getText(this, "could_not_setup_legend"), e);
+    	}
+    	return legend;
+
+    }
+
+    /**
+     * This method initializes centerPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getNorthPanel() {
+        if (northPanel == null) {
+            lblLabellingField = new JLabel();
+            lblLabellingField.setText(PluginServices.getText(this, "labelling_field"));
+            northPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,15,0));
+            northPanel.add(lblLabellingField, null);
+            northPanel.add(getCmbLegendField(), null);
+
+        }
+        return northPanel;
+    }
+
+    private ColorChooserPanel getDotColorChooserPanel() {
+    	if (jcc == null) {
+    		jcc = new ColorChooserPanel() ;
+    		jcc.setAlpha(255);
+    	}
+    	return jcc;
+	}
+
+	/**
+     * This method initializes southPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getDensityButtonsPanel() {
+        if (densityButtonsPanel == null) {
+        	densityButtonsPanel = new GridBagLayoutPanel();
+        	LayoutManager layout = new FlowLayout(FlowLayout.LEADING, 0,0);
+        	JPanel aux = new JPanel(layout);
+        	aux.add(getNumDotSize());
+        	densityButtonsPanel.addComponent(
+        			PluginServices.getText(this, "dot_size"), aux);
+        	aux = new JPanel(layout);
+        	aux.add(getNmbrDotValue());
+            densityButtonsPanel.addComponent(
+            		PluginServices.getText(this,"dot_value"), aux);
+            aux = new JPanel(layout);
+            aux.add(getDotColorChooserPanel());
+            densityButtonsPanel.addComponent(
+            		PluginServices.getText(this, "color"), aux);
+            aux = new JPanel(layout);
+            aux.add(getOutlineColorChooserPanel());
+            densityButtonsPanel.addComponent(
+            		PluginServices.getText(this, "outline_color"), aux);
+        }
+        return densityButtonsPanel;
+    }
+
+    private ColorChooserPanel getOutlineColorChooserPanel() {
+    	if (outlineColorChooserPanel == null) {
+    		outlineColorChooserPanel = new ColorChooserPanel();
+    		outlineColorChooserPanel.setAlpha(255);
+    	}
+    	return outlineColorChooserPanel;
+	}
+
+	/**
+     * This method initializes pnlDensities
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlDensities() {
+        if (pnlDensities == null) {
+            pnlDensities = new JPanel(new BorderLayout(5,0));
+            pnlDensities.setBorder(BorderFactory.createTitledBorder(null,
+					PluginServices.getText(this, "densities")));
+            JPanel aux2 = new JPanel();
+            JPanel aux;
+			aux = new JPanel(new GridLayout(1,3));
+            aux.add(new JLabel(PluginServices.getText(this, "high")));
+            aux.add(new JLabel(PluginServices.getText(this, "medium")));
+            aux.add(new JLabel(PluginServices.getText(this, "low")));
+
+            aux2.add(aux);
+
+			aux = new JPanel(new GridLayout(1,3));
+            aux.add(getRdBtnHigh());
+            aux.add(getRdBtnMedium());
+            aux.add(getRdBtnLow());
+
+            aux2.add(aux);
+            aux2.setLayout(new BoxLayout(aux2, BoxLayout.Y_AXIS));
+
+            pnlDensities.add(aux2, BorderLayout.NORTH);
+            pnlDensities.add(getSldDensity(), BorderLayout.CENTER);
+            pnlDensities.add(getDensityButtonsPanel(), BorderLayout.SOUTH);
+
+            ButtonGroup group = new ButtonGroup();
+            group.add(getRdBtnHigh());
+            group.add(getRdBtnLow());
+            group.add(getRdBtnMedium());
+            getRdBtnMedium().setSelected(true);
+        }
+        return pnlDensities;
+    }
+
+
+	/**
+     * This method initializes cmbLegendField
+     *
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbLegendField() {
+        if (cmbLegendField == null) {
+            cmbLegendField = new JComboBox();
+        }
+        return cmbLegendField;
+    }
+
+    /**
+     * This method initializes rdBtnHigh
+     *
+     * @return javax.swing.JRadioButton
+     */
+    private JRadioButton getRdBtnHigh() {
+        if (rdBtnHigh == null) {
+            rdBtnHigh = new JRadioButton(new ImageIcon(
+            		getClass().getClassLoader().
+            			getResource("images/high-density-sample.png")));
+            rdBtnHigh.addActionListener(buttonsListener);
+        }
+        return rdBtnHigh;
+    }
+
+    /**
+     * This method initializes rdBtnMedium
+     *
+     * @return javax.swing.JRadioButton
+     */
+    private JRadioButton getRdBtnMedium() {
+        if (rdBtnMedium == null) {
+            rdBtnMedium = new JRadioButton(new ImageIcon(
+            		getClass().getClassLoader().
+        			getResource("images/medium-density-sample.png")));
+            rdBtnMedium.addActionListener(buttonsListener);
+        }
+        return rdBtnMedium;
+    }
+
+    /**
+     * This method initializes rdBtnMax
+     *
+     * @return javax.swing.JRadioButton
+     */
+    private JRadioButton getRdBtnLow() {
+        if (rdBtnLow == null) {
+            rdBtnLow = new JRadioButton(new ImageIcon(
+            		getClass().getClassLoader().
+        			getResource("images/low-density-sample.png")));
+            rdBtnLow.addActionListener(buttonsListener);
+        }
+        return rdBtnLow;
+    }
+
+    /**
+     * This method initializes numDotSize
+     *
+     * @return de.ios.framework.swing.JNumberField
+     */
+    private JTextField getNumDotSize() {
+        if (numDotSize == null) {
+            numDotSize = new JTextField(4);
+        }
+        return numDotSize;
+    }
+
+	/**
+	 * This method initializes nmbrDotValue
+	 *
+	 * @return de.ios.framework.swing.JNumberField
+	 */
+	private JTextField getNmbrDotValue() {
+		if (nmbrDotValue == null) {
+			nmbrDotValue = new JTextField(15);
+
+		}
+		return nmbrDotValue;
+	}
+
+	/**
+	 * This method initializes centerPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getCenterPanel() {
+		if (centerPanel == null) {
+			centerPanel = new JPanel();
+			centerPanel.setLayout(new BorderLayout(5, 5));
+			centerPanel.add(getPnlDensities(), java.awt.BorderLayout.WEST);
+		}
+		return centerPanel;
+	}
+
+	/**
+	 * This method initializes sldDensity
+	 *
+	 * @return javax.swing.JSlider
+	 */
+	private JSlider getSldDensity() {
+		if (sldDensity == null) {
+			sldDensity = new JSlider();
+			sldDensity.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+			sldDensity.addChangeListener(sldListener);
+		}
+		return sldDensity;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/PanelLegendDotDensity.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FThemeManagerWindow2.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FThemeManagerWindow2.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FThemeManagerWindow2.java	(revision 30230)
@@ -0,0 +1,553 @@
+package com.iver.cit.gvsig.project.documents.view.legend.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+
+import org.exolab.castor.xml.MarshalException;
+import org.exolab.castor.xml.Marshaller;
+import org.exolab.castor.xml.ValidationException;
+
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.instruction.FieldNotFoundException;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.XMLException;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
+import com.iver.cit.gvsig.fmap.rendering.ClassifiedLegend;
+import com.iver.cit.gvsig.fmap.rendering.Legend;
+import com.iver.cit.gvsig.fmap.rendering.LegendFactory;
+import com.iver.cit.gvsig.fmap.rendering.SingleSymbolLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialLegend;
+import com.iver.cit.gvsig.gui.panels.LinkPanel;
+import com.iver.cit.gvsig.project.documents.view.IProjectView;
+import com.iver.cit.gvsig.project.documents.view.legend.CreateSpatialIndexMonitorableTask;
+import com.iver.cit.gvsig.project.documents.view.legend.scale.gui.FPanelScaleManager;
+import com.iver.utiles.GenericFileFilter;
+import com.iver.utiles.XMLEntity;
+import com.iver.utiles.swing.threads.IMonitorableTask;
+import com.iver.utiles.xmlEntity.generate.XmlTag;
+
+/**
+ * @author jmorell (jose.morell@gmail.com)
+ * @version 24-ene-2005
+ */
+public final class FThemeManagerWindow2 extends AbstractPanel implements IWindow {
+	private MapContext mapContext;
+	private FLayer layer;
+    private Legend renderer; // Le asignaremos la leyenda del primer tema activo.
+	private FPanelScaleManager fPanelScaleManager;
+    private FPanelLegendManager2 fPanelLegendManager;
+    private LinkPanel linkPanel;
+    private JTabbedPane organizador = new JTabbedPane();  //  @jve:decl-index=0:
+    private ComandosListener m_actionListener = new ComandosListener(this);
+	//private ProjectView view;
+	private NumberFormat nf = NumberFormat.getInstance();
+
+    /**
+     * Creates new form JPanel
+     */
+    public FThemeManagerWindow2() {
+        initialize();
+		this.setSize(650, 420);
+    }
+
+    /**
+     * Sobrecarga del constructor. Este se utiliza cuando se llama a este
+     * diálogo desde la barra de comandos.
+     *
+     */
+    public FThemeManagerWindow2(FLayer l, MapContext fMap) {
+    	initialize();
+    	layer = l;
+    	mapContext = fMap;
+		try {
+			ClassifiableVectorial aux = (ClassifiableVectorial) layer;
+			renderer = (Legend) aux.getLegend().cloneLegend();
+			fPanelScaleManager.setMapContext(mapContext);
+			fPanelLegendManager.setMapContext(mapContext);
+		} catch (XMLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+
+        fPanelScaleManager.setLayer(layer, renderer);
+        fPanelLegendManager.setLayer(layer, renderer);
+
+        organizador.setSelectedIndex(0);
+
+		this.setSize(650, 420);
+    }
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private  void initialize() {
+
+		fPanelScaleManager = new FPanelScaleManager();
+		fPanelLegendManager = new FPanelLegendManager2();
+
+		organizador.addTab(PluginServices.getText(this,"General"), fPanelScaleManager);
+		organizador.addTab(PluginServices.getText(this,"Simbologia"), fPanelLegendManager);
+
+        JPanel panelButtons = new JPanel();
+
+        JButton btnAceptar = new JButton(PluginServices.getText(this,"Aceptar"));
+        btnAceptar.setActionCommand("OK");
+        btnAceptar.addActionListener(m_actionListener);
+
+        JButton btnApply = new JButton(PluginServices.getText(this,"Aplicar"));
+        btnApply.setActionCommand("APPLY");
+        btnApply.addActionListener(m_actionListener);
+
+        JButton btnSaveLegend = new JButton(PluginServices.getText(this,"Guardar_leyenda")+"...");
+        btnSaveLegend.setActionCommand("SAVE_LEGEND");
+        btnSaveLegend.addActionListener(m_actionListener);
+
+        JButton btnLoadLegend = new JButton(PluginServices.getText(this,"Recuperar_leyenda")+"...");
+        btnLoadLegend.setActionCommand("LOAD_LEGEND");
+        btnLoadLegend.addActionListener(m_actionListener);
+
+        JButton btnCancelar = new JButton(PluginServices.getText(this,"Cerrar"));
+        btnCancelar.setActionCommand("CANCEL");
+        btnCancelar.addActionListener(m_actionListener);
+
+        panelButtons.add(btnApply, null);
+
+		setLayout(new BorderLayout());
+		panelButtons.setLayout(null);
+		organizador.setPreferredSize(new java.awt.Dimension(640,390));
+		btnAceptar.setBounds(9, 5, 89, 23);
+		btnApply.setBounds(107, 5, 89, 23);
+		btnSaveLegend.setBounds(205, 5, 159, 23);
+		btnLoadLegend.setBounds(373, 5, 159, 23);
+		btnCancelar.setBounds(541, 5, 89, 23);
+		panelButtons.setPreferredSize(new java.awt.Dimension(493,33));
+		add(organizador, java.awt.BorderLayout.NORTH);
+		panelButtons.add(btnAceptar, null);
+		add(panelButtons, java.awt.BorderLayout.SOUTH);
+		panelButtons.add(btnSaveLegend, null);
+		panelButtons.add(btnLoadLegend, null);
+		panelButtons.add(btnCancelar, null);
+	}
+
+
+
+    /**
+     * En esta función se coge el primer tema activo del TOC y se usa su
+     * renderer para inicializar. Hay que llamarla SIEMPRE que se abra el
+     * cuadro de diálogo, en el  openLegendManager() de la vista.
+     *
+     * @param mapContext TOC que abre este cuadro de diálogo.
+     * @throws DriverException
+     */
+    public void setMapContext(MapContext mapContext) throws DriverException {
+        this.mapContext = mapContext;
+        layer = getFirstActiveLayerVect(mapContext.getLayers());
+		try {
+			ClassifiableVectorial aux = (ClassifiableVectorial) layer;
+			renderer = (Legend) aux.getLegend().cloneLegend();
+		} catch (XMLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		fPanelScaleManager.setMapContext(mapContext);
+		fPanelLegendManager.setMapContext(mapContext);
+        actualizar();
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    private void actualizar() {
+    	FLayer lyrSelected = getFirstActiveLayerVect(mapContext.getLayers());
+
+        fPanelScaleManager.setLayer(lyrSelected, renderer);
+        fPanelLegendManager.setLayer(lyrSelected, renderer);
+
+        organizador.setSelectedIndex(0);
+    }
+
+    private void btnApply_actionPerformed(ActionEvent evt) {
+       // ClassifiableVectorial aux = (ClassifiableVectorial) layer;
+
+    	switch (fPanelLegendManager.getVisibleCard()) {
+        case 0: // default symbol
+            renderer = fPanelLegendManager.getM_defaultLegendPanel().getLegend();
+            fPanelLegendManager.getJComboBox().getModel().setSelectedItem(layer.getName() + PluginServices.getText(this,"_(Simbolo_unico)"));
+            break;
+        case 1: // Unique Values
+            renderer = fPanelLegendManager.getM_valuesLegendPanel().getLegend();
+            fPanelLegendManager.getJComboBox().getModel().setSelectedItem(layer.getName() + "_(Valores_unicos)");
+            break;
+        case 2:// break values
+           	renderer = fPanelLegendManager.getM_breaksLegendPanel().getLegend();
+            fPanelLegendManager.getJComboBox().getModel().setSelectedItem(layer.getName() + "_(Intervalos)");
+           	break;
+        case 3://text
+        	fPanelLegendManager.getJComboBox().getModel().setSelectedItem(layer.getName() + "_(Etiquetas_estandar)");
+        	break;
+        case 4://
+        	renderer = fPanelLegendManager.getPanelDotDensityLegend().getLegend();
+        	break;
+        }
+        // System.out.println("Color punto 1 " + renderer.getDefaultSymbol().getColor().toString());
+    	// fPanelLegendManager.getM_labelsLegendPanel().setFSymbol(renderer.getDefaultSymbol());
+    	// boolean bShapesVisibles = renderer.getDefaultSymbol().isShapeVisible();
+    	fPanelLegendManager.getM_labelsLegendPanel().updateValuesFromControls((VectorialLegend)renderer);
+    	// renderer.getDefaultSymbol().setShapeVisible(bShapesVisibles);
+        // System.out.println("Color punto 2 " + renderer.getDefaultSymbol().getColor().toString());
+        try {
+			// Intentamos aplicar la leyenda a todas
+            // las capas activas a las que se les pueda aplicar
+            FLayer[] activeLyrs =  mapContext.getLayers().getActives();
+            for (int i=0; i < activeLyrs.length; i++)
+            {
+            	FLayer laux=activeLyrs[i];
+            	if (activeLyrs[i] instanceof FLayers){
+            		laux=getFirstActiveLayerVect((FLayers)activeLyrs[i]);
+            	}
+                if (laux instanceof ClassifiableVectorial)
+                {
+                    ClassifiableVectorial aux2 = (ClassifiableVectorial) laux;
+                    if (renderer instanceof ClassifiedLegend)
+                    {
+                        // Es una leyenda que necesita un recordset con un
+                        // nombre de campo. Comprobamos que ese recordset
+                        // tiene ese nombre de campo y es del tipo esperado
+                        ClassifiedLegend cl = (ClassifiedLegend) renderer;
+                        if (aux2 instanceof AlphanumericData)
+                        {
+                            DataSource rs = ((AlphanumericData) aux2).getRecordset();
+                            if (cl.getValues().length==0) {
+                            	JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),PluginServices.getText(this,"no_es_posible_aplicar_leyenda_vacia"));
+                            	return;
+                            }
+                            int idField = rs.getFieldIndexByName(cl.getFieldName());
+                            if (idField != -1)
+                            {
+                                //TODO: Aquí deberíamos comprobar si el tipo de campo
+                                // es el tipo de campo esperado.
+                            	/*if (renderer instanceof VectorialUniqueValueLegend){
+                            		((VectorialUniqueValueLegend)renderer).setLabelHeightField(null);
+                            		((VectorialUniqueValueLegend)renderer).setLabelRotationField(null);
+                            	}
+                            	*/
+                                aux2.setLegend((VectorialLegend) renderer);
+                            }
+
+                        }
+                    }
+                    else if (renderer instanceof SingleSymbolLegend)
+                        aux2.setLegend((VectorialLegend) renderer);
+                }
+
+            }
+			// aux.setLegend((VectorialLegend) m_Renderer);
+
+		} catch (FieldNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (DriverException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+		if (fPanelScaleManager.getJRadioButton1().isSelected()) {
+			try
+			{
+				layer.setMinScale((nf.parse(fPanelScaleManager.getJTextField1().getText())).doubleValue());
+			}
+			catch (ParseException ex)
+			{
+			    if (fPanelScaleManager.getJTextField1().getText().compareTo("") == 0)
+			        layer.setMinScale(-1);
+			    else
+			        System.err.print(ex.getLocalizedMessage());
+			}
+			try
+			{
+			    layer.setMaxScale((nf.parse(fPanelScaleManager.getJTextField2().getText())).doubleValue());
+			}
+			catch (ParseException ex)
+			{
+			    if (fPanelScaleManager.getJTextField2().getText().compareTo("") == 0)
+			        layer.setMaxScale(-1);
+			    else
+			        System.err.print(ex.getLocalizedMessage());
+			}
+
+		} else {
+	        layer.setMinScale(-1);
+	        layer.setMaxScale(-1);
+		}
+		if (!fPanelScaleManager.getLayerName().equals(layer.getName())){
+			layer.setName(fPanelScaleManager.getLayerName());
+		}
+        if (layer instanceof FLyrVect)
+        {
+            FLyrVect lyrVect = (FLyrVect) layer;
+            if (fPanelScaleManager.isSpatialIndexSelected())
+            {
+//                if (lyrVect.getSpatialIndex() == null)
+            	if(lyrVect.getISpatialIndex() == null)
+                {
+                	//AZABALA
+                	try {
+						PluginServices.
+							cancelableBackgroundExecution(getCreateSpatialIndexTask());
+					} catch (DriverIOException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					} catch (DriverException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+//                    lyrVect.createSpatialIndex();
+                }
+            }
+            //AZABALA
+            /*
+             * If we unselect the spatial index checkbox...Must we delete
+             * spatial index file, or we only have to put Spatial Index
+             * reference to null?. I have followed the second choice
+             */
+            else{
+                lyrVect.deleteSpatialIndex();
+            }
+
+
+        }
+		//layer.getFMap().invalidate();
+		layer.getMapContext().callLegendChanged();
+    }
+
+
+    /**
+     * Instanciates a ITask (@see com.iver.utiles.swing.threads.ITask)
+     * to create a spatial index for the selected layer in background.
+     * This task also allow to monitor process evolution, and to cancel
+     * this process.
+     * @throws DriverException
+     * @throws DriverIOException
+     */
+    public IMonitorableTask getCreateSpatialIndexTask() throws DriverIOException,
+    															DriverException{
+
+//    	  FIXME REVISAR ESTO (Quizas lanzar TaskException)
+			return new CreateSpatialIndexMonitorableTask((FLyrVect)layer);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @author Fernando González Cortés
+     */
+    private class ComandosListener implements ActionListener {
+        private FThemeManagerWindow2 fLayerPropertiesWindow;
+
+        /**
+         * Creates a new ComandosListener object.
+         *
+         * @param lg DOCUMENT ME!
+         */
+        public ComandosListener(FThemeManagerWindow2 fLayerPropertiesWindow) {
+        	this.fLayerPropertiesWindow = fLayerPropertiesWindow;
+        }
+
+        /* (non-Javadoc)
+         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+         */
+        public void actionPerformed(ActionEvent e) {
+            if (e.getActionCommand() == "OK") {
+                // Implementación para hacer funcionar el hyperlink ...
+                //com.iver.cit.gvsig.gui.View theView = (com.iver.cit.gvsig.gui.View)PluginServices.getMDIManager().getActiveView();
+                //ProjectView view = theView.getModel();
+            	if (PluginServices.getMainFrame() != null)
+            	{
+            		IProjectView view = fPanelScaleManager.getView();
+            		view.setTypeLink(fPanelScaleManager.getLinkType());
+            		if (fPanelScaleManager.getSelectedLinkField()!=null)
+            		{
+            			view.setSelectedField(fPanelScaleManager.getSelectedLinkField().toString().trim());
+            			view.setExtLink(fPanelScaleManager.getExtensionLink());
+            		}
+            	}
+                //
+                fLayerPropertiesWindow.btnApply_actionPerformed(e);
+            	if (PluginServices.getMainFrame() == null)
+            		((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+            	else
+            		PluginServices.getMDIManager().closeWindow(FThemeManagerWindow2.this);
+                System.out.println("Ok");
+            } else if (e.getActionCommand() == "CANCEL") {
+            	if (PluginServices.getMainFrame() == null)
+            		((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+            	else
+            		PluginServices.getMDIManager().closeWindow(FThemeManagerWindow2.this);
+                System.out.println("CANCEL");
+            } else if (e.getActionCommand() == "APPLY") {
+                fLayerPropertiesWindow.btnApply_actionPerformed(e);
+                System.out.println("APPLY");
+            } else if (e.getActionCommand() == "LOAD_LEGEND") {
+	        	JFileChooser jfc = new JFileChooser();
+	    		jfc.addChoosableFileFilter(new GenericFileFilter("gvl",
+	    				PluginServices.getText(this, "tipo_de_leyenda")));
+	    		//jfc.addChoosableFileFilter(new GenericFileFilter("sld","sld"));
+
+	    		if (jfc.showOpenDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
+	    			File file=jfc.getSelectedFile();
+	    			if (!(file.getPath().endsWith(".gvl") || file.getPath().endsWith(".GVL")))
+	    			{
+	    				file=new File(file.getPath()+".gvl");
+	    			}
+	    			readLegend(file);
+	    			fPanelLegendManager.setRenderer(renderer);
+	    			fPanelLegendManager.actualizar();
+	    		}
+            } else if (e.getActionCommand() == "SAVE_LEGEND") {
+				fLayerPropertiesWindow.btnApply_actionPerformed(e);
+				JFileChooser jfc = new JFileChooser();
+				jfc.addChoosableFileFilter(new GenericFileFilter("sld","*.sld"));
+				jfc.addChoosableFileFilter(new GenericFileFilter("gvl",
+						PluginServices.getText(this, "tipo_de_leyenda")));
+
+
+				if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION)
+				{
+					File file=jfc.getSelectedFile();
+					if (jfc.getFileFilter().accept(new File("dummy.sld")))
+					{
+						if (!(file.getPath().toLowerCase().endsWith(".sld"))){
+							file=new File(file.getPath()+".sld");
+						}
+						export2SLD(file);
+					}
+					else{
+						if (!(file.getPath().toLowerCase().endsWith(".gvl"))){
+							file=new File(file.getPath()+".gvl");
+						}
+						writeLegend(file);
+					}
+				}
+            } else {}
+        }
+    }
+
+    private void export2SLD(File file) {
+		try {
+			FileWriter writer = new FileWriter(file.getAbsolutePath());
+			writer.write( renderer.getSLDString(layer.getName()));
+			writer.close();
+
+//			Marshaller m = new Marshaller(writer);
+//			m.setEncoding("ISO-8859-1");
+//			m.marshal(renderer.getSLDString());
+		} catch (Exception e) {
+			NotificationManager.addError(PluginServices.getText(this, "Error_exportando_SLD"), e);
+		}
+	}
+
+    private void writeLegend(File file) {
+		try {
+			FileWriter writer = new FileWriter(file.getAbsolutePath());
+			Marshaller m = new Marshaller(writer);
+			m.setEncoding("ISO-8859-1");
+			m.marshal(renderer.getXMLEntity().getXmlTag());
+		} catch (Exception e) {
+			NotificationManager.addError(PluginServices.getText(this, "Error_guardando_la_leyenda"), e);
+		}
+	}
+
+	public void readLegend(File file) {
+		try {
+			File xmlFile = new File(file.getAbsolutePath());
+			FileReader reader;
+			reader = new FileReader(xmlFile);
+
+			XmlTag tag = (XmlTag) XmlTag.unmarshal(reader);
+			renderer = LegendFactory.createFromXML(new XMLEntity(tag));
+			//fPanelLegendManager.setRenderer(LegendFactory.createFromXML(new XMLEntity(tag)));
+		} catch (FileNotFoundException e) {
+			NotificationManager.addError(PluginServices.getText(this, "Al_leer_la_leyenda"), e);
+		} catch (MarshalException e) {
+			NotificationManager.addError(PluginServices.getText(this, "Al_leer_la_leyenda"), e);
+		} catch (ValidationException e) {
+			NotificationManager.addError(PluginServices.getText(this, "Al_leer_la_leyenda"), e);
+		} catch (XMLException e) {
+			NotificationManager.addError(PluginServices.getText(this, "Al_leer_la_leyenda"), e);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		// Solo se llama una vez
+		WindowInfo viewInfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
+		viewInfo.setWidth(650);
+		viewInfo.setHeight(420);
+		viewInfo.setTitle(PluginServices.getText(this,"propiedades_de_la_capa"));
+		return viewInfo;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#viewActivated()
+	 */
+	/*public void viewActivated() {
+	}
+
+	public FMap getMapContext() {
+		return mapContext;
+	}
+	public FLayer getLayer() {
+		return layer;
+	}
+	public Legend getRenderer() {
+		return renderer;
+	}*/
+
+	/**
+	 * @return Returns the organizador.
+	 */
+	public JTabbedPane getOrganizador() {
+		return organizador;
+	}
+	/**
+	 * @param organizador The organizador to set.
+	 */
+	public void setOrganizador(JTabbedPane organizador) {
+		this.organizador = organizador;
+	}
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FThemeManagerWindow2.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FPanelLegendManager2.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FPanelLegendManager2.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FPanelLegendManager2.java	(revision 30230)
@@ -0,0 +1,520 @@
+package com.iver.cit.gvsig.project.documents.view.legend.gui;
+
+import java.awt.CardLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapContext;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.XMLException;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
+import com.iver.cit.gvsig.fmap.rendering.IntervalLegend;
+import com.iver.cit.gvsig.fmap.rendering.Legend;
+import com.iver.cit.gvsig.fmap.rendering.SingleSymbolLegend;
+import com.iver.cit.gvsig.fmap.rendering.UniqueValueLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialIntervalLegend;
+import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend;
+/**
+ *
+ * @author jmorell
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FPanelLegendManager2 extends AbstractPanel {
+
+ private ImageIcon iuniqueValues= new ImageIcon(this.getClass().getClassLoader()
+		 	.getResource("images/ValoresUnicos.png"));
+	private ImageIcon iintervalValues= new ImageIcon(this.getClass().getClassLoader()
+			.getResource("images/Intervalos.png"));
+//	private ImageIcon iuniqueValues= new ImageIcon("images/ValoresUnicos.png");
+//	private ImageIcon iintervalValues= new ImageIcon("images/Intervalos.png");
+	private MapContext mapContext;
+	private FLayer layer;
+    private Legend renderer; // Le asignaremos la leyenda del primer tema activo.
+    private FPanelLegendDefault m_defaultLegendPanel;
+    private FPanelLegendValues m_valuesLegendPanel;
+    private PanelLegendBreaks m_breaksLegendPanel;
+    private FPanelLegendLabels m_labelsLegendPanel;
+    private PanelLegendDotDensity dotDensityLegendPanel;
+    private JPanel cards;
+    private ComandosListener m_actionListener = new ComandosListener(this);
+    private int visibleCard;
+    private final String oneSymHelp = PluginServices.getText(this,"Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo");
+    private final String oneValHelp = PluginServices.getText(this,"Dado_un_campo_de_atributos") + "," + PluginServices.getText(this,"muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico") + ".";
+    private final String intervalsHelp = PluginServices.getText(this,"Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos") + ".";
+    private final String labelsHelp = PluginServices.getText(this,"Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo") + ".";
+    private final String dotDensityHelp = PluginServices.getText(this,"Defines_a_dot_density_symbol_based_on_a_field_value") + ".";
+
+	private JPanel topPanel = null;
+	private JLabel jLabel = null;
+	private JComboBox jComboBox = null;
+	private JButton jButton = null;
+	private JButton jButton1 = null;
+	private JCheckBox jCheckBox = null;
+	private JPanel jPanel = null;
+	private JTextArea titleTextArea = null;
+
+	private JPanel jPanel1 = null;
+
+	private JRadioButton symbolButton;
+	private JRadioButton valuesButton;
+	private JRadioButton intervalsButton;
+	private JRadioButton labelsButton;
+
+	private JScrollPane jScrollPane = null;
+	private JRadioButton dotDensityButton = null;
+	public FPanelLegendManager2() {
+		initialize();
+		this.setSize(500, 360);
+	}
+
+    private void initialize() {
+		visibleCard=0;
+        JPanel selector = new JPanel();
+        selector.setLayout(null);
+
+        symbolButton = new JRadioButton();
+        symbolButton.setText(PluginServices.getText(this,"Simbolo_unico"));
+        symbolButton.setActionCommand("SYMBOL_CHOICE");
+        symbolButton.addActionListener(m_actionListener);
+
+        valuesButton = new JRadioButton();
+        valuesButton.setText(PluginServices.getText(this,"Valores_unicos"));
+        valuesButton.setActionCommand("VALUES_CHOICE");
+        valuesButton.addActionListener(m_actionListener);
+
+        intervalsButton = new JRadioButton();
+        intervalsButton.setText(PluginServices.getText(this,"Intervalos"));
+        intervalsButton.setActionCommand("BREAKS_CHOICE");
+        intervalsButton.addActionListener(m_actionListener);
+
+		labelsButton = new JRadioButton();
+		labelsButton.setText(PluginServices.getText(this,"Etiquetados"));
+		labelsButton.setActionCommand("LABELS_CHOICE");
+		labelsButton.addActionListener(m_actionListener);
+
+		dotDensityButton = new JRadioButton();
+		dotDensityButton.setText(PluginServices.getText(this, "dot_density"));
+		dotDensityButton.setActionCommand("DOT_DENSITY_CHOICE");
+		dotDensityButton.addActionListener(m_actionListener);
+
+		ButtonGroup jButtonGroup = new ButtonGroup();
+		jButtonGroup.add(symbolButton);
+		jButtonGroup.add(valuesButton);
+		jButtonGroup.add(intervalsButton);
+		jButtonGroup.add(labelsButton);
+		jButtonGroup.add(dotDensityButton);
+
+
+    	//Create the cards.
+        m_defaultLegendPanel = new FPanelLegendDefault();
+        m_valuesLegendPanel = new FPanelLegendValues();
+        m_breaksLegendPanel = new PanelLegendBreaks();
+        m_labelsLegendPanel = new FPanelLegendLabels(this);
+        dotDensityLegendPanel = new PanelLegendDotDensity();
+
+        //Create the panel that contains the cards.
+        cards = new JPanel(new CardLayout());
+        this.setLayout(null);
+        selector.setBounds(5, 41, 134, 197);
+        selector.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+        selector.setBackground(java.awt.SystemColor.text);
+        cards.setBounds(143, 88, 502, 270);
+        cards.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        symbolButton.setBounds(5, 5, 131, 23);
+        symbolButton.setSelected(true);
+        symbolButton.setBackground(java.awt.SystemColor.text);
+        valuesButton.setBounds(5, 28, 131, 23);
+        valuesButton.setBackground(java.awt.SystemColor.text);
+        intervalsButton.setBounds(5, 51, 131, 23);
+        intervalsButton.setBackground(java.awt.SystemColor.text);
+        labelsButton.setBounds(5, 74, 131, 23);
+        labelsButton.setBackground(java.awt.SystemColor.text);
+        dotDensityButton.setBounds(5,97,131,21);
+		dotDensityButton.setBackground(java.awt.SystemColor.text);
+        this.setSize(649, 377);
+        cards.add(m_defaultLegendPanel, "symbol");
+        this.add(selector, null);
+        selector.add(symbolButton, null);
+        cards.add(m_valuesLegendPanel, "values");
+        this.add(cards, null);
+        selector.add(valuesButton, null);
+        cards.add(m_breaksLegendPanel, "breaks");
+        selector.add(intervalsButton, null);
+        this.add(getTopPanel(), null);
+        cards.add(m_labelsLegendPanel, "labels");
+        selector.add(labelsButton, null);
+        cards.add(dotDensityLegendPanel, "dot_density");
+        selector.add(dotDensityButton, null);
+        this.add(getJPanel(), null);
+        this.add(getPreviewPanel(), null);
+    }
+
+
+
+    /**
+     * En esta función se coge el primer tema activo del TOC y se usa su
+     * renderer para inicializar. Hay que llamarla SIEMPRE que se abra el
+     * cuadro de diálogo, en el  openLegendManager() de la vista.
+     *
+     * @param mapContext TOC que abre este cuadro de diálogo.
+     * @throws DriverException
+     */
+    public void setMapContext(MapContext mapContext) throws DriverException {
+        this.mapContext = mapContext;
+        layer = getFirstActiveLayerVect(mapContext.getLayers());
+		try {
+			ClassifiableVectorial aux = (ClassifiableVectorial) layer;
+			renderer = aux.getLegend().cloneLegend();
+		} catch (XMLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+        actualizar();
+    }
+
+    /**
+     * DOCUMENT ME!
+     */
+    public void actualizar() {
+    	FLayer lyrSelected = getFirstActiveLayerVect(mapContext.getLayers());
+
+        m_defaultLegendPanel.setLayer(lyrSelected, renderer);
+        m_valuesLegendPanel.setLayer(lyrSelected, renderer);
+        m_breaksLegendPanel.setLayer(lyrSelected, renderer);
+        m_labelsLegendPanel.setLayer(lyrSelected, renderer);
+        dotDensityLegendPanel.setLayer(lyrSelected, renderer);
+        CardLayout cl = (CardLayout)(cards.getLayout());
+        if (renderer instanceof SingleSymbolLegend) {
+        	titleTextArea.setText(oneSymHelp);
+        	getPreviewPanel().removeAll();
+    		getPreviewPanel().add(m_defaultLegendPanel.getM_previewSymbol());
+    		getPreviewPanel().repaint();
+        	symbolButton.setSelected(true);
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Simbolo_unico") + ")");
+            cl.show(cards, "symbol");
+            setVisibleCard(0);
+        }
+        if (renderer instanceof UniqueValueLegend) {
+        	titleTextArea.setText(oneValHelp);
+        	getPreviewPanel().removeAll();
+        	getPreviewPanel().repaint();
+        	valuesButton.setSelected(true);
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Valores_unicos") + ")");
+            cl.show(cards, "values");
+            setVisibleCard(1);
+        }
+        if (renderer instanceof IntervalLegend) {
+        	titleTextArea.setText(intervalsHelp);
+        	getPreviewPanel().removeAll();
+    		getPreviewPanel().repaint();
+        	intervalsButton.setSelected(true);
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Intervalos") + ")");
+            cl.show(cards, "breaks");
+            setVisibleCard(2);
+        }
+
+    }
+
+	public void setLayer(FLayer lyr, Legend r) {
+		layer = lyr;
+		if (r instanceof SingleSymbolLegend) {
+			getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Simbolo_unico") + ")");
+			renderer = (SingleSymbolLegend)r;
+			getPreviewPanel().add(m_defaultLegendPanel.getM_previewSymbol());
+            CardLayout cl = (CardLayout)(cards.getLayout());
+            cl.show(cards, "symbol");
+            setVisibleCard(0);
+		} else if (r instanceof VectorialUniqueValueLegend) {
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Valores_unicos") + ")");
+			renderer = (VectorialUniqueValueLegend)r;
+            CardLayout cl = (CardLayout)(cards.getLayout());
+            cl.show(cards, "values");
+            setVisibleCard(1);
+		} else if (r instanceof VectorialIntervalLegend) {
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Intervalos") + ")");
+			renderer = (VectorialIntervalLegend)r;
+            CardLayout cl = (CardLayout)(cards.getLayout());
+            cl.show(cards, "breaks");
+            setVisibleCard(2);
+		} else {
+            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Etiquetas_estandar") + ")");
+			renderer = (SingleSymbolLegend)r;
+            CardLayout cl = (CardLayout)(cards.getLayout());
+            cl.show(cards, "labels");
+            setVisibleCard(3);
+		}
+	}
+
+    private class ComandosListener implements ActionListener {
+
+
+	//   private FPanelLegendManager fPanSimMan;
+
+        public ComandosListener(FPanelLegendManager2 fPanSimMan) {
+        //	this.fPanSimMan = fPanSimMan;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+        	getPreviewPanel().removeAll();
+
+            if (e.getActionCommand() == "SYMBOL_CHOICE") {
+            	titleTextArea.setText(oneSymHelp);
+        		getPreviewPanel().add(m_defaultLegendPanel.getM_previewSymbol());
+        	    CardLayout cl = (CardLayout)(cards.getLayout());
+                cl.show(cards, "symbol");
+                visibleCard=0;
+            } else if (e.getActionCommand() == "VALUES_CHOICE") {
+            	titleTextArea.setText(oneValHelp);
+        		getPreviewPanel().add(new JLabel(iuniqueValues));
+        	    CardLayout cl = (CardLayout)(cards.getLayout());
+                cl.show(cards, "values");
+                visibleCard=1;
+            } else if (e.getActionCommand() == "BREAKS_CHOICE") {
+            	titleTextArea.setText(intervalsHelp);
+        		getPreviewPanel().add(new JLabel(iintervalValues));
+        	    CardLayout cl = (CardLayout)(cards.getLayout());
+                cl.show(cards, "breaks");
+                visibleCard=2;
+            } else if (e.getActionCommand() == "LABELS_CHOICE") {
+            	titleTextArea.setText(labelsHelp);
+        		getPreviewPanel().add(m_labelsLegendPanel.getFPreviewSymbol());
+        	    CardLayout cl = (CardLayout)(cards.getLayout());
+                cl.show(cards, "labels");
+                visibleCard=3;
+            } else if (e.getActionCommand() == "DOT_DENSITY_CHOICE") {
+            	titleTextArea.setText(dotDensityHelp);
+//    TODO set a preview        	getPreviewPanel().add(dotDensityLegendPanel.getFPreviewSymbol());
+        	    CardLayout c1 = (CardLayout) (cards.getLayout());
+            	c1.show(cards, "dot_density");
+            	visibleCard=4;
+            } else {}
+        	getPreviewPanel().repaint();
+
+        }
+    }
+
+	public int getVisibleCard() {
+		return visibleCard;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getTopPanel() {
+		if (topPanel == null) {
+			jLabel = new JLabel();
+			topPanel = new JPanel();
+			topPanel.setLayout(null);
+			topPanel.setBounds(5, 5, 638, 31);
+			topPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jLabel.setBounds(6, 4, 68, 22);
+			jLabel.setText(PluginServices.getText(this,"Leyenda") + ":");
+			topPanel.add(jLabel, null);
+			topPanel.add(getJComboBox(), null);
+			topPanel.add(getJButton(), null);
+			topPanel.add(getJButton1(), null);
+			topPanel.add(getJCheckBox(), null);
+		}
+		return topPanel;
+	}
+	/**
+	 * This method initializes jComboBox
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	public JComboBox getJComboBox() {
+		if (jComboBox == null) {
+			jComboBox = new JComboBox();
+			jComboBox.setBounds(78, 5, 250, 22);
+		}
+		return jComboBox;
+	}
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setBounds(345, 4, 22, 22);
+			jButton.setEnabled(false);
+		}
+		return jButton;
+	}
+	/**
+	 * This method initializes jButton1
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton1() {
+		if (jButton1 == null) {
+			jButton1 = new JButton();
+			jButton1.setBounds(371, 4, 22, 22);
+			jButton1.setEnabled(false);
+		}
+		return jButton1;
+	}
+	/**
+	 * This method initializes jCheckBox
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getJCheckBox() {
+		if (jCheckBox == null) {
+			jCheckBox = new JCheckBox();
+			jCheckBox.setBounds(417, 4, 202, 22);
+			jCheckBox.setText(PluginServices.getText(this,"Leyenda_Por_Defecto"));
+			jCheckBox.setEnabled(false);
+		}
+		return jCheckBox;
+	}
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new JPanel();
+			jPanel.setLayout(null);
+			jPanel.setBounds(143, 39, 501, 46);
+			jPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+			jPanel.add(getJScrollPane(), null);
+		}
+		return jPanel;
+	}
+	/**
+	 * This method initializes jTextArea
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	private JTextArea getJTextArea() {
+		if (titleTextArea == null) {
+			titleTextArea = new JTextArea();
+			titleTextArea.setText(oneSymHelp);
+			titleTextArea.setBackground(java.awt.SystemColor.control);
+			titleTextArea.setLineWrap(true);
+			titleTextArea.setRows(0);
+			titleTextArea.setWrapStyleWord(false);
+			titleTextArea.setEditable(false);
+			titleTextArea.setPreferredSize(new java.awt.Dimension(495,40));
+		}
+		return titleTextArea;
+	}
+	/**
+	 * This method initializes jPanel1
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPreviewPanel() {
+		if (jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setBounds(6, 242, 132, 117);
+			jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+			jPanel1.setBackground(java.awt.SystemColor.text);
+		}
+		return jPanel1;
+	}
+	/**
+	 * @return Returns the m_breaksLegendPanel.
+	 */
+	public PanelLegendBreaks getM_breaksLegendPanel() {
+		return m_breaksLegendPanel;
+	}
+	/**
+	 * @param legendPanel The m_breaksLegendPanel to set.
+	 */
+	public void setM_breaksLegendPanel(PanelLegendBreaks legendPanel) {
+		m_breaksLegendPanel = legendPanel;
+	}
+	/**
+	 * @return Returns the m_defaultLegendPanel.
+	 */
+	public FPanelLegendDefault getM_defaultLegendPanel() {
+		return m_defaultLegendPanel;
+	}
+	/**
+	 * @param legendPanel The m_defaultLegendPanel to set.
+	 */
+	public void setM_defaultLegendPanel(FPanelLegendDefault legendPanel) {
+		m_defaultLegendPanel = legendPanel;
+	}
+	/**
+	 * @return Returns the m_labelsLegendPanel.
+	 */
+	public FPanelLegendLabels getM_labelsLegendPanel() {
+		return m_labelsLegendPanel;
+	}
+	/**
+	 * @param legendPanel The m_labelsLegendPanel to set.
+	 */
+	public void setM_labelsLegendPanel(FPanelLegendLabels legendPanel) {
+		m_labelsLegendPanel = legendPanel;
+	}
+	/**
+	 * @return Returns the m_valuesLegendPanel.
+	 */
+	public FPanelLegendValues getM_valuesLegendPanel() {
+		return m_valuesLegendPanel;
+	}
+
+	public PanelLegendDotDensity getPanelDotDensityLegend() {
+		return dotDensityLegendPanel;
+	}
+	/**
+	 * @param legendPanel The m_valuesLegendPanel to set.
+	 */
+	public void setM_valuesLegendPanel(FPanelLegendValues legendPanel) {
+		m_valuesLegendPanel = legendPanel;
+	}
+	/**
+	 * @return Returns the renderer.
+	 */
+	public Legend getRenderer() {
+		return renderer;
+	}
+	/**
+	 * @param renderer The renderer to set.
+	 */
+	public void setRenderer(Legend renderer) {
+		this.renderer = renderer;
+	}
+	/**
+	 * @param visibleCard The visibleCard to set.
+	 */
+	public void setVisibleCard(int visibleCard) {
+		this.visibleCard = visibleCard;
+	}
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setBounds(2, 2, 498, 42);
+			jScrollPane.setViewportView(getJTextArea());
+		}
+		return jScrollPane;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="26,17"
\ No newline at end of file

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/legend/gui/FPanelLegendManager2.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/gui/FPanelLocConfig2.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/gui/FPanelLocConfig2.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/gui/FPanelLocConfig2.java	(revision 30230)
@@ -0,0 +1,484 @@
+/*
+ * Created on 18-jun-2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.project.documents.view.gui;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListModel;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.plaf.basic.BasicArrowButton;
+
+import org.gvsig.gui.beans.swing.JButton;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.AddLayer;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.CancelationException;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLayers;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.Classifiable;
+import com.iver.cit.gvsig.project.documents.view.MapOverview;
+import com.iver.cit.gvsig.project.documents.view.legend.gui.FThemeManagerWindow2;
+
+/**
+ * @author FJP
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+public class FPanelLocConfig2 extends JPanel implements ActionListener,IWindow {
+	private javax.swing.JLabel jLabel = null;
+	private javax.swing.JList jList = null;  //  @jve:decl-index=0:visual-constraint="390,10"
+	private JButton jBtnAddLayer = null;  //
+	private JButton jBtnRemoveLayer = null;
+	private JButton jBtnEditLegend = null;
+	private JButton jBtnCancel = null;
+
+	//private JDialog m_Owner;
+	private MapControl mapCtrl;
+	private WindowInfo m_viewinfo = null;
+	private JPanel pnlButtons = null;  //  @jve:decl-index=0:visual-constraint="10,159"
+	private BasicArrowButton jBtnUp;
+	private BasicArrowButton jBtnDown;
+	/**
+	 * This is the default constructor
+	 */
+	public FPanelLocConfig2( MapControl mc) {
+		super();
+		mapCtrl = mc;
+		initialize();
+		refreshList();
+		updateControls(null);
+	}
+
+	private void refreshList()
+	{
+		DefaultListModel lstModel = (DefaultListModel) getJList().getModel();
+		lstModel.clear();
+		for (int i=mapCtrl.getMapContext().getLayers().getLayersCount()-1; i >=0; i--)
+		{
+			FLayer lyr = mapCtrl.getMapContext().getLayers().getLayer(i);
+			lstModel.addElement(lyr.getName());
+		}
+	}
+
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private  void initialize() {
+		this.setLayout(null);
+		this.setSize(550, 200);
+//		this.setPreferredSize(new java.awt.Dimension(370,200));
+		this.add(getJLabel(), null);
+		this.add(getJList(), null);
+		this.add(getJBtnUp(), null);
+		this.add(getJBtnDown(), null);
+		this.add(getJPanel(), null);
+	}
+	/**
+
+	 * This method initializes jLabel
+
+	 *
+
+	 * @return javax.swing.JLabel
+
+	 */
+	private javax.swing.JLabel getJLabel() {
+		if (jLabel == null) {
+			jLabel = new javax.swing.JLabel();
+			jLabel.setText(PluginServices.getText(this,"Capas_del_localizador")+":");
+			jLabel.setBounds(10, 15, 132, 25);
+		}
+		return jLabel;
+	}
+
+	/**
+
+	 * This method initializes jList
+
+	 *
+
+	 * @return javax.swing.JList
+
+	 */
+	private javax.swing.JList getJList() {
+		if (jList == null) {
+			jList = new javax.swing.JList(new DefaultListModel());
+			jList.setBounds(10, 49, 357, 139);
+			jList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			jList.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+			jList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					updateControls(e);
+				}
+			});
+
+		}
+		return jList;
+	}
+
+	private void updateControls(javax.swing.event.ListSelectionEvent e)
+	{
+		System.out.println("valueChanged()"); // TODO Auto-generated Event stub valueChanged()
+		DefaultListModel lstModel = (DefaultListModel) getJList().getModel();
+		int selIndex = jList.getSelectedIndex();
+		jBtnDown.setEnabled(false);
+		jBtnUp.setEnabled(false);
+
+		if (selIndex != -1)
+		{
+			if (lstModel.getSize() > 1)
+			{
+				if (selIndex < (lstModel.getSize()-1))
+					jBtnDown.setEnabled(true);
+
+				if (selIndex > 0)
+					jBtnUp.setEnabled(true);
+			}
+
+		}
+
+
+	}
+
+	/**
+
+	 * This method initializes jBtnUp
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private BasicArrowButton getJBtnUp() {
+		if (jBtnUp == null) {
+			jBtnUp = new javax.swing.plaf.basic.BasicArrowButton(
+					javax.swing.SwingConstants.NORTH);
+			jBtnUp.setBounds(374, 49, 25, 23);
+			jBtnUp.setToolTipText(PluginServices.getText(this,"Subir_capa"));
+			jBtnUp.addActionListener(this);
+			jBtnUp.setActionCommand("UP");
+
+		}
+		return jBtnUp;
+	}
+
+	/**
+
+	 * This method initializes jBtnDown
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private BasicArrowButton getJBtnDown() {
+		if (jBtnDown == null) {
+			jBtnDown = new javax.swing.plaf.basic.BasicArrowButton(
+					javax.swing.SwingConstants.SOUTH);
+			jBtnDown.setBounds(374, 164, 25, 23);
+			jBtnDown.setToolTipText(PluginServices.getText(this,"Bajar_capa"));
+			jBtnDown.setActionCommand("DOWN");
+			jBtnDown.addActionListener(this);
+		}
+		return jBtnDown;
+	}
+
+	/**
+
+	 * This method initializes jButton2
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private JButton getJBtnAddLayer() {
+		if (jBtnAddLayer == null) {
+			jBtnAddLayer = new JButton();
+			jBtnAddLayer.setText(PluginServices.getText(this,"Anadir_capa")+"...");
+			jBtnAddLayer.addActionListener(this);
+			jBtnAddLayer.setActionCommand("ADD_LAYER");
+		}
+		return jBtnAddLayer;
+	}
+
+	/**
+
+	 * This method initializes jBtnRemoveLayer
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private JButton getJBtnRemoveLayer() {
+		if (jBtnRemoveLayer == null) {
+			jBtnRemoveLayer = new JButton();
+			jBtnRemoveLayer.setText(PluginServices.getText(this,"Quitar_capa")+"...");
+			jBtnRemoveLayer.addActionListener(this);
+			jBtnRemoveLayer.setActionCommand("REMOVE_LAYER");
+
+		}
+		return jBtnRemoveLayer;
+	}
+
+	/**
+
+	 * This method initializes jBtnEditLegend
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private JButton getJBtnEditLegend() {
+		if (jBtnEditLegend == null) {
+			jBtnEditLegend = new JButton();
+			jBtnEditLegend.setText(PluginServices.getText(this,"Editar_leyenda")+"...");
+			jBtnEditLegend.addActionListener(this);
+			jBtnEditLegend.setActionCommand("EDIT_LEGEND");
+		}
+		return jBtnEditLegend;
+	}
+
+	/**
+
+	 * This method initializes jBtnCancel
+
+	 *
+
+	 * @return JButton
+
+	 */
+	private JButton getJBtnCancel() {
+		if (jBtnCancel == null) {
+			jBtnCancel = new JButton();
+			jBtnCancel.setText(PluginServices.getText(this,"Cerrar"));
+			jBtnCancel.setActionCommand("CANCEL");
+			jBtnCancel.addActionListener(this);
+
+		}
+		return jBtnCancel;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent e)
+	{
+		DefaultListModel lstModel = (DefaultListModel) getJList().getModel();
+		FLayers theLayers = mapCtrl.getMapContext().getLayers();
+       // IProjection proj = null;
+
+		int numLayers = theLayers.getLayersCount()-1;
+
+		if (e.getActionCommand() == "CANCEL")
+		{
+			if (PluginServices.getMainFrame() != null)
+			{
+				PluginServices.getMDIManager().closeWindow(FPanelLocConfig2.this);
+			}
+			else
+			{
+				((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+			}
+		}
+		if (e.getActionCommand() == "ADD_LAYER")
+		{
+            AddLayer addLayer = (AddLayer)PluginServices.getExtension( AddLayer.class);//new AddLayer();
+            //addLayer.initialize();
+            if (addLayer.addLayers(mapCtrl)) {
+	            refreshList();
+	            updateControls(null);
+            }
+            if (mapCtrl instanceof MapOverview){
+            	((MapOverview)mapCtrl).refreshExtent();
+            }
+
+ 		}
+		if (e.getActionCommand() == "REMOVE_LAYER")
+		{
+			if (jList.getSelectedIndex() != -1)
+			{
+				theLayers.removeLayer((String) lstModel.get(jList.getSelectedIndex()));
+				lstModel.remove(jList.getSelectedIndex());
+				///mapCtrl.drawMap();
+				updateControls(null);
+				  if (mapCtrl instanceof MapOverview){
+                	((MapOverview)mapCtrl).refreshExtent();
+                }
+			}
+		}
+		if (e.getActionCommand() == "EDIT_LEGEND")
+		{
+			int idSelec = jList.getSelectedIndex();
+			if (idSelec != -1)
+			{
+				FLayer lyr = theLayers.getLayer((String) lstModel.get(idSelec));
+				if (lyr instanceof Classifiable)
+				{
+					FThemeManagerWindow2 m_LegendEditor = new FThemeManagerWindow2();
+					try {
+						theLayers.setActive(false);
+						lyr.setActive(true);
+						m_LegendEditor.setMapContext(mapCtrl.getMapContext());
+					} catch (DriverException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+					if (PluginServices.getMainFrame() == null) {
+						JDialog dlg = new JDialog();
+
+						m_LegendEditor.setPreferredSize(m_LegendEditor.getSize());
+						dlg.getContentPane().add(m_LegendEditor);
+						dlg.setModal(true);
+						dlg.pack();
+						dlg.show();
+
+					} else {
+						PluginServices.getMDIManager().addWindow(m_LegendEditor);
+					}
+				}
+				else
+				{
+					JOptionPane.showMessageDialog(null, PluginServices.getText(this,"Solo_para_capas_vectoriales")+".");
+				}
+
+			}
+
+		}
+		if (e.getActionCommand() == "UP")
+		{
+			int idSelec = jList.getSelectedIndex();
+		    int fromIndex = idSelec;
+		    int toIndex = idSelec-1;
+		        FLayer aux = theLayers.getLayer((String) lstModel.get(fromIndex));
+		        try {
+					theLayers.moveTo(numLayers-fromIndex, numLayers-toIndex);
+				} catch (CancelationException e1) {
+					e1.printStackTrace();
+				}
+
+		        lstModel.remove(fromIndex);
+		        lstModel.add(toIndex,aux.getName());
+
+		        jList.setSelectedIndex(toIndex);
+
+		        ///mapCtrl.drawMap();
+		}
+		if (e.getActionCommand() == "DOWN")
+		{
+			int idSelec = jList.getSelectedIndex();
+		    int fromIndex = idSelec;
+		    int toIndex = idSelec+1;
+		        FLayer aux = theLayers.getLayer((String) lstModel.get(fromIndex));
+		        try {
+		        	theLayers.moveTo(numLayers-fromIndex, numLayers-toIndex);
+				} catch (CancelationException e1) {
+					e1.printStackTrace();
+				}
+
+		        lstModel.remove(fromIndex);
+		        lstModel.add(toIndex,aux.getName());
+
+		        jList.setSelectedIndex(toIndex);
+
+		        ///mapCtrl.drawMap();
+		}
+
+
+	}
+	/* (non-Javadoc)
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		if (m_viewinfo==null){
+    		m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG);
+			m_viewinfo.setTitle(PluginServices.getText(this,"Configurar_localizador"));
+			m_viewinfo.setWidth(this.getWidth()+8);
+			m_viewinfo.setHeight(this.getHeight()+8);
+		}
+			return m_viewinfo;
+		}
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#windowActivated()
+	 */
+	public void viewActivated() {
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel() {
+		if (pnlButtons == null) {
+			pnlButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
+			pnlButtons.setBounds(new java.awt.Rectangle(0,200, this.getWidth(),37));
+			pnlButtons.add(getJBtnAddLayer(), null);
+			pnlButtons.add(getJBtnRemoveLayer(), null);
+			pnlButtons.add(getJBtnEditLegend(), null);
+			pnlButtons.add(getJBtnCancel(), null);
+		}
+		return pnlButtons;
+	}
+
+        }  //  @jve:visual-info  decl-index=0 visual-constraint="10,10"

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/gui/FPanelLocConfig2.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/toc/FLyrVectEditPropertiesTocMenuEntry2.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/toc/FLyrVectEditPropertiesTocMenuEntry2.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/toc/FLyrVectEditPropertiesTocMenuEntry2.java	(revision 30230)
@@ -0,0 +1,172 @@
+package com.iver.cit.gvsig.project.documents.view.toc;
+
+import javax.swing.JDialog;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
+import com.iver.cit.gvsig.project.documents.view.legend.gui.FThemeManagerWindow2;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1.2.2  2007-04-10 14:38:10  jmvivo
+ * Sustituida la entrada del toc de 'propiedades'
+ *
+ * Revision 1.1.2.1  2007/04/10 11:05:45  jaume
+ * REMOVED UPDATE WINDOW PROPERTIES FROM build.xml
+ *
+ * Revision 1.1.2.1  2007/04/10 10:51:49  jaume
+ * *** empty log message ***
+ *
+ * Revision 1.2.2.2  2007/01/23 12:25:44  caballero
+ * No mostrar propiedades de una capa de anotaciones
+ *
+ * Revision 1.2.2.1  2006/11/15 04:10:44  jjdelcerro
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/10/02 13:52:34  jaume
+ * organize impots
+ *
+ * Revision 1.1  2006/09/15 10:41:30  caballero
+ * extensibilidad de documentos
+ *
+ * Revision 1.1  2006/09/12 15:58:14  jorpiell
+ * "Sacadas" las opcines del menú de FPopupMenu
+ *
+ *
+ */
+/**
+ * Muestra el menú de propiedades del tema.
+ *
+ * @author jmorell
+ */
+
+
+public class FLyrVectEditPropertiesTocMenuEntry2 extends AbstractTocContextMenuAction {
+	public String getGroup() {
+		return "group2"; //FIXME
+	}
+
+	public int getGroupOrder() {
+		return 20;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "propiedades");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			FLayer lyr = getNodeLayer(item);
+            if ((lyr instanceof ClassifiableVectorial)) {
+            	if (!((lyr instanceof FLyrVect) &&
+            			!((FLyrVect)lyr).isPropertiesMenuVisible())){
+            		if (!(lyr instanceof FLyrAnnotation))
+            			return true;
+            	}
+
+            }
+		}
+		return false;
+
+	}
+
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		FLayer[] actives = selectedItems;
+		FThemeManagerWindow2 fThemeManagerWindow;
+    	if (actives.length==1) {
+    		if (!actives[0].isAvailable()) return;
+    		System.out.println("openPliegoThemeProperties(): Una sola capa. Abrimos el panel para la capa " + actives[0]);
+    		fThemeManagerWindow = new FThemeManagerWindow2();
+    		try {
+    			fThemeManagerWindow.setMapContext(getMapContext());
+    		} catch (com.iver.cit.gvsig.fmap.DriverException e1) {
+    			e1.printStackTrace();
+    		}
+            //PluginServices.getMDIManager().addView(fThemeManagerWindow);
+    		if (PluginServices.getMainFrame() == null) {
+    			JDialog dlg = new JDialog();
+    			fThemeManagerWindow.setPreferredSize(fThemeManagerWindow.getSize());
+    			dlg.getContentPane().add(fThemeManagerWindow);
+    			dlg.setModal(false);
+    			dlg.pack();
+    			dlg.show();
+    		} else {
+    			PluginServices.getMDIManager().addWindow(fThemeManagerWindow);
+    		}
+    	} else {
+        	for (int i = 0; i < actives.length; i++){
+        		if (actives[0].isAvailable()) {
+        			System.out.println("openPliegoThemeProperties(): Muchas capas. Abrimos el panel para la capa " + actives[i]);
+        			fThemeManagerWindow = new FThemeManagerWindow2(actives[i], getMapContext());
+        			//PluginServices.getMDIManager().addView(fThemeManagerWindow);
+        			if (PluginServices.getMainFrame() == null) {
+        				JDialog dlg = new JDialog();
+        				fThemeManagerWindow.setPreferredSize(fThemeManagerWindow.getSize());
+        				dlg.getContentPane().add(fThemeManagerWindow);
+        				dlg.setModal(false);
+        				dlg.pack();
+        				dlg.show();
+        			} else {
+        				PluginServices.getMDIManager().addWindow(fThemeManagerWindow);
+        			}
+        		}
+        	}
+    	}
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/project/documents/view/toc/FLyrVectEditPropertiesTocMenuEntry2.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/AboutGraphExtension.java
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/AboutGraphExtension.java	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/AboutGraphExtension.java	(revision 30230)
@@ -0,0 +1,41 @@
+package com.iver.cit.gvsig;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.About;
+import com.iver.cit.gvsig.gui.panels.FPanelAbout;
+
+/**
+ * About extension.
+ *
+ * Add the about coments to the gvSIG About panel
+ */
+
+public class AboutGraphExtension extends Extension {
+
+	public void initialize() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void postInitialize() {
+		About about=(About)PluginServices.getExtension(About.class);
+		FPanelAbout panelAbout=about.getAboutPanel();
+		java.net.URL aboutURL = this.getClass().getResource(
+	        "/about.htm");
+	        panelAbout.addAboutUrl(PluginServices.getText(this,"piloto_de_redes"),aboutURL);
+	}
+
+	public void execute(String actionCommand) {
+
+	}
+
+	public boolean isEnabled() {
+		return false;
+	}
+
+	public boolean isVisible() {
+		return false;
+	}
+
+}

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/src/com/iver/cit/gvsig/AboutGraphExtension.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/Red and Cyan MarkerFi.ll+SimpleFill.sym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/Red and Cyan MarkerFi.ll+SimpleFill.sym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/Base Symbols/Marker Symbols/Red and Cyan SimpleFill.sym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/Base Symbols/Marker Symbols/Red and Cyan SimpleFill.sym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/restaurant.sym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/restaurant.sym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/smoking area.sym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/smoking area.sym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/Copia de smoking area.sym
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/symbols/General Symbols/Copia de smoking area.sym
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.cvsignore
===================================================================
--- tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.cvsignore	(revision 0)
+++ tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.cvsignore	(revision 30230)
@@ -0,0 +1 @@
+dist-src

Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native


Property changes on: tags/v1_9_RC1/prototypes/VectorialAvanzado/extensions/extGraph
___________________________________________________________________
Added: svn:ignore
   + dist-src


