Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta...

62
1 Ingenier´ ıa T´ ecnica en Inform´ atica de Sistemas Escuela Superior de Ciencias Experimentales y Tecnolog´ ıa Curso acad´ emico 2003-2004 Proyecto Fin de Carrera GPIC Generador gr´ afico de comandos pic. Autor: Rub´ en Sevilla Gir´ on Tutor: Francisco J. Ballesteros C´ amara Junio 2004

Transcript of Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta...

Page 1: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

1

Ingenierıa Tecnica en Informatica de Sistemas

Escuela Superior de Ciencias Experimentales y Tecnologıa

Curso academico 2003-2004

Proyecto Fin de Carrera

GPIC

Generador grafico de comandos pic.

Autor: Ruben Sevilla GironTutor: Francisco J. Ballesteros Camara

Junio 2004

Page 2: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca
Page 3: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Agradecimientos

3

Page 4: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4

Page 5: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Resumen

Todo proyecto que nos planteamos en la vida intenta solucionar un problema o llenaralgun vacıo.

El vacıo que con este proyecto se intenta llenar, se encuentra a la hora de realizar,bajo Plan 9, un documento en el que se quiera insertar algun tipo de dibujo o esquema.Para ello actualmente solo se dispone de una herramienta que permite llegar a este fin,el lenguaje de dibujado “Pic”. En el caso de utilizar dicha herramienta, primero serianecesario aprender a usarla, para despues tener que escribir el codigo de cada uno de lasobjetos a dibujar. Y por desgracia esta es una labor ardua y lenta. Sin embargo en otrosentornos, se encuentran claros ejemplos de aplicaciones sencillas y con entornos visuales,que permiten crear y manipular figuras de manera que no se pierda mucho tiempo ni ensu aprendizaje, ni en el proceso de creacion del dibujo. Un ejemplo claro de lo expuestoanteriormente es el Xfig [8] o el Dia[9] para Linux, programas de dibujo geometrico, dondeen sus funcionalidades basicas, podemos realizar toda clase de figuras de forma rapida ysimple, y sin ningun paso de aprendizaje, dado que una aplicacion grafica normalmentees mas intuitiva.

Partiendo de estas bases se planteo crear una aplicacion para Plan 9, con una inter-faz grafica sencilla e intuitiva, para el dibujado, visualizacion y manipulacion de figurasgeometricas simples, y que a su vez generase el codigo en pic para su posterior uso y ma-nipulacion independiente a la aplicacion. Ası pues esta es la idea basica del proyecto quese presenta en esta memoria. La aplicacion llamada GPic intenta dar esa vision graficainstantanea en el proceso de creacion de estructuras pic en su modelo basico, que porcontra no se tiene cuando se crea directamente escribiendo el codigo.

Por tanto, la finalidad basica de este proyecto no es otra que la de proporcionar alos usuarios de Plan 9 una herramienta grafica para la generacion de dibujos de formasgeometricas, facilitando la generacion de un fichero de texto con el codigo en pic del dibujoen cuestion, acelerando ası la creacion de estos sin reducir la versatilidad que aporta pic,una vez se conozca su sintaxis.

5

Page 6: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

6

Page 7: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Indice general

1. Introduccion 91.1. Dibujo geometrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.1.1. Vision global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.1.2. PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.2. Interfaces graficas en Plan 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 101.3. Contenido de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2. Objetivos: GPIC 132.1. Necesidad de una aplicacion grafica de dibujado . . . . . . . . . . . . . . . 132.2. El sistema operativo Plan 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3. Desarrollo en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3. Metodologıa empleada 173.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2. Desarrollo en espiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2.1. Aplicacion del desarrollo en espiral al proyecto . . . . . . . . . . . . 183.3. Desarrollo basado en prototipos . . . . . . . . . . . . . . . . . . . . . . . . 19

3.3.1. Prototipos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 19

4. Diseno e implementacion 214.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2. Arquitectura general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3. Distribucion del codigo en modulos . . . . . . . . . . . . . . . . . . . . . . 224.4. Prototipo 1: Interfaz grafica . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.4.1. Especificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.4.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.4.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.5. Prototipo 2: Dibujado de figuras . . . . . . . . . . . . . . . . . . . . . . . . 304.5.1. Especificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.5.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.5.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.6. Prototipo 3: I/O. Generacion codigo Pic . . . . . . . . . . . . . . . . . . . 334.6.1. Especificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.6.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.6.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4.7. Prototipo 4: Manipulacion de figuras . . . . . . . . . . . . . . . . . . . . . 36

7

Page 8: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

8 INDICE GENERAL

4.7.1. Especificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.7.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.7.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.8. Prototipo 5: Optimizacion de la aplicacion . . . . . . . . . . . . . . . . . . 404.8.1. Especificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.8.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.8.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5. Validacion 435.1. Primer caso de prueba: Interfaz Grafica . . . . . . . . . . . . . . . . . . . . 43

5.1.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.1.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.2. Segundo caso de prueba: Dibujado y manipulacion . . . . . . . . . . . . . . 475.2.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5.3. Tercer caso de prueba:Generacion y carga codigo Pic . . . . . . . . . . . . . . . . . . . . . . . . . 555.3.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.3.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6. Conclusiones 596.1. Lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.2.1. Ampliacion de funcionalidad . . . . . . . . . . . . . . . . . . . . . . 606.2.2. Reconocimiento completo de codigo pic . . . . . . . . . . . . . . . . 60

Page 9: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 1

Introduccion

Un programa de dibujo es aquel que tienen como finalidad principal la composicionde cualquier dibujo que el usuario necesite. Estas aplicaciones pueden partir de elementossimples, como pueden ser figuras sencillas, o imagenes mas complejas, como fotografıasdel mundo real.

En la actualidad, al tratar con los diferentes programas de dibujo, se observa que estosmanejan, basicamente, dos tipos formatos de ficheros graficos diferentes:

1. Mapas de bits. Graficos realizados y almacenados como colecciones de bits quedescriben las caracterısticas de cada uno de los pıxeles individuales en la pantalla,ası como los datos generales del grafico, como el tamano o la resolucion entre otros.

2. Dibujos vectoriales. Graficos basados en el uso de elementos de construccion ge-ometricos como lıneas, curvas, cırculos y rectangulos, y almacenados mediante ladefinicion matematica de la figura.

Como ejemplo a las definiciones dadas vease que un programa de diseno grafico comoPhotoshop[18] dibuja un cırculo como un conjunto de puntos en forma redonda, mientrasque un programa como Xfig genera una instruccion geometrica: dibuja un cırculo concentro en el punto (x,y) y con un radio r. Con estos parametros, y variandolos segun sedesee, se obtiene un cırculo perfecto, del tamano y posicion indicados.

En este proyecto se pretende crear una aplicacion para facilitar la creacion de graficos,en Plan 9, de manera visual, como es lo normal encontrarse en aplicaciones similares enotros entornos, usando como base un formato de dibujos vectoriales ya definido (pic), yanadiendole una interfaz grafica.

1.1. Dibujo geometrico

Este metodo de generacion de formas geometricas es el que usan los programas dedibujo vectorial, donde los objetos estan constituidos por una serie de puntos y lıneasrectas o curvas. Estas figuras son definidas mediante expresiones matematicas y repre-sentadas en un sistema de coordenadas de dos o tres dimensiones. El maximo exponentede este tipo de aplicaciones son las denominadas CAD (Computer Aided Design) dondellegan a manipular objetos vectoriales de tres dimensiones. Este tipo de formato esta ori-entado a dibujos donde tiene gran importancia la precision de tamanos y medidas, un

9

Page 10: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

10 CAPITULO 1. INTRODUCCION

ejemplo de aplicacion que utiliza este formato es AutoCAD [16], que es utilizado, entreotros colectivos, por numeroso arquitectos para la creacion de planos; o 3D Studio[17]utilizado para la generacion de secuencias cinematograficas en tres dimensiones.

1.1.1. Vision global

Una vez visto en que consiste el dibujo geometrico, se puede observar con facilidadque en un dibujo vectorial, no existen restricciones en el tamano que se le quiera dar a lasfiguras sin mermar la calidad a causa del escalado y apareciendo siempre con la mismanitidez. Cada objeto del dibujo viene definido por formulas, dando ası la posibilidadde manejar cada figura independientemente de las demas, por ejemplo, la recolocacionde una de ellas no afecta a las demas. Los objetos vectoriales admiten una infinidadde transformaciones, pudiendo controlar con gran precision, por ejemplo, la forma, laorientacion y la ordenacion de los elementos.

1.1.2. PIC

Pic es un lenguaje de descripcion de graficos, que pueden ser embebidos dentro deficheros escritos en lenguaje troff 1, de manera que al generar el documento escrito en troffse visualice la imagen descrita en pic. Con pic se pueden dibujar lıneas y una variedadlimitada de formas, sin colores ni sombreados, pero pudiendose crear un dibujo complejoy detallado.

Pic es la primera opcion como herramienta de dibujo en Plan 9, y fue desarrolladoantes de la aparicion de aplicaciones con interfaces graficas basadas en eventos de raton.Esta inspirado parcialmente en el trabajo realizado en ideal [10] por Chris Van Wyk;comparten algunas caracterısticas aunque en su totalidad son muy diferentes. En concreto,pic es un lenguaje mas procedimental, es decir, un dibujo se realiza especificando todoslos pasos que se van a seguir para llevar a cabo dicho dibujo. Otras influencias directasincluyen el lenguaje PICTURE [12], el lenguaje V de visualizacion grafica [11], y masrecientemente, las nuevas caracterısticas del lenguaje de composicion de graficos grap[13].

1.2. Interfaces graficas en Plan 9

Lo primero que se nos viene a la cabeza cuando se habla de interfaz grafica, es el“Gestor de Ventanas” o window manager, que es un programa que controla la ubicaciony apariencia de aplicaciones dentro de un sistema grafico. Computadoras modernas gen-eralmente ofrecen una interfaz grafica que habilita al usuario a interactuar con un numerode aplicaciones simultaneamente, cada una utilizando su propia ventana. Las plataformasWindows y Macintosh han desarrollado metodos estandar, controlados por sus propiossistemas, para la forma en que las ventanas son mostradas y controladas en la pantalla,ası como la forma en que el usuario debe interactuar con ellas. De todas formas, el sis-tema X Window, popular en el ambito de sistemas Unix, permite al usuario elegir entrevarios gestores de ventanas para alcanzar distintos comportamientos de las ventanas deaplicaciones. En Plan 9 el gestor de ventanas es Rio, se trata de un gestor simple donde

1Troff : lenguaje de formateado de documentos de texto.

Page 11: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

1.2. INTERFACES GRAFICAS EN PLAN 9 11

podemos arrancar y manejar terminales rc en ventanas mediante menus asociados a losbotones del raton. Rio es un entorno simple y escueto donde la funcionalidad es muybasica no centrandose en el aspecto fısico, debido a la corta vida de desarrollo.

