Statistics
| Revision:

gvsig-3d / 2.1 / trunk / doc / dt-visor-3d.rst @ 485

History | View | Annotate | Download (45.8 KB)

1 477 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
   :depth: 1
21
   :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
.. 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
53
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
55
* http://worldwind.arc.nasa.gov/java/
56
* http://goworldwind.org/
57
58
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
Diseño técnico
64
=====================
65
66 484 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, la arquitectura de plugins, las gestión de preferencias y por último la persistencia.
67 477 llmarques
68
Ejemplo de caso de uso
69
-------------------------------
70
71 484 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 477 llmarques
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
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
* 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 484 llmarques
* Formato: formato de los tiles generados. Depedendido del modo de carga y de las preferencias establecidas por el usuario puede variar entre estos formatos.
78
* Resolución en el nivel cero de detalle: permite aumentar la resolución o diminuirla en el nivel cero. Al aumentar la resolución al nivel cero los niveles posteriores también aumentan la resolución. Al contrario ocurre si disminuimos la resolución al nivel cero.
79
* Tamaño de tesela: tamaño de los tiles generados.
80
* Elevación: indica si la capa es de elevación o no.
81
* Valor No Data: valor No Data.
82
* Unidades de elevación: unidades en las que esta representada el valor altura. Admite dos tipos de unidades: metros y pies.
83 477 llmarques
84
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:
85
86
 http://www.microimages.com/documentation/TechGuides/78Worldwind.pdf
87
88
Además de las propiedades descritas anteriormente si la capa es de tipo vectorial tiene las siguientes propiedades:
89
90
* 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.
91 484 llmarques
* Campo altura: indica el campo que contiene los valores de altura.
92 477 llmarques
93 484 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.
94 477 llmarques
95
Instanciado el conversor para la obtención de una capa WW se ejecutará el método ``LayerConverter#convertToLayer(FLayer)`` o ``LayerConverter#convertToElevationModel(FLayer flayer)`` dependiendo del tipo de capa y el modo de carga. Estos método realizarán 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()``.
96
97 481 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#synchronizeLayers()``. La entrada de menú Sincronizar enfoques esta asociada a la extensión ``SynchronizeView3DExtension`` la cual obtendrá el `MapControl3D`_ de la vista activa y ejecutará el método ``MapControl3D#synchronizeViewPorts()``.
98 477 llmarques
99
Integración con la librería NASA WW SDK
100
----------------------------------------
101
102
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:
103
104 478 llmarques
.. image:: images/world-wind-diagram.png
105 477 llmarques
106
* Globe: representa la forma del planeta y el terreno. Contiene un Tessellator el cual es el encargado de generar el terreno.
107
* 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.
108
* Model: junta el globo y las capas.
109 478 llmarques
* View: determina la vista del usuario sobre el modelo. La vista se va modificando en base a los eventos de usuario que recibe.
110 477 llmarques
* SceneController: asocia la vista con el modelo. Controla el tiempo y el renderizado del modelo.
111
112
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:
113
114
* 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).
115
* 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.
116
* 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.
117
* 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``.
118
119
LIB API
120
---------
121
122
Este es el API de la lógica de la librería, la cual esta basada en el modelo de implementación simple API/IMPL
123
124
* Project: org.gvsig.view3d/org.gvsig.view3d.lib/org.gvsig.view3d.lib.api
125
* Package: org.gvsig.view3d.lib.api
126
127
LayerProperties3D
128
~~~~~~~~~~~~~~~~~~~~~~
129
130
Clase que representa la propiedades 3D de una capa.
131
132 480 llmarques
* getFormat() : String
133
134
  Obtiene el formato MIME de las teselas. El valor por defecto del modo de carga "Imagen raster" o "Vectorial rasterizada" es **image/png** y el formato por defecto del modo "Modelo digital del terreno" es **image/bil16**.
135
136
* setFormat(String theFormat) : void
137
138
  Asigna el formato de tipo MIME de las teselas. Dependiendo del modo de carga admite unos formatos u otros. Para el modo de carga "Imagen raster" o "Vecotiral raserizada" admite los formatos: image/png, image/jpg, image/jpeg y image/dds. Para el modo de carga "Modelo digital del terreno" acepta los formatos: image/bil16 y image/bil32.
139
140 477 llmarques
* setMaxLevel(int maxLevel) : void
141
142 481 llmarques
  Asigna el máximo nivel de detalle de la capa. Si el valor recibido como parámetro es igual a 0 o cadena vacía se asigna el valor óptimo dependiendo del tamaño del raster y del pixel.
143 477 llmarques
144
* getMaxLevel() : int
145
146 480 llmarques
  Obtiene el máximo nivel de detalle de la capa.
147 477 llmarques
148
* setMinLevel(int minLevel) : void
149
150 481 llmarques
  Asigna el mínimo nivel de detalle de la capa. Si el valor recibido como parámetro es igual a 0 o cadena vacía se asigna el valor óptimo dependiendo del tamaño del raster y del pixel.
151 477 llmarques
152
* getMinLevel() : int
153
154
  Obtiene el mínimo nivel de detalle de la capa.
155
156 480 llmarques
* getLevelZeroResolutionMultiplier() : double
157 477 llmarques
158 480 llmarques
  Obtiene el multiplicador de resolución del nivel cero de detalle.
159 477 llmarques
160 480 llmarques
* setLevelZeroresolutionMultiplier(double multiplier) : void
161 477 llmarques
162 480 llmarques
  Asigna el multiplicador de resolución al nivel cero de detalle. Admite como valor mínimo 0.5 y como valor máximo 1.5.
163 477 llmarques
164 480 llmarques
* getTileWidth() : int
165 477 llmarques
166 480 llmarques
  Obtiene el ancho en píxeles de una tesela.
167 477 llmarques
168 480 llmarques
* setTileWidth(int width) : void
169 477 llmarques
170 480 llmarques
  Asigna el ancho en píxeles de una tesela.
171 477 llmarques
172 480 llmarques
* getTileHeight() : int
173
174
  Obtiene el alto en píxles de una tesela.
175
176
* setTileHeight(int height) : void
177
178
  Asigna el ancho en píxeles de una tesela.
179
180 477 llmarques
* setElevation(boolean elevation) : void
181
182
  Asigna a la capa si el modo de carga de la capa es de elevación o no.
183
184
* getElevation() : boolean
185
186
  Obtiene si el modo de carga de la capa raster es de elevación o no.
187
188 480 llmarques
* getNoDataValue() : double
189
190
  Obtiene el valor tomado como No Data.
191
192
* setNoDataValue(double noDataValue) : void
193
194
  Asigna el valor No Data. Si no se asigna ningún valor se obtiene el valor por defecto -99999.0.
195
196
* getElevationUnits() : String
197
198
  Obtiene en que unidades se encuentra el valor de elevación.
199
200
* setElevationUnits(String units) : void
201
202
  Asigna en que unidades se encuentra el valor de elvación. Solo acepta dos unidades: metros y pies.
203
204 484 llmarques
RasterLayerProperties3D implements LayerProperties3D
205
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
206 480 llmarques
207
Clase que representa la propiedades 3D de una capa raster. De momento no tiene ninguna propiedad específica.
208
209 484 llmarques
VectorialLayerProperties3D implements LayerProperties3D
210
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
211 477 llmarques
212
Clase que representa la propiedades 3D de una capa vectorial.
213
214
* setRasterized(boolean rasterized) : void
215
216 480 llmarques
  Asigna a la capa si el modo de carga de la capa es rasterizado o no. Hay que tener en cuenta si ya se ha definido como elevación. Una capa solo puede ser o de elevación o rasterizada. Las dos propiedades a la vez es un estado inconsistente.
217 477 llmarques
218
* getRasterized() : boolean
219
220
  Obtiene si el modo de carga de la capa vectorial es rasterizado o no.
221
222 483 llmarques
* getElevationField() : String
223
224
  Obtiene el atributo del *FeatureType* que contiene la información de elevación. Solo se aplica cuando la capa es de tipo vectorial.
225
226
* setElevationField(String field) : void
227
228
  Asgina que atributo del *FeatureType* contiene la información de elevación. Solo se aplica cuando la capa es de tipo vectorial.
229
230 484 llmarques
MapControlProperties3D
231
~~~~~~~~~~~~~~~~~~~~~~
232 477 llmarques
233 484 llmarques
Clase que representa las propiedades 3D de un MapControl3D.
234
235
* getVerticalExageration() : double
236
237
  Obtiene la exageración vertical del `MapControl3D`_.
238
239
* setVerticalExageration(double verticalExageration) : void
240
241
  Asigna la exagearación vertical al `MapControl3D`_.
242
243
* getAutoViewPortSynchronize() : boolean
244
245 485 llmarques
  Obtiene si esta activada o no la sincronización automática de enfoques. Para la sincronización automática de enfoque la clase ``MapControl3D`` debe resgistrar un ``ViewPortListener`` en el ``Viewport`` de la vista enlaza. Esto le permitirá ejecutar el método ``MapControl3D#synchronizeViewports()`` cada vez que se llame al método ``ViewPortListener#extentChanged(ExtendEvent e)``.
246 484 llmarques
247
* setAutoViewPortSynchronize(boolean flag) : void
248
249
  Asigna un valor a la sincronización automática de enfoques. ``True`` activa la sincronización automática mientras que ``False`` lo esactiva.
250
251
* getAutoLayerSynchronize() : boolean
252
253 485 llmarques
  Obtiene si esta activa o no la sincronización de capas con cambios cuando se activa un visor. Para la sincronización automática de capas se debe registrar un ``FocusListener`` en la ventana que contiene el componenete WorldWind. Esto nos permite mediente el método ``FocusListener#focusGained(FocusEvent e)`` ejectuar el método ``MapControl3D#synchronizeLayers()`` cuando la ventana obtenga el foco.
254 484 llmarques
255
* setAutoLayerSynchronize(boolean flag) : void
256
257
  Asigna un valor a la sincronización automática de capas. ``True`` activa la sincronización automática mientras que ``False`` lo esactiva.
258
259
* getBlueMarbleLayerVisibility() : boolean
260
261
  Obtiene si esta visible o no la capa de fondo BlueMarble.
262
263
* setBlueMarbleLayerVisibility(boolean visibility) : void
264
265
  Asigna una visibilidad a la capa BlueMarble.
266
267
* getNasaLandsatLayerVisibility() : boolean
268
269
  Obtiene si esta visible o no la capa Nasa Landsat.
270
271
* setNasaLansatLayerVisibility() : boolean
272
273
  Asigna una visibilidad a la capa Nasa Landsat.
274
275
* getElevationVisiblity() : boolean
276
277
  Obtiene si esta visible o no la capa la capa de elevación global.
278
279
* setElevationVisibility(boolean visiblity) : void
280
281
  Asigna una visibilidad a la capa de elevaciones por defecto.
282
283
ViewProperties3D
284
~~~~~~~~~~~~~~~~~~~~~~
285
286
* getDefaultViewDimension() : Dimension
287
288
  Obtiene el tamaño por defecto de un visor 3D.
289
290
* setDefaultViewDimension(Dimension dimension) : void
291
292
  Asigna el tamaño por defecto de un visor 3D.
293
294
* getAtmosphereVisibility() : boolean
295
296
  Obtiene si es visible o no la capa que representa la atmósfera.
297
298
* setAtmosphereVisiblity(boolean visibility) : void
299
300
  Asigna una visibilidad a la capa que representa la atmósfera.
301
302
* getNorthIndicatorVisibility() : boolean
303
304
  Obtiene si es visible o no la capa que representa el indicador del norte.
305
306
* setNorthIndicatorVisiblity(boolean visibility) : void
307
308
  Asigna una visibilidad a la capa que representa el indicado del norte.
309
310
* getScaleVisibility() : boolean
311
312
  Obtiene si es visible o no la capa que representa la escala.
313
314
* setScaleVisiblity(boolean visibility) : void
315
316
  Asigna una visibilidad a la capa que representa la escala.
317
318
* getStarBackgroundVisibility() : boolean
319
320
  Obtiene si es visible o no la capa que representa el fondo de estrellas.
321
322
* setStarBackgroundVisiblity(boolean visibility) : void
323
324
  Asigna una visibilidad a la capa que representa el fondo de estrellas.
325
326
* getMinimapVisibility() : boolean
327
328
  Obtiene si es visible o no la capa que representa el minimapa.
329
330
* setMinimapVisiblity(boolean visibility) : void
331
332
  Asigna una visibilidad a la capa que representa el minimapa
333
334
* getAnimationViewPortSynchronize() : boolean
335
336
  Obtiene si esta activa o no la animación de sincronización de enfoques.
337
338
* setAnimationViewPortSynchronize(boolean flag) : void
339
340
  Asigna un valor para activar o desactivar la animación en la sincronización automática.
341
342
* getCachePath() : String
343
344
  Obtiene la ruta a la caché.
345
346
* setCachePath(String path) : void
347
348
  Asigna la ruta que recibe como parámetro a la caché.
349
350
View3DManager
351
~~~~~~~~~~~~~~~~~
352
353
* getLayerProperties3D(FLayer layer) : LayerProperties3D
354
355
  Obtiene las propiedades asociadas a un capa.
356
357
* setLayerProperties3D(FLayer layer, LayerProperties3D properties) : void
358
359
  Asigna las propiedades a la capa que recibe como parámetro.
360
361
* getViewProperties3D() : ViewProperties3D
362
363
  Obtiene las propiedades 3D generales de la aplicación.
364
365 477 llmarques
LIB IMPL
366
---------
367
368
Esta es la implementación de la lógica de la librería.
369
370 483 llmarques
DefaulRasterLayerProperties3D implements RasterLayerProperties3D
371
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
372 484 llmarques
373 477 llmarques
Implementación por defecto de las propiedades de las capas raster.
374
375 483 llmarques
DefaultVectorialLayerProperties3D implements VectorialLayerProperties3D
376 484 llmarques
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
377 477 llmarques
378
Implementación por defecto de la propiedades de las capas vectoriales.
379
380
SWING API
381
----------
382
383
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.
384
385
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api
386
* Package: org.gvsig.view3d.swing.api
387
388
View3DSwingManager
389
~~~~~~~~~~~~~~~~~~~~~~
390
391
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.
392
393
* createViewPanel3D(MapContext theMapContext, TYPE type) : ViewPanel3D
394
395
  Crea un objeto `ViewPanel3D`_ pasándole como parámetro el MapContext y el tipo de panel.
