##// END OF EJS Templates
Handles rendering of plottables (1)...
Alexandre Leroux -
r918:8264fa4b2aa2
parent child
Show More
@@ -0,0 +1,29
1 #ifndef SCIQLOP_PLOTTABLESRENDERINGUTILS_H
2 #define SCIQLOP_PLOTTABLESRENDERINGUTILS_H
3
4 #include <Visualization/VisualizationDefs.h>
5
6 #include <memory>
7
8 class IDataSeries;
9 class QCPColorScale;
10 class QCustomPlot;
11
12 /**
13 * Helper used to handle plottables rendering
14 */
15 struct IPlottablesHelper {
16 virtual ~IPlottablesHelper() noexcept = default;
17
18 /// Set properties of the plottables passed as parameter
19 /// @param plottables the plottables for which to set properties
20 virtual void setProperties(PlottablesMap &plottables) = 0;
21 };
22
23 struct IPlottablesHelperFactory {
24 /// Creates IPlottablesHelper according to a data series
25 static std::unique_ptr<IPlottablesHelper>
26 create(std::shared_ptr<IDataSeries> dataSeries) noexcept;
27 };
28
29 #endif // SCIQLOP_PLOTTABLESRENDERINGUTILS_H
@@ -0,0 +1,65
1 #include "Visualization/PlottablesRenderingUtils.h"
2
3 #include <Data/ScalarSeries.h>
4 #include <Data/VectorSeries.h>
5
6 #include <Visualization/qcustomplot.h>
7
8 namespace {
9
10 /**
11 * Delegate used to set plottables properties
12 */
13 template <typename T, typename Enabled = void>
14 struct PlottablesSetter {
15 static void setProperties(T &, PlottablesMap &)
16 {
17 // Default implementation does nothing
18 }
19 };
20
21 /**
22 * Specialization of PlottablesSetter for scalars and vectors
23 * @sa ScalarSeries
24 * @sa VectorSeries
25 */
26 template <typename T>
27 struct PlottablesSetter<T, typename std::enable_if_t<std::is_base_of<ScalarSeries, T>::value
28 or std::is_base_of<VectorSeries, T>::value> > {
29 static void setProperties(T &dataSeries, PlottablesMap &plottables)
30 {
31 /// @todo ALX
32 }
33 };
34
35 /**
36 * Default implementation of IPlottablesHelper, which takes data series to set plottables properties
37 * @tparam T the data series' type
38 */
39 template <typename T>
40 struct PlottablesHelper : public IPlottablesHelper {
41 explicit PlottablesHelper(T &dataSeries) : m_DataSeries{dataSeries} {}
42
43 void setProperties(PlottablesMap &plottables) override
44 {
45 PlottablesSetter<T>::setProperties(m_DataSeries, plottables);
46 }
47
48 T &m_DataSeries;
49 };
50
51 } // namespace
52
53 std::unique_ptr<IPlottablesHelper>
54 IPlottablesHelperFactory::create(std::shared_ptr<IDataSeries> dataSeries) noexcept
55 {
56 if (auto scalarSeries = std::dynamic_pointer_cast<ScalarSeries>(dataSeries)) {
57 return std::make_unique<PlottablesHelper<ScalarSeries> >(*scalarSeries);
58 }
59 else if (auto vectorSeries = std::dynamic_pointer_cast<VectorSeries>(dataSeries)) {
60 return std::make_unique<PlottablesHelper<VectorSeries> >(*vectorSeries);
61 }
62 else {
63 return std::make_unique<PlottablesHelper<IDataSeries> >(*dataSeries);
64 }
65 }
@@ -78,6 +78,7 gui_sources = [
78 78 'src/Visualization/VisualizationDragDropContainer.cpp',
79 79 'src/Visualization/VisualizationDragWidget.cpp'
80 80 'src/Visualization/AxisRenderingUtils.cpp',
81 'src/Visualization/PlottablesRenderingUtils.cpp'
81 82 ]
82 83
83 84 gui_inc = include_directories(['include'])
General Comments 0
You need to be logged in to leave comments. Login now