Análisis CAD
1. Capas
2. Geometrías
3. Editor

1. Capas
   Los ficheros de CAD se van a abrir mediante una capa colección (a partir de ahora capa CAD) de la cual colgarán las capas individuales correspondientes a las capas internas del fichero de CAD (a partir de ahora capa interna CAD). Durante la edición, aparece el concepto de capa activa que es distinto al concepto de capa activa mantenido en FMap. Utilizaremos el término capa en edición para referirnos a la capa interna CAD sobre la que se insertarán las geometrías dibujadas durante la edición y el término capa activa para la capa/s seleccionada/s cuando no estamos editando sobre la que se realizan operaciones de zoom al tema, selección, ... De esta manera para editar un archivo CAD pondremos como capa activa la capa CAD del fichero que queremos editar y diremos a gvSIG que queremos comenzar la edición. En ese instante, una de las capas internas CAD (usualmente la capa cero) se pondrá como capa en edición y no podremos poner como capa en edición ninguna capa que no pertenezca a la capa que estamos editando.

    Las capas internas CAD tienen una serie de atributos:

2. Geometrías
    Las geometrías de CAD serán como las geometrías de FMap pero con algunas características adicionales ya que deberán de tener un color (permitiéndose los valores típicos de un campo de color más los valores "por capa" y "por bloque") y un tipo de linea asociado. Además, para la realización del snapping, toda geometría deberá de devolver una serie de puntos de snapping a los que ajustar los puntos que introduce el usuario y para el uso de la herramienta por defecto, deberá de devolver los puntos sobre los que se situarán handlers para la modificación de los mismos.

     Los puntos a los que se puede ajustar mediante el snapping son los siguientes:


    Distinguimos dos tipos de geometrías, las simples y las complejas. La manera de utilizar geometrías complejas será mediante una geometría especial que sea una colección de geometrías. Algunas de las geometrías simples pueden dibujarse especificando distintas coordenadas y todas pueden dibujarse mediante el uso del ratón y mediante el uso de la consola. Tenemos la siguiente clasificación de geometrías junto con sus distintos métodos de dibujado:

3. Editor
    El editor de geometrías se dispondrá en dos capas, la capa del modelo y la capa de la interfaz, con el fin de que independientemente de que se añadan las geometrías desde la consola o mediante el uso del ratón, la ejecución de las acciones pase siempre por los mismos métodos del modelo. Para entender este apartado conviene estar mínimamente familiarizado con la interfaz gráfica de AutoCAD 2004 o similares.

3.1 Modelo del editor
    El modelo del editor tendrá una herramienta seleccionada mediante la cual operará con las geometrías de las capas internas CAD (la capa interna CAD en edición si la herramienta es de dibujo). Las herramientas de edición constarán de dos partes a nivel conceptual:
    Por ejemplo, en la herramienta a nivel de interfaz que dibuja un círculo, la opción de especificar 3 puntos, centro y radio, etc y la posterior secuencia de puntos que se pide sería su comportamiento mientras que el circulo insertado en la capa interna CAD sería el resultado de la herramienta.

    Se han diferenciado estas dos partes de la herramienta con el fin de explicar en profundidad la parte del comportamiento. Dicho comportamiento viene definido por un autómata de estados finitos por cuyos estados nos iremos desplazando durante la introducción de datos. Por ejemplo, el diagrama de estados finitos de la herramienta círculo sería el siguiente (TODO poner el diagrama) (para el AutoCAD 2004):


    Los estados vendrán identificados por un número entero, mientras que las transiciones serán strings correspondiéndose al texto que hay que escribir en la consola de edición o textos especiales indicando acciones de usuario. Estas acciones son independientemente del interfaz usado para realizar la acción (ratón, teclado, ...). Entre las transiciones permitidas podemos destacar las transiciones de "punto", "numero", "aceptar" y "cancelar".

    La edición de CAD se realizará sobre un MapControl. Para ello contamos con el inconveniente de que las herramientas de MapControl no tienen estado y han de pintar ellas toda la imagen. Por el contrario, las herramientas que estamos definiendo tienen un estado y al dibujar y operar deben conocer cuál es o cuáles son las geometrías seleccionadas, recibiendo un objeto sobre el que dibujarán en el que ya están dibujadas las geometrías del fichero en edición. Para emplear herramientas de CAD utilizaremos pues una herramienta especial CADToolAdapter que capturará los eventos del ratón, transformándolos en eventos de transición entre estados para la herramienta de CAD seleccionada. El CADToolAdapter deberá de dibujar la capa en edición y luego delegar el dibujado en la herramienta CAD seleccionada. Resumiendo, la herramienta CADToolAdapter servirá de adaptador entre las facilidades que proporcional MapControl para las herramientas y las necesidades de las herramientas de CAD.

    Las funciones del CADToolAdapter serán las siguientes:
    Para realizar el snapping, se deben de introducir en un índice espacial, los puntos de snapping de todas las geometrías, además de que deben mantenerse actualizados dichos índices. Esto quiere decir que si se modifica una geometría se deberán de eliminar los puntos de la geometría antes de la modificación e insertar los puntos de la geometría tras la modificación. Además, al realizar snapping, debe aparecer en el editor un tooltip indicando el tipo del punto al que se hace snapping (centro, punto medio, ...) además de que el efecto del snapping puede dibujarse de distinta manera en función del tipo de punto por lo que el tipo de punto deberá ser retornado por las geometrías y almacenado en el índice espacial junto con el punto en sí.

    Para la gestión del snapping se deberá de tener un índice espacial con los puntos susceptibles de entrar en acción durante el snapping. Para ello al insertar una geometría habrá que realizar las siguientes operaciones:
    Similar al snapping por puntos están los siguientes ajustes:
    Para soportar todo lo anterior las capas vectoriales FLyrVect dibujarán la capa en edición (y no la capa original) cuando se ponen en estado de edición.

3.2 Interfaz del editor
    La interfaz del editor será un MapControl más una consola de edición interactiva. Dicha consola deberá de tener las siguientes características: