Revision 398

View differences:

2.1/trunk/doc/Fase 1/dt-visor-3d.rst
1
=================================================================
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: 2
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
Este documento detalla el diseño técnico del nuevo visor 3D basado en la librería NASA WW SDK para gvSIG 2.1+. Para más información consulte:
51

  
52
 * http://worldwind.arc.nasa.gov/java/
53
 * http://goworldwind.org/
54

  
55
El diseño técnico tendrá en cuenta el análisis de requisitos y el análisis funcional realizados. En primer lugar se detallarán el API y las implementaciones de los diferentes módulos del proyecto.  
56

  
57
Diseño técnico
58
=====================
59

  
60
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á el API e implementación de la librería y las extensiones del plugin.
61

  
62
Ejemplo de casos de uso
63
-------------------------------
64

  
65
A partir de una vista 2D, se desea representar la información cargada en la vista 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 (View3DExtension, una única extensión para dos acciones). Al pulsar sobre uno de los botones, el plugin accederá a la información de la vista activa mediante la obtención del MapControl y la servirá a la librería NASA WW SDK mediante View3DModel#add(FLayer layer). El modelo obtendrá la capa equivalente mediante el View3DManager#getWWLayer(FLayer, loadMode) y la añadirá a un objeto gov.nasa.worldwind.Model. Cuando todas las capas han sido añadidas, se creará el visor mediante View3DSwingManager#createView3DPanel(MapControl, model).
66

  
67
Además de las dos extensiones para la creación de visores, el usuario también dispondrá de una extensión llamada RefreshView3DExtension para la actualización de los datos del visor activo con los posibles cambios efectuados sobre la vista 2D. La extensión ejecutará el método View3DPanel#reloadLayers().
68

  
69
Y finalmente, existirá una última extensión llamada SynchronizeView3DExtension que permitirá al usuario sincronizar los enfoques de la vista 2D y el visor 3D asociado a la vista. Se accederá al ViewPort del MapControl asociado para sincronizarlo con el enfoque del visor 3D.
70

  
71
LIB API
72
--------
73

  
74
.. note::
75
   Los métodos deben lanzar excepciones hacia el nivel más alto de la librería. Como no esta definido el API de excepciones no indico que tipo de excepciones pueden lanzar los métodos.
