Revision 438 2.1/trunk/doc/Fase 1/dt-visor-3d.rst

View differences:

dt-visor-3d.rst
70 70

  
71 71
A partir de una vista 2D, se desea representar la información cargada de forma tridimensional. Para ello, el usuario dispondrá de dos entradas de menú / botones para crear los dos tipos de visores: esférico y plano definidos en TYPE.SPHERE y TYPE.FLAT. Las dos entradas de menú ejecutarán una misma extensión, View3DExtension, la cual dependiendo del *action command* realizará una acción u otra. Pero antes de explicar la creación de visor el usuario debe definir parámetros o propiedades para la carga y gestión de las capas dentro del visor 3D.
72 72

  
73
Las capas tienen propiedades comunes, definidas en LayerProperties3D, y especificas que varían en función del tipo de capa, definidas en las subclases RasterLayerProperties3D y VectorialLayerProperties3D. La propiedades comunes son las siguientes:
73
Las capas tienen propiedades comunes, definidas en `LayerProperties3D`_, y especificas que varían en función del tipo de capa, definidas en las subclases ``RasterLayerProperties3D`` y ``VectorialLayerProperties3D``. La propiedades comunes son las siguientes:
74 74

  
75 75
* Nivel máximo de detalle: nivel máximo de detalle en la visualización de la capa. Cuanto más alto sea el número máximo de nivel de detalle más tiles se generarán y más espacio ocuparán en el disco.
76 76
* Nivel mínimo de detalle: nivel mínimo de detalle en la visualización de la capa. Cuanto más pequeño sea el número mínimo de nivel de detalle menos tiles se generarán y menos espacio ocuparán en el disco.
......
87 87

  
88 88
* Modo de carga elevación: permite indicar si el raster es de tipo elevación o no. 
89 89

  
90
Una vez definidas las propiedades 3D de la capas, se procede a la creación de un visor 3D. La extensión obtendrá la instancia única mediante el Locator y ejecutará el método ViewPanel3DManager#createViewPanel3D(MapContext, TYPE) pasándole como parámetro el mapContext de la vista activa y el tipo de visor dependiendo del *action command*. En la creación del visor, se accederá a la capas del MapContext para cargarlas obteniendo las propiedades asociadas a las capas mediante ViewPanel3D#getLayerProperties3D(FLayer) para determinar que tipo de LayerConverter instanciar.
90
Una vez definidas las propiedades 3D de la capas, se procede a la creación de un visor 3D. La extensión obtendrá la instancia única mediante el Locator y ejecutará el método ``ViewPanel3DManager#createViewPanel3D(MapContext, TYPE)`` pasándole como parámetro el mapContext de la vista activa y el tipo de visor dependiendo del *action command*. En la creación del visor, se accederá a la capas del MapContext para cargarlas obteniendo las propiedades asociadas a las capas mediante ``ViewPanel3D#getLayerProperties3D(FLayer)`` para determinar que tipo de LayerConverter instanciar.
91 91

  
92
Instanciado el conversor para la obtención de una capa WW se ejecutará el método LayerConverter#convert(FLayer) el cual realizará todo lo necesario para obtener la capa WW correspondiente. Una vez obtenida la capa se debe de añadir al componente WW y mostrar la ventan mediante ViewPanel3D#show().
92
Instanciado el conversor para la obtención de una capa WW se ejecutará el método ``LayerConverter#convert(FLayer)`` el cual realizará todo lo necesario para obtener la capa WW correspondiente. Una vez obtenida la capa se debe de añadir al componente WW y mostrar la ventana mediante ``ViewPanel3D#show()``.
93 93

  
94
Por otra parte cuando se activa un visor, se activan dos entradas de menú adicionales: Refrescar visor y Sincronizar enfoques. La entrada de menú Refrescar visor esta asociada a la extensión RefreshView3DExtension la cual obtendrá el MapControl3D del visor activo y ejecutará el método MapControl3D#reloadLayers(). La entrada de menú Sincronizar enfoques esta asociada a la extensión SynchronizeView3DExtension la cual obtendrá el enfoque de la vista 2D a la que esta enlazada para mover el enfoque del visor hasta que los dos enfoques estén sincronizados.
94
Por otra parte cuando se activa un visor, se activan dos entradas de menú adicionales: Refrescar visor y Sincronizar enfoques. La entrada de menú Refrescar visor esta asociada a la extensión RefreshView3DExtension la cual obtendrá el `MapControl3D`_ del visor activo y ejecutará el método ``MapControl3D#reloadLayers()``. La entrada de menú Sincronizar enfoques esta asociada a la extensión SynchronizeView3DExtension la cual obtendrá el enfoque de la vista 2D a la que esta enlazada para mover el enfoque del visor hasta que los dos enfoques estén sincronizados.
95 95

  
96
Integración con la librería NASA WW SDK
97
----------------------------------------
98

  
99
World Wind es una colección de componentes que de forma interactiva muestran información geográfica en 3D. Las aplicaciones o applets que usen la librería deberá integrar uno o más componentes dentro de su interfaz gráfica. World wind sigue el siguiente esquema:
100

  
101
.. image:: ../images/world-wind-diagram.png
102

  
103
* Globe: representa la forma del planeta y el terreno. Contiene un Tessellator el cual es el encargado de generar el terreno.
104
* Layer: las capas añaden las imágenes, objetos u otra información al globo. La capas se ajustan a la forma del globo y se mueven junto a el cuando el usuario navega por el espacio tridimensional.
105
* Model: junta el globo y las capas.
106
* View: determina la vista del usuario sobre el modelo. La vista se va modificando en base a los eventos de ususario que recibe.
107
* SceneController: asocia la vista con el modelo. Controla el tiempo y el renderizado del modelo.
108

  
109
Se pretende crear una nivel de abstracción que ofrezca a los consumidores de la librería la funcionalidades descritas en el análisis funcional de forma que no tengan que interactuar con la librería WW. La integración del plugin con la librería World Wind se ha diseñado del siguiente modo:
110

  
111
* El componente `ViewPanel3D`_ integra un componente ``WorldWindowGLJPanel``. ``WorldWindowGLJPanel`` es autocontenido y su propósito es servir la aplicación WorldWind mostrando el modelo definido (globo y capas).
112
* La librería posee unos archivos de configuración en XML que son cargados cuando la librería se registra. Estos archivos de configuración por un lado definen la clases que implementan los distintos servicios que ofrece la librería y por otro las capas que se cargan por defecto al crear un modelo básico.
113
* Además de esta configuración, es necesario configurar unos parámetros espeficios para crear un ``WorldWindowGLJPanel`` esférico o plano. Esta configuración se realiza al instanciar un objeto `ViewPanel3D`_. Dependiendo del modo indicado como parámetro, se establece una configuración u otra.
114
* La obtención de las capas WW a partir de capas de gvSIG se realiza mediante la clase `LayerConverter`_ la cual permite obtener la capa equivalente en WW a partir de una capa de gvSIG para añadirla a las capas del modelo WW. Se ha implementa un nuevo tipo de capa llamado RasterTiledImageLayer la cual gestiona la peticiones de tiles en tiempo para que se obtengan los datos directamente desde el DAL de gvSIG. Esta gestión se realiza mediante los objetos ``DefaultRetrieverFactory``, ``DefaultRasterRetriever``, ``DefaultRasterServer``, ``DefaultDataRasterReaderFactory``, ``DefaultDataRasterReader`` y ``DefaultDataRaster``.
115

  
96 116
SWING API
97 117
----------
98 118

  
......
102 122
* Package: or.gvsig.view3d.swing.api
103 123

  
104 124
View3DManager
105
********************
125
~~~~~~~~~~~~~~~~~~~~~~
106 126

  
107 127
Punto de entrada a la librería view3D. Proporciona métodos para la creación de visores, paneles de propiedades y obtención de las propiedades 3D de una capa.
108 128

  
109 129
* createViewPanel3D(MapContext theMapContext, TYPE type) : ViewPanel3D
110 130

  
111
Crea un objeto ViewPanel3D pasándole como parámetro el MapContext y el tipo de panel.
131
  Crea un objeto `ViewPanel3D`_ pasándole como parámetro el MapContext y el tipo de panel.
