18 #include "qcustomplot.h"
29 return centers.empty() ? QCPRange() : QCPRange(centers.front(), centers.back());
40 throw std::runtime_error(
"Uninitialised colormap in Data2DPlotController");
49 if (
auto data_item =
dataItem(); data_item) {
50 auto xAxis = data_item->xAxis();
51 auto yAxis = data_item->yAxis();
53 const int nbinsx = xAxis->size();
54 const int nbinsy = yAxis->size();
56 color_map->data()->setSize(nbinsx, nbinsy);
57 color_map->data()->setRange(qcpRange(xAxis), qcpRange(yAxis));
59 auto values = data_item->content();
60 for (
int ix = 0; ix < nbinsx; ++ix)
61 for (
int iy = 0; iy < nbinsy; ++iy)
63 values[
static_cast<size_t>(ix + iy * nbinsx)]);
65 auto [min, max] = std::minmax_element(std::begin(values), std::end(values));
66 color_map->setDataRange(QCPRange(*min, *max));
84 auto on_data_change = [
this](
SessionItem*, int) {
p_impl->update_data_points(); };
87 p_impl->update_data_points();
Item to represent an axis with arbitrary binning.
virtual std::vector< double > binCenters() const =0
Represents two-dimensional data (axes definition and 2d array of values).
Establish communication between QCPColorMap and Data2DItem.
void subscribe() override
Data2DPlotController(QCPColorMap *color_map)
~Data2DPlotController() override
void unsubscribe() override
For necessary manipulations on new item.
std::unique_ptr< Data2DPlotControllerImpl > p_impl
void setOnDataChange(Callbacks::item_int_t f)
Sets callback to be notified on item's data change.
The main object representing an editable/displayable/serializable entity.
materialitems.h Collection of materials to populate MaterialModel.
Data2DPlotController * master
void update_data_points()
Data2DPlotControllerImpl(Data2DPlotController *master, QCPColorMap *color_map)