q3dviewer 1.1.6__py3-none-any.whl → 1.1.7__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.
@@ -40,7 +40,7 @@ class CloudItem(BaseItem):
40
40
  except ValueError:
41
41
  print(f"Invalid color: {color}, please use matplotlib color format")
42
42
  exit(1)
43
- self.mode_table = {'FLAT': 0, 'I': 1, 'RGB': 2}
43
+ self.mode_table = {'FLAT': 0, 'I': 1, 'RGB': 2, 'GRAY': 3}
44
44
  self.point_type_table = {'PIXEL': 0, 'SQUARE': 1, 'SPHERE': 2}
45
45
  self.color_mode = self.mode_table[color_mode]
46
46
  self.CAPACITY = 10000000 # 10MB * 3 (x,y,z, color) * 4
@@ -89,6 +89,7 @@ class CloudItem(BaseItem):
89
89
  self.combo_color.addItem("flat color")
90
90
  self.combo_color.addItem("intensity")
91
91
  self.combo_color.addItem("RGB")
92
+ self.combo_color.addItem("gray")
92
93
  self.combo_color.setCurrentIndex(self.color_mode)
93
94
  self.combo_color.currentIndexChanged.connect(self._on_color_mode)
94
95
  layout.addWidget(self.combo_color)
@@ -127,10 +128,13 @@ class CloudItem(BaseItem):
127
128
  self.edit_rgb.show()
128
129
  elif (index == self.mode_table['I']): # flat color
129
130
  self.slider_v.show()
131
+ elif (index == self.mode_table['GRAY']): # flat color
132
+ self.slider_v.show()
133
+
130
134
  self.need_update_setting = True
131
135
 
132
136
  def set_color_mode(self, color_mode):
133
- if color_mode in {'FLAT', 'RGB', 'I'}:
137
+ if color_mode in {'FLAT', 'RGB', 'I', 'GRAY'}:
134
138
  try:
135
139
  self.combo_color.setCurrentIndex(self.mode_table[color_mode])
136
140
  except:
@@ -62,6 +62,15 @@ void main()
62
62
  c.y = float((value & uint(0x0000FF00)) >> 8)/255.;
63
63
  c.x = float((value & uint(0x00FF0000)) >> 16)/255.;
64
64
  }
65
+ else if(color_mode == 3)
66
+ {
67
+ uint intensity = value >> 24;
68
+ float range = vmax - vmin;
69
+ float value = 1.0 - (float(intensity) - vmin) / range;
70
+ c.z = value;
71
+ c.y = value;
72
+ c.x = value;
73
+ }
65
74
  else
