added multidevice support
This commit is contained in:
@@ -128,10 +128,13 @@ def rebuild_bscan_history_from_results(
|
||||
|
||||
def pick_bscan_display_key(
|
||||
history_by_combo: dict[tuple[int, int], deque[np.ndarray]],
|
||||
preferred_key: tuple[int, int] | None = None,
|
||||
) -> tuple[int, int] | None:
|
||||
"""Choose combo key to display when multiple histories are present."""
|
||||
if not history_by_combo:
|
||||
return None
|
||||
if preferred_key is not None and preferred_key in history_by_combo:
|
||||
return preferred_key
|
||||
return next(iter(history_by_combo.keys()))
|
||||
|
||||
|
||||
@@ -267,9 +270,31 @@ class AppWindowBscanPlotMixin:
|
||||
|
||||
def _pick_bscan_display_key(self) -> tuple[int, int] | None:
|
||||
"""Choose combo history key to render."""
|
||||
display_key = pick_bscan_display_key(self._bscan_history_by_combo)
|
||||
requested_key = self._requested_bscan_display_key()
|
||||
display_key = pick_bscan_display_key(
|
||||
self._bscan_history_by_combo,
|
||||
preferred_key=requested_key,
|
||||
)
|
||||
available_keys = sorted(self._bscan_history_by_combo.keys())
|
||||
if requested_key is not None and requested_key != display_key and available_keys:
|
||||
combo_signature = ",".join(f"{input_pos}:{output_pos}" for input_pos, output_pos in available_keys)
|
||||
details = "\n".join(
|
||||
f"- in{input_pos}/out{output_pos}"
|
||||
for input_pos, output_pos in available_keys
|
||||
)
|
||||
self._log_warning(
|
||||
f"B-scan display combo in{requested_key[0]}/out{requested_key[1]} is not available; "
|
||||
f"rendering in{display_key[0]}/out{display_key[1]} instead.",
|
||||
details=details,
|
||||
once_key=(
|
||||
f"bscan_requested_combo_missing_{requested_key[0]}_{requested_key[1]}_"
|
||||
f"{combo_signature}"
|
||||
),
|
||||
)
|
||||
return display_key
|
||||
if display_key is not None and len(available_keys) > 1:
|
||||
if requested_key == display_key:
|
||||
return display_key
|
||||
combo_signature = ",".join(f"{input_pos}:{output_pos}" for input_pos, output_pos in available_keys)
|
||||
details = "\n".join(
|
||||
f"- in{input_pos}/out{output_pos}"
|
||||
@@ -286,6 +311,26 @@ class AppWindowBscanPlotMixin:
|
||||
)
|
||||
return display_key
|
||||
|
||||
def _requested_bscan_display_key(self) -> tuple[int, int] | None:
|
||||
"""Return the multi-device B-scan display combo requested by the GUI."""
|
||||
if not (
|
||||
hasattr(self, "_is_multi_device_model_selected")
|
||||
and self._is_multi_device_model_selected()
|
||||
and hasattr(self, "_single_combo_input")
|
||||
and hasattr(self, "_single_combo_output")
|
||||
):
|
||||
return None
|
||||
|
||||
input_text = self._single_combo_input.text().strip()
|
||||
output_text = self._single_combo_output.text().strip()
|
||||
if not input_text or not output_text:
|
||||
return None
|
||||
|
||||
try:
|
||||
return int(input_text), int(output_text)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
def _bscan_lookup_table(self, axis_mode: str) -> np.ndarray:
|
||||
"""Return lookup table for current B-scan axis mode."""
|
||||
return bscan_lookup_table(axis_mode)
|
||||
|
||||
Reference in New Issue
Block a user