112 132

  
113 133
* getLayerProperties3D(FLayer layer) : LayerProperties3D
114 134

  
115
Obtiene las propiedades asociadas a un capa.
135
  Obtiene las propiedades asociadas a un capa.
116 136

  
117 137
* setLayerProperties3D(FLayer layer, LayerProperties3D properties) : void
118 138

  
119
Asigna las propiedades a la capa que recibe como parámetro.
139
  Asigna las propiedades a la capa que recibe como parámetro.
120 140

  
121 141
.. note::
122 142
  Falta especificar las propiedades relacionadas con la vista, las propiedades generales y sus interfaces.
123 143

  
124 144
MapControl3D
125
****************************
145
~~~~~~~~~~~~~~~~~~~~~~
126 146

  
127 147
Define el API del componente 3D.
128 148

  
129 149
* getMapContext() : MapContext
130 150

  
131
Obtiene el MapContext asociado al visor. Del MapContext asociado se extrae la información necesaria para la representación de los datos en 3D y la sincronización de enfoques.
151
  Obtiene el MapContext asociado al visor. Del MapContext asociado se extrae la información necesaria para la representación de los datos en 3D y la sincronización de enfoques.
132 152

  
133 153
* getType() : TYPE
134 154

  
135
Obtiene el tipo del visor. Devuelve un objeto enum que puede ser TPYE.SPHERE o TYPE.FLAT (ver `TYPE`_).
155
  Obtiene el tipo del visor. Devuelve un objeto enum que puede ser TPYE.SPHERE o TYPE.FLAT (ver `TYPE`_).
