Statistics
| Revision:

gvsig-3d / 2.1 / trunk / doc / Fase 1 / dt-visor-3d.rst @ 439

History | View | Annotate | Download (28.1 KB)

1 398 llmarques
=================================================================
2
 Visor 3D básico que integra Nasa WW SDK
3
=================================================================
4
5
-------------------
6
 Diseño técnico
7
-------------------
8
9
:Company:   gvSIG Association
10
:Author:    DiSiD Corporation, S.L.
11
:Revision:  $Rev: $
12
:Date:      $Date: $
13
:Copyright: All rigths reserved
14
15
.. contents::
16
   :depth: 2
17
   :backlinks: none
18
19
.. sectnum::
20 426 llmarques
   :depth: 1
21 398 llmarques
   :start: 1
22
23
.. |year| date:: %Y
24
25
.. header::
26
27
   .. class:: headertable
28
29
   +-----------------------+-------------------------+
30
   |.. class:: left        |.. class:: right         |
31
   |                       |                         |
32
   | Diseño técnico        |###Page###               |
33
   +-----------------------+-------------------------+
34
35
36
.. footer::
37
38
    .. include:: <isonum.txt>
39
40
    .. class:: left
41
42
    *Visor 3D básico que integra Nasa WW SDK - Diseño técnico*
43
44
    |copy| |year| **
45
46
47
Introducción
48
=============
49
50 426 llmarques
.. note::
51
 Este documento esta en continua construcción. A medida que se avance en el proyecto se irá añadiendo nueva información y refinando la existente.
52 398 llmarques
53 429 llmarques
Este documento detalla el diseño técnico de las funcionalidades definidas y la arquitectura del nuevo visor 3D basado en la librería NASA WW SDK para gvSIG 2.1+. Para más información consulte:
54 398 llmarques
55 426 llmarques
* http://worldwind.arc.nasa.gov/java/
56
* http://goworldwind.org/
57 398 llmarques
58 426 llmarques
El diseño técnico tendrá en cuenta el análisis de requisitos y el análisis funcional realizados en:
59
60
* http://devel.gvsig.org/svn/gvsig-3d/2.1/trunk/doc/re-visor-3d.rst
61
* http://devel.gvsig.org/svn/gvsig-3d/2.1/trunk/doc/af-visor-3d.rst
62
63 398 llmarques
Diseño técnico
64
=====================
65
66 426 llmarques
Para tener un poco del contexto del diseño técnico, se expone como debería de funcionar de forma resumida el visor 3D. Seguidamente se detallará como se estructura la librería y la arquitectura de plugins.
67 398 llmarques
68 426 llmarques
Ejemplo de caso de uso
69 398 llmarques
-------------------------------
70
71 431 llmarques
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 398 llmarques
73 438 llmarques
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 398 llmarques
75 431 llmarques
* 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
* 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.
77 398 llmarques
78 431 llmarques
La librería WW permite dividir un raster, ya sea normal o de elevación, en varios niveles de detalle que se muestran dependiendo de lo cerca o lejos se encuentre el enfoque de la capa raster. Los niveles de detalle se estructuran en forma de pirámide, de menor resolución y número de tiles (nivel mínimo) a mayor nivel de resolución y número de tiles (nivel máximo). Para más información de como se gestionan los niveles de detalle y los tiles dentro de la librería WW consulte:
79 398 llmarques
80 431 llmarques
 http://www.microimages.com/documentation/TechGuides/78Worldwind.pdf