66
75
  {
67
76
  c.z = float( uint(flat_rgb) & uint(0x000000FF))/255.;
@@ -17,8 +17,7 @@ import cv2
17
17
  import argparse
18
18
  from q3dviewer.utils.convert_ros_msg import convert_pointcloud2_msg, convert_image_msg
19
19
  from q3dviewer.utils.maths import euler_to_matrix, matrix_to_quaternion, matrix_to_euler
20
-
21
-
20
+ from q3dviewer.utils.helpers import rainbow
22
21
  clouds = []
23
22
  remap_info = None
24
23
  K = None
@@ -254,7 +253,7 @@ def image_cb(data):
254
253
  intensity = cloud_local['irgb'][u_mask][valid_points] >> 24
255
254
  vmin = viewer['scan'].vmin
256
255
  vmax = viewer['scan'].vmax
257
- intensity_color = q3d.rainbow(intensity, scalar_min=vmin, scalar_max=vmax).astype(np.uint8)
256
+ intensity_color = rainbow(intensity, scalar_min=vmin, scalar_max=vmax).astype(np.uint8)
258
257
  draw_image = image_un.copy()
259
258
  draw_image = draw_larger_points(draw_image, u, intensity_color, radius)
260
259
  rgb = image_un[u[:, 1], u[:, 0]]
q3dviewer/viewer.py CHANGED
@@ -17,7 +17,7 @@ def handler(signal, frame):
17
17
  class Viewer(QMainWindow):
18
18
  def __init__(self, name='Viewer', win_size=[1920, 1080],
19
19
  gl_widget_class=GLWidget, update_interval=20):
20
- signal.signal(signal.SIGINT, handler)
20
+ self.set_quit_handler(handler)
21
21
  super(Viewer, self).__init__()
22
22
  self.setGeometry(0, 0, win_size[0], win_size[1])
23
23
  self.gl_widget_class = gl_widget_class
@@ -27,6 +27,9 @@ class Viewer(QMainWindow):
27
27
  self.setWindowTitle(name)
28
28
  self.installEventFilter(self)
29
29
 
30
+ def set_quit_handler(self, handler):
31
+ signal.signal(signal.SIGINT, handler)
32
+
30
33
  def init_ui(self):
31
34
  center_widget = QWidget()
32
35
  self.setCentralWidget(center_widget)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q3dviewer
3
- Version: 1.1.6
3
+ Version: 1.1.7
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
@@ -26,7 +26,7 @@ Requires-Dist: matplotlib
26
26
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
27
27
  [![PyPI version](https://badge.fury.io/py/q3dviewer.svg)](https://badge.fury.io/py/q3dviewer)
28
28
 
29
- `q3dviewer` is a library designed for quickly deploying a 3D viewer. It is based on Qt (PySide6) and provides efficient OpenGL items for displaying 3D objects (e.g., point clouds, cameras, and 3D Gaussians). You can use it to visualize your 3D data or set up an efficient viewer application. It is inspired by PyQtGraph but focuses more on efficient 3D rendering.
29
+ `q3dviewer` is a library designed for quickly deploying a 3D viewer. It is based on Qt and provides efficient OpenGL items for displaying 3D objects (e.g., point clouds, cameras, and 3D Gaussians). You can use it to visualize your 3D data or set up an efficient viewer application. It is inspired by PyQtGraph but focuses more on efficient 3D rendering.
30
30
 
31
31
 
32
32
  To show how to use `q3dviewer` as a library, we also provide some [very useful tools](#tools).
@@ -205,7 +205,7 @@ In addition to the standard 3D items provided, you can visualize custom 3D items
205
205
  from OpenGL.GL import *
206
206
  import numpy as np
207
207
  import q3dviewer as q3d
208
- from PySide6.QtWidgets import QLabel, QSpinBox
208
+ from q3dviewer.Qt.QtWidgets import QLabel, QSpinBox
209
209
 
210
210
  class YourItem(q3d.BaseItem):
211
211
  def __init__(self):
@@ -6,13 +6,13 @@ q3dviewer/cloud_viewer.py,sha256=IxxrB6Sl6aPCr9P9QzKHGkMcDP_DjsBWbkmIbsAoIM4,235
6
6
  q3dviewer/gau_io.py,sha256=S6NmqL5vSMgHVxKR-eu4CWCqgZeWBJKYRoOMAwr8Xbo,5890
7
7
  q3dviewer/glwidget.py,sha256=pkMQxPXNxVWp_sZUFX2r4IHuw_So9ok5e-ZdvBhArFQ,4631
8
8
  q3dviewer/utils.py,sha256=evF0d-v17hbTmquC24fmMIp9CsXpUnSQZr4MVy2sfao,2426
9
- q3dviewer/viewer.py,sha256=odDtrieM5M-8C6XFrn414x0P6vaucm0UXU1FmRJ2Um4,2522
9
+ q3dviewer/viewer.py,sha256=Vq3ucDlBcBBoiVVGmqG1sRjhLePl50heblx6wJpsc1A,2603
10
10
  q3dviewer/Qt/__init__.py,sha256=CcwS6oSXBXTMr58JNbRNYcPMVubDD2jiPtJ55DoLm8o,2199
11
11
  q3dviewer/custom_items/__init__.py,sha256=19z_BFXJEm8j31WqREICN31fiFcaIeUqvfo39d02vbk,509
12
12
  q3dviewer/custom_items/axis_item.py,sha256=-WM2urosqV847zpTpOtxdLjb7y9NJqFCH13qqodcCTg,2572
13
13
  q3dviewer/custom_items/camera_frame_item.py,sha256=VBsr3Avly_YWXViIh4DJkGc_HJt227GeOYLpGtbYTOw,5605
14
14
  q3dviewer/custom_items/cloud_io_item.py,sha256=E3Qyc4nuVP-MQAff4zII9JB-xQjVRsviATpqvpLQveM,3507
15
- q3dviewer/custom_items/cloud_item.py,sha256=mVJ4WW1q-2vFnLISzfNkP_D0G9mOe4jD5rMQhhn4G58,12968
15
+ q3dviewer/custom_items/cloud_item.py,sha256=ITOzVq4MAKFIQOGkIgY0Xc2a-yumwHWg3wIvZgjuyGc,13125
16
16
  q3dviewer/custom_items/frame_item.py,sha256=bUzww3tSDah0JZeqtU6_cYHhhTVWzXhJVMcAa5pCXHI,7458
17
17
  q3dviewer/custom_items/gaussian_item.py,sha256=JMubpahkTPh0E8ShL3FLTahv0e35ODzjgK5K1i0YXSU,9884
18
18
  q3dviewer/custom_items/grid_item.py,sha256=LDB_MYACoxld-xvz01_MfAf12vLcRkH7R_WtGHHdSgk,4945
@@ -21,7 +21,7 @@ q3dviewer/custom_items/line_item.py,sha256=rel-lx8AgjDY7qyIecHxHQZzaswRn2ZTiOIjB
21
21
  q3dviewer/custom_items/text_item.py,sha256=VdmoCgXAfqN58fMKydqrdnJHCT53VelRiv_88X9aCfQ,2185
22
22
  q3dviewer/custom_items/trajectory_item.py,sha256=uoKQSrTs_m_m1M8iNAm3peiXnZ9uVPsYQLYas3Gksjg,2754
23
23
  q3dviewer/shaders/cloud_frag.glsl,sha256=tbCsDUp9YlPe0hRWlFS724SH6TtMeLO-GVYROzEElZg,609
24
- q3dviewer/shaders/cloud_vert.glsl,sha256=Vxgw-Zrr0knAK0z4qMXKML6IC4EbffKMwYN2TMXROoI,2117
24
+ q3dviewer/shaders/cloud_vert.glsl,sha256=7VrNDbEVqzatpQOuIfFOLYgtbFVWG0Rxl2Od7DZ-l8U,2357
25
25
  q3dviewer/shaders/gau_frag.glsl,sha256=5_UY84tWDts59bxP8x4I-wgnzY8aGeGuo28wX--LW7E,975
26
26
  q3dviewer/shaders/gau_prep.glsl,sha256=eCT9nm65uz32w8NaDjeGKhyAZh42Aea-QTwr3yQVr9U,7218
27
27
  q3dviewer/shaders/gau_vert.glsl,sha256=NNbVhv_JyqZDK9iXAyBAcIHAtim7G9yWbC9IaUfTL1w,1666
@@ -32,7 +32,7 @@ q3dviewer/tools/example_viewer.py,sha256=sedL18GU3bTTjVJBREPVJ5hTLfSDFq_j91E4qXn
32
32
  q3dviewer/tools/film_maker.py,sha256=CXsI2SocgnQProIWKJ6lvRXtFv4DoO-rm6YNfweAJmw,16678
33
33
  q3dviewer/tools/gaussian_viewer.py,sha256=vIwWmiFhjNmknrEkBLzt2yiegeH7LP3OeNjnGM6GzaI,1633
34
34
  q3dviewer/tools/lidar_calib.py,sha256=hHnsSaQh_Pkdh8tPntt0MgEW26nQyAdC_HQHq4I3sw8,10562
35
- q3dviewer/tools/lidar_cam_calib.py,sha256=XnP3tdtav7OiMp88g88QsiNQToUJKCSP_BXTiIeTEms,11280
35
+ q3dviewer/tools/lidar_cam_calib.py,sha256=AyF3RipBo1R5LYJqm5RR8LUbEovRWJiBUEmUtnrx6e8,11318
36
36
  q3dviewer/tools/ros_viewer.py,sha256=ARB3I5wohY3maP8dCu0O0hxObd6JFKuK2y7AApVgMWA,2551
37
37
  q3dviewer/utils/__init__.py,sha256=dwTNAAebTiKY4ygv2G1O-w6-TbJnmnNVO2UfJXvJhaQ,107
38
38
  q3dviewer/utils/cloud_io.py,sha256=xarfYakY0zgKwvZkgKSPO6b4DEo42hsq3mcvCbK64yg,12134
@@ -41,9 +41,9 @@ q3dviewer/utils/gl_helper.py,sha256=dRY_kUqyPMr7NTcupUr6_VTvgnj53iE2C0Lk0-oFYsI,
41
41
  q3dviewer/utils/helpers.py,sha256=SqR4YTQZi13FKbkVUYgodXce1JJ_YmrHEIRkUmnIUas,3085
42
42
  q3dviewer/utils/maths.py,sha256=zHaPtvVZIuo8xepIXCMeSL9tpx8FahUrq0l4K1oXrBk,8834
43
43
  q3dviewer/utils/range_slider.py,sha256=9djTxuzmzH54DgSwAljRpLGjsrIJ0hTxhaxFjPxsk8g,4007
44
- q3dviewer-1.1.6.dist-info/LICENSE,sha256=81cMOyNfw8KLb1JnPYngGHJ5W83gSbZEBU9MEP3tl-E,1124
45
- q3dviewer-1.1.6.dist-info/METADATA,sha256=OYd2NVqjqX9VkRGPQAsCzOtydm1cl9swhfbWEh6TpZ0,7974
46
- q3dviewer-1.1.6.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
47
- q3dviewer-1.1.6.dist-info/entry_points.txt,sha256=aeUdGH7UIgMZEMFUc-0xPZWspY95GoPdZcZuLceq85g,361
48
- q3dviewer-1.1.6.dist-info/top_level.txt,sha256=HFFDCbGu28txcGe2HPc46A7EPaguBa_b5oH7bufmxHM,10
49
- q3dviewer-1.1.6.dist-info/RECORD,,
44
+ q3dviewer-1.1.7.dist-info/LICENSE,sha256=81cMOyNfw8KLb1JnPYngGHJ5W83gSbZEBU9MEP3tl-E,1124
45
+ q3dviewer-1.1.7.dist-info/METADATA,sha256=ckr5ZX5GWsS3T7JmlUjlPzgwxRizYkjdV_vCAsBZYHo,7969
46
+ q3dviewer-1.1.7.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
47
+ q3dviewer-1.1.7.dist-info/entry_points.txt,sha256=aeUdGH7UIgMZEMFUc-0xPZWspY95GoPdZcZuLceq85g,361
48
+ q3dviewer-1.1.7.dist-info/top_level.txt,sha256=HFFDCbGu28txcGe2HPc46A7EPaguBa_b5oH7bufmxHM,10
49
+ q3dviewer-1.1.7.dist-info/RECORD,,