Definicin del formato de grfico de Aerotri. 10 de diciembre de 2009, versin 02.
La versin 02 es provisional. Vase ms abajo extensiones futuras.

La unidad bsica es el 4-byte, o sea, 4 bytes. Dentro de este, b0, b1, b2, b3 indican los bytes
que lo componen, comenzando en el ms bajo, y b01 y b23 los 2-bytes bajo y alto.

	4-byte 0:
		b0: xxx000yy
			yy: Tipo de coordenadas
					0 Aproximadas
					1 Ajuste parcial
					2 Ajuste completo
			xxx: Nmero de decimales con que se deben dar las coordenadas, en la unidad de la coordenada Z
					(X,Y pueden tener un factor de escala que modifique este valor). 111 (7) indica 7 o mayor.
		b1: Libre
		b2: 00, 01  02		Versin
		b3: BA	(Si no es as se supone que no es un fichero de grfico de Aerotri)
	4-bytes 1-12: Xmin Xmax Ymin Ymax Zmin Zmax

	Si un visor de grfico encuentra un fichero con un nmero de versin mayor que el ltimo que
	conoce, el fichero se cerrar sin llegarse a leer. Por ello, aunque un fichero incorpore caracte-
	rsticas de viersiones posteriores, debe almacenar la versin ms baja que pueda leer el fichero
	sin omisiones graves.
	Las versiones 00 y 01 no se deben leer ni generar (las generaban versiones de Aerotri antiguas).
	En su lugar se ha de transformar el fichero a la versin 02.

	4-bytes 13- : Elementos


ELEMENTOS:

Los primeros bytes son comunes a todos los elementos:

	4-byte 0:
		b0: Tipo
		b1: Subtipo
		b23: 4-byte que siguen, a partir del 4-byte 1
	4-byte 1:
		b01: 4-byte que siguen hasta la informacin adicional.
		b23: Flags (la mayora todava sin definir, reservados para futuras versiones)

Tras la cabecera deben situarse los elementos 250: tipos 252-254. Cuando aparezca
el primer elemento con un tipo distinto de estos se entiende que ya no queda ninguno.
El tipo 255 indica el final del fichero.

La informacin adicional puede no existir, en cuyo caso el contenido de los bytes 4-5 ser el mismo
que el de los bytes 2-3.
Los campos numricos que ocupan 8 bytes son double y los que ocupan 4 float.


--- Elementos 254, 253, 252 y 251:

//254 Sistema de coordenadas
//253-252 elementos reservados para futuras versiones. No debern aparecer nunca en un fichero.
//251. Este elemento nunca ser asignado y ser ignorado siempre por el visor de Aerotri

El sistema de coordenadas no afecta a las elipses y segmentos de precisin, residuos, y en general
a todos los valores que se almacenan en simple precisin, que se muestran en la unidad de la coordenada Z.

//254
	byte 1: Subtipo
		0: Rectangular
		1: Otro Conforme
		2: Lambert (y Mercator)
		3: UTM
		4: Estereogrfica
		5-9: Reservado para otras proyecciones conformes
		10: Geogrificas
		11: Otro Ortogonal (meridianos y paralelos son ortogonales en la proyeccin, pero la proyeccin no es conforme)
		12-19: Reservado para proyecciones ortogonales

	0 Rectangular:
		Nada ms (el ltimo 4-byte, si no hay informacin adicional, es el 1, y por tanto los bytes 2-3 y 4-5 estarn a 1)

	1 Otro Conforme:
		4-byte 1, b01= 22 si hay dos coef. de k.
		2-3: X0
		4-5: Y0
		6-7: Ondulacin del geoide: Altura de los puntos con Z=0 en relacin a la superficie de referencia para las coordenadas planimtricas
		8-9: Radio de curvatura mayor N
		10-11: Radio de curvatura menor rho
		12-13: cos(conv0) conv0="Convergencia de meridianos", ngulo que forma el eje Y del sistema en el punto (X0,Y0) con
		14-15: sin(conv0)					el Norte geogrfico. Positivo si el eje est hacia el Este. En radianes
							La comprobacin para ver si conv!=0 tiene que ser sin(conv0)!=0; no debe ser cos(conv0)!=1.
		16-17: k0. Factor de escala por el que estn afectadas las coordeandas planimtricas en relacin a las altimtricas, en el punto (X0,Y0)
		18:	b01: Nmero de coeficientes que siguen en el desarrollo de k. (No tiene sentido ms de 5, pues no se da el desarrollo en serie de la superficie ms all de la curvatura)
				b23: Libres
		19 - 19+2n-1: Coeficientes de k: k=k0+a1(X-X0)+a2(Y-Y0)+a3(X-X0)^2+a4(X-X0)(Y-Y0)+a5(Y-Y0)^2+...

	2 Lambert:		La proyeccin Mercator es una Lambert con phi0=0
		 4-byte 1, b01= 15  16
		2-3: a (radio equatorial)
		4-5: e^2 (1 excent. al cuadrado)
		6-7: Ondulacin
		8-9: Latitud central (latitud de escala mnima). En grados sexagesimales
		10-11: k0. Factor de escala en el paralelo central
		12-13: Desplazamiento X
		14-15: Desplazamiento Y
		(16): Meridiano central, en grados sexagesimales. Este campo es opcional

	3 UTM:
		4-byte 1, b01= 13  14
		2-3: a
		4-5: e^2
		6-7: Ondulacin
		8-9: k0. Factor de escala en el meridiano central
		10-11: Desplazamiento X
		12-13: Desplazamiento Y
		(14): Meridiano central, en grados sexagesimales. Este campo es opcional

	4 Estereogrfica:
		4-byte 1, b01= 13  14
		2-3: Radio polar (=a^2/b)
		4-5: e^2
		6-7: Ondulacin
		8-9: k0. Factor de escala en el polo de la proyeccin
		10-11: Desplazamiento X
		12-13: Desplazamiento Y
		(14): Meridiano seguido por el sentido positivo del eje Y, en grados sexagesimales.
						Este campo es opcional. Debe ser negativo si estamos en el Polo Norte (-0 - -360) y positivo en el Sur (0-360)

	10: Geogrficas: Las coordenadas han de ser grados sexagesimales
		4-byte 1, b01= 7
		2-3: a
		4-5: e^2
		6-7: Ondulacin

	11: Otro ortogonal
		4-byte 1, b01= 26 si hay dos coef. de k.
		2-3: X0
		4-5: Y0
		6-7: Ondulacin
		8-9: phi0
		10-11: Radio N
		12-13: Radio rho
		14-15: cos(conv0)
		16-17: sin(conv0)
		18-19: kx0. Factor de escala de las coordenadas X en el punto (X0,Y0), en relacin a la Z
		20-21: ky0. Idem de las Y.
		22:	b01: Nmero de coeficientes que siguen en el desarrollo de k
				b23: Libres
		23 - 23+2n-1: Coeficientes de k: kx=kx0+a1(Y-Y0)+a3(Y-Y0)^2+...  ky=ky0+a2(Y-Y0)+a4(Y-Y0)^2+...