81 398 llmarques
82 431 llmarques
Además de las propiedades descritas anteriormente si la capa es de tipo vectorial tiene las siguientes propiedades:
83 398 llmarques
84 431 llmarques
* Modo de carga rasterizado: permite indicar si la capa vectorial se va a cargar en el visor de forma rasterizada. La rasterización de una capa vectorial consiste en la conversión de una imagen vectorial a una imagen formada por píxeles. Por defecto las capas vectoriales se cargan en el visor rasterizadas debido a que la carga de capas vectoriales sin rasterizar se abordará más adelante.
85 398 llmarques
86 431 llmarques
Si la capa es de tipo raster tiene las siguientes propiedades:
87
88
* Modo de carga elevación: permite indicar si el raster es de tipo elevación o no.
89
90 438 llmarques
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 431 llmarques
92 438 llmarques
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 431 llmarques
94 438 llmarques
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 431 llmarques
96 438 llmarques
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 439 llmarques
* Además de esta configuración, es necesario configurar unos parámetros especificados 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 438 llmarques
* 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
116 398 llmarques
SWING API
117
----------
118
119
Este es el API de la interfaz de usuario de la librería del visor 3D, la cual esta basada en el modelo de implementación simple API/IMPL.
120
121
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api
122
* Package: or.gvsig.view3d.swing.api
123
124 426 llmarques
View3DManager
125 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
126 398 llmarques
127 431 llmarques
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.
128 398 llmarques
129 431 llmarques
* createViewPanel3D(MapContext theMapContext, TYPE type) : ViewPanel3D
130 398 llmarques
131 438 llmarques
  Crea un objeto `ViewPanel3D`_ pasándole como parámetro el MapContext y el tipo de panel.
132 398 llmarques
133 439 llmarques
* createMapControl3D(MapContext mapContext, TYPE type) : MapControl3D
134
135
  Crea un objeto `MapControl3D`_ a partir del MapContext y el tipo.
136
137 431 llmarques
* getLayerProperties3D(FLayer layer) : LayerProperties3D
138 398 llmarques
139 438 llmarques
  Obtiene las propiedades asociadas a un capa.
140 398 llmarques
141 431 llmarques
* setLayerProperties3D(FLayer layer, LayerProperties3D properties) : void
142 398 llmarques
143 438 llmarques
  Asigna las propiedades a la capa que recibe como parámetro.
144 431 llmarques
145 439 llmarques
146 431 llmarques
.. note::
147 435 llmarques
  Falta especificar las propiedades relacionadas con la vista, las propiedades generales y sus interfaces.
148 431 llmarques
149
MapControl3D
150 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
151 431 llmarques
152 439 llmarques
Define el API del componente 3D.  Esta clase representa el componente 3D del visor. Permite añadir y quitar capas, sincronizar capas y enfoques con la vista 2D enlazada, configurar la visibilidad de los componentes del visor. Además, a partir de un MapContext obtiene las capas y las convierte en DataRaster para enlazarlo a una capa WW. La capa WW que crea depende del tipo de capa, las capas raster serán RasterTiledImageLayer y las elevaciones DefaultElevationModel.
153 431 llmarques
154 426 llmarques
* getMapContext() : MapContext
155 398 llmarques
156 438 llmarques
  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.
157 398 llmarques
158 426 llmarques
* getType() : TYPE
159 399 llmarques
160 438 llmarques
  Obtiene el tipo del visor. Devuelve un objeto enum que puede ser TPYE.SPHERE o TYPE.FLAT (ver `TYPE`_).
161 399 llmarques
162 398 llmarques
* getVerticalExaggeration() : double
163
164 438 llmarques
  Obtiene la exageración vertical del visor.
165 398 llmarques
166
* reloadLayers() : void
167
168 438 llmarques
  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.
169 398 llmarques
170 404 llmarques
* setMapContext(MapContext theMapContext) : void
171 398 llmarques
172 438 llmarques
  Establece el MapContext al visor y recarga la información mediante reloadLayers().
173 398 llmarques
174
* setVerticalExaggeration(double verticalExaggeration) : void
175
176 438 llmarques
  Establece las exageración vertical del visor.
177 398 llmarques
178 431 llmarques
* setAtmosphereVisibility(boolean visibility) : void
179 398 llmarques
180 438 llmarques
  Asigna la visibilidad al componente que representa la atmósfera.
181 398 llmarques
182 431 llmarques
* setNortIndicatorVisibility(boolean visibility) : void
183 398 llmarques
184 438 llmarques
  Asigna la visibilidad al componente que indica el norte y la inclinación del plano.
185 398 llmarques
186 431 llmarques
* setMiniMapVisibility(boolean visibility) : void
187 398 llmarques
188 438 llmarques
  Asigna la visibilidad al componente minimapa.
189 398 llmarques
190 431 llmarques
* setScaleVisibility(boolean visibility) : void
191 398 llmarques
192 438 llmarques
  Asigna la visibilidad al componente que representa la escala.
193 398 llmarques
194 431 llmarques
* setStarBackgroundVisibility(boolean visibility) : void
195 398 llmarques
196 438 llmarques
  Asigna la visibilidad al componente que representa el fondo de estrellas.
197 398 llmarques
198 399 llmarques
* synchronizeViewPorts() : void
199
200 438 llmarques
  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.
201 399 llmarques
202 439 llmarques
* synchronizeLayers() : void
203
204
  Comprueba que capas han sufrido cambios mediante el versionado del MapContext y la vuelve a recargar en el modelo del componente WW.
205
206 431 llmarques
* getAtmosphereVisibility() : boolean
207 398 llmarques
208 438 llmarques
  Obtiene la visibilidad del componente que representa la atmósfera.
209 398 llmarques
210 431 llmarques
* getMiniMapVisibility() : boolean
211 398 llmarques
212 438 llmarques
  Obtiene la visibilidad del componente que representa el minimapa.
213 398 llmarques
214 431 llmarques
* getStarBackgroundVisibility() : boolean
215 398 llmarques
216 438 llmarques
  Obtiene la visibilidad del componente que representa el fondo de estrellas.
217 398 llmarques
218 431 llmarques
* getNorthIndicatorVisibility() : boolean
219 398 llmarques
220 438 llmarques
  Obtiene la visibilidad del componente que representa el indicar del norte y el grado de inclinación.
221 398 llmarques
222 431 llmarques
* getScaleVisibility() : boolean
223 398 llmarques
224 438 llmarques
  Obtiene la visibilidad del componente que representa la escala.
225 398 llmarques
226 439 llmarques
RasterTiledImageLayer
227
________________________
228
229
Los pasos para obtener una capa RasterTiledImageLayer son los siguientes:
230
231
* Configuración de los parámetros necesarios en un fichero XML para crear una capa del tipo RasterTileImageLayer. Los parámetros necesarios son:
232
233
 * 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.
234
 * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
235
 * WIDTH: ancho en píxeles de la imagen raster.
236
 * HEIGHT: alto en píxeles de la imagen raster.
237
 * DISPLAY_NAME: Nombre de la capa.
238
 * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
239
 * IMAGE_FORMAT: formato de los tiles que se generan.
240
 * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
241
242
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:
243
244
 * Opciones de capas: opacidad, máxima y mínima altura de activación...
245
 * Estructura de niveles de detalle: nivel máximo y mínimo de nivel de detalle, niveles inactivos...
246
 * Generación de tiles: tamaño del tile, origen del primer tile, extensión de los tiles generados...
247
248
* 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 genérico.
249
250
DefaultElevationModel
251
________________________
252
253
Los pasos para obtener una capa RasterTiledImageLayer son los siguientes:
254
255
* Configuración de los parámetros necesarios en un fichero XML para crear una modelo de elevación ElevationModel. Los parámetros necesarios son:
256
257
  * DISPLAY_NAME: Nombre del modelo de elevación
258
  * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
259
  * WIDTH: ancho en píxeles de la imagen raster.
260
  * HEIGHT: alto en píxeles de la imagen raster.
261
  * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
262
  * IMAGE_FORMAT: formato de los tiles genera
263
  * DATA_TYPE: tipo de dato de la información del raster.
