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ÑO STYLING (LEYENDAS)</strong></h2> |
||
10 | <h3>1.- Descripción de la solución propuesta</h3> |
||
11 | <p>Se me ocurre que en lugar de que una leyenda SLD sea una colección "plana" |
||
12 | de símbolos, debería ser un árbol. De esta manera, podemos |
||
13 | trabajar con símbolos complejos (compuestos de otros símbolos). |
||
14 | Cuando se quiera generar el SLD a partir de una leyenda nuestra, se recorre |
||
15 | el árbol en profundidad, escribiendo solo los nodos finales. Si se quiere
|
||
16 | obtener la leyenda de un SLD, obtendremos un árbol "plano", |
||
17 | solo con nodos finales.</p>
|
||
18 | <p>La lectura/escritura de un SLD no es una tarea crítica. Da igual si |
||
19 | se hace rápido o no, así que he optado por usar Geotools2, y traducir |
||
20 | los símbolos que entrega la clase SLDTransformer. Con esto ya tenemos
|
||
21 | un parser, y solo necesitamos traducir nuestros símbolos a los símbolos |
||
22 | de GT2. Nosotros implementaremos los símbolos tí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ás, no tenemos ningún servidor libre que implemente bien |
||
26 | SLD todavía.</p> |
||
27 | <p>El patrón escogido es el Composite => una colección de símbolos |
||
28 | también implementa la interfaz del símbolo.</p> |
||
29 | <p>Para que un desarrollador pueda crear un símbolo que se comporte de |
||
30 | una manera especial, el símbolo debería tener una llamada para |
||
31 | dibujar un shape. Por tanto, habría que cambiar el sistema de dibujado
|
||
32 | un poco, que no sea una clase "FGraphicUtilities" la que dibuja, sino |
||
33 | que sea el símbolo el responsable del dibujado.</p> |
||
34 | <p>La idea es que a un símbolo simple le pasa el graphics, un Shape y una |
||
35 | matriz de transformación, y te dibuja en el graphics. Dependiendo del
|
||
36 | tipo de símbolo que sea, ya estará preparado para pintar polígonos |
||
37 | con relleno, lí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ímbolo,
|
||
40 | ya sabes para qué lo quieres (para puntos, líneas, etc).</p> |
||
41 | <p>Para conseguir la extensibilidad con los símbolos, es decir, que un |
||
42 | desarrollador implemente su símbolo especial, le pondremos al interfaz
|
||
43 | símbolo una función que devuelva la clase de un panel que sirva |
||
44 | para especificar ese símbolo. Es decir, el desarrollador suministra,
|
||
45 | además del símbolo, la clase que devolverá ese símbolo. |
||
46 | Esta clase será un panel extendido que devolverá el símbolo. |
||
47 | A la hora de dar a escoger al usuario los símbolos que puede seleccionar,
|
||
48 | miraremos los sí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ímbolo especial.</p> |
||
51 | <p>Para cada tipo de símbolo que suministramos nosotros, daremos una clase |
||
52 | panel para ese símbolo.</p> |
||
53 | <p>Para aclarar más las cosas:</p> |
||
54 | <p>Un símbolo tendrá una función getShapeType que indicará |
||
55 | si es adecuado para renderizar puntos, líneas o polígonos. En |
||
56 | función del tipo de shape de una capa, cuando le demos al botón |
||
57 | de leyenda, aparecerán solo los símbolos que sean adecuados a |
||
58 | ese tipo de shape. Por ejemplo, si la capa es de puntos, solo aparecerán
|
||
59 | símbolos aplicables a los puntos. Si la capa es mixta, el usuario podrá |
||
60 | seleccionar a qué tipo de shape le está poniendo el símbolo. |
||
61 | (Un combo box con algo como "Ver símbolos para puntos", "líneas", |
||
62 | "polígonos"). Dentro de la ventana de "Selector de símbolo", |
||
63 | habrá una zona con los símbolos de la librería, un "preview", |
||
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ímbolos de la clase seleccionada.
|
||
66 | Las opciones comunes son:</p>
|
||
67 | <p>- Para puntos: Color, tamaño, ángulo</p> |
||
68 | <p>- Para líneas: Color, ancho</p> |
||
69 | <p>- Para polígonos: Fill color, outline width, outline color</p> |
||
70 | <p>Cuando apretamos al botón de Propiedades de símbolo, entramos |
||
71 | en otro formulario con 4 zonas: Preview, Layers y Properties. La zona de Layers |
||
72 | controla los diferentes símbolos que componen el nuestro (al pintar,
|
||
73 | se dibuja primero el de más abajo y se va subiendo). La zona Properties
|
||
74 | empieza con un combo box llamado "Tipo de símbolo". 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ígonos, este combo muestra "Gradient Fill Symbol", |
||
78 | "Line Fill Symbol", "Marker Fill Symbol", "Picture |
||
79 | Fill Symbol", "Simple Fill Symbol" (ordenados alfabéticamente). |
||
80 | Nosotros vamos a implementar por ahora Simple Fill Symbol y Line Fill Symbol, |
||
81 | pero el resto no debería costar mucho.</p> |
||
82 | <p>Los tipo de símbolo para <strong>lí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ñas (Cartographic Line, Template y |
||
86 | Line Properties). En la primera pestaña puedes fijar el color, grosor
|
||
87 | y "Line caps" (Butt, Round y Square) y "Line Joins" (Mitter, |
||
88 | Round, Bevel). En la pestaña de template, el pattern que va a usar la
|
||
89 | línea, y en la pestaña de Line Properties, el offset y los "decoradores" |
||
90 | (cómo termina la línea (con flecha, círculo, etc)).</p> |
||
91 | <p>- Hash Line Symbol (en realidad, se parece a una mezcla de una simple sólida |
||
92 | + otra dashed). Lo único es que la capa de dashed puede girar sus tramitos
|
||
93 | con un ángulo de rotación) Creo que por ahora no hace falta implementarlo |
||
94 | en gvSIG.</p>
|
||
95 | <p>- Marker Line Symbol. Además de los mismo que en Cartographic Line, |
||
96 | una pestaña para seleccionar el sí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ígono</strong>:</p> |
||
100 | <p>- Simple Fill Symbol: Una pestaña con el color de Fondo, el outline |
||
101 | color, el grosor del outline y un botón para seleccionar el tipo de línea |
||
102 | que abre la ventana "Symbol Selector" mostrando todos los tipos de |
||
103 | línea disponibles.</p> |
||
104 | <p>- Line Fill Symbol: Una pestaña con el color del tramado, 3 números |
||
105 | con el ángulo, el offset y la separación, y 2 botones que llaman |
||
106 | al "Symbol Selector" para seleccionar el tipo de línea a usar |
||
107 | con el tramado y con el outline.</p>
|
||
108 | <p>- Marker Fill Symbol. Una pestaña (no 2 como en ArcGis) con el color |
||
109 | del símbolo, un botón para el tipo de símbolo a emplear, |
||
110 | el outline, si lo quieres matricial o aleatorio, el offset en x e y, y la separació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 ángulo.</p> |
||
115 | <p>Para <strong>puntos</strong>:</p> |
||
116 | <p>- Character Marker Symbol: 2 pestañas, una con Color, Carácter, |
||
117 | Fuente, Tamaño, Ángulo, Offset y otra con la máscara, donde |
||
118 | podemos fijar el halo (con o sin halo, y si es con halo, fijar el color y el |
||
119 | tamaño). </p> |
||
120 | <p>- Picture Marker Symbol: Escoges la imágen de un fichero, y le puedes |
||
121 | fijar el tamaño. (Quizás alguna vez se puede necesitar fijar también |
||
122 | la rotación y el offset).</p> |
||
123 | <p>- Single Marker Symbol: Color, Estilo (Círculo, cuadrado, cruz, X, rombo), |
||
124 | tamaño, use outline, outline size, offset (x e y). También con |
||
125 | pestaña de máscara.</p> |
||
126 | <p> </p> |
||
127 | <h3>Propuesta de Diagrama de Objetos:</h3> |
||
128 | <p> </p> |
||
129 | <p> </p> |
||
130 | <p> </p> |
||
131 | <p> </p> |
||
132 | <p> </p> |
||
133 | <p> </p> |