Kinect demo update

+ took bar and scatter data array optimization into use

Change-Id: I0c5b7a2caf113e916989a97ba4f79d644feacc2b
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
This commit is contained in:
Tomi Korpipää 2013-09-27 13:10:31 +03:00 committed by Miikka Heikkinen
parent d4d99e49c1
commit 3cba32ca2e
2 changed files with 18 additions and 12 deletions

View File

@ -20,9 +20,6 @@
#include "surfacedata.h"
#include "QKinectWrapper.h"
#include <QtDataVisualization/QScatterDataProxy>
#include <QtDataVisualization/QBarDataProxy>
#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
#include <QtDataVisualization/Q3DValueAxis>
#include <QScrollBar>
#include <QSize>
@ -95,7 +92,6 @@ SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars
SurfaceData::~SurfaceData()
{
delete m_surface;
}
void SurfaceData::updateData()
@ -188,9 +184,17 @@ void SurfaceData::setResolution(int selection)
m_scatter->axisX()->setMax(m_resolution.width() / 2);
m_scatter->axisZ()->setMin(-m_resolution.height() / 2);
m_scatter->axisZ()->setMax(m_resolution.height() / 2);
m_scatterDataArray = new QScatterDataArray;
m_scatterDataArray->resize(m_resolution.width() * m_resolution.height());
} else if (m_mode == Bars) {
m_resize = true;
m_resolution /= 4;
m_barDataArray = new QBarDataArray;
m_barDataArray->reserve(m_resolution.height());
for (int i = 0; i < m_resolution.height(); i++) {
QBarDataRow *newProxyRow = new QBarDataRow(m_resolution.width());
m_barDataArray->append(newProxyRow);
}
}
m_statusArea->append(QString(QStringLiteral("<b>Resolution:</b> %1 x %2")).arg(
@ -240,8 +244,7 @@ void SurfaceData::setData(const QImage &image)
int widthBits = imageWidth * 4;
if (m_mode == Scatter) {
QScatterDataArray *dataArray = new QScatterDataArray;
dataArray->resize(imageHeight * imageWidth);
QScatterDataArray *dataArray = m_scatterDataArray;
QScatterDataItem *ptrToDataArray = &dataArray->first();
int limitsX = imageWidth / 2;
@ -260,13 +263,11 @@ void SurfaceData::setData(const QImage &image)
static_cast<QScatterDataProxy *>(m_scatter->activeDataProxy())->resetArray(dataArray);
} else {
QBarDataArray *dataArray = new QBarDataArray;
dataArray->reserve(imageHeight);
for (int i = imageHeight; i > 0; i--, bitCount -= widthBits) {
QBarDataRow *newRow = new QBarDataRow(imageWidth);
QBarDataArray *dataArray = m_barDataArray;
for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) {
QBarDataRow &newRow = *dataArray->at(i);
for (int j = 0; j < imageWidth; j++)
(*newRow)[j] = qreal(bits[bitCount + (j * 4)]);
*dataArray << newRow;
newRow[j] = qreal(bits[bitCount + (j * 4)]);
}
static_cast<QBarDataProxy *>(m_bars->activeDataProxy())->resetArray(dataArray);

View File

@ -23,6 +23,9 @@
#include <QtDataVisualization/Q3DScatter>
#include <QtDataVisualization/Q3DBars>
#include <QtDataVisualization/Q3DSurface>
#include <QtDataVisualization/QScatterDataProxy>
#include <QtDataVisualization/QBarDataProxy>
#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
#include <QTextEdit>
using namespace QtDataVisualization;
@ -68,6 +71,8 @@ private:
QSize m_resolution;
int m_resolutionLevel;
VisualizationMode m_mode;
QScatterDataArray *m_scatterDataArray;
QBarDataArray *m_barDataArray;
QKinect::QKinectWrapper m_kinect;
};