aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside6/PySide6/QtDataVisualization/CMakeLists.txt8
-rw-r--r--sources/pyside6/PySide6/QtDataVisualization/qtdatavisualization_helper.cpp117
-rw-r--r--sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml19
-rw-r--r--sources/pyside6/PySide6/glue/qtdatavisualization.cpp6
-rw-r--r--sources/pyside6/PySide6/qtdatavisualization_helper.h55
5 files changed, 204 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtDataVisualization/CMakeLists.txt b/sources/pyside6/PySide6/QtDataVisualization/CMakeLists.txt
index d50ab1f6c..b11006df1 100644
--- a/sources/pyside6/PySide6/QtDataVisualization/CMakeLists.txt
+++ b/sources/pyside6/PySide6/QtDataVisualization/CMakeLists.txt
@@ -1,5 +1,7 @@
project(QtDataVisualization)
+list(APPEND QtDataVisualization_src "${QtDataVisualization_SOURCE_DIR}/qtdatavisualization_helper.cpp")
+
set(QtDataVisualization_SRC
${QtDataVisualization_GEN_DIR}/qabstract3daxis_wrapper.cpp
${QtDataVisualization_GEN_DIR}/qcategory3daxis_wrapper.cpp
@@ -61,4 +63,8 @@ create_pyside_module(NAME QtDataVisualization
LIBRARIES QtDataVisualization_libraries
DEPS QtDataVisualization_deps
TYPESYSTEM_PATH QtDataVisualization_SOURCE_DIR
- SOURCES QtDataVisualization_SRC)
+ SOURCES QtDataVisualization_SRC
+ STATIC_SOURCES QtDataVisualization_src)
+
+install(FILES ${pyside6_SOURCE_DIR}/qtdatavisualization_helper.h
+ DESTINATION include/PySide6/QtDataVisualization)
diff --git a/sources/pyside6/PySide6/QtDataVisualization/qtdatavisualization_helper.cpp b/sources/pyside6/PySide6/QtDataVisualization/qtdatavisualization_helper.cpp
new file mode 100644
index 000000000..3687f2d3e
--- /dev/null
+++ b/sources/pyside6/PySide6/QtDataVisualization/qtdatavisualization_helper.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtdatavisualization_helper.h"
+
+#include <pyside_numpy.h>
+
+#include <QtCore/QDebug>
+
+namespace QtDataVisualizationHelper {
+
+template <class T>
+static void populateArray(double xStart, double deltaX, double zStart, double deltaZ,
+ qsizetype xSize, qsizetype zSize, qsizetype zStrideBytes,
+ const T *data, QSurfaceDataArray *result)
+{
+ result->reserve(zSize);
+ const qsizetype zStride = zStrideBytes / sizeof(T);
+ double z = zStart;
+ for (qsizetype zi = 0; zi < zSize; ++zi) {
+ auto *row = new QSurfaceDataRow;
+ row->reserve(xSize);
+ result->append(row);
+
+ double x = xStart;
+ auto *rowDataEnd = data + xSize;
+ for (auto *d = data; d < rowDataEnd; ++d) {
+ row->append(QSurfaceDataItem(QVector3D(x, *d, z)));
+ x += deltaX;
+ }
+
+ data += zStride;
+ z += deltaZ;
+ }
+}
+
+QSurfaceDataArray *surfaceDataFromNp(double xStart, double deltaX, double zStart, double deltaZ,
+ PyObject *pyData)
+{
+ static const char funcName[] = "QSurfaceDataProxy.resetArrayNp";
+
+ auto *result = new QSurfaceDataArray;
+
+ PySide::Numpy::View view = PySide::Numpy::View::fromPyObject(pyData);
+ if (!view) {
+ PyErr_Format(PyExc_TypeError, "Invalid array passed to %s", funcName);
+ return result;
+ }
+ if (view.ndim != 2) {
+ PyErr_Format(PyExc_TypeError, "%s expects a 2 dimensional array (%d)", view.ndim);
+ return result;
+ }
+
+ const qsizetype zSize = view.dimensions[0];
+ const qsizetype xSize = view.dimensions[1];
+ if (zSize == 0 || xSize == 0)
+ return result;
+
+ switch (view.type) {
+ case PySide::Numpy::View::Int:
+ populateArray(xStart, deltaX, zStart, deltaZ, xSize, zSize, view.stride[0],
+ reinterpret_cast<const int *>(view.data), result);
+ break;
+ case PySide::Numpy::View::Unsigned:
+ populateArray(xStart, deltaX, zStart, deltaZ, xSize, zSize, view.stride[0],
+ reinterpret_cast<const unsigned *>(view.data), result);
+ break;
+ case PySide::Numpy::View::Float:
+ populateArray(xStart, deltaX, zStart, deltaZ, xSize, zSize, view.stride[0],
+ reinterpret_cast<const float *>(view.data), result);
+ break;
+ case PySide::Numpy::View::Double:
+ populateArray(xStart, deltaX, zStart, deltaZ, xSize, zSize, view.stride[0],
+ reinterpret_cast<const double *>(view.data), result);
+
+ break;
+ }
+ return result;
+}
+
+} // namespace QtDataVisualizationHelper
diff --git a/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml b/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
index 11f89cf8a..a9e4b7263 100644
--- a/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
+++ b/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
@@ -41,6 +41,10 @@
-->
<typesystem package="PySide6.QtDataVisualization">
+ <extra-includes>
+ <include file-name="qtdatavisualization_helper.h" location="global"/>
+ </extra-includes>
+
<load-typesystem name="templates/datavisualization_common.xml" generate="no" />
<load-typesystem name="QtGui/typesystem_gui.xml" generate="no" />
@@ -266,6 +270,10 @@
</object-type>
<value-type name="QSurfaceDataItem"/>
<object-type name="QSurfaceDataProxy">
+ <extra-includes>
+ <include file-name="pyside_numpy.h" location="global"/>
+ <include file-name="qtdatavisualization_helper.h" location="global"/>
+ </extra-includes>
<!-- PYSIDE-1438: Replace all add/set/insertRow() taking a 'QList*' by overloads
taking 'const QList &' since an allocated list needs to be passed. -->
@@ -295,6 +303,17 @@
<parent index="this" action="add"/>
</modify-argument>
</add-function>
+
+ <add-function signature="resetArrayNp(double@x@,double@deltaX@,double@z@,double@deltaZ@,PyArrayObject*@data@)">
+ <inject-code file="../glue/qtdatavisualization.cpp"
+ snippet="qsurfacedataproxy-resetarraynp"/>
+ <inject-documentation format="target" mode="append">
+ Populates the data from a 2 dimensional numpy array containing the y
+ values for a range starting a ``x``, ``z`` with steps of ``deltaX``,
+ ``deltaZ``, respectively.
+ </inject-documentation>
+ </add-function>
+
</object-type>
<object-type name="Q3DBars">
<modify-function signature="addAxis(QAbstract3DAxis*)">
diff --git a/sources/pyside6/PySide6/glue/qtdatavisualization.cpp b/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
index 21c8eb23f..85378f902 100644
--- a/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
+++ b/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
@@ -82,3 +82,9 @@ using ListType = decltype(%2);
using ListType = decltype(%1);
%CPPSELF.resetArray(new ListType(%1));
// @snippet dataproxy-resetarray
+
+// @snippet qsurfacedataproxy-resetarraynp
+auto *data = QtDataVisualizationHelper::surfaceDataFromNp(%1, %2, %3, %4, %5);
+// %CPPSELF.%FUNCTION_NAME
+%CPPSELF.resetArray(data);
+// @snippet qsurfacedataproxy-resetarraynp
diff --git a/sources/pyside6/PySide6/qtdatavisualization_helper.h b/sources/pyside6/PySide6/qtdatavisualization_helper.h
new file mode 100644
index 000000000..9958f1349
--- /dev/null
+++ b/sources/pyside6/PySide6/qtdatavisualization_helper.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTDATAVISUALIZATION_HELPER_H
+#define QTDATAVISUALIZATION_HELPER_H
+
+#include <sbkpython.h>
+
+#include <QtDataVisualization/QSurfaceDataProxy>
+#include <QtCore/QList>
+
+namespace QtDataVisualizationHelper {
+
+QSurfaceDataArray *surfaceDataFromNp(double x, double deltaX, double z, double deltaZ,
+ PyObject *data);
+
+} // namespace QtDataVisualizationHelper
+
+#endif // QTDATAVISUALIZATION_HELPER_H