Statistics
| Revision:

svn-gvsig-desktop / tags / Root_Fmap_GisPlanet / libraries / libFMap / docs / Diseño_Styling.html @ 1826

History | View | Annotate | Download (8.7 KB)

1
<style type="text/css">
2
<!--
3
.textoNormal {
4
        font-family: Arial, Helvetica, sans-serif;
5
}
6
-->
7
</style>
8
<body class="textoNormal">
9
<h2><strong>DISE&Ntilde;O STYLING (LEYENDAS)</strong></h2>
10
<h3>1.- Descripci&oacute;n de la soluci&oacute;n propuesta</h3>
11
<p>Se me ocurre que en lugar de que una leyenda SLD sea una colecci&oacute;n &quot;plana&quot; 
12
  de s&iacute;mbolos, deber&iacute;a ser un &aacute;rbol. De esta manera, podemos 
13
  trabajar con s&iacute;mbolos complejos (compuestos de otros s&iacute;mbolos). 
14
  Cuando se quiera generar el SLD a partir de una leyenda nuestra, se recorre 
15
  el &aacute;rbol en profundidad, escribiendo solo los nodos finales. Si se quiere 
16
  obtener la leyenda de un SLD, obtendremos un &aacute;rbol &quot;plano&quot;, 
17
  solo con nodos finales.</p>
18
<p>La lectura/escritura de un SLD no es una tarea cr&iacute;tica. Da igual si 
19
  se hace r&aacute;pido o no, as&iacute; que he optado por usar Geotools2, y traducir 
20
  los s&iacute;mbolos que entrega la clase SLDTransformer. Con esto ya tenemos 
21
  un parser, y solo necesitamos traducir nuestros s&iacute;mbolos a los s&iacute;mbolos 
22
  de GT2. Nosotros implementaremos los s&iacute;mbolos t&iacute;picos que gestiona 
23
  GT2, y el resto de ampliaciones, si se pueden exportar bien, y si no, se pone 
24
  algo por defecto.</p>
25
<p>Adem&aacute;s, no tenemos ning&uacute;n servidor libre que implemente bien 
26
  SLD todav&iacute;a.</p>
27
<p>El patr&oacute;n escogido es el Composite =&gt; una colecci&oacute;n de s&iacute;mbolos 
28
  tambi&eacute;n implementa la interfaz del s&iacute;mbolo.</p>
29
<p>Para que un desarrollador pueda crear un s&iacute;mbolo que se comporte de 
30
  una manera especial, el s&iacute;mbolo deber&iacute;a tener una llamada para 
31
  dibujar un shape. Por tanto, habr&iacute;a que cambiar el sistema de dibujado 
32
  un poco, que no sea una clase &quot;FGraphicUtilities&quot; la que dibuja, sino 
33
  que sea el s&iacute;mbolo el responsable del dibujado.</p>
34
<p>La idea es que a un s&iacute;mbolo simple le pasa el graphics, un Shape y una 
35
  matriz de transformaci&oacute;n, y te dibuja en el graphics. Dependiendo del 
36
  tipo de s&iacute;mbolo que sea, ya estar&aacute; preparado para pintar pol&iacute;gonos 
37
  con relleno, l&iacute;neas, puntos o etiquetas. Para eso, montamos una herencia 
38
  con clases como FSymbolPolygon, FSymbolLine, FSymbolPoint, FSymbolPoint, FSymbolLabelPoint, 
39
  FSymbolLabelLine, FSymbolLabelPolygon. Es decir, cuando creas un s&iacute;mbolo, 
40
  ya sabes para qu&eacute; lo quieres (para puntos, l&iacute;neas, etc).</p>
41
<p>Para conseguir la extensibilidad con los s&iacute;mbolos, es decir, que un 
42
  desarrollador implemente su s&iacute;mbolo especial, le pondremos al interfaz 
43
  s&iacute;mbolo una funci&oacute;n que devuelva la clase de un panel que sirva 
44
  para especificar ese s&iacute;mbolo. Es decir, el desarrollador suministra, 
