##// END OF EJS Templates
Corrects the problem of refreshing synchronized graphs from TimeWidget (1)...
Corrects the problem of refreshing synchronized graphs from TimeWidget (1) Introduces graph flags to set options for the widget

File last commit:

r1110:0e96e473601d
r1271:87a145505c37
Show More
SqpColorScale.cpp
60 lines | 1.8 KiB | text/x-c | CppLexer
Alexandre Leroux
Creates color scale for Sciqlop...
r1008 #include "Visualization/SqpColorScale.h"
Alexandre Leroux
Creates method that computes thresholds of a SqpColorScale
r1018 #include <Data/DataSeriesUtils.h>
#include <Visualization/QCPColorMapIterator.h>
Q_LOGGING_CATEGORY(LOG_SqpColorScale, "SqpColorScale")
Alexandre Leroux
Creates color scale for Sciqlop...
r1008 namespace {
const auto DEFAULT_GRADIENT_PRESET = QCPColorGradient::gpJet;
const auto DEFAULT_RANGE = QCPRange{1.0e3, 1.7e7};
} // namespace
Alexandre Leroux
Creates method that computes thresholds of a SqpColorScale
r1018 std::pair<double, double> SqpColorScale::computeThresholds(const SqpColorScale &scale)
{
auto qcpScale = scale.m_Scale;
auto colorMaps = qcpScale->colorMaps();
if (colorMaps.size() != 1) {
return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::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);
}
Alexandre Leroux
Creates color scale for Sciqlop...
r1008 SqpColorScale::SqpColorScale(QCustomPlot &plot)
: m_Scale{new QCPColorScale{&plot}},
Alexandre Leroux
Minor fix...
r1110 m_AutomaticThreshold{false},
Alexandre Leroux
Creates color scale for Sciqlop...
r1008 m_GradientPreset{DEFAULT_GRADIENT_PRESET}
{
m_Scale->setGradient(m_GradientPreset);
m_Scale->setDataRange(DEFAULT_RANGE);
}
Alexandre Leroux
Updates sqp color scale thresholds (1)...
r1019
void SqpColorScale::updateDataRange() noexcept
{
// Updates data range only if mode is automatic
if (!m_AutomaticThreshold) {
return;
}
double minThreshold, maxThreshold;
std::tie(minThreshold, maxThreshold) = computeThresholds(*this);
if (std::isnan(minThreshold) || std::isnan(maxThreshold)) {
qCCritical(LOG_SqpColorScale())
<< "Can't update data range of color scale: thresholds computed are invalid";
return;
}
// Updates thresholds
m_Scale->setDataRange({minThreshold, maxThreshold});
}