q3dviewer 1.1.9__py3-none-any.whl → 1.2.0__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.
@@ -399,8 +399,6 @@ class BaseGLWidget(QOpenGLWidget):
399
399
  points.append((x0 + dx, y0 + dy))
400
400
  points = sorted(points, key=lambda p: (p[0]-x0)**2 + (p[1]-y0)**2)
401
401
 
402
- print("points to check:", len(points))
403
-
404
402
  gl_y0 = height - y0 - 1
405
403
  z = 1.0
406
404
  for x, y in points:
@@ -411,7 +409,6 @@ class BaseGLWidget(QOpenGLWidget):
411
409
  z = glReadPixels(x, gl_y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)
412
410
  z = np.frombuffer(z, dtype=np.float32)[0]
413
411
  if z != 1.0 and z != 0.0:
414
- print("dist to p:", np.sqrt((x - x0)**2 + (y - y0)**2))
415
412
  break
416
413
 
417
414
  if z == 1.0 or z == 0.0:
@@ -70,7 +70,6 @@ class CloudItem(BaseItem):
70
70
  self.need_update_setting = True
71
71
  self.max_cloud_size = 300000000
72
72
  # Enable depth test when full opaque
73
- self.depth_test = depth_test
74
73
  self.path = os.path.dirname(__file__)
75
74
 
76
75
  def add_setting(self, layout):
@@ -126,13 +125,6 @@ class CloudItem(BaseItem):
126
125
  self.slider_v.rangeChanged.connect(self._on_range)
127
126
  layout.addWidget(self.slider_v)
128
127
 
129
- self.checkbox_depth_test = QCheckBox(
130
- "Show front points first (Depth Test)")
131
- self.checkbox_depth_test.setChecked(self.depth_test)
132
- self.checkbox_depth_test.stateChanged.connect(self.set_depthtest)
133
- self._on_color_mode(self.color_mode)
134
- layout.addWidget(self.checkbox_depth_test)
135
-
136
128
  def _on_range(self, lower, upper):
137
129
  self.vmin = lower
138
130
  self.vmax = upper
@@ -192,9 +184,6 @@ class CloudItem(BaseItem):
192
184
  self.size = size
193
185
  self.need_update_setting = True
194
186
 
195
- def set_depthtest(self, state):
196
- self.depth_test = state
197
-
198
187
  def clear(self):
199
188
  data = np.empty((0), self.data_type)
200
189
  self.set_data(data)
@@ -304,15 +293,16 @@ class CloudItem(BaseItem):
304
293
  def paint(self):
305
294
  self.update_render_buffer()
306
295
  self.update_setting()
296
+
307
297
  glEnable(GL_BLEND)
308
298
  glEnable(GL_PROGRAM_POINT_SIZE)
309
299
  glEnable(GL_POINT_SPRITE)
310
300
  glEnable(GL_DEPTH_TEST)
311
301
 
312
- if not self.depth_test:
313
- glDepthFunc(GL_ALWAYS) # Always pass depth test but still write depth
302
+ if self.alpha < 0.9:
303
+ glDepthFunc(GL_ALWAYS)
314
304
  else:
315
- glDepthFunc(GL_LESS) # Normal depth testing
305
+ glDepthFunc(GL_LESS)
316
306
 
317
307
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
318
308
  glUseProgram(self.program)
@@ -37,19 +37,21 @@ class RangeSlider(QSlider):
37
37
  self.active_handle = "upper"
38
38
 
39
39
  def mouseMoveEvent(self, event):
40
- """Override to update handle positions."""
40
+ """Override to update handle positions, always clamp and int for cross-platform safety."""
41
41
  if event.buttons() != Qt.LeftButton:
42
42
  return
43
43
 
44
44
  pos = self.pixelPosToValue(event.pos())
45
+ minv, maxv = self.minimum(), self.maximum()
45
46
  if self.active_handle == "lower":
46
- self.lower_value = max(
47
- self.minimum(), min(pos, self.upper_value - 1))
47
+ self.lower_value = max(minv, min(pos, self.upper_value - 1))
48
+ self.lower_value = int(round(self.lower_value))
48
49
  QToolTip.showText(event.globalPos(), f"Lower: {self.lower_value:.1f}")
49
50
  elif self.active_handle == "upper":
50
- self.upper_value = min(
51
- self.maximum(), max(pos, self.lower_value + 1))
51
+ self.upper_value = min(maxv, max(pos, self.lower_value + 1))
52
+ self.upper_value = int(round(self.upper_value))
52
53
  QToolTip.showText(event.globalPos(), f"Upper: {self.upper_value:.1f}")
54
+ # Always emit clamped, int values
53
55
  self.rangeChanged.emit(self.lower_value, self.upper_value)
54
56
  self.update()
55
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q3dviewer
3
- Version: 1.1.9
3
+ Version: 1.2.0
4
4
  Summary: A library designed for quickly deploying a 3D viewer.
5
5
  Home-page: https://github.com/scomup/q3dviewer
6
6
  Author: Liu Yang
@@ -1,5 +1,5 @@
1
1
  q3dviewer/__init__.py,sha256=cjyfUE5zK6xohDGDQIWfb0DKkWChVznBd7CrVLg7whQ,376
2
- q3dviewer/base_glwidget.py,sha256=iBvYqoFAqh09TDzugqDfu99_JqHL6IrvWOjm1XJJpsk,15395
2
+ q3dviewer/base_glwidget.py,sha256=QxAuZzQSBbzTwpHHqYpiM-Jqv41E4YJmFG4KRF-HruY,15274
3
3
  q3dviewer/base_item.py,sha256=63MarHyoWszPL40ox-vPoOAQ1N4ypekOjoRARdPik-E,1755
4
4
  q3dviewer/glwidget.py,sha256=EmrxPtVQ8RdPK5INKMlpKpVfX0KCfjSKRdGf4cSB1f0,5405
5
5
  q3dviewer/viewer.py,sha256=Vq3ucDlBcBBoiVVGmqG1sRjhLePl50heblx6wJpsc1A,2603
@@ -7,7 +7,7 @@ q3dviewer/Qt/__init__.py,sha256=VJj7Ge6N_81__T9eHFl_YQpa1HyQrlLhMqC_9pUOYtc,2233
7
7
  q3dviewer/custom_items/__init__.py,sha256=cwcNn40MzYXVO9eSzpRknJdzZNKPf2kaEMZy5DCNYcE,567
8
8
  q3dviewer/custom_items/axis_item.py,sha256=-WM2urosqV847zpTpOtxdLjb7y9NJqFCH13qqodcCTg,2572
9
9
  q3dviewer/custom_items/cloud_io_item.py,sha256=Haz-SOUUCPDSHgmKyyyFfP7LXBSEiN4r8xmchQwCm-k,4721
10
- q3dviewer/custom_items/cloud_item.py,sha256=NkZ5rFM_hVxBPMZYml3oX2CI5d0ApJY1wet8I1eIssE,14024
10
+ q3dviewer/custom_items/cloud_item.py,sha256=McZmTKFllQn0ZiVJDzJJnpcZ-jpgzfO3tLPp03rop7E,13520
11
11
  q3dviewer/custom_items/frame_item.py,sha256=bUzww3tSDah0JZeqtU6_cYHhhTVWzXhJVMcAa5pCXHI,7458
12
12
  q3dviewer/custom_items/gaussian_item.py,sha256=JMubpahkTPh0E8ShL3FLTahv0e35ODzjgK5K1i0YXSU,9884
13
13
  q3dviewer/custom_items/grid_item.py,sha256=LDB_MYACoxld-xvz01_MfAf12vLcRkH7R_WtGHHdSgk,4945
@@ -35,10 +35,10 @@ q3dviewer/utils/convert_ros_msg.py,sha256=lNbLIawJfwp3VzygdW3dUXkfSG8atg_CoZbQFm
35
35
  q3dviewer/utils/gl_helper.py,sha256=dRY_kUqyPMr7NTcupUr6_VTvgnj53iE2C0Lk0-oFYsI,1435
36
36
  q3dviewer/utils/helpers.py,sha256=SqR4YTQZi13FKbkVUYgodXce1JJ_YmrHEIRkUmnIUas,3085
37
37
  q3dviewer/utils/maths.py,sha256=zHaPtvVZIuo8xepIXCMeSL9tpx8FahUrq0l4K1oXrBk,8834
38
- q3dviewer/utils/range_slider.py,sha256=9djTxuzmzH54DgSwAljRpLGjsrIJ0hTxhaxFjPxsk8g,4007
39
- q3dviewer-1.1.9.dist-info/LICENSE,sha256=81cMOyNfw8KLb1JnPYngGHJ5W83gSbZEBU9MEP3tl-E,1124
40
- q3dviewer-1.1.9.dist-info/METADATA,sha256=k7pCVA3O73KUcjQEWcO08VM0Vl50gcBopuYVlyu1nU4,8024
41
- q3dviewer-1.1.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
42
- q3dviewer-1.1.9.dist-info/entry_points.txt,sha256=EOjker7XYaBk70ffvNB_knPcfA33Bnlg21ZjEeM1EyI,362
43
- q3dviewer-1.1.9.dist-info/top_level.txt,sha256=HFFDCbGu28txcGe2HPc46A7EPaguBa_b5oH7bufmxHM,10
44
- q3dviewer-1.1.9.dist-info/RECORD,,
38
+ q3dviewer/utils/range_slider.py,sha256=Cs_xrwt6FCDVxGxan7r-ARd5ySwQ50xnCzcmz0dB_X0,4215
39
+ q3dviewer-1.2.0.dist-info/LICENSE,sha256=81cMOyNfw8KLb1JnPYngGHJ5W83gSbZEBU9MEP3tl-E,1124
40
+ q3dviewer-1.2.0.dist-info/METADATA,sha256=RFXc1PDLrmk1xqidvKx4RoU0_aBfK1aYyQK_TZs3bp0,8024
41
+ q3dviewer-1.2.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
42
+ q3dviewer-1.2.0.dist-info/entry_points.txt,sha256=EOjker7XYaBk70ffvNB_knPcfA33Bnlg21ZjEeM1EyI,362
43
+ q3dviewer-1.2.0.dist-info/top_level.txt,sha256=HFFDCbGu28txcGe2HPc46A7EPaguBa_b5oH7bufmxHM,10
44
+ q3dviewer-1.2.0.dist-info/RECORD,,