--- Estructura de elementos normales (tipo<=250):

	0:	b0: Tipo, b1: Subtipo
		b23: 4-byte que siguen, a partir del byte 4
	1:	b01: 4-byte que siguen hasta la informacin adicional.
		b23: Un bit 1 en la posicin ms alta significa que el elemento se ignora. El siguiente
		bit indica si ciertos campos estn almacenados con simple o doble precisin,
		y adems si se representan segn la proyeccin o en la unidad de la coordenada Z:
			0: simple precisin, unidad de Z
			1: doble precisin, proyeccin
		Los 4 bits ms bajos indican el tipo de informacin geomtrica almacenada.
		Para todos los elementos de un mismo tipo debe tener el mismo valor:
			0: punto
			1: lnea poligonal
			2: polgono
			3: segmento escalable (origen y vector)
			4: lnea poligonal escalable (sucesin de pares origen-vector)
			5: elipse en uno de los planos coordenados
			6: elipse siguiendo otra orientacin
			7: giro
			8: elipsoide
			Para los elementos del 3 al 8 el bit de simple/doble precisin arriba mencionado se refiere a
			los desplazamientos, sx, giros, etc. 	(todo menos las coordenadas del origen).
		El resto, reservado para futuras versiones

	2-13: Xmin Xmax Ymin Ymax Zmin Zmax
	14:	b0: Bytes que ocupa el nombre, que empieza en el byte 58, incluyendo el carcter 0 de fin de cadena.
			b1: libre
			b2- : El nombre.
	14+?: Si el ltimo 4-bit qeda incompleto sus bytes altos se rellenan con ceros.

	Resto del elemento.

	Al final del fichero se pone FFFF FFFF (por lo tanto el primer FF est en la posicin del tipo de elemento)

El signficado de los tipos y subtipos estar descrito en el fichero .cfg a asociado a cada grfico.
La estructura de cada elemento tras el nombre segn los bits bajos del byte 6 es la siguiente:

//0: punto. No hay nada tras el nombre (los propios valores mximo y mnimo hacen de coordenadas).
	0-: Info. adic.

//1: lnea poligonal
	0: b01: Nmero de vrtices
		b23: libres
	1-6: primer punto
	...
	6(n-1)+1 a 6n: ltimo punto
	6n+1 - : Info. adic.

//2: polgono
	0-5: X,Y,Z del centro
	6:	b01: Nmero de vrtices
		b23: libres
	7-12: primer punto
	...
	6(n-1)+7 a 6n+6: ltimo punto
	6n+7 - : Info. adic.

	El ltimo punto podr o no ser igual que el primero; es decir, el primer punto podr o no estar repetido al final.
	Ntese que el centro puede ser cualquier punto, por lo que se puede emplear este elemento para representar
	pirmides o, como en el caso de los fotogramas, un haz de rayos proyectivos.

//3: segmento escalable
	0-5: X,Y,Z del origen
	6-8: dx,dy,dz
	9-: Info. adic.

//3a (con bit de doble prec. a 1): Igual que 3, pero los valores dx,dy,dz son double:
	0-5: X,Y,Z del origen
	6-11: dx,dy,dz
	12-: Info. adic.

//4: lnea poligonal escalable
	0:	b01: Nmero de vrtices
		b23: libres
	1-6: X,Y,Z primer punto origen
	7-9: dx,dy,dz del primer punto
	...
	9(n-1)+1 a 9n: X,Y,Z, dx,dy,dz del ltimo punto
	9n+1 - : Info. adic.

	Se puede emplear este elemento para crear un polgono escalable cuya representacin
	sea indipendiente de la proyeccin, sin ms que indicar como puntos origen siempre
	el mismo punto.

