36 #include "../../exception/exceptionnotpossible.h"
37 #include "../../pappsoexception.h"
51 const QString &x_axis_label,
52 const QString &y_axis_label)
72 const std::vector<double> &keys,
73 const std::vector<double> &values)
75 QCPGraph *graph_p = graph(graph_index);
77 if(graph_p ==
nullptr)
78 qFatal(
"Programming error.");
86 const std::vector<double> &keys,
87 const std::vector<double> &values)
89 if(graph_p ==
nullptr)
90 qFatal(
"Pointer cannot be nullptr.");
92 graph_p->setData(QVector<double>::fromStdVector(keys),
93 QVector<double>::fromStdVector(values));
95 graph_p->setPen(
m_pen);
106 QCPGraph *graph_p = graph(graph_index);
108 if(graph_p ==
nullptr)
109 qFatal(
"Programming error.");
111 graph_p->data().clear();
126 QString(
"The color to be used for the plot graph is invalid."));
131 QCPGraph *graph_p = addGraph();
133 graph_p->setData(QVector<double>::fromStdVector(trace.
xValues()),
134 QVector<double>::fromStdVector(trace.
yValues()));
136 QPen pen = graph()->pen();
138 graph()->setPen(pen);
144 static_cast<void (QCPAbstractPlottable::*)(
bool)
>(
145 &QCPAbstractPlottable::selectionChanged),
154 if(graphCount() == 1)
186 QCPGraph *theGraph = graph(index);
188 if(theGraph ==
nullptr)
190 "basetraceplotwidget.cpp @ indIntegrationLowerRangeForKey() -- ERROR "
191 "theGraph cannot be nullptr.");
197 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
200 QCPDataRange dataRange = graph_data_container_p->dataRange();
202 if(!dataRange.isValid())
205 if(!dataRange.size())
208 if(dataRange.size() > 1)
210 double firstKey = graph_data_container_p->at(dataRange.begin())->key;
211 double lastKey = graph_data_container_p->at(dataRange.end())->key;
223 range.lower = graph_data_container_p->at(dataRange.end() - 2)->key;
224 range.upper = graph_data_container_p->at(dataRange.end() - 1)->key;
235 range.lower = firstKey;
236 range.upper = graph_data_container_p->at(dataRange.begin() + 1)->key;
245 graph_data_container_p->findBegin(key,
true)->key;
247 std::prev(graph_data_container_p->findEnd(key,
true))
260 std::vector<double> keys;
262 QCPGraph *graph_p = graph(graph_index);
264 if(graph_p ==
nullptr)
265 qFatal(
"Programming error.");
267 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
271 auto beginIt = graph_data_container_p->begin();
272 auto endIt = graph_data_container_p->end();
274 for(
auto iter = beginIt; iter != endIt; ++iter)
275 keys.push_back(iter->key);
284 std::vector<double> values;
286 QCPGraph *graph_p = graph(graph_index);
288 if(graph_p ==
nullptr)
289 qFatal(
"Programming error.");
291 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
295 auto beginIt = graph_data_container_p->begin();
296 auto endIt = graph_data_container_p->end();
298 for(
auto iter = beginIt; iter != endIt; ++iter)
299 values.push_back(iter->key);
315 QCPRange key_range(xAxis->range().lower, xAxis->range().upper);
317 if(plottable_p !=
nullptr)
320 return plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
326 int graph_count = graphCount();
333 double temp_min_value = std::numeric_limits<double>::max();
334 double temp_max_value = std::numeric_limits<double>::min();
336 bool found_range =
false;
338 for(
int iter = 0; iter < graph_count; ++iter)
340 QCPGraph *plottable_p = graph(iter);
342 QCPRange value_range =
343 plottable_p->getValueRange(ok, QCP::SignDomain::sdBoth, key_range);
348 if(value_range.lower < temp_min_value)
349 temp_min_value = value_range.lower;
350 if(value_range.upper > temp_max_value)
351 temp_max_value = value_range.upper;
357 return QCPRange(temp_min_value, temp_max_value);
371 QCPAbstractPlottable *plottable_p = plottable(index);
373 if(plottable_p ==
nullptr)
374 qFatal(
"Programming error.");
383 if(graph_p ==
nullptr)
384 qFatal(
"Programming error.");
386 QCPItemTracer tracer(
this);
387 tracer.setGraph(graph_p);
388 tracer.setInterpolating(
true);
389 tracer.setGraphKey(
x);
390 tracer.updatePosition();
392 return tracer.position->value();
399 QCPGraph *graph_p = graph(index);
401 if(graph_p ==
nullptr)
402 qFatal(
"Programming error.");
411 [[maybe_unused]] QCPAxis::SelectablePart part,
433 if(axis->orientation() == Qt::Vertical)
446 yAxis->setRange(value_range);
477 double xLower = xAxis->range().lower;
478 double xUpper = xAxis->range().upper;
481 double yLower = yAxis->range().lower;
482 double yUpper = yAxis->range().upper;
509 xAxis->setRange(xLower, xUpper - xDelta);
545 yAxis->setRange(value_range);
561 yAxis->setRange(yLower, yUpper - yDelta);
612 xAxis->range().lower,
628 yAxis->setRange(value_range);
662 yAxis->setRange(value_range);
693 yAxis->setRange(value_range);
724 QCPGraph *graph_p = graph(index);
733 if(graph_p ==
nullptr)
734 qFatal(
"Programming error. Pointer cannot be nullptr.");
738 QSharedPointer<QCPGraphDataContainer> graph_data_container_p =
742 auto beginIt = graph_data_container_p->begin();
743 auto endIt = graph_data_container_p->end();
745 for(
auto iter = beginIt; iter != endIt; ++iter)
755 QCPGraph *graph_p = graph(index);
757 if(graph_p ==
nullptr)
758 qFatal(
"Programming error.");
760 return toTrace(x_axis_range, graph_p);
766 const QCPGraph *graph_p)
const
772 QSharedPointer<QCPGraphDataContainer> graph_data_container_sp;
774 graph_data_container_sp = graph_p->data();
777 auto beginIt = graph_data_container_sp->findBegin(x_axis_range.lower,
780 auto endIt = graph_data_container_sp->findEnd(x_axis_range.upper,
783 for(
auto iter = beginIt; iter != endIt; ++iter)
784 data_trace.push_back(
DataPoint(iter->key, iter->value));