396
397
* createMapControl3D(MapContext mapContext, TYPE type) : MapControl3D
398
399
  Crea un objeto `MapControl3D`_ a partir del MapContext y el tipo.
400
401
* getMapControl3D(MapContext theMapContext, TYPE type) : MapControl3D
402
403
  Obtiene el `MapControl3D`_ del tipo indicado mediante el parámetro ``TYPE`` registrado al ``MapContext``. Si no hay ningún `MapControl3D`_ registrado devuelve ``null``.
404
405
MapControl3D
406
~~~~~~~~~~~~~~~~~~~~~~
407
408
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 capas WW para añadirlas al componente WorldWind.
409
410 484 llmarques
* getCancellable() : Cancellabl
411 477 llmarques
412 478 llmarques
  Obtiene el objeto compartido el cual permite cancelar todas las ordenes de pintado que se están ejecutando en un momento dado.
413 477 llmarques
414
* getMapContext() : MapContext
415
416
  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.
417
418
* getType() : TYPE
419
420 484 llmarques
  Obtiene el tipo del visor. Devuelve un objeto enum que puede ser ``TPYE.SPHERE`` o ``TYPE.FLAT`` (ver `TYPE`_).
421 477 llmarques
422
* getVerticalExaggeration() : double
423
424
  Obtiene la exageración vertical del visor.
425
426
* reloadLayers() : void
427
428
  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.
429
430
* setMapContext(MapContext theMapContext) : void
431
432
  Establece el MapContext al visor y recarga la información mediante reloadLayers().
433
434
* setVerticalExaggeration(double verticalExaggeration) : void
435
436
  Establece las exageración vertical del visor.
437
438
* showAtmosphere() : void
439
440
  Si no esta añadida la capa que representa la Atmosphera la añade al componente ``WorldWind``.
441
442
* showNortIndicator() : void
443
444
  Si no esta añadido el componente que representa el indicador del norte lo añade al componente ``WorldWind``.
445
446
* showMiniMap() : void
447
448
  Si no esta añadido el componente que representa el minimapa lo añade al componente ``WorldWind``.
449
450
* showScale() : void
451
452
  Si no esta añadido el componente que representa la escala lo añade al componente ``WorldWind``.
453
454
* showStarBackground() : void
455
456
  Si no esta añadido el componente que representa el fondo de estrellas lo añade al componente ``WorldWind``.
457
458
* synchronizeViewPorts() : void
459
460 485 llmarques
  Obtiene el ``ViewPort`` de la vista enlazada y realiza las transformaciones necesarias para obtener el ``Sector`` equivalente. Una vez obtenido el ``Sector`` hay que calcular el tamaño dentro del modelo actual usando ``Sector#computeBoundingBox(Globe globe, double verticalExaggeration, Sector sector)``. Con la extensión obtenida se debe estimar el zoom adecuado para que la extensión obtenida ocupe toda la vista. Una vez obtenido el zoom, habrá que usar ``View#goTo(Position position, double zoom)`` para cambiar el enfoque. Hay que tener en cuenta si la opción "Animación en la sincronización de enfoques" en las preferencias de la vista esta marcada o no. En caso de que este marcada la sincronización se debe realizar como se ha descrito anteriormente, en caso contrario, no hay que usar ``View#goTo(Position position, double zoom)`` sino ``View#setCenterPosition(Position position)`` y seguidamente ``View#setZoom(double zoom)``. En la método ``gov.nasa.worldwindx.examples.util.ExampleUtil#goto(WorldWindow wwd, Sector sector)`` se muestra un ejemplo de todo lo descrito anteriormente.
461 477 llmarques
462
* synchronizeLayers() : void
463
464 485 llmarques
  Comprueba que capas han sufrido cambios mediante el versionado del MapContext y la vuelve a recargar en el modelo del componente WW. Para la comprobación de cambios será necesario guardar las versiones de pintado de las capas en el momento de la instanciación del ``MapContext`` para que cuando este método se ejecute se compruebe con el valor actual de la capa para decidir si se sincroniza o no. Para recargar la capa se debe de eliminar y volver a añadir. Cuando se añade se debe de actualizar el registro de las versiones de pintado para futuras sincronizaciones.
465 477 llmarques
466
* hideAtmosphere() : void
467
468
  Si esta añadido, elimina el componente que representa la atmósfera del componente ``WorldWind``.
469
470
* hideMiniMapVisibility() : void
471
472
  Si esta añadido, elimina el componente que representa el minimapa del componente ``WorldWind`` si esta añadido.
473
474
* hideStarBackgroun() : void
475
476
  Si esta añadido, elimina el componente que representa el fondo de estrellas del componente ``WorldWind`` si esta añadido.
477
478
* hideNorthIndicator() : void
479
480
  Si esta añadido, elimina el componente que representa el indicador del norte del componente ``WorldWind`` si esta añadido.
481
482
* hideScale() : void
483
484
  Si esta añadido, elimina el componente que representa las escala  del componente ``WorldWind`` si esta añadido.
485
486 482 llmarques
* isAtmosphereVisible(): boolean
487
488
  Obtiene si esta visible o no la capa que representa la Atmosfera.
489
490
* isMinimapVisible(): boolean
491
492
  Obtiene si esta visible o no el Minimapa.
493
494
* isNorthIndicatorVisible(): boolean
495
496
  Obtiene si esta visible o no el indicador del Norte.
497
498
* isStartBackgroundVisible(): boolean
499
500
  Obtiene si esta visible o no el fondo de estrellas.
501
502
* isScaleVisible(): boolean
503
504
  Obtiene si esta visible o no la escala.
505
506 477 llmarques
DefaultTiledImageLayer
507
________________________
508
509
Los pasos para obtener una capa RasterTiledImageLayer son los siguientes:
510
511
* Configuración de los parámetros necesarios en un fichero XML para crear una capa del tipo RasterTileImageLayer. Los parámetros necesarios son:
512
513
 * DATASET_NAME: Nombre del dataset.
514
 * 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.
515
 * SERVICE_NAME: En nuestro caso siempre será *Offline*.
516
 * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
517
 * WIDTH: Ancho en píxeles de la imagen raster.
518
 * HEIGHT: Alto en píxeles de la imagen raster.
519
 * DISPLAY_NAME: Nombre de la capa.
520
 * IMAGE_FORMAT: Formato de los tiles que se generan. Se indican en formato MIME y se aceptan cuatro tipos: PNG, JPG, JPEG y DDS.
521 478 llmarques
 * PIXEL_FORMAT: Formato del pixel. Puede tener dos valores: AVKey.IMAGE y AVKey.ELEVATION. En caso de DefaultTiledImageLayer siempre será AVKey.IMAGE.
522 477 llmarques
 * TEXTURE_FORMAT: Tipo MIME del formato de la texturas. Se indican en formato MIME y se aceptan cuatro tipos: PNG, JPG, JPEG y DDS.
523
 * FORMAT_SUFFIX: sufijo de archivo de los tiles generados. Debe corresponderse al formato de imagen indicado.
524
 * AVAILABLE_IMAGE_FORMATS: Formatos de imagen disponibles.
525
 * TILE_ORIGIN: Origen desde donde se empiezan a crear los tiles.
526
 * TILE_WIDTH: Ancho en píxeles del tile.
527
 * TILE_HEIGHT: Alto en píxeles del tile.
528 478 llmarques
 * NUM_LEVELS: Numero de niveles de detalle. Por defecto se calcular el valor óptimo dependiendo de la resolución del raster.
529 477 llmarques
 * LEVEL_ZERO_DELTA: Objeto LatLon con valores en grados. Define que resolución corresponde a que nivel de detalle. Si el valor es muy pequeño (~1º) muestra en niveles de detalle bajos (0 o 1) resoluciones muy altas haciendo el proceso de pintado muy costoso. Es cambio si se asignan valores muy grandes (entre 36 y valores máximos) en niveles bajos de detalle se muestra una resolución muy pequeña haciendo que el proceso de pintado sea muy rápido. Por defecto en capas raster se calcula el valor óptimo y en capas rasterizadas se asigna el valor 20º.
530
 * NETWORK_RETRIEVAL_ENABLED: En nuestro caso siempre será ``false`` ya que para la libería los datos siempre están en local.
531
 * USE_MIP_MAPS: En este caso siempre tendrá el valor ``true`` debido a que mejora la visualización del raster.
532
 * USE_TRANSPARENT_TEXTURES: En este caso siempre tendrá el valor ``true`` debido a que mejora la visualización del raster.
533
534
535
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.
536
537
* 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.
538
539
DefaultElevationModel
540
________________________
541
542
Los pasos para obtener una capa RasterTiledImageLayer son los siguientes:
543
544
* Configuración de los parámetros necesarios en un fichero XML para crear una modelo de elevación ElevationModel. Los parámetros necesarios son:
545
546
  * DISPLAY_NAME: Nombre del modelo de elevación
547
  * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
548
  * WIDTH: ancho en píxeles de la imagen raster.
549
  * HEIGHT: alto en píxeles de la imagen raster.
550
  * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
551
  * IMAGE_FORMAT: formato de los tiles genera
552
  * DATA_TYPE: tipo de dato de la información del raster.
553
  * PIXEL_FORMAT: formato del pixel: AVKey.ELEVATION o AVKey.IMAGE
554
  * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
555
556
    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:
557
558
  * BYTE_ORDER: orden de los bytes. Little endian o big endian.
559
  * ELEVATION_MAX: elevación máxima y mínima.
