Source code for window

"""
Qt-based Cube Renderer using PicoGL's GLBase

This example demonstrates how to create a simple cube renderer using Qt's QOpenGLWidget
through PicoGL's GLBase class. It's designed for legacy displays and systems that
prefer Qt over GLUT.

Features:
- Legacy OpenGL rendering (compatible with older systems)
- Mouse controls for rotation and zoom
- Colorful cube with vertex colors
- Qt-based window management
- Cross-platform compatibility

Requirements:
- PySide6 (Qt6)
- PyOpenGL
- NumPy
- PicoGL

Usage:
    python examples/qt_cube.py
"""

import sys
from typing import Optional

from picogl.mode import GLMode
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QMainWindow, QVBoxLayout, QWidget

from elmo.ui.widgets.gl.mol.base import GLMolBase


[docs] class LegacyQtObjectWindow(QMainWindow): """ Main window for the Qt Object renderer """ def __init__(self, parent, gl_mode: GLMode = GLMode.LEGACY): super().__init__()
[docs] self.parent = parent
[docs] self.gl_mode = gl_mode
[docs] self.layout: Optional[QVBoxLayout] = None
[docs] self.gl_widget: Optional[GLMolBase] = None
self.setWindowTitle("PicoGL Qt Object Renderer - Legacy OpenGL") self.setGeometry(100, 100, 800, 600)
[docs] self.object_file_path = None
self.ui_init()
[docs] def ui_init(self): # Create central widget central_widget = QWidget() self.setCentralWidget(central_widget) # Create layout self.layout = QVBoxLayout(central_widget) # Create info label self.set_layout(self.layout)
[docs] def set_layout(self, layout): raise NotImplementedError("To be implemented in subclass")
[docs] def toggle_auto_rotate(self): """Toggle auto-rotation""" self.gl_widget.auto_rotate = not self.gl_widget.auto_rotate print(f"Auto-rotation: {'ON' if self.gl_widget.auto_rotate else 'OFF'}")
[docs] def reset_view(self): """Reset the view""" self.gl_widget.rotation_x = 0.0 self.gl_widget.rotation_y = 0.0 self.gl_widget.zoom = 5.0 self.gl_widget.mvp_parameters.rotation_x = 0.0 self.gl_widget.mvp_parameters.rotation_y = 0.0 self.gl_widget.mvp_parameters.pan_x = 0.0 self.gl_widget.mvp_parameters.pan_y = 0.0 self.gl_widget.camera_parameters.rotation_x_axis = 0.0 self.gl_widget.camera_parameters.rotation_y_axis = 0.0 self.gl_widget.camera_parameters.rotation_z_axis = 0.0 self.gl_widget.camera_parameters.translation_x_axis = 0.0 self.gl_widget.camera_parameters.translation_y_axis = 0.0 self.gl_widget.camera_parameters.translation_zoom = 0.0 print("View reset")
[docs] def keyPressEvent(self, event): """Handle keyboard input at window level""" if event.key() == Qt.Key_Escape: self.close() else: super().keyPressEvent(event)