diff --git a/gui/include/Visualization/SqpColorScale.h b/gui/include/Visualization/SqpColorScale.h index 0a436ce..c968fd3 100644 --- a/gui/include/Visualization/SqpColorScale.h +++ b/gui/include/Visualization/SqpColorScale.h @@ -3,6 +3,10 @@ #include +#include + +Q_DECLARE_LOGGING_CATEGORY(LOG_SqpColorScale) + /** * @brief The SqpColorScale struct represents the color scale for some graphs (such as * spectrograms). @@ -11,6 +15,8 @@ * other useful properties for viewing in SciQlop */ struct SqpColorScale { + static std::pair computeThresholds(const SqpColorScale &scale); + explicit SqpColorScale(QCustomPlot &plot); /// QCustomPlot object representing the color scale. diff --git a/gui/src/Visualization/SqpColorScale.cpp b/gui/src/Visualization/SqpColorScale.cpp index ae84524..0060ce1 100644 --- a/gui/src/Visualization/SqpColorScale.cpp +++ b/gui/src/Visualization/SqpColorScale.cpp @@ -1,5 +1,11 @@ #include "Visualization/SqpColorScale.h" +#include + +#include + +Q_LOGGING_CATEGORY(LOG_SqpColorScale, "SqpColorScale") + namespace { const auto DEFAULT_GRADIENT_PRESET = QCPColorGradient::gpJet; @@ -7,6 +13,24 @@ const auto DEFAULT_RANGE = QCPRange{1.0e3, 1.7e7}; } // namespace +std::pair SqpColorScale::computeThresholds(const SqpColorScale &scale) +{ + auto qcpScale = scale.m_Scale; + + auto colorMaps = qcpScale->colorMaps(); + if (colorMaps.size() != 1) { + return {std::numeric_limits::quiet_NaN(), std::numeric_limits::quiet_NaN()}; + } + + // Computes thresholds + auto isLogarithmicScale = qcpScale->dataScaleType() == QCPAxis::stLogarithmic; + auto colorMapData = colorMaps.first()->data(); + QCPColorMapIterator begin{colorMapData, true}; + QCPColorMapIterator end{colorMapData, false}; + + return DataSeriesUtils::thresholds(begin, end, isLogarithmicScale); +} + SqpColorScale::SqpColorScale(QCustomPlot &plot) : m_Scale{new QCPColorScale{&plot}}, m_AutomaticThreshold{false},