]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/include/plantitem.h
* Se agrega el TIP de luca
[z.facultad/75.42/plaqui.git] / Model / include / plantitem.h
1
2
3 #ifndef _ELEMENTO_PLANTA_H_
4 #define _ELEMENTO_PLANTA_H_
5
6 #include <string>
7 #include "iconector.h"
8 #include "rgb.h"
9 #include <sstream>
10
11 #define INFINITO 99999999
12
13 namespace PlaQui {
14
15 namespace Model {
16
17 /** Elementos simulables en una planta
18  *
19  *  Todo elemento que pueda ser simulado en la planta debe
20  *  descender de esta clase.
21  */
22 class PlantItem:public IConector {
23 public:
24         /** Constructor
25          *
26          *  \param _name Nombre único que identifica el objeto
27          */
28         PlantItem(const std::string &_name);
29         /// FIXME : agregar el nombre!
30         PlantItem(unsigned ins, unsigned outs);
31         /// Destructor
32         virtual ~PlantItem();
33
34         /** Ejecuta la fase de actualización.
35          *
36          *  Durante la fase de actualización los objetos se comunican entre
37          *  sí para determinar cual es el flujo que manejan en una iteración.
38          */
39         virtual void update(int dir=OUT) = 0;
40         
41         /** Actualiza el color de fluido */
42         virtual void update_color();
43         
44         /** Hace la simulación de esta iteración
45          *
46          *  Por simulacion se entiende que el modelo debe avisar a las vistas
47          *  que ya está actualizado para que el usuario vea los resultados.
48          */
49         virtual void simulate() = 0;
50
51         /// Setea el nuevo color del fluido
52         void set_color(const RGB &c) { fluid_color = c; }
53         /// Retorna el actual color del fluido
54         const RGB &get_color() { return fluid_color; }
55
56         /** Recive un mensage y lo procesa
57          *  
58          *  \see IConector::recieve_msg
59          */
60         virtual void recieve_msg(int msg, IConector *who, void *data);
61
62         /// Mensages manejados por los elementos de la planta
63         enum {
64                 MSG_QUERY_MAX_FLOW_OUT = IConector::MSG_LAST, ///< flujo maximo a la salida
65                 MSG_QUERY_MAX_FLOW_IN, ///< flujo maximo a la entrada
66                 MSG_RESPONSE_MAX_FLOW, ///< responde al mensage QUERY_MAX_FLOW. data == float
67                 MSG_QUERY_COLOR,
68                 MSG_RESPONSE_COLOR,
69                 MSG_LAST
70         };
71
72         /// Devuelve el nombre de la instancia
73         std::string get_name() const { return name; }
74         
75         /// Retorna el flujo actual que maneja el objeto.
76         float get_actual_flow() { return actual_flow; }
77
78         /** Genera la salida XML del estado del componente
79          *
80          *  Esta función genera el estado actual de un objeto utilizando
81          *  el formato XML
82          */
83         virtual void get_state_as_xml(std::stringstream &out); 
84 protected:
85         RGB fluid_color;
86         // es de solo lectura
87         std::string name;
88         bool updated, color_updated;
89         float actual_flow;
90 private:
91         // Hago que no se puedan copiar objetos ElementosPlanta
92         PlantItem(const PlantItem &):IConector(0,0) {}
93         PlantItem &operator = (const PlantItem &) { return (*this); }
94 };
95
96 }
97 }
98
99 #endif
100