##// END OF EJS Templates
Some added fake specro and switched to new spwc getting rid of DataFrames...
Some added fake specro and switched to new spwc getting rid of DataFrames Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1464:dce5077d4598
r1464:dce5077d4598
Show More
VisualizationGraphHelper.cpp
556 lines | 18.9 KiB | text/x-c | CppLexer
/ gui / src / Visualization / VisualizationGraphHelper.cpp
Correction for pull request
r243 #include "Visualization/VisualizationGraphHelper.h"
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181 #include "Visualization/qcustomplot.h"
Switched to new TS impl but quite broken!...
r1420 #include <Data/ScalarTimeSerie.h>
#include <Data/SpectrogramTimeSerie.h>
#include <Data/VectorTimeSerie.h>
Alexandre Leroux
Handles creations for scalar series
r182
Switched to new TS impl but quite broken!...
r1420 #include <Variable/Variable2.h>
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181
Correction for pull request
r243 Q_LOGGING_CATEGORY(LOG_VisualizationGraphHelper, "VisualizationGraphHelper")
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181
Switched to new TS impl but quite broken!...
r1420 namespace
{
Alexandre Leroux
Handles creations for scalar series
r182
Switched to new TS impl but quite broken!...
r1420 class SqpDataContainer : public QCPGraphDataContainer
{
Add current progression for thread fix
r364 public:
Switched to new TS impl but quite broken!...
r1420 void appendGraphData(const QCPGraphData& data) { mData.append(data); }
Add current progression for thread fix
r364 };
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 /**
Add mofif for clang format
r591 * Struct used to create plottables, depending on the type of the data series from which to create
* them
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 * @tparam T the data series' type
* @remarks Default implementation can't create plottables
*/
template <typename T, typename Enabled = void>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesCreator
{
WIP Multicomponent TS...
r1431 static PlottablesMap createPlottables(QCustomPlot&, const std::shared_ptr<T>& dataSeries)
{
return {};
}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 };
The mock plugin can now create data with view operation
r235
Switched to new TS impl but quite broken!...
r1420 PlottablesMap createGraphs(QCustomPlot& plot, int nbGraphs)
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 {
Switched to new TS impl but quite broken!...
r1420 PlottablesMap result {};
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280
// Creates {nbGraphs} QCPGraph to add to the plot
Switched to new TS impl but quite broken!...
r1420 for (auto i = 0; i < nbGraphs; ++i)
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 auto graph = plot.addGraph();
Switched to new TS impl but quite broken!...
r1420 result.insert({ i, graph });
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 }
plot.replot();
return result;
}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 /**
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 * Specialization of PlottablesCreator for scalars
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 * @sa ScalarSeries
*/
template <typename T>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<ScalarTimeSerie, T>::value>>
{
WIP Multicomponent TS...
r1431 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
{
return createGraphs(plot, 1);
}
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 };
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 /**
* Specialization of PlottablesCreator for vectors
* @sa VectorSeries
*/
template <typename T>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<VectorTimeSerie, T>::value>>
{
WIP Multicomponent TS...
r1431 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
{
return createGraphs(plot, 3);
}
};
/**
* Specialization of PlottablesCreator for MultiComponentTimeSeries
* @sa VectorSeries
*/
template <typename T>
struct PlottablesCreator<T,
typename std::enable_if_t<std::is_base_of<MultiComponentTimeSerie, T>::value>>
{
static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
{
return createGraphs(plot, dataSeries->size(1));
}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 };
Initialisation of the graph range at creation in a new graphe, or inside...
r548
Alexandre Leroux
Implements spectrograms display (1)...
r902 /**
* Specialization of PlottablesCreator for spectrograms
* @sa SpectrogramSeries
*/
template <typename T>
struct PlottablesCreator<T,
Switched to new TS impl but quite broken!...
r1420 typename std::enable_if_t<std::is_base_of<SpectrogramTimeSerie, T>::value>>
{
WIP Multicomponent TS...
r1431 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
Alexandre Leroux
Implements spectrograms display (1)...
r902 {
Switched to new TS impl but quite broken!...
r1420 PlottablesMap result {};
result.insert({ 0, new QCPColorMap { plot.xAxis, plot.yAxis } });
Alexandre Leroux
Implements spectrograms display (1)...
r902
plot.replot();
return result;
}
};
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 /**
Add mofif for clang format
r591 * Struct used to update plottables, depending on the type of the data series from which to update
* them
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 * @tparam T the data series' type
* @remarks Default implementation can't update plottables
*/
template <typename T, typename Enabled = void>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesUpdater
{
static void setPlotYAxisRange(T&, const DateTimeRange&, QCustomPlot&)
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 {
Alexandre Leroux
(Minor) Removes obsolete code
r905 qCCritical(LOG_VisualizationGraphHelper())
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 << QObject::tr("Can't set plot y-axis range: unmanaged data series type");
}
Switched to new TS impl but quite broken!...
r1420 static void updatePlottables(T&, PlottablesMap&, const DateTimeRange&, bool)
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 {
Alexandre Leroux
(Minor) Removes obsolete code
r905 qCCritical(LOG_VisualizationGraphHelper())
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 << QObject::tr("Can't update plottables: unmanaged data series type");
}
};
Alexandre Leroux
Handles creations for scalar series
r182
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 /**
* Specialization of PlottablesUpdater for scalars and vectors
* @sa ScalarSeries
* @sa VectorSeries
*/
template <typename T>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesUpdater<T, typename std::enable_if_t<std::is_base_of<ScalarTimeSerie, T>::value>>
{
static void setPlotYAxisRange(T& dataSeries, const DateTimeRange& xAxisRange, QCustomPlot& plot)
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 {
auto minValue = 0., maxValue = 0.;
Switched to new TS impl but quite broken!...
r1420 if (auto serie = dynamic_cast<ScalarTimeSerie*>(&dataSeries))
{
Ported MockPlugin to new Variable2 impl and added dummy python plugin...
r1423 if (serie->size())
{
maxValue = (*std::max_element(std::begin(*serie), std::end(*serie))).v();
minValue = (*std::min_element(std::begin(*serie), std::end(*serie))).v();
}
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 }
Switched to new TS impl but quite broken!...
r1420 plot.yAxis->setRange(QCPRange { minValue, maxValue });
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 }
Switched to new TS impl but quite broken!...
r1420 static void updatePlottables(
T& dataSeries, PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes)
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 {
// For each plottable to update, resets its data
Switched to new TS impl but quite broken!...
r1420 for (const auto& plottable : plottables)
{
if (auto graph = dynamic_cast<QCPGraph*>(plottable.second))
{
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 auto dataContainer = QSharedPointer<SqpDataContainer>::create();
Switched to new TS impl but quite broken!...
r1420 if (auto serie = dynamic_cast<ScalarTimeSerie*>(&dataSeries))
{
std::for_each(
std::begin(*serie), std::end(*serie), [&dataContainer](const auto& value) {
dataContainer->appendGraphData(QCPGraphData(value.t(), value.v()));
});
}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 graph->setData(dataContainer);
}
}
The mock plugin can now create data with view operation
r235
Switched to new TS impl but quite broken!...
r1420 if (!plottables.empty())
{
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 auto plot = plottables.begin()->second->parentPlot();
Alexandre Leroux
Handles axes properties
r183
Switched to new TS impl but quite broken!...
r1420 if (rescaleAxes)
{
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 plot->rescaleAxes();
}
}
Alexandre Leroux
Handles creations for scalar series
r182 }
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 };
Switched to new TS impl but quite broken!...
r1420
Alexandre Leroux
Implements spectrograms display (2)...
r903 template <typename T>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesUpdater<T, typename std::enable_if_t<std::is_base_of<VectorTimeSerie, T>::value>>
{
static void setPlotYAxisRange(T& dataSeries, const DateTimeRange& xAxisRange, QCustomPlot& plot)
Alexandre Leroux
Implements spectrograms display (3)...
r904 {
Switched to new TS impl but quite broken!...
r1420 double minValue = 0., maxValue = 0.;
if (auto serie = dynamic_cast<VectorTimeSerie*>(&dataSeries))
{
std::for_each(
std::begin(*serie), std::end(*serie), [&minValue, &maxValue](const auto& v) {
minValue = std::min({ minValue, v.v().x, v.v().y, v.v().z });
maxValue = std::max({ maxValue, v.v().x, v.v().y, v.v().z });
});
Alexandre Leroux
Implements spectrograms display (3)...
r904 }
Switched to new TS impl but quite broken!...
r1420
plot.yAxis->setRange(QCPRange { minValue, maxValue });
Alexandre Leroux
Implements spectrograms display (3)...
r904 }
Switched to new TS impl but quite broken!...
r1420 static void updatePlottables(
T& dataSeries, PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes)
Alexandre Leroux
Implements spectrograms display (2)...
r903 {
Switched to new TS impl but quite broken!...
r1420 // For each plottable to update, resets its data
for (const auto& plottable : plottables)
{
if (auto graph = dynamic_cast<QCPGraph*>(plottable.second))
{
auto dataContainer = QSharedPointer<SqpDataContainer>::create();
if (auto serie = dynamic_cast<VectorTimeSerie*>(&dataSeries))
{
switch (plottable.first)
{
case 0:
std::for_each(std::begin(*serie), std::end(*serie),
[&dataContainer](const auto& value) {
dataContainer->appendGraphData(
QCPGraphData(value.t(), value.v().x));
});
break;
case 1:
std::for_each(std::begin(*serie), std::end(*serie),
[&dataContainer](const auto& value) {
dataContainer->appendGraphData(
QCPGraphData(value.t(), value.v().y));
});
break;
case 2:
std::for_each(std::begin(*serie), std::end(*serie),
[&dataContainer](const auto& value) {
dataContainer->appendGraphData(
QCPGraphData(value.t(), value.v().z));
});
break;
default:
break;
}
Alexandre Leroux
Introduces NaN and zero values in data of the mock spectrogram...
r922 }
Switched to new TS impl but quite broken!...
r1420 graph->setData(dataContainer);
Alexandre Leroux
Implements spectrograms display (2)...
r903 }
}
Switched to new TS impl but quite broken!...
r1420 if (!plottables.empty())
{
auto plot = plottables.begin()->second->parentPlot();
Alexandre Leroux
Implements spectrograms display (2)...
r903
Switched to new TS impl but quite broken!...
r1420 if (rescaleAxes)
{
plot->rescaleAxes();
}
Alexandre Leroux
Implements spectrograms display (2)...
r903 }
}
};
WIP Multicomponent TS...
r1431
template <typename T>
MultiComponent TS almost complete...
r1432 struct PlottablesUpdater<T,
typename std::enable_if_t<std::is_base_of<MultiComponentTimeSerie, T>::value>>
WIP Multicomponent TS...
r1431 {
static void setPlotYAxisRange(T& dataSeries, const DateTimeRange& xAxisRange, QCustomPlot& plot)
{
double minValue = 0., maxValue = 0.;
if (auto serie = dynamic_cast<MultiComponentTimeSerie*>(&dataSeries))
{
Implemented MultiComponent TS initial plot auto-scale...
r1436 std::for_each(
std::begin(*serie), std::end(*serie), [&minValue, &maxValue](const auto& v) {
Some added fake specro and switched to new spwc getting rid of DataFrames...
r1464 minValue = std::min(minValue, std::min_element(v.begin(), v.end())->v());
maxValue = std::max(maxValue, std::max_element(v.begin(), v.end())->v());
Implemented MultiComponent TS initial plot auto-scale...
r1436 });
WIP Multicomponent TS...
r1431 }
plot.yAxis->setRange(QCPRange { minValue, maxValue });
}
static void updatePlottables(
T& dataSeries, PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes)
{
for (const auto& plottable : plottables)
{
if (auto graph = dynamic_cast<QCPGraph*>(plottable.second))
{
auto dataContainer = QSharedPointer<SqpDataContainer>::create();
if (auto serie = dynamic_cast<MultiComponentTimeSerie*>(&dataSeries))
{
MultiComponent TS almost complete...
r1432 // TODO
std::for_each(std::begin(*serie), std::end(*serie),
[&dataContainer, component = plottable.first](const auto& value) {
dataContainer->appendGraphData(
QCPGraphData(value.t(), value[component]));
});
WIP Multicomponent TS...
r1431 }
graph->setData(dataContainer);
}
}
if (!plottables.empty())
{
auto plot = plottables.begin()->second->parentPlot();
if (rescaleAxes)
{
plot->rescaleAxes();
}
}
}
};
Switched to new TS impl but quite broken!...
r1420 /**
* Specialization of PlottablesUpdater for spectrograms
* @sa SpectrogramSeries
*/
template <typename T>
struct PlottablesUpdater<T,
typename std::enable_if_t<std::is_base_of<SpectrogramTimeSerie, T>::value>>
{
static void setPlotYAxisRange(T& dataSeries, const DateTimeRange& xAxisRange, QCustomPlot& plot)
{
// TODO
// double min, max;
// std::tie(min, max) = dataSeries.yBounds();
// if (!std::isnan(min) && !std::isnan(max))
// {
// plot.yAxis->setRange(QCPRange { min, max });
// }
Some added fake specro and switched to new spwc getting rid of DataFrames...
r1464 double minValue = 0., maxValue = 0.;
if (auto serie = dynamic_cast<SpectrogramTimeSerie*>(&dataSeries))
{
auto& yAxis = serie->axis(1);
if (yAxis.size())
{
minValue = *std::min_element(std::cbegin(yAxis), std::cend(yAxis));
maxValue = *std::max_element(std::cbegin(yAxis), std::cend(yAxis));
}
}
plot.yAxis->setRange(QCPRange { minValue, maxValue });
Switched to new TS impl but quite broken!...
r1420 }
static void updatePlottables(
T& dataSeries, PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes)
{
// TODO
Some added fake specro and switched to new spwc getting rid of DataFrames...
r1464 if (plottables.empty())
{
qCDebug(LOG_VisualizationGraphHelper())
<< QObject::tr("Can't update spectrogram: no colormap has been associated");
return;
}
Switched to new TS impl but quite broken!...
r1420
Some added fake specro and switched to new spwc getting rid of DataFrames...
r1464 // // Gets the colormap to update (normally there is only one colormap)
Q_ASSERT(plottables.size() == 1);
auto colormap = dynamic_cast<QCPColorMap*>(plottables.at(0));
Q_ASSERT(colormap != nullptr);
if (auto serie = dynamic_cast<SpectrogramTimeSerie*>(&dataSeries))
{
colormap->data()->setSize(serie->shape()[0], serie->shape()[1]);
if (serie->size(0))
{
colormap->data()->setRange(
QCPRange { serie->begin()->t(), (serie->end() - 1)->t() },
QCPRange { 1., 1000. });
for (int x_index = 0; x_index < serie->shape()[0]; x_index++)
{
auto pixline = (*serie)[x_index];
for (int y_index = 0; y_index < serie->shape()[1]; y_index++)
{
auto value = pixline[y_index];
colormap->data()->setCell(x_index, y_index, value);
if (std::isnan(value))
{
colormap->data()->setAlpha(x_index, y_index, 0);
}
}
}
}
}
Switched to new TS impl but quite broken!...
r1420 // dataSeries.lockRead();
// // Processing spectrogram data for display in QCustomPlot
// auto its = dataSeries.xAxisRange(range.m_TStart, range.m_TEnd);
// // Computes logarithmic y-axis resolution for the spectrogram
// auto yData = its.first->y();
// auto yResolution = DataSeriesUtils::resolution(yData.begin(), yData.end(), true);
// // Generates mesh for colormap
// auto mesh = DataSeriesUtils::regularMesh(its.first, its.second,
// DataSeriesUtils::Resolution { dataSeries.xResolution() }, yResolution);
// dataSeries.unlock();
// colormap->data()->setSize(mesh.m_NbX, mesh.m_NbY);
// if (!mesh.isEmpty())
// {
// colormap->data()->setRange(QCPRange { mesh.m_XMin, mesh.xMax() },
// // y-axis range is converted to linear values
// QCPRange { std::pow(10, mesh.m_YMin), std::pow(10, mesh.yMax()) });
// // Sets values
// auto index = 0;
// for (auto it = mesh.m_Data.begin(), end = mesh.m_Data.end(); it != end; ++it,
// ++index)
// {
// auto xIndex = index % mesh.m_NbX;
// auto yIndex = index / mesh.m_NbX;
// colormap->data()->setCell(xIndex, yIndex, *it);
// // Makes the NaN values to be transparent in the colormap
// if (std::isnan(*it))
// {
// colormap->data()->setAlpha(xIndex, yIndex, 0);
// }
// }
// }
// // Rescales axes
Some added fake specro and switched to new spwc getting rid of DataFrames...
r1464 auto plot = colormap->parentPlot();
setPlotYAxisRange(dataSeries, {}, *plot);
if (rescaleAxes)
{
plot->rescaleAxes();
}
Switched to new TS impl but quite broken!...
r1420 }
};
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 /**
* Helper used to create/update plottables
*/
Switched to new TS impl but quite broken!...
r1420 struct IPlottablesHelper
{
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 virtual ~IPlottablesHelper() noexcept = default;
Switched to new TS impl but quite broken!...
r1420 virtual PlottablesMap create(QCustomPlot& plot) const = 0;
virtual void setYAxisRange(const DateTimeRange& xAxisRange, QCustomPlot& plot) const = 0;
virtual void update(
PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes = false) const = 0;
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 };
/**
* Default implementation of IPlottablesHelper, which takes data series to create/update plottables
* @tparam T the data series' type
*/
template <typename T>
Switched to new TS impl but quite broken!...
r1420 struct PlottablesHelper : public IPlottablesHelper
{
News TS impl seems to pass all tests \o/...
r1421 explicit PlottablesHelper(std::shared_ptr<T> dataSeries) : m_DataSeries { dataSeries } {}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583
Switched to new TS impl but quite broken!...
r1420 PlottablesMap create(QCustomPlot& plot) const override
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 {
WIP Multicomponent TS...
r1431 return PlottablesCreator<T>::createPlottables(plot, m_DataSeries);
Alexandre Leroux
Handles creations for scalar series
r182 }
Switched to new TS impl but quite broken!...
r1420 void update(
PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes) const override
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 {
Switched to new TS impl but quite broken!...
r1420 if (m_DataSeries)
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 PlottablesUpdater<T>::updatePlottables(*m_DataSeries, plottables, range, rescaleAxes);
}
Switched to new TS impl but quite broken!...
r1420 else
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 qCCritical(LOG_VisualizationGraphHelper()) << "Can't update plottables: inconsistency "
"between the type of data series and the "
"type supposed";
}
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 }
Alexandre Leroux
Handles creations for scalar series
r182
Switched to new TS impl but quite broken!...
r1420 void setYAxisRange(const DateTimeRange& xAxisRange, QCustomPlot& plot) const override
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 {
Switched to new TS impl but quite broken!...
r1420 if (m_DataSeries)
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 PlottablesUpdater<T>::setPlotYAxisRange(*m_DataSeries, xAxisRange, plot);
}
Switched to new TS impl but quite broken!...
r1420 else
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 qCCritical(LOG_VisualizationGraphHelper()) << "Can't update plottables: inconsistency "
"between the type of data series and the "
"type supposed";
}
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 }
News TS impl seems to pass all tests \o/...
r1421 std::shared_ptr<T> m_DataSeries;
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 };
Alexandre Leroux
Handles creations for scalar series
r182
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 /// Creates IPlottablesHelper according to the type of data series a variable holds
Switched to new TS impl but quite broken!...
r1420 std::unique_ptr<IPlottablesHelper> createHelper(std::shared_ptr<Variable2> variable) noexcept
Initialisation of the graph range at creation in a new graphe, or inside...
r548 {
Switched to new TS impl but quite broken!...
r1420 switch (variable->type())
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 case DataSeriesType::SCALAR:
Switched to new TS impl but quite broken!...
r1420 return std::make_unique<PlottablesHelper<ScalarTimeSerie>>(
News TS impl seems to pass all tests \o/...
r1421 std::dynamic_pointer_cast<ScalarTimeSerie>(variable->data()));
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 case DataSeriesType::SPECTROGRAM:
Switched to new TS impl but quite broken!...
r1420 return std::make_unique<PlottablesHelper<SpectrogramTimeSerie>>(
News TS impl seems to pass all tests \o/...
r1421 std::dynamic_pointer_cast<SpectrogramTimeSerie>(variable->data()));
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 case DataSeriesType::VECTOR:
Switched to new TS impl but quite broken!...
r1420 return std::make_unique<PlottablesHelper<VectorTimeSerie>>(
News TS impl seems to pass all tests \o/...
r1421 std::dynamic_pointer_cast<VectorTimeSerie>(variable->data()));
WIP Multicomponent TS...
r1431 case DataSeriesType::MULTICOMPONENT:
return std::make_unique<PlottablesHelper<MultiComponentTimeSerie>>(
std::dynamic_pointer_cast<MultiComponentTimeSerie>(variable->data()));
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 default:
// Creates default helper
break;
Initialisation of the graph range at creation in a new graphe, or inside...
r548 }
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280
Switched to new TS impl but quite broken!...
r1420 return std::make_unique<PlottablesHelper<TimeSeries::ITimeSerie>>(nullptr);
Initialisation of the graph range at creation in a new graphe, or inside...
r548 }
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 } // namespace
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181
Switched to new TS impl but quite broken!...
r1420 PlottablesMap VisualizationGraphHelper::create(
std::shared_ptr<Variable2> variable, QCustomPlot& plot) noexcept
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 {
Switched to new TS impl but quite broken!...
r1420 if (variable)
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 auto helper = createHelper(variable);
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 auto plottables = helper->create(plot);
return plottables;
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181 }
Switched to new TS impl but quite broken!...
r1420 else
{
Correction for pull request
r243 qCDebug(LOG_VisualizationGraphHelper())
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181 << QObject::tr("Can't create graph plottables : the variable is null");
Switched to new TS impl but quite broken!...
r1420 return PlottablesMap {};
Alexandre Leroux
Creates factory that is responsible of creation of QCustomPlot components relative to a variable
r181 }
}
The mock plugin can now create data with view operation
r235
Switched to new TS impl but quite broken!...
r1420 void VisualizationGraphHelper::setYAxisRange(
std::shared_ptr<Variable2> variable, QCustomPlot& plot) noexcept
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 {
Switched to new TS impl but quite broken!...
r1420 if (variable)
{
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 auto helper = createHelper(variable);
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 helper->setYAxisRange(variable->range(), plot);
}
Switched to new TS impl but quite broken!...
r1420 else
{
Alexandre Leroux
Refactors VisualizationGraphWidget::setYRange()...
r900 qCDebug(LOG_VisualizationGraphHelper())
<< QObject::tr("Can't set y-axis range of plot: the variable is null");
}
}
Switched to new TS impl but quite broken!...
r1420 void VisualizationGraphHelper::updateData(
PlottablesMap& plottables, std::shared_ptr<Variable2> variable, const DateTimeRange& dateTime)
The mock plugin can now create data with view operation
r235 {
Alexandre Leroux
Updates VisualizationGraphHelper to use variable's type instead of dataseries
r1280 auto helper = createHelper(variable);
Alexandre Leroux
Updates VisualizationGraphHelper to handle vectors
r583 helper->update(plottables, dateTime);
The mock plugin can now create data with view operation
r235 }