Para el desarrollo de aplicaciones con interfaz grafica, Plan 9 cuenta con las librerıasgraficas Control y Draw entre otras. La primera provee un conjunto de controles interac-tivos necesarios para la creacion de interfaces, como son la definicion de botones de lostipos ya conocidos, etiquetas de texto, cuadros de entrada de texto o areas con diversasfinalidades entre otros. Control tambien implementa un metodo de comunicacion entre losdiversos elementos de la interfaz creada, basado en threads o hilos de ejecucion y canalespara el envıo de mensajes entre dichos objetos. Por ejemplo, cada agrupacion de controlesque se defina, controlset, llevara asociado dos canales, uno de datos y otro de control,y a traves de estos se controlaran las propiedades de los controles, los datos que estosnecesiten, o los eventos de raton o de teclado que se reciban. Todo esto es representa-do mediante el envıo de mensajes de unos objetos a otros o al conjunto de ellos. En lafigura 1.1 se muestra como el control boton 1 envıa un mensaje al canal de control delcontrolset al recibir un evento de click de raton sobre el. Mientras tanto, en otro hilo deejecucion diferente, el controlset estara escuchando en ese mismo canal y cuando recibael mensaje actuara en consecuencia.

La librerıa draw es la que contempla las funciones necesarias para el dibujado dentrodel display donde se ejecute la aplicacion, ya sea una ventana o la pantalla completa.

Estas son las herramientas basicas usadas para la creacion y manipulacion de la interfazgrafica de este proyecto.

Controlset

Botón 1

Botón 2

Botón N

. . . . .

Click

Envía evento de ratón

Escucha eventos

Canal de control

Figura 1.1: Ejemplo de envıo de mensaje

Page 12: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

12 CAPITULO 1. INTRODUCCION

1.3. Contenido de la memoria

Despues de esta breve introduccion, en la que partiendo de una vision global del granmundo del diseno grafico, nos hemos sumergido en las particularidades que atanen a esteproyecto, continuaremos describiendo las necesidades que han llevado a la realizacion delmismo, ası como la plataforma en la que se ha desarrollado y el lenguaje de programacionutilizado. Todo esto es lo que contiene el capitulo “Objetivos” (cap. 2).

En el capıtulo 3, se describe de manera detallada la metodologıa empleada, pretendi-endo dar una definicion completa y global de la funcionalidad de operacion que va a tenerdisponible la aplicacion.

El capıtulo 4 se ha dedicado al diseno e implementacion de la aplicacion, en el cualse expone el desarrollo completo del proyecto, determinando la arquitectura general yespecificando como se subdivide esta en otras subarquitecturas o modulos. La interaccionde dichos modulos tambien queda aclarada en este capıtulo. Ademas se muestran losdetalles del proyecto en cuanto a su programacion.

Todo esto se completa con la validacion del proyecto, desarrollada en el capıtulo 5donde se describen las pruebas que corroboran que el comportamiento del mismo es elque se especifico.

Por ultimo, el capıtulo de conclusiones, donde se expone la contribucion que esteproyecto hace a la creacion de dibujos en Plan 9 y las posibles mejoras futuras que sepodrıan aplicar.

Page 13: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 2

Objetivos: GPIC

2.1. Necesidad de una aplicacion grafica de dibujado

Cuando se trabaja bajo Plan 9, y como es normal en cualquier otro sistema operativo,se puede tener la necesidad, ya sea por trabajo, estudio o mera diversion, de realizar alguntipo de dibujo o esquema. Lo ideal serıa poder disponer de alguna herramienta que nosfacilite en la medida de lo posible la realizacion de esta labor, que, como ya es sabido, esde lo mas sencillo de hacer en cualquier plataforma. Sin embargo hasta el momento, enPlan 9 solo se podıa contar con dos soluciones posibles:

La primera opcion serıa la de tener otro sistema operativo alternativo, instalado enotra maquina o en la misma, para hacer este tipo de labores. Cosa que es inimagin-able si se trabaja bajo otro entorno con mas anos de desarrollo. Y menos aun si loque se pretende es que un usuario pueda desenvolverse en Plan 9, y desarrollar sutrabajo, sin tener que envidiar nada de los otros sistemas. Esta opcion es demasiadodrastica y muy poco funcional.

La segunda solucion posible serıa que el usuario que trabaja en Plan 9 utilice ellenguaje pic para hacer las figuras que necesite. Esta labor conlleva una perdidade tiempo en su aprendizaje, si se desconoce el lenguaje, y un proceso de creacionde un dibujo mas lento que en otras aplicaciones visuales, en el caso de que estesea complejo. Para poder hacer cırculos con valores diferentes a los que se dan pordefecto, se ha de informar donde se quiere que este su centro y calcular el radio queeste ha de tener.

Un ejemplo de codigo pic es el que se muestra a continuacion, donde se dibujan lastres elipses que se muestran en la figura 2.1. La primera tiene valores por defecto, 0’75pulgadas de ancho por 0’5 de alto, mientras que en las dos siguientes se informa de losvalores de posicion y tamano que se les quiere dar ya que no se ajustan a los que tienenpor defecto.

13

Page 14: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

14 CAPITULO 2. OBJETIVOS: GPIC

Codigo escrito:

.PS

ellipse

ellipse ht 0.2 wid 0.3 with .se at 1st ellipse.nw

ellipse ht 0.2 wid 0.3 with .sw at 1st ellipse.ne

.PE

Dibujo resultante:

Figura 2.1: Ejemplo dibujo en pic

Visto esto, se puede entender que es necesario tener una herramienta grafica de dibu-jo, en Plan 9, en la que podamos plasmar las figuras que se quieran, sin que ello nosresulte difıcil, ni necesitemos horas de aprendizaje. Teniendo en todo momento una visioninstantanea de lo que posteriormente sera el dibujo.

2.2. El sistema operativo Plan 9

El proyecto se ha realizado sobre el sistema operativo Plan 9[1] desarrollado por loslaboratorios Bell.

A la hora de poder desarrollar el proyecto, uno de los objetivos fundamentales ha sidoestablecer unos conocimientos sobre el nuevo entorno, basados en la configuracion, el de-sarrollo y comprender la nueva filosofıa de trabajo que plantea este entorno. Enfrentarsea un nuevo sistema operativo nunca es tarea facil. Este aspecto, destaca el objetivo deconocer el sistema donde se desarrollara el proyecto. Se ha decidido hacer este proyectoen Plan 9 y no en ningun otro por ser un sistema de ultima generacion, donde en suimplementacion y maneras de entender las cosas se aplican las nuevas teorıas de sistemasoperativos distribuidos. Tambien esta motivado por la carencia de aplicaciones que sim-plifiquen la labor diaria de los usuarios de Plan 9. Otro de los puntos fuertes es que es unsistema de codigo libre, por tanto integrar en el cualquier aplicacion es viable.

2.3. Desarrollo en C

Se ha elegido este lenguaje por varios motivos. El principal de todos ellos es porquees el usado para el desarrollo del sistema operativo Plan 9, en el cual el proyecto hasido realizado. Ası, nos garantizamos la homogeneidad con el sistema y con las demas

Page 15: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

2.4. OBJETIVOS 15

aplicaciones que en el se encuentran. Otro motivo importante es la necesidad de utilizarlas librerıas graficas ya definidas en Plan 9, Control y draw, implementadas ambas en C.

Una de las necesidades fundamentales del proyecto ha sido el aprendizaje y la pro-gramacion en el lenguaje de programacion C[4]. Para proyectos en los que la cantidad delıneas de codigo aumentan, es fundamental un uso de buenas maneras en la programacion,tanto en limpieza como en calidad.

2.4. Objetivos

Por todo lo dicho anteriormente ya se puede tener una idea de los objetivos quese quieren alcanzar con este proyecto. En el cual destaca como objetivo principal, elproporcionar a Plan 9 una herramienta grafica para la generacion de ficheros con el codigoen pic que describa las figuras creadas. Esta aplicacion ha de ser intuitiva, con un manejosemejante al otros programas de dibujo de otros entornos, objetivo orientado a aquellosusuarios que no sepan crear dibujos con el lenguaje pic, o aquellos que necesiten crear undibujo complejo. Tambien ha de mostrar en un area especıfico dentro del programa paramostrar una instantanea del dibujo que se este creando.

La funcionalidad que se le quiere dar a la aplicacion es la que se puede observar enel diagrama de casos de usos de la figura 2.2 donde se ven las cuatro funcionalidadesgenerales y fundamentales son las de crear un dibujo, modificarlo, guardarlo en un ficheroy cargarlo.

Figura 2.2: Casos de uso de GPic.

Page 16: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

16 CAPITULO 2. OBJETIVOS: GPIC

En los siguientes diagramas (figuras 2.3 y 2.4) se observan la subdivision de los casosde uso Crear dibujo y Modificar dibujo, en otros tantos casos, que son los que finalmentese han implementado.

Figura 2.3: Subdivision del caso de uso Crear dibujo.

Figura 2.4: Subdivision del caso de uso Modificar dibujo.

Todo lo dicho en este apartado son las metas marcadas, en cuanto objetivos y fun-cionalidad, para el desarrollo de la aplicacion que presenta este documento.

Page 17: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 3

Metodologıa empleada

3.1. Introduccion

Para el desarrollo de cualquier producto software se ha de realizar una serie de tareaspredefinidas entre las ideas iniciales, que provocan la concepcion del proyecto, y el pro-ducto final. Ese desarrollo sigue una determinada metodologıa o modelo de desarrollo. Unmodelo de desarrollo establece el orden en el que se haran las tareas en el proyecto y nosprovee de requisitos de entrada y salida para cada una de las actividades.

Esta aplicacion ha sido desarrollada siguiendo un modelo de desarrollo en espiralbasado en prototipos. Se ha optado por esta metodologıa ya que es la que mejor seadapta a las caracterısticas de una aplicacion como la que se pretende generar, en la cual,cada prototipo que se genera partiendo de uno anterior, y ası, de manera incremental seva dando forma a lo que sera el producto final.

La gran ventaja de este modelo de desarrollo que se considera de vital importanciaes la de tener puntos de control en cada iteracion. Ademas el modelo es muy flexiblea requisitos cambiantes, lo que es muy propio que se de en productos software de lascaracterısticas que se pretenden desarrollar.

Por lo tanto, en este capıtulo se pretende exponer el desarrollo de este proyecto segunesta metodologıa.

3.2. Desarrollo en espiral

En este tipo de desarrollo software, los productos son creados a traves de multiplesrepeticiones del proceso del ciclo de vida. Se pueden dividir en lo que se llaman mini-proyectos.

Estos modelos han sido aplicados al desarrollo de software que no esta orientado aaplicaciones de gestion.

El desarrollo en espiral se puede dividir en las siguientes fases o etapas:

Determinar los objetivos. Los objetivos de un ciclo de desarrollo deben de ser iden-tificados y especificados.

