3 #ifndef _ELEMENTO_PLANTA_H_
4 #define _ELEMENTO_PLANTA_H_
11 #define INFINITO 99999999
17 /** Elementos simulables en una planta
19 * Todo elemento que pueda ser simulado en la planta debe
20 * descender de esta clase.
22 class PlantItem:public IConector {
26 * \param _name Nombre único que identifica el objeto
28 PlantItem(const std::string &_name);
29 PlantItem(unsigned ins, unsigned outs);
33 /** Ejecuta la fase de actualización.
35 * Durante la fase de actualización los objetos se comunican entre
36 * sí para determinar cual es el flujo que manejan en una iteración.
38 virtual void update(int dir=OUT) = 0;
40 /** Actualiza el color de fluido */
41 virtual void update_color();
43 /** Hace la simulación de esta iteración
45 * Por simulacion se entiende que el modelo debe avisar a las vistas
46 * que ya está actualizado para que el usuario vea los resultados.
48 virtual void simulate() = 0;
50 /// Setea el nuevo color del fluido
51 void set_color(const RGB &c) { fluid_color = c; }
52 /// Retorna el actual color del fluido
53 const RGB &get_color() { return fluid_color; }
55 /** Recive un mensage y lo procesa
57 * \see IConector::recieve_msg
59 virtual void recieve_msg(int msg, IConector *who, void *data);
61 /// Mensages manejados por los elementos de la planta
63 MSG_QUERY_MAX_FLOW_OUT = IConector::MSG_LAST, ///< flujo maximo a la salida
64 MSG_QUERY_MAX_FLOW_IN, ///< flujo maximo a la entrada
65 MSG_RESPONSE_MAX_FLOW, ///< responde al mensage QUERY_MAX_FLOW. data == float
66 MSG_QUERY_COLOR, ///< Consulta por el color del elemento adyacente
67 MSG_RESPONSE_COLOR, ///< Recibe una respuesta sobre color
71 /// Devuelve el nombre de la instancia
72 std::string get_name() const { return name; }
74 /// Retorna el flujo actual que maneja el objeto.
75 float get_actual_flow() { return actual_flow; }
77 /** Genera la salida XML del estado del componente
79 * Esta función genera el estado actual de un objeto utilizando
82 virtual void get_state_as_xml(std::stringstream &out);
87 bool updated, color_updated;
90 // Hago que no se puedan copiar objetos ElementosPlanta
91 PlantItem(const PlantItem &):IConector(0,0) {}
92 PlantItem &operator = (const PlantItem &) { return (*this); }