1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
14 \use_numerical_citations 0
15 \paperorientation portrait
18 \paragraph_separation indent
20 \quotes_language english
24 \paperpagestyle default
35 \begin_inset LatexCommand \tableofcontents{}
45 Al ser una aplicación visual, algunos conceptos de la programación orientada
46 a objetos no se han tomados al pie de la letra, ya sea cuestiones de encapsulam
50 Descripción del desarrollo:
56 La clase principal de esta aplicación es la clase Constructor.
57 Ella es la encargada de obtener e inicializar todos los elementos de la
58 ventana principal, ya sean botones, cuadros de diálogo, barras de herramientas,
62 Para cada botón referenciado por esta clase, es conectado a ellos una señal,
63 que será el método que deben invocar al ser presionados.
66 Uno de los métodos mas importantes de esta clase es
67 \begin_inset Quotes eld
70 on_item_drop_drag_recived()
71 \begin_inset Quotes erd
74 que es la encargada de crear un nuevo elemento si es arrastrado desde la
75 barra de elementos, o de moverlo dentro del área de trabajo si este ya
79 Para facilitar el diseño y disminuir la complejidad, la grilla fue dividida
80 en sectores de 32x32 pixels, lo que permite que el usuario no tenga que
81 ser muy preciso a la hora de soltar un item en el área de trabajo.
84 Cada nuevo elemento creado es almacenado en una lista de elementos (
85 \begin_inset Quotes eld
89 \begin_inset Quotes erd
92 ) de transporte o almacenamiento de fluido, o de elementos lógicos, según
94 \begin_inset Quotes eld
98 \begin_inset Quotes erd
104 Otra de las funciones principales es
105 \begin_inset Quotes eld
109 \begin_inset Quotes erd
112 que recorre todos los items de ambas listas y verifica que se haya formado
113 en el momento del diseño un circuito posible.
114 Mas adelante se verá como cada elemento verifica su conexión.
117 Esta clase contiene los métodos necesarios para guardar y cargar un archivo
118 XML cuyo formato se explica mas adelante.
121 También está contenida en ella la clase WorkPlace, que detalla a continuación.
127 Esta clase es la encarga de de manejar el área trabajo.
128 Deriva de Gtk::DrawingArea pues es donde se van a dibujar todos los elementos.
129 Una de sus principales tareas es redibujarse cuando sea necesario y al
130 mismo tiempo, redibujar los elementos que contiene, como pueden ser los
131 items de la planta o las líneas lógicas que conectan los mismos.
134 Para lograr esto, se ha redefinido el método virtual (contenido en la clase
136 \begin_inset Quotes eld
140 \begin_inset Quotes erd
143 de manera conveniente.
146 También se encarga de eliminar correctamente un item, eliminando al mismo
147 tiempo las lineas que llegan o salen de él.
153 Acá se definen los comportamientos comunes de todo los items de la aplicación,
154 como puede ser la imagen actual, la posición en la grilla, el caudal máximo,el
155 número único de identificación y diferentes punteros a otros objetos.
158 Por cuestiones de diseño los elementos de la planta además de tener un número
159 único que los identifica, también deben tener nombres difrerentes.
162 También esta definida en esta clase la estuctura que representa los conectores
163 físicos, y otra que representa a los conectores lógicos.
166 Esta clase contiene métodos abstractos ya que cualquier elemento que descienda
167 de ella deberá poder implementar los mismos porque, por ejemplo, ningún
168 item se guarda en un archivo de la misma manera; este es el caso del método
170 \begin_inset Quotes eld
174 \begin_inset Quotes erd
180 Existe otro método abstracto dentro de esta clase que es
181 \begin_inset Quotes eld
185 \begin_inset Quotes erd
189 Del mismo modo que un item se guarda de forma diferente que otro, también
190 verifica su conexión de distinta forma, es por eso que cada item debe implement
191 ar su manera de verificar como y con quién esta conectado.
194 Al ser esta clase abstracta, no puede ser instanciada, con lo cual existirá
195 una clase derivada de esta para cada item que se quiera agregar en la aplicació
197 \layout Subsubsection
199 Método check_connection():
202 Anteriormente se mencionó que cada item verifica sus conexiones de manera
206 Las clases que heredan de CItem son las siguientes:
209 Conduct: representa un tubo.
212 Splitter: representa un codo.
215 Union: representa un empalme ( UNION ó DIVISION).
218 Cistern: representa un tanque,
221 Exclusa: representa una exclusa.
224 Drain: representa un drenaje.
227 Pump: representa una bomba.
230 Para las clases Conduct, Splitter y Exclusa, este método es bastante similar,
231 sobre todo teniendo en cuenta que una exclusa es un tubo con una propiedad
232 mas (abierto/cerrado) y el codo es un tubo que en la aplicación representa
236 Estos tres elementos tienen la particularidad que sus conectores físicos
237 no estan definidos en el momento de su creación, sino que se definen una
238 vez que pertenecen a un circuito.
241 La verificación se realiza recorriendo la lista de items y preguntandole
242 a cada uno que posee en sus extremos.
245 El tanque, la bomba, el empalme y el drenaje, tiene definidos sus conectores
246 en el momento de la creación.
249 Supongamos que el circuito es el siguiente:
253 \begin_inset Graphics
254 filename /home/nico/plaqui/Constructor/doc/check_connection.png
261 Donde bomba0 y tubo0 son los de la izquiera y bomba1 y tubo1 son los de
262 la derecha, para poder diferenciarlos.
265 Cabe aclarar que no importa con cual de los items se comience la iteración.
268 Según la imagen actual de la bomba0, este debe preguntar con quién esta
269 conectado en su salida pero ya sabe, por ser bomba que tendrá una salida,
270 luego el tubo0 que en ese momento no esta definido, debe averiguar como
271 definirse, para hacerlo pregunta en su otro extremo el cual esta conectado
272 con una unión, que por ser unión posee dos entradas (horizontales en este
273 caso) y una salida (vertical).
274 La unión le responde que posee una entrada, por lo tanto el extremo derecho
275 del tubo será una salida, lo cual implica que el extremo izquierdo tiene
276 que ser una entrada, y esto es compatible con la bomba.
277 De esta forma la bomba0 y el tubo0 se setean sus conectores y se establecen
279 \begin_inset Quotes eld
283 \begin_inset Quotes erd
287 Continuando con la iteración, es el turno del tubo0 (por el orden de incersión
288 en la lista), pero este ya está conectado, por lo tanto no se realizan
292 Lo mismo ocurre del lado derecho del circuito con la bomba1 y el tubo1.
295 Algo similar ocurre cuando la unión pregunta que tiene en su salida, la
296 exclusa debe preguntarle al tanque y este le responderá que posee una entrada,
297 luego la exculsa tendrá una entrada en el extremo superior y una salida
298 en el inferior; nuevamente el circuito es compatible.
299 Por último el tanque le solicita al codo que le informe su estado y el
300 proceso se repite con el drenaje que posee solamente una salida.
303 Así todos los elementos han quedado conectados y conocen también con quién
307 Formtato del archivo:
310 El archivo de salida de la planta al guardarla tiene un formato XML.
313 Para el ejemplo anterior el archivo sería el siguiente: