diff --git a/include/adc_circuit.h b/include/adc_circuit.h index d6eafd222b9b68802bb9f001c393df9072bc40ef..2ee5c3df326f83a43a746355c03f09dbcedc6ca5 100644 --- a/include/adc_circuit.h +++ b/include/adc_circuit.h @@ -74,7 +74,7 @@ class CAdcCircuit * * \param signals Variable to store the information. */ - void get_signals(std::vector<CAdcSignals> &signals); + void get_signals(std::vector<CAdcSignals*> &signals); /** * \brief Function to generate a .launch to spwan all diff --git a/include/adc_road.h b/include/adc_road.h index 74a2652e2dad38799feb254e297e351e59c2c313..9c1dc9a79dae728f96dcbaa4e9b5657a5fca4f20 100644 --- a/include/adc_road.h +++ b/include/adc_road.h @@ -22,7 +22,7 @@ class CAdcRoad std::string name; ///< Road's name. double length;///< Road's length. std::vector<CAdcGeometry*> geometries;///< Road's geometries. - std::vector<CAdcSignals> signals; ///< Road's signals. + std::vector<CAdcSignals*> signals; ///< Road's signals. public: /** @@ -87,7 +87,7 @@ class CAdcRoad * \param sign The road's sign to add. * */ - void add_signal(CAdcSignals sign); + void add_signal(CAdcSignals* sign); /** * \brief Function to set road's id. @@ -146,7 +146,7 @@ class CAdcRoad * * \param signals Variable to store the information. */ - void get_signals(std::vector<CAdcSignals> &signals); + void get_signals(std::vector<CAdcSignals*> &signals); /** * \brief Function to append each sign spwan lines on a .launch file. diff --git a/include/open_drive_format.h b/include/open_drive_format.h index fb8c0a9ffedc94b810c54788d16a8e819c9ec01d..9ebf5adb3e28fb58161ce18c62525bb3aaaf2e21 100644 --- a/include/open_drive_format.h +++ b/include/open_drive_format.h @@ -53,7 +53,7 @@ class COpenDriveFormat * \param signals Variable to store the information. * */ - void get_signals(std::vector<CAdcSignals> &signals); + void get_signals(std::vector<CAdcSignals*> &signals); /** * \brief Function to generate a .launch to spwan all diff --git a/src/adc_circuit.cpp b/src/adc_circuit.cpp index 02054fcea5f0f5a7927f160cd910ba394332f024..21efc1a23d93afab634f099a76be9127b042314f 100644 --- a/src/adc_circuit.cpp +++ b/src/adc_circuit.cpp @@ -36,9 +36,9 @@ void CAdcCircuit::calculate_signals_pose(bool debug) this->roads[i].calculate_signals_pose(debug); } -void CAdcCircuit::get_signals(std::vector<CAdcSignals> &signals) +void CAdcCircuit::get_signals(std::vector<CAdcSignals*> &signals) { - std::vector<CAdcSignals>().swap(signals); + std::vector<CAdcSignals*>().swap(signals); for (unsigned int i = 0; i < this->roads.size(); i++) this->roads[i].get_signals(signals); } diff --git a/src/adc_road.cpp b/src/adc_road.cpp index 65639a1142e01b1db79632914db5491587e4fe10..db5ba8eb0d746c25a28b90dd19cd6c29a1efcbd8 100644 --- a/src/adc_road.cpp +++ b/src/adc_road.cpp @@ -22,7 +22,8 @@ CAdcRoad::CAdcRoad(const CAdcRoad &road) this->length = road.length; this->name = road.name; clear_signals(); - this->signals = road.signals; + for (unsigned int i = 0; i < road.signals.size(); i++) + this->signals.push_back(new CAdcSignals(*road.signals[i])); clear_geometries(); for (unsigned int i = 0; i < road.geometries.size(); i++) this->geometries.push_back(road.geometries[i]->clone()); @@ -42,8 +43,12 @@ void CAdcRoad::operator = (const CAdcRoad &road) this->id = road.id; this->length = road.length; this->name = road.name; - this->signals = road.signals; - this->geometries = road.geometries; + clear_signals(); + for (unsigned int i = 0; i < road.signals.size(); i++) + this->signals.push_back(new CAdcSignals(*road.signals[i])); + clear_geometries(); + for (unsigned int i = 0; i < road.geometries.size(); i++) + this->geometries.push_back(road.geometries[i]->clone()); } void CAdcRoad::clear_geometries(void) @@ -60,10 +65,12 @@ void CAdcRoad::add_geometry(CAdcGeometry* geometry) void CAdcRoad::clear_signals(void) { - std::vector<CAdcSignals>().swap(this->signals); + for (unsigned int i = 0; i < this->signals.size(); i++) + delete this->signals[i]; + std::vector<CAdcSignals*>().swap(this->signals); } -void CAdcRoad::add_signal(CAdcSignals sign) +void CAdcRoad::add_signal(CAdcSignals* sign) { this->signals.push_back(sign); } @@ -94,7 +101,7 @@ void CAdcRoad::debug(void) for (unsigned int i = 0; i < this->geometries.size(); i++) this->geometries[i]->debug(); for (unsigned int i = 0; i < this->signals.size(); i++) - this->signals[i].debug(); + this->signals[i]->debug(); } void CAdcRoad::calculate_signals_pose(bool debug) @@ -102,25 +109,25 @@ void CAdcRoad::calculate_signals_pose(bool debug) double s, t, heading, x, y, yaw; for (unsigned int i = 0; i < this->signals.size(); i++) { - this->signals[i].get_pose(s, t, heading); + this->signals[i]->get_pose(s, t, heading); for (unsigned int j = 0; j < this->geometries.size(); j++) { if (this->geometries[j]->on_range(s)) { this->geometries[j]->get_world_pose(s, t, heading, x, y, yaw); - this->signals[i].set_world_pose(x, y, yaw); + this->signals[i]->set_world_pose(x, y, yaw); break; } } if (debug) { std::cout << "Road " << this->name << " id = " << this->id << "; length = " << this->length << std::endl; - this->signals[i].debug(debug); + this->signals[i]->debug(debug); } } } -void CAdcRoad::get_signals(std::vector<CAdcSignals> &signals) +void CAdcRoad::get_signals(std::vector<CAdcSignals*> &signals) { for (unsigned int i = 0; i < this->signals.size(); i++) signals.push_back(this->signals[i]); @@ -129,5 +136,5 @@ void CAdcRoad::get_signals(std::vector<CAdcSignals> &signals) void CAdcRoad::append_signs_spawn(std::string &filename) { for (unsigned int i = 0; i < this->signals.size(); i++) - this->signals[i].append_sign_spawn(filename); + this->signals[i]->append_sign_spawn(filename); } \ No newline at end of file diff --git a/src/examples/open_drive_format_test.cpp b/src/examples/open_drive_format_test.cpp index 704c1058db4d7a2c7e5853f836359823c3e93eba..2cde0f8196cdab07f7f806f715a5c329654e4ae0 100644 --- a/src/examples/open_drive_format_test.cpp +++ b/src/examples/open_drive_format_test.cpp @@ -15,10 +15,10 @@ int main(int argc, char *argv[]) open_drive_format.load(xml_file, false); open_drive_format.calculate_signals_pose(false); - std::vector<CAdcSignals> signals; + std::vector<CAdcSignals*> signals; // open_drive_format.get_signals(signals); // for (unsigned int i = 0; i < signals.size(); i++) - // signals[i].debug(true); + // signals[i]->debug(true); open_drive_format.generate_spwan_launch_file(launch_file); } catch (CException &e) diff --git a/src/open_drive_format.cpp b/src/open_drive_format.cpp index 2e28718ec5fc77e9d13fd578d15857077fc4dcfa..4664f5ec3807afff078f61b67f38d6ddf8e4acbe 100644 --- a/src/open_drive_format.cpp +++ b/src/open_drive_format.cpp @@ -117,7 +117,7 @@ void COpenDriveFormat::load(std::string &filename, bool debug) bool reverse = false; if (signal_it->orientation().present() && signal_it->orientation().get() == orientation::cxx_1) reverse = true; - CAdcSignals sign(id, s, t, heading, type, sub_type, value, text, reverse); + CAdcSignals *sign = new CAdcSignals(id, s, t, heading, type, sub_type, value, text, reverse); road.add_signal(sign); } } @@ -145,7 +145,7 @@ void COpenDriveFormat::calculate_signals_pose(bool debug) std::cout << "Calculating world signs poses done" << std::endl; } -void COpenDriveFormat::get_signals(std::vector<CAdcSignals> &signals) +void COpenDriveFormat::get_signals(std::vector<CAdcSignals*> &signals) { this->adc_circuit.get_signals(signals); }