560
  * ELEVATION_MIN: elevación mínima del raster.
561
  * EXPIRY_TIME: tiempo de expiración de un tile dentro de la cache.
562
  * MISSING_DATA_SIGNAL: Valor "no data"
563
  * MISSING_DATA_REPLACEMENT: Valor que se obtiene al obtener la elevación sobre un punto "no data".
564
  * NETWORK_RETRIEVAL_ENABLED: Indica el modo de trabajo online o offline.
565
  * ELEVATION_EXTREMES_FILE: ruta al fichero que contiene información sobre las elevaciones extremas.
566
567
* 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.
568
569
ViewPanel3D
570
~~~~~~~~~~~~~~~~~~~~~~
571
572
Representa la ventana que contiene el componente `MapControl3D`_.
573
574
* show() : void
575
576
  Invoca al WindowManager para mostrar el visor en modo ventana.
577
578
* getMapControl3D() : MapControl3D
579
580
  Devuelve el componente asociado a la ventana.
581
582
TYPE
583
~~~~~~~~~~~~~~~~~~~~~~
584
585
Enumerado que representa los dos tipos posibles de un visor 3D. Los dos tipos son: SPHERE y FLAT.
586
587
SWING IMPL
588
--------------
589
590
Este es la implementación de la interfaz de usuario de la librería del visor 3D.
591
592
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl
593
* Package: or.gvsig.view3d.swing.impl
594
595
DefaultView3DManager implements View3DManager
596
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
597
598
Implementación por defecto del manager View3DManager
599
600
DefaultViewPanel3D implements ViewPanel3D
601
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
602
603
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...
604
605
* public DefaultViewPanel3D(MapContext mapContext, TYPE type);
606
607 478 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#convertToLayer(layer)``) de la capa gvSIG a una capa WW en base al modo de carga asociado especificado por el usuario.
608 477 llmarques
609
LayerConverter
610
~~~~~~~~~~~~~~~~~~~~~~
611
612
Interfaz que permite convertir una capa gvSIG en una capa WW o en un modelo de elevación. Este proceso depende del tipo de capa y el modo de carga definido.
613
614
* convertToLayer(FLayer layer) : gov.nasa.worldwind.layers.Layer
615
616
  Método que a partir de una capa gvSIG obtiene una capa WW.
617
618
* convertToElevationModel(FLayer layer) : gov.nasa.worldwind.globes.ElevationModel
619
620
  Método que permite convertir una capa de gvSIG en un ElevationModel el cual representa una elevación del terreno.
621
622
DefaultLayerConverter
623
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
624
625
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)``.
626
627
RasterTiledImageLayer extends BasicTiledImageLayer
628
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
629
630
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.
631
632 484 llmarques
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.
633 477 llmarques
634 484 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.
635 477 llmarques
636
DefaultRetrieverFactory implements RetrieverFactory
637
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
638
639 484 llmarques
Implementación por defecto de un ``RetrieverFactory``. Representa la factoría para la creación de instancias de objetos ``Retriever``.
640 477 llmarques
641
* createRetriever(AVList params, RetrievalPostProcessor postProcessor) : Retriever
642
643 484 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``.
644 477 llmarques
645
DefaultRasterRetriever implements Retriever
646
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
647
648 484 llmarques
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.
649 477 llmarques
650
DefaultRasterServer implements RasterServer
651
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
652
653 484 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``.
654 477 llmarques
655
* getRasterAsByteBuffer(AVList params) : ByteBuffer
656
657
  Obtiene del DataRaster asociado la información definida en los parámetros que recibe y la devuelve en un objeto java.nio.ByteBuffer.
658
659
* getSector() : Sector
660
661
  Obtiene el sector del data raster asociado.
662
663
DefaulDataRasterReaderFactory extends BasicDataRasterReaderFactory
664
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
665
666 484 llmarques
Factoría que permite la creación de nuestra implementación ``DefaultDataReaderRasterReader`` a partir de un objeto de tipo ``DataStore``.
667 477 llmarques
668
* findReaderFor(Object source, AVList params) : DataRasterReader
669
670 484 llmarques
  Obtiene la instancia de ``DataRasterReader`` apropiada para la lectura de la fuente de datos.
671 477 llmarques
672
DefaultDataRasterReader extends AbstractDataRasterReader
673
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
674
675 484 llmarques
Permite saber si se puede leer y obtener objetos ``DataRaster`` a partir de DataStore validando lo parámetros y metadatos del almacén.
676 477 llmarques
677
* canRead(Object source, AVList params) : boolean
678
679 484 llmarques
  Obtiene si este DataRasterReader es capaz de leer la fuente de datos y crear objetos ``DataRaster``.
680 477 llmarques
681
* read(Object source, AVList params) throws java.io.IOException : DataRaster[]
682
683 484 llmarques
  Lee de la fuente de datos y crea objetos ``DataRaster``.
684 477 llmarques
685
* readMetadata(Object source, AVList params) throws java.io.IOException : AVList
686
687 484 llmarques
  Obtiene los metadatos asociados a las fuente de datos. Los metadatos varían en función de la fuente y el ``DataRasterReader``.
688 477 llmarques
689
* isImageryRaster(Object source, AVList params) : boolean
690
691
  Obtiene si la fuente de datos es de tipo raster imagen.
692
693
* isElevationsRaster(Object source, AVList params) : boolean
694
695
  Obtiene si la fuente de datos es de tipo imagen
696
697
GvSIGLayerDataRaster implements DataRaster
698
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
699
700
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.
701
702
* getWidth() : int
703
704
  Obtiene el ancho en píxeles del raster.
705
706
* getHeiht() : int
707
708
  Obtiene el alto en píxeles del raster.
709
710
* drawOnTo(DataRaster canvas) : void
711
712 478 llmarques
  Copia la información de este raster al especificado por parámetro. Es usado para hacer peticiones de datos sobre zonas determinadas por el tamaño y posición del DataRaster especificado.
713 477 llmarques
714
* getSubRaster(AVList params) : DataRaster
715
716
  A partir de los parámetros que recibe obtiene una sección del raster.
717
718
* getSubRaster(int with, int height, Sector sector, AVList params) : DataRaster
719
720
  A partir de los parámetros que recibe obtiene una sección del raster.
721
722
View3D APP
723
----------------
724
725
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:
726
727
* org.gvsig.view3d.app
728
729
  - about
730
  - i18n
731
  - images
732
  - lib
733
734
    + dependencias comunes
735
    + dependencias nativas de la plataforma
736
737
  - config.xml
738
  - package.info