136 156

  
137 157
* getVerticalExaggeration() : double
138 158

  
139
Obtiene la exageración vertical del visor.
159
  Obtiene la exageración vertical del visor.
140 160

  
141 161
* reloadLayers() : void
142 162

  
143
Elimina las capas cargadas. Accede al MapContext asociado al visor y carga de nuevo las capas. Se usa para actualizar el visor con los posibles cambios realizados sobre la vista 2D.
163
  Elimina las capas cargadas. Accede al MapContext asociado al visor y carga de nuevo las capas. Se usa para actualizar el visor con los posibles cambios realizados sobre la vista 2D.
144 164

  
145 165
* setMapContext(MapContext theMapContext) : void
146 166

  
147
Establece el MapContext al visor y recarga la información mediante reloadLayers().
167
  Establece el MapContext al visor y recarga la información mediante reloadLayers().
148 168

  
149 169
* setVerticalExaggeration(double verticalExaggeration) : void
150 170

  
151
Establece las exageración vertical del visor.
171
  Establece las exageración vertical del visor.
152 172

  
153 173
* setAtmosphereVisibility(boolean visibility) : void
154 174

  
155
Asigna la visibilidad al componente que representa la atmósfera.
175
  Asigna la visibilidad al componente que representa la atmósfera.
156 176

  
157 177
* setNortIndicatorVisibility(boolean visibility) : void
158 178

  
159
Asigna la visibilidad al componente que indica el norte y la inclinación del plano.
179
  Asigna la visibilidad al componente que indica el norte y la inclinación del plano.
160 180

  
161 181
* setMiniMapVisibility(boolean visibility) : void
162 182

  
163
Asigna la visibilidad al componente minimapa.
183
  Asigna la visibilidad al componente minimapa.
164 184

  
165 185
* setScaleVisibility(boolean visibility) : void
166 186

  
167
Asigna la visibilidad al componente que representa la escala.
187
  Asigna la visibilidad al componente que representa la escala.
168 188

  
169 189
* setStarBackgroundVisibility(boolean visibility) : void
170 190

  
171
Asigna la visibilidad al componente que representa el fondo de estrellas.
191
  Asigna la visibilidad al componente que representa el fondo de estrellas.
172 192

  
173 193
* synchronizeViewPorts() : void
174 194

  
175
Obtiene el ViewPort de la vista y realiza las transformaciones necesarias para el enfoque del visor 3D muestra la misma región. Hay que tener en cuenta si la opción "Animación en la sincronización de enfoques" esta marcada o no. En caso de que este marcada la sincronización se debe animar, en caso contrario, no.
195
  Obtiene el ``ViewPort`` de la vista y realiza las transformaciones necesarias para el enfoque del visor 3D muestra la misma región. Hay que tener en cuenta si la opción "Animación en la sincronización de enfoques" esta marcada o no. En caso de que este marcada la sincronización se debe animar, en caso contrario, no.
176 196

  
177 197
* getAtmosphereVisibility() : boolean
178 198

  
179
Obtiene la visibilidad del componente que representa la atmósfera.
199
  Obtiene la visibilidad del componente que representa la atmósfera.
180 200

  
181 201
* getMiniMapVisibility() : boolean
182 202

  
183
Obtiene la visibilidad del componente que representa el minimapa.
203
  Obtiene la visibilidad del componente que representa el minimapa.
184 204

  
185 205
* getStarBackgroundVisibility() : boolean
186 206

  
187
Obtiene la visibilidad del componente que representa el fondo de estrellas.
207
  Obtiene la visibilidad del componente que representa el fondo de estrellas.
188 208

  
189 209
* getNorthIndicatorVisibility() : boolean
190 210

  
191
Obtiene la visibilidad del componente que representa el indicar del norte y el grado de inclinación.
211
  Obtiene la visibilidad del componente que representa el indicar del norte y el grado de inclinación.
192 212

  
193 213
* getScaleVisibility() : boolean
194 214

  
195
Obtiene la visibilidad del componente que representa la escala.
215
  Obtiene la visibilidad del componente que representa la escala.
