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