diff --git a/diagview.cpp b/diagview.cpp index dd74ad2..f965e39 100644 --- a/diagview.cpp +++ b/diagview.cpp @@ -11,6 +11,13 @@ DiagView::DiagView(Context &ctx, QWidget *parent) : ui(new Ui::DiagView) { ui->setupUi(this); + + ui->doubleSpinBox->setDecimals(4); + ui->doubleSpinBox->setMaximum(ctx.beam.length); + ui->doubleSpinBox->setMinimum(0); + + lCtx = ctx; + std::pair,std::vector> xyH = ctx.getHpair(); std::pair,std::vector> xyT = ctx.getTpair(); std::pair,std::vector> xyM = ctx.getMpair(); @@ -24,7 +31,7 @@ DiagView::DiagView(Context &ctx, QWidget *parent) : ui->diagHPlot->replot(); ui->diagHPlot->rescaleAxes(true); ui->diagHPlot->xAxis->setLabel("Beam"); - ui->diagHPlot->yAxis->setLabel("Shear force"); + ui->diagHPlot->yAxis->setLabel("Axial force"); ui->diagHPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom); ui->diagTPlot->addGraph(); @@ -46,7 +53,7 @@ DiagView::DiagView(Context &ctx, QWidget *parent) : ui->diagMPlot->replot(); ui->diagMPlot->rescaleAxes(true); ui->diagMPlot->xAxis->setLabel("Beam"); - ui->diagMPlot->yAxis->setLabel("Shear force"); + ui->diagMPlot->yAxis->setLabel("Bending moment"); ui->diagMPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom); } @@ -54,3 +61,11 @@ DiagView::~DiagView() { delete ui; } + +void DiagView::on_doubleSpinBox_valueChanged(double x) +{ + ui->axialIn->setText(QString::fromStdString(std::to_string(lCtx.pointH(x)))); + ui->shearIn->setText(QString::fromStdString(std::to_string(lCtx.pointV(x)))); + ui->momentIn->setText(QString::fromStdString(std::to_string(lCtx.pointM(x)*(-1)))); +} + diff --git a/diagview.h b/diagview.h index 60f6622..fe69b69 100644 --- a/diagview.h +++ b/diagview.h @@ -16,6 +16,11 @@ class DiagView : public QDialog DiagView(Context &ctx, QWidget *parent = nullptr); ~DiagView(); + Context lCtx; + +private slots: + void on_doubleSpinBox_valueChanged(double arg1); + private: Ui::DiagView *ui; }; diff --git a/diagview.ui b/diagview.ui index df46100..cf3f5bf 100644 --- a/diagview.ui +++ b/diagview.ui @@ -6,22 +6,128 @@ 0 0 - 1347 - 588 + 1082 + 497 - Dialog + Diagrams - - - + + + + + QLayout::SetMaximumSize + + + + + + 350 + 350 + + + + + + + + + 350 + 350 + + + + + + + + + 350 + 350 + + + + + - - - - - + + + + QLayout::SetMinimumSize + + + + + Point (distance from left) + + + + + + + + + + + + + + Axial force + + + + + + + + + + true + + + + + + + Shear force + + + + + + + + + + true + + + + + + + Bending moment + + + + + + + + 0 + 0 + + + + + + + true + + + + diff --git a/distributedloaddialog.cpp b/distributedloaddialog.cpp index 56b12c7..7caa987 100644 --- a/distributedloaddialog.cpp +++ b/distributedloaddialog.cpp @@ -3,11 +3,12 @@ #include "easydiag.h" -DistributedLoadDialog::DistributedLoadDialog(QWidget *parent) : +DistributedLoadDialog::DistributedLoadDialog(double &beamL, QWidget *parent) : QDialog(parent), ui(new Ui::DistributedLoadDialog) { ui->setupUi(this); + lbeamL = beamL; ui->q1SpinBox->setDecimals(4); ui->q1SpinBox->setMaximum(std::numeric_limits::max()); @@ -16,7 +17,7 @@ DistributedLoadDialog::DistributedLoadDialog(QWidget *parent) : ui->q2SpinBox->setMaximum(std::numeric_limits::max()); ui->q2SpinBox->setMinimum(std::numeric_limits::max()*(-1)); ui->distanceSpinBox->setDecimals(4); - ui->distanceSpinBox->setMaximum(std::numeric_limits::max()); + ui->distanceSpinBox->setMaximum(lbeamL); ui->distanceSpinBox->setMinimum(0); ui->lengthSpinBox->setDecimals(4); ui->lengthSpinBox->setMaximum(std::numeric_limits::max()); @@ -33,3 +34,9 @@ void DistributedLoadDialog::on_buttonBox_accepted() load[0] = DistributedLoad(ui->q1SpinBox->value(),ui->q2SpinBox->value(),ui->distanceSpinBox->value(),ui->lengthSpinBox->value()); } + +void DistributedLoadDialog::on_distanceSpinBox_valueChanged(double d) +{ + ui->lengthSpinBox->setMaximum(lbeamL-d); +} + diff --git a/distributedloaddialog.h b/distributedloaddialog.h index 92832d8..c11cad6 100644 --- a/distributedloaddialog.h +++ b/distributedloaddialog.h @@ -13,14 +13,16 @@ class DistributedLoadDialog : public QDialog Q_OBJECT public: - explicit DistributedLoadDialog(QWidget *parent = nullptr); + explicit DistributedLoadDialog(double &beamL, QWidget *parent = nullptr); ~DistributedLoadDialog(); - + double lbeamL; DistributedLoad load[1]; private slots: void on_buttonBox_accepted(); + void on_distanceSpinBox_valueChanged(double arg1); + private: Ui::DistributedLoadDialog *ui; }; diff --git a/distributedloaddialog.ui b/distributedloaddialog.ui index 19bc116..bd5adaa 100644 --- a/distributedloaddialog.ui +++ b/distributedloaddialog.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 184 + 173 @@ -24,7 +24,11 @@ - + + + + + @@ -34,7 +38,11 @@ - + + + + + @@ -44,7 +52,11 @@ - + + + + + @@ -54,7 +66,11 @@ - + + + + + diff --git a/easydiag.cpp b/easydiag.cpp index 0f2ce50..750a465 100644 --- a/easydiag.cpp +++ b/easydiag.cpp @@ -24,6 +24,7 @@ DistributedLoad::DistributedLoad(double val1, double val2, double d, double l) { length = l; } +Context::Context() {}; Context::Context(Beam b, std::vector v, std::vector h, diff --git a/easydiag.h b/easydiag.h index c50d43e..f07af4b 100644 --- a/easydiag.h +++ b/easydiag.h @@ -82,6 +82,7 @@ class Context { std::vector distributedLoads; std::vector pointMoments; double dx = 0.0005; + Context(); Context(Beam b, std::vector v, std::vector h, diff --git a/mainwindow.cpp b/mainwindow.cpp index 578972c..a7c0436 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -26,24 +26,10 @@ MainWindow::~MainWindow() delete ui; } - -void MainWindow::on_beamBtn_clicked() -{ - if (ui->beamSpinBox->value() == 0) { - QMessageBox::warning(this, "Warning", "The length of the beam must be greater than 0.", QMessageBox::Ok); - } else { - b.length = ui->beamSpinBox->value(); - ui->pointLoadBtn->setEnabled(true); - ui->distributedLoadBtn->setEnabled(true); - ui->pointMomentBtn->setEnabled(true); - ui->diagBtn->setEnabled(true); - } -} - - void MainWindow::on_pointLoadBtn_clicked() { - pldialog = new PointLoadDialog(); + double beamLength = ui->beamSpinBox->value(); + pldialog = new PointLoadDialog(beamLength); int result = pldialog->exec(); if (result == QDialog::Accepted) { ui->pointLoadsTbl->setRowCount(0); @@ -84,7 +70,8 @@ void MainWindow::on_pointLoadBtn_clicked() void MainWindow::on_distributedLoadBtn_clicked() { - dldialog = new DistributedLoadDialog(); + double beamLength = ui->beamSpinBox->value(); + dldialog = new DistributedLoadDialog(beamLength); int result = dldialog->exec(); if (result == QDialog::Accepted) { ui->distributedLoadsTbl->setRowCount(0); @@ -110,7 +97,8 @@ void MainWindow::on_distributedLoadBtn_clicked() void MainWindow::on_pointMomentBtn_clicked() { - pmdialog = new PointMomentDialog(); + double beamLength = ui->beamSpinBox->value(); + pmdialog = new PointMomentDialog(beamLength); int result = pmdialog->exec(); if (result == QDialog::Accepted) { ui->pointMomentsTbl->setRowCount(0); @@ -139,3 +127,39 @@ void MainWindow::on_diagBtn_clicked() dview->exec(); } + +void MainWindow::on_beamSpinBox_valueChanged(double arg1) +{ + if (ui->beamSpinBox->value() == 0) { + QMessageBox::warning(this, "Warning", "The length of the beam must be greater than 0.", QMessageBox::Ok); + } else { + b.length = ui->beamSpinBox->value(); + ui->pointLoadBtn->setEnabled(true); + ui->distributedLoadBtn->setEnabled(true); + ui->pointMomentBtn->setEnabled(true); + ui->diagBtn->setEnabled(true); + } +} + + +void MainWindow::on_clrPl_clicked() +{ + verticalForces.clear(); + horizontalForces.clear(); + ui->pointLoadsTbl->setRowCount(0); +} + + +void MainWindow::on_clrDl_clicked() +{ + distributedLoads.clear(); + ui->distributedLoadsTbl->setRowCount(0); +} + + +void MainWindow::on_clrPm_clicked() +{ + pointMoments.clear(); + ui->pointMomentsTbl->setRowCount(0); +} + diff --git a/mainwindow.h b/mainwindow.h index e4706b4..4f6b0f1 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -22,13 +22,20 @@ class MainWindow : public QMainWindow Context createCtx(); private slots: - void on_beamBtn_clicked(); void on_pointLoadBtn_clicked(); void on_distributedLoadBtn_clicked(); void on_pointMomentBtn_clicked(); void on_diagBtn_clicked(); + void on_beamSpinBox_valueChanged(double arg1); + + void on_clrPl_clicked(); + + void on_clrDl_clicked(); + + void on_clrPm_clicked(); + private: Ui::MainWindow *ui; PointLoadDialog *pldialog; diff --git a/mainwindow.ui b/mainwindow.ui index 10b8825..a08f597 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,33 +6,36 @@ 0 0 - 800 - 600 + 768 + 693 + + + 768 + 0 + + Easydiag - - - - false - + + - View diagrams + Beam Length + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + + QFrame::Plain - - QAbstractScrollArea::AdjustToContents - QAbstractItemView::NoEditTriggers @@ -42,12 +45,14 @@ QAbstractItemView::SingleSelection - - QAbstractItemView::SelectRows - - Value + q1 + + + + + q2 @@ -57,52 +62,15 @@ - Direction + Length - - - - false - - - Add distributed load - - - - - - - false - - - Add point load - - - - - - - Set beam length - - - - - - - Point loads - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - - - + + - Distributed loads + Point moments Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing @@ -112,22 +80,21 @@ - + - - - - - - Qt::Horizontal + + true - - + + QFrame::Plain + + QAbstractScrollArea::AdjustToContents + QAbstractItemView::NoEditTriggers @@ -137,6 +104,9 @@ QAbstractItemView::SingleSelection + + QAbstractItemView::SelectRows + Value @@ -147,20 +117,25 @@ Distance + + + Direction + + - - + + - Point moments + Point loads Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - + + QFrame::Plain @@ -175,12 +150,7 @@ - q1 - - - - - q2 + Value @@ -188,24 +158,36 @@ Distance - - - Length - - - - + + + + false + - Beam Length + View diagrams + + + + + + + Qt::Horizontal + + + + + + + Distributed loads - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - + false @@ -215,6 +197,47 @@ + + + + false + + + Add distributed load + + + + + + + false + + + Add point load + + + + + + + Clear + + + + + + + Clear + + + + + + + Clear + + + @@ -222,7 +245,7 @@ 0 0 - 800 + 768 22 diff --git a/pointloaddialog.cpp b/pointloaddialog.cpp index f2ac7f1..8c525b9 100644 --- a/pointloaddialog.cpp +++ b/pointloaddialog.cpp @@ -4,7 +4,7 @@ #include #include -PointLoadDialog::PointLoadDialog(QWidget *parent) : +PointLoadDialog::PointLoadDialog(double &beamL, QWidget *parent) : QDialog(parent), ui(new Ui::PointLoadDialog) { @@ -16,7 +16,7 @@ PointLoadDialog::PointLoadDialog(QWidget *parent) : ui->angleValue->setMaximum(std::numeric_limits::max()); ui->doubleSpinBox->setMaximum(std::numeric_limits::max()); - ui->doubleSpinBox_2->setMaximum(std::numeric_limits::max()); + ui->doubleSpinBox_2->setMaximum(beamL); ui->doubleSpinBox->setMinimum(std::numeric_limits::max()*(-1)); ui->doubleSpinBox_2->setMinimum(0); diff --git a/pointloaddialog.h b/pointloaddialog.h index cc01145..47ad009 100644 --- a/pointloaddialog.h +++ b/pointloaddialog.h @@ -14,7 +14,7 @@ class PointLoadDialog : public QDialog Q_OBJECT public: - explicit PointLoadDialog(QWidget *parent = nullptr); + explicit PointLoadDialog(double &beamL, QWidget *parent = nullptr); ~PointLoadDialog(); QButtonGroup *directionSelection; diff --git a/pointloaddialog.ui b/pointloaddialog.ui index 13e5fb7..b405526 100644 --- a/pointloaddialog.ui +++ b/pointloaddialog.ui @@ -6,7 +6,7 @@ 0 0 - 330 + 239 226 @@ -27,7 +27,7 @@ - + 2 @@ -50,7 +50,7 @@ - + 2 diff --git a/pointmomentdialog.cpp b/pointmomentdialog.cpp index cea2291..af689b3 100644 --- a/pointmomentdialog.cpp +++ b/pointmomentdialog.cpp @@ -3,7 +3,7 @@ #include "easydiag.h" -PointMomentDialog::PointMomentDialog(QWidget *parent) : +PointMomentDialog::PointMomentDialog(double &beamL, QWidget *parent) : QDialog(parent), ui(new Ui::PointMomentDialog) { @@ -13,7 +13,7 @@ PointMomentDialog::PointMomentDialog(QWidget *parent) : ui->doubleSpinBox_2->setDecimals(4); ui->doubleSpinBox->setMaximum(std::numeric_limits::max()); - ui->doubleSpinBox_2->setMaximum(std::numeric_limits::max()); + ui->doubleSpinBox_2->setMaximum(beamL); ui->doubleSpinBox->setMinimum(std::numeric_limits::max()*(-1)); ui->doubleSpinBox_2->setMinimum(0); diff --git a/pointmomentdialog.h b/pointmomentdialog.h index 6ff6a7d..82c97cf 100644 --- a/pointmomentdialog.h +++ b/pointmomentdialog.h @@ -13,7 +13,7 @@ class PointMomentDialog : public QDialog Q_OBJECT public: - explicit PointMomentDialog(QWidget *parent = nullptr); + explicit PointMomentDialog(double &beamL, QWidget *parent = nullptr); ~PointMomentDialog(); PointMoment moment[1]; diff --git a/pointmomentdialog.ui b/pointmomentdialog.ui index 55f8d57..f7860db 100644 --- a/pointmomentdialog.ui +++ b/pointmomentdialog.ui @@ -6,7 +6,7 @@ 0 0 - 330 + 184 107 @@ -27,7 +27,7 @@ - + 2 @@ -50,7 +50,7 @@ - + 2