//4a (con bit de doble prec. a 1): Igual que 4, pero los valores dx,dy,dz son double:
	1-6: X,Y,Z primer punto origen
	7-12: dx,dy,dz del primer punto
	...
	12(n-1)+1 a 12n: X,Y,Z, dx,dy,dz del ltimo punto
	12n+1 - : Info. adic.

//5: elipse contenida en algn plano coordenado
	0-5: Coordenadas del centro
	6:	b0: Orientacin:	0, x,y;	1, y,z;	2, z,x.
		b1, b23: libres
	7: s^2x	( y,  z)
	8: sxy
	9: s^2y	( z,  x)
	10-: Info. adic.

//5a (con bit de doble prec. a 1): Igual que 5, pero a partir del 4-byte 7 los datos son double:
	7-8: s^2x	( y,  z)
	9-10: sxy
	11-12: s^2y	( z,  x)
	13-: Info. adic.

//6: elipse contenida en otro plano
	0-5: Coordenadas del centro
	6-8: Coordenadas de un extremo del eje mayor respecto al centro
	9-1: Coordenadas de un extremo del eje menor respecto al centro
	12-: Info. adic.

//6a (con bit de doble prec. a 1): Igual que 6, pero a partir del 4-byte 6 los datos son double:
	0-5: Coordenadas del centro
	6-11: Coordenadas de un extremo del eje mayor respecto al centro
	12-17: Coordenadas de un extremo del eje menor respecto al centro
	18-: Info. adic.

//7: giro
	0-5: Coordenadas del punto
	6:	b0: Parametrizacin. Vase el fichero rotacionDocum.pdf
		b1, b23: libres
	7-9: Los tres parmetros
	10-: Info. adic.

//7a (con bit de doble prec. a 1): Igual que 7, pero a partir del 4-byte 7 los datos son double:
	7-12: Los tres parmetros
	13-: Info. adic.

//8: Elipsoide
	0-5: Coordenadas del centro
	Media-Matriz
	6:sxx
	7:sxy	8:syy
	9:sxz	10:syz		11:szz
	12-: Info. adic.
	
//8a (con bit de doble prec. a 1): Igual que 8, pero a partir del 4-byte 6 los datos son double
	0-5: Coordenadas del centro
	Media-Matriz
	6-7:sxx
	8-9:sxy		10-11:syy
	12-13:sxz	14-15:syz		16-17:szz
	18-: Info. adic.


	Los elementos con tipos 3 y 8 tienen una estructura especfica. Esta particularidad
	desaparecer en la versin 3.
		3: Segmento de precisin
		8: Fotograma

Si no se indica nada tras el valor de los bit bajos del byte 6 se entiende que el elemento est almacenado
igual que uno genrico con el mismo valor, con bit de double a 0 (datos float). Los nmeros de 4-byte
que aparecen a continuacin se cuentan a partir del primero tras el nombre.

//3 Lnea de precisin
	byte 6: 3
	0-5: X,Y,Z del centro
	6:	b0: Orientacin: 0, z; 1, x; 2, y.
		b1,b23: libres
	7: semilongitud (s)
	8-: Info. adic.

//8 fotograma
	byte 6: 2
	En las coordenadas extremas, en la Z no se incluye el c.p.
	0-5:  X,Y,Z centro
	6-11:   p1
	12-17: p2
	18-23: p3
	24-29: p4
	30-: Info. adic.


--- Informacin adicional

La informacin adicional deber estar formada por bloques estructurados del siguiente modo:
	4-byte0:
		b0: Cdigo que indica el tipo de informacin almacenada en el bloque.
		b1: Libre
		b23: 4-byte que ocupa el bloque (por lo tanto empieza a contar en el byte 0).
	4-bytes 1 a n-1: La informacin

Los cdigos 250-255 estn reservados para su definicin en el futuro. Los dems nunca sern definidos.

//255: conjuntos de elementos a los que pertenece el elemento. Cada elemento puede tener solamente
			un bloque de inf. adic. con cdigo=255
	1: b01; b23: n de agrupacin; conjunto al que pertenece dentro de esa agrupacin
	2: b01; b23: n de agrupacin; conjunto al que pertenece dentro de esa agrupacin
	etc.

		Cada agrupacin es, como su nombre indica, una agrupacin de los elementos en conjuntos,
	de manera que los conjuntos de una agrupacin son independientes de los de otra.
		En caso de que unas agrupaciones contengan superconjuntos de otras se recomienda que los
	nmeros de las agrupaciones vayan ascendiendo a medida que los conjuntos son ms grandes.
		Cuando en un conjunto hay un elemento, y solo uno, con nombre (es decir, que para los dems
	es una cadena vaca) puede interpretarse como un elemento compuesto. No obstante, esta
	posibilidad as como su interpretacin se deja a la libre eleccin de cada visor. Se puede por ejemplo
	ofrecer la posibilidad de interpretar como elementos compuestos los de unas agrupaciones pero
	no los de otras.
		La representacin de cada elemento se define en el fichero de configuracin en funcin de
	los tipos, subtipos y conjuntos. Por ello, si se quiere que un elemento tenga una representacin nica,
	distinta de las de otros similares, es necesario incluirlo en un conjunto a l solo. Se recomienda
	emplear para ello las agrupaciones 0 y 255.


-- Extensiones futuras (versin 03)

Todos los bits a 1 para alguna coordenada, en particular para la Z, tendr tal vez
el significado de no existir Z; por ejemplo para residuos de dos componentes o para polgonos
que delimiten un rea.

Se eliminar el carcter predefinido de los tipos 3 y 8.

Se aadir el elemento "Texto".

Se definir tal vez un tipo de informacin adicional que signfique "descripcin", de tipo textual.

Inclusin de informacin acerca de la codificacin empleada para las informaciones textuales,
divida en nombres de elementos, elementos Texto y descripciones: caracteres unicode puros 16 bits,
utf-8, windows-griego... mediante alguno de los tipos reservados (prob. 253), con posibilidad de
indicar una distinta para cada elemento. El nombre de elemento comenzar en el 4-byte 15.
El 4-byte 14, b0, indicar el tamao en 4-bytes, en lugar de en bytes como ahora.


FICHERO DE CONFIGURACIN, .cfg

\begin Info
Version 00
%Otra informacin
\end

El formato de este fichero todava es inestable y podr cambiar sin que se modifique el nmero de versin.
El elemento Info consta de varios pares nombre/valor. Se recomienda que el primero de ellos sea la versin.
De momento estn definidos adems los elementos Formas, Fondo y Resalte:

Formas "misformas.fdf"
Fondo DDDDDD
Resalte FFFFFF

Fondo es el color de fondo, en hexadecimal, como se explica ms abajo, y Resalte el color de los elementos reslatados,
por ejemplo los seleccionados.
Formas indica el fichero de definicin de formas para los elementos puntuales. El nombre del fichero se extiende desde
el segundo carcter distinto de espacio (en este caso la 'm') hasta el que preceda a la ltima aparicin en la lnea
del primer caracter, en este caso una comilla "; es decir, hasta la 'f' que precede a la segunda y ltima ".
Por ejemplo

Formas .misformas.ldf.
Formas .misformas.ldf.xxxx

ambas lneas indican el fichero misformas.ldf
El caracter delimitador no puede ser %.

De esta manera el nombre del fichero puede contener cualquier combiancin de caracteres excepto saltos de lnea.
Si el fichero no es una ruta absoluta se buscar primero tomando como directorio base el directorio en el que
se encuentra el fichero de grfico, a continuacin un directorio fijo que cada visor/editor definir (por ejemplo,
C:\programas\Visor\configraciones\formas\ ) y por ltimo en ese mismo directorio. Por ejemplo

Formas  .\puntos\parcela.fdf

hara que se buscase el fichero parcela.fdf en los siguientes directorios:
1.  .\puntos\   en relacin al fichero de grfico
2.  C:\programas\Visor\configraciones\formas\puntos\
3.  C:\programas\Visor\configraciones\formas\

Si el fichero no se encuentra o si no se indica un fichero deber emplearse el fichero por defecto formas.fdf


Para los tipos su representacin y significado viene indicado como sigue, en donde se ejemplifica con el tipo 32.
La explicacin se desarrolla a continuacin.

\begin Tipo 32

Significado Vrtices de la red Regente
\begin Representacion		%Opcional
Forma 0424
Color B060D8
\end Representacion		%Opcional

\begin Texto
Color A0A0A0
\end Texto

\begin Subtipo criterio 1 1 2
Significado Empleado
\begin Representacion		%Opcional
Color 8800DD
\end Representacion		%Opcional
\end Subtipo

\end Tipo

Las especificaciones que pueden aparecer en Representacion dependen del tipo geomtrico de elemento:
el valor de los bits bajos del byte 6. Los que no sean de aplicacin sern ignorados. De momento Grfico tiene definidos los siguientes:

Color		En hexadecimal, en formato RRGGBB (RojoVerdeAzul)
Forma	Para los puntos. Un nmero de forma, expresado en base 10, 8 0 16 con la notacin del lenguaje C.
				Las formas se encuentran definidas en el fichero de formas. La forma 0200 es vaca (no se representa el punto).
				La forma por defecto para todos los elementos excepto puntos y centros de polgono es 0200 (no representar el punto).
				Para puntos y polgonos (byte6 bajo  igual a 0 o 2) cada visor tendr sendas formas por defecto.
Escala		aplicada para representarlo, para elementos (byte 6 bajo) entre 2 y 10.
				En el elemento 2 (polgono) se aplica respecto al punto indicado como centro. En los giros se multiplican
				los tres valores; tiene sentido para giros pequeos. En los dems elementos su aplicacin es obvia.
Grosor	En pxeles. Valor con decimales, p. e., 0.8, 2.25, etc.
GrosorT	Grosor en unidades terreno (por lo tanto aumenta al aumentar el zoom).
Estilol		Estilo de lnea. Todava no estn definidos.
Estilo		Modo de representar el elemento. Su significado depende del tipo de elemento.
				Para los elipsoides: 0: elipse xy ( yz  zx) y segmento z ( x  y); no hay implementados ms. Para los
				giros todava no est definido.
Color2, Color3, Grosor2, GrosorT2, Tamanno,... 	Para los elipsoides y giros. Los distintos parmetros que puedan
			aparecer dependen del Estilo.
			En los elipsoides con Estilo 0, los parmetros Color, Estilol, Grosor y GrosorT son los de la elipse, mientras
			que Color2, etc. son los del segmento. Si no aparecen estos ltimos se tomarn iguales a los de la elipse.
FormaP, ColorP	Para el centro de los polgonos.

Las lneas "\begin Representacion" y el "\end" correspondiente son opcionales.

Dentro del elemento Texto pueden aparecer los siguientes campos

