diff --git a/include/adc_circuit.h b/include/adc_circuit.h index 2ee5c3df326f83a43a746355c03f09dbcedc6ca5..d343e5db0c72345ba41ed3172cd8546da6bd251b 100644 --- a/include/adc_circuit.h +++ b/include/adc_circuit.h @@ -18,7 +18,7 @@ class CAdcCircuit { private: - std::vector<CAdcRoad> roads;///< Variable to store an access each road data. + std::vector<CAdcRoad*> roads;///< Variable to store an access each road data. public: /** @@ -47,7 +47,7 @@ class CAdcCircuit * \param road The road to add. * */ - void add_road(CAdcRoad &road); + void add_road(CAdcRoad* &road); /** * \brief Function to print each road info. diff --git a/src/adc_circuit.cpp b/src/adc_circuit.cpp index 21efc1a23d93afab634f099a76be9127b042314f..d2466e00b383b3371aa53cd562254752d5ca9f7e 100644 --- a/src/adc_circuit.cpp +++ b/src/adc_circuit.cpp @@ -16,10 +16,12 @@ CAdcCircuit::~CAdcCircuit() void CAdcCircuit::clear_roads(void) { - std::vector<CAdcRoad>().swap(this->roads); + for (unsigned int i = 0; i < this->roads.size(); i++) + delete this->roads[i]; + std::vector<CAdcRoad*>().swap(this->roads); } -void CAdcCircuit::add_road(CAdcRoad &road) +void CAdcCircuit::add_road(CAdcRoad* &road) { this->roads.push_back(road); } @@ -27,20 +29,20 @@ void CAdcCircuit::add_road(CAdcRoad &road) void CAdcCircuit::debug(void) { for (unsigned int i = 0; i < this->roads.size(); i++) - this->roads[i].debug(); + this->roads[i]->debug(); } void CAdcCircuit::calculate_signals_pose(bool debug) { for (unsigned int i = 0; i < this->roads.size(); i++) - this->roads[i].calculate_signals_pose(debug); + this->roads[i]->calculate_signals_pose(debug); } void CAdcCircuit::get_signals(std::vector<CAdcSignals*> &signals) { std::vector<CAdcSignals*>().swap(signals); for (unsigned int i = 0; i < this->roads.size(); i++) - this->roads[i].get_signals(signals); + this->roads[i]->get_signals(signals); } void CAdcCircuit::generate_spwan_launch_file(std::string &filename) @@ -62,7 +64,7 @@ void CAdcCircuit::generate_spwan_launch_file(std::string &filename) //sign info for (unsigned int i = 0; i < this->roads.size(); i++) - this->roads[i].append_signs_spawn(filename); + this->roads[i]->append_signs_spawn(filename); //End oss.str(""); diff --git a/src/open_drive_format.cpp b/src/open_drive_format.cpp index 4664f5ec3807afff078f61b67f38d6ddf8e4acbe..5d37629ce91ee3e62dabef4397639d35726bfc00 100644 --- a/src/open_drive_format.cpp +++ b/src/open_drive_format.cpp @@ -39,7 +39,7 @@ void COpenDriveFormat::load(std::string &filename, bool debug) ss >> road_id; double road_length = road_it->length().get(); std::string name = road_it->name().get(); - CAdcRoad road(road_id, road_length, name); + CAdcRoad *road = new CAdcRoad(road_id, road_length, name); ///////////////////// link atributes @@ -54,20 +54,20 @@ void COpenDriveFormat::load(std::string &filename, bool debug) if (geo_it->line().present()) { CAdcGeoLine *line = new CAdcGeoLine(min_s, max_s, x, y, heading); - road.add_geometry(line); + road->add_geometry(line); } else if (geo_it->spiral().present()) { double curv_start = (geo_it->spiral().get().curvStart().present() ? geo_it->spiral().get().curvStart().get() : 0.0); double curv_end = (geo_it->spiral().get().curvEnd().present() ? geo_it->spiral().get().curvEnd().get() : 0.0); CAdcGeoSpiral *spi = new CAdcGeoSpiral(min_s, max_s, x, y, heading, curv_start, curv_end); - road.add_geometry(spi); + road->add_geometry(spi); } else if (geo_it->arc().present()) { double curvature = (geo_it->arc().get().curvature().present() ? geo_it->arc().get().curvature().get() : 0.0); CAdcGeoArc *arc = new CAdcGeoArc(min_s, max_s, x, y, heading, curvature); - road.add_geometry(arc); + road->add_geometry(arc); } else if (geo_it->poly3().present()) { @@ -77,7 +77,7 @@ void COpenDriveFormat::load(std::string &filename, bool debug) param.c = (geo_it->poly3().get().c().present() ? geo_it->poly3().get().c().get() : 0.0); param.d = (geo_it->poly3().get().d().present() ? geo_it->poly3().get().d().get() : 0.0); CAdcGeoPoly3 *poly3 = new CAdcGeoPoly3(min_s, max_s, x, y, heading, param); - road.add_geometry(poly3); + road->add_geometry(poly3); } else if (geo_it->paramPoly3().present()) { @@ -95,7 +95,7 @@ void COpenDriveFormat::load(std::string &filename, bool debug) if (geo_it->paramPoly3().get().pRange().present() && geo_it->paramPoly3().get().pRange().get() == pRange::arcLength) normalized = false; CAdcGeoParamPoly3 *parampoly3 = new CAdcGeoParamPoly3(min_s, max_s, x, y, heading, u_param, v_param, normalized); - road.add_geometry(parampoly3); + road->add_geometry(parampoly3); } } @@ -118,7 +118,7 @@ void COpenDriveFormat::load(std::string &filename, bool debug) if (signal_it->orientation().present() && signal_it->orientation().get() == orientation::cxx_1) reverse = true; CAdcSignals *sign = new CAdcSignals(id, s, t, heading, type, sub_type, value, text, reverse); - road.add_signal(sign); + road->add_signal(sign); } } this->adc_circuit.add_road(road);