Universidad Técnica Federico Santa María

ELO-329 Diseño y Programacíon Orientados a Objetos.

Proyecto Final

"Editor de Circuitos"

1- Descripción del Problema:

El editor de circuitos consiste en un programa que implementa una interfaz gráfica que permite dibujar en pantalla, usando como base un área subdividida en celdas cuadradas, distintos componentes eléctricos lineales, permitiendo así obtener visiones simplificadas de distintos circuitos básicos.

Con dicho programa se busca entregar un esquema simple, que facilite el análisis de distintas mallas, además de funcionar como un escalón inicial para el uso de software de simulación más avanzados, tales como LTSpice y MultiSim.

2- Análisis del Problema:

Como se menciona con anterioridad, el programa corresponde a una interfaz gráfica, la cual contiene una barra de menú con funciones de edición de archivos, edición del área de trabajo y con funciones de verificación de circuitos. Lamentablemente, no se alcanza a implementar las últimas funciones.

Además, en el lado izquierdo de la interfaz, se encuentra una barra de botones que permiten incorporar elementos al área de trabajo y otros para manipular los elementos en pantalla.

En el área central, se encuentra el panel donde se visualiza los circuitos. Para administrar el espacio en pantalla, se crea una clase llamada matrix, la cual divide la pantalla en celdas y permite la incorporación de los elementos de forma ordenada.

2.1- Casos de Uso:

2.1.1- Inserción de un elemento al área de trabajo:

- Nombre: Insertar un Componente.

- Propósito: El usuario desea insertar un componente en el área de trabajo.

- Actor: El usuario del Programa.

- Pre-Condición: Se ha iniciado el software.

- Evento: El usuario selecciona el componente a insertar.

- Post-Condición: El componente queda fijado en el lugar disponible.

- Tipo: Manual

- Curso Normal de Eventos:

Actor Sistema
1 - El usuario escoge un componente de la barra de botones del programa. 2 - El sistema verifica si hay una casilla disponible
3 - El sistema agrega el elemento.
4 - El sistema espera un nuevo evento por parte del usuario.

- Curso Alternativo de Eventos:

Actor Sistema
3A - El sistema no agrega el elemento y pasa al paso 4.

A continuación se muestra una prueba de este caso de uso en donde la primera imagen muestra la configuración actual; la segunda imagen muestra la inserción de un cable; la tercera imagen muestra la inserción de una resistencia; la cuarta imagen muestra la inserción de un capacitor; la quinta imagen muestra la inserción de un inductor; la sexta imagen muestra la inserción de una fuente de voltaje; y por último, la séptima imagen muestra la insercion de varios componentes que no sobre-escriben la configuración ya hecha. El cursor no fue capturado por el screenshot.

2.1.2- Mover un elemento en el área de trabajo:

- Nombre: Mover un Componente.

- Propósito: El usuario desea mover un componente en el área de trabajo.

- Actor: El usuario del Programa.

- Pre-Condición: Hay un elemento en el área de trabajo.

- Evento: El usuario selecciona el componente a mover.

- Post-Condición: El componente queda fijado en el lugar escogido por el usuario.

- Tipo: Manual

- Curso Normal de Eventos:

Actor Sistema
1 - El usuario selecciona un componente del área de trabajo del programa. 2 - El sistema modifica el color del elemento seleccionado a azul
3 - El sistema espera que el usuario seleccione una posición para ubicar el elemento.
4 - El usuario selecciona una casilla desocupada 5 - El sistema mueve el elemento a la casilla seleccionada.
6 - El sistema cambia el color del elemento a negro.
7 - El sistema espera un nuevo evento por parte del usuario.

- Curso Alternativo de Eventos:

Actor Sistema
4A - El usuario selecciona una casilla ocupada 5A - El sistema cambia el color del elemento a mover a rojo.
6A - El sistema no realiza cambios al area de trabajo y vuelve al paso 3

A continuación se muestra un diagrama UML de este caso de uso. En el javadoc se encuentra detallada la implementación.

A continuación se muestra una prueba de este caso de uso en donde la primera imagen muestra la configuración actual con un inductor fuera de lugar; la segunda imagen muestra el inductor seleccionado; la tercera imagen muestra el inductor tratando de ser movido a una casilla ocupada; por último, la cuarta imagen muestra el inductor movido a la posición deseada para cerrar el circuito. El cursor no fue capturado por el screenshot.

2.1.3- Rotar un elemento en el área de trabajo:

- Nombre: Rotar un Componente.

- Propósito: El usuario desea rotar un componente en el área de trabajo.

- Actor: El usuario del Programa.

- Pre-Condición: Hay un elemento en el área de trabajo.

- Evento: El usuario selecciona el componente a rotar.

- Post-Condición: El componente se rota en sentido antihorario en el mismo lugar.

- Tipo: Manual

- Curso Normal de Eventos:

Actor Sistema
1 - El usuario selecciona un componente del área de trabajo del programa. 2 - El sistema modifica el color del elemento seleccionado a azul
3 - El sistema espera que el usuario seleccione el boton ROTAR.
4 - El usuario selecciona el botón ROTAR 5 - El sistema rota el elemento.
6 - El sistema cambia el color del elemento a negro.
7 - El sistema espera un nuevo evento por parte del usuario.

- Curso Alternativo de Eventos 1:

Actor Sistema
4A - El usuario selecciona otro botón. 5A - El sistema no rota el elemento.
6A - El sistema ejecuta la acción del botón seleccionado y pasa al paso 7.

- Curso Alternativo de Eventos 2:

Actor Sistema
4B - El usuario selecciona una casilla. 5B - El sistema no rota el elemento.
6B - El sistema ejecuta la acción de MOVER y pasa al paso 7.

A continuación se muestra una prueba de este caso de uso en donde la primera imagen muestra la configuración actual con una resistencia mal orientada; la segunda imagen muestra la resistencia seleccionada; por último, la tercera imagen muestra la resistencia rotada luego de presionar el botón rotar. El cursor no fue capturado por el screenshot.

2.2- Diagrama de Clases

A continuación se muestra el diagrama de clases del proyecto:

2.3- Dificultades encontradas durante el desarrollo del proyecto:

-El primer problema que surge cuando se desarrolla el proyecto es al tratar de dividir la pantalla en 2 para insertar el area de dibujo y la barra de menú. Esto se resuelve estudiando y posteriormente utilizando layout, principalmente BorderLayout.

-Luego, cuando se probaba la división de la pantalla, se intentaba asignar un objeto tipo Component a la división derecha, luego de asignarle un color de fondo, pero la sección no se coloreaba. Esto se arregla utilizando un objeto de la clase JPanel en reemplazo por component.

-Otro problema acontece al momento de dibujar la vista de los elementos, ya que se desconocia una forma de realizar curvas y como unirla a trazos ya existentes. Esto se soluciona estudiando varias clases que forman parte de la biblioteca de geometría de java. Principalmente se usa las clases Path2D.double y Ellipse2D.Double.

-Cuando se deseaba obtener la vista rotada de las imágenes diseñadas, no se logra el resultado esperado al utilizar la opción rotate de affine transformation. Por lo que se terminan diseñando cada una de las vistas rotadas como otra variable almacenada en un objeto Path2D.Double

3- Listado de Bugs:

-Al seleccionar un elemento, ejecutar una opción con el y después realizar otra selección, para realizar esta se necesitan dos o más clicks, siendo que se espera que sea solo uno.

-A veces la selección de elementos no ocurre si se hace click dentro de una casilla, pero fuera de la vista del elemento.

-Si se realiza el zoom máximo y se graba un archivo, se vuelve a habilitar esta opción y si se lleva a cabo, se crashea el programa. Lo mismo para el zoom out

4- Descargas

El código fuente del proyecto se puede encontrar en la siguiente sección: Código Fuente. Allí se encuentran todas las versiones realizadas. Sólamente la versión final se encuentra comentada.

La presentación expuesta en clases se puede encontrar en la siguiente sección: Presentación.


Developed by Diego Pandolfa and Jesús Márquez