Font	Por defecto en el visor de Aerotri es Times new Roman, pero cada visor puede definir una fuente por defecto.
Size		El valor por defecto es 14
Color	Por defecto se emplea el mismo que para el elemento

Tras cada cualidad (Color, Forma, etc.) puede aparecer la palabra from, en cuyo caso el valor de esa cualidad
se toma de otro tipo/subtipo segn las siguientes opciones:
from subtipo m					Igual que la especificada para el subtipo m de este mismo tipo
from tipo n						Igual que la especificada para el tipo n
from tipo n subtipo m		Igual que la especificada para el tipo n, subtipo m

Si tras la especificacin de tipo/subtipo se encuentra la palabra texto, la cualidad de toma del texto
del tipo/subtipo en cuestin:

Color from tipo 3 texto

Si lo que aparece es el nombre de una cualidad se tomar de esa cualidad en lugar de la del mismo nombre,
siempre que tenga sentido, y pueden combinarse ambas indicaciones:

Color from tipo 2 Color2
Color3 from tipo 2 texto Color

Aunque en este ltimo caso, si se omitiese la palabra "Color", un programa visor de grficos
podra deducir que dado que el texto no tiene definido Color3 el valor se ha de tomar de Color.

"from ." siginifica tomar la cualidad igual que la del elemento. Se usa normalmente para el texto o para
propiedades secundarias:

Grosor2 from . Grosor
\begin Texto
Color from .
\end

El tipo indicado tras from puede ser el propio tipo en el que estamos, si el resultado no es una referencia a la
cualidad que se est definiendo. Es vlido por ejemplo dentro de un bloque \begin Subtipo ... \end,
o \begin Texto ... \end, o indicando otra cualidad al final (Color2 from tipo 13 Color3, por ejemplo). Fuera de
bloques \begin Subtipo ... \end indicar el tipo corriente es lo mismo que "from .".

La especificacin from puede ir precedida de la "cualidad" All, con el significado obvio. Si All aparece
fuera de \begin Representacion ... \end tambin copia Significado, la representacin del Texto y, en un tipo,
los subtipos. Pero si ese tipo incluye subtipos estos no se ven afectados por la indicacin All. Por ejemplo

\begin Tipo 21
All from tipo 20
\begin Subtipo 1
Color FF0000
\end
\end Tipo

Si el tipo 20 incluye un subtipo 1, no se copiar nada de ste al subtipo 1 del tipo 21.

Si aparece una cualidad dos veces, una con la especificacin from y otra con un valor concreto, la especificacin from
tiene preferencia. Si embargo la indicacin All from es la que menos preferencia tiene de todas, de modo que
cualquiera otra la reemplaza. Ejemplo:
\begin Tipo 35
Significado Lmite de parcela
All from tipo 34
\end Tipo

Con lo cual el tipo 35 toma todo del 34 excepto Significado, que es reemplazado por Lmite de parcela.
Los Significados de los subtipos del tipo 34 se aaden a "Lmite de parcela" para el tipo 35.

De cara a la indicacin All from, Significado y SignificadoR funcionan como una unidad, de manera que si existe
cualquiera de ellos no se copiara ninguno de los dos.

All from .	%no es vlido, ni siquiera dentro de Texto.

Dentro de Texto, la indicacin from que sigue a All se sobreentiende que se refiere al texto,
y fuera de l no est permitida una referencia All a un texto:

\begin Texto
	All from tipo 2			%es lo mismo que: All from tipo 2 texto
\end
All from tipo 3 texto	%no es vlido
\begin Representacion
	All from tipo 3 texto	%no es vlido
\end

En un tipo una clsula All from que apunte a un subtipo, o viceversa, es vlida pero se recomienda
no emplearla. Copia las cualidades y el elemento Texto, pero no el Significado. Pero en un tipo no puede
apuntar a un subtipo de ese mismo tipo y viceversa.
Una referencia from copia las cualidades literalmente, lo que significa que si el tipo/subtipo al que se apunta
tiene una cualidad para la cual se indica from ., from . es lo que debe entenderse para esa cualidad, y no
el resultado de resolver eso para el tipo/subtipo al cual se apunta.

La informacin especfica para subtipos puede darse individualmente o por grupos. Si lo que viene a continuacin
de la palabra Subtipo es un nmero, se entiende que la informacin se refiere a ese subtipo, mientras que si es
criterio entonces se est especificando un conjunto de subtipos. Hay varias maneras o criterios de indicar el conjunto.
El criterio, que se expresa mediante un nmero, aparece tras la palabra criterio, y tras l la infomacin necesaria
para definir el conjunto. El nmero que indica el criterio puede estar entre 0 y 255. Cada bit se corresponde con un
criterio atmico, de manera que el criterio est compuesto de varios criterios atmicos, cada uno de los cuales ha
de cumplirse. El significado para cada bit se indica a continuacin.

1: Entre un valor mnimo y uno mximo. Por ejemplo,
criterio 1 10 200

2: Que no tenga ningn bit de la mscara a 1.
criterio 2 0x0F	%Los ltimos cuatro bits a 0

4: Que tenga todos los bits de la mscara a 1.
criterio 4 0x10

La combinacin de los tres criterios anteriores se escribira
criterio 7 10 200 0x0F 0x10

Como puede verse, los parmetros de cada criterio atmico se escriben empezando por los
de los bits ms bajos.
 
Para los tres bits ms bajos el que uno de ellos est a 1 tiene el significado que se acaba de explicar,
y el que est a 0 indica la ausencia de ese criterio. Para los 5 bits restantes la oposicin 0/1 indica
uno o el otro de los dos criterios siguientes:

1: Que tenga algn bit de la mscara a 1
0: Que no tenga todos los bits de la mscara a 1

Los bits '1' tienen que aparecer antes que los bits '0'; es decir, si n>=4 y el bit n est a 1 entonces los bits
4, 5, ... n tienen que estar todos a 1. Cuando ya se hayan indicado parmetros suficientes para los criterios
de los 3 bits ms bajos, si es que aparece alguno, y para los n-3 1's entre el bit 4 y el n, si aparece alguno,
los nmeros restantes sern mscaras para el criterio "Que no tenga todos los bits de la mscara a 1". Por ejemplo:

criterio 8 0xcc				%Alguno de los bits de 0xcc a 1
criterio 10 07 070		%Ninguno de los ltimos 3 bits a 1 pero alguno de los 3 siguientes s.
criterio 0 255				%Cualquier subtipo excepto 255
criterio 24 0xF 0xF0	%Alguno de los cuatro primeros y alguno de los cuatro ltimos
criterio 8 7 7					%Que tenga alguno, pero no todos, de los ltimos 3 bits a 1

Las mscaras y el nmero tras la palabra criterio se pueden escribir en base 10, 8 y 16, con la notacin del
lenguaje C, como se muestra en los ejemplos.

Aunque a partir de un cierto punto todos los nmeros que aparezcan son mscaras para el criterio
"que no tenga todos los bits de la mscara a 1", se entiende que cada mscara se corresponde con un
bit 0 del nmero indicado como criterio, de modo que el nmero de mscaras total para los criterios
1 o 0 de los bits >=4 no pueden ser en total ms de 5.
El final de las mscaras puede venir indicado bien porque ya no aparezcan ms, como en todos los
ejemplos anteriores, bien porque se hayan agotado los 8 bits, bien con la mscara 0 para un bit 0 de los
>=4. Por ejemplo:

criterio 2 07 070 0     2 criterios, el dos de "2 criterios" ya se ignora
criterio 4 0x88 0		%estas dos lneas indican
criterio 4 0x88			%el mismo criterio

criterio 0 0		%criterio vaco, es decir, satisfecho por todos los subtipos.

Si tras la palabra criterio sigue un parntesis de apertura entonces se trata de una expresin lgica que se evala.
El subtipo se representa mediante la letra s. Si el resultado de la expresin es un 1 lgico (true) o un nmero
distinto de cero el elemento con subtipo s satisface el criterio. En caso de que sea 0 lgico, 0 o la expresin
no est bien formada se considera que el elemento no satisface el criterio. Por ejemplo

Subtipo ( (s&07==07) || (s&070==070) )

Una vez ms, los nmeros se pueden escribir base 10, 8 o 16.

La sintaxis es la del leguaje C. Se pueden emplear los operadores de bit &, |, ^ y ~, as como << y >>;
los operadores numricos de relacin ==, !=, >, <, >= y <=, y los operadores booleanos && y ||.
El resultado de los operadores de relacin y booleanos no podr ser un operando de un operador
que no sea && o ||, pero el recproco no es cierto. Es decir, se puede escribir

(s&0xF && s&0x70)

sin necesidad de escribir los !=0.

El orden de prioridad de los operadores es
~
<< >>
&  |  ^
==  !=  >  <  >=  <=
&&  ||

los operadores mostrados en una misma lnea tienen la misma prioridad y las expresiones se
evalan de izquierda a derecha.

La informacin de Significado para los subtipos se aade a la del tipo, y la de Representacin y Texto la sustituye
en los campos que se especifiquen. Si se quiere que el significado no se aplique tambin al subtipo se emplear
la palabra clave SignficadoR en lugar de Significado. Pueden emplearse ambas; solamente se heredar la de
Significado, mientras que el significado para el tipo se formar con Significado + SignificadoR.
Los subtipos pueden anidarse, heredndose el significado igual que de un tipo al subtipo. Ejemplo:

\begin Tipo 1
\begin Subtipo criterio 8 07
	Significado Punto de Apoyo
	SignificadoR incompleto
	Forma 740
	Color 88FF88
	\begin Subtipo criterio 4 07
		Significado completo
		Color 0000FF
	\end
\end
\begin Subtipo criterio 10 07 070
	Significado Punto de Control
	SignificadoR incompleto
	Forma 116
	Color 88FF88
	\begin Subtipo criterio 4 07
		Significado completo
		Color 7700DD
	\end
\end
\end

El visor de grficos de Aerori no implementa subtipos anidados.

Los tipos 3 y 8 tienen un significado predefinido pero en el fichero cfg debe describirse su representacin
como la de cualquier otro tipo.

El tipo 255 no puede aparecer en un fichero cfg. No obstante s que pueden aparecer los elementos
252-254. Dado que estos elementos no se representan pueden emplearse en un fichero cfg para almacenar
valores de cualidades a los que hacer referencia mediante indicaciones from.


--	 Agrupaciones y conjuntos

Se muestra a continuacin un ejemplo:

\begin Agrupacion 5
Significado Elementos agrupados por fecha de creacin

\begin Conjunto 0
Significado Elementos que estaban en el mapa base
...
\end Conjunto

