void RayCloudPlot::updateData() { bool notempty = m_raycloud->updateData(m_start, m_end); // entity()->setEnabled(notempty); if (!notempty) { entity()->removeComponent(m_raycloud); return; } qDebug() << "\tAdding raycloud object"; entity()->addComponent(m_raycloud); // Update ranges // TODO: Consider making this lazy. I.e. whenever requested to scale the plot to datalimits... QList<RangeValues> startlim = ArrayUtil::limitsAxis(m_start, 0); QList<RangeValues> endlim = ArrayUtil::limitsAxis(m_end, 0); QList<qreal> lims; for (int i=0; i<3; ++i) { lims << qMin(startlim[i].min, endlim[i].min); lims << qMax(startlim[i].max, endlim[i].max); } setDataLimits(lims); // qDebug() << "Update data.."; // axis3d()->dumpTree(entity()->parentNode(), 0); }
void LineSegmentPlot::updateDataLimits() { qDebug() << Q_FUNC_INFO; int xLen = xSize(), yLen = ySize(), endXLen = m_endX.size(), endYLen = m_endY.size(); int N = qMin( qMin(xLen, yLen), qMin(endXLen, endYLen) ); m_dataSize = N; qreal minX = Inf, maxX = -Inf, minY = Inf, maxY = -Inf; // Calculate the y limits RangeValues yrng = ArrayUtil::limits(yData()); minY = yrng.min; maxY = yrng.max; yrng = ArrayUtil::limits(m_endY); minY = qMin(minY, yrng.min); maxY = qMax(maxY, yrng.max); RangeValues xrng = ArrayUtil::limits(xData()); minX = xrng.min; maxX = xrng.max; xrng = ArrayUtil::limits(m_endX); minX = qMin(minX, xrng.min); maxX = qMax(maxX, xrng.max); QRectF newLim; newLim.setLeft(minX); newLim.setTop(minY); newLim.setRight(maxX); newLim.setBottom(maxY); setDataLimits(newLim); }
void XYPlot::updateDataLimits() { qDebug() << "XYPlot Update DataLimits"; int xLen = m_xData.length(), yLen = m_yData.length(); if (xLen == 0 || (xLen > 0 && xLen != yLen) || m_settingData) return; // Don't update until the data is good qreal minX = Inf, maxX = -Inf, minY = Inf, maxY = -Inf; for (int i=0; i<yLen; ++i) { qreal px = m_xData[i]; qreal py = m_yData[i]; minX = qMin(minX, px); maxX = qMax(maxX, px); minY = qMin(minY, py); maxY = qMax(maxY, py); } QRectF newLim; newLim.setLeft(minX); newLim.setTop(minY); newLim.setRight(maxX); newLim.setBottom(maxY); setDataLimits(newLim); }