196 216

  
197 217
ViewPanel3D
198
*************
218
~~~~~~~~~~~~~~~~~~~~~~
199 219

  
200
Representa la ventana que contiene el componente MapControl3D.
220
Representa la ventana que contiene el componente `MapControl3D`_.
201 221

  
202 222
* show() : void
203 223

  
204
Invoca al WindowManager para mostrar el visor en modo ventana.
224
  Invoca al WindowManager para mostrar el visor en modo ventana.
205 225

  
206 226
* getMapControl3D() : MapControl3D
207 227

  
208
Devuelve el componente asociado a la ventana.
228
  Devuelve el componente asociado a la ventana.
209 229

  
210 230
TYPE
211
*************
231
~~~~~~~~~~~~~~~~~~~~~~
212 232

  
213 233
Enumerado que representa los dos tipos posibles de un visor 3D. Los dos tipos son: SPHERE y FLAT.
214 234

  
215 235
LayerProperties3D
216
*******************
236
~~~~~~~~~~~~~~~~~~~~~~
217 237

  
218 238
Clase que representa la propiedades 3D de una capa.
219 239

  
220 240
* setMaxLevel(int maxLevel) : void
221 241

  
222
Asigna el máximo nivel de detalle de la capa.
242
  Asigna el máximo nivel de detalle de la capa.
223 243

  
224 244
* getMaxLevel() : int
225 245

  
226
Obtiene el máximo nivel de detalle de la capa.
246
  Obtiene el máximo nivel de detalle de la capa.
227 247

  
228 248
* setMinLevel(int minLevel) : void
229 249

  
230
Asigna el mínimo nivel de detalle de la capa.
250
  Asigna el mínimo nivel de detalle de la capa.
231 251

  
232 252
* getMinLevel() : int
233 253

  
234
Obtiene el mínimo nivel de detalle de la capa.
254
  Obtiene el mínimo nivel de detalle de la capa.
235 255

  
236 256
* setFileStore(String path) : void
237 257

  
238
Asigna el directorio padre donde se ubicarán las diferentes capas cacheadas
258
  Asigna el directorio padre donde se ubicarán las diferentes capas cacheadas
239 259

  
240 260
* getFileStore() : String
241 261

  
242
Obtiene el directorio padre donde se ubican las diferentes capas cacheadas.
262
  Obtiene el directorio padre donde se ubican las diferentes capas cacheadas.
243 263

  
244 264
* getCacheName() : String
245 265

  
246
Obtiene el nombre único de la caché el cual da nombre a la carpeta dentro del file store que contiene los tiles cacheados y los archivos de configuración.
266
  Obtiene el nombre único de la caché el cual da nombre a la carpeta dentro del file store que contiene los tiles cacheados y los archivos de configuración.
247 267

  
248 268
RasterLayerProperties3D extends LayerProperties3D
249
****************************************************
269
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
250 270

  
251 271
Clase que representa la propiedades 3D de una capa raster.
252 272

  
253 273
* setElevation(boolean elevation) : void
254 274

  
255
Asigna a la capa si el modo de carga de la capa es de elevación o no.
275
  Asigna a la capa si el modo de carga de la capa es de elevación o no.
256 276

  
257 277
* getElevation() : boolean
258 278

  
259
Obtiene si el modo de carga de la capa raster es de elevación o no.
279
  Obtiene si el modo de carga de la capa raster es de elevación o no.
260 280

  
261 281
VectorialLayerProperties3D extends LayerProperties3D
262
****************************************************
282
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
263 283

  
264 284
Clase que representa la propiedades 3D de una capa vectorial.
265 285

  
266 286
* setRasterized(boolean rasterized) : void
267 287

  
268
Asigna a la capa si el modo de carga de la capa es rasterizado o no.
288
  Asigna a la capa si el modo de carga de la capa es rasterizado o no.
269 289

  
270 290
* getRasterized() : boolean
271 291

  
272
Obtiene si el modo de carga de la capa vectorial es rasterizado o no.
292
  Obtiene si el modo de carga de la capa vectorial es rasterizado o no.
