Statistics
| Revision:

svn-gvsig-desktop / branches / v05 / libraries / libFMap / docs / Diseño_Styling.html @ 34016

History | View | Annotate | Download (8.7 KB)

1 2183 fernando
<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>