diff --git a/QtRocket.h b/QtRocket.h index 5d769c5..299abc9 100644 --- a/QtRocket.h +++ b/QtRocket.h @@ -37,6 +37,11 @@ public: void addMotorModels(std::vector& m); + + void addRocket(std::shared_ptr r) { rocket = r; } + + std::shared_ptr getRocket() { return rocket; } + private: QtRocket(); diff --git a/gui/AnalysisWindow.cpp b/gui/AnalysisWindow.cpp index 93bb712..e750905 100644 --- a/gui/AnalysisWindow.cpp +++ b/gui/AnalysisWindow.cpp @@ -1,14 +1,46 @@ #include "AnalysisWindow.h" #include "ui_AnalysisWindow.h" +#include "QtRocket.h" + AnalysisWindow::AnalysisWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::AnalysisWindow) + QDialog(parent), + ui(new Ui::AnalysisWindow) { - ui->setupUi(this); + ui->setupUi(this); + this->setWindowModality(Qt::NonModal); + this->hide(); + this->show(); + + std::shared_ptr rocket = QtRocket::getInstance()->getRocket(); + const std::vector>>& res = rocket->getStates(); + /* + for(const auto& i : res) + { + std::cout << i.first << ": " << "(" << i.second[0] << ", " << i.second[1] << ", " << i.second[2] << ")\n"; + } + */ + auto& plot = ui->plotWidget; + // generate some data: + QVector tData(res.size()), zData(res.size()); + for (int i = 0; i < tData.size(); ++i) + { + tData[i] = res[i].first; + zData[i] = res[i].second[2]; + } + // create graph and assign data to it: + plot->addGraph(); + plot->graph(0)->setData(tData, zData); + // give the axes some labels: + plot->xAxis->setLabel("time"); + plot->yAxis->setLabel("Z"); + // set axes ranges, so we see all data: + plot->xAxis->setRange(*std::min_element(std::begin(tData), std::end(tData)), *std::max_element(std::begin(tData), std::end(tData))); + plot->yAxis->setRange(*std::min_element(std::begin(zData), std::end(zData)), *std::max_element(std::begin(zData), std::end(zData))); + plot->replot(); } AnalysisWindow::~AnalysisWindow() { - delete ui; + delete ui; } diff --git a/gui/AnalysisWindow.h b/gui/AnalysisWindow.h index 8dc5a89..bddb0bd 100644 --- a/gui/AnalysisWindow.h +++ b/gui/AnalysisWindow.h @@ -1,22 +1,22 @@ #ifndef ANALYSISWINDOW_H #define ANALYSISWINDOW_H -#include +#include namespace Ui { class AnalysisWindow; } -class AnalysisWindow : public QMainWindow +class AnalysisWindow : public QDialog { - Q_OBJECT + Q_OBJECT public: - explicit AnalysisWindow(QWidget *parent = nullptr); - ~AnalysisWindow(); + explicit AnalysisWindow(QWidget *parent = nullptr); + ~AnalysisWindow(); private: - Ui::AnalysisWindow *ui; + Ui::AnalysisWindow *ui; }; #endif // ANALYSISWINDOW_H diff --git a/gui/AnalysisWindow.ui b/gui/AnalysisWindow.ui index cba4b58..f9af7ec 100644 --- a/gui/AnalysisWindow.ui +++ b/gui/AnalysisWindow.ui @@ -1,48 +1,37 @@ AnalysisWindow - + 0 0 - 800 - 600 + 989 + 821 - MainWindow + Dialog - - - - - 9 - 9 - 701 - 351 - - - - - + - 0 - 0 - 800 - 22 + 19 + 29 + 961 + 671 - - - File - - - - + + + QCustomPlot + QWidget +
gui/qcustomplot.h
+ 1 +
+
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index bc67e79..243744d 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -1,8 +1,8 @@ -#include "MainWindow.h" +#include "gui/MainWindow.h" #include "ui_MainWindow.h" -#include "AboutWindow.h" +#include "gui/AboutWindow.h" +#include "gui/AnalysisWindow.h" -#include "utils/math/Vector3.h" #include "sim/RK4Solver.h" #include "model/Rocket.h" @@ -79,13 +79,19 @@ void MainWindow::on_testButton2_clicked() double initialVelocityX = initialVelocity * std::cos(initialAngle / 57.2958); double initialVelocityZ = initialVelocity * std::sin(initialAngle / 57.2958); - Rocket rocket; + std::shared_ptr rocket = std::make_shared(); + QtRocket::getInstance()->addRocket(rocket); std::vector initialState = {0.0, 0.0, 0.0, initialVelocityX, 0.0, initialVelocityZ, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - rocket.setInitialState(initialState); - rocket.setMass(mass); - rocket.setDragCoefficient(dragCoeff); - rocket.launch(); + rocket->setInitialState(initialState); + rocket->setMass(mass); + rocket->setDragCoefficient(dragCoeff); + rocket->launch(); + AnalysisWindow aWindow; + aWindow.setModal(false); + aWindow.exec(); + + /* const std::vector>>& res = rocket.getStates(); for(const auto& i : res) { @@ -109,10 +115,10 @@ void MainWindow::on_testButton2_clicked() plot->xAxis->setRange(*std::min_element(std::begin(tData), std::end(tData)), *std::max_element(std::begin(tData), std::end(tData))); plot->yAxis->setRange(*std::min_element(std::begin(zData), std::end(zData)), *std::max_element(std::begin(zData), std::end(zData))); plot->replot(); + */ } - void MainWindow::on_loadRSE_button_clicked() { QString rseFile = QFileDialog::getOpenFileName(this, diff --git a/model/Rocket.h b/model/Rocket.h index 44a705c..05a9bba 100644 --- a/model/Rocket.h +++ b/model/Rocket.h @@ -27,8 +27,11 @@ public: void setThrustCurve(const Thrustcurve& curve); bool terminateCondition(const std::pair>& cond); + + void setName(const std::string& n) { name = n; } private: + std::string name; sim::Propagator propagator; double dragCoeff; double mass;