45
  adem&aacute;s del s&iacute;mbolo, la clase que devolver&aacute; ese s&iacute;mbolo. 
46
  Esta clase ser&aacute; un panel extendido que devolver&aacute; el s&iacute;mbolo. 
47
  A la hora de dar a escoger al usuario los s&iacute;mbolos que puede seleccionar, 
48
  miraremos los s&iacute;mbolos que devuelvan algo coherente (una clase instanciable) 
49
  con esa llamada. Si no se suministra esa clase, no damos la posiblidad de escoger 
50
  el s&iacute;mbolo especial.</p>
51
<p>Para cada tipo de s&iacute;mbolo que suministramos nosotros, daremos una clase 
52
  panel para ese s&iacute;mbolo.</p>
53
<p>Para aclarar m&aacute;s las cosas:</p>
54
<p>Un s&iacute;mbolo tendr&aacute; una funci&oacute;n getShapeType que indicar&aacute; 
55
  si es adecuado para renderizar puntos, l&iacute;neas o pol&iacute;gonos. En 
56
  funci&oacute;n del tipo de shape de una capa, cuando le demos al bot&oacute;n 
57
  de leyenda, aparecer&aacute;n solo los s&iacute;mbolos que sean adecuados a 
58
  ese tipo de shape. Por ejemplo, si la capa es de puntos, solo aparecer&aacute;n 
59
  s&iacute;mbolos aplicables a los puntos. Si la capa es mixta, el usuario podr&aacute; 
60
  seleccionar a qu&eacute; tipo de shape le est&aacute; poniendo el s&iacute;mbolo. 
61
  (Un combo box con algo como &quot;Ver s&iacute;mbolos para puntos&quot;, &quot;l&iacute;neas&quot;, 
62
  &quot;pol&iacute;gonos&quot;). Dentro de la ventana de &quot;Selector de s&iacute;mbolo&quot;, 
63
  habr&aacute; una zona con los s&iacute;mbolos de la librer&iacute;a, un &quot;preview&quot;, 
64
  una zona de botones con los botones de OK, Cancel, Save... y Propiedades, y 
65
  una zona de opciones comunes a todos los s&iacute;mbolos de la clase seleccionada. 
66
  Las opciones comunes son:</p>
67
<p>- Para puntos: Color, tama&ntilde;o, &aacute;ngulo</p>
68
<p>- Para l&iacute;neas: Color, ancho</p>
69
<p>- Para pol&iacute;gonos: Fill color, outline width, outline color</p>
70
<p>Cuando apretamos al bot&oacute;n de Propiedades de s&iacute;mbolo, entramos 
71
  en otro formulario con 4 zonas: Preview, Layers y Properties. La zona de Layers 
72
  controla los diferentes s&iacute;mbolos que componen el nuestro (al pintar, 
73
  se dibuja primero el de m&aacute;s abajo y se va subiendo). La zona Properties 
74
  empieza con un combo box llamado &quot;Tipo de s&iacute;mbolo&quot;. Este combo 
75
  se tiene que rellenar en tiempo real a partir de las clases que implementen 
76
  el interfaz IFSymbol adecuado a lo que pretendemos dibujar. Por ejemplo, en 
77
  ArcGis y para pol&iacute;gonos, este combo muestra &quot;Gradient Fill Symbol&quot;, 
78
  &quot;Line Fill Symbol&quot;, &quot;Marker Fill Symbol&quot;, &quot;Picture 
79
  Fill Symbol&quot;, &quot;Simple Fill Symbol&quot; (ordenados alfab&eacute;ticamente). 
80
  Nosotros vamos a implementar por ahora Simple Fill Symbol y Line Fill Symbol, 
81
  pero el resto no deber&iacute;a costar mucho.</p>
82
<p>Los tipo de s&iacute;mbolo para <strong>l&iacute;nea</strong> en ArcGis son:</p>
83
<p>- Simple Line: Color, Estilo (solido, dashed, dotted, dash-dot, dash-dot-dot), 
84
  Grosor</p>
85
<p>- Cartographic Line: Tiene 3 pesta&ntilde;as (Cartographic Line, Template y 
86
  Line Properties). En la primera pesta&ntilde;a puedes fijar el color, grosor 
87
  y &quot;Line caps&quot; (Butt, Round y Square) y &quot;Line Joins&quot; (Mitter, 
88
  Round, Bevel). En la pesta&ntilde;a de template, el pattern que va a usar la 
89
  l&iacute;nea, y en la pesta&ntilde;a de Line Properties, el offset y los &quot;decoradores&quot; 
90
  (c&oacute;mo termina la l&iacute;nea (con flecha, c&iacute;rculo, etc)).</p>
91
<p>- Hash Line Symbol (en realidad, se parece a una mezcla de una simple s&oacute;lida 
92
  + otra dashed). Lo &uacute;nico es que la capa de dashed puede girar sus tramitos 
93
  con un &aacute;ngulo de rotaci&oacute;n) Creo que por ahora no hace falta implementarlo 
94
  en gvSIG.</p>
95
<p>- Marker Line Symbol. Adem&aacute;s de los mismo que en Cartographic Line, 
96
  una pesta&ntilde;a para seleccionar el s&iacute;mbolo que quieres que se repita.</p>
97
<p>- Picture Line Symbol. Esta la podemos implementar como una imagen que recuperas 
98
  de disco, y la usas para crear un TexturePaint. </p>
99
<p>Para <strong>Pol&iacute;gono</strong>:</p>
100
<p>- Simple Fill Symbol: Una pesta&ntilde;a con el color de Fondo, el outline 
101
  color, el grosor del outline y un bot&oacute;n para seleccionar el tipo de l&iacute;nea 
102
  que abre la ventana &quot;Symbol Selector&quot; mostrando todos los tipos de 
103
  l&iacute;nea disponibles.</p>
104
<p>- Line Fill Symbol: Una pesta&ntilde;a con el color del tramado, 3 n&uacute;meros 
105
  con el &aacute;ngulo, el offset y la separaci&oacute;n, y 2 botones que llaman 
106
  al &quot;Symbol Selector&quot; para seleccionar el tipo de l&iacute;nea a usar 
107
  con el tramado y con el outline.</p>
108
<p>- Marker Fill Symbol. Una pesta&ntilde;a (no 2 como en ArcGis) con el color 
109
  del s&iacute;mbolo, un bot&oacute;n para el tipo de s&iacute;mbolo a emplear, 
110
  el outline, si lo quieres matricial o aleatorio, el offset en x e y, y la separaci&oacute;n 
111
  en x e y.</p>
112
<p>- Picture Fill: Usar una imagen para montar un TexturePaint</p>
113
<p>- Gradient Fill: Fijar el outline, la rampa de colores, si lo quieres linear 
114
  o circular y el &aacute;ngulo.</p>
115
<p>Para <strong>puntos</strong>:</p>
116
<p>- Character Marker Symbol: 2 pesta&ntilde;as, una con Color, Car&aacute;cter, 
117
  Fuente, Tama&ntilde;o, &Aacute;ngulo, Offset y otra con la m&aacute;scara, donde 
118
  podemos fijar el halo (con o sin halo, y si es con halo, fijar el color y el 
119
  tama&ntilde;o). </p>
120
<p>- Picture Marker Symbol: Escoges la im&aacute;gen de un fichero, y le puedes 
121
  fijar el tama&ntilde;o. (Quiz&aacute;s alguna vez se puede necesitar fijar tambi&eacute;n 
122
  la rotaci&oacute;n y el offset).</p>
123
<p>- Single Marker Symbol: Color, Estilo (C&iacute;rculo, cuadrado, cruz, X, rombo), 
124
  tama&ntilde;o, use outline, outline size, offset (x e y). Tambi&eacute;n con 
125
  pesta&ntilde;a de m&aacute;scara.</p>
126
<p>&nbsp;</p>
127
<h3>Propuesta de Diagrama de Objetos:</h3>
128
<p>&nbsp;</p>
129
<p>&nbsp;</p>
130
<p>&nbsp;</p>
131
<p>&nbsp;</p>
132
<p>&nbsp;</p>
133
<p>&nbsp;</p>