Práctica Final. Rutas Aéreas.
rutaaerea.cpp
Ir a la documentación de este archivo.
1 
49 #include "almacenRutas.h"
50 #include "paises.h"
51 #include "imagen.h"
52 #include <fstream>
53 
54 #define RESULT_PATH "./output/"
55 
56 int main (int argc, char* argv[]) {
57  if (argc!=7){
58  cout<<"Los parametros son:"<<endl;
59  cout<<"1 - Fichero con la informacion de los paises"<<endl;
60  cout<<"2 - Nombre de la imagen con el mapa del mundo"<<endl;
61  cout<<"3 - Directorio con las banderas"<<endl;
62  cout<<"4 - Fichero con el almacen de rutas"<<endl;
63  cout<<"5 - Nombre de la imagen con el avion"<<endl;
64  cout<<"6 - Nombre de la imagen de la mascara del avion"<<endl;
65 
66  cout << "Uso: " << argv[0] << " <fichero_paises> <mapa_mundo> <dir_banderas> <almacen_rutas> <avion> <mascara_avion>" << endl;
67 
68  return -1;
69  }
70 
71  ifstream file;
72  file.open(argv[1]);
73  Paises paises; // Leemos los paises
74  if (file)
75  file >> paises;
76  else {
77  cout << "Error de apertura del fichero" << argv[1] << endl;
78  return -1;
79  }
80  file.close();
81 
82 
83  Imagen mapa;
84  mapa.LeerImagen(argv[2]);
85 
86  Imagen avion;
87  avion.LeerImagen(argv[5], argv[6]); // Leemos con la mscara
88 
89 
90  AlmacenRutas Ar; // Leemos el almacen de rutas
91  file.open (argv[4]);
92  if (file){
93  file >> Ar;
94  }
95  else {
96  cout << "Error de apertura del fichero " << argv[4] << endl;
97  return -1;
98  }
99  file.close();
100 
101  // Muestra todas las rutas disponibles
102  cout<<"Las rutas: "<<endl;
103  cout << Ar << endl;
104  cout<<"Introduzca el codigo de una ruta"<<endl;
105  string id_ruta; // Ruta
106  cin>>id_ruta;
107  // Comprobacin de que "id_ruta" es una ruta valida
108  if (!Ar.existeRuta(id_ruta)) {
109  cout << "La ruta no existe" << endl;
110  return 1;
111  }
112  Ruta route=Ar.getRuta(id_ruta);
113 
114  // Ya tenemos la ruta, ahora vamos a mostrarla
115  string dir_banderas = argv[3];
116 
117  Ruta::iterator it_r=route.begin();
118  Punto point1, point2;
119  pair<int,int> coord_point1, coord_point2, coord_point_midpoint;
120  double orientation_angle;
121  Imagen avion_rotado;
122  Pais pais;
123  Imagen bandera;
124 
125  while (it_r != route.end()) {
126  point1=*it_r;
127  coord_point1 = point1.coordenadasMapa(mapa.getColumnas(), mapa.getFilas());
128 
129  // Extraigo pas
130  Paises::iterator pos_pais_point1 = paises.find(point1);
131  if (pos_pais_point1 == paises.end()) {
132  cout << "No pudo encontrarse el pais que tiene como punto " << point1 << endl;
133  exit(-1);
134  }
135  pais = *(paises.find(point1));
136 
137  // Pongo bandera en el mapa
138  string nombre_bandera = dir_banderas + "/" + pais.getBandera();
139  bandera.LeerImagen(nombre_bandera.c_str());
140  Tipo_Pegado tp_bl = BLENDING;
141  mapa.PutImagen(coord_point1.first, coord_point1.second, bandera, tp_bl);
142  // Imprimo por pantalla el nombre del pas
143  cout << pais.getNombre() << " ";
144 
145  // Leo siguiente punto
146  ++it_r;
147  if (it_r != route.end()) {
148  point2=*it_r;
149  coord_point2 = point2.coordenadasMapa(mapa.getColumnas(), mapa.getFilas());
150  coord_point_midpoint = point1.punto_medio_en_mapa(point2, mapa.getColumnas(), mapa.getFilas());
151  orientation_angle = point1.angulo_en_mapa(point2, mapa.getColumnas(), mapa.getFilas());
152 
153  // Pego los 3 aviones correspondientes
154  Tipo_Pegado tp_op = OPACO;
155  avion_rotado = avion.Rota(orientation_angle);
156  mapa.PutImagen(coord_point_midpoint.first, coord_point_midpoint.second, avion_rotado, tp_op);
157  mapa.PutImagen(coord_point1.first, coord_point1.second, avion_rotado, tp_op);
158  mapa.PutImagen(coord_point2.first, coord_point2.second, avion_rotado, tp_op);
159  } // if (it_r != route.end())
160  } // while (it_r != route.end())
161 
162  string result_path = RESULT_PATH + route.getCodigo() + string("_Mapa.ppm");
163  mapa.EscribirImagen(result_path.c_str());
164 
165 
166  cout << endl << endl;
167  return 0;
168 }
Fichero cabecera del TDA AlmacenRutas.
TDA AlmacenRutas.
Definition: almacenRutas.h:28
bool existeRuta(string codigo)
Método que comprueba si existe una ruta en el almacén.
const Ruta & getRuta(string codigo)
Método que devuelve la ruta correspondiente a un código.
TDA Imagen.
Definition: imagen.h:65
void EscribirImagen(const char img_path[]) const
Método que escribe una imagen en disco en el archivo dado por nombre.
Definition: imagen.cpp:127
void LeerImagen(const char img_path[], const string &nombre_mascara="")
Método que lee una imagen del disco desde el archivo dado por nombre.
Definition: imagen.cpp:85
int getColumnas() const
Método que informa del número de columnas de la imagen.
Definition: imagen.h:150
Imagen Rota(double rads) const
Método que rota una imagen.
Definition: imagen.cpp:199
void PutImagen(int i, int j, const Imagen &img, Tipo_Pegado tp=OPACO)
Método que pega una imagen sobre otra.
Definition: imagen.cpp:172
int getFilas() const
Método que informa del número de filas de la imagen.
Definition: imagen.h:144
TDA Pais.
Definition: pais.h:23
string getBandera() const
Devuelve la ubicación de la bandera del país en el sistema de archivos.
Definition: pais.cpp:22
string getNombre() const
Devuelve el nombre del país.
Definition: pais.cpp:18
Clase iterator.
Definition: paises.h:76
TDA Paises.
Definition: paises.h:23
TDA Punto.
Definition: punto.h:23
pair< int, int > punto_medio_en_mapa(const Punto &p, int num_columnas, int num_filas) const
Punto medio entre dos puntos.
Definition: punto.cpp:58
double angulo_en_mapa(const Punto &p, int num_columnas, int num_filas) const
Ángulo de la recta que une dos puntos.
Definition: punto.cpp:64
pair< int, int > coordenadasMapa(int num_columnas, int num_filas) const
Pasa de coordenadas geográficas a coordenadas en el mapa.
Definition: punto.cpp:51
Clase iterador de la clase ruta.
Definition: ruta.h:93
TDA Ruta.
Definition: ruta.h:26
iterator begin()
Devuelve un iterador al principio de la lista de puntos.
Definition: ruta.h:165
string getCodigo() const
Método que devuelve el codigo de la ruta.
Definition: ruta.cpp:26
iterator end()
Devuelve un iterador al final de la lista de puntos.
Definition: ruta.h:175
Fichero cabecera para el TDA Imagen.
Tipo_Pegado
Enumerado para representar el tipo de pegado de una imagen sobre otra.
Definition: imagen.h:54
Fichero cabecera del TDA Paises.