##// END OF EJS Templates
Handles rendering of plottables (2)...
Handles rendering of plottables (2) Handles rendering of scalars and vectors: the method that determines colors for each component is moved from VisualizationGraphHelper to the helper created previously

File last commit:

r918:f75604dde9e3
r918:f75604dde9e3
Show More
PlottablesRenderingUtils.cpp
79 lines | 2.4 KiB | text/x-c | CppLexer
/ gui / src / Visualization / PlottablesRenderingUtils.cpp
#include "Visualization/PlottablesRenderingUtils.h"
#include <Common/ColorUtils.h>
#include <Data/ScalarSeries.h>
#include <Data/VectorSeries.h>
#include <Visualization/qcustomplot.h>
namespace {
/**
* Delegate used to set plottables properties
*/
template <typename T, typename Enabled = void>
struct PlottablesSetter {
static void setProperties(T &, PlottablesMap &)
{
// Default implementation does nothing
}
};
/**
* Specialization of PlottablesSetter for scalars and vectors
* @sa ScalarSeries
* @sa VectorSeries
*/
template <typename T>
struct PlottablesSetter<T, typename std::enable_if_t<std::is_base_of<ScalarSeries, T>::value
or std::is_base_of<VectorSeries, T>::value> > {
static void setProperties(T &dataSeries, PlottablesMap &plottables)
{
// Gets the number of components of the data series
dataSeries.lockRead();
auto componentCount = dataSeries.valuesData()->componentCount();
dataSeries.unlock();
// Generates colors for each component
auto colors = ColorUtils::colors(Qt::blue, Qt::red, componentCount);
// For each component of the data series, creates a QCPGraph to add to the plot
for (auto i = 0; i < componentCount; ++i) {
auto graph = plottables.at(i);
graph->setPen(QPen{colors.at(i)});
}
}
};
/**
* Default implementation of IPlottablesHelper, which takes data series to set plottables properties
* @tparam T the data series' type
*/
template <typename T>
struct PlottablesHelper : public IPlottablesHelper {
explicit PlottablesHelper(T &dataSeries) : m_DataSeries{dataSeries} {}
void setProperties(PlottablesMap &plottables) override
{
PlottablesSetter<T>::setProperties(m_DataSeries, plottables);
}
T &m_DataSeries;
};
} // namespace
std::unique_ptr<IPlottablesHelper>
IPlottablesHelperFactory::create(std::shared_ptr<IDataSeries> dataSeries) noexcept
{
if (auto scalarSeries = std::dynamic_pointer_cast<ScalarSeries>(dataSeries)) {
return std::make_unique<PlottablesHelper<ScalarSeries> >(*scalarSeries);
}
else if (auto vectorSeries = std::dynamic_pointer_cast<VectorSeries>(dataSeries)) {
return std::make_unique<PlottablesHelper<VectorSeries> >(*vectorSeries);
}
else {
return std::make_unique<PlottablesHelper<IDataSeries> >(*dataSeries);
}
}