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

View File

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