264
  * PIXEL_FORMAT: formato del pixel: AVKey.ELEVATION o AVKey.IMAGE
265
  * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
266
267
    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:
268
269
  * BYTE_ORDER: orden de los bytes. Little endian o big endian.
270
  * ELEVATION_MAX: elevación máxima y mínima.
271
  * ELEVATION_MIN: elevación mínima del raster.
272
  * EXPIRY_TIME: tiempo de expiración de un tile dentro de la cache.
273
  * MISSING_DATA_SIGNAL: Valor "no data"
274
  * MISSING_DATA_REPLACEMENT: Valor que se obtiene al obtener la elevación sobre un punto "no data".
275
  * NETWORK_RETRIEVAL_ENABLED: Indica el modo de trabajo online o offline.
276
  * ELEVATION_EXTREMES_FILE: ruta al fichero que contiene información sobre las elevaciones extremas.
277
278
* 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 genérico.
279
280 431 llmarques
ViewPanel3D
281 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
282 431 llmarques
283 438 llmarques
Representa la ventana que contiene el componente `MapControl3D`_.
284 431 llmarques
285
* show() : void
286
287 438 llmarques
  Invoca al WindowManager para mostrar el visor en modo ventana.
288 431 llmarques
289
* getMapControl3D() : MapControl3D
290
291 438 llmarques
  Devuelve el componente asociado a la ventana.
292 431 llmarques
293 426 llmarques
TYPE
294 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
295 398 llmarques
296 429 llmarques
Enumerado que representa los dos tipos posibles de un visor 3D. Los dos tipos son: SPHERE y FLAT.
297 398 llmarques
298 431 llmarques
LayerProperties3D
299 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
300 398 llmarques
301 431 llmarques
Clase que representa la propiedades 3D de una capa.
302 398 llmarques
303 431 llmarques
* setMaxLevel(int maxLevel) : void
304 398 llmarques
305 438 llmarques
  Asigna el máximo nivel de detalle de la capa.
306 398 llmarques
307 431 llmarques
* getMaxLevel() : int
308 429 llmarques
309 438 llmarques
  Obtiene el máximo nivel de detalle de la capa.
310 429 llmarques
311 431 llmarques
* setMinLevel(int minLevel) : void
312 429 llmarques
313 438 llmarques
  Asigna el mínimo nivel de detalle de la capa.
314 429 llmarques
315 431 llmarques
* getMinLevel() : int
316
317 438 llmarques
  Obtiene el mínimo nivel de detalle de la capa.
318 431 llmarques
319
* setFileStore(String path) : void
320
321 438 llmarques
  Asigna el directorio padre donde se ubicarán las diferentes capas cacheadas
322 431 llmarques
323
* getFileStore() : String
324
325 438 llmarques
  Obtiene el directorio padre donde se ubican las diferentes capas cacheadas.
326 431 llmarques
327
* getCacheName() : String
328
329 438 llmarques
  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.
330 431 llmarques
331
RasterLayerProperties3D extends LayerProperties3D
332 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
333 431 llmarques
334
Clase que representa la propiedades 3D de una capa raster.
335
336
* setElevation(boolean elevation) : void
337
338 438 llmarques
  Asigna a la capa si el modo de carga de la capa es de elevación o no.
339 431 llmarques
340
* getElevation() : boolean
341
342 438 llmarques
  Obtiene si el modo de carga de la capa raster es de elevación o no.
343 431 llmarques
344
VectorialLayerProperties3D extends LayerProperties3D
345 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
346 431 llmarques
347
Clase que representa la propiedades 3D de una capa vectorial.
348
349
* setRasterized(boolean rasterized) : void
350
351 438 llmarques
  Asigna a la capa si el modo de carga de la capa es rasterizado o no.
352 431 llmarques
353
* getRasterized() : boolean
354
355 438 llmarques
  Obtiene si el modo de carga de la capa vectorial es rasterizado o no.
356 431 llmarques
357 398 llmarques
SWING IMPL
358
--------------
359
360 429 llmarques
Este es la implementación de la interfaz de usuario de la librería del visor 3D.
361 426 llmarques
362
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl
363
* Package: or.gvsig.view3d.swing.impl
364
365
DefaultView3DManager implements View3DManager
366 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
367 398 llmarques
368 426 llmarques
Implementación por defecto del manager View3DManager
369 398 llmarques
370 431 llmarques
DefaultViewPanel3D implements ViewPanel3D
371 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
372 398 llmarques
373 431 llmarques
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...
374 398 llmarques
375 431 llmarques
* public DefaultViewPanel3D(MapContext mapContext, TYPE type);
376 429 llmarques
377 438 llmarques
  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.
378 429 llmarques
379 431 llmarques
LayerConverter
380 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
381 431 llmarques
382
Interfaz que permite convertir una capa gvSIG en una capa WW. Este proceso depende del tipo de capa y el modo de carga definido.
383
384 439 llmarques
* convert(FLayer layer) : gov.nasa.worldwind.layers.Data
385 431 llmarques
386 439 llmarques
  Método que a partir de una capa gvSIG obtiene el data raster correspondiente.
387 431 llmarques
388 439 llmarques
DefaultLayerConverter
389
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
390 429 llmarques
391 439 llmarques
Implementación por defecto de la interfaz LayerConverter. Esta clase permite convertir una capa de gvSIG en un DataRaster genérico el cual permitirá pintar la zona requeridas mediante el método ``FLayer#draw(image,graphics,viewport,scale)``.
392 429 llmarques
393 431 llmarques
RasterTiledImageLayer extends BasicTiledImageLayer
394 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
395 431 llmarques
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.
397
398
Esta capa tiene enlazado un objeto DefaultRetrieverFactory que le permite a la capa crear objetos DefaultRasterRetriever para gestionar las peticiones de datos para la creación de tiles.
399
400 435 llmarques
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.
401 431 llmarques
402
DefaultRetrieverFactory implements RetrieverFactory
403 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
404 431 llmarques
405
Implementación por defecto de un RetrieverFactory. Representa la factoría para la creación de instancias de objetos Retriever.
406
407
* createRetriever(AVList params, RetrievalPostProcessor postProcessor) : Retriever
408
409 438 llmarques
  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.
410 431 llmarques
411
DefaultRasterRetriever implements Retriever
412 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
413 431 llmarques
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.
415
416
DefaultRasterServer implements RasterServer
417 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
418 431 llmarques
419 438 llmarques
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.
420 431 llmarques
421
* getRasterAsByteBuffer(AVList params) : ByteBuffer
422
423 438 llmarques
  Obtiene del DataRaster asociado la información definida en los parámetros que recibe y la devuelve en un objeto java.nio.ByteBuffer.
424 431 llmarques
425
* getSector() : Sector
426
427 438 llmarques
  Obtiene el sector del data raster asociado.
428 431 llmarques
429
DefaulDataRasterReaderFactory extends BasicDataRasterReaderFactory
430 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
431 431 llmarques
432
Factoría que permite la creación de nuestra implementación DefaultDataReaderRasterReader a partir de un objeto de tipo DataStore.
433
434
* findReaderFor(Object source, AVList params) : DataRasterReader
435
436 438 llmarques
  Obtiene la instancia de DataRasterReader apropiada para la lectura de la fuente de datos.
437 431 llmarques
438
DefaultDataRasterReader extends AbstractDataRasterReader
439 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
440 431 llmarques
441
Permite saber si se puede leer y obtener objetos DataRaster a partir de DataStore validando lo parámetros y metadatos del almacén.
442
443
* canRead(Object source, AVList params) : boolean
444
445 438 llmarques
  Obtiene si este DataRasterReader es capaz de leer la fuente de datos y crear objetos DataRaster.