Valorar y reducir los riesgos. Los riesgos son valorados y ciertas actividades sonpuestas en vigor para reducir los riesgos claves.

17

Page 18: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

18 CAPITULO 3. METODOLOGIA EMPLEADA

Desarrollar y validar. El sistema se desarrolla y es validado usando pruebas quetestean el cumplimiento de los requisitos fijados.

Planificar. El proyecto es repasado y la proxima fase de la espiral es planificada.

3.2.1. Aplicacion del desarrollo en espiral al proyecto

Segun estas fases, el correspondiente modelo en espiral que se ha seguido en esteproyecto es el que se puede observar en la figura 3.1 que se muestra a continuacion. Enella se aprecia que el desarrollo en espiral esta formado por ciclos divididos en cuatrofases: Analisis de requisitos, diseno e implementacion, pruebas y planificaciondel proximo ciclo de desarrollo.

Análisis de Requisitos

Diseño e ImplementaciónPruebas

Planificaciónpróxima fase

Figura 3.1: Modelo en espiral.

El analisis de requisitos ha sido llevado a cabo principalmente, mediante la interaccionentre el tutor del proyecto y el autor del mismo. El tutor ha sido el encargado de proponerlos requisitos que debıa ir cumpliendo el software desarrollado.

El analisis de riesgos, en este proyecto, ha sido realizado por parte del tutor del mismo,ya que el ha ido indicando los principales riesgos crıticos que se podıan presentar a lo largodel desarrollo de la aplicacion y se han podido evitar. Por este motivo no se ha incluidodicha fase en el modelo en espiral de la figura 3.1.

La fase de diseno e implementacion ha sido la que se ha llevado la mayor parte deltiempo de desarrollo, planteandose en ella las distintas alternativas de arquitectura, com-portamiento e implementacion. Para esta fase se ha dedicado un capıtulo completo en elque se expondra con todo detalle.

A continuacion, al software resultante de cada fase de diseno e implementacion, se le lehan practicado todas las pruebas necesarias para comprobar su correcto funcionamiento o

Page 19: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

3.3. DESARROLLO BASADO EN PROTOTIPOS 19

en caso contrario la correccion de los posibles fallos. El objetivo de esta fase es comprobarque efectivamente, se ha conseguido cumplir con los objetivos que se plantearon en elanalisis de requisitos.

Por ultimo y como el modelo de desarrollo en espiral marca, se lleva a cabo unplan de elaboracion de la siguiente fase. Este plan se elabora en base a los resultadosobtenidos en las pruebas anteriores. Si los resultados han sido satisfactorios, la siguientefase se planteara como un incremento de la funcionalidad del sistema, en caso contrariose planteara como un incremento de la robustez y consistencia del mismo.

3.3. Desarrollo basado en prototipos

Un prototipo es una version preliminar de un sistema con fines de demostracion oevaluacion de ciertos requisitos. Se puede considerar que cada mini-proyecto del desarrolloen espiral tiene como producto final la obtencion de un prototipo que recoge y muestrasu desarrollo. Es decir, el uso de un modelo de desarrollo en espiral basado en prototipo,se fundamenta en terminar cada ciclo de la espiral con un prototipo que muestre que sehan obtenido los requisitos que se marcaron al principio de cada ciclo.

El uso de los prototipos implica un metodo menos formal de desarrollo, donde sufundamento es hacer comprender las especificaciones del producto final.

Un prototipo usado durante un desarrollo software de estas caracterısticas puede for-mar parte del producto final o bien puede ser desechado.

Las fases que se dan en la construccion de los distintos prototipos de un desarrolloson:

1. Identificacion de Requisitos que debe de cumplir el prototipo.

2. Disenar e implementar el prototipo.

3. Utilizar el prototipo con el fin de probar que cumple los requisitos para los que fuedisenado.

4. Revisar y mejorar el prototipo.

Como se puede observar, las fases de la construccion de prototipos incrementales sepueden solapar con las del modelo de desarrollo en espiral, por lo tanto y como conclusion,en este proyecto se desarrollara un prototipo en cada ciclo del modelo en espiral que se vaa seguir. En cada ciclo se obtendra, como resultado de la fase de diseno e implementacion,un nuevo prototipo.

3.3.1. Prototipos del proyecto

A continuacion se enumeraran los prototipos que se han llevado a cabo en el desarrollode la aplicacion. El numero de prototipos coincide con el numero de ciclos del modelo deespiral que se han necesitado para llevar a cabo el software definitivo.

1. Interfaz grafica. En este prototipo se desarrollara la estetica de la aplicacion y sedefinira la interaccion de la aplicacion con el usuario.

Page 20: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

20 CAPITULO 3. METODOLOGIA EMPLEADA

2. Dibujado de figuras. Esta fase es la encargada de desarrollar las funciones que selanzaran desde el menu de dibujo, y seran las responsables del dibujado de figuras.

3. I/O. Generacion de codigo pic. Este prototipo es el que implementa las funcionesde entrada y salida a fichero.

4. Manipulacion de Figuras. En esta etapa se crean las funciones que controlan lamanipulacion de las figuras, accesibles desde el menu de aplicacion.

5. Optimizacion de la aplicacion. En este prototipo se han mejorado algunas facetasde la aplicacion, como la adicion del efecto goma en el dibujado, o la carga de ficherosdesde la lınea de comandos.

Cada uno de los prototipos anteriores se dividen en su correspondiente especificacion derequisitos, su diseno e implementacion que seran desarrollados en el capıtulo siguiente contodo detalle.

Page 21: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 4

Diseno e implementacion

4.1. Introduccion

En este capıtulo se da una explicacion extensa del desarrollo que se ha seguido eneste proyecto. Como ya se ha dicho en el capıtulo anterior, el desarrollo esta basado enprototipos, y estos seran el guion a seguir en este apartado. De cada uno de los prototiposse dara detalle de su especificacion, de su desarrollo y de su implementacion, ası comoen el siguiente capıtulo se veran las pruebas realizadas a cada parte del proyecto paracomprobar que se han cumplido todos los requisitos dados y que la aplicacion funcionaexenta de errores. Antes de nada se dara una vision globalizada de la arquitectura y unadescripcion de los modulos que componen la aplicacion.

Como se puede observar, este es el capitulo clave para la comprension del software quese presenta, siendo el pilar fundamental de este documento.

4.2. Arquitectura general

La primera necesidad basica en el desarrollo de esta aplicacion, es la de construir unainterfaz grafica, para despues poder anadir a esta las funciones para dibujar figuras. Unavez se tenga un entorno grafico donde podamos visualizar el dibujo que se quiera hacer,se necesita un formato de fichero en el que volquemos la informacion relevante del dibujo.Como ya se ha dicho antes, para cumplir con esta labor, la aplicacion se apoya en ellenguaje pic, por lo que la aplicacion necesita leer y escribir codigo en pic. Estos son lospilares principales en los que se basan el desarrollo de Gpic, dando lugar a los prototiposque se expondran a continuacion y que son:

Prototipo 1. Una primera fase en la que se pretende tener una interfaz grafica simpledonde realizar los dibujos.

Prototipo 2. Una segunda fase donde se puedan dibujar figuras.

Prototipo 3. Una tercera fase en la que la aplicacion escriba y lea ficheros en pic

Prototipo 4. Adicion de funciones para la manipulacion basica de funciones.

Prototipo 5. Posibles mejoras de rendimiento en caso de que estas sean necesarias.

21

Page 22: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

22 CAPITULO 4. DISENO E IMPLEMENTACION

La composicion del software final de Gpic queda establecida despues de este proceso segunla figura 4.1. Distinguir en ella, que el modulo de dibujo a la hora del desarrollo de losprototipos, se decidio separarlo en dos prototipos, por un lado la creacion de las figuras ypor otro la manipulacion de ellas.

Interfaz Grafica + + =Dibujos PIC GPIC

Figura 4.1: Componentes de GPic.

A continuacion se va a exponer en la figura 4.2, en profundidad, el diseno completoque tendra la aplicacion. Sobre esta figura se ira desarrollando este capıtulo, comentan-do en cada prototipo las partes de la figura en la que se centra el proceso de diseno eimplementacion

GestorEventos deMenu

GestorFunciones

GestorDisplay

FuncionesGPIC

Dibujado

I/O

Manipulacion

Figura 4.2: Diseno de GPic.

4.3. Distribucion del codigo en modulos

El codigo de esta aplicacion esta dividido en varios modulos, como se puede observar enla figura 4.3, aunque el software final sea un unico programa. Estos modulos de diferencianpor su funcionalidad y son:

Utils : Este modulo se compone de los ficheros utils.h y utils.c, que engloba lasfunciones genericas necesarias en el resto de los modulos de distintas finalidades.

Data: Modulo compuesto de un unico fichero, data.h, que alberga los tipos de datosdefinidos para la aplicacion y las variables globales, que seran necesarias en el restode modulos.

Page 23: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.4. PROTOTIPO 1: INTERFAZ GRAFICA 23

Bfunc: Compuesto por los archivos bfunc.h y bfunc.c, donde implementan el codi-go de las funciones de creacion de figuras. Corresponden a las funciones que sonlanzadas desde el menu de botones de dibujado.

Pfunc: Este modulo contiene la implementacion de las funciones adicionales delprograma, tales como las de carga y descarga a fichero o las de manipulacion de fig-uras. Corresponden a las funciones lanzadas desde el menu superior de la aplicacion.Compuesto por pfunc.h y pfunc.c.

Gpic: Este es el modulo principal que contiene la inicializacion de la aplicacion yel thread principal, encargado de escuchar los eventos de los botones y provocar laejecucion de las funciones asociadas a estos

Utils

Bfunc Pfunc

Data

Gpic

Figura 4.3: Dependencia entre modulos.

4.4. Prototipo 1: Interfaz grafica

4.4.1. Especificacion

El objetivo principal de esta fase, es el de crear la interfaz grafica de la aplicacion.La interfaz, ha de tener, como elementos imprescindibles, menus de botones y un areadedicado al dibujo. El menu sera el encargado de la ejecucion de las diferentes funciones dela aplicacion, que van desde la creacion de figuras, hasta funciones propias de la aplicacion.Las funciones que lance el menu no podran interferir unas con otras, es decir que cuandocomience la ejecucion de una, provoque la salida de la funcion en curso. La interfaz ha deresponder con eficacia a todas las acciones que se ejecuten sobre la ventana, como puedenser el redimensionado o el cambio de posicion de la misma.

Page 24: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

24 CAPITULO 4. DISENO E IMPLEMENTACION

4.4.2. Diseno

El diseno en este prototipo se ha centrado en el dibujado y manipulacion de la interfazde la aplicacion. Como se muestra en la figura 4.4, consta de tres modulos encargados dedeterminadas funciones que se explicaran mas adelante.

GestorEventos deMenu

GestorFunciones

GestorDisplay

Figura 4.4: Diseno de la interfaz.

Gestor del display

