summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/q3dsurface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/q3dsurface.cpp')
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp321
1 files changed, 321 insertions, 0 deletions
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp
new file mode 100644
index 00000000..0dfc4c93
--- /dev/null
+++ b/src/datavisualization/engine/q3dsurface.cpp
@@ -0,0 +1,321 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "q3dsurface.h"
+#include "q3dsurface_p.h"
+#include "q3dvalueaxis.h"
+#include "qsurfacedataproxy.h"
+
+#include <QMouseEvent>
+
+#include <QDebug>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+Q3DSurface::Q3DSurface()
+ : d_ptr(new Q3DSurfacePrivate(this, geometry()))
+{
+ d_ptr->m_shared->initializeOpenGL();
+ QObject::connect(d_ptr->m_shared, &Abstract3DController::needRender, this,
+ &Q3DWindow::renderLater);
+}
+
+Q3DSurface::~Q3DSurface()
+{
+}
+
+void Q3DSurface::render()
+{
+ d_ptr->m_shared->synchDataToRenderer();
+ d_ptr->m_shared->render();
+}
+
+#if defined(Q_OS_ANDROID)
+void Q3DSurface::mouseDoubleClickEvent(QMouseEvent *event)
+{
+ Q_UNUSED(event)
+}
+void Q3DSurface::touchEvent(QTouchEvent *event)
+{
+ Q_UNUSED(event)
+}
+#endif
+
+void Q3DSurface::mousePressEvent(QMouseEvent *event)
+{
+ d_ptr->m_shared->mousePressEvent(event, event->pos());
+}
+
+void Q3DSurface::mouseReleaseEvent(QMouseEvent *event)
+{
+ d_ptr->m_shared->mouseReleaseEvent(event, event->pos());
+}
+
+void Q3DSurface::mouseMoveEvent(QMouseEvent *event)
+{
+ d_ptr->m_shared->mouseMoveEvent(event, event->pos());
+}
+
+void Q3DSurface::wheelEvent(QWheelEvent *event)
+{
+ Q_UNUSED(event)
+}
+
+void Q3DSurface::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+ d_ptr->m_shared->setWidth(width());
+ d_ptr->m_shared->setHeight(height());
+}
+
+/*!
+ * \property Q3DSurface::gridVisible
+ *
+ * \a visible Flag to enable or disable grid. \c true by default.
+ *
+ * Sets grid drawing on or off.
+ */
+void Q3DSurface::setGridVisible(bool visible)
+{
+ d_ptr->m_shared->setGridEnabled(visible);
+}
+
+bool Q3DSurface::isGridVisible() const
+{
+ return d_ptr->m_shared->gridEnabled();
+}
+
+/*!
+ * \property Q3DSurface::backgroundVisible
+ *
+ * \a visible Flag to enable or disable background. \c true by default.
+ *
+ * Sets backround rendering on or off.
+ */
+void Q3DSurface::setBackgroundVisible(bool visible)
+{
+ d_ptr->m_shared->setBackgroundEnabled(visible);
+}
+
+bool Q3DSurface::isBackgroundVisible() const
+{
+ return d_ptr->m_shared->backgroundEnabled();
+}
+
+void Q3DSurface::setSmoothSurface(bool enable)
+{
+ d_ptr->m_shared->setSmoothSurface(enable);
+}
+
+bool Q3DSurface::smoothSurface() const
+{
+ return d_ptr->m_shared->smoothSurface();
+}
+
+void Q3DSurface::setSurfaceGrid(bool enable)
+{
+ d_ptr->m_shared->setSurfaceGrid(enable);
+}
+
+bool Q3DSurface::surfaceGrid() const
+{
+ return d_ptr->m_shared->surfaceGrid();
+}
+
+void Q3DSurface::setWidth(const int width)
+{
+ d_ptr->m_shared->setWidth(width);
+ QWindow::setWidth(width);
+}
+
+void Q3DSurface::setHeight(const int height)
+{
+ d_ptr->m_shared->setHeight(height);
+ QWindow::setHeight(height);
+}
+
+/*!
+ TODO: REMOVE
+ */
+void Q3DSurface::setSegmentCount(int segmentCount, qreal step, qreal minimum)
+{
+ d_ptr->m_shared->setSegmentCount(GLint(segmentCount), GLfloat(step), GLfloat(minimum));
+}
+
+/*!
+ * Sets a user-defined X-axis. Implicitly calls addAxis() to transfer ownership
+ * of the \a axis to this graph.
+ *
+ * If the \a axis is null, a temporary default axis with no labels and automatically adjusting
+ * range is created.
+ * This temporary axis is destroyed if another \a axis is explicitly set to same orientation.
+ *
+ * \sa addAxis(), releaseAxis()
+ */
+void Q3DSurface::setAxisX(Q3DValueAxis *axis)
+{
+ d_ptr->m_shared->setAxisX(axis);
+}
+
+/*!
+ * \return used X-axis.
+ */
+Q3DValueAxis *Q3DSurface::axisX() const
+{
+ return static_cast<Q3DValueAxis *>(d_ptr->m_shared->axisX());
+}
+
+/*!
+ * Sets a user-defined Y-axis. Implicitly calls addAxis() to transfer ownership
+ * of the \a axis to this graph.
+ *
+ * If the \a axis is null, a temporary default axis with no labels and automatically adjusting
+ * range is created.
+ * This temporary axis is destroyed if another \a axis is explicitly set to same orientation.
+ *
+ * \sa addAxis(), releaseAxis()
+ */
+void Q3DSurface::setAxisY(Q3DValueAxis *axis)
+{
+ d_ptr->m_shared->setAxisY(axis);
+}
+
+/*!
+ * \return used Y-axis.
+ */
+Q3DValueAxis *Q3DSurface::axisY() const
+{
+ return static_cast<Q3DValueAxis *>(d_ptr->m_shared->axisY());
+}
+
+/*!
+ * Sets a user-defined Z-axis. Implicitly calls addAxis() to transfer ownership
+ * of the \a axis to this graph.
+ *
+ * If the \a axis is null, a temporary default axis with no labels and automatically adjusting
+ * range is created.
+ * This temporary axis is destroyed if another \a axis is explicitly set to same orientation.
+ *
+ * \sa addAxis(), releaseAxis()
+ */
+void Q3DSurface::setAxisZ(Q3DValueAxis *axis)
+{
+ d_ptr->m_shared->setAxisZ(axis);
+}
+
+/*!
+ * \return used Z-axis.
+ */
+Q3DValueAxis *Q3DSurface::axisZ() const
+{
+ return static_cast<Q3DValueAxis *>(d_ptr->m_shared->axisZ());
+}
+
+/*!
+ * Adds \a axis to the graph. The axes added via addAxis are not yet taken to use,
+ * addAxis is simply used to give the ownership of the \a axis to the graph.
+ * The \a axis must not be null or added to another graph.
+ *
+ * \sa releaseAxis(), setAxisX(), setAxisY(), setAxisZ()
+ */
+void Q3DSurface::addAxis(Q3DValueAxis *axis)
+{
+ d_ptr->m_shared->addAxis(axis);
+}
+
+/*!
+ * Releases the ownership of the \a axis back to the caller, if it is added to this graph.
+ * If the released \a axis is in use, a new default axis will be created and set active.
+ *
+ * If the default axis is released and added back later, it behaves as any other axis would.
+ *
+ * \sa addAxis(), setAxisX(), setAxisY(), setAxisZ()
+ */
+void Q3DSurface::releaseAxis(Q3DValueAxis *axis)
+{
+ d_ptr->m_shared->releaseAxis(axis);
+}
+
+/*!
+ * \return list of all added axes.
+ *
+ * \sa addAxis()
+ */
+QList<Q3DValueAxis *> Q3DSurface::axes() const
+{
+ QList<Q3DAbstractAxis *> abstractAxes = d_ptr->m_shared->axes();
+ QList<Q3DValueAxis *> retList;
+ foreach (Q3DAbstractAxis *axis, abstractAxes)
+ retList.append(static_cast<Q3DValueAxis *>(axis));
+
+ return retList;
+}
+
+void Q3DSurface::setActiveDataProxy(QSurfaceDataProxy *proxy)
+{
+ d_ptr->m_shared->setActiveDataProxy(proxy);
+}
+
+/*!
+ * \return active data proxy.
+ */
+QSurfaceDataProxy *Q3DSurface::activeDataProxy() const
+{
+ return static_cast<QSurfaceDataProxy *>(d_ptr->m_shared->activeDataProxy());
+}
+
+void Q3DSurface::addDataProxy(QSurfaceDataProxy *proxy)
+{
+ d_ptr->m_shared->addDataProxy(proxy);
+}
+
+void Q3DSurface::releaseDataProxy(QSurfaceDataProxy *proxy)
+{
+ d_ptr->m_shared->releaseDataProxy(proxy);
+}
+
+QList<QSurfaceDataProxy *> Q3DSurface::dataProxies() const
+{
+ QList<QSurfaceDataProxy *> retList;
+ QList<QAbstractDataProxy *> abstractList = d_ptr->m_shared->dataProxies();
+ foreach (QAbstractDataProxy *proxy, abstractList)
+ retList.append(static_cast<QSurfaceDataProxy *>(proxy));
+
+ return retList;
+}
+
+
+void Q3DSurface::setGradientColorAt(qreal pos, const QColor &color)
+{
+ d_ptr->m_shared->setGradientColorAt(pos, color);
+}
+
+/////////////////// PRIVATE ///////////////////////////////////
+
+Q3DSurfacePrivate::Q3DSurfacePrivate(Q3DSurface *q, QRect rect)
+ : q_ptr(q),
+ m_shared(new Surface3DController(rect))
+{
+}
+
+Q3DSurfacePrivate::~Q3DSurfacePrivate()
+{
+ delete m_shared;
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE