diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fe16cb1..5c56a1d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6Core REQUIRED) find_package(Qt6Quick REQUIRED) find_package(Qt6Qml REQUIRED) -find_package(Qt6Charts REQUIRED) find_package(Qt6Gui REQUIRED) find_package(Qt6 COMPONENTS ShaderTools) diff --git a/src/qtAliceVision/CMakeLists.txt b/src/qtAliceVision/CMakeLists.txt index 2a09216a..a9d75609 100644 --- a/src/qtAliceVision/CMakeLists.txt +++ b/src/qtAliceVision/CMakeLists.txt @@ -56,7 +56,6 @@ set(PLUGIN_MOCS # Qt module dependency find_package(Qt6 COMPONENTS Quick REQUIRED) find_package(Qt6 COMPONENTS Qml REQUIRED) -find_package(Qt6 COMPONENTS Charts REQUIRED) find_package(Qt6 REQUIRED COMPONENTS Gui) find_package(Qt6 COMPONENTS ShaderTools) @@ -94,7 +93,6 @@ target_link_libraries(qtAliceVisionPlugin Qt6::Core Qt6::Qml Qt6::Quick - Qt6::Charts Qt6::GuiPrivate ) diff --git a/src/qtAliceVision/MSfMDataStats.cpp b/src/qtAliceVision/MSfMDataStats.cpp index 6d7e7724..eba0562c 100644 --- a/src/qtAliceVision/MSfMDataStats.cpp +++ b/src/qtAliceVision/MSfMDataStats.cpp @@ -6,307 +6,158 @@ namespace qtAliceVision { -void MSfMDataStats::fillLandmarksPerViewSerie(QXYSeries* landmarksPerView) +QVariantList MSfMDataStats::getLandmarksPerViewPoints() { - if (landmarksPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillLandmarksPerViewSerie: no landmarksPerView"; - return; - } - landmarksPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillLandmarksPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbLandmarksPerView.size())); for (std::size_t i = 0; i < _nbLandmarksPerView.size(); ++i) - { - landmarksPerView->append(double(i), double(_nbLandmarksPerView[i])); - } + points.push_back(QPointF(double(i), double(_nbLandmarksPerView[i]))); + return points; } -void MSfMDataStats::fillTracksPerViewSerie(QXYSeries* tracksPerView) +QVariantList MSfMDataStats::getTracksPerViewPoints() { - if (tracksPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillTracksPerViewSerie: no tracksPerView"; - return; - } - tracksPerView->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillTracksPerViewSerie: no SfMData loaded"; - return; - } - - if (_mTracks == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillTracksPerViewSerie: no Tracks loaded"; - return; - } - + QVariantList points; + if (_msfmData == nullptr || _mTracks == nullptr) + return points; + points.reserve(static_cast(_nbTracksPerView.size())); for (std::size_t i = 0; i < _nbTracksPerView.size(); ++i) - { - tracksPerView->append(double(i), double(_nbTracksPerView[i])); - } + points.push_back(QPointF(double(i), double(_nbTracksPerView[i]))); + return points; } -void MSfMDataStats::fillResidualsMinPerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsMinPerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewMin.size())); for (std::size_t i = 0; i < _nbResidualsPerViewMin.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewMin[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewMin[i]))); + return points; } -void MSfMDataStats::fillResidualsMaxPerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsMaxPerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewMax.size())); for (std::size_t i = 0; i < _nbResidualsPerViewMax.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewMax[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewMax[i]))); + return points; } -void MSfMDataStats::fillResidualsMeanPerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsMeanPerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewMean.size())); for (std::size_t i = 0; i < _nbResidualsPerViewMean.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewMean[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewMean[i]))); + return points; } -void MSfMDataStats::fillResidualsMedianPerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsMedianPerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewMedian.size())); for (std::size_t i = 0; i < _nbResidualsPerViewMedian.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewMedian[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewMedian[i]))); + return points; } -void MSfMDataStats::fillResidualsFirstQuartilePerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsFirstQuartilePerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsFirstQuartilePerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsFirstQuartilePerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewFirstQuartile.size())); for (std::size_t i = 0; i < _nbResidualsPerViewFirstQuartile.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewFirstQuartile[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewFirstQuartile[i]))); + return points; } -void MSfMDataStats::fillResidualsThirdQuartilePerViewSerie(QXYSeries* residualsPerView) +QVariantList MSfMDataStats::getResidualsThirdQuartilePerViewPoints() { - if (residualsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsThirdQuartilePerViewSerie: no residualsPerView"; - return; - } - residualsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillResidualsThirdQuartilePerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbResidualsPerViewThirdQuartile.size())); for (std::size_t i = 0; i < _nbResidualsPerViewThirdQuartile.size(); ++i) - { - residualsPerView->append(double(i), double(_nbResidualsPerViewThirdQuartile[i])); - } + points.push_back(QPointF(double(i), double(_nbResidualsPerViewThirdQuartile[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsMinPerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsMinPerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMinPerViewSerie: no observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMinPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewMin.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewMin.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewMin[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewMin[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsMaxPerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsMaxPerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMaxPerViewSerie: no observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMaxPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewMax.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewMax.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewMax[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewMax[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsMeanPerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsMeanPerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMeanPerViewSerie: no observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMeanPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewMean.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewMean.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewMean[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewMean[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsMedianPerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsMedianPerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMedianPerViewSerie: no " - "observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsMedianPerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewMedian.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewMedian.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewMedian[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewMedian[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsFirstQuartilePerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsFirstQuartilePerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsFirstQuartilePerViewSerie: no " - "observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsFirstQuartilePerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewFirstQuartile.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewFirstQuartile.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewFirstQuartile[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewFirstQuartile[i]))); + return points; } -void MSfMDataStats::fillObservationsLengthsThirdQuartilePerViewSerie(QXYSeries* observationsLengthsPerView) +QVariantList MSfMDataStats::getObservationsLengthsThirdQuartilePerViewPoints() { - if (observationsLengthsPerView == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsThirdQuartilePerViewSerie: no " - "observationsLengthsPerView"; - return; - } - observationsLengthsPerView->clear(); - + QVariantList points; if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MSfMDataStats::fillObservationsLengthsThirdQuartilePerViewSerie: no SfMData loaded"; - return; - } - + return points; + points.reserve(static_cast(_nbObservationsLengthsPerViewThirdQuartile.size())); for (std::size_t i = 0; i < _nbObservationsLengthsPerViewThirdQuartile.size(); ++i) - { - observationsLengthsPerView->append(double(i), double(_nbObservationsLengthsPerViewThirdQuartile[i])); - } + points.push_back(QPointF(double(i), double(_nbObservationsLengthsPerViewThirdQuartile[i]))); + return points; } void MSfMDataStats::computeGlobalSfMStats() diff --git a/src/qtAliceVision/MSfMDataStats.hpp b/src/qtAliceVision/MSfMDataStats.hpp index 61e306aa..f832fb07 100644 --- a/src/qtAliceVision/MSfMDataStats.hpp +++ b/src/qtAliceVision/MSfMDataStats.hpp @@ -1,10 +1,10 @@ #pragma once #include +#include #include #include -#include -#include +#include #include #include @@ -57,20 +57,20 @@ class MSfMDataStats : public QObject Q_SLOT void computeGlobalSfMStats(); Q_SLOT void computeGlobalTracksStats(); - Q_INVOKABLE void fillLandmarksPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillTracksPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsMinPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsMaxPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsMeanPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsMedianPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsFirstQuartilePerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualsThirdQuartilePerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsMinPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsMaxPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsMeanPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsMedianPerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsFirstQuartilePerViewSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsThirdQuartilePerViewSerie(QXYSeries* serie); + Q_INVOKABLE QVariantList getLandmarksPerViewPoints(); + Q_INVOKABLE QVariantList getTracksPerViewPoints(); + Q_INVOKABLE QVariantList getResidualsMinPerViewPoints(); + Q_INVOKABLE QVariantList getResidualsMaxPerViewPoints(); + Q_INVOKABLE QVariantList getResidualsMeanPerViewPoints(); + Q_INVOKABLE QVariantList getResidualsMedianPerViewPoints(); + Q_INVOKABLE QVariantList getResidualsFirstQuartilePerViewPoints(); + Q_INVOKABLE QVariantList getResidualsThirdQuartilePerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsMinPerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsMaxPerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsMeanPerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsMedianPerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsFirstQuartilePerViewPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsThirdQuartilePerViewPoints(); MSfMData* getMSfmData() { return _msfmData; } void setMSfmData(qtAliceVision::MSfMData* sfmData); diff --git a/src/qtAliceVision/MViewStats.cpp b/src/qtAliceVision/MViewStats.cpp index 8cdeaf1b..7b28d155 100644 --- a/src/qtAliceVision/MViewStats.cpp +++ b/src/qtAliceVision/MViewStats.cpp @@ -1,225 +1,11 @@ #include "MViewStats.hpp" -#include - -#include #include #include #include namespace qtAliceVision { -void MViewStats::fillResidualFullSerie(QXYSeries* residuals) -{ - if (residuals == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualFullSerie: no residuals"; - return; - } - residuals->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualFullSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualFullSerie: no valid view: "; - return; - } - - std::vector residualHistX = _residualHistogramFull.GetXbinsValue(); - std::vector residualHistY = _residualHistogramFull.GetHist(); - - if (residualHistX.size() != residualHistY.size()) - { - throw std::runtime_error("MViewStats::fillResidualFullSerie: residualHistX & residualHistY size mismatch."); - } - QPen pen(Qt::red, 1, Qt::DashLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < residualHistX.size(); ++i) - { - residuals->append(double(residualHistX[i]), double(residualHistY[i])); - residuals->setPen(pen); - } -} - -void MViewStats::fillResidualViewSerie(QXYSeries* residuals) -{ - if (residuals == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualViewSerie: no residuals"; - return; - } - residuals->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualViewSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillResidualViewSerie: no valid view: "; - return; - } - - std::vector residualHistX = _residualHistogramView.GetXbinsValue(); - std::vector residualHistY = _residualHistogramView.GetHist(); - if (residualHistX.size() != residualHistY.size()) - { - throw std::runtime_error("MViewStats::fillResidualViewSerie: residualHistX & residualHistY size mismatch."); - } - QPen pen(Qt::darkBlue, 3, Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < residualHistX.size(); ++i) - { - residuals->append(double(residualHistX[i]), double(residualHistY[i])); - residuals->setPen(pen); - } -} - -void MViewStats::fillObservationsLengthsFullSerie(QXYSeries* observationsLengths) -{ - if (observationsLengths == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsFullSerie: no observationsLengths"; - return; - } - observationsLengths->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsFullSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsFullSerie: no valid view: "; - return; - } - - std::vector observationsLengthsHistX = _observationsLengthsHistogramFull.GetXbinsValue(); - std::vector observationsLengthsHistY = _observationsLengthsHistogramFull.GetHist(); - if (observationsLengthsHistX.size() != observationsLengthsHistY.size()) - { - throw std::runtime_error("MViewStats::fillObservationsLengthsFullSerie: observationsLengthsHistX & observationsLengthsHistY size mismatch."); - } - QPen pen(Qt::red, 1, Qt::DashLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < observationsLengthsHistX.size(); ++i) - { - observationsLengths->append(double(observationsLengthsHistX[i]), double(observationsLengthsHistY[i])); - observationsLengths->setPen(pen); - } -} - -void MViewStats::fillObservationsLengthsViewSerie(QXYSeries* observationsLengths) -{ - if (observationsLengths == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsViewSerie: no observationsLengths"; - return; - } - observationsLengths->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsViewSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsLengthsViewSerie: no valid view: "; - return; - } - - std::vector observationsLengthsHistX = _observationsLengthsHistogramView.GetXbinsValue(); - std::vector observationsLengthsHistY = _observationsLengthsHistogramView.GetHist(); - if (observationsLengthsHistX.size() != observationsLengthsHistY.size()) - { - throw std::runtime_error("MViewStats::fillObservationsLengthsViewSerie: observationsLengthsHistX & observationsLengthsHistY size mismatch."); - } - QPen pen(Qt::darkBlue, 3, Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < observationsLengthsHistX.size(); ++i) - { - observationsLengths->append(double(observationsLengthsHistX[i]), double(observationsLengthsHistY[i])); - observationsLengths->setPen(pen); - } -} - -void MViewStats::fillObservationsScaleFullSerie(QXYSeries* observationsScale) -{ - if (observationsScale == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleFullSerie: no observationsScale"; - return; - } - observationsScale->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleFullSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleFullSerie: no valid view: "; - return; - } - - std::vector observationsScaleHistX = _observationsScaleHistogramFull.GetXbinsValue(); - std::vector observationsScaleHistY = _observationsScaleHistogramFull.GetHist(); - if (observationsScaleHistX.size() != observationsScaleHistY.size()) - { - throw std::runtime_error("MViewStats::fillObservationsScaleFullSerie: observationsScaleHistX & observationsScaleHistY size mismatch."); - } - QPen pen(Qt::red, 1, Qt::DashLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < observationsScaleHistX.size(); ++i) - { - observationsScale->append(double(observationsScaleHistX[i]), double(observationsScaleHistY[i])); - observationsScale->setPen(pen); - } -} - -void MViewStats::fillObservationsScaleViewSerie(QXYSeries* observationsScale) -{ - if (observationsScale == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleViewSerie: no observationsScale"; - return; - } - observationsScale->clear(); - - if (_msfmData == nullptr) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleViewSerie: no SfMData loaded"; - return; - } - if (_viewId == aliceVision::UndefinedIndexT) - { - qInfo() << "[QtAliceVision] MViewStats::fillObservationsScaleViewSerie: no valid view: "; - return; - } - - std::vector observationsScaleHistX = _observationsScaleHistogramView.GetXbinsValue(); - std::vector observationsScaleHistY = _observationsScaleHistogramView.GetHist(); - if (observationsScaleHistX.size() != observationsScaleHistY.size()) - { - throw std::runtime_error("MViewStats::fillObservationsScaleViewSerie: observationsScaleHistX & observationsScaleHistY size mismatch."); - } - QPen pen(Qt::darkBlue, 3, Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin); - - for (std::size_t i = 0; i < observationsScaleHistX.size(); ++i) - { - observationsScale->append(double(observationsScaleHistX[i]), double(observationsScaleHistY[i])); - observationsScale->setPen(pen); - } -} - void MViewStats::computeViewStats() { _residualHistogramFull = aliceVision::utils::Histogram(); @@ -394,4 +180,124 @@ void MViewStats::setMSfmData(qtAliceVision::MSfMData* sfmData) Q_EMIT sfmDataChanged(); } +QVariantList MViewStats::getResidualFullPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector residualHistX = _residualHistogramFull.GetXbinsValue(); + std::vector residualHistY = _residualHistogramFull.GetHist(); + + if (residualHistX.size() != residualHistY.size()) + throw std::runtime_error("MViewStats::getResidualFullPoints: residualHistX & residualHistY size mismatch."); + + points.reserve(static_cast(residualHistX.size())); + for (std::size_t i = 0; i < residualHistX.size(); ++i) + points.push_back(QPointF(residualHistX[i], double(residualHistY[i]))); + + return points; +} + +QVariantList MViewStats::getResidualViewPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector residualHistX = _residualHistogramView.GetXbinsValue(); + std::vector residualHistY = _residualHistogramView.GetHist(); + + if (residualHistX.size() != residualHistY.size()) + throw std::runtime_error("MViewStats::getResidualViewPoints: residualHistX & residualHistY size mismatch."); + + points.reserve(static_cast(residualHistX.size())); + for (std::size_t i = 0; i < residualHistX.size(); ++i) + points.push_back(QPointF(residualHistX[i], double(residualHistY[i]))); + + return points; +} + +QVariantList MViewStats::getObservationsLengthsFullPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector histX = _observationsLengthsHistogramFull.GetXbinsValue(); + std::vector histY = _observationsLengthsHistogramFull.GetHist(); + + if (histX.size() != histY.size()) + throw std::runtime_error("MViewStats::getObservationsLengthsFullPoints: histX & histY size mismatch."); + + points.reserve(static_cast(histX.size())); + for (std::size_t i = 0; i < histX.size(); ++i) + points.push_back(QPointF(histX[i], double(histY[i]))); + + return points; +} + +QVariantList MViewStats::getObservationsLengthsViewPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector histX = _observationsLengthsHistogramView.GetXbinsValue(); + std::vector histY = _observationsLengthsHistogramView.GetHist(); + + if (histX.size() != histY.size()) + throw std::runtime_error("MViewStats::getObservationsLengthsViewPoints: histX & histY size mismatch."); + + points.reserve(static_cast(histX.size())); + for (std::size_t i = 0; i < histX.size(); ++i) + points.push_back(QPointF(histX[i], double(histY[i]))); + + return points; +} + +QVariantList MViewStats::getObservationsScaleFullPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector histX = _observationsScaleHistogramFull.GetXbinsValue(); + std::vector histY = _observationsScaleHistogramFull.GetHist(); + + if (histX.size() != histY.size()) + throw std::runtime_error("MViewStats::getObservationsScaleFullPoints: histX & histY size mismatch."); + + points.reserve(static_cast(histX.size())); + for (std::size_t i = 0; i < histX.size(); ++i) + points.push_back(QPointF(histX[i], double(histY[i]))); + + return points; +} + +QVariantList MViewStats::getObservationsScaleViewPoints() +{ + QVariantList points; + + if (_msfmData == nullptr || _viewId == aliceVision::UndefinedIndexT) + return points; + + std::vector histX = _observationsScaleHistogramView.GetXbinsValue(); + std::vector histY = _observationsScaleHistogramView.GetHist(); + + if (histX.size() != histY.size()) + throw std::runtime_error("MViewStats::getObservationsScaleViewPoints: histX & histY size mismatch."); + + points.reserve(static_cast(histX.size())); + for (std::size_t i = 0; i < histX.size(); ++i) + points.push_back(QPointF(histX[i], double(histY[i]))); + + return points; +} + } // namespace qtAliceVision diff --git a/src/qtAliceVision/MViewStats.hpp b/src/qtAliceVision/MViewStats.hpp index 34d794c7..0f6efb63 100644 --- a/src/qtAliceVision/MViewStats.hpp +++ b/src/qtAliceVision/MViewStats.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include @@ -47,14 +47,14 @@ class MViewStats : public QObject Q_SIGNAL void viewIdChanged(); Q_SIGNAL void viewStatsChanged(); - Q_INVOKABLE void fillResidualFullSerie(QXYSeries* serie); - Q_INVOKABLE void fillResidualViewSerie(QXYSeries* serie); + Q_INVOKABLE QVariantList getResidualFullPoints(); + Q_INVOKABLE QVariantList getResidualViewPoints(); - Q_INVOKABLE void fillObservationsLengthsFullSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsLengthsViewSerie(QXYSeries* serie); + Q_INVOKABLE QVariantList getObservationsLengthsFullPoints(); + Q_INVOKABLE QVariantList getObservationsLengthsViewPoints(); - Q_INVOKABLE void fillObservationsScaleFullSerie(QXYSeries* serie); - Q_INVOKABLE void fillObservationsScaleViewSerie(QXYSeries* serie); + Q_INVOKABLE QVariantList getObservationsScaleFullPoints(); + Q_INVOKABLE QVariantList getObservationsScaleViewPoints(); Q_SLOT void computeViewStats();