summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/graphicsscene.cpp47
-rw-r--r--src/mainwindow.cpp70
-rw-r--r--src/mainwindow.h10
-rw-r--r--src/opticaldesign.h2
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.);