En modulo es el encargado de pintar en el terminal o display, donde se ejecute laaplicacion, las partes de la interfaz necesarias, desde los menus con botones hasta el areade dibujo o canvas. Por lo que la funcionalidad de este componente es la de inicializar lainterfaz y mantenerla siempre visible, es decir que si se produce un cambio de posicion ode tamano del display, la interfaz ha de adaptarse y mantenerse visible.

Las 4 partes en que se divide la interfaz son:

Menu superior: Es el que contiene las funciones propias del programa, las demanejo de figuras y las de carga y descarga de fichero. A la izquierda de este estaun rotulo con el nombre del programa.

Menu lateral: Es el que contiene las funciones de dibujado de figuras y de escriturade texto.

Area de dibujo: Es el area donde se realiza el dibujado, y es la parte mas extensade la interfaz.

Entrada de texto: En la parte inferior, consta de dos partes, a la izquierda unaetiqueta que muestra la operacion que se esta realizando en cada momento, y a laderecha el control de entrada de texto en sı, que tiene como finalidad interactuarcon el usuario si la aplicacion necesita algun parametro como puede ser el nombrede un fichero o la salida de errores en la carga de este.

Page 25: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.4. PROTOTIPO 1: INTERFAZ GRAFICA 25

Como ya se ha dicho en este documento, para la creacion de interfaces grafica, Plan9 posee la librerıa Control, que proporciona los elementos necesarios para la creacion deaplicaciones con entorno grafico. A diferencia de otros sistemas en los que se cuentan conlenguajes visuales para la creacion de las interfaces graficas, bajo Plan 9, la cosa cambia,ya que el desarrollo de cualquier componente de una aplicacion es en C, y en el caso deque se quiera crear una interfaz grafica, la librerıa con la que se cuenta es Control.

La librerıa Control proporciona dos estructuras basicas: control y controlset, y lasfunciones necesarias para la creacion, control y manipulacion de estas. La comunicacionque se realiza entre los controles o el controlset, esta basada en threads, esto implica lanecesidad de un mecanismo de comunicacion entre controles. Esta comunicacion se hace atraves de canales. Cada controlset tiene dos canales que, como ya se ha comentado, sirvenpara enviar y recibir mensajes de eventos de raton o teclado, o comandos a los controles(canal de control), y otro de datos, que como su nombre indica, tiene como fin el envıo dedatos a los distintos controles. Cada control, tambien tendra dos canales, el de eventos quecorresponderıa con el canal de control del controlset, con la diferencia de que por este nose envıan comandos, y el de datos. El conjunto de operaciones necesarias para la creacionde la interfaz han de estar dentro de la funcion resizecontrolset(), por necesidades de lalibrerıa. Ya que esta funcion es llamada cada vez que tenga que hacer un refresco de laaplicacion.

Gestor de eventos de menu

Este es el modulo encargado de escuchar los eventos que se produzcan en los menusde la interfaz y decirle al Gestor de Funciones la funcion que tiene que comenzar arealizar. Tambien ha de mantener un control sobre los botones que han sido presionadospara que nunca haya dos al mismo tiempo, es decir que si se presiona un boton, ha decomprobar que no haya ningun boton activo en ese momento, y en tal caso desactivarloy enviar un mensaje de salida a la funcion en ejecucion, del mismo modo ha de actuarsi se recibe un evento de desactivacion de un boton. Esto ha de ejecutarse permanente eindependientemente del resto de funciones de la aplicacion por lo que se lanzara un threadexclusivamente para este fin.

Gestor de funciones

Este modulo tiene como finalidad la de ejecutar las funciones que el Gestor de Eventosla vaya indicando. Para este fin es necesario crear un hilo de ejecucion independiente alresto, donde se mantenga en espera hasta que se le indique una funcion a ejecutar, nopudiendo ejecutarse dos funciones al mismo tiempo, es decir que hasta que la funcion encurso no salga, no comenzara la ejecucion de la siguiente.

Page 26: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

26 CAPITULO 4. DISENO E IMPLEMENTACION

4.4.3. Implementacion

Gestor del display

Una de las partes mas importante de este componente es la definicion de la interfazgrafica a utilizar. Para la creacion misma ha sido necesario crear dos estructuras propiasde esta aplicacion. La principal es la estructura Interfaz en la que se agrupan todos loscontroles necesarios de la interfaz grafica.

struct Interfaz

{

Control *botones[N];

Control *Title;

Control *topmenu;

Control *caja;

Control *dibujo;

Control *cmdline;

Control *cmdlabel;

Controlset *cs;

int numbut; /* numero de botones */

int (*funciones[N])(void*);

};

Los elementos mas importantes de esta estructura son:

botones : Este array es el que contendra todos los controles correspondientes a losbotones de los menus de la aplicacion. Depende de la constante N, definida en elfichero data.h, que indica el numero de botones.

cs : Es el controlset al que pertenecen todos los controles de la estructura.

funciones : Este array de punteros a funciones es donde se encuentran las funcionesasociadas a los botones correspondientes. El boton con ındice n, tiene asociada lafuncion que corresponde a la misma posicion n del array de funciones.

dibujo: Este es el area donde se dibujan las figuras y el que recoge los eventos de lasfunciones de dibujo.

resto de tipos Control : Son las partes visibles del interfaz, tales como el tıtulo delos dos menus, el area de dibujo y la entrada de texto.

La variable de tipo Interfaz declarada en la aplicacion se inicializa mediante la fun-cion initInterfaz, que es la encargada de crear cada uno de los controles y asignarle laspropiedades de cada uno de ellos. Por otro lado, al utilizar la librerıa Control es necesarioimplementar el codigo de la funcion resizecontrolset, para el redibujado de toda la interfazen el caso de que sea necesario, como son al inicializarlo o al redimensionar la ventana.

Page 27: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.4. PROTOTIPO 1: INTERFAZ GRAFICA 27

Esta funcion hace una simple llamada a refresca que es la que realmente contiene el codigoque dibuja el interfaz.

La otra variable importante a la hora de la creacion de la interfaz es la variable botones,utilizada al principio de la aplicacion para declarar todos los botones que se quieren en elinterfaz.

miboton botones[N] = {

{"Exit",exit, 1},

{"New", nuevo, 1},

...........

{"Text", texto, 2},

{"Poligon", poligono, 2},

{"Select", select, 2},

};

Esta variable, en su declaracion, se rellena con los valores del nombre del boton, lafuncion y un valor numerico 1 o 2 que indica en que menu se quiere que se muestre. Estearray sera recorrido al inicio de la aplicacion para la creacion de los botones y su insercionen la variable de tipo Interfaz. Es decir que para anadir un boton nuevo, simplemente serianecesario incrementar la constante N, y anadir una nueva entrada en el array botones, consu funcion asociada. Los nodos de esta variable son declarados de tipo miboton, definidoexpresamente para este fin.

struct miboton {

char *label;

int (*FN)(void*) ;

int enmenu;

};

Estos son los elementos usados en la creacion y mantenimiento de la interfaz grafica,con esto se tiene un sistema capaz de relacionar botones con funciones dentro de unainterfaz manejable que soporta las operaciones realizadas sobre el terminal que contengala aplicacion..

Gestor de eventos de menu

Este modulo es implementado en el thread principal, que ejecuta un bucle infinitoescuchando los eventos de los botones declarados anteriormente. Aquı tambien se declarauna de las variables mas importantes del programa, realiza. Esta variable es un puntero auna funcion, que en el caso de que se produzca un click en alguno de los botones, se hacecambiar para que apunte a la funcion asociada a dicho boton.

Page 28: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

28 CAPITULO 4. DISENO E IMPLEMENTACION

void threadmain(int argc, char *argv[]){

.............

int (*realiza)(void*) ;

.............

realiza = espera;

.............

for(;;){

if (RECIBO_CLICK_SOBRE_BOTON){

if (CLICK_SOBRE_BOTON_NO_SELECCIONADO){

boton = BOTON_QUE_RECIBE_EVENTO;

if (Anterior_boton != -1){

if (Anterior_boton != boton){

PROVOCAR_SALIDA_DE_FUNCION_EN_CURSO;

}

}

Anterior_boton = boton;

realiza = menu->funciones[pressB];

Finalizar espera;

} else {

if (Anterior_boton == button){

PROVOCAR_SALIDA_DE_FUNCION_EN_CURSO;

Anterior_boton = -1;

}

}

}

}

}

Gestor de funciones

Este modulo esta compuesto por la funcion quehago, que se ejecuta en un threaddistinto al principal, que simplemente es un bucle infinito que ejecuta la funcion a la queapunta realiza.

void quehago(void *v){

Channel *s;

s = v;

for(;;){

if (realiza == nil)

fprint(2,"Error: Funcion nula");

else

(*realiza)(s);

Page 29: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.4. PROTOTIPO 1: INTERFAZ GRAFICA 29

}

}

Con todo esto ya se tiene una interfaz con las partes imprescindibles para poder dibujary con la capacidad de lanzar funciones de cualquier tipo. Otra cualidad importante es sufacilidad de ampliar su funcionalidad.

Interaccion entre threads

Figura 4.5: Interaccion entre threads.

El la figura 4.5 se observa la interaccion entre los distintos hilos de ejecucion delprograma:

1. El usuario realiza selecciona un boton de la interfaz.

2. Esta accion del usuario genera la escritura de dicho evento en el canal ctl (control)del controlset.

3. Mientras el thread del gestor de eventos, que esta escuchando continuamente, lee elevento de boton seleccionado.

4. A continuacion realiza dos operaciones:

4.1. Primera escribe en el canal de salida de funciones un mensaje de salida.

4.2. Despues cambia el puntero a procedimiento realiza para que apunte a lanueva funcion.

5. Una vez a comenzado la ejecucion de una funcion esta ha de escuchar en dos canales:

a) En el canal de salida: por si envıan un mensaje de salida de funcion.

Page 30: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

30 CAPITULO 4. DISENO E IMPLEMENTACION

b) En el canal del control preciso: si es una funcion de dibujado escuchara en elcanal de control del area de dibujo mientras que si se trata de la carga de unfichero escuchara en canal de control del area de texto.

6. A continuacion el usuario realizara las operaciones que precise la funcion en cursosobre la interfaz.

7. Esas operaciones generaran la escritura de los eventos correspondientes en los canalesde eventos del control en cuestion.

4.5. Prototipo 2: Dibujado de figuras

4.5.1. Especificacion

El objetivo de esta fase es la de implementar las funciones de dibujado de figuras yescritura de texto, descritas en el diagrama de casos de uso de la figura 2.3, que seranlanzadas desde el menu de la interfaz grafica que se creo en la fase anterior. La manera deoperar de estas funciones ha de ser similar a las aplicaciones de dibujo de otras plataformas,recogiendo los eventos de raton del area de dibujo y mostrando en ella el resultado decada operacion. Estas funciones han de contemplar las figuras basicas necesarias como:lineas, flechas, arcos, cırculos, elipses, rectangulos, triangulos y polıgonos de mas de cuatrovertices, y escritura de texto. Estas funciones han de ejecutarse hasta que se vuelva ahacer click en el boton que provoco su inicio, deseleccionar el boton, o cuando se ejecutecualquier otra funcion del menu.

4.5.2. Diseno

Este prototipo forma parte del componente Funciones de Gpic, como se muestra enla figura 4.6.

FUNCIONESGPIC

DIBUJADO I/O MANIPULACION

Figura 4.6: Desglose del modulo de funciones.

Para la creacion de las funciones contempladas en este prototipo es necesario la uti-lizacion de la librerıa draw, que implementa las funciones para dibujar figuras sobre el

Page 31: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.5. PROTOTIPO 2: DIBUJADO DE FIGURAS 31

display. Estas funciones son las que seran invocadas en ultima instancia por las opera-ciones de dibujo, es decir que las funciones de dibujo han de realizar las operacionesnecesarias para poder llamar a las funciones de draw con los parametros que estas nece-site. Cada funcion ha de estar ejecutandose hasta que recibe por un canal el mensaje desalida, dejando la ejecucion de inmediato sin ningun perjuicio para la ejecucion global dela aplicacion.

Dibujado de figuras

Las funciones de dibujo de figuras recogen los mensajes de eventos de raton que envıael control dibujo (canvas o area de dibujo), discriminando los que son utiles de los queno. Cuando tienen la informacion relevante en cada caso, realizan los calculos necesariospara hacer una llamada a la funcion correspondiente de draw. Por tanto, partiendo deposiciones del raton, dadas por los mensajes de eventos de clicks sobre el area de dibujo,obtenemos los datos necesarios para hacer las llamadas a las funciones de draw. Estasoperaciones pueden ser tan simples como en el caso de las lineas, o mas complejos comoes el caso de los arcos, donde hay que echar mano de calculos trigonometricos para obtenerel arco que pasa por los tres puntos que da el usuario.

En la figura 4.7(A) se puede ver un ejemplo de como mediante dos click de raton sedibuja una lınea, mientras que en la figura 4.7(B) se ve como quedarıa un arco dando trespuntos.

Escritura de texto

La funcion mas peculiar es la de escritura de texto, ya que esta difiere en la manerade operar con respecto a las demas funciones implementadas. Se anade la complejidad decontrolar tanto los eventos de raton como los de teclado. Los datos que se necesitan sonlas teclas que pulsa el usuario dentro del area de dibujo, a partir de una posicion dadacon el raton. Dependiendo de la pulsacion que sea, habra que actuar de manera diferente,como es el caso de la tecla back space que en vez de escribir, borra un caracter.

En la figura 4.7(C) se ve como a partir de una posicion dada mediante el raton seescribe el texto deseado.

Page 32: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

32 CAPITULO 4. DISENO E IMPLEMENTACION

Te xto aqui

Click 2

Click 3

Click 1

Click 2

Click 1

Click

A

B

C

Figura 4.7: Ejemplo de dibujo.

4.5.3. Implementacion

En esta parte del proyecto, todos los esfuerzos se han destinado a la creacion de lasfunciones de dibujado de figuras. Que aunque similares en metodologıa difieren bastante ala hora de la implementacion. Para este fin han sido necesarias la utilizacion de la librerıagrafica draw, la creacion de una estructura donde albergar las figuras creadas.

struct Dibujo

{

int tipo;

Image *color;

int end1;

Point iniP;

Point finP;

int r, r2,r3;

char *texto;

int numP;

Point *P;

};

Las funciones encargadas de dibujar figuras responden a un esquema similar a este:

int FUNCION_DIBUJA (void *CANAL_DE_SALIDA){

int salir = -1;

.........

activate(menu->dibujo);

.........

while(salir == -1){

for(i = 0; i < ELEMENTOS_NECESARIOS;){

ESCUCHO_CANAL;

CANAL = CANAL_RECIVE_DATOS;

switch(CANAL) {

Page 33: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.6. PROTOTIPO 3: I/O. GENERACION CODIGO PIC 33

case EVENTOS:

if (EVENTO == CLICK_RATON){

GUARDAR_POSICION;

}

break;

case SALIDA:

i = ELEMENTOS_NECESARIOS;

salir = 0;

break;

}

}

if (salir != 0){

CALCULO_PARAMETROS_NECESARIOS;

newDbj(TIPO, PARAMETROS);

refresca(menu);

}

}

realiza = espera;

deactivate(menu->dibujo);

return salir;

}

Donde cada funcion es la encargada de activar el control dibujo, para que este envıe suseventos por el canal, para posteriormente quedarse en un bucle con una unica condicionde salida: la captura de un mensaje de salida recibido por el canal de salida. Mientras estono ocurra, la funcion seguira en ejecucion, e ira guardando las posiciones del raton, tantascomo necesite para completar las figuras. Una vez tenga los puntos necesarios para dibujaruna figura solo quedara por hacer la transformacion de esas posiciones en parametroslegibles por las funciones de draw. Guardandose en todo caso en una variable array cuyosnodos seran del tipo de la estructura antes vista. En el momento de la recepcion delmensaje de salida, se pone el puntero realiza apuntando a la funcion espera, desactiva elarea de dibujo y sale de la funcion.

Como excepcion a este modo de operar, esta la funcion texto, que no solo recibeeventos de raton sino que tambien de teclado, teniendo que discriminar entre caracteresy pulsaciones especiales como el Enter y el Back space, para ir formando las cadenas decaracteres a partir de las posiciones dadas por el raton.

A parte de estas funciones, se ha tenido que anadir a la funcion refresca, creada en elprototipo1, la capacidad de dibujar todas las figuras junto con la interfaz.

Al termino de este prototipo ya se tiene un software capaz de dibujar figuras y escribirtexto, dentro de un entorno grafico, viendo en cada momento el dibujo que se va creando.

4.6. Prototipo 3: I/O. Generacion codigo Pic

4.6.1. Especificacion

Esta etapa del proyecto se centra en darle a la aplicacion la capacidad de guardar enun fichero el dibujo creado. Como ya se ha comentado en este documento, para este fin se

Page 34: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

34 CAPITULO 4. DISENO E IMPLEMENTACION

hara uso de un lenguaje de dibujado ya existente en Plan 9, pic. Este es un importante pasoen el desarrollo de la aplicacion, ya que de que valdrıa hacer un dibujo, sin poder guardarlopara su posterior uso. Y del mismo modo es necesario poder leer el contenido de un ficheroque se haya generado previamente, para su visualizacion o modificacion. El argumentomas importante para la eleccion de pic como formato de los ficheros, es la posibilidad dereutilizacion en otros documentos, es decir, que no sea un fichero legible unicamente porGpic. Otro dato importante es la posibilidad de modificar el fichero generado, si se conocela sintaxis de pic.

4.6.2. Diseno

Este prototipo pertenece al diseno del modulo Funciones de Gpic como se muestra enla figura 4.8).

FUNCIONESGPIC

DIBUJADO I/O MANIPULACION

Figura 4.8: Desglose del modulo de funciones.

La creacion ficheros que contengan el dibujo y la posibilidad cargarlos de nuevo en laaplicacion es el objetivo a cumplir en este fase. Para alcanzar este fin se ha utilizado, comobase del formato de los ficheros, la sintaxis del lenguaje pic. El lenguaje pic provee comoelementos basicos para dibujar: rectangulos, lineas, flechas, cırculos, elipses y arcos. Cadauno de ellos tiene una sintaxis propia para su construccion, y anadiendo la sintaxis nece-saria para el posicionamiento y el tamano de las figuras, se tiene las sintaxis necesaria parapoder guardar todas las figuras que se creen en un fichero pic. En el momento de la lecturade fichero simplemente hay que reconocer la sintaxis generada en el momento en el que eldibujo fue guardado, y hacer las mismas llamadas a las funciones de draw que se hacıanpara dibujar las figuras desde la interfaz. Del mismo modo que en el prototipo anterior setenıan que transformar las posiciones del raton en los datos que necesitan las funcionesde draw, al cargar las figuras descritas en pic, tambien es necesaria la transformacion delos datos.

4.6.3. Implementacion

Las funciones encargadas de guardar y leer de fichero son las asociadas a los botonesdel interfaz para tal efecto.

El primer factor que hay que tener en cuenta es el control del tamano de los objetos.Pic trabaja por defecto en pulgadas y las funciones de dibujado utilizan pıxeles, por lo

Page 35: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.6. PROTOTIPO 3: I/O. GENERACION CODIGO PIC 35

que para poder realizar esta transformacion, es necesario tomar alguna referencia entreambos tipos de medida. En Gpic se ha tomado el ancho del area de dibujo, en el momentode guardar el dibujo, como si de una hoja de tamano A4 se tratase, con esto ya se puedegenerar el parametro scale, necesario en pic, para que las figuras tengan el tamano deseado.

Otro dato importante es que pic trabaja con coordenadas que parten de la esquinainferior izquierda, mientras que cuando se dibuja por pantalla las coordenadas son dadaspartiendo desde la esquina superior derecha. Esto conlleva un calculo de cambio de coor-denadas a la hora de guardar o leer de fichero para que las figuras no queden invertidas.

Escritura

Esta funcion no necesitan nada mas que se le proporcione un nombre de fichero, atraves del control de entrada de texto, que se habilitara previamente para tal efecto. Acontinuacion recorrera la lista de dibujos y dependiendo de cada tipo de figura, llamara ala funcion especifica. Cuando termine la escritura de todos los elementos, provocara supropia salida, autoenviandose el mensaje de salida por el canal. Un caso particular esla escritura de texto, que es almacenado como un rectangulo transparente con un textoasociado a el, por lo que el posicionamiento se realiza sobre el rectangulo. Al volcado deun polıgono se realiza mediante la escritura de lineas consecutivas.

Lectura

Del mismo modo que en la escritura, la funcion de lectura pedira un nombre de ficheroa leer, cuyo contenido almacenara en un buffer temporal pera despues ir leyendo lineaa linea, almacenando la figura en la lista de figuras y dibujandola en pantalla al mismotiempo. Esta funcion inicializa la lista de figuras y limpia el area de dibujo. Esta funcion,tambien provoca su propia salida cuando ha terminado de cargar todas las figuras. Enesta funcion es importante destacar que si no es capaz de reconocer la sintaxis de algunade las lineas que intenta leer, terminara su ejecucion, indicando la lınea cuyo texto noreconoce, aunque no eliminara lo leıdo hasta ese instante. ”

Formato de fichero

La sintaxis que genera y reconoce Gpic para cada tipo de figura es:

Lıneas: “line from 00,00 to 00,00 ”

Flechas: “arrow from 00,00 to 00,00 ”

Elipses: “ellipse ht 00 wid 00 with .c at 00,00 ”

Rectangulos:“box ht 00 wid 00 with .nw at 00,00 ”

Cırculos: “circle radius 00 at 00,00 ”

Arcos: “arc cw from 00,00 to 00,00 with .c at 00,00 ”

Texto: “box invis ht 00 wid 00 at 00,00 ”TEXTO”ljust below ”

Page 36: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

36 CAPITULO 4. DISENO E IMPLEMENTACION

Polıgonos: “line from 00,00 to 00,00; line to 00,00; line to 00,00; ... ”. En este casolas coordenadas de la ultima linea son las mismas que las de inicio de la primera,para crear el efecto de un polıgono cerrado.

A continuacion se muestra un ejemplo de ficheroen pic, creado por la aplicacion, conuna figura de cada tipo, y en la figura 4.9 se muestra el resultado.

.PS

scale = 87.1826

line from 26,975 to 208,975

arrow from 28,951 to 213,951

ellipse ht 34 wid 176 with .c at 120,899

box ht 51 wid 166 with .nw at 40,857

circle radius 55 at 318,933

line from 252,806 to 314,857; line to 379,806; line to 252,806

arc cw from 467,921 to 568,927 with .c at 517,934

box invis ht 13 wid 96 at 486,907 "Texto texto" ljust below

line from 440,875 to 440,815; line to 558,815; line to 602,847; line

to 546,875; line to 440,875

.PE

Te xto texto

Figura 4.9: Ejemplo de todas las figuras.

4.7. Prototipo 4: Manipulacion de figuras

4.7.1. Especificacion

Hasta este punto la aplicacion es capaz de crear dibujos, almacenarlos y rescatarlosposteriormente, pero no permite cambiar las propiedades de las figuras dibujadas. Eneste prototipo se pretende anadir funcionalidad imprescindible a la aplicacion. Esta nuevafuncionalidad se centra en las figuras en si mismas. Si uno de los objetivos principalesde la aplicacion es el de facilitar al usuario la creacion de dibujos, poco se lograrıa si laaplicacion se quedase en este punto, sin dejar modificar los dibujos creados.

Page 37: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.7. PROTOTIPO 4: MANIPULACION DE FIGURAS 37

Funcionalidades importantes a anadir son las de poder mover una figura, copiarla aotro punto y la posibilidad de borrarla. Pero para poder realizar estas operaciones esnecesario poder seleccionar previamente la figura sobre la que quiere actuar.Y como elresto de funcionalidad del programa, estas han de ser accesibles desde el menu de laaplicacion.

4.7.2. Diseno

La finalidad que se pretende en esta etapa es, como ya se ha comentado, la de anadirfuncionalidad al modulo funciones de Gpic (figura 4.10). Esta funcionalidad esta orientadaa la manipulacion de las figuras.

FUNCIONESGPIC

DIBUJADO I/O MANIPULACION

Figura 4.10: Desglose del modulo de funciones.

Lo primero que se necesita para manipular una figura es poder seleccionarla, y para esteimportante fin se han creado dos funciones para desplazarse por la lista de figuras y otrafuncion para la seleccion de figuras a traves de la seleccion por pantalla de su punto inicial.Una vez conseguida la seleccion, ya se puede trabajar con las figuras individualmente, porlo que a partir de este punto se desarrollaron las funciones tıpicas de: borrar, copiary mover. Estas funciones aportan la funcionalidad que necesita la aplicacion para sercomodamente utilizable en la generacion de dibujos. Por ultimo y como complemento ala funcion de borrado, se ha anadido la funcion nuevo, la cual borra todas las figuras ylimpia el area de dibujo.

Como se puede observar, este prototipo no anade ningun concepto nuevo, solo in-crementa la funcionalidad de la aplicacion, apoyandose en las bases ya definidas en losprototipos anteriores.

4.7.3. Implementacion

Las funciones implementadas en esta fase responden a un diseno y una implementaciondiferentes segun su finalidad, por lo que a continuacion se explicaran discriminandolassegun este criterio.

Page 38: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

38 CAPITULO 4. DISENO E IMPLEMENTACION

Funciones de seleccion

Esta es inevitablemente la primera operacion para implementar, ya que sin ella noserıa viable ninguna de las siguientes funciones. Para la seleccion de las figuras se hancreado tres funciones, que difieren en el modo de seleccionar los objetos:

Anterior y posterior

Estas funciones seleccionan las figuras siguiendo el orden natural de creacion, lafuncion posterior ira seleccionado de la primera a la ultima mientras que anteriorlo hara en orden inverso.

La implementacion de estas funciones es muy sencilla, simplemente se desplazan unaposicion pariendo de la figura que este seleccionada, con salvedad de que si la figuraseleccionada es la ultima y se presiona sobre posterior, se seleccionara la primerafigura de la lista. De modo analogo, cuando la funcion anterior sea invocada y lafigura actual sea la primera de la lista, ira al ultimo elemento.

Selecciona Esta funcion comienza con un redibujado de las figuras, marcando suspuntos iniciales, para que el usuario pique sobre alguno ellos para realizar la seleccionde una figura en particular.

Page 39: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.7. PROTOTIPO 4: MANIPULACION DE FIGURAS 39

int selecciona (void *v){

.......

PINTA_PTO_INICIAL ();

.......

while(salir == -1){

ESCUCHO_CANAL;

CANAL = CANAL_RECIVE_DATOS;

switch(CANAL) {

case EVENTOS:

if (EVENTO == CLICK_RATON){

seleccion = buscaF(POSICION_RATON);

if (seleccion != -1){

PINTA_FIGURA (ROJO);

Actual = seleccion;

}

}

break;

case SALIDA:

salir = 0;

break;

}

}

realiza = espera;

deactivate(menu->dibujo);

return salir;

}

Donde la funcion buscaF es la encargada de mirar si el click del raton esta proximo aalgun punto inicial de alguna figura.

Las dos primeras funciones tienen la necesidad de ejecutarse una unica vez por cadapulsacion de su boton, mientras que selecciona permite cambiar la seleccion realizada, esdecir, se queda en ejecucion hasta que alguien envıe la senal de salir. Por defecto la figuraque esta seleccionada es siempre la ultima creada, a no ser que se seleccione por una deestas tres funciones.

Estas operaciones tienen como finalidad marcar una figura para realizar alguna accionsobre ella, pero no modifican ninguna propiedad, ni varıan el dibujo.

Funciones de borrado

Para este fin se han implementado dos funciones:

Delete: Esta operacion elimina de la lista de figuras aquella que esta seleccionada.

New: Elimina todas las figuras de la lista y limpia el area de dibujo.

Page 40: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

40 CAPITULO 4. DISENO E IMPLEMENTACION

Funciones de manejo de figuras

Mover: Esta funcion modifica la posicion de una figura, previamente seleccionada.El usuario es el encargado de indicar la nueva posicion que tomara la figura.

Copiar: Con esta funcion se crea una copia del objeto seleccionado y espera a queel usuario indique su posicion.

En ambas funciones, la referencia tomada para el posicionamiento se realizara sobreel punto inicial de la figura, e ira redibujandola a medida que se desplace el raton, parapoder ver como va quedando. La figura se posicionara cuando se suelte el boton del raton.

4.8. Prototipo 5: Optimizacion de la aplicacion

4.8.1. Especificacion

El prototipo obtenido en el ciclo de desarrollo anterior, cumple los requerimientosfuncionales establecidos en un principio. Ahora bien, destaca la necesidad de cumplirciertos requisitos que si bien no son imprescindibles si son deseables, como es el tener unainstantanea de la figura que estas realizando, por ejemplo es importante que si se quieredibujar una elipse, esta se vaya redibujando poco a poco hasta que aceptemos a formaque tiene, sin ver en cada instante como va quedando es muy difıcil saber cual sera elresultado final. Otro requisito interesante es el de tener la posibilidad de cargar un ficheroal iniciar la aplicacion desde la linea de comando, pasando este como parametro.

El incremento que se pretende con el desarrollo de un nuevo prototipo que cumplalas condiciones anteriores no es funcional, sino que mas bien es relativo a la robustez yvalidad del sistema.

4.8.2. Diseno

Esta fase esta compuesta de una serie de mejoras y retoques en el codigo de la apli-cacion, cuyo fin es aumentar las prestaciones obtenidas en la fase de implementacion.

Aunque el sistema funciona correctamente, presenta algunas incomodidades que nohan sido planteadas hasta esta fase final del desarrollo del proyecto, dichas mejoras noanaden funcionalidad pero si mejoran el producto final. Las mejoras planteadas son:

Efecto goma. Hasta el momento cuando se dibujaba una figura, no se podıa sabercomo estaba quedando hasta que no estuviese acabada. Por lo que a la hora de crearelipses o polıgonos complejos el usuario se encontraba con un grave inconveniente.La solucion a esto es el llamado “efecto goma”, el cual se puede observar en aplica-ciones similares. dicho efecto consiste en ver progresivamente como va quedando lafigura que se esta dibujando, estirandose o contrayendose a medida que movemos elraton. Esta optimizacion de las funciones de dibujado implica una gran cantidad deoperaciones de refresco del display, teniendo que ajustar la frecuencia del redibujadode la figura para no producir incomodidades al usuario.

Carga de fichero desde la lınea de comandos. Esta nueva caracterıstica con-siste en pasar el nombre del fichero como parametro en el momento de ejecutar la

Page 41: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

4.8. PROTOTIPO 5: OPTIMIZACION DE LA APLICACION 41

aplicacion (Ej.: “gpic fichero.gpic”). Esta opcion evita tener que abrir la aplicacionpara despues cargar el fichero desde el menu.

4.8.3. Implementacion

Para cada una de las optimizaciones comentadas en el apartado anterior, se ha real-izado su correspondiente implementacion consistente para cada caso en:

Efecto goma. Se han modificado todas las funciones de dibujado. Anadiendo enellas la condicion de que si ha pasado mas de cierto tiempo entre dos eventos demovimiento de raton, se redibuja la interfaz y la figura con los datos que hasta esemomento se tienen, tomando la posicion actual del raton como ultimo valor.

.........

case EVENTOS:

if (EVENTO == CLICK_RATON){

GUARDAR_POSICION;

} else {

if (TIEMPO_TRANSCURRIDO > TIEMPO_REFRESCO){

refresca(menu);

ELEMENTOS[i] = POSICION_ACTUAL_RATON

DIBUJA_FIGURA(ELEMENTOS);

}

}

break;

.........

Carga de fichero desde la lınea de comandos. Para la implementacion de estaoptimizacion se ha anadido el tratamiento de los argumentos que se pasan en lalınea de comando, para que en el caso de que se pase como argumento el nombre deun fichero este sea cargado inmediatamente. la ejecucion del programa en este casoserıa del siguiente modo:

term% gpic fichero.gpic

Al final de la implementacion de este ciclo de desarrollo, Gpic estara completo. Yase tiene el diseno general y modular de Gpic. Se podra empezar a usar segun sus especi-ficaciones, ya que se tendra un entorno sencillo para dibujar, teniendo la posibilidad degenerar un fichero con el codigo pic que describa los dibujos.

