From 54819c613cd21ed2be228f6e7e682364fbf324dd Mon Sep 17 00:00:00 2001 From: Dmitry Krivoruchko <144147209+UmbrellaLeaf5@users.noreply.github.com> Date: Thu, 18 Apr 2024 01:09:39 +0300 Subject: [PATCH 1/3] rewrite data_manager to using vector # and fix TrappyLine changing problem --- data_tools/data_manager/data_manager.cpp | 187 +++++++++++++----- data_tools/data_manager/data_manager.h | 116 +++++------ data_tools/plot_area/plot_area.cpp | 11 +- .../tables_connection/tables_connection.cpp | 9 +- main/mainwindow_connections.cpp | 18 +- 5 files changed, 208 insertions(+), 133 deletions(-) diff --git a/data_tools/data_manager/data_manager.cpp b/data_tools/data_manager/data_manager.cpp index fe5e832..235e00b 100644 --- a/data_tools/data_manager/data_manager.cpp +++ b/data_tools/data_manager/data_manager.cpp @@ -37,144 +37,227 @@ void DataManager::Clear() { // ---------------------- Target methods ---------------------- -void DataManager::Add(std::initializer_list new_targets) { - targets_.insert(targets_.end(), new_targets.begin(), new_targets.end()); +void DataManager::Add(std::initializer_list new_targets) { + for (const auto& target : new_targets) Add(target); } void DataManager::Add(std::initializer_list new_targets) { - targets_.insert(targets_.end(), new_targets.begin(), new_targets.end()); + for (const auto& target : new_targets) Add(target); } -void DataManager::Add(std::vector new_targets) { - targets_.insert(targets_.end(), new_targets.begin(), new_targets.end()); +void DataManager::Add(std::vector new_targets) { + for (const auto& target : new_targets) Add(target); } void DataManager::Add(std::vector new_targets) { - targets_.insert(targets_.end(), new_targets.begin(), new_targets.end()); + for (const auto& target : new_targets) Add(target); } -void DataManager::Set(std::initializer_list targets) { - targets_ = {targets.begin(), targets.end()}; +void DataManager::Set(std::initializer_list targets) { + targets_.clear(); + for (const auto& target : targets) Add(target); } void DataManager::Set(std::initializer_list targets) { - targets_ = {targets.begin(), targets.end()}; + targets_.clear(); + for (const auto& target : targets) Add(target); } -void DataManager::Set(std::vector targets) { targets_ = targets; } +void DataManager::Set(std::vector targets) { + targets_.clear(); + for (const auto& target : targets) Add(target); +} void DataManager::Set(std::vector targets) { targets_.clear(); - for (const auto& target : targets) targets_.push_back(gui::Target(target)); + for (const auto& target : targets) Add(target); +} + +std::vector DataManager::GetTargetsPtrs() { + auto res = std::vector(); + for (auto& target_ptr_ : targets_) { + res.push_back(target_ptr_.get()); + } + + return res; +} + +std::vector DataManager::GetTargets() const { + auto res = std::vector(); + for (auto& target_ptr_ : targets_) { + res.push_back(*target_ptr_); + } + + return res; } // ---------------------- Hill methods ---------------------- -void DataManager::Add(std::initializer_list new_hills) { - hills_.insert(hills_.end(), new_hills.begin(), new_hills.end()); +void DataManager::Add(std::initializer_list new_hills) { + for (const auto& hill : new_hills) Add(hill); } void DataManager::Add(std::initializer_list new_hills) { - hills_.insert(hills_.end(), new_hills.begin(), new_hills.end()); + for (const auto& hill : new_hills) Add(hill); } -void DataManager::Add(std::vector new_hills) { - hills_.insert(hills_.end(), new_hills.begin(), new_hills.end()); +void DataManager::Add(std::vector new_hills) { + for (const auto& hill : new_hills) Add(hill); } void DataManager::Add(std::vector new_hills) { - hills_.insert(hills_.end(), new_hills.begin(), new_hills.end()); + for (const auto& hill : new_hills) Add(hill); } -void DataManager::Set(std::initializer_list hills) { - hills_ = {hills.begin(), hills.end()}; +void DataManager::Set(std::initializer_list hills) { + hills_.clear(); + for (const auto& hill : hills) Add(hill); } void DataManager::Set(std::initializer_list hills) { - hills_ = {hills.begin(), hills.end()}; + hills_.clear(); + for (const auto& hill : hills) Add(hill); } -void DataManager::Set(std::vector hills) { hills_ = hills; } +void DataManager::Set(std::vector hills) { + hills_.clear(); + for (const auto& hill : hills) Add(hill); +} void DataManager::Set(std::vector hills) { hills_.clear(); - for (const auto& hill : hills) hills_.push_back(gui::Hill(hill)); + for (const auto& hill : hills) Add(hill); +} + +std::vector DataManager::GetHillsPtrs() { + auto res = std::vector(); + for (auto& hill_ptr_ : hills_) { + res.push_back(hill_ptr_.get()); + } + + return res; +} + +std::vector DataManager::GetHills() const { + auto res = std::vector(); + for (auto& hill_ptr_ : hills_) { + res.push_back(*hill_ptr_); + } + + return res; } // ---------------------- TrappyCircle methods ----------------------s -void DataManager::Add(std::initializer_list new_tr_circles) { - tr_circles_.insert(tr_circles_.end(), new_tr_circles.begin(), - new_tr_circles.end()); +void DataManager::Add( + std::initializer_list new_tr_circles) { + for (const auto& tr_circle : new_tr_circles) Add(tr_circle); } void DataManager::Add(std::initializer_list new_tr_circles) { - tr_circles_.insert(tr_circles_.end(), new_tr_circles.begin(), - new_tr_circles.end()); + for (const auto& tr_circle : new_tr_circles) Add(tr_circle); } -void DataManager::Add(std::vector new_tr_circles) { - tr_circles_.insert(tr_circles_.end(), new_tr_circles.begin(), - new_tr_circles.end()); +void DataManager::Add(std::vector new_tr_circles) { + for (const auto& tr_circle : new_tr_circles) Add(tr_circle); } void DataManager::Add(std::vector new_tr_circles) { - tr_circles_.insert(tr_circles_.end(), new_tr_circles.begin(), - new_tr_circles.end()); + for (const auto& tr_circle : new_tr_circles) Add(tr_circle); } -void DataManager::Set(std::initializer_list tr_circles) { - tr_circles_ = {tr_circles.begin(), tr_circles.end()}; +void DataManager::Set(std::initializer_list tr_circles) { + tr_circles_.clear(); + for (const auto& tr_circle : tr_circles) Add(tr_circle); } void DataManager::Set(std::initializer_list tr_circles) { - tr_circles_ = {tr_circles.begin(), tr_circles.end()}; + tr_circles_.clear(); + for (const auto& tr_circle : tr_circles) Add(tr_circle); } -void DataManager::Set(std::vector tr_circles) { - tr_circles_ = tr_circles; +void DataManager::Set(std::vector tr_circles) { + tr_circles_.clear(); + for (const auto& tr_circle : tr_circles) Add(tr_circle); } void DataManager::Set(std::vector tr_circles) { tr_circles_.clear(); - for (const auto& tr_circle : tr_circles) - tr_circles_.push_back(gui::TrappyCircle(tr_circle)); + for (const auto& tr_circle : tr_circles) Add(tr_circle); +} + +std::vector DataManager::GetTrappyCirclesPtrs() { + auto res = std::vector(); + for (auto& tr_circle_ptr : tr_circles_) { + res.push_back(tr_circle_ptr.get()); + } + + return res; +} + +std::vector DataManager::GetTrappyCircles() const { + auto res = std::vector(); + for (auto& tr_circle_ptr : tr_circles_) { + res.push_back(*tr_circle_ptr); + } + + return res; } // ---------------------- TrappyLine methods ---------------------- -void DataManager::Add(std::initializer_list new_tr_lines) { - tr_lines_.insert(tr_lines_.end(), new_tr_lines.begin(), new_tr_lines.end()); +void DataManager::Add(std::initializer_list new_tr_lines) { + for (const auto& tr_line : new_tr_lines) Add(tr_line); } void DataManager::Add(std::initializer_list new_tr_lines) { - tr_lines_.insert(tr_lines_.end(), new_tr_lines.begin(), new_tr_lines.end()); + for (const auto& tr_line : new_tr_lines) Add(tr_line); } -void DataManager::Add(std::vector new_tr_lines) { - tr_lines_.insert(tr_lines_.end(), new_tr_lines.begin(), new_tr_lines.end()); +void DataManager::Add(std::vector new_tr_lines) { + for (const auto& tr_line : new_tr_lines) Add(tr_line); } void DataManager::Add(std::vector new_tr_lines) { - tr_lines_.insert(tr_lines_.end(), new_tr_lines.begin(), new_tr_lines.end()); + for (const auto& tr_line : new_tr_lines) Add(tr_line); } -void DataManager::Set(std::initializer_list tr_lines) { - tr_lines_ = {tr_lines.begin(), tr_lines.end()}; +void DataManager::Set(std::initializer_list tr_lines) { + tr_lines_.clear(); + for (const auto& tr_line : tr_lines) Add(tr_line); } void DataManager::Set(std::initializer_list tr_lines) { - tr_lines_ = {tr_lines.begin(), tr_lines.end()}; + tr_lines_.clear(); + for (const auto& tr_line : tr_lines) Add(tr_line); } -void DataManager::Set(std::vector tr_lines) { - tr_lines_ = tr_lines; +void DataManager::Set(std::vector tr_lines) { + tr_lines_.clear(); + for (const auto& tr_line : tr_lines) Add(tr_line); } void DataManager::Set(std::vector tr_lines) { tr_lines_.clear(); - for (const auto& tr_line : tr_lines) - tr_lines_.push_back(gui::TrappyLine(tr_line)); + for (const auto& tr_line : tr_lines) Add(tr_line); +} + +std::vector DataManager::GetTrappyLinesPtrs() { + auto res = std::vector(); + for (auto& tr_line_ptr : tr_lines_) { + res.push_back(tr_line_ptr.get()); + } + + return res; +} + +std::vector DataManager::GetTrappyLines() const { + auto res = std::vector(); + for (auto& tr_line_ptr : tr_lines_) { + res.push_back(*tr_line_ptr); + } + + return res; } } // namespace data_tools diff --git a/data_tools/data_manager/data_manager.h b/data_tools/data_manager/data_manager.h index 5b3f30e..99a35ee 100644 --- a/data_tools/data_manager/data_manager.h +++ b/data_tools/data_manager/data_manager.h @@ -25,15 +25,15 @@ class DataManager { // ---------------------- Target methods ---------------------- // for gui::Target - void Add(gui::Target t) { targets_.push_back(t); } - void Add(std::initializer_list); - void Add(std::vector); + void Add(gui::Target* t) { targets_.emplace_back(t); } + void Add(std::initializer_list); + void Add(std::vector); - void Set(std::initializer_list); - void Set(std::vector); + void Set(std::initializer_list); + void Set(std::vector); // for lib::Target - void Add(lib::Target data) { targets_.push_back(gui::Target(data)); } + void Add(lib::Target data) { targets_.emplace_back(new gui::Target(data)); } void Add(std::initializer_list); void Add(std::vector); @@ -41,30 +41,29 @@ class DataManager { void Set(std::vector); /** - * @brief Возвращает значение Targets - * (позволяет менять объекты, т.к. ссылка не const) - * @return std::vector&: ссылки на объекты К.Т. + * @brief возвращает значение Targets + * @return std::vector: указатели на объекты к.т. */ - std::vector& GetTargets() { return targets_; } + std::vector GetTargetsPtrs(); /** - * @brief Возвращает значение Targets - * @return const std::vector&: ссылки на объекты К.Т. + * @brief возвращает значение Targets + * @return std::vector: объекты к.т. */ - const std::vector& GetTargets() const { return targets_; } + std::vector GetTargets() const; // ---------------------- Hill methods ---------------------- // for gui::Hill - void Add(gui::Hill h) { hills_.push_back(h); } - void Add(std::initializer_list); - void Add(std::vector); + void Add(gui::Hill* h) { hills_.emplace_back(h); } + void Add(std::initializer_list); + void Add(std::vector); - void Set(std::initializer_list); - void Set(std::vector); + void Set(std::initializer_list); + void Set(std::vector); // for lib::Hill - void Add(lib::Hill data) { hills_.push_back(gui::Hill(data)); } + void Add(lib::Hill data) { hills_.emplace_back(new gui::Hill(data)); } void Add(std::initializer_list); void Add(std::vector); @@ -72,31 +71,30 @@ class DataManager { void Set(std::vector); /** - * @brief Возвращает значение Hills - * (позволяет менять объекты, т.к. ссылка не const) - * @return std::vector&: ссылки на объекты рельефа + * @brief возвращает значение Hills + * @return std::vector: указатели на объекты рельефа */ - std::vector& GetHills() { return hills_; } + std::vector GetHillsPtrs(); /** - * @brief Возвращает значение Hills - * @return const std::vector&: const ссылки на объекты рельефа + * @brief возвращает значение Hills + * @return std::vector: объекты рельефа */ - const std::vector& GetHills() const { return hills_; } + std::vector GetHills() const; // ---------------------- TrappyCircle methods ---------------------- // for gui::TrappyCircle - void Add(gui::TrappyCircle tr_c) { tr_circles_.push_back(tr_c); } - void Add(std::initializer_list); - void Add(std::vector); + void Add(gui::TrappyCircle* tr_c) { tr_circles_.emplace_back(tr_c); } + void Add(std::initializer_list); + void Add(std::vector); - void Set(std::initializer_list); - void Set(std::vector); + void Set(std::initializer_list); + void Set(std::vector); // for lib::TrappyCircle void Add(lib::TrappyCircle data) { - tr_circles_.push_back(gui::TrappyCircle(data)); + tr_circles_.emplace_back(new gui::TrappyCircle(data)); } void Add(std::initializer_list); void Add(std::vector); @@ -105,32 +103,30 @@ class DataManager { void Set(std::vector); /** - * @brief Возвращает значение Trappy Circles - * (позволяет менять объекты, т.к. ссылка не const) - * @return std::vector&: ссылки на объекты опасной зоны + * @brief возвращает значение Trappy Circles + * @return std::vector: указатели на объекты опасной зоны */ - std::vector& GetTrappyCircles() { return tr_circles_; } + std::vector GetTrappyCirclesPtrs(); /** - * @brief Возвращает значение Trappy Circles - * @return const std::vector&: объекты опасной зоны + * @brief возвращает значение Trappy Circles + * @return std::vector: объекты опасной зоны */ - const std::vector& GetTrappyCircles() const { - return tr_circles_; - } - + std::vector GetTrappyCircles() const; // ---------------------- TrappyLine methods ---------------------- // for gui::TrappyLine - void Add(gui::TrappyLine tr_l) { tr_lines_.push_back(tr_l); } - void Add(std::initializer_list); - void Add(std::vector); + void Add(gui::TrappyLine* tr_l) { tr_lines_.emplace_back(tr_l); } + void Add(std::initializer_list); + void Add(std::vector); - void Set(std::initializer_list); - void Set(std::vector); + void Set(std::initializer_list); + void Set(std::vector); // for lib::TrappyLine - void Add(lib::TrappyLine data) { tr_lines_.push_back(gui::TrappyLine(data)); } + void Add(lib::TrappyLine data) { + tr_lines_.emplace_back(new gui::TrappyLine(data)); + } void Add(std::initializer_list); void Add(std::vector); @@ -138,26 +134,22 @@ class DataManager { void Set(std::vector); /** - * @brief Возвращает значение Trappy Lines - * (позволяет менять объекты, т.к. ссылка не const) - * @return std::vector&: ссылки на объекты оп. перелета + * @brief возвращает значение Trappy Lines + * @return std::vector: указатели на объекты оп. перелета */ - std::vector& GetTrappyLines() { return tr_lines_; } + std::vector GetTrappyLinesPtrs(); /** - * @brief Возвращает значение Trappy Lines - * @return const std::vector&: ссылки на объекты оп. перелета + * @brief возвращает значение Trappy Lines + * @return std::vector: объекты оп. перелета */ - const std::vector& GetTrappyLines() const { - return tr_lines_; - } + std::vector GetTrappyLines() const; private: - // TODO: переп. всё на указатели, чтобы исправить проблему c изменением копий - std::vector hills_; - std::vector targets_; - std::vector tr_circles_; - std::vector tr_lines_; + std::vector> hills_; + std::vector> targets_; + std::vector> tr_circles_; + std::vector> tr_lines_; }; } // namespace data_tools diff --git a/data_tools/plot_area/plot_area.cpp b/data_tools/plot_area/plot_area.cpp index a8a470e..9306fee 100644 --- a/data_tools/plot_area/plot_area.cpp +++ b/data_tools/plot_area/plot_area.cpp @@ -10,14 +10,15 @@ void PlotArea::Redraw() { plot_->clearPlottables(); plot_->clearItems(); - for (auto& target : manager_->GetTargets()) target.Draw(plot_.get()); + for (auto& target : manager_->GetTargetsPtrs()) target->Draw(plot_.get()); - for (auto& hill : manager_->GetHills()) hill.Draw(plot_.get()); + for (auto& hill : manager_->GetHillsPtrs()) hill->Draw(plot_.get()); - for (auto& tr_circle : manager_->GetTrappyCircles()) - tr_circle.Draw(plot_.get()); + for (auto& tr_circle : manager_->GetTrappyCirclesPtrs()) + tr_circle->Draw(plot_.get()); - for (auto& tr_line : manager_->GetTrappyLines()) tr_line.Draw(plot_.get()); + for (auto& tr_line : manager_->GetTrappyLinesPtrs()) + tr_line->Draw(plot_.get()); plot_->replot(); } diff --git a/data_tools/tables_connection/tables_connection.cpp b/data_tools/tables_connection/tables_connection.cpp index a1b47a4..82b79c9 100644 --- a/data_tools/tables_connection/tables_connection.cpp +++ b/data_tools/tables_connection/tables_connection.cpp @@ -209,8 +209,8 @@ void TablesConnection::TargetsItemChanged(int row, int column) { if (x_item != nullptr && y_item != nullptr && column < manager_->GetTargets().size()) { - manager_->GetTargets()[column].SetPoint(x_item->text().toDouble(), - y_item->text().toDouble()); + manager_->GetTargetsPtrs()[column]->SetPoint(x_item->text().toDouble(), + y_item->text().toDouble()); area_->Redraw(); } @@ -229,9 +229,10 @@ void TablesConnection::TrappyCirclesItemChanged(int row, int column) { if (x_item != nullptr && y_item != nullptr && r_item != nullptr && column < manager_->GetTrappyCircles().size()) { - manager_->GetTrappyCircles()[column].SetCenter( + manager_->GetTrappyCirclesPtrs()[column]->SetCenter( {x_item->text().toDouble(), y_item->text().toDouble()}); - manager_->GetTrappyCircles()[column].SetRadius(r_item->text().toDouble()); + manager_->GetTrappyCirclesPtrs()[column]->SetRadius( + r_item->text().toDouble()); area_->Redraw(); } diff --git a/main/mainwindow_connections.cpp b/main/mainwindow_connections.cpp index a12da7f..6511c40 100644 --- a/main/mainwindow_connections.cpp +++ b/main/mainwindow_connections.cpp @@ -7,13 +7,13 @@ #include "./ui_mainwindow.h" void MainWindow::AddTarget(double x, double y) { - manager_->Add(gui::Target(x, y)); + manager_->Add(new gui::Target(x, y)); area_->Redraw(); t_connection_->UpdateTables(); } void MainWindow::AddTrappyCircle(double x, double y, double radius) { - manager_->Add(gui::TrappyCircle(x, y, radius)); + manager_->Add(new gui::TrappyCircle(x, y, radius)); area_->Redraw(); t_connection_->UpdateTables(); } @@ -21,21 +21,19 @@ void MainWindow::AddTrappyCircle(double x, double y, double radius) { void MainWindow::AddTrappyLine(double x1, double y1, double x2, double y2) { // на данный момент просто добавляем новые // точки при создании новой линии опасного перелета + manager_->Add(new gui::Target(x1, y1)); + manager_->Add(new gui::Target(x2, y2)); - gui::Target t1(x1, y1); - gui::Target t2(x2, y2); - - manager_->Add(t1); - manager_->Add(t2); - - manager_->Add(gui::TrappyLine(&t1, &t2)); + manager_->Add(new gui::TrappyLine( + manager_->GetTargetsPtrs()[manager_->GetTargets().size() - 2], + manager_->GetTargetsPtrs()[manager_->GetTargets().size() - 1])); area_->Redraw(); t_connection_->UpdateTables(); } void MainWindow::AddHill(std::vector points) { - manager_->Add(gui::Hill(points)); + manager_->Add(new gui::Hill(points)); area_->Redraw(); t_connection_->UpdateTables(); From 34f071cc3c15c208b3f6db6f0f310707bcb5967f Mon Sep 17 00:00:00 2001 From: Dmitry Krivoruchko <144147209+UmbrellaLeaf5@users.noreply.github.com> Date: Thu, 18 Apr 2024 03:04:13 +0300 Subject: [PATCH 2/3] change TrappyLine view in tables to Targets numbers --- .../tables_connection/tables_connection.cpp | 37 ++++++++++--------- gui/trappy_line.cpp | 7 ++-- gui/trappy_line.h | 21 +++++------ lib/trappy_line.h | 3 ++ main/mainwindow.ui | 16 ++------ 5 files changed, 38 insertions(+), 46 deletions(-) diff --git a/data_tools/tables_connection/tables_connection.cpp b/data_tools/tables_connection/tables_connection.cpp index 82b79c9..7374d4f 100644 --- a/data_tools/tables_connection/tables_connection.cpp +++ b/data_tools/tables_connection/tables_connection.cpp @@ -38,6 +38,7 @@ void TablesConnection::UpdateTable(const std::vector& targets) { Qt::ItemIsEnabled); targets_table_->setItem(2, i, item); } + targets_table_->update(); } else { targets_table_->setColumnCount(0); @@ -95,6 +96,7 @@ void TablesConnection::UpdateTable(const std::vector& hills) { hills_table_->setItem(j + 1, i, item); } } + hills_table_->update(); } else { hills_table_->setColumnCount(0); @@ -116,36 +118,36 @@ void TablesConnection::UpdateTable( i, item); // номер линии = индекс + 1 - // в строки добавляем индекс на полотне и координаты двух точек + // в строки добавляем индекс на полотне item = new QTableWidgetItem( QString::number(trappy_lines[i].GetPlottableIndex())); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); tr_lines_table_->setItem(0, i, item); - item = new QTableWidgetItem( - QString::number(trappy_lines[i].GetTargets().first.GetPoint().x)); - item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | - Qt::ItemIsEnabled); - tr_lines_table_->setItem(1, i, item); + // нахождение номеров двух привязанных к.т. в векторе менеджера + size_t t_1_n; + size_t t_2_n; - item = new QTableWidgetItem( - QString::number(trappy_lines[i].GetTargets().first.GetPoint().y)); - item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | - Qt::ItemIsEnabled); - tr_lines_table_->setItem(2, i, item); + for (size_t j = 0; j < manager_->GetTargetsPtrs().size(); j++) { + auto target_ptr = manager_->GetTargetsPtrs()[j]; - item = new QTableWidgetItem( - QString::number(trappy_lines[i].GetTargets().second.GetPoint().x)); + if (target_ptr == trappy_lines[i].GetTargetsPtrs().first) + t_1_n = j + 1; // номер = индекс + 1 + if (target_ptr == trappy_lines[i].GetTargetsPtrs().second) + t_2_n = j + 1; // номер = индекс + 1 + } + + item = new QTableWidgetItem(QString::number(t_1_n)); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled); - tr_lines_table_->setItem(3, i, item); + tr_lines_table_->setItem(1, i, item); - item = new QTableWidgetItem( - QString::number(trappy_lines[i].GetTargets().second.GetPoint().y)); + item = new QTableWidgetItem(QString::number(t_2_n)); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled); - tr_lines_table_->setItem(4, i, item); + tr_lines_table_->setItem(2, i, item); } + tr_lines_table_->update(); } else { tr_lines_table_->setColumnCount(0); @@ -190,6 +192,7 @@ void TablesConnection::UpdateTable( Qt::ItemIsEnabled); tr_circles_table_->setItem(3, i, item); } + tr_circles_table_->update(); } else { tr_circles_table_->setColumnCount(0); diff --git a/gui/trappy_line.cpp b/gui/trappy_line.cpp index f1ad3ec..10570cc 100644 --- a/gui/trappy_line.cpp +++ b/gui/trappy_line.cpp @@ -28,10 +28,9 @@ void TrappyLine::Draw(QCustomPlot* plot) { void TrappyLine::UpdateData(gui::Target* first_target, gui::Target* second_target) { data_.SetTargets(&first_target->GetData(), &second_target->GetData()); - targets_indexes_ = std::make_pair(first_target->GetPlottableIndex(), - second_target->GetPlottableIndex()); - targets_graphs_.first.reset(first_target->GetGraphPtr()); - targets_graphs_.second.reset(second_target->GetGraphPtr()); + + targets_.first = first_target; + targets_.second = second_target; } void TrappyLine::UpdateData(std::pair targets) { diff --git a/gui/trappy_line.h b/gui/trappy_line.h index 470a5e3..dba41d6 100644 --- a/gui/trappy_line.h +++ b/gui/trappy_line.h @@ -34,10 +34,6 @@ class TrappyLine : public Drawable { UpdateData(targets); } - std::pair GetTargets() const { - return data_.GetTargets(); - } - const lib::TrappyLine& GetData() const { return data_; } lib::TrappyLine& GetData() { return data_; } @@ -55,13 +51,14 @@ class TrappyLine : public Drawable { */ QCPGraph* GetGraphPtr() const { return graph_; } - const std::pair& GetTargetsPlottableIndexes() const { - return targets_indexes_; + std::pair GetTargets() const { + return std::make_pair(*targets_.first, *targets_.second); } - std::pair GetTargetsGraphPtrs() const { - return std::make_pair(targets_graphs_.first.get(), - targets_graphs_.second.get()); + std::pair GetTargetsPtrs() { return targets_; } + + const std::pair& GetTargetsPtrs() const { + return targets_; } private: @@ -72,9 +69,9 @@ class TrappyLine : public Drawable { size_t plottable_index_{ULLONG_MAX}; QCPGraph* graph_{nullptr}; - std::pair targets_indexes_; - std::pair, std::shared_ptr> - targets_graphs_; + // самый простой способ иметь доступ из TrappyLine к привязанным к.т. + // здесь нет смысла использовать умные указатели, так как мы не создаём новых + std::pair targets_; }; } // namespace gui diff --git a/lib/trappy_line.h b/lib/trappy_line.h index f7a2c81..60bf09d 100644 --- a/lib/trappy_line.h +++ b/lib/trappy_line.h @@ -38,7 +38,10 @@ class TrappyLine : public JSONable { std::pair& GetTargetsPtrs() { return targets_; } + const std::pair& GetTargetsPtrs() const { return targets_; } + private: + // здесь нет смысла использовать умные указатели, так как мы не создаём новых std::pair targets_; }; diff --git a/main/mainwindow.ui b/main/mainwindow.ui index 5e4be78..38124a0 100644 --- a/main/mainwindow.ui +++ b/main/mainwindow.ui @@ -677,7 +677,7 @@ QPushButton::pressed{background-color: rgb(135, 135, 135);} QAbstractItemView::AllEditTriggers - 5 + 3 25 @@ -698,22 +698,12 @@ QPushButton::pressed{background-color: rgb(135, 135, 135);} - X_1 - - - - - Y_1 - - - - - X_2 + t_n_1 - Y_2 + t_n_2 From 836fafe75245451e1542c188aeadc6c434b4874a Mon Sep 17 00:00:00 2001 From: Dmitry Krivoruchko <144147209+UmbrellaLeaf5@users.noreply.github.com> Date: Thu, 18 Apr 2024 19:22:28 +0300 Subject: [PATCH 3/3] simplify set methods in data_manager --- data_tools/data_manager/data_manager.cpp | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/data_tools/data_manager/data_manager.cpp b/data_tools/data_manager/data_manager.cpp index 235e00b..9e89741 100644 --- a/data_tools/data_manager/data_manager.cpp +++ b/data_tools/data_manager/data_manager.cpp @@ -55,22 +55,22 @@ void DataManager::Add(std::vector new_targets) { void DataManager::Set(std::initializer_list targets) { targets_.clear(); - for (const auto& target : targets) Add(target); + Add(targets); } void DataManager::Set(std::initializer_list targets) { targets_.clear(); - for (const auto& target : targets) Add(target); + Add(targets); } void DataManager::Set(std::vector targets) { targets_.clear(); - for (const auto& target : targets) Add(target); + Add(targets); } void DataManager::Set(std::vector targets) { targets_.clear(); - for (const auto& target : targets) Add(target); + Add(targets); } std::vector DataManager::GetTargetsPtrs() { @@ -111,22 +111,22 @@ void DataManager::Add(std::vector new_hills) { void DataManager::Set(std::initializer_list hills) { hills_.clear(); - for (const auto& hill : hills) Add(hill); + Add(hills); } void DataManager::Set(std::initializer_list hills) { hills_.clear(); - for (const auto& hill : hills) Add(hill); + Add(hills); } void DataManager::Set(std::vector hills) { hills_.clear(); - for (const auto& hill : hills) Add(hill); + Add(hills); } void DataManager::Set(std::vector hills) { hills_.clear(); - for (const auto& hill : hills) Add(hill); + Add(hills); } std::vector DataManager::GetHillsPtrs() { @@ -168,22 +168,22 @@ void DataManager::Add(std::vector new_tr_circles) { void DataManager::Set(std::initializer_list tr_circles) { tr_circles_.clear(); - for (const auto& tr_circle : tr_circles) Add(tr_circle); + Add(tr_circles); } void DataManager::Set(std::initializer_list tr_circles) { tr_circles_.clear(); - for (const auto& tr_circle : tr_circles) Add(tr_circle); + Add(tr_circles); } void DataManager::Set(std::vector tr_circles) { tr_circles_.clear(); - for (const auto& tr_circle : tr_circles) Add(tr_circle); + Add(tr_circles); } void DataManager::Set(std::vector tr_circles) { tr_circles_.clear(); - for (const auto& tr_circle : tr_circles) Add(tr_circle); + Add(tr_circles); } std::vector DataManager::GetTrappyCirclesPtrs() { @@ -224,22 +224,22 @@ void DataManager::Add(std::vector new_tr_lines) { void DataManager::Set(std::initializer_list tr_lines) { tr_lines_.clear(); - for (const auto& tr_line : tr_lines) Add(tr_line); + Add(tr_lines); } void DataManager::Set(std::initializer_list tr_lines) { tr_lines_.clear(); - for (const auto& tr_line : tr_lines) Add(tr_line); + Add(tr_lines); } void DataManager::Set(std::vector tr_lines) { tr_lines_.clear(); - for (const auto& tr_line : tr_lines) Add(tr_line); + Add(tr_lines); } void DataManager::Set(std::vector tr_lines) { tr_lines_.clear(); - for (const auto& tr_line : tr_lines) Add(tr_line); + Add(tr_lines); } std::vector DataManager::GetTrappyLinesPtrs() {