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:
- Visibilidad: Toda capa en gvSIG tiene ese atributo, por lo que ya
está implementado
- En edición: Cuando se pone en edición una capa CAD,
sólo una de sus capas internas CAD estará en
edición.
- Bloqueada: No se permite la edición sobre ella
- Color de dibujo.
- Tipo de linea.
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:
- Punto
más cercano
- Punto final
- Punto medio
- Centro
- Tangente
- Perpendicular
- Cuadrante
- Punto de
inserción
- Punto
intersección
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:
- Punto.
- Línea. Permite
dibujar una línea especificando el punto de inicio y el punto
final. Como se ha
comentado se pueden elegir entre varias opciones a la hora de indicar
estos
puntos, por ejemplo una vez dibujado el punto de inicio podemos definir
el
punto final especificando la longitud del segmento y su
orientación (ángulo).
- Arco. Un arco
es una porción de un círculo. Se define mediante tres
puntos. Hay varios
métodos para dibujar un círculo:
- Tres puntos (inicio,
segundo y final).
- Inicio, centro y final.
- Inicio, centro, longitud
de la cuerda.
- Inicio, final, radio.
- Inicio, final,
ángulo incluído.
- Inicio, final,
dirección inicial.
- Inicio,
radio, ángulo.
- Círculo. Se
especifica mediante cualquiera de los siguientes métodos:.
- Centro, Radio.
- Centro, Diámetro.
- Dos puntos.
- Tres puntos.
- Radio, tangente, tangente
- Convertir arco a
círculo.
- Elipse. Métodos
para dibujar una elipse:
- Eje, eje.
- Eje, rotación.
- Centro, eje.
- Centro, rotación.
- Polilínea.
Es
una entidad formada por un conjunto de líneas y/o arcos.
- Rectángulo.
Se
dibuja un rectángulo especificando sus esquinas opuestas. Por
defecto se dibuja
paralelo a la alineación del grill. Debe permitir la
opción de dibujar un
cuadrado.
- Dibujar
polígonos. Están compuestos
por un mínimo de 3 lados de igual longitud (en otros
programas de CAD tienen un máximo de alrededor de 1000 lados).
Métodos para
dibujar un polígono:
- Centro y
distancia del centro a cada vértice.
- Centro y
vértice (se especifica la ubicación de un vértice).
- Centro y distancia al
punto medio de un lado.
- Spline. Es una
curva suave definida por un conjunto de puntos. Se define especificando
los
puntos que la definen. Debe tener la opción de Tolerancia, que
determina con
cuanta precisión la spline se ajusta al conjunto de puntos que
se especifica.
- Bloques. Los
bloques son unas entidades especiales que una vez guardadas pueden ser
insertadas y manipuladas en el dibujo como una entidad única.
Las operaciones
con bloques más comunes son:
- Crear un
bloque.
- Insertar un
bloque.
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:
- la parte del comportamiento que toma los parámetros
- el resultado producido por estos.
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:
- Mantener una referencia al EditableFeatureSource
que está en edición.
- Mantener la selección actual de la fuente de datos
editable.
- Traducir los eventos de ratón y las entradas por consola
en transiciones entre estados de la CadTool seleccionada.
- Dibujar la fuente de datos y delegar el dibujado del estado
actual de la herramienta en la CadTool seleccionada.
- Obtener los puntos de snap dado un punto y dibujar el efecto del
snaping para la posición actual del ratón sea cual sea el
estado de la herramienta seleccionada.
- Obtener el punto de rastreo para la posición actual del
ratón si está activado
- Traducir los puntos recibidos del MapControl de coordenadas de la
imagen a coordenadas del mapa ajustando al punto de snap en caso haber
alguno y estar activada dicha funcionalidad.
- Traducir los eventos del MapControl en transiciones en el estado
de las herramientas de CAD.
- Obtener el estado de la herramienta de CAD y poner la pregunta
correspondiente en la consola. Escuchar la respuesta y generar una
transición en consecuencia
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:
- Rastreo polar: Se ajusta la posición actual del
ratón a las rectas horizontal y vertical que pasan por el punto
origen de la acción.
- Modo orto: Similar al rastreo polar, pero con la diferencia de
que el modo orto ajusta siempre mientras que el rastreo polar ajusta
sólo cuando el puntero del ratón está
próximo a las dos lineas comentadas.
- Rastreo de referencia a objetos: Cuando el usuario se queda en el
area de snap de un punto un determinado tiempo sin salir de ella, dicho
punto queda seleccionado de forma que se ajustará la
posición del ratón
a las rectas horizontal y vertical que pasan por dicho punto.
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:
- Histórico de introducciones del usuario
- Tener el foco implícitamente siempre
- Aspectos usuales de toda consola