Tarea 2: Programación Orientada a Objetos (elo329):

Titulo: Simulación Gráfica de Bolas, Puntos fijos, Resortes y Elásticos como Objetos de Software

Creador: Carlos Ibáñez Ch.
Rol: 2721008-2

PARTE I:	Vista General de la aplicación
--------

Descripción General:
------------------

Mediante el siguiente trabajo se creara una estación para la simulación de experimentos masa-resorte.

Se extiende el trabajo base entregado por el profesor Sr. Agustín González y se agregán Clases que permiten la interacción en un plano 2D.


Los archivos que componen el trabajo son:

AtachableElement.java   	-> Clase abstracta que contiene los patrones a seguir por los elementos que pueden ser conectados a un resorte
Ball.java			-> Clase que contiene la implementación y comportamiento de las bolas fisicas
ConfigurationMenuListener.java	-> Clase que contiene la implementación de las acciones que ejecutan los items del menu "Configuration"
Drawable.java			-> Interfaz que define los metodos necesarios para que los objetos puedan dibujarse en nuestra aplicación.
FixedHook.java			-> Clase que contiene la implementación y comportamiento de los ganchos a los cuales se pueden fijar los resortes 
				(para que no caigan)
GBall.java			-> Clase que contiene la implementación de la parte gráfica de las bolas fisicas
GFixedHook.java			-> Clase que contiene la implementación de la parte gráfica de los ganchos fijos
GRubber.java			-> Clase que contiene la implementación de la parte gráfica de los elasticos 
GSpring.java			-> Clase que contiene la implementación de la parte gráfica de los resortes
MouseListener.java		-> Clase que contiene los metodos que responden a los eventos de mouse 
MyWorld.java			-> Clase que contiene los datos del mundo (roce, gravedad y elementos), y es la responsable de la simulación.
PhysicsElement.java		-> Clase abstracta que contiene los patrones a seguir o patrones comunes de los elementos fisicos.
PhysicsLab.java			-> Clase principal (ejecutable).
PhysicsLabPanel.java		-> Clase que contiene la implementación del panel gráfico principal de la aplicación, en este se dibujan los objetos gráficos
Rubber.java			-> Clase que contiene la implementación y comportamiento de los elasticos.
Spring.java			-> Clase que contiene la implementación y comportamiento de los resortes
Vector2D.java			-> Clase que implementa el manejo de los vectores 2D utilizados para la simulación en un plano XY
WorldControlMenuListener.java	-> Clase que contiene la implementación de las acciones que ejecutan los items del menu "MyWorld"



Parte II: 	Procesos previos a ejecución
--------

Compilación:
----------

El metodo para compilar es el siguiente:

$make


Para limpiar directorio de los archivos .class se debe ejecutar

$make clean


Para generar la documentación javadoc se debe usar el siguiente comando:

$make doc

Para leer este readme se puede usar

$make readme


Como ejecutar:
-------------

Para ejecutar el archivo, desde consola (y en el mismo directorio que el programa) se debe escribir:

$make run

Esto ejecutara el programa.



PARTE III:	Durante ejecución

Sobre los menús:
---------------

La aplicación tiene 2 menus principales los cuales son:


·Configuration Menu:	Este menú contiene los items necesarios para agregar/eliminar/editar objetos de nuestro experimento
------------------
	|-> Insert:		Con esta opción se abre una pestaña, la cual nos permite elegir entre una lista de objetos para agregar uno nuevo a la simulación
	|	|		(Deshabilitado mientras la simulación esté corriendo)
	|	|-> Ball:		Insertar Bola
	|	|-> FixedHook:		Insertar Gancho
	|	|-> Spring:		Insertar Resorte
	|	|-> Rubber:		Insertar Elastico	
	|
	|-> Delete:		Esta opción permite habilitar el modo "Delete" la cual nos permitirá eliminar un objeto de la simulación mediante un click del
	|			mouse
	|			Nota: Para saber si esta opción está habilitada, el puntero del mouse cambiará a una forma de cruz (+).
	|-> Edit Parameters:	Con esta opción se habilita el modo "Edit" que permite mediante un click del mouse, modificar datos intrinsicos del objeto
				seleccionado (i.e. en el caso de un resorte o elastico, modificar su constante elastica, o en el caso de una bola, su masa)
	



·MyWorld Menu:		Este menú contiene los items necesarios para manejar los datos de simulación y ejecutar/detener la misma.
--------------
	|-> Start:		Permite comenzar una simulación "limpia" (sin datos de aceleración ni de velocidad en las bolas).
	|-> Resume:		Permite reanudar una simulación conservando los datos de aceleración y velocidad previos.
	|-> Stop:		Detener la simulación actual.
	|-> Gravity:		Permite modificar la gravedad del "mundo" simulado.
	|-> Viscocity:		Permite modificar la viscocidad del "mundo" simulado.
	|-> Simulator:		Modificar datos del tiempo de simulación
		|-> Delta Time:			Modificar cada cuanto tiempo se calculará un nuevo estado en los objetos
		|-> Graphics Refresh Time:	Modificar cada cuanto tiempo se mostrará un nuevo estado en los objetos




Como utilizar la aplicación:
---------------------------

Para utilizar la aplicación primero se debe definir cuales son los valores de Gravedad y Viscocidad.

Luego puede empezar a agregar los elementos que desee e interconectarlos como desee
Nota: Las Bolas y Elasticos solo se pueden conectar a Ganchos y Bolas (y viceversa) no entre si.

Los datos como masa o constante elastica de los elementos ingresados aparecerán dibujados en el mismo.
Si en algún punto desea cambiar esto debe usar "Edit Parameters" e ingresar el valor deseado.

Ahora puede comenzar la ejecución de la aplicación usando "Start"

Nota2: Si en algún punto desea modificar/eliminar/agregar elementos, debe primero detener la simulación utilizando "Stop"
Luego puede retomar la ejecución usando "Resume" o "Start" dependiendo de lo que desee.