Page 42: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

42 CAPITULO 4. DISENO E IMPLEMENTACION

Page 43: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 5

Validacion

En este capıtulo se comentaran en detalle las pruebas realizadas para comprobar elcorrecto funcionamiento de la aplicacion. Esta fase consta de tres casos de pruebas, dondecada uno se centrara en cada una de las tres partes funcionales diferentes, dejando de-mostrando al final de cada caso, el correcto comportamiento de la aplicacion en todassus facetas. En los tres casos de prueba que se describen a continuacion se intenta probartoda la funcionalidad de la aplicacion detallando el comportamiento en cada caso.

5.1. Primer caso de prueba: Interfaz Grafica

Este apartado intenta reproducir los casos que un usuario se encuentra al trabajar conuna aplicacion grafica en Plan 9, como son el redimensionado de la venta que contiene laaplicacion o como interactuan las distintas partes en que se divide la interfaz grafica delprograma.

5.1.1. Descripcion

Lo primero que hay que ver en este apartado es la carga del programa, para lo cualse abrira un terminal y se ejecutara el programa, el terminal que se haya abierto para talfin sera el que contendra la aplicacion. Como se puede ver en la figura 5.1, Gpic constade 4 partes bien diferenciadas:

Menu superior: Es el que contiene las funciones propias del programa, las demanejo de figuras y las de carga y descarga de fichero. A la izquierda de este estaun rotulo con el nombre del programa.

Menu lateral: Es el que contiene las funciones de dibujado de figuras y de escriturade texto.

Area de dibujo: Es el area donde se realiza el dibujado, y es la parte mas extensade la interfaz.

Entrada de texto: En la parte inferior, consta de dos partes, a la izquierda unaetiqueta que muestra la operacion que se esta realizando en cada momento, y a laderecha el control de entrada de texto es si, que tiene como finalidad interactuar

43

Page 44: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

44 CAPITULO 5. VALIDACION

con el usuario si la aplicacion necesita algun parametro como puede ser el nombrede un fichero o la salida de errores en la carga de este.

Figura 5.1: Interfaz de Gpic.

Redimensionar y mover la ventana

En esta seccion se probara la respuesta que da la interfaz grafica en el caso de quese redimensione o se mueva la ventana donde esta se ejecuta. en estos casos el compor-tamiento de la interfaz es semejante, repintandose despues de cada operacion.

Las figuras 5.2 y 5.3 muestran la operacion de redimensionado de la ventana, mientrasque las figuras 5.4 y 5.5 muestran el proceso de mover la ventana de lugar. En amboscasos se puede observar el correcto redibujado de la interfaz.

Page 45: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.1. PRIMER CASO DE PRUEBA: INTERFAZ GRAFICA 45

Figura 5.2: Realizando la redimension

Figura 5.3: Redimensionado

Page 46: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

46 CAPITULO 5. VALIDACION

Figura 5.4: Moviendo la ventana

Figura 5.5: Ventana movida

Page 47: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.2. SEGUNDO CASO DE PRUEBA: DIBUJADO Y MANIPULACION 47

Interaccion del menu

A continuacion veremos como interactuan los distintos botones del menu entre sı, en lafigura 5.6 veremos como al hacer click sobre un boton se deselecciona el boton que hastaese momento estaba seleccionado, provocando con ello la salida de la funcion en curso yel comienzo de la nueva.

Figura 5.6: Cambio de boton

Como caso particular dentro del menu, es el boton salir, que provoca la salida de laaplicacion y devuelve el control al terminal rc.

5.1.2. Resultados

En esta fase de pruebas se ha podido comprobar el perfecto funcionamiento de lainterfaz grafica, desde el arranque de la aplicacion hasta su cierre. Comprobando los casosen los que es necesario recargar toda la interfaz, y tambien el comportamiento que tienela interfaz en lo que a la funcionalidad propia del programa se refiere.

5.2. Segundo caso de prueba: Dibujado y manipu-

lacion

Este apartado se centra en confirmar el perfecto funcionamiento de las funciones cor-respondientes a la creacion y manipulacion de las figuras que comprenden el dibujo que sepretenda realizar. Se detallara la creacion de cada una de las figuras ası como su posteriorseleccion y manipulacion.

Page 48: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

48 CAPITULO 5. VALIDACION

5.2.1. Descripcion

Primero se verificaran las funciones de dibujado y una vez probado su funcionamientoy que se tenga un dibujo con una figura de cada tipo que se puede crear, se procedera alverificar las funciones: seleccion, mover, redimensionar y borrar.

Dibujar figuras

Lineas: Cuando se dibuja una lınea se marca el primer punto con un cruz, y hastaque no se vuelva a hacer un nuevo click se ira dibujando la linea entre el puntoinicial marcado y el puntero, este efecto se muestra en la figura 5.7(a), mientras enla figura 5.7(b) se observa como queda la lınea despues de hacer el segundo click.

(a) (b)

Figura 5.7: Proceso de dibujado de una lınea

Flechas: El funcionamiento es el mismo que en el caso de las lıneas, marcandose elpunto inicial y dibujando la linea hasta recibir el punto final y ası dibujar la flechadefinitiva, ası se muestra la figura 5.8.

(a) (b)

Figura 5.8: Proceso de dibujado de una flecha

Page 49: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.2. SEGUNDO CASO DE PRUEBA: DIBUJADO Y MANIPULACION 49

Elipses: En esta funcion el primer click indica el centro de la elipse que se mar-cara con un aspa, y los radios seran las distancias vertical y horizontal desde elcursor al centro, ver la figura 5.9.

(a) (b)

Figura 5.9: Proceso de dibujado de una elipse

Rectangulo: La funcion rectangulo actua de forma similar que las anteriores, in-dicando don untos mediante dos click de raton, el primero se marca con un aspa, ycomo todas se va dibujando un rectangulo entre el punto inicial y el cursor, comose muestra en la figura 5.10.

(a) (b)

Figura 5.10: Proceso de dibujado de un rectangulo

Page 50: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

50 CAPITULO 5. VALIDACION

Cırculo: De manera similar a la elipse, cuando se dibuja un circulo, el primer puntoes marcado con una cruz que representa el centro, el radio se calcula obteniendo ladistancia entre el centro y el segundo click de raton. Ver figura 5.11.

(a) (b)

Figura 5.11: Proceso de dibujado de una elipse

Triangulo: Esta funcion recoge tres clicks de raton, correspondientes a los tresvertices de la figura. como se muestra en la figura 5.12 entre el primer y segundoclick, se va dibujando una linea, y cuando solo quede por dar el tercer vertice, ya sepuede ir viendo el triangulo que se va formando.

(a) (b)

Figura 5.12: Proceso de dibujado de un triangulo

Page 51: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.2. SEGUNDO CASO DE PRUEBA: DIBUJADO Y MANIPULACION 51

Arco: En esta funcion se va dibujando las lineas entre el primer punto y el segundoy entre este y el raton (veanse las figura 5.13(a) y 5.13(b)), para poder tener unaidea del arco que finalmente se dibujara, figura 5.13(c)).

(a) (b) (c)

Figura 5.13: Proceso de dibujado de un arco

Polıgono: Como se muestra en la figura 5.14), el proceso de creacion de un polıgonoes simple, se le ven dando puntos mediante clicks con el boton izquierdo, y se vadibujando el polıgono deseado, hasta que se clickee con el boton central del raton,siendo este el ultimo vertice, y de este modo se termine el polıgono cerrado.

(a) (b)

Figura 5.14: Proceso de dibujado de un polıgono

Page 52: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

52 CAPITULO 5. VALIDACION

Texto: En la funcion texto solo se indica la posicion a partir de la cual se va haescribir el texto, este punto se marcara con una cruz (Ver figura 5.15).

(a) (b)

Figura 5.15: Proceso de escritura de texto

Manipular figuras

Una vez se tenga un dibujo con una figura de cada tipo, se puede pasar verificar laseleccion y manipulacion de las figuras.

Para la seleccion de las figuras se cuenta con dos mecanismos, el primero consiste enrecorrer las figuras segun su orden de creacion, mediante los botones Prev. y Next como semuestra en la figura 5.16 , o mediante la seleccion de la figura mediante su punto inicial,como se puede ver en la figura 5.17.

(a) (b)

Figura 5.16: Proceso de seleccion ordenado

Page 53: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.2. SEGUNDO CASO DE PRUEBA: DIBUJADO Y MANIPULACION 53

(a) (b)

Figura 5.17: Proceso de seleccion ordenado

Una vez comprobado el funcionamiento de la seleccion de figuras se puede proceder alresto de funciones habiles. A continuacion se realizara la copia de la elipse seleccionada enla figura 5.17, y la desplazaremos a la derecha. El desplazamiento de la figura se realizatomando como referencia el punto inicial, no fijando la posicion final de esta hasta que nose suelte el boton izquierdo del raton, como se ve en la figura 5.18.

Figura 5.18: Copiado de la elipse.

La siguiente prueba es la de mover una figura de lugar, para ello se seleccionara pre-viamente y se desplazara tomando como referencia el punto inicial de creacion, marcadocon un pequeno cırculo alrededor. Como se muestra en la figura 5.19, se desplazando lafigura siguiendo el curso hasta que se suelta el boton del raton.

Visto ya las posibilidades de mover y copiar figuras, solo queda comentar el borradode ellas mediante los botones Del y New. El primero borra la figura seleccionada, comose muestra en la figura 5.20, mientras que al ejecutar New borra todas.

Page 54: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

54 CAPITULO 5. VALIDACION

Figura 5.19: Desplazar la elipse.

Figura 5.20: Borrado de la elipse.

Page 55: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.3. TERCER CASO DE PRUEBA: GENERACION Y CARGA CODIGO PIC 55

5.2.2. Resultados

Como se ha podido observar en esta fase ha quedado se ha podido crear sin dificultadestodas las figuras que se propusieron implementar. Y del mismo modo se ha demostrado elcorrecto funcionamiento de las operaciones de manipulacion de los dibujos. Por todo estode pude concluir que esta prueba ha resultado satisfactoria.

5.3. Tercer caso de prueba:

Generacion y carga codigo Pic

En este apartado se quiere poner en pruebas el modulo de entrada y salida a ficherode los dibujos. Se pondra mayor interes en el modo de generar codigo pic, viendo queeste dibujo es reutilizable sin que sufra alteraciones. Y por ultimo, cargando el fichero,anteriormente generado, de nuevo en el gpic.

5.3.1. Descripcion

Para esta prueba se creara con Gpic un dibujo algo mas complejo que los vistos hastael momento, como el que se muestra en la figura 5.21.

Figura 5.21: Dibujo en Gpic.

Y a continuacion se muestra el fichero escrito en pic que se ha generado al guardarlodesde Gpic.

Page 56: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

56 CAPITULO 5. VALIDACION

Figura central compuesta por dos elipses cruzadas, dos lineas y un circulo:

.PS

scale = 100.9674