446 431 llmarques
447
* read(Object source, AVList params) throws java.io.IOException : DataRaster[]
448
449 438 llmarques
  Lee de la fuente de datos y crea objetos DataRaster
450 431 llmarques
451
* readMetadata(Object source, AVList params) throws java.io.IOException : AVList
452
453 438 llmarques
  Obtiene los metadatos asociados a las fuente de datos. Los metadatos varían en función de la fuente y el DataRasterReader.
454 431 llmarques
455
* isImageryRaster(Object source, AVList params) : boolean
456
457 438 llmarques
  Obtiene si la fuente de datos es de tipo raster imagen.
458 431 llmarques
459
* isElevationsRaster(Object source, AVList params) : boolean
460
461 438 llmarques
  Obtiene si la fuente de datos es de tipo imagen
462 431 llmarques
463 439 llmarques
GvSIGLayerDataRaster implements DataRaster
464 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
465 431 llmarques
466 439 llmarques
Representa información raster. Esta clase recibe peticiones de datos para la generación de tiles por lo que es la encargada de mediante el método ``FLayer#draw()`` de la capa que tiene asociada pintar la sección requerida.
467 431 llmarques
468 436 llmarques
* getWidth() : int
469 431 llmarques
470 439 llmarques
  Obtiene el ancho en píxeles del raster.
471 436 llmarques
472
* getHeiht() : int
473
474 439 llmarques
  Obtiene el alto en píxeles del raster.
475 436 llmarques
476
* drawOnTo(DataRaster canvas) : void
477
478 438 llmarques
  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.
479 436 llmarques
480
* getSubRaster(AVList params) : DataRaster
481
482 438 llmarques
  A partir de los parámetros que recibe obtiene una sección del raster.
483 436 llmarques
484
* getSubRaster(int with, int height, Sector sector, AVList params) : DataRaster
485
486 438 llmarques
  A partir de los parámetros que recibe obtiene una sección del raster.
487 436 llmarques
488 426 llmarques
View3D APP
489 398 llmarques
----------------
490
491 431 llmarques
Este es el módulo donde se encuentran los diferentes plugins de la librería. Se deben implementar en total cinco plugins. Por un lado, habrá un plugin llamada **org.gvsig.view3d.app.common** el cual contiene todas las extensiones de la librería y los paneles de preferencias de aplicación y de propiedades de vista. Además, debe de tener las dependencias comunes a todas las plataformas y el archivo de configuración "config.xml" para la creación de las entradas de menú y botones en gvSIG. Por otro lado, debe de haber un plugin por cada plataforma el cual no debe de contener ninguna clase debido a que ya se encuentran en el plugin "common". Este plugin solo debe de gestionar las dependencias nativas con la plataforma correspondiente y preparar el empaquetado JAR para que se despliegue como si fuera un plugin normal usando el archivo de configuración del plugin org.gvsig.view3d.app.common así como sus dependencias junto con las dependencias nativas. El resultado esperado debería ser:
492 398 llmarques
493 426 llmarques
* org.gvsig.view3d.app
494 398 llmarques
495 439 llmarques
  - about
496
  - i18n
497
  - images
498
  - lib
499 398 llmarques
500 439 llmarques
    + dependencias comunes
501
    + dependencias nativas de la plataforma
502 398 llmarques
503 439 llmarques
  - config.xml
504
  - package.info
505 398 llmarques
506 426 llmarques
Plugin common
507 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
508 398 llmarques
509 426 llmarques
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.
510 398 llmarques
511 426 llmarques
* 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.
512 438 llmarques
* 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()``.
514 426 llmarques
515 398 llmarques
Persistencia
516 438 llmarques
~~~~~~~~~~~~~~~~~~~~~~
517 398 llmarques
518 426 llmarques
.. note::
519 429 llmarques
  TODO en fases posteriores. Definir panales y gestión de preferencias.