q3dviewer 1.1.1__tar.gz → 1.1.2__tar.gz
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.
- {q3dviewer-1.1.1/q3dviewer.egg-info → q3dviewer-1.1.2}/PKG-INFO +1 -1
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/film_maker.py +25 -10
- {q3dviewer-1.1.1 → q3dviewer-1.1.2/q3dviewer.egg-info}/PKG-INFO +1 -1
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/setup.py +1 -1
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/LICENSE +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/README.md +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/pyproject.toml +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/__init__.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/base_glwidget.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/base_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/__init__.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/axis_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/cloud_io_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/cloud_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/frame_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/gaussian_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/grid_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/image_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/line_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/custom_items/text_item.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/glwidget.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/cloud_frag.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/cloud_vert.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/gau_frag.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/gau_prep.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/gau_vert.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/shaders/sort_by_key.glsl +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/__init__.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/cloud_viewer.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/example_viewer.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/gaussian_viewer.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/lidar_calib.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/lidar_cam_calib.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/tools/ros_viewer.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/__init__.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/cloud_io.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/convert_ros_msg.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/gl_helper.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/maths.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/utils/range_slider.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer/viewer.py +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer.egg-info/SOURCES.txt +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer.egg-info/dependency_links.txt +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer.egg-info/entry_points.txt +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer.egg-info/requires.txt +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/q3dviewer.egg-info/top_level.txt +0 -0
- {q3dviewer-1.1.1 → q3dviewer-1.1.2}/setup.cfg +0 -0
|
@@ -107,7 +107,7 @@ class CMMViewer(q3d.Viewer):
|
|
|
107
107
|
label_codec = QLabel("Codec:")
|
|
108
108
|
codec_layout.addWidget(label_codec)
|
|
109
109
|
self.codec_combo = QComboBox()
|
|
110
|
-
self.codec_combo.addItems(["
|
|
110
|
+
self.codec_combo.addItems(["libx264", "mjpeg", "mpeg4", "libx265"])
|
|
111
111
|
codec_layout.addWidget(self.codec_combo)
|
|
112
112
|
setting_layout.addLayout(codec_layout)
|
|
113
113
|
|
|
@@ -143,6 +143,8 @@ class CMMViewer(q3d.Viewer):
|
|
|
143
143
|
dock_widget = QDockWidget("Settings", self)
|
|
144
144
|
dock_widget.setWidget(QWidget())
|
|
145
145
|
dock_widget.widget().setLayout(setting_layout)
|
|
146
|
+
# Hide close and undock buttons, I don't want the user to close the dock
|
|
147
|
+
dock_widget.setFeatures(QDockWidget.DockWidgetMovable)
|
|
146
148
|
self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock_widget)
|
|
147
149
|
|
|
148
150
|
# Add the dock widget to the main layout
|
|
@@ -308,14 +310,16 @@ class CMMViewer(q3d.Viewer):
|
|
|
308
310
|
|
|
309
311
|
def start_recording(self):
|
|
310
312
|
self.is_recording = True
|
|
311
|
-
self.
|
|
313
|
+
self.prv_frame_shape = None
|
|
312
314
|
video_path = self.video_path_edit.text()
|
|
313
315
|
codec = self.codec_combo.currentText()
|
|
314
316
|
self.play_button.setStyleSheet("background-color: red")
|
|
315
317
|
self.play_button.setText("Recording")
|
|
316
318
|
self.writer = imageio.get_writer(video_path,
|
|
317
319
|
fps=self.update_interval,
|
|
318
|
-
codec=codec
|
|
320
|
+
codec=codec,
|
|
321
|
+
quality=10,
|
|
322
|
+
pixelformat='yuvj420p')
|
|
319
323
|
# disable the all the frame_item while recording
|
|
320
324
|
for frame in self.key_frames:
|
|
321
325
|
frame.item.hide()
|
|
@@ -323,6 +327,7 @@ class CMMViewer(q3d.Viewer):
|
|
|
323
327
|
|
|
324
328
|
def stop_recording(self, save_movie=True):
|
|
325
329
|
self.is_recording = False
|
|
330
|
+
self.prv_frame_shape = None
|
|
326
331
|
self.record_checkbox.setChecked(False)
|
|
327
332
|
# enable the all the frame_item after recording
|
|
328
333
|
for frame in self.key_frames:
|
|
@@ -342,17 +347,27 @@ class CMMViewer(q3d.Viewer):
|
|
|
342
347
|
|
|
343
348
|
def record_frame(self):
|
|
344
349
|
frame = self.glwidget.capture_frame()
|
|
345
|
-
|
|
350
|
+
|
|
351
|
+
# restart recording if the window size changes
|
|
352
|
+
if self.prv_frame_shape is not None and frame.shape != self.prv_frame_shape:
|
|
353
|
+
self.writer.close()
|
|
354
|
+
self.start_recording()
|
|
355
|
+
return
|
|
356
|
+
self.prv_frame_shape = frame.shape
|
|
357
|
+
|
|
346
358
|
height, width, _ = frame.shape
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
359
|
+
# Adjust frame dimensions to be multiples of 16
|
|
360
|
+
new_height = height - (height % 16)
|
|
361
|
+
new_width = width - (width % 16)
|
|
362
|
+
frame = frame[:new_height, :new_width, :]
|
|
363
|
+
frame = np.ascontiguousarray(frame)
|
|
351
364
|
try:
|
|
352
365
|
self.writer.append_data(frame)
|
|
353
366
|
except Exception as e:
|
|
354
|
-
|
|
355
|
-
|
|
367
|
+
# unexpected error, stop recording without saving
|
|
368
|
+
print("Error while recording:")
|
|
369
|
+
print(e)
|
|
370
|
+
self.stop_recording(False)
|
|
356
371
|
self.stop_playback()
|
|
357
372
|
|
|
358
373
|
def eventFilter(self, obj, event):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|