aboutsummaryrefslogtreecommitdiffstats
path: root/examples/datavisualization/surface/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/datavisualization/surface/main.py')
-rw-r--r--examples/datavisualization/surface/main.py363
1 files changed, 167 insertions, 196 deletions
diff --git a/examples/datavisualization/surface/main.py b/examples/datavisualization/surface/main.py
index 3b0bd095a..f43970184 100644
--- a/examples/datavisualization/surface/main.py
+++ b/examples/datavisualization/surface/main.py
@@ -1,42 +1,5 @@
-#############################################################################
-##
-## Copyright (C) 2021 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python examples of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:BSD$
-## You may use this file under the terms of the BSD license as follows:
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are
-## met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in
-## the documentation and/or other materials provided with the
-## distribution.
-## * Neither the name of The Qt Company Ltd nor the names of its
-## contributors may be used to endorse or promote products derived
-## from this software without specific prior written permission.
-##
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import sys
@@ -49,170 +12,178 @@ from PySide6.QtWidgets import (QApplication, QComboBox, QGroupBox, QHBoxLayout,
from surfacegraph import SurfaceGraph
-THEMES = ["Qt", "Primary Colors", "Digia", "Stone Moss", "Army Blue", "Retro", "Ebony", "Isabelle"]
+THEMES = ["Qt", "Primary Colors", "Digia", "Stone Moss", "Army Blue", "Retro",
+ "Ebony", "Isabelle"]
+
+
+class Window(QWidget):
+ def __init__(self, graph, parent=None):
+ super().__init__(parent)
+ self._graph = graph
+ self._container = QWidget.createWindowContainer(self._graph, self,
+ Qt.Widget)
+
+ screen_size = self._graph.screen().size()
+ self._container.setMinimumSize(QSize(screen_size.width() / 2,
+ screen_size.height() / 1.6))
+ self._container.setMaximumSize(screen_size)
+ self._container.setSizePolicy(QSizePolicy.Expanding,
+ QSizePolicy.Expanding)
+ self._container.setFocusPolicy(Qt.StrongFocus)
+
+ h_layout = QHBoxLayout(self)
+ v_layout = QVBoxLayout()
+ h_layout.addWidget(self._container, 1)
+ h_layout.addLayout(v_layout)
+ v_layout.setAlignment(Qt.AlignTop)
+
+ model_group_box = QGroupBox("Model")
+
+ sqrt_sin_model_rb = QRadioButton(self)
+ sqrt_sin_model_rb.setText("Sqrt& Sin")
+ sqrt_sin_model_rb.setChecked(False)
+
+ height_map_model_rb = QRadioButton(self)
+ height_map_model_rb.setText("Height Map")
+ height_map_model_rb.setChecked(False)
+
+ model_vbox = QVBoxLayout()
+ model_vbox.addWidget(sqrt_sin_model_rb)
+ model_vbox.addWidget(height_map_model_rb)
+ model_group_box.setLayout(model_vbox)
+
+ selection_group_box = QGroupBox("Selection Mode")
+
+ mode_none_rb = QRadioButton(self)
+ mode_none_rb.setText("No selection")
+ mode_none_rb.setChecked(False)
+
+ mode_item_rb = QRadioButton(self)
+ mode_item_rb.setText("Item")
+ mode_item_rb.setChecked(False)
+
+ mode_slice_row_rb = QRadioButton(self)
+ mode_slice_row_rb.setText("Row Slice")
+ mode_slice_row_rb.setChecked(False)
+
+ mode_slice_column_rb = QRadioButton(self)
+ mode_slice_column_rb.setText("Column Slice")
+ mode_slice_column_rb.setChecked(False)
+
+ selection_vbox = QVBoxLayout()
+ selection_vbox.addWidget(mode_none_rb)
+ selection_vbox.addWidget(mode_item_rb)
+ selection_vbox.addWidget(mode_slice_row_rb)
+ selection_vbox.addWidget(mode_slice_column_rb)
+ selection_group_box.setLayout(selection_vbox)
+
+ axis_min_slider_x = QSlider(Qt.Horizontal, self)
+ axis_min_slider_x.setMinimum(0)
+ axis_min_slider_x.setTickInterval(1)
+ axis_min_slider_x.setEnabled(True)
+ axis_max_slider_x = QSlider(Qt.Horizontal, self)
+ axis_max_slider_x.setMinimum(1)
+ axis_max_slider_x.setTickInterval(1)
+ axis_max_slider_x.setEnabled(True)
+ axis_min_slider_z = QSlider(Qt.Horizontal, self)
+ axis_min_slider_z.setMinimum(0)
+ axis_min_slider_z.setTickInterval(1)
+ axis_min_slider_z.setEnabled(True)
+ axis_max_slider_z = QSlider(Qt.Horizontal, self)
+ axis_max_slider_z.setMinimum(1)
+ axis_max_slider_z.setTickInterval(1)
+ axis_max_slider_z.setEnabled(True)
+
+ theme_list = QComboBox(self)
+ theme_list.addItems(THEMES)
+
+ color_group_box = QGroupBox("Custom gradient")
+
+ gr_bto_y = QLinearGradient(0, 0, 1, 100)
+ gr_bto_y.setColorAt(1.0, Qt.black)
+ gr_bto_y.setColorAt(0.67, Qt.blue)
+ gr_bto_y.setColorAt(0.33, Qt.red)
+ gr_bto_y.setColorAt(0.0, Qt.yellow)
+
+ pm = QPixmap(24, 100)
+ pmp = QPainter(pm)
+ pmp.setBrush(QBrush(gr_bto_y))
+ pmp.setPen(Qt.NoPen)
+ pmp.drawRect(0, 0, 24, 100)
+ pmp.end()
+
+ gradient_bto_ypb = QPushButton(self)
+ gradient_bto_ypb.setIcon(QIcon(pm))
+ gradient_bto_ypb.setIconSize(QSize(24, 100))
+
+ gr_gto_r = QLinearGradient(0, 0, 1, 100)
+ gr_gto_r.setColorAt(1.0, Qt.darkGreen)
+ gr_gto_r.setColorAt(0.5, Qt.yellow)
+ gr_gto_r.setColorAt(0.2, Qt.red)
+ gr_gto_r.setColorAt(0.0, Qt.darkRed)
+ pmp.begin(pm)
+ pmp.setBrush(QBrush(gr_gto_r))
+ pmp.drawRect(0, 0, 24, 100)
+ pmp.end()
+
+ gradient_gto_rpb = QPushButton(self)
+ gradient_gto_rpb.setIcon(QIcon(pm))
+ gradient_gto_rpb.setIconSize(QSize(24, 100))
+
+ color_hbox = QHBoxLayout()
+ color_hbox.addWidget(gradient_bto_ypb)
+ color_hbox.addWidget(gradient_gto_rpb)
+ color_group_box.setLayout(color_hbox)
+
+ v_layout.addWidget(model_group_box)
+ v_layout.addWidget(selection_group_box)
+ v_layout.addWidget(QLabel("Column range"))
+ v_layout.addWidget(axis_min_slider_x)
+ v_layout.addWidget(axis_max_slider_x)
+ v_layout.addWidget(QLabel("Row range"))
+ v_layout.addWidget(axis_min_slider_z)
+ v_layout.addWidget(axis_max_slider_z)
+ v_layout.addWidget(QLabel("Theme"))
+ v_layout.addWidget(theme_list)
+ v_layout.addWidget(color_group_box)
+
+ self._modifier = SurfaceGraph(self._graph)
+
+ height_map_model_rb.toggled.connect(self._modifier.enable_height_map_model)
+ sqrt_sin_model_rb.toggled.connect(self._modifier.enable_sqrt_sin_model)
+ mode_none_rb.toggled.connect(self._modifier.toggle_mode_none)
+ mode_item_rb.toggled.connect(self._modifier.toggle_mode_item)
+ mode_slice_row_rb.toggled.connect(self._modifier.toggle_mode_slice_row)
+ mode_slice_column_rb.toggled.connect(self._modifier.toggle_mode_slice_column)
+ axis_min_slider_x.valueChanged.connect(self._modifier.adjust_xmin)
+ axis_max_slider_x.valueChanged.connect(self._modifier.adjust_xmax)
+ axis_min_slider_z.valueChanged.connect(self._modifier.adjust_zmin)
+ axis_max_slider_z.valueChanged.connect(self._modifier.adjust_zmax)
+ theme_list.currentIndexChanged[int].connect(self._modifier.change_theme)
+ gradient_bto_ypb.pressed.connect(self._modifier.set_black_to_yellow_gradient)
+ gradient_gto_rpb.pressed.connect(self._modifier.set_green_to_red_gradient)
+
+ self._modifier.set_axis_min_slider_x(axis_min_slider_x)
+ self._modifier.set_axis_max_slider_x(axis_max_slider_x)
+ self._modifier.set_axis_min_slider_z(axis_min_slider_z)
+ self._modifier.set_axis_max_slider_z(axis_max_slider_z)
+
+ sqrt_sin_model_rb.setChecked(True)
+ mode_item_rb.setChecked(True)
+ theme_list.setCurrentIndex(2)
if __name__ == "__main__":
app = QApplication(sys.argv)
graph = Q3DSurface()
- container = QWidget.createWindowContainer(graph)
-
if not graph.hasContext():
- msgBox = QMessageBox()
- msgBox.setText("Couldn't initialize the OpenGL context.")
- msgBox.exec()
+ msg_box = QMessageBox()
+ msg_box.setText("Couldn't initialize the OpenGL context.")
+ msg_box.exec()
sys.exit(-1)
- screenSize = graph.screen().size()
- container.setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6))
- container.setMaximumSize(screenSize)
- container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
- container.setFocusPolicy(Qt.StrongFocus)
-
- widget = QWidget()
- hLayout = QHBoxLayout(widget)
- vLayout = QVBoxLayout()
- hLayout.addWidget(container, 1)
- hLayout.addLayout(vLayout)
- vLayout.setAlignment(Qt.AlignTop)
-
- widget.setWindowTitle("Surface example")
-
- modelGroupBox = QGroupBox("Model")
-
- sqrtSinModelRB = QRadioButton(widget)
- sqrtSinModelRB.setText("Sqrt& Sin")
- sqrtSinModelRB.setChecked(False)
-
- heightMapModelRB = QRadioButton(widget)
- heightMapModelRB.setText("Height Map")
- heightMapModelRB.setChecked(False)
-
- modelVBox = QVBoxLayout()
- modelVBox.addWidget(sqrtSinModelRB)
- modelVBox.addWidget(heightMapModelRB)
- modelGroupBox.setLayout(modelVBox)
-
- selectionGroupBox = QGroupBox("Selection Mode")
-
- modeNoneRB = QRadioButton(widget)
- modeNoneRB.setText("No selection")
- modeNoneRB.setChecked(False)
-
- modeItemRB = QRadioButton(widget)
- modeItemRB.setText("Item")
- modeItemRB.setChecked(False)
-
- modeSliceRowRB = QRadioButton(widget)
- modeSliceRowRB.setText("Row Slice")
- modeSliceRowRB.setChecked(False)
-
- modeSliceColumnRB = QRadioButton(widget)
- modeSliceColumnRB.setText("Column Slice")
- modeSliceColumnRB.setChecked(False)
-
- selectionVBox = QVBoxLayout()
- selectionVBox.addWidget(modeNoneRB)
- selectionVBox.addWidget(modeItemRB)
- selectionVBox.addWidget(modeSliceRowRB)
- selectionVBox.addWidget(modeSliceColumnRB)
- selectionGroupBox.setLayout(selectionVBox)
-
- axisMinSliderX = QSlider(Qt.Horizontal, widget)
- axisMinSliderX.setMinimum(0)
- axisMinSliderX.setTickInterval(1)
- axisMinSliderX.setEnabled(True)
- axisMaxSliderX = QSlider(Qt.Horizontal, widget)
- axisMaxSliderX.setMinimum(1)
- axisMaxSliderX.setTickInterval(1)
- axisMaxSliderX.setEnabled(True)
- axisMinSliderZ = QSlider(Qt.Horizontal, widget)
- axisMinSliderZ.setMinimum(0)
- axisMinSliderZ.setTickInterval(1)
- axisMinSliderZ.setEnabled(True)
- axisMaxSliderZ = QSlider(Qt.Horizontal, widget)
- axisMaxSliderZ.setMinimum(1)
- axisMaxSliderZ.setTickInterval(1)
- axisMaxSliderZ.setEnabled(True)
-
- themeList = QComboBox(widget)
- themeList.addItems(THEMES)
-
- colorGroupBox = QGroupBox("Custom gradient")
-
- grBtoY = QLinearGradient(0, 0, 1, 100)
- grBtoY.setColorAt(1.0, Qt.black)
- grBtoY.setColorAt(0.67, Qt.blue)
- grBtoY.setColorAt(0.33, Qt.red)
- grBtoY.setColorAt(0.0, Qt.yellow)
-
- pm = QPixmap(24, 100)
- pmp = QPainter(pm)
- pmp.setBrush(QBrush(grBtoY))
- pmp.setPen(Qt.NoPen)
- pmp.drawRect(0, 0, 24, 100)
- pmp.end()
-
- gradientBtoYPB = QPushButton(widget)
- gradientBtoYPB.setIcon(QIcon(pm))
- gradientBtoYPB.setIconSize(QSize(24, 100))
-
- grGtoR = QLinearGradient(0, 0, 1, 100)
- grGtoR.setColorAt(1.0, Qt.darkGreen)
- grGtoR.setColorAt(0.5, Qt.yellow)
- grGtoR.setColorAt(0.2, Qt.red)
- grGtoR.setColorAt(0.0, Qt.darkRed)
- pmp.begin(pm)
- pmp.setBrush(QBrush(grGtoR))
- pmp.drawRect(0, 0, 24, 100)
- pmp.end()
-
- gradientGtoRPB = QPushButton(widget)
- gradientGtoRPB.setIcon(QIcon(pm))
- gradientGtoRPB.setIconSize(QSize(24, 100))
-
- colorHBox = QHBoxLayout()
- colorHBox.addWidget(gradientBtoYPB)
- colorHBox.addWidget(gradientGtoRPB)
- colorGroupBox.setLayout(colorHBox)
-
- vLayout.addWidget(modelGroupBox)
- vLayout.addWidget(selectionGroupBox)
- vLayout.addWidget(QLabel("Column range"))
- vLayout.addWidget(axisMinSliderX)
- vLayout.addWidget(axisMaxSliderX)
- vLayout.addWidget(QLabel("Row range"))
- vLayout.addWidget(axisMinSliderZ)
- vLayout.addWidget(axisMaxSliderZ)
- vLayout.addWidget(QLabel("Theme"))
- vLayout.addWidget(themeList)
- vLayout.addWidget(colorGroupBox)
-
- widget.show()
-
- modifier = SurfaceGraph(graph)
-
- heightMapModelRB.toggled.connect(modifier.enableHeightMapModel)
- sqrtSinModelRB.toggled.connect(modifier.enableSqrtSinModel)
- modeNoneRB.toggled.connect(modifier.toggleModeNone)
- modeItemRB.toggled.connect(modifier.toggleModeItem)
- modeSliceRowRB.toggled.connect(modifier.toggleModeSliceRow)
- modeSliceColumnRB.toggled.connect(modifier.toggleModeSliceColumn)
- axisMinSliderX.valueChanged.connect(modifier.adjustXMin)
- axisMaxSliderX.valueChanged.connect(modifier.adjustXMax)
- axisMinSliderZ.valueChanged.connect(modifier.adjustZMin)
- axisMaxSliderZ.valueChanged.connect(modifier.adjustZMax)
- themeList.currentIndexChanged[int].connect(modifier.changeTheme)
- gradientBtoYPB.pressed.connect(modifier.setBlackToYellowGradient)
- gradientGtoRPB.pressed.connect(modifier.setGreenToRedGradient)
-
- modifier.setAxisMinSliderX(axisMinSliderX)
- modifier.setAxisMaxSliderX(axisMaxSliderX)
- modifier.setAxisMinSliderZ(axisMinSliderZ)
- modifier.setAxisMaxSliderZ(axisMaxSliderZ)
-
- sqrtSinModelRB.setChecked(True)
- modeItemRB.setChecked(True)
- themeList.setCurrentIndex(2)
+ window = Window(graph)
+ window.setWindowTitle("Surface example")
+ window.show()
sys.exit(app.exec())