ncca-ngl 0.3.0__py3-none-any.whl → 0.3.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ncca/ngl/widgets/NGLDebug.log +0 -0
- ncca/ngl/widgets/__init__.py +12 -0
- ncca/ngl/widgets/__main__.py +77 -0
- ncca/ngl/widgets/glsl/phong.frag +27 -0
- ncca/ngl/widgets/glsl/phong.vert +14 -0
- ncca/ngl/widgets/glsl/picking.frag +7 -0
- ncca/ngl/widgets/glsl/picking.vert +7 -0
- ncca/ngl/widgets/lookatwidget.py +77 -0
- ncca/ngl/widgets/mat4widget.py +7 -0
- ncca/ngl/widgets/rgbacolourwidget.py +165 -0
- ncca/ngl/widgets/rgbcolourwidget.py +145 -0
- ncca/ngl/widgets/transformation_widget.py +299 -0
- ncca/ngl/widgets/transformwidget.py +81 -0
- ncca/ngl/widgets/vec2widget.py +141 -0
- ncca/ngl/widgets/vec3widget.py +157 -0
- ncca/ngl/widgets/vec4widget.py +178 -0
- {ncca_ngl-0.3.0.dist-info → ncca_ngl-0.3.2.dist-info}/METADATA +1 -1
- {ncca_ngl-0.3.0.dist-info → ncca_ngl-0.3.2.dist-info}/RECORD +19 -3
- {ncca_ngl-0.3.0.dist-info → ncca_ngl-0.3.2.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
from PySide6.QtCore import Property, QSignalBlocker, Signal
|
|
2
|
+
from PySide6.QtWidgets import QDoubleSpinBox, QFrame, QHBoxLayout, QLabel, QWidget
|
|
3
|
+
|
|
4
|
+
from ncca.ngl import Vec4
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Vec4Widget(QFrame):
|
|
8
|
+
"""A widget for displaying and editing a Vec4 object."""
|
|
9
|
+
|
|
10
|
+
valueChanged = Signal(Vec4)
|
|
11
|
+
xValueChanged = Signal(float)
|
|
12
|
+
yValueChanged = Signal(float)
|
|
13
|
+
zValueChanged = Signal(float)
|
|
14
|
+
wValueChanged = Signal(float)
|
|
15
|
+
|
|
16
|
+
def __init__(self, parent: QWidget | None = None, name: str = "", value: Vec4 = Vec4(0.0, 0.0, 0.0, 1.0)) -> None:
|
|
17
|
+
"""
|
|
18
|
+
Args:
|
|
19
|
+
name: The name of the widget.
|
|
20
|
+
value: The initial value of the widget.
|
|
21
|
+
parent: The parent widget.
|
|
22
|
+
"""
|
|
23
|
+
super().__init__(parent)
|
|
24
|
+
self.setFrameShape(QFrame.Shape.StyledPanel)
|
|
25
|
+
self._value = value
|
|
26
|
+
self._name = name
|
|
27
|
+
layout = QHBoxLayout()
|
|
28
|
+
|
|
29
|
+
self.x_spinbox = self._create_spinbox(self._value.x)
|
|
30
|
+
self.y_spinbox = self._create_spinbox(self._value.y)
|
|
31
|
+
self.z_spinbox = self._create_spinbox(self._value.z)
|
|
32
|
+
self.w_spinbox = self._create_spinbox(self._value.w)
|
|
33
|
+
|
|
34
|
+
self._label = QLabel(self._name)
|
|
35
|
+
layout.addWidget(self._label)
|
|
36
|
+
layout.addWidget(self.x_spinbox)
|
|
37
|
+
layout.addWidget(self.y_spinbox)
|
|
38
|
+
layout.addWidget(self.z_spinbox)
|
|
39
|
+
layout.addWidget(self.w_spinbox)
|
|
40
|
+
self.setLayout(layout)
|
|
41
|
+
|
|
42
|
+
def _create_spinbox(self, value: float) -> QDoubleSpinBox:
|
|
43
|
+
"""Helper method to create and configure a QDoubleSpinBox.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
value: The initial value of the spinbox.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
A configured QDoubleSpinBox.
|
|
50
|
+
"""
|
|
51
|
+
spinbox = QDoubleSpinBox()
|
|
52
|
+
spinbox.setValue(value)
|
|
53
|
+
spinbox.setRange(-5.0, 5.0)
|
|
54
|
+
spinbox.setSingleStep(0.01)
|
|
55
|
+
spinbox.valueChanged.connect(self._on_value_changed)
|
|
56
|
+
return spinbox
|
|
57
|
+
|
|
58
|
+
def get_value(self) -> Vec4:
|
|
59
|
+
"""
|
|
60
|
+
Returns:
|
|
61
|
+
The current value of the widget.
|
|
62
|
+
"""
|
|
63
|
+
return self._value
|
|
64
|
+
|
|
65
|
+
def _on_value_changed(self, value: float) -> None:
|
|
66
|
+
"""This slot is called when the value of a spinbox changes.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
value: The new value of the spinbox.
|
|
70
|
+
"""
|
|
71
|
+
sender = self.sender()
|
|
72
|
+
if sender == self.x_spinbox:
|
|
73
|
+
self._value.x = value
|
|
74
|
+
self.xValueChanged.emit(value)
|
|
75
|
+
elif sender == self.y_spinbox:
|
|
76
|
+
self._value.y = value
|
|
77
|
+
self.yValueChanged.emit(value)
|
|
78
|
+
elif sender == self.z_spinbox:
|
|
79
|
+
self._value.z = value
|
|
80
|
+
self.zValueChanged.emit(value)
|
|
81
|
+
elif sender == self.w_spinbox:
|
|
82
|
+
self._value.w = value
|
|
83
|
+
self.wValueChanged.emit(value)
|
|
84
|
+
# emit the Vec4 value changed signal
|
|
85
|
+
self.valueChanged.emit(self._value)
|
|
86
|
+
|
|
87
|
+
def set_value(self, value: Vec4) -> None:
|
|
88
|
+
"""Sets the value of the widget.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
value: The new value of the widget.
|
|
92
|
+
"""
|
|
93
|
+
with (
|
|
94
|
+
QSignalBlocker(self.x_spinbox),
|
|
95
|
+
QSignalBlocker(self.y_spinbox),
|
|
96
|
+
QSignalBlocker(self.z_spinbox),
|
|
97
|
+
QSignalBlocker(self.w_spinbox),
|
|
98
|
+
):
|
|
99
|
+
self.x_spinbox.setValue(value.x)
|
|
100
|
+
self.y_spinbox.setValue(value.y)
|
|
101
|
+
self.z_spinbox.setValue(value.z)
|
|
102
|
+
self.w_spinbox.setValue(value.w)
|
|
103
|
+
self._value = value
|
|
104
|
+
self.valueChanged.emit(self._value)
|
|
105
|
+
|
|
106
|
+
def get_name(self) -> str:
|
|
107
|
+
"""
|
|
108
|
+
Returns:
|
|
109
|
+
The name of the widget.
|
|
110
|
+
"""
|
|
111
|
+
return self._name
|
|
112
|
+
|
|
113
|
+
def set_range(self, min_val: float, max_val: float) -> None:
|
|
114
|
+
"""Sets the range for all spinboxes.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
min_val: The minimum value.
|
|
118
|
+
max_val: The maximum value.
|
|
119
|
+
"""
|
|
120
|
+
for spinbox in (self.x_spinbox, self.y_spinbox, self.z_spinbox, self.w_spinbox):
|
|
121
|
+
spinbox.setRange(min_val, max_val)
|
|
122
|
+
|
|
123
|
+
def set_x_range(self, min_val: float, max_val: float) -> None:
|
|
124
|
+
"""Sets the range for the x spinbox.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
min_val: The minimum value.
|
|
128
|
+
max_val: The maximum value.
|
|
129
|
+
"""
|
|
130
|
+
self.x_spinbox.setRange(min_val, max_val)
|
|
131
|
+
|
|
132
|
+
def set_y_range(self, min_val: float, max_val: float) -> None:
|
|
133
|
+
"""Sets the range for the y spinbox.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
min_val: The minimum value.
|
|
137
|
+
max_val: The maximum value.
|
|
138
|
+
"""
|
|
139
|
+
self.y_spinbox.setRange(min_val, max_val)
|
|
140
|
+
|
|
141
|
+
def set_z_range(self, min_val: float, max_val: float) -> None:
|
|
142
|
+
"""Sets the range for the z spinbox.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
min_val: The minimum value.
|
|
146
|
+
max_val: The maximum value.
|
|
147
|
+
"""
|
|
148
|
+
self.z_spinbox.setRange(min_val, max_val)
|
|
149
|
+
|
|
150
|
+
def set_w_range(self, min_val: float, max_val: float) -> None:
|
|
151
|
+
"""Sets the range for the w spinbox.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
min_val: The minimum value.
|
|
155
|
+
max_val: The maximum value.
|
|
156
|
+
"""
|
|
157
|
+
self.w_spinbox.setRange(min_val, max_val)
|
|
158
|
+
|
|
159
|
+
def set_single_step(self, step: float) -> None:
|
|
160
|
+
"""Sets the single step for all spinboxes.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
step: The single step value.
|
|
164
|
+
"""
|
|
165
|
+
for spinbox in (self.x_spinbox, self.y_spinbox, self.z_spinbox, self.w_spinbox):
|
|
166
|
+
spinbox.setSingleStep(step)
|
|
167
|
+
|
|
168
|
+
def set_name(self, name: str) -> None:
|
|
169
|
+
"""Sets the name of the widget.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
name: The new name of the widget.
|
|
173
|
+
"""
|
|
174
|
+
self._name = name
|
|
175
|
+
self._label.setText(name)
|
|
176
|
+
|
|
177
|
+
value = Property(Vec4, get_value, set_value)
|
|
178
|
+
name = Property(str, get_name, set_name)
|
|
@@ -61,6 +61,22 @@ ncca/ngl/vec3.py,sha256=N_-LvP0nB0CQrZWG7TJntUl6QDHzIVLP-J1w8wPZTM0,12275
|
|
|
61
61
|
ncca/ngl/vec3_array.py,sha256=fLRC8k0TwcaU7CnR2GmJ0prud4dcvvUX0JTbQH_2W3Y,3535
|
|
62
62
|
ncca/ngl/vec4.py,sha256=mLl23D-3yAxh7GsP44ilRto-PMqIDxJjcZpNl2MyqGQ,6751
|
|
63
63
|
ncca/ngl/vec4_array.py,sha256=PSJXfG0g2AT4oQCLHiVAP6EC5n7vMXRQy0N1rGvv1iw,3426
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
ncca/ngl/widgets/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
ncca/ngl/widgets/__init__.py,sha256=KBrwCwgDLIl-eAp0Q5HQcmNkfZ9q6waPC_4A8-g9PG0,413
|
|
66
|
+
ncca/ngl/widgets/__main__.py,sha256=EetuulVqYJV7zxxFXunb12XA6boza7vm5Raayj3UeMI,2729
|
|
67
|
+
ncca/ngl/widgets/glsl/phong.frag,sha256=iP-4cx0Qh7CS4tDbQmSdDX4huW3_XqleQaXdRBAiZ3A,853
|
|
68
|
+
ncca/ngl/widgets/glsl/phong.vert,sha256=3v1dZba9FTS0ly-3rtEYMTiKPGIzfezDjhu-4m4SwDY,333
|
|
69
|
+
ncca/ngl/widgets/glsl/picking.frag,sha256=372ZzBC1KME9i6lmO7yvUnio9YHp7u6wqiV2cGesTxs,100
|
|
70
|
+
ncca/ngl/widgets/glsl/picking.vert,sha256=Bbn2vZ-lk3nD8qfXfIIaxan2V85XkpWUipYRWCMXobw,128
|
|
71
|
+
ncca/ngl/widgets/lookatwidget.py,sha256=2o1tFE5d9UgWTtBesnhX8bC84ccGcl5nTXxjKOCiM30,3088
|
|
72
|
+
ncca/ngl/widgets/mat4widget.py,sha256=7vXs5h2EtA6zy3rTpXd8dtlOg2CFeQHlrg4a4F1RMak,202
|
|
73
|
+
ncca/ngl/widgets/rgbacolourwidget.py,sha256=dA_Ph7kTtd6ZqSvINt4qCbksMOWrsnT4TeuPfvaw4IQ,5411
|
|
74
|
+
ncca/ngl/widgets/rgbcolourwidget.py,sha256=Z5t_JNUggbCDIpT3kmBtOWXtxrMNJZJxZCBGBOjBFlI,4741
|
|
75
|
+
ncca/ngl/widgets/transformation_widget.py,sha256=qeEYXKEwUVdWBKz3oXiW6kbTm-MyXghoh0rfU7J3yAE,10568
|
|
76
|
+
ncca/ngl/widgets/transformwidget.py,sha256=5Nwo1dVTVVhxTK2tNScyZc4s3nsfePvRh8dbV8Akl60,3487
|
|
77
|
+
ncca/ngl/widgets/vec2widget.py,sha256=w4GqwuiNewc2UI5PrSn6ZZYEaB_cxkpxGgrpMQ82WsM,4330
|
|
78
|
+
ncca/ngl/widgets/vec3widget.py,sha256=PnmqdQ1j77v0PQC-p4lT3mTQd_Qi2Iwv9XzSP1Mpa7M,4934
|
|
79
|
+
ncca/ngl/widgets/vec4widget.py,sha256=mT7c5paDaRxn-vSv7lbffg7isyD8T-6sUxOUMqJXBZs,5631
|
|
80
|
+
ncca_ngl-0.3.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
81
|
+
ncca_ngl-0.3.2.dist-info/METADATA,sha256=qie_EczaljTi9nHFBUpcOLdcs4H-tUKKRHTu5opRegM,1596
|
|
82
|
+
ncca_ngl-0.3.2.dist-info/RECORD,,
|
|
File without changes
|