739
740
Plugin common
741
~~~~~~~~~~~~~~~~~~~~~~
742
743
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.
744
745 479 llmarques
* View3DExtension: extensión de Andami asociada a dos acciones: "flat-view3d" y "sphere-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.
746 481 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#synchronizeLayers()``.
747 477 llmarques
* 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()``.
748
749 479 llmarques
Preferencias
750
~~~~~~~~~~~~~~~~~~~~~~
751
752
El plugin view3D maneja diferentes tipos de preferencias que dependiendo de a que afecten se sitúan en un lugar u otro. Existen tres tipos: preferencias 3D de capa, preferencias de vista y preferencias generales.
753
754
Preferencias 3D de capa
755
________________________
756
757
La preferecias de capa afectan solo a una capa. Esta preferencias serán accesibles desde la propiedades de capa del menu contextual del TOC. Para añadir una nueva pestaña a las propiedades de una capa, nuestro panel de propiedades 3D debe extender de la clase ``AbstractThemeManagePage``. La clase que representa la vista se creará dentro de `Plugin common`_ y usuará como modelo la clase `LayerProperties3D`_. A continuación se muestra dos *mockups* de los paneles. El primero representa los parámetros configurables cuando el modo de carga es *Vectorial rasterizada* e *Imagen raster* mientras que el segundo *mockup* representa las opciones configurables cuando el modo de carga es *Modelo ditital del terreno*.
758
759
.. image:: images/layer-properties-raster.jpg
760
761
Mockup 1: Panel de propiedades cuando el modo de carga es *Vectorial rasterizada* o *Imagen raster*.
762
Explicación de las propiedades:
763
764
* Formato de imagen: formato de los tiles generados. Las opciones disponibles son png, jpg, jpeg y dds.
765
* Nivel de detalle: numero mínimo y máximo de nivel de detalle. Para el valor óptimo dejar en blanco.
766
* Resolución nivel cero: resolución en el nivel cero. Por defecto se calcula el valor óptimo teniendo en cuenta el número de niveles de detalle y el tamaño del pixel del raster. En la posición central se situa el valor por defecto, el cual es aumentado o reducido si el usuario establece una resolución baja o alta en el nivel cero.
767
* Tamaño de tesela: tamaño en pixeles de los tiles generados.
768
769
.. image:: images/layer-properties-mdt.jpg
770
771
Mockup 2: Panel de propiedades cuando el modo de carga es *Modelo digital del terreno*.
772
Explicación de las propiedades disponibles:
773
774
* Formato de la imagen: formato de los tiles de elevación generados. Se puede elegir entre Bil16 o Bil32.
775
* Campo altura: al elegir sobre una capa vectorial el modo de cargar MDT, este campo se activa para indicar que campo del FeatureType representa la altura. Si la capa no es de tipo vectorial este campo aparecerá deshabilitado.
776
* Unidades del valor altura: Unidades del valor alutura. Dos opciones: metros y pies.
777
* Valor No Data: Valor del No Data. Todos los pixeles con este valor no se representarán en el visor.
778
* Nivel de detalle: numero mínimo y máximo de nivel de detalle. Para el valor óptimo dejar en blanco.
779
* Resolución nivel cero: resolución en el nivel cero. Por defecto se calcula el valor óptimo teniendo en cuenta el número de niveles de detalle y el tamaño del pixel del raster. En la posición central se situa el valor por defecto, el cual es aumentado o reducido si el usuario establece una resolución baja o alta en el nivel cero.
780
* Tamaño de tesela: tamaño en pixeles de los tiles.
781
782
783
Properties3DManager extends AbstractThemeManagerPage
784
''''''''''''''''''''''''''''''''''''''''''''''''''''
785
786
* getName()
787
788
  Obtiene el nombre de la pestaña que mostrará el panel. En este caso "3D".
789
790
* getPriority()
791
792
  Obtiene la priporidad del panel. Cuanta más prioridad más a la izquierda aparecerá.
793
794
* acceptAction()
795
796
  Método ejecutado cuando el botón "Aceptar" es pulsado. Delega en el método Properties3DManager#applyAction().
797
798
* applyAction()
799
800
  Método ejecutado cuando el botón "Aplicar" es pulsado. Se debe obtener los valores de los campos del panel de propiedades y actualizar el modelo de la capa correspondiente.
801
802
* cancelAction()
803
804
  Método ejecutado cuando el botón "Cancelar" es pulsado. Se deben de descartar todos los cambios efectuados sobre el modelo de la capa.
805
806
* setModel(FLayer)
807
808
  Método ejecutado al abrir el panel de propiedades. Debe de obtener el modelo a partir de la capa y actualizar los campos del panel.
809
810 482 llmarques
Preferencias 3D de vista
811
________________________
812 479 llmarques
813 484 llmarques
La preferencias de vista solo afectan a los visores enlazados a esa vista. Estas preferencias serán accesibles desde las propiedades de vista del gestor de documentos. Para añadir una nueva pestaña a las propiedades de vista se debe seguir el siguiente post:
814 482 llmarques
815 484 llmarques
 http://blog.gvsig.org/2015/02/16/anadir-una-pagina-de-propiedades-al-dialogo-de-propiedades-de-la-vista-en-gvsig-2-1/
816 482 llmarques
817 484 llmarques
La clase que representa el panel se creará dentro de `Plugin common`_ y usará como modelo la clase `MapControlProperties3D`_. A continuación se muestra un mockup del panel de propiedades.
818 482 llmarques
819 484 llmarques
.. image:: images/mapcontrol3d-properties.jpg
820 482 llmarques
821 484 llmarques
Mockup3: panel de preferencias 3D de vista
822
Explicación de los parámetros:
823
824
* Exageración vertical visor esférico: muestra la exageración vertical actual del visor esférico. Permite cambiar el valor.
825
* Exageración vertical visor plano: muestra la exageración vertical actual del visor plano. Permite cambiar el valor.
826
* Sincronización automática de enfoques: permite activar o desactivar la sincronización de enfoques automática.
827
* Sincronización automática de capas: permite activar o desactivas la sincronización de capas cuando se active un visor de forma automática.
828
* Mostrar capa BlueMarble: permite mostrar u ocultar la capa BlueMarble.
829
* Mostrar capa NASA Landsat: permite mostrar u ocultar la capa NASA Landsat.
830
* Mostrar elevación global: permite activar o desactivar la elevación por defecto global.
831
832
Preferencias 3D de aplicación
833
_____________________________
834
835
La preferencias de aplicación afectan al plugin 3D en general. Estas preferencias serán accesible desde la preferencias de aplicación de gvSIG. Para añadir un nuevo panel a las preferencias general seguir el siguiente post:
836
837
 http://blog.gvsig.org/2015/02/05/como-gestionar-las-preferencias-de-un-plugin-en-gvsig-2-1/
838
839
La clase que representa el panel se creará dentro de `Plugin common`_ y usuará como modelo la clase `ViewProperties3D`_. A continuación se muestra un mockup del panel de propiedades.
840
841
.. image:: images/view3d-properties.jpg
842
843
Mockup4: panel de preferencias 3D generales.
844
Explicación de los parámetros:
845
846
* Tamaño por defecto: tamaño por defecto del visor 3D cuando se crea.
847
* Mostrar atmósfera: permite mostrar u ocultar la atmósfera.
848
* Mostrar indicator del norte: permite mostrar u ocultar el indicador del norte.
849
* Mostrar minimapa: permite mostrar u ocultar el minimapa.
850
* Mostrar fondo de estrellas: permite mostrar u ocultar el fondo de estrellas.
851
* Mostrar escala: permite mostrar u ocultar la escala.
852
* Ruta de la caché: muestra la ruta de la cache. Permite modificar la ruta.
853
* Borrar caché: permite borra la caché de tiles. Borra la cache de la ruta espeficidada en el momento de accionar el botón.
854
855
856 477 llmarques
Persistencia
857
~~~~~~~~~~~~~~~~~~~~~~
858
859
.. note::
860 479 llmarques
   TODO