\begin Conjunto 1
Significado Elementos creados en el mapa original
...
\end Conjunto

\begin Conjunto 2
Significado Elementos incorporados en la primera revisin
...
\end Conjunto

etc.

\end Agrupacion

Ni que decir tiene que las agrupaciones y conjuntos no tienen por qu aparecer en orden ascendente ni existir
exactamente en un intervalo 0-N.

Dentro de cada \begin Conjunto \end Conjunto pueden aparecer  cualidades, p.e. Color 80FF80, que afectan
a todos los elementos de ese conjunto, as como bloques \begin Tipo n ... \end Tipo,  en cuyo caso las indicaciones
de representacin en l contenidas afectan solamente a los elementos del tipo y en su caso subtipo en cuestin.

La jerarqua entre la representacin indicada para cada tipo fuera de los conjuntos y lo indicado en los conjuntos
se establece como sigue

\begin Jerarquia
<seleccin 1>
<seleccin 2>
etc.
\end Jerarquia

Cada seleccin es una lnea indicando un criterio de seleccin en funcin de Agrupacin, Conjunto, Tipo y Subtipo.
Para cada elemento, la primeria lnea que se satisfaga para ese elemento indica de dnde se toman los parmetros
de su representacin. Si  el elemento no satisface ningn criterio de seleccin se representar de acuerdo
a lo indicado para su tipo y subtipo. Por lo tanto si el elemento Jerarquia no existe todos los elementos se representan
segn su tipo y subtipo sin que la informacin de los conjuntos afecte para nada.
Cada lnea seleccin comienza bien por Agrupacion bien por Tipo. En el primer caso, si el elemento satisface el
criterio de seleccin se emplear la simbologa del conjunto al que pertenece para la agrupacin indicada, en lo
que reemplace a la del tipo/subtipo (si no la reemplaza en nada ser igual que la del tipo/subtipo),
en el segundo caso se emplear la del tipo/subtipo.

Agrupacion a	%Para todos los elementos que pertenezcan a algn conjunto de la agrupacin 'a' se emplear
								la simbologa del Conjunto

Agrupacion a Conjunto c1 Conjunto c2 ... Conjunto cn	%Los elementos que pertenecen a alguno de los conjuntos
																										c1,c2... cn de la agrupacin a.

Agrupacion a !Conjunto c1 !Conjunto c2 ... !Conjunto cn  %Los elementos que pertenecen a alguno de los conjuntos
																										de la agrupacin a distintos de c1,c2... cn.

No pueden aparecer mezclados Conjunto's y !Conjunto's.
A esta manera de indicar un conjunto de Conjuntos la representar por [Conjunto], incluyendo en ello la indicacin
vaca, e.d., que no aparezca ningn Conjunto ni ningn !Conjunto. Por { !} representar un ! opcional pero que tiene
que ser igual para cada aparicin de { !}.
El formato completo de un criterio que comience por Agrupacion es

Agrupacion a [Conjunto] 

Agrupacion a [Conjunto]  { !}Tipo t1 {Subtipo xxx1}  { !}Tipo t2 {Subtipo xxx2} ...

en donde xxx1, xxx2, etc. indica uno o varios subtipos de cualcuiera de las maneras que se explic ms arriba
y {Subtipo xxx1} significa que la indicacin de Subtipo es opcional. El ! en los Tipos con indicacin de Subtipo
se ha de interpretar como !(Tipo t Subtipo xxx).

Para cualquier criterio de seleccin ms complicado se ha de emplear el formato

Agrupacion a (<expresin lgica>)

en donde la sintaxis de <expresin lgica> ya se expres ms arriba y en ella el conjunto, tipo, subtipo y bits
bajos del byte 6 se representan por c, t, s y b respectivamente.

Un criterio de seleccin que comience por Tipo puede ser de dos maneras:
a) Una indicacin de tipo nica, con o sin subtipo:
Tipo t {Subtipo xxx}

b) Exactamente igual que los de Agrupacin pero con la palabra Tipo delante:
Tipo Agrupacion a ...


-- Visibilidad de elementos

\begin Ver
00100111101011...
Textos 0001100000...
<seleccin 1>
<seleccin 2>
etc.
\end Ver

El primer elemento en el bloque Ver es una serie de 252 ceros y unos, indicando la visibilidad de los elementos
de cada tipo, para los tipos 0-251. Si la serie se detiene antes de completar los 252 elementos se entiende
que el resto son uno.
El segundo elemento es una serie como la anterior prececida de la palabra Textos, que hace referencia
a los nombres de los elementos. En este caso si la serie se detiene se entiende que los restantes elementos son 0.
Esta definicin por tipo podr estar modificada por sucesivas selecciones. El formato de cada seleccin
es igual que el de una seleccin de jerarqua que empiece por Agrupacion, pero la indicacin de agrupacin
es opcional. Los elementos que satisfagan el criterio se mostrarn, pero si la lnea comienza por !, no
se mostrarn. As pues el formato de una seleccin dentro de Ver, en donde el significado de { !}
se explic ms arriba y el resto de llaves {} indican opcionalidad, es

{!}{Agrupacion a [Conjunto]} {{ !}Tipo t1 {Subtipo xxx1}  { !}Tipo t2 {Subtipo xxx2} ... }

o bien

{!}{Agrupacion a} (<expresin lgica>)

Por ejemplo los siguientes:

!Tipo 3 Subtipo criterio 4 0x33
Agrupacion 3
Agrupacion 0 Tipo 8 Tipo 1 Tipo 2
! (b==0 || (t==2 && s&077==0))

Estos criterios se aplican al elemento, no a su texto. Si se quiere que se apliquen al texto se escribir
al principio o al final de la lnea {texto}; si se quiere que afecte a ambos se escribir {. texto} o bien {texto .}.
Cualquier otra palabra que aparezca entre llaves se ignorar sin constituir un error en el formato (lo que no
excluye que las aplicacones que muestren grficos avisen de una palabra irreconocida).

Al contrario que en el bloque Jerarquia, en donde los parmetros de representacin para un elemento los define
el primer criterio de seleccin que satisfaga el elemento, en el bloque Ver la visibilidad queda definida por el ltimo
criterio de seleccin que el elemento cumple.


-- Varias vistas

Los elementos Ver y Jerarqua pueden ir seguidos de un nmero que especifique el nmero
de vista a la que se aplican, para los programas que permitan varias vistas. Ej.,

\begin Ver 1
...
\end

\begin Ver 2
...
\end

...

Si existe un bloque Ver sin nmero sus indicaciones se aplican a todas las vistas; las de las
dems vistas acumulndose a ellas. Los mismo rige para un bloque Jerarqua sin nmero,
pero en este caso sus indicaciones se acumulan detrs de las de cada bloque numerado.

El resto de la informacin especfica para cada vista se indica en bloques Vista, por ejemplo

\begin Vista 2
...
\end

La transformacin geomtrica que definie la posicin en la vista de cada punto del objeto
se dar en un subbloque Transformacin, siendo su formato especfico para cada aplicacin.
Puede ir desde una matriz de rotacin a una proyeccin cartogrfica completa.
El resto de la informacin en un bloque Vista es especfica para cada aplicacin.


-- Extensiones futuras

Aadir a los criterios de seleccin variables que representen parmetros del elemento. Para permitir
por ejemplo que se vean solamente los elementos con Z mayor que 500, o que los segmentos de
tipo=60 (por ejemplo) se representen ms gruesos si su longitud es mayor que 0.2, etc.

Aadir el comando \input, de manera que la parte ms estable del fichero --definicin de tipos y subtipos--
se lea de un fichero fijo.


FICHERO DE FORMAS, .fdf

Cada forma es un mapa de bits. El fichero de formas est constitudo por una sucesin de bloques
como el que sigue:

\begin formas
numero 020
limites -3 3 -2 3
centro 0 -0.29
uno #

<formas>

\end

    "nmero" indica el nmero que corresponde a la primera forma tras la cabecera del bloque; las siguientes
tendrn los nmeros sucesivos. Cada forma tiene un pxel con coordenadas (0,0) de cara a la definicin
de la forma. En base a ese sistema de coordenadas "limites" indica los valores xmin xmax ymin ymax. Ningn
pixel puede salirse del recuadro definido por esos valores. Puede existir opcinalmente otra lnea igual que
la de lmites pero encabezada por la palabra "box". Los valores xmin, etc. indicados para box definen otro
rectngulo que puede ser distinto del de lmites. El visor de grficos de Aerotri lo ignora.
    "centro" indica las coordenadas del centro de la figura respecto al centro del pxel 0,0. Es el punto de la forma
que ha de situarse exactamente en las coordenadas del punto que la forma est representando. Se emplea
para dibujar las formas con precisin subpxel. Sus coordenadas deben estar comprendidas en el intervalo
[-0.5,0.5] para que los programas que no empleen esta informacin situen las formas en posicin correcta.
    Tras la cabecera (la lnea "uno" se explica ms adelante) vienen las formas, cada una de las cuales debe constar
exactamente de ymax-ymin+1 lneas con xmax-xmin+1 caracteres cada una. De los caracteres que aparezcan
se interpretan todos como 0, e.d., ausencia de figura, excepto uno que se interpreta como 1, y es el definido
en la lnea "uno". De esta manera cada cual puede emplear para indicar ceros y unos los caracteres que le
permitan ver mejor la forma. Por ejemplo, el autor escribi las formas viendo el fichero con la fuente
Wingdings 2 a tamao 5, y para la combiancin de fuente, tamao y editor de texto consider que como
mejor se vean las formas es empleando para 0 y 1 los caracteres que se pueden ver en el fichero formas.fdf.
Los caracteres nulo (0), espacio (32), tabulacin horizontal (8), as como los finales de lnea 10 y 13 (vara
segn el sistema operativo) no se pueden emplear como uno, pero ntese que el espacio y la tabulacin s
se pueden emplear como cero.

A todas las formas de un bloque son de aplicacin todos los parmetros de la cabecera excepto nmero, que
va aumentando de uno en uno dentro del bloque como se explic. Cada "numero" de un bloque tiene que
ser mayor que el nmero de la ltima figura del bloque anterior, pero no necesariamente una unidad mayor
exactamente. No es necesario que el "numero" del primer bloque sea cero.
Ninguna figura puede tener el nmero 0200 (e.d., 128), porque est reservado para la forma vaca; es decir,
que un punto con ese nmero de forma tiene una representacin vaca (pero existe, en su posicin, y se puede
seleccionar o emplear para cualquier otro fin).


********

La mayor parte de las posibilidades de este formato todava no estn implementadas en el visor de grficos de Aerotri,
pero cualquier persona puede programar un visor/editor ms potente.

Javier Mgica, 12 de diciembre de 2009