76

  
77
Este es el API de la librería del visor 3D, la cual esta basada en el modelo de implementación simple API/IMPL.
78

  
79
* Project: org.gvsig.view3d/org.gvsig.view3d.lib/org.gvsig.view3d.lib.api
80
* Package: or.gvsig.view3d.lib.api
81

  
82
View3DManager 
83
*********************************************
84

  
85
Proveerá las siguientes operaciones:
86

  
87
* getWWLayer(FLayer layer, int loadMode) : gov.nasa.worldwind.layers.Layer
88

  
89
A partir de una capa de gvSIG y un modo de carga se obtiene una capa nativa de la librería World Wind. Existen 4 modos de carga: raster imagen, raster elevación, vectorial rasterizada y vectorial 3d. Dependiendo del modo de carga se obtendrá una capa nativa u otra.
90

  
91

  
92
DataReader 
93
*********************************************
94

  
95
Proveerá las siguientes operaciones:
96

  
97
* canRead(Object sourceFile) : boolean
98

  
99
Determina si la fuente de datos se puede acceder o no. Puede recibir como parámetro un objeto del tipo File, java.net.URL, String o java.io.InputStream. 
100

  
101
* read(Object sourceFile) : gov.nasa.worldwind.layers.Layer
102

  
103
A partir de una fuente de datos crea una capa gov.nasa.worldwind.layers.Layer.
104

  
105

  
106
SWING API
107
----------
108

  
109
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.
110

  
111
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api
112
* Package: or.gvsig.view3d.swing.api
113

  
114
View3DSwingManager
115
********************
116

  
117
* createView3DModel(int mode) : View3DModel
118

  
119
Crea un modelo a partir del modo. El modo puede tener dos valores: View3dModel.SPHERE y View3DModel.FLAT. El método configura todo lo necesario en la librería NASA WW SDK para la creación de un visor según el modo.
120

  
121
* createView3DModel(int mode, FLayers layers) : View3DModel
122

  
123
Crea un modelo a partir del modo. El modo puede tener dos valores: View3dModel.SPHERE y View3DModel.FLAT. El método configura todo lo necesario en la librería NASA WW SDK para la creación de un visor según el modo. Además recorre la colección de layers y las añade al modelo creado.
124

  
125
* createView3DPanel(MapControl theMapControl, View3DModel theModel) : View3DPanel
126

  
127
Crea un panel con el componente para dibujar la información en 3D a partir de un MapControl y un modelo.
128

  
129
View3DPanel extends JPanel
130
****************************
131

  
132
Clase abstracta que extiende de JPanel. Como JPanel no tiene una interfaz definida, crearemos una clase abstracta que implementará la vista del visor (tamaño, inicialización de componentes...) y definirá el API de nuestro componente. Se añadirá los siguientes métodos definidos pero sin implementarlos.
133

  
134
* getMapControl() : MapControl
135

  
136
Obtiene el mapControl asociado al panel. Del mapControl asociado se extrae la información necesaria para la representación de los datos en 3D y la sincronización de enfoques.
137

  
138
* getModel() : View3DModel
139

  
140
Obtiene el modelo del visor.
141

  
142
* getVerticalExaggeration() : double
143

  
144
Obtiene la exageración vertical del visor.
145

  
146
* reloadLayers() : void
147

  
148
Elimina las capas del modelo de la vista. Accede al MapControl asociado al visor y carga de nuevo las capas. Se usa para actualizar el visor con los posibles cambios realizados sobre la vista 2D.
149

  
150
* setMapControl(MapControl theMapControl) : void
151

  
152
Establece el mapControl al visor. 
153

  
154
* setVerticalExaggeration(double verticalExaggeration) : void
155

  
156
Establece las exageración vertical del visor.
157

  
158
* show() : void
159

  
160
Muestra el visor. 
161

  
162
* showAtmosphere() : void
163

  
164
Muestra la atmósfera si el visor es esférico.
165

  
166
* showNortIndicator() : void
167

  
168
Muestra el indicador del norte.
169

  
170
* showMiniMap() : void
171

  
172
Muestra el minimapa.
173

  
174
* showScale() : void
175

  
176
Muestra la escala de la capa.
177

  
178
* showStarBackgroundLayer() : void
179

  
180
Muestra el fondo de estrellas.
181

  
182
* hideAtmosphere() : void
183

  
184
Oculta la atmósfera en visores esféricos.
185

  
186
* hideMiniMap() : void
187

  
188
Oculta el minimapa.
189

  
190
* hideStarBackgroundLayer() : void
191

  
192
Oculta el fondo de estrellas.
193

  
194
* hideNorthIndicator() : void
195

  
196
Oculta el indicador del norte.
197

  
198
* hideScale() : void
199

  
200
Oculta la escala del mapa.
201

  
202
* synchronizeViewPorts() : void
203

  
204
Sincroniza el viewPort de la vista 2D enlazada al visor con el enfoque del visor 3D.
205

  
206
View3DModel
207
**************
208

  
209
* add(FLayer layer) : void
210

  
211
A partir de la capa que recibe como parámetro, obtiene la capa equivalente en la librería World Wind y la añade al modelo. 
212

  
213
* add(FLayers layers) : void
214

  
215
A partir de la colección de capas, obtiene las capas equivalentes en la librería World Wind y las añade al modelo respetando el orden.
216

  
217
* remove(FLayer layer) : void
218

  
219
Elimina del modelo la capa equivalente de la recibida como parámetro.
220

  
221
* removeAll() : void
222

  
223
Elimina todas las capas del modelo.
224

  
225
LIB IMPL
226
----------
227

  
228
DefaultView3DManager implements View3dManager
229
****************************************************
230

  
231
Implementación por defecto del manager View3DManager
232

  
233
DefaultVectorialDataReader implements DataReader
234
*************************************************
235

  
236
Implementación por defecto de la interfaz DataReader. Esta implementación se debe usar para acceder cuando la fuente de datos sea de tipo vectorial. 
237

  
238
DefaultRasterDataReader implements DataReader
239
************************************************
240

  
241
Implementación por defecto de la interfaz DataReader. Esta implementación se debe usar para acceder cuando la fuente de datos sea de tipo raster. 
242

  
243
DefaultElevationDataReader implements DataReader
244
************************************************
245

  
246
Implementación por defecto de la interfaz DataReader. Esta implementación se debe usar para acceder cuando la fuente de datos sea de tipo raster y el modo de carga elevación.
247
 
248

  
249
SWING IMPL
250
--------------
251

  
252
DefaultView3DSwingManager implements View3DSwingManager
253
********************************************************
254

  
255
Implementación por defecto del manager View3DSwingManager
256

  
257
DefaultView3DModel implements View3DModel
258
******************************************
259

  
260
Implementación por defecto de la clase View3DModel
261

  
262
DefaultView3DPanel extends View3DPanel
263
***************************************************
264

  
265
Implementación por defecto de los métodos descritos en la clase abstracta View3DPanel
266

  
267
View3D Plugin
268
----------------
269

  
270
Plugin principal de la librería. Estará compuesto por tres extensiones: View3DExtension, RefreshView3DExtension y SynchronizeView3DExtension. Además, gestionará la persistencia de las opciones establecidas por el usuario. El plugin registrará las acciones mediante el config.xml y creará el instalable con los archivos JARs.
271

  
272
View3DExtension
273
************************
274

  
275
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 modelo, añadirán las capas de la vista activa, crearán el panel del visor 3D a partir del modelo y lo mostrarán.
276

  
277
RefreshView3DExtension
278
************************
279

  
280
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 View3DPanel y ejecutará la operación View3DPanel#reloadLayers().
281

  
282
SynchronizeView3DExtension
283
****************************
284

  
285
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 View3DPanel y ejecutará la operación View3DPanel#synchronizeViewPorts().
286

  
287
Persistencia
288
******************
289

  
290
Se creará un archivo llamado plugin-persistence.def que definirá la estructura de las preferencias. A priori las preferencias tendrán las siguientes propiedades:
291

  
292
 * Tamaño por defecto x : int
293
 * Tamaño por defecto y : int
294
 * Mostrar minimapa : boolean
295
 * Mostrar atmósfera : boolean
296
 * Mostrar escala : boolean
297
 * Mostrar indicar del norte : boolean
298
 * Mostrar fondo de estrellas : boolean
299

  
300
Se creará un panel para añadirlo a las preferencias generales de aplicación para que el usuario pueda modificar las preferencias del plugin.

Also available in: Unified diff