diff options
| -rw-r--r-- | src/graphicsscene.cpp | 47 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 70 | ||||
| -rw-r--r-- | src/mainwindow.h | 10 | ||||
| -rw-r--r-- | src/opticaldesign.h | 2 |
4 files changed, 106 insertions, 23 deletions
diff --git a/src/graphicsscene.cpp b/src/graphicsscene.cpp index d7e0bba..0bb8e32 100644 --- a/src/graphicsscene.cpp +++ b/src/graphicsscene.cpp @@ -209,7 +209,7 @@ GraphicsScene::GraphicsScene(QObject* parent) QBrush{Qt::green, Qt::DiagCrossPattern} ); m_xzDebugItem->setOpacity(0.1); - m_xzDebugItem->setParentItem(m_laserBodyItem); + // m_xzDebugItem->setParentItem(m_laserBodyItem); } void GraphicsScene::update(OpticalDesign* design) @@ -589,6 +589,7 @@ void GraphicsScene::update(OpticalDesign* design) design->get_laserBodyLengthMm() ) ); + m_laserBodyItem->setPos(QPointF{design->get_laserZOffsetMm(), 0.}); m_scannerBodyFrontWallItem->setRect( orphex::scannerBodyFrontWallRect( @@ -604,32 +605,38 @@ void GraphicsScene::update(OpticalDesign* design) } { - const auto item = m_actualRangeItem; - const auto line = item->line(); - const auto x1 = item->mapToScene(line.p1()).x(); - const auto x2 = item->mapToScene(line.p2()).x(); + const auto zRangeItem = m_actualRangeItem; + const auto line = zRangeItem->line(); + + const auto zBase = zRangeItem->mapToScene(line.p1()).x(); + const auto zEnd = zRangeItem->mapToScene(line.p2()).x(); + + const auto xStartRight = + imageToObject(m_xzSensorItem->rect().topLeft()).y(); + const auto xStartLeft = + imageToObject(m_xzSensorItem->rect().bottomLeft()).y(); + + const auto xEndRight = + imageToObject(m_xzSensorItem->rect().topRight()).y(); + const auto xEndLeft = + imageToObject(m_xzSensorItem->rect().bottomRight()).y(); + + design->set_actualXStartMm(-(xStartRight - xStartLeft)); + design->set_actualXEndMm(-(xEndRight - xEndLeft)); + QPolygonF xzActualRangePolygon{QList<QPointF>{ - QPointF{x1, imageToObject(m_xzSensorItem->rect().topLeft()).y()}, - QPointF{x1, imageToObject(m_xzSensorItem->rect().bottomLeft()).y()}, - QPointF{ - x2, - imageToObject(m_xzSensorItem->rect().bottomRight()).y() - }, - QPointF{x2, imageToObject(m_xzSensorItem->rect().topRight()).y()}, + QPointF{zBase, xStartRight}, + QPointF{zBase, xStartLeft}, + QPointF{zEnd, xEndLeft}, + QPointF{zEnd, xEndRight}, }}; m_xzActualRangeAreaItem->setPolygon(xzActualRangePolygon); m_xzDebugItem->setPolygon( QPolygonF{QList<QPointF>{ QPointF{0., 0.}, - QPointF{ - x1, - imageToObject(m_xzSensorItem->rect().topLeft()).y() - }, - QPointF{ - x1, - imageToObject(m_xzSensorItem->rect().bottomLeft()).y() - }, + QPointF{zBase, xStartRight}, + QPointF{zBase, xStartLeft}, }} ); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d573473..f9a9692 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3,6 +3,7 @@ // qt #include <QComboBox> #include <QDoubleSpinBox> +#include <QFile> #include <QFormLayout> #include <QGroupBox> #include <QHBoxLayout> @@ -415,8 +416,8 @@ void MainWindow::initUi() qOverload<double>(&OpticalDesign::scannerBodyFrontWallOffsetMmChanged), &OpticalDesign::get_scannerBodyFrontWallOffsetMm, &OpticalDesign::set_scannerBodyFrontWallOffsetMm, - MinValue{-50.}, - MaxValue{50.}, + MinValue{-500.}, + MaxValue{500.}, SingleStep{1.}, scannerBodyGroup ); @@ -429,7 +430,7 @@ void MainWindow::initUi() ); addFormLabel( - tr("FoV (YZ, V) (°):"), + tr("Field of View (YZ, V) (°):"), qOverload<double>(&OpticalDesign::vFoVDegreesChanged), Decimals{3}, resultsGroup @@ -465,6 +466,20 @@ void MainWindow::initUi() ); addFormLabel( + tr("Actual X Start (mm):"), + qOverload<double>(&OpticalDesign::actualXStartMmChanged), + Decimals{2}, + resultsGroup + ); + + addFormLabel( + tr("Actual X End (mm):"), + qOverload<double>(&OpticalDesign::actualXEndMmChanged), + Decimals{2}, + resultsGroup + ); + + addFormLabel( tr("Lense-Sensor Distance (mm):"), qOverload<double>(&OpticalDesign::lenseSensorDistanceMmChanged), Decimals{2}, @@ -522,4 +537,53 @@ void MainWindow::initUi() void MainWindow::initShortcuts() { new QShortcut{Qt::CTRL | Qt::Key_Q, this, this, &MainWindow::close}; + new QShortcut{ + Qt::CTRL | Qt::SHIFT | Qt::Key_E, + this, + this, + std::bind( + &MainWindow::onExport, + this, + QStringLiteral("/home/nikita/git/scanner/hw/body/design.scad") + ) + }; +} + +void MainWindow::onExport(const QString& filepath) +{ + QFile f{filepath}; + + if (!f.open(QFile::WriteOnly | QFile::Truncate)) + { + qCritical() << "cannot open file:" << f.errorString(); + + return; + } + + QTextStream s{&f}; + + const auto mo = m_design->metaObject(); + + for (int i{mo->propertyOffset()}; i < mo->propertyCount(); ++i) + { + const auto property = mo->property(i); + const QString name{property.name()}; + + const auto value = property.read(m_design); + + const auto valueString = property.isEnumType() + // write enums as `int`s + ? QString::number(value.toInt()) + : (property.typeId() == QMetaType::QString + // wrap strings into "" + ? ('"' + value.toString() + '"') + : value.toString()); + + qDebug().noquote().nospace() + << '$' << name << " = " << valueString << " (" << value << ')'; + + s << '$' << name << " = " << valueString << ';' << Qt::endl; + } + + qDebug() << "desing written to" << filepath; } diff --git a/src/mainwindow.h b/src/mainwindow.h index a1e613d..020ae8f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -21,6 +21,16 @@ private: void initUi(); void initShortcuts(); +private slots: + /*! + * \brief onExport - export design data in OpenSCAD format + */ + /*! + * \brief onExport - export design data in OpenSCAD format + * \param filepath - path to file to write to + */ + void onExport(const QString& filepath); + private: GraphicsScene* m_scene{nullptr}; GraphicsView* m_view{nullptr}; diff --git a/src/opticaldesign.h b/src/opticaldesign.h index c1ff634..27ad546 100644 --- a/src/opticaldesign.h +++ b/src/opticaldesign.h @@ -107,6 +107,8 @@ private: // takes scanner body into account G_PROPERTY_DEFAULT(double, actualZBaseMm, 0.); G_PROPERTY_DEFAULT(double, actualZRangeMm, 0.); + G_PROPERTY_DEFAULT(double, actualXStartMm, 60); + G_PROPERTY_DEFAULT(double, actualXEndMm, 130); G_PROPERTY_DEFAULT(double, lenseSensorDistanceMm, 0.); G_PROPERTY_DEFAULT(double, frontSharpDistanceMm, 0.); G_PROPERTY_DEFAULT(double, backSharpDistanceMm, 0.); |