ellipse ht 264 wid 64 with .c at 369,957

circle radius 133 at 367,956

ellipse ht 62 wid 266 with .c at 368,957

line from 234,955 to 501,955

line from 371,1088 to 370,824

Figura compuesta por dos cuadrados y un octogono:

line from 630,1084 to 563,1015; line to 632,948; line to 700,1018; line to 630,1084

line from 583,1063 to 581,970; line to 681,970; line to 681,1062; line to 583,1063

line from 663,1076 to 605,1079; line to 567,1041; line to 568,991; line to 602,955; line to 661,955; line to 695,993; \

line to 695,1041; line to 663,1076

Formacion en forma de ojo:

ellipse ht 60 wid 198 with .c at 660,825

circle radius 29 at 660,825

circle radius 9 at 660,825

line from 560,868 to 576,841

line from 592,877 to 601,850

line from 621,879 to 626,853

line from 651,879 to 653,854

line from 685,876 to 681,854

line from 719,872 to 712,851

line from 752,863 to 738,843

line from 584,806 to 575,782

line from 608,799 to 602,773

line from 629,796 to 629,772

line from 652,794 to 654,771

line from 678,794 to 685,773

line from 702,798 to 714,777

line from 724,802 to 735,782

line from 747,810 to 761,793

Composicion de los dos cırculos con estrellas dentro y flechas entre ambos:

circle radius 28 at 101,1025

circle radius 59 at 101,1025

line from 102,1083 to 122,1046; line to 161,1025; line to 123,1005; line to 103,966; line to 82,1004; line to 43,1024; \

line to 83,1045; line to 102,1083

circle radius 28 at 100,839

circle radius 59 at 101,839

line from 101,898 to 121,861; line to 160,840; line to 122,820; line to 102,781; line to 81,819; line to 42,839; \

line to 82,860; line to 101,898

arc from 160,839 to 160,1026 with .c at 91,932

arc cw from 43,838 to 41,1024 with .c at 134,932

arrow from 60,881 to 60,982

arrow from 144,985 to 143,880

Texto con la firma del dibujo:

box invis ht 13 wid 220 at 608,757 "Ruben Sevilla Giron" ljust below

Figuras de las cuatro esquinas:

line from 6,1174 to 6,1098; line to 34,1146; line to 80,1174; line to 81,1174; line to 6,1174

line from 751,1174 to 825,1174; line to 825,1100; line to 804,1148; line to 803,1148; line to 751,1174

line from 5,807 to 5,735; line to 78,735; line to 30,761; line to 5,807

line from 829,811 to 829,736; line to 753,736; line to 806,762; line to 829,811

.PE

Si se carga este fichero de nuevo en el gpic, se verıa igual que el original de la figura 5.21.Y al ser un fichero escrito con codigo pic, se puede reutilizar posteriormente en multitudde aplicaciones. Un ejemplo de reutilizacion del dibujo creado se puede ver es este mismodocumento, escrito en Latex [6], donde la figura 5.22 mostrada a continuacion es el dibujocreado desde Gpic:

Page 57: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

5.3. TERCER CASO DE PRUEBA: GENERACION Y CARGA CODIGO PIC 57

Ruben Sevilla Giron

Figura 5.22: Dibujo creado por Gpic.

5.3.2. Resultados

En esta fase de prueba, se ha podido probar la generacion y la carga de los ficherosutilizados por la aplicacion, escritos en codigo pic, y su posterior reutilizacion en otrasaplicaciones. Por lo que se puede concluir que esta prueba ha resultado satisfactoria.

Page 58: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

58 CAPITULO 5. VALIDACION

Page 59: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Capıtulo 6

Conclusiones

Al finalizar este proyecto fin de carrera, se ha obtenido como resultado:

Una aplicacion novedosa en Plan 9, que conjuntando componentes existentes enesta plataforma se ha forjado una aplicacion que puede ser utilizada tanto por losusuarios cotidianos, como por los menos expertos en el sistema.

Acercar el proceso de creacion de dibujos en Plan 9 a aquellos usuarios mas acos-tumbrados a trabajas con entornos visuales.

Si el usuario en cuestion no conoce el lenguaje pic, ya no necesitara aprenderlo,anulando por tanto el tiempo que se dedicarıa a este efecto.

Cualquier usuario de este sistema operativo pueden crear ficheros con codigo en picdel dibujo que desea, sin tener que escribir ni una sola lınea, y realizando todo elproceso de manera visual.

Gpic pone a disposicion del usuario una interfaz sencilla, desde donde se puede crearun nuevo dibujo, modificar un dibujo ya existente, guardar el dibujo a un fichero o leerlodesde un fichero escrito en lenguaje pic. Teniendo en cada momento una instantanea deldibujo que esta realizando.

En conclusion, con este proyecto se ha conseguido dotar de la vision grafica que carecıala creacion de dibujos bajo Plan 9.

6.1. Lecciones aprendidas

A lo largo de la realizacion de este proyecto se han aprendido:

1. El manejo de uno de los sistemas operativos de nueva generacion como es Plan 9,uno de loas mas avanzados en el campo de los sistemas operativos distribuidos.

2. A desarrollar aplicaciones en dicho sistema operativo, con sus peculiaridades y libr-erıas propias como control y draw

3. El lenguaje de programacion C, usado en Plan 9.

4. El lenguaje de creacion de dibujos pic.

5. Los distintos formatos de ficheros graficos existentes

59

Page 60: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

60 CAPITULO 6. CONCLUSIONES

6.2. Trabajo futuro

Una vez concluida la realizacion de este proyecto se plantean varios campos de trabajoque podrıan mejorar la aplicacion o anadir mas funcionalidad a la misma. Siendo unaaplicacion de dibujo, se puede observar otras aplicaciones similares con mas desarrollo,para poder ver las posibles lineas futuras de la aplicacion. En las siguientes secciones seexponen las principales mejoras propuestas.

6.2.1. Ampliacion de funcionalidad

Las opciones comentadas a continuacion, son entre otras muchas las que por su impor-tante consideracion han sido anadidas en este apartado como lineas futuras de desarrollo.Se ha creıdo que son las opciones que necesariamente han de desarrollarse a continuacionde este proyecto, y antes de cualquier otra modificacion de la funcionalidad.

Opcion deshacer

Una de las ampliaciones mas deseables serıa la de poder contar con una opcion dedeshacer, que vaya a un estado anterior del dibujo. Con esta opcion se da mucha maslibertad al usuario en la creacion de dibujos, ya que sabe que puede deshacer los pasosen caso de cometer algun fallo. Conjuntamente con esta opcion se puede anadir otra derehacer para poder volver al estados posteriores en el caso de haber hecho uso de deshacer.

Estas opciones dan confianza al usuario ya que sabe que si comete algun fallo en lacreacion del dibujo puede ir hacia atras o hacia delante sin ningun perjuicio.

Agrupacion de figuras

Otra opcion interesante serıa la de poder hacer agrupaciones de figuras para manip-ularlas como si de una sola se tratase, pudiendo hacer cargas y descargas a fichero delos grupos creados. Esta opcion anadirıa un nuevo nivel en la creacion de dibujos, ya queaporta reutilizacion de composiciones complejas, es decir que se puede hacer un dibujo queconsta de varios conjuntos de figuras, podemos guardarlas por separado para que en unfuturos trabajos se puedan reutilizar estas agrupaciones. Otra caracterıstica importanteque anade la posibilidad de agrupar figuras es que si, por ejemplo, se desea modificar laposicion global del conjunto se puede hacer en una sola operacion, ahorrando el trabajode mover cada una de las figuras por separado.

6.2.2. Reconocimiento completo de codigo pic

Un trabajo futuro importante es el de completar el reconocimiento de codigo pic enla carga de los dibujos desde gpic. El lenguaje pic puede llegar a ser muy complejo por loque serıa interesante la creacion de un parser para el codigo pic. Esto es importante parapoder modificar el codigo pic manualmente y poder volver a cargarlo en la aplicacion, oen dibujos creados anteriormente y que se quieran modificar con gpic. Ya que hasta elmomento gpic solo es capaz de leer el codigo que el mismo genera.

Page 61: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

Bibliografıa

[1] Francisco J. Ballesteros.: “Notes on the Plan 9 3rd edition Kernel Source”,Junio, 2001.

[2] Lucent.: “Introduccion a la seccion 5 del manual de plan 9.”,Manual de Plan 9, 2, 2000.

[3] Rob Pike.: “Acme: A user interface for programmers.”,Manual de Plan 9, 2, 2000.

[4] Kernighan, B.W., RITCHIE, D.M.: “El Lenguaje de Programacion C”,Addison-Wesley, 1999.

[5] Kernighan, B.W., PIKE, R.: “The Practice of Programming”,Addison-Wesley, 1999.

[6] Salinas, B.C., Saorın, P.L., Mira, J.M., Ruiz, A.P. Ruiz, Guillen, S.S.: “Latex unaimprenta en sus manos”,AD, 1997.

[7] Kernighan, B.W.: “PIC - A graphics langage for typesetting”,Bell Laboratories, Manual de usuario.

[8] Supoj Sutanthavibul: “XFIG - Facility for Interactive Generation of figures underX11”,Manual de Linux. 2002.

[9] Fredrik Hallenberg, W. Borgert: “DIA - a diagram drawing program”Manual de Linux. 1999.

[10] Van Wyk, C.J.: ACM transactions on Graphics 1,21982

[11] Anon.: “V - A viewgraph generating language”,Bell Laboratories, memorandum interno, Mayo 1979.

[12] Beatty, J.C.: “PICTURE - A picture-drawing language for the Trix/Red Report Ed-itor”,Lawrence Livermore Laboratory Report UCID-30156, Abril 1977.

[13] Bentley, J.L., Kernighan, B.W.: “GRAP - A language for typesetting Graphs”,CACM 29,8. Agosto, 1986.

61

Page 62: Ingenier¶‡a T¶ecnica en Inform¶atica de Sistemaslsub.org/ls/export/pfc_gpic.pdf · se presenta en esta memoria. La aplicaci¶on llamada GPic intenta dar esa visi¶on gr¶aflca

62 BIBLIOGRAFIA

[14] Plan 9 Programmer’s manual.http://www.cs.bell-labs.com/Plan9dist/

[15] Plan 9 from Bell Labs.http://plan9.bell-labs.com

[16] Antonio Manuel Reyes Rodrıguez: “Autocad para la ingenierıa”,Anaya Multimedia. Enero, 2003.

[17] I. Thomas, J. Bootello.: “3D Studio MAX R.3”,Anaya Multimedia, 2000.

[18] Evening, Martin. “Photoshop para fotografos”,Anaya Multimedia. Febrero, 2003.

[19] Wikipedia.http://es.wikipedia.org/

[20] Laboratorio de sistemas.http://plan9.escet.urjc.es/ls

[21] Grupo de Sistemas y Comunicaciones Universidad Rey Juan Carlos I.http://gsyc.escet.urjc.es