273 293

  
274 294
SWING IMPL
275 295
--------------
......
280 300
* Package: or.gvsig.view3d.swing.impl
281 301

  
282 302
DefaultView3DManager implements View3DManager
283
********************************************************
303
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
284 304

  
285 305
Implementación por defecto del manager View3DManager
286 306

  
287 307
DefaultViewPanel3D implements ViewPanel3D
288
***************************************************
308
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289 309

  
290 310
Implementación por defecto de los métodos descritos en la interfaz ViewPanel3D. Esta clase tendrá asociado un MapContext que permitirá obtener información acerca del enfoque, escucha eventos de cambio sobre capas y enfoque, versionado... 
291 311

  
292 312
* public DefaultViewPanel3D(MapContext mapContext, TYPE type);
293 313

  
294
Constructor que permite instancia un nuevo visor 3D a partir de un MapContext y el tipo. Este constructor accederá a las capas del mapContext para añadirlas al componente de la librería WW. Para añadir una capa al componente WW es necesaria una transformación (LayerConverter#convert(layer)) de la capa gvSIG a una capa WW en base al modo de carga asociado especificado por el usuario.
314
  Constructor que permite instancia un nuevo visor 3D a partir de un MapContext y el tipo. Este constructor accederá a las capas del mapContext para añadirlas al componente de la librería WW. Para añadir una capa al componente WW es necesaria una transformación (``LayerConverter#convert(layer)``) de la capa gvSIG a una capa WW en base al modo de carga asociado especificado por el usuario.
295 315

  
296 316
LayerConverter
297
****************
317
~~~~~~~~~~~~~~~~~~~~~~
298 318

  
299 319
Interfaz que permite convertir una capa gvSIG en una capa WW. Este proceso depende del tipo de capa y el modo de carga definido.
300 320

  
301 321
* convert(FLayer layer) : gov.nasa.worldwind.layers.Layer
302 322

  
303
Método que a partir de una capa gvSIG obtiene la capa correspondiente en WW.
323
  Método que a partir de una capa gvSIG obtiene la capa correspondiente en WW.
304 324

  
305 325
DefaultRasterLayerConverter implements LayerConverter
306
**********************************************************
326
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
307 327

  
308
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en RasterTiledImageLayer mediante LayerConverter#convert(FLayer layer). El proceso de conversión debe seguir los siguientes puntos:
328
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en RasterTiledImageLayer mediante ``LayerConverter#convert(FLayer layer)``. El proceso de conversión debe seguir los siguientes puntos:
309 329

  
310 330
* Configuración de los parámetros necesarios en un fichero XML para crear una capa del tipo RasterTileImageLayer. Los parámetros necesarios son:
311 331

  
312
  * DATA_CACHE_NAME: Nombre de la carpeta dentro de la cache donde se alojará los tiles generados en tiempo de ejecución. Este nombre debe ser único.
313
  * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
314
  * WIDTH: ancho en píxeles de la imagen raster.
315
  * HEIGHT: alto en píxeles de la imagen raster.
316
  * DISPLAY_NAME: Nombre de la capa.
317
  * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
318
  * IMAGE_FORMAT: formato de los tiles que se generan.
319
  * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
332
 * DATA_CACHE_NAME: Nombre de la carpeta dentro de la cache donde se alojará los tiles generados en tiempo de ejecución. Este nombre debe ser único.
333
 * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
334
 * WIDTH: ancho en píxeles de la imagen raster.
335
 * HEIGHT: alto en píxeles de la imagen raster.
336
 * DISPLAY_NAME: Nombre de la capa.
337
 * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
338
 * IMAGE_FORMAT: formato de los tiles que se generan.
339
 * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
320 340

  
321
  Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER.
322
  Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Debido al gran número de parámetros configurables se resaltan los siguientes:
341
Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER. Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Debido al gran número de parámetros configurables se resaltan los siguientes:
323 342

  
324
  * Opciones de capas: opacidad, máxima y mínima altura de activación...
325
  * Estructura de niveles de detalle: nivel máximo y mínimo de nivel de detalle, niveles inactivos...
326
  * Generación de tiles: tamaño del tile, origen del primer tile, extensión de los tiles generados... 
343
 * Opciones de capas: opacidad, máxima y mínima altura de activación...
344
 * Estructura de niveles de detalle: nivel máximo y mínimo de nivel de detalle, niveles inactivos...
345
 * Generación de tiles: tamaño del tile, origen del primer tile, extensión de los tiles generados... 
327 346

  
328 347
* Crear la capa de tipo RasterTileImageLayer a partir de los parámetros y añadirla al modelo. Al instanciar una nueva capa RasterTileImageLayer, se configura una factoría del tipo DefaultRetrieverFactory la cual permite la creación de objetos DefaultRasterRetriever. Dichos objetos son los encargados de realizar la distintas peticiones a un objeto DefaultRasterServer el cual es el encargado de servir la información procedente de un DataRaster. Dependiendo del tipo de capa y el modo de carga será una implementación u otra. En el caso de casa raster con modo de carga imagen el tipo será RasterLayerDataRaster y para capas vectoriales rasterizadas RasterizedVectorialLayer.
329 348

  
330
La rasterización de capa vectoriales se realiza en VectorialLayerDataRaster en base a las peticiones que recibe por parte de DefaultRasterServer. El proceso se rasterización consistirá en usar el método FLyrVect#draw(image,graphics,viewport, scale) estableciendo el ViewPort a la zona o sección requerida para la obtención del tile.
349
La rasterización de capa vectoriales se realiza en VectorialLayerDataRaster en base a las peticiones que recibe por parte de DefaultRasterServer. El proceso se rasterización consistirá en usar el método ``FLyrVect#draw(image,graphics,viewport, scale)`` estableciendo el ViewPort a la zona o sección requerida para la obtención del tile.
331 350

  
332 351
DefaultElevationLayerConverter implements LayerConverter
333
***********************************************************
352
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
334 353

  
335
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en DefaultElevationModel mediante LayerConverter#convert(FLayer layer). El proceso de conversión debe seguir los siguientes puntos:
354
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en DefaultElevationModel mediante ``LayerConverter#convert(FLayer layer)``. El proceso de conversión debe seguir los siguientes puntos:
336 355

  
337 356
* Configuración de los parámetros necesarios en un fichero XML para crear una modelo de elevación ElevationModel. Los parámetros necesarios son:
338 357

  
......
346 365
  * PIXEL_FORMAT: formato del pixel: AVKey.ELEVATION o AVKey.IMAGE
347 366
  * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
348 367

  
349
  Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER.
368
    Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER. Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Los parámetros opcionales son:
350 369

  
351
  Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Los parámetros opcionales son:
352

  
353 370
  * BYTE_ORDER: orden de los bytes. Little endian o big endian.
354 371
  * ELEVATION_MAX: elevación máxima y mínima.
355 372
  * ELEVATION_MIN: elevación mínima del raster.
......
362 379
* Crear el modelo de elevación DefaultElevationModel a partir de lo parámetros y añadirlo al modelo ya existente. El modelo existente será de tipo CompoundElevationModel el cual permite añadir varios modelos de elevación y mostrarlos a la vez. Al instanciar un nuevo modelo de elevación, se configura una factoría del tipo DefaultRetrieverFactory la cual permite la creación de objetos DefaultRasterRetriever. Dichos objetos son los encargados de realizar las distintas peticiones a un objeto DefaultRasterServer el cual es el encargado de servir la información procedente de un DataRaster. Para este caso el DataRaster será de tipo ElevationLayerDataRaster el cual atacará sobre la capa raster para obtener la información que se precise.
363 380

  
364 381
DefaultWMSLayerConverter implements LayerConverter
365
**********************************************************
382
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
366 383

  
367 384
.. note::
368 385
  TODO en fases posteriores
369 386

  
370 387
DefaultVectorialLayerConverter implements LayerConverter
371
*********************************************************
388
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
372 389

  
373 390
.. note::
374 391
  TODO en fases posteriores
375 392

  
376 393
RasterTiledImageLayer extends BasicTiledImageLayer
377
*****************************************************
394
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
378 395

  
379 396
Implementación de una capa WW. Entre otras funcionalidades, esta capa gestiona las peticiones de texturas e imágenes que recibe por parte de la aplicación así como la composición de tiles para un sector en concreto, las diferentes resoluciones por nivel de detalle y la creación de tareas para la recuperación / generación de tiles.
380 397

  
......
383 400
En principio solo que habrá que sobrescribir los constructores de la clase BasicTiledImageLayer para que cuando se instancie una capa RasterTiledImageLayer se instancie también un DefaultretrieverFactory a partir de los parámetros.
384 401

  
385 402
DefaultRetrieverFactory implements RetrieverFactory
386
***************************************************
403
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
387 404

  
388 405
Implementación por defecto de un RetrieverFactory. Representa la factoría para la creación de instancias de objetos Retriever.
389 406

  
390 407
* createRetriever(AVList params, RetrievalPostProcessor postProcessor) : Retriever
391 408

  
392
Instancia una implementación de la interfaz Retriever a partir de una lista de parámetros y un RetrievalPostProcessor que recibe como parámetro y una instancia local de RasterServer.
409
  Instancia una implementación de la interfaz Retriever a partir de una lista de parámetros y un RetrievalPostProcessor que recibe como parámetro y una instancia local de RasterServer.
393 410

  
394 411
DefaultRasterRetriever implements Retriever
395
***************************************************
412
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
396 413

  
397 414
Implementación por defecto de Retriever. Esta clase gestiona las peticiones de imágenes que recibe por parte de la capa. Permite configurar tiempos de respuesta como timeouts, tiempo de expiración... además permite saber el estado en que se encuentra el retriever.
398 415

  
399 416
DefaultRasterServer implements RasterServer
400
***************************************************
417
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
401 418

  
402
Implementación por defecto de la interfaz RasterServer. Como su nombre indica esta clase representa un servidor de raster que atiende a las peticiones realizadas por objetos Retriever. Cuando recibe una petición mediante el método RasterServer#getRasterAsByteBuffer() accede al DataRaster que tiene asociado obtiene la información que precisa y la devuelve en un objeto de tipo java.nio.ByteBuffer.
419
Implementación por defecto de la interfaz RasterServer. Como su nombre indica esta clase representa un servidor de raster que atiende a las peticiones realizadas por objetos Retriever. Cuando recibe una petición mediante el método ``RasterServer#getRasterAsByteBuffer()`` accede al DataRaster que tiene asociado obtiene la información que precisa y la devuelve en un objeto de tipo java.nio.ByteBuffer.
403 420

  
404 421
* getRasterAsByteBuffer(AVList params) : ByteBuffer
405 422

  
406
Obtiene del DataRaster asociado la información definida en los parámetros que recibe y la devuelve en un objeto java.nio.ByteBuffer.
423
  Obtiene del DataRaster asociado la información definida en los parámetros que recibe y la devuelve en un objeto java.nio.ByteBuffer.
407 424

  
408 425
* getSector() : Sector
409 426

  
410
Obtiene el sector del data raster asociado.
427
  Obtiene el sector del data raster asociado.
411 428

  
412 429
DefaulDataRasterReaderFactory extends BasicDataRasterReaderFactory
413
*********************************************************************
430
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
414 431

  
415 432
Factoría que permite la creación de nuestra implementación DefaultDataReaderRasterReader a partir de un objeto de tipo DataStore.
416 433

  
417 434
* findReaderFor(Object source, AVList params) : DataRasterReader
418 435

  
419
Obtiene la instancia de DataRasterReader apropiada para la lectura de la fuente de datos.
436
  Obtiene la instancia de DataRasterReader apropiada para la lectura de la fuente de datos.
420 437

  
421 438
DefaultDataRasterReader extends AbstractDataRasterReader
422
********************************************************
439
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
423 440

  
424 441
Permite saber si se puede leer y obtener objetos DataRaster a partir de DataStore validando lo parámetros y metadatos del almacén.
425 442

  
426 443
* canRead(Object source, AVList params) : boolean
427 444

  
428
Obtiene si este DataRasterReader es capaz de leer la fuente de datos y crear objetos DataRaster.
445
  Obtiene si este DataRasterReader es capaz de leer la fuente de datos y crear objetos DataRaster.
429 446

  
430 447
* read(Object source, AVList params) throws java.io.IOException : DataRaster[]
431 448

  
432
Lee de la fuente de datos y crea objetos DataRaster
449
  Lee de la fuente de datos y crea objetos DataRaster
433 450

  
434 451
* readMetadata(Object source, AVList params) throws java.io.IOException : AVList
435 452

  
436
Obtiene los metadatos asociados a las fuente de datos. Los metadatos varían en función de la fuente y el DataRasterReader.
453
  Obtiene los metadatos asociados a las fuente de datos. Los metadatos varían en función de la fuente y el DataRasterReader.
437 454

  
438 455
* isImageryRaster(Object source, AVList params) : boolean
439 456

  
440
Obtiene si la fuente de datos es de tipo raster imagen.
457
  Obtiene si la fuente de datos es de tipo raster imagen.
441 458

  
442 459
* isElevationsRaster(Object source, AVList params) : boolean
443 460

  
444
Obtiene si la fuente de datos es de tipo imagen
461
  Obtiene si la fuente de datos es de tipo imagen
445 462

  
446 463
XXLayerDataRaster implements DataRaster
447
********************************************
464
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
448 465

  
449 466
Representa información raster. Esta clase recibe peticiones de datos para la generación de tiles por lo que es la encargada de acceder al DAL de gvSIG mediante su API para obtener la información precisada. 
450 467

  
451 468
* getWidth() : int
452 469

  
453
Obtiene el ancho en pixeles del raster.
470
  Obtiene el ancho en pixeles del raster.
454 471

  
455 472
* getHeiht() : int
456 473

  
457
Obtiene el alto en pixeles del raster.
474
  Obtiene el alto en pixeles del raster.
458 475

  
459 476
* drawOnTo(DataRaster canvas) : void
460 477

  
461
Copia la información de este raster al espceficado por parámetro. Es usado para hacer peticiones de datos sobre zonas determindas por el tamaño y posición del DataRaster especificado.
478
  Copia la información de este raster al espceficado por parámetro. Es usado para hacer peticiones de datos sobre zonas determindas por el tamaño y posición del DataRaster especificado.
462 479

  
463 480
* getSubRaster(AVList params) : DataRaster
464 481

  
465
A partir de los paŕametros que recibe obtiene una sección del raster.
482
  A partir de los parámetros que recibe obtiene una sección del raster.
466 483

  
467 484
* getSubRaster(int with, int height, Sector sector, AVList params) : DataRaster
468 485

  
469
A partir de los paŕametros que recibe obtiene una sección del raster.
486
  A partir de los parámetros que recibe obtiene una sección del raster.
470 487

  
471 488
View3D APP
472 489
----------------
......
487 504
  * package.info
488 505

  
489 506
Plugin common
490
*************
507
~~~~~~~~~~~~~~~~~~~~~~
491 508

  
492 509
El plugin common (org.gvsig.view3d.app.common) estará compuesto por tres extensiones: View3DExtension, RefreshView3DExtension y SynchronizeView3DExtension. Además, gestionará la persistencia de las opciones establecidas por el usuario.
493 510

  
494 511
* View3DExtension: extensión de Andami asociada a dos acciones: "create-flat-view3d" y "create-spherical-view3d". Esta extensión deberá estar siempre visible y activa solo cuando se active una vista 2D con un capa o más. Las dos acciones obtendrán la instancia del View3DSwingManager, crearán el panel, añadirán las capas de la vista activa, y lo mostrarán.
495
* RefreshView3DExtension: extensión de Andami asociada a la acción: "refresh-view3d". Esta extensión deberá estar visible cuando se active un visor 3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ViewPanel3D#reloadLayers().
496
* SynchronizeView3DExtension: extensión de Andami asociada a la acción: "synchronize-view3d". Esta extensión deberá estar visible cuando se active una vista3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ViewPanel3D#synchronizeViewPorts().
512
* RefreshView3DExtension: extensión de Andami asociada a la acción: "refresh-view3d". Esta extensión deberá estar visible cuando se active un visor 3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ``ViewPanel3D#reloadLayers()``.
513
* SynchronizeView3DExtension: extensión de Andami asociada a la acción: "synchronize-view3d". Esta extensión deberá estar visible cuando se active una vista3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ``ViewPanel3D#synchronizeViewPorts()``.
497 514

  
498 515
Persistencia
499
*************
516
~~~~~~~~~~~~~~~~~~~~~~
500 517

  
501 518
.. note::
502 519
  TODO en fases posteriores. Definir panales y gestión de preferencias.
503

  
504
Integración con la librería NASA WW SDK
505
----------------------------------------
506

  
507
World Wind es una colección de componentes que de forma interactiva muestran información geográfica en 3D. Las aplicaciones o applets que usen la librería deberá integrar uno o más componentes dentro de su interfaz gráfica. World wind sigue el siguiente esquema:
508

  
509
.. image:: ../images/world-wind-diagram.png
510

  
511
* Globe: representa la forma del planeta y el terreno. Contiene un Tessellator el cual es el encargado de generar el terreno.
512
* Layer: las capas añaden las imágenes, objetos u otra información al globo. La capas se ajustan a la forma del globo y se mueven junto a el cuando el usuario navega por el espacio tridimensional.
513
* Model: junta el globo y las capas.
514
* View: determina la vista del usuario sobre el modelo. La vista se va modificando en base a los eventos de ususario que recibe.
515
* SceneController: asocia la vista con el modelo. Controla el tiempo y el renderizado del modelo.
516

  
517
Se pretende crear una nivel de abstracción que ofrezca a los consumidores de la librería la funcionalidades descritas en el análisis funcional de forma que no tengan que interactuar con la librería WW. La integración del plugin con la librería World Wind se ha diseñado del siguiente modo:
518

  
519
* El componente ViewPanel3D integra un componente WorldWindowGLJPanel. WorldWindowGLJPanel es autocontenido y su propósito es servir la aplicación WorldWind mostrando el modelo definido (globo y capas).
520
* La librería posee unos archivos de configuración en XML que son cargados cuando la librería se registra. Estos archivos de configuración por un lado definen la clases que implementan los distintos servicios que ofrece la librería y por otro las capas que se cargan por defecto al crear un modelo básico.
521
* Además de esta configuración, es necesario configurar unos parámetros espeficios para crear un WorldWindowGLJPanel esférico o plano. Esta configuración se realiza al instanciar un objeto ViewPanel3D. Dependiendo del modo indicado como parámetro, se establece una configuración u otra.
522
* La obtención de las capas WW a partir de capas de gvSIG se realiza mediante la clase LayerConverter la cual permite obtener la capa equivalente en WW a partir de una capa de gvSIG para añadirla a las capas del modelo WW. Se ha implementa un nuevo tipo de capa llamado RasterTiledImageLayer la cual gestiona la peticiones de tiles en tiempo para que se obtengan los datos directamente desde el DAL de gvSIG. Esta gestión se realiza mediante los objetos DefaultRetrieverFactory, DefaultRasterRetriever, DefaultRasterServer, DefaultDataRasterReaderFactory, DefaultDataRasterReader y DefaultDataRaster.
523

  

Also available in: Unified diff