Olivia_v2017/Olivia/olv_limp.h

110 lines
5.8 KiB
C++

#pragma once
#ifdef OLIVIA_COMPILA
/**
* @file olv_limp.h
* Archivo de definiciones y variables de la utilidad de limpieza viaria del programa Olivia.
*/
#include "olv_limp_def.h"
#include "olv_geom.h"
#include "mapmatrix.h"
#include "CartoBase.h"
class COlivia;
class Colv_limp_thr;
class Colv_limp_thr_aux;
class Colv_tasks;
class Csock_svThread;
class Colv_limp_thr;
struct Secu_amb;
struct Djkt_ang_ady;
struct Info_conjs;
struct Campos_dbf;
struct Info_tramos;
//////////////////////////////////////////////////
/**
* Clase de definiciones y variables de la utilidad de limpieza viaria del programa Olivia.
*/
class Colv_limp
{
public:
//*************************************************************************************
//Variables
bool socCreado;
char nomb_tto[OLV_SHP_SZ_CAMP_CHAR]; ///<Nombre del tratamiento para escribir en el shp
int pp; ///<Entero para pruebas
int tipo_ambit; ///<Indica si los ámbitos son lineales o puntuales
int n_amb; ///<Número de entidades de ámbitos, la cuenta empieza en 0 porque es la primera capa que se carga
int n_nw; ///<Número de entidades de la red navegable, la cuenta empieza en ini_nw porque no es la primera que se carga
int uds_tto; ///<Unidades de tratamiento: m/h, m2/h, min
int npts_ctrl; ///<Número de puntos de control
int nsec; ///<Número de sectores
int nsec_act; ///<Número de sectores activos, siempre <= que nsec
int nsec_orig; ///<Número de sectores original, se usa por si se corrige el num de sectores porque haya alguno vacío
int res_circ; ///<Restricción de circulación
int lateral; ///<Lateralidad, 0 o -1 ambos, 1 derecha, 2 izda
int tipo_shp_viaj; ///<Indica la forma en que se guardan los viajes según la enum TipoViajes
int t_sal; ///<Tiempo de salida/llegada a la instalación, en segundos
int nod_instal; ///<Nodos en la red de la instalación
int nod_plant; ///<Nodos en la red de la planta donde va a descargar
BOOL igno_ais; ///<Indica si ignorar aislados
BOOL barr_mix; ///<Indica si es barrido mixto
BOOL usa_secuen;
BOOL revisa_elev;
double f_trafic; ///<Factor de reducción de la velocidad en calles por el tráfico en tanto por 1
double calc_nsec; ///<Indica si el número de sectores es calculado (almacena el coste del sector) o impuesto (0)
double margen_sect; ///<Margen de diferencia entre sectores, en tanto por uno
double t_ini; ///<Tiempo inicial en el que comienza la ruta, en segundos, en base 24 h
double t_tto; ///<Tiempo de tratamiento, en minutos
double v_despl; ///<Velocidad de desplazamiento, en km/h. Si es 0, es determinada por la vía.
double t_conv; ///<Tiempo de trabajo por convenio, en segundos
double t_desc; ///<Tiempo de descanso de personal, en segundos
double t_despl; ///<Tiempo de desplazamiento, en segundos, sólo ida, si es ida y vuelta, x2
double t_carg; ///<Tiempo de carga y descarga, en segundos
double ancho_via; ///<Ancho medio de la vía
double coor_instal[3]; ///<Coordenadas de la instalación
double ang_lim; ///<Ángulo límite de giro, en radianes
double anchos_def[OLV_ANCH_DEF_N]; ///<Anchos por defecto de las entidades de limpieza, los lee del ini
double DESV_MAX; ///<Desviación máxima entre sectores para dejar de igualar sectores, en porcentaje
double DESV_MAX_ABS; ///<Desviación máxima para dejar de igualar, en segundos
CmapMatInt tip_conj; ///<Matriz de NconjxNconj con 1 si es nw entre conjunciones. La rellena el thread
COlivia *olv; ///<Instancia general de la utilidad
Colv_limp_thr *thr_limp; ///<Instancia del thread de limpieza, que hace las operaciones
Colv_tasks *olv_tasks;
Csock_svThread *soc;
Matrix2d<float> cost_amb; ///<Matriz de NambxNamb con los costes (seg) entre ámbitos. La rellena el thread
Cdijkstra_arch arch_dj; ///<Archivo de nodos dj
CmapMatFloat cost_conj; ///<Matriz de NconjxNconj con los costes (seg) entre conjunciones. La rellena el thread
Secu_amb *ord_sec_plan; ///<Array con la información de la secuencia y distancias de la planta a los ámbitos
Secu_amb *ord_sec; ///<Array de Namb con la información de la secuencia y distancias entre ámbitos
Djkt_ang_ady *ang_conj; ///<Matriz de Nconj, con los ángulos (º) de giro entre conjunciones. La rellena el thread
Campos_dbf camps; ///<Campos de la dbf a leer, se rellenan en constructor o con info de socket
Info_sec *sec; ///<Array de Nsec con la info de cada sector. Lo rellena el thread
Info_amb_sec *amb_sec; ///<Array de Namb con la info de los ámbitos ya asigandos a un sector. Lo rellena el thread
Info_conjs conjs; ///<Conjunciones, contiene el array de conjunciones de la red y su tamaño
Info_planif *plan; ///<Array de planificaciones, una por cada sector
Info_inw_dmin *inww_amb; ///<Array de Namb que almacena la carretera más cercana al punto inicial y al final (Nambx2)
///<del ámbito si es lineal o la más cercana si es puntual. La rellena el thread.
CartoBase carto;
std::map<int,Info_aso2> iaso; ///<Map con mismos elementos que entidades la carto, con la información asociada
std::vector<Info_tramos> *tramos;
std::vector<Info_aso_nw_elev> iaso_elev; ///<Map con mismos elementos que la nw, con la info de elevación de los nodos
double mima[N_COOR_MIMA]; ///<Coordenadas de las cuatro esquinas de la red
//*************************************************************************************
//Funciones
Colv_limp(COlivia *olv);
virtual ~Colv_limp(void);
////////////////
void libera_memo_secto();
void prueba();
virtual BOOL inicia();
virtual int pon_config(char *config);
virtual void cancela();
virtual void rellena_campos();
virtual void dame_cost(double ltot, int ia, float *cost, float *cost2);
double dame_ancho(char *observ, char *tipo);
BOOL rellena_campos_ini(char *path);
BOOL guarda_campos_ini(char *path);
};
#endif