三维未激活采样显示灰点,二维增加深度叠箭头。

分析对话框默认使用传感器对话框保存的标定,关闭按钮改为保存。框选曲线时数值卡片仍显示光标读数。相关单测通过。
This commit is contained in:
ykcheungab
2026-10-08 17:04:30 +08:00
parent 3d2fb0c4eb
commit 091d0fda35
18 changed files with 507 additions and 202 deletions
@@ -6,11 +6,13 @@ import json
from pathlib import Path
import pytest
from orisys_app_shared.analysis.bare_video import VideoFacts
from orisys_app_shared.i18n import t
from orisys_app_shared.sensors import scan_sensor_catalog
from orisys_studio.ui import sensor_picker as picker_module
from orisys_studio.ui.sensor_dialog import ROLE_DEFAULT, ROLE_FILE, ROLE_NONE, SensorDialog
from orisys_studio.ui.sensor_picker import SensorPickerWidget
from orisys_studio.ui.video_analysis_dialog import VideoAnalysisDialog
from PySide6.QtWidgets import QWidget
CONFIG = {
@@ -319,3 +321,71 @@ def test_apply_while_running_queues_set_pending_calibration(make_window, tmp_pat
window.apply_live_calibration_choice()
assert pending == []
assert window.statusBar().currentMessage() == t("sensor.live_calibration_remembered")
def _facts(path: Path) -> VideoFacts:
return VideoFacts(path=path, frame_count=4, fps=10.0, width=8, height=8)
def test_analysis_prompt_defaults_to_the_saved_sensor_file(make_window, tmp_path):
"""The file saved from the sensor dialog is the analysis prompt's starting choice."""
window = make_window()
entry = window.sensor_picker.selected_entry()
assert entry is not None
assert window.live_calibration_for(entry.ref) is None
cal = tmp_path / "picked.json"
cal.write_text("{}", encoding="utf-8")
window.set_live_calibration_choice(role=ROLE_FILE, path=cal)
dialog = VideoAnalysisDialog(
video=tmp_path / "clip.mp4",
facts=_facts(tmp_path / "clip.mp4"),
catalog=scan_sensor_catalog(),
window=window,
initial_profile=entry.ref,
remembered_calibration=window.live_calibration_for,
)
try:
assert dialog.calibration_combo.currentData() == ROLE_FILE
assert dialog._chosen_calibration() == cal
finally:
dialog.deleteLater()
def test_analysis_prompt_keeps_its_default_until_a_choice_is_saved(
make_window, tmp_path
):
window = make_window()
dialog = VideoAnalysisDialog(
video=tmp_path / "clip.mp4",
facts=_facts(tmp_path / "clip.mp4"),
catalog=scan_sensor_catalog(),
window=window,
initial_profile="shipped/box",
remembered_calibration=window.live_calibration_for,
)
try:
assert dialog.calibration_combo.currentData() == ROLE_DEFAULT
finally:
dialog.deleteLater()
def test_a_reopened_analysis_setup_still_beats_the_saved_file(make_window, tmp_path):
window = make_window()
entry = window.sensor_picker.selected_entry()
assert entry is not None
cal = tmp_path / "picked.json"
cal.write_text("{}", encoding="utf-8")
window.set_live_calibration_choice(role=ROLE_FILE, path=cal)
dialog = VideoAnalysisDialog(
video=tmp_path / "clip.mp4",
facts=_facts(tmp_path / "clip.mp4"),
catalog=scan_sensor_catalog(),
window=window,
initial_profile=entry.ref,
prefer_no_calibration=True,
remembered_calibration=window.live_calibration_for,
)
try:
assert dialog.calibration_combo.currentData() == ROLE_NONE
finally:
dialog.deleteLater()