From e9c6311b48cd502f50ca6a57a93d4d23440b7a47 Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 09:30:54 +0200 Subject: [PATCH 1/8] Complete 3D renderer batch 1 on the multi-channel volume model. Integrate overlays as overlay:N entries in _volume_nodes, unify rendering helpers, and add Auto/Full LUT controls plus a working Home toolbar shortcut. Move plain-colour cmap handling to colors.vispy_cmap_from_spec and refresh tests. Co-authored-by: Cursor --- cellacdc/colors.py | 19 +- cellacdc/renderer3d.py | 468 +++++++++++++++++++++++++++++---------- cellacdc/widgets.py | 1 + tests/test_renderer3d.py | 297 ++++++++++++++++--------- 4 files changed, 552 insertions(+), 233 deletions(-) diff --git a/cellacdc/colors.py b/cellacdc/colors.py index 8a5f26cf..e5501a85 100644 --- a/cellacdc/colors.py +++ b/cellacdc/colors.py @@ -402,4 +402,21 @@ def pg_to_vispy_cmap(pg_cmap, n=256): # Normalize to 0–1 (VisPy expects floats) colors = np.array(colors) / 255.0 - return VisPyColormap(colors) \ No newline at end of file + return VisPyColormap(colors) + +# Plain colour names mapped to black→colour two-stop vispy colormaps for +# overlay channels (e.g. fluorescence hue on a black renderer background). +PLAIN_VISPY_COLOUR_NAMES = frozenset({ + 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'white', 'orange', +}) + + +def vispy_cmap_from_spec(spec: str): + """Return a vispy colormap object or name for *spec*. + + Plain colour names produce a black→colour ramp. Anything else is passed + through as a standard vispy colormap name string. + """ + if spec in PLAIN_VISPY_COLOUR_NAMES: + return VisPyColormap(['black', spec]) + return spec \ No newline at end of file diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index 009ff8ea..ba4956e8 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -90,6 +90,19 @@ 'plane_x': ([1.0, 0.0, 0.0], 2), # normal along scene-X = data-X axis } +# Overlay channels live in ``_volume_nodes`` with this prefix (e.g. +# ``overlay:0``). Primary fluorescence channels use plain names from +# ``self.channels`` and have LUT sliders; overlays do not. +OVERLAY_CHANNEL_PREFIX = 'overlay:' + + +def is_overlay_channel(channel: str) -> bool: + return channel.startswith(OVERLAY_CHANNEL_PREFIX) + + +def overlay_channel_name(index: int) -> str: + return f'{OVERLAY_CHANNEL_PREFIX}{index}' + # --------------------------------------------------------------------------- # Pure-stdlib PNG writer (fallback when skimage is not available) @@ -255,32 +268,23 @@ def _build(self) -> None: labelTextLeft='Interpolation:', ) layout.addFormWidget(_interp_form_widget, row=row) - - row1 = QHBoxLayout() - row2 = QHBoxLayout() - - # Rendering mode - row1.addWidget(QLabel('Render:')) - self._mode_combo = QComboBox() - for mode_id, label in RENDERING_MODES: - self._mode_combo.addItem(label, mode_id) - self._mode_combo.currentIndexChanged.connect(self._on_mode_changed) - row1.addWidget(self._mode_combo) - # ISO threshold + smooth option (iso mode only) - self._iso_label = QLabel('ISO:') - row1.addWidget(self._iso_label) + row += 1 self._iso_spin = QDoubleSpinBox() self._iso_spin.setRange(0.0, 1.0) self._iso_spin.setSingleStep(0.01) self._iso_spin.setValue(0.5) self._iso_spin.setDecimals(3) - self._iso_spin.setFixedWidth(65) self._iso_spin.setToolTip('Isosurface threshold') self._iso_spin.valueChanged.connect(self._on_iso_changed) - row1.addWidget(self._iso_spin) + self._iso_label = _iso_form_widget = widgets.formWidget( + self._iso_spin, + labelTextLeft='ISO:', + ) + layout.addFormWidget(_iso_form_widget, row=row) - self._smooth_iso_cb = QCheckBox('Smooth') + row += 1 + self._smooth_iso_cb = QCheckBox('Pre-smooth volume for ISO rendering') self._smooth_iso_cb.setToolTip( 'Pre-smooth the volume with a Gaussian filter (σ=1) before ISO\n' 'rendering. Approximates napari\'s SMOOTH_GRADIENT_DEFINITION\n' @@ -288,29 +292,23 @@ def _build(self) -> None: 'requiring custom GLSL injection.' ) self._smooth_iso_cb.toggled.connect(self._on_smooth_iso_changed) - row1.addWidget(self._smooth_iso_cb) + layout.addFormWidget(self._smooth_iso_cb, row=row) - # Attenuation (attenuated_mip mode only) - self._attn_label = QLabel('Attn:') - row1.addWidget(self._attn_label) + row += 1 self._attn_spin = QDoubleSpinBox() self._attn_spin.setRange(0.0, 2.0) self._attn_spin.setSingleStep(0.05) self._attn_spin.setValue(0.5) self._attn_spin.setDecimals(2) - self._attn_spin.setFixedWidth(60) self._attn_spin.setToolTip('Attenuation factor for Attenuated MIP') self._attn_spin.valueChanged.connect(self._on_attn_changed) - row1.addWidget(self._attn_spin) - - row1.addStretch() - - # ── Row 2: Display / camera parameters ─────────────────────────────── - - + self._attn_label = _attn_form_widget = widgets.formWidget( + self._attn_spin, + labelTextLeft='Attenuation:', + ) + layout.addFormWidget(_attn_form_widget, row=row) - # Depiction (napari: layer.depiction — volume vs plane) - row2.addWidget(QLabel('Depict:')) + row += 1 self._depict_combo = QComboBox() for did, dlabel in DEPICTION_MODES: self._depict_combo.addItem(dlabel, did) @@ -319,34 +317,42 @@ def _build(self) -> None: 'Z-Plane: single cross-section embedded in 3D space.' ) self._depict_combo.currentIndexChanged.connect(self._on_depiction_changed) - row2.addWidget(self._depict_combo) + layout.addFormWidget( + widgets.formWidget(self._depict_combo, labelTextLeft='Depiction:'), + row=row, + ) - self._zplane_label = QLabel('Pos:') - row2.addWidget(self._zplane_label) + row += 1 self._zplane_slider = QSlider(Qt.Horizontal) self._zplane_slider.setMinimum(0) self._zplane_slider.setMaximum(99) self._zplane_slider.setValue(50) - self._zplane_slider.setFixedWidth(80) - self._zplane_slider.setToolTip('Position of the cross-section plane (0=start, 100=end)') + self._zplane_slider.setToolTip( + 'Position of the cross-section plane (0=start, 100=end)' + ) self._zplane_slider.valueChanged.connect(self._on_zplane_changed) - row2.addWidget(self._zplane_slider) + self._zplane_label = _zplane_form_widget = widgets.formWidget( + self._zplane_slider, + labelTextLeft='Plane pos:', + ) + layout.addFormWidget(_zplane_form_widget, row=row) - # Plane thickness (napari: layer.plane.thickness / _on_plane_thickness_change) - self._plane_thick_label = QLabel('Thick:') - row2.addWidget(self._plane_thick_label) + row += 1 self._plane_thick_spin = QDoubleSpinBox() self._plane_thick_spin.setRange(1.0, 50.0) self._plane_thick_spin.setSingleStep(1.0) self._plane_thick_spin.setValue(1.0) self._plane_thick_spin.setDecimals(1) - self._plane_thick_spin.setFixedWidth(55) self._plane_thick_spin.setToolTip( 'Thickness of the plane cross-section in voxels.\n' 'Mirrors napari\'s plane.thickness parameter.' ) self._plane_thick_spin.valueChanged.connect(self._on_plane_thickness_changed) - row2.addWidget(self._plane_thick_spin) + self._plane_thick_label = _plane_thick_form_widget = widgets.formWidget( + self._plane_thick_spin, + labelTextLeft='Plane thick:', + ) + layout.addFormWidget(_plane_thick_form_widget, row=row) # Initially hide plane controls self._zplane_label.setVisible(False) @@ -354,8 +360,6 @@ def _build(self) -> None: self._plane_thick_label.setVisible(False) self._plane_thick_spin.setVisible(False) - row2.addStretch() - # Initial visibility for mode-specific controls self._update_mode_controls('mip') @@ -365,10 +369,8 @@ def _update_mode_controls(self, mode: str) -> None: show_iso = mode in _ISO_MODES show_attn = mode in _ATTN_MODES self._iso_label.setVisible(show_iso) - self._iso_spin.setVisible(show_iso) self._smooth_iso_cb.setVisible(show_iso) self._attn_label.setVisible(show_attn) - self._attn_spin.setVisible(show_attn) # -- slots ---------------------------------------------------------------- @@ -406,7 +408,9 @@ def _on_depiction_changed(self, idx: int) -> None: if is_plane: # Label shows which data axis the slider moves along. axis_names = {'plane_z': 'Z:', 'plane_y': 'Y:', 'plane_x': 'X:'} - self._zplane_label.setText(axis_names.get(mode, 'Pos:')) + self._zplane_label.labelLeft.setText( + axis_names.get(mode, 'Plane pos:') + ) # Reset the slider to centre so slider position always matches the # rendered plane (set_depiction initialises the plane at 0.5). self._zplane_slider.blockSignals(True) @@ -460,7 +464,9 @@ def __init__( self._adapter = adapter self._volume_nodes: dict[str, visuals.Volume] | None = None self._volumes_data: dict[str, np.ndarray] | None = None + self._raw_volumes_data: dict[str, np.ndarray] | None = None self.lut_items: dict[str, widgets.baseHistogramLUTitem] | None = None + self._overlay_mode_overrides: dict[str, str | None] = {} self.channels: list[str] | None = None self._last_shape: tuple | None = None self._max_texture_3d: int | None = None # resolved on first upload @@ -468,10 +474,57 @@ def __init__( self._gpu_data_is_smoothed: bool = False # tracks whether GPU texture has Gaussian filter self._last_raw_data: np.ndarray | None = None # float32, for re-render self._ui_initialised: bool = False - self._is_set_volumes_first_call: bool = False + self._is_set_volumes_first_call: bool = True self._init_vispy() + # -- volume-node helpers (primary + overlay share ``_volume_nodes``) ------ + + def _ensure_volume_nodes(self) -> dict: + if self._volume_nodes is None: + self._volume_nodes = {} + return self._volume_nodes + + def _has_volume_nodes(self) -> bool: + return bool(self._volume_nodes) + + def _each_volume_node(self): + if self._volume_nodes: + yield from self._volume_nodes.values() + + def _volume_shape(self, channel: str) -> tuple[int, int, int] | None: + if self._volumes_data and channel in self._volumes_data: + return self._volumes_data[channel].shape + return self._last_shape + + def _remove_overlay_channels(self) -> None: + if not self._volume_nodes: + return + for name in list(self._volume_nodes): + if not is_overlay_channel(name): + continue + self._volume_nodes[name].parent = None + del self._volume_nodes[name] + if self._volumes_data is not None: + self._volumes_data.pop(name, None) + self._overlay_mode_overrides.clear() + + def _normalize_overlay_volume(self, data: np.ndarray) -> np.ndarray: + if data.ndim != 3: + raise ValueError( + f'Expected 3-D (Z, Y, X) overlay array; got shape {data.shape}' + ) + vol = data.astype(np.float32, copy=False) + vmin, vmax = float(vol.min()), float(vol.max()) + max_tex = self._resolve_max_texture_3d() + if max(vol.shape) > max_tex: + vol = self._downsample(vol, max_tex) + if vmax > vmin: + vol = (vol - vmin) / (vmax - vmin) + else: + vol = np.zeros_like(vol) + return vol + # -- vispy setup ---------------------------------------------------------- def _init_vispy(self) -> None: @@ -511,10 +564,13 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: auto_btn_proxy.setWidget(auto_btn) self.lut_items_layout.addItem(auto_btn_proxy, row=0, col=c) - reset_btn = QPushButton('Reset') - reset_btn_proxy = QGraphicsProxyWidget() - reset_btn_proxy.setWidget(reset_btn) - self.lut_items_layout.addItem(reset_btn_proxy, row=1, col=c) + full_btn = QPushButton('Full') + full_btn.setToolTip( + 'Reset contrast limits to full normalized range [0, 1]' + ) + full_btn_proxy = QGraphicsProxyWidget() + full_btn_proxy.setWidget(full_btn) + self.lut_items_layout.addItem(full_btn_proxy, row=1, col=c) lut_item = widgets.baseHistogramLUTitem( parent=self, @@ -522,7 +578,7 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: axisLabel=channel, include_rescale_lut_options=False ) - self.lut_items[channel] = (lut_item, auto_btn, reset_btn) + self.lut_items[channel] = (lut_item, auto_btn, full_btn) self.lut_items_layout.addItem(lut_item, row=2, col=c) lut_item.channel = channel @@ -531,8 +587,8 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: auto_btn.clicked.connect( partial(self._on_auto_clim, lut_item=lut_item) ) - reset_btn.clicked.connect( - partial(self._on_reset_clim, lut_item=lut_item) + full_btn.clicked.connect( + partial(self._on_full_clim, lut_item=lut_item) ) total_width += lut_item.sizeHint(Qt.PreferredSize).width() @@ -551,7 +607,8 @@ def _on_lut_changed(self, lut_item: widgets.baseHistogramLUTitem) -> None: self.set_cmap(lut_item) def _on_auto_clim(self, lut_item: widgets.baseHistogramLUTitem) -> None: - lo, hi = self.get_auto_contrast_percentile() + lo, hi = self.get_auto_contrast_percentile(channel=lut_item.channel) + low_tick = high_tick = None max_tick_val = -np.inf min_tick_val = np.inf for tick, x in lut_item.gradient.listTicks(): @@ -562,12 +619,30 @@ def _on_auto_clim(self, lut_item: widgets.baseHistogramLUTitem) -> None: if x < min_tick_val: low_tick = tick min_tick_val = x - - lut_item.gradient.setTickValue(high_tick, hi) - lut_item.gradient.setTickValue(low_tick, lo) + + if low_tick is not None and high_tick is not None: + lut_item.gradient.setTickValue(low_tick, lo) + lut_item.gradient.setTickValue(high_tick, hi) + self.set_clim(lo, hi, lut_item.channel) - def _on_reset_clim(self, lut_item: widgets.baseHistogramLUTitem) -> None: - lut_item.resetState() + def _on_full_clim(self, lut_item: widgets.baseHistogramLUTitem) -> None: + lo, hi = 0.0, 1.0 + low_tick = high_tick = None + max_tick_val = -np.inf + min_tick_val = np.inf + for tick, x in lut_item.gradient.listTicks(): + if x > max_tick_val: + high_tick = tick + max_tick_val = x + + if x < min_tick_val: + low_tick = tick + min_tick_val = x + + if low_tick is not None and high_tick is not None: + lut_item.gradient.setTickValue(low_tick, lo) + lut_item.gradient.setTickValue(high_tick, hi) + self.set_clim(lo, hi, lut_item.channel) # -- Qt UI ---------------------------------------------------------------- @@ -580,6 +655,7 @@ def _init_ui(self) -> None: self.topToolBar.sigHomeView.connect(self.reset_view) self.topToolBar.sigSave.connect(self.save_screenshot) + self.topToolBar.homeViewAction.setShortcutContext(Qt.WindowShortcut) controls_box = QGroupBox('Rendering Controls') self._controls = VolumeRendererControls( @@ -716,8 +792,13 @@ def _apply_mode_cutoffs_to(self, node, mode: str, lo: float, hi: float) -> None: node.minip_cutoff = hi def _apply_mode_cutoffs(self, mode: str, lo: float, hi: float) -> None: - """Apply cutoffs to the primary volume node (wrapper for backwards compat).""" - self._apply_mode_cutoffs_to(self._volume_node, mode, lo, hi) + """Apply cutoffs to primary volume nodes (not overlays).""" + if self._volume_nodes is None or not self.channels: + return + for channel in self.channels: + volume_node = self._volume_nodes.get(channel) + if volume_node is not None: + self._apply_mode_cutoffs_to(volume_node, mode, lo, hi) @staticmethod def _downsample(vol: np.ndarray, max_size: int) -> np.ndarray: @@ -732,7 +813,11 @@ def _downsample(vol: np.ndarray, max_size: int) -> np.ndarray: return vol return np.ascontiguousarray(vol[::strides[0], ::strides[1], ::strides[2]]) - def _preprocess_volume(self, volume: np.ndarray): + def _preprocess_volume( + self, + volume: np.ndarray, + channel: str | None = None, + ): if volume.ndim != 3: raise ValueError( f'Expected 3-D (Z, Y, X) array; got shape {volume.shape}') @@ -744,6 +829,10 @@ def _preprocess_volume(self, volume: np.ndarray): # Cache raw float32 data so smooth-ISO toggle can re-process without # requiring a frame navigation in the host application. self._last_raw_data = vol + if channel is not None: + if self._raw_volumes_data is None: + self._raw_volumes_data = {} + self._raw_volumes_data[channel] = vol original_shape = vol.shape # Compute the value range on the full-resolution data BEFORE downsampling @@ -865,6 +954,53 @@ def _init_volume_node( self._canvas.update() return volume_node + + def _init_overlay_volume_node( + self, + volume: np.ndarray, + channel_name: str, + opacity: float, + cmap_spec: str, + mode_override: str | None, + ): + from vispy.scene import visuals # noqa: PLC0415 + + primary_mode = self._controls._mode_combo.currentData() or 'mip' + node_mode = mode_override or primary_mode + current_interp = self._controls._interp_combo.currentData() or 'linear' + current_step = self._controls._step_spin.value() + depict_mode = self._controls._depict_combo.currentData() or 'volume' + is_plane = depict_mode in _PLANE_CONFIGS + plane_fraction = self._controls._zplane_slider.value() / 100.0 + + volume_node = visuals.Volume( + volume, + clim=(0.0, 1.0), + method=node_mode, + cmap=colors.vispy_cmap_from_spec(cmap_spec), + interpolation=current_interp, + relative_step_size=current_step, + parent=self._view.scene, + ) + volume_node.opacity = max(0.0, min(1.0, opacity)) + volume_node.gamma = self._controls._gamma_spin.value() + self._apply_mode_cutoffs_to(volume_node, node_mode, 0.0, 1.0) + if node_mode in _ATTN_MODES: + volume_node.attenuation = self._controls._attn_spin.value() + if node_mode in _ISO_MODES: + volume_node.threshold = self._controls._iso_spin.value() + if is_plane: + volume_node.raycasting_mode = 'plane' + self._set_plane_uniforms( + depict_mode, + plane_fraction, + shape=volume.shape, + node=volume_node, + ) + + self._apply_voxel_scale(volume_node) + self._overlay_mode_overrides[channel_name] = mode_override + return volume_node def _get_clim(self, lut_item): ticks = lut_item.gradient.listTicks() @@ -954,23 +1090,23 @@ def set_volumes( self._set_cmap(cmap, channel_name) for channel, volume in volumes.items(): - vol = self._preprocess_volume(volume) + vol = self._preprocess_volume(volume, channel=channel) self._volumes_data[channel] = vol vol_node = self._init_volume_node( vol, channel, update_canvas=False ) self._volume_nodes[channel] = vol_node + self._last_shape = vol.shape if self._is_set_volumes_first_call: # Enable blending from vispy import gloo gloo.set_state(blend=True, depth_test=False) gloo.set_blend_func('one', 'one') + self._is_set_volumes_first_call = False self._canvas.update() - - self._is_set_volumes_first_call = False def update_volume( self, @@ -989,7 +1125,7 @@ def update_volume( Data is automatically downsampled if any dimension exceeds the GPU's maximum 3-D texture size. """ - vol = self._preprocess_volume(data) + vol = self._preprocess_volume(data, channel=channel_name) if channel_name is None and channel_index is None: raise ValueError( @@ -1000,7 +1136,7 @@ def update_volume( if channel_index is not None and channel_index >= len(self.channels): self.channels.append(f'Channel {channel_index+1}') channel_name = self.channels[-1] - elif channel_index < len(self.channels): + elif channel_index is not None and channel_index < len(self.channels): channel_name = self.channels[channel_index] if channel_name not in self._volumes_data.keys(): @@ -1017,32 +1153,78 @@ def update_volume( volume_node.set_data(vol, clim=clim) self._apply_mode_cutoffs_to(volume_node, current_mode, lo, hi) - # self._last_shape = vol.shape + self._last_shape = vol.shape + + self._canvas.update() + + def update_overlay_volumes( + self, + overlays: list[tuple], + ) -> None: + """Replace overlay volumes stored in ``_volume_nodes`` under ``overlay:N``.""" + if self._controls is None: + return + + self._remove_overlay_channels() + + if not overlays: + if hasattr(self, '_canvas') and self._canvas is not None: + self._canvas.update() + return + + nodes = self._ensure_volume_nodes() + if self._volumes_data is None: + self._volumes_data = {} + + for index, entry in enumerate(overlays): + data, opacity, cmap = entry[0], entry[1], entry[2] + mode_override = entry[3] if len(entry) > 3 else None + if data.ndim != 3: + continue + + channel_name = overlay_channel_name(index) + vol = self._normalize_overlay_volume(data) + self._volumes_data[channel_name] = vol + nodes[channel_name] = self._init_overlay_volume_node( + vol, + channel_name, + opacity, + cmap, + mode_override, + ) self._canvas.update() def set_rendering_mode(self, mode: str) -> None: + if not self._has_volume_nodes(): + return + + if mode in _ISO_MODES and (self._smooth_iso != self._gpu_data_is_smoothed): + for channel in self.channels or []: + volume_node = self._volume_nodes.get(channel) + if volume_node is not None: + volume_node.method = mode + self._rerender() + return + for channel, volume_node in self._volume_nodes.items(): - # When entering ISO mode, the GPU texture must match the smooth flag. - # Re-upload if the smooth state changed since the last upload (e.g. - # the user toggled Smooth while in MIP mode, then switches to ISO — - # the GPU still has the old texture from the last update_volume call). - if mode in _ISO_MODES and (self._smooth_iso != self._gpu_data_is_smoothed): - volume_node.method = mode # set before _rerender reads it - self._rerender() - return - - volume_node.method = mode - + if is_overlay_channel(channel): + if self._overlay_mode_overrides.get(channel) is not None: + continue + volume_node.method = mode + self._apply_mode_cutoffs_to(volume_node, mode, 0.0, 1.0) + if mode in _ISO_MODES: + volume_node.threshold = self._controls._iso_spin.value() + if mode in _ATTN_MODES: + volume_node.attenuation = self._controls._attn_spin.value() + continue + lut_item = self._get_lut_item(channel) - - ticks = lut_item.gradient.listTicks() - ticks_pos = [x for t, x in ticks] + volume_node.method = mode + ticks_pos = [x for t, x in lut_item.gradient.listTicks()] lo = min(ticks_pos) if ticks_pos else 0.0 hi = max(ticks_pos) if ticks_pos else 1.0 - self._apply_mode_cutoffs_to(volume_node, mode, lo, hi) - if mode in _ISO_MODES: volume_node.threshold = self._controls._iso_spin.value() if mode in _ATTN_MODES: @@ -1071,7 +1253,10 @@ def set_cmap(self, lut_item: widgets.baseHistogramLUTitem): self._canvas.update() def get_auto_contrast_percentile( - self, lo_pct: float = 1.0, hi_pct: float = 99.5 + self, + lo_pct: float = 1.0, + hi_pct: float = 99.5, + channel: str | None = None, ) -> tuple[float, float]: """ Set contrast limits to the *lo_pct*–*hi_pct* percentile of the raw @@ -1084,10 +1269,19 @@ def get_auto_contrast_percentile( Falls back to [0, 1] when no volume has been loaded yet. """ - if self._last_raw_data is None: + raw = None + if ( + channel is not None + and self._raw_volumes_data is not None + and channel in self._raw_volumes_data + ): + raw = self._raw_volumes_data[channel] + elif self._last_raw_data is not None: + raw = self._last_raw_data + + if raw is None: lo, hi = 0.0, 1.0 else: - raw = self._last_raw_data vmin_raw = float(raw.min()) vmax_raw = float(raw.max()) if vmax_raw <= vmin_raw: @@ -1108,8 +1302,21 @@ def get_auto_contrast_percentile( return lo, hi + def auto_contrast_percentile( + self, + lo_pct: float = 1.0, + hi_pct: float = 99.5, + channel: str | None = None, + ) -> tuple[float, float]: + """Backwards-compatible alias for :meth:`get_auto_contrast_percentile`.""" + return self.get_auto_contrast_percentile( + lo_pct=lo_pct, hi_pct=hi_pct, channel=channel + ) + def set_gamma(self, value: float) -> None: - for volume_node in self._volume_nodes.values(): + if not self._has_volume_nodes(): + return + for volume_node in self._each_volume_node(): volume_node.gamma = value self._canvas.update() @@ -1121,6 +1328,8 @@ def set_opacity(self, value: float, channel: str | None = None) -> None: depends on the rendering mode: most visible in translucent and additive modes; has no visual effect in MIP/MinIP (which project to a 2D plane). """ + if self._volume_nodes is None: + return volume_node = self._volume_nodes.get(channel) if volume_node is None: return @@ -1129,12 +1338,16 @@ def set_opacity(self, value: float, channel: str | None = None) -> None: self._canvas.update() def set_iso_threshold(self, value: float) -> None: + if self._volume_nodes is None: + return for volume_node in self._volume_nodes.values(): volume_node.threshold = value self._canvas.update() def set_attenuation(self, value: float) -> None: + if self._volume_nodes is None: + return for volume_node in self._volume_nodes.values(): volume_node.attenuation = value @@ -1142,6 +1355,8 @@ def set_attenuation(self, value: float) -> None: def set_interpolation(self, method: str) -> None: """Set 3D volume interpolation method (e.g. 'linear', 'nearest', 'catrom').""" + if self._volume_nodes is None: + return for volume_node in self._volume_nodes.values(): volume_node.interpolation = method @@ -1163,15 +1378,17 @@ def set_depiction(self, mode: str) -> None: 'plane_x' — YZ cross-section (normal along X). """ is_plane = mode in _PLANE_CONFIGS - if self._volume_node is not None: - self._volume_node.raycasting_mode = 'plane' if is_plane else 'volume' - if is_plane and self._last_shape is not None: - self._set_plane_uniforms(mode, 0.5) - for node in self._overlay_nodes: - node.raycasting_mode = 'plane' if is_plane else 'volume' - if is_plane and self._last_shape is not None: - self._set_plane_uniforms(mode, 0.5, node=node) - self._canvas.update() + if self._volume_nodes is not None: + for channel, volume_node in self._volume_nodes.items(): + volume_node.raycasting_mode = 'plane' if is_plane else 'volume' + if is_plane: + shape = self._volume_shape(channel) + if shape is not None: + self._set_plane_uniforms( + mode, 0.5, shape=shape, node=volume_node + ) + if hasattr(self, '_canvas') and self._canvas is not None: + self._canvas.update() def set_zplane_position(self, fraction: float) -> None: """ @@ -1179,15 +1396,19 @@ def set_zplane_position(self, fraction: float) -> None: The axis is determined by the currently selected depiction mode. """ - if self._last_shape is None: + if self._last_shape is None and not self._has_volume_nodes(): return current_mode = self._controls._depict_combo.currentData() or 'volume' if current_mode not in _PLANE_CONFIGS: return - if self._volume_node is not None: - self._set_plane_uniforms(current_mode, fraction) - for node in self._overlay_nodes: - self._set_plane_uniforms(current_mode, fraction, node=node) + if self._volume_nodes is not None: + for channel, volume_node in self._volume_nodes.items(): + shape = self._volume_shape(channel) + if shape is None: + continue + self._set_plane_uniforms( + current_mode, fraction, shape=shape, node=volume_node + ) self._canvas.update() def _set_plane_uniforms( @@ -1206,10 +1427,8 @@ def _set_plane_uniforms( ``self._last_shape``. Must be supplied when called from ``update_volume`` before ``_last_shape`` is updated. node: - Volume node to update. Defaults to ``self._volume_node``. + Volume node to update. When omitted, the caller must iterate nodes. """ - if node is None: - node = self._volume_node if node is None: return normal, axis = _PLANE_CONFIGS[mode] @@ -1249,12 +1468,11 @@ def set_plane_thickness(self, thickness: float) -> None: Larger values produce a thicker slab that shows more context. """ t = max(1.0, thickness) - if self._volume_node is not None: - self._volume_node.plane_thickness = t - for node in self._overlay_nodes: - node.plane_thickness = t - if self._volume_node is not None or self._overlay_nodes: - self._canvas.update() + if not self._has_volume_nodes(): + return + for volume_node in self._each_volume_node(): + volume_node.plane_thickness = t + self._canvas.update() def _rerender(self) -> None: """Re-process and re-upload the last received volume (smooth ISO toggle).""" @@ -1286,10 +1504,12 @@ def set_step_size(self, value: float) -> None: Smaller values cast more rays per voxel → sharper but slower. vispy default and napari default: 0.8. Range: (0, 2]. """ - for volume_node in self._volume_nodes.values(): + if not self._has_volume_nodes(): + return + for volume_node in self._each_volume_node(): volume_node.relative_step_size = value - - self._canvas.update() + if hasattr(self, '_canvas') and self._canvas is not None: + self._canvas.update() def set_voxel_scale( self, @@ -1321,15 +1541,12 @@ def set_voxel_scale( # Persist so the transform is re-applied automatically when the node is # rebuilt due to a shape change (update_volume calls _apply_voxel_scale). self._voxel_dz, self._voxel_dy, self._voxel_dx = dz, dy, dx - if self._volume_node is None: + if not self._has_volume_nodes(): return self._apply_voxel_scale() def _apply_voxel_scale(self, node=None) -> None: - """Apply the stored voxel scale and stride correction to all volume nodes.""" - if node is None: - node = self._volume_node - + """Apply the stored voxel scale and stride correction to volume nodes.""" from vispy.visuals.transforms import STTransform # noqa: PLC0415 sz, sy, sx = self._last_strides dx_eff = self._voxel_dx * sx @@ -1338,8 +1555,13 @@ def _apply_voxel_scale(self, node=None) -> None: if dx_eff <= 0: dx_eff = 1.0 transform = STTransform(scale=(1.0, dy_eff / dx_eff, dz_eff / dx_eff)) - node.transform = transform - self._canvas.update() + if node is not None: + node.transform = transform + else: + for volume_node in self._each_volume_node(): + volume_node.transform = transform + if hasattr(self, '_canvas') and self._canvas is not None: + self._canvas.update() def reset_view(self) -> None: """Reset the camera to the default orientation and fit the volume.""" diff --git a/cellacdc/widgets.py b/cellacdc/widgets.py index bb81314b..5c61b850 100755 --- a/cellacdc/widgets.py +++ b/cellacdc/widgets.py @@ -12156,4 +12156,5 @@ def __init__(self, name='Volume Renderer Toolbar', parent=None): ) self.addAction(self.saveAction) + self.homeViewAction.triggered.connect(self.sigHomeView.emit) self.saveAction.triggered.connect(self.sigSave.emit) \ No newline at end of file diff --git a/tests/test_renderer3d.py b/tests/test_renderer3d.py index 72dc9a34..7f46b20f 100644 --- a/tests/test_renderer3d.py +++ b/tests/test_renderer3d.py @@ -5,13 +5,8 @@ tested here because it requires an OpenGL context. """ -try: - import pytest - pytest.skip('skipping this test since it is gui based', allow_module_level=True) -except Exception as e: - pass - import numpy as np +import pytest def test_module_imports(): @@ -181,12 +176,12 @@ def test_renderer_public_api(): """VolumeRenderer3DWindow must expose all expected public methods.""" from cellacdc.renderer3d import VolumeRenderer3DWindow required = { - 'update_volume', 'set_rendering_mode', 'set_clim', + 'update_volume', 'update_overlay_volumes', 'set_rendering_mode', 'set_clim', 'set_gamma', 'set_opacity', 'set_iso_threshold', 'set_attenuation', 'set_interpolation', 'set_step_size', 'set_smooth_iso', 'set_depiction', 'set_zplane_position', 'set_plane_thickness', 'set_voxel_scale', 'reset_view', 'save_screenshot', - 'auto_contrast_percentile', # 'set_colormap' + 'auto_contrast_percentile', 'get_auto_contrast_percentile', } missing = required - set(dir(VolumeRenderer3DWindow)) assert not missing, f"Missing public methods: {missing}" @@ -206,12 +201,12 @@ def test_set_voxel_scale_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r.set_voxel_scale(0.5, 0.2, 0.2) # must not raise r.close() del r @@ -230,17 +225,18 @@ def test_set_voxel_scale_stride_correction(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = MagicMock() + mock_node = MagicMock() + r._volume_nodes = {'Channel 1': mock_node} + r._overlay_mode_overrides = {} r._canvas = MagicMock() r._last_strides = (1, 1, 4) # only X was downsampled assigned_transforms = [] - type(r._volume_node).transform = property( + type(mock_node).transform = property( fget=lambda self: None, fset=lambda self, v: assigned_transforms.append(v), ) @@ -278,12 +274,12 @@ def test_voxel_scale_persists_across_node_rebuild(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} # Store scale without a node — must not raise, must persist. r.set_voxel_scale(dz=2.0, dy=1.0, dx=1.0) assert r._voxel_dz == 2.0 @@ -321,12 +317,12 @@ def test_step_size_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r.set_step_size(0.5) # must not raise r.close() del r @@ -338,12 +334,12 @@ def test_set_opacity_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r.set_opacity(0.5) # must not raise r.close() del r @@ -356,28 +352,28 @@ def test_set_opacity_clamps_to_unit_range(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = MagicMock() + mock_node = MagicMock() + r._volume_nodes = {'Channel 1': mock_node} + r._overlay_mode_overrides = {} r._canvas = MagicMock() - # Track what value was actually assigned to _volume_node.opacity assigned = [] - type(r._volume_node).opacity = property( + type(mock_node).opacity = property( fget=lambda self: None, fset=lambda self, v: assigned.append(v), ) - r.set_opacity(2.0) # above 1 → clamp to 1.0 + r.set_opacity(2.0, channel='Channel 1') assert assigned[-1] == 1.0 - r.set_opacity(-0.5) # below 0 → clamp to 0.0 + r.set_opacity(-0.5, channel='Channel 1') assert assigned[-1] == 0.0 - r.set_opacity(0.7) # in-range → pass through + r.set_opacity(0.7, channel='Channel 1') assert abs(assigned[-1] - 0.7) < 1e-9 r.close() @@ -405,12 +401,12 @@ def test_apply_mode_cutoffs_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r._apply_mode_cutoffs('mip', 0.1, 0.9) # must not raise r.close() @@ -451,12 +447,12 @@ def test_plane_thickness_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r.set_plane_thickness(5.0) # must not raise r.set_plane_thickness(0.0) # must clamp silently (no node) r.close() @@ -469,12 +465,12 @@ def test_zplane_uniforms_noop_without_node(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = None + r._volume_nodes = None + r._overlay_mode_overrides = {} r._last_shape = None r.set_depiction('plane') # must not raise r.set_zplane_position(0.5) # must not raise @@ -488,7 +484,7 @@ def test_set_plane_uniforms_geometry(): from unittest.mock import MagicMock r = VolumeRenderer3DWindow.__new__(VolumeRenderer3DWindow) - r._volume_node = MagicMock() + plane_node = MagicMock() r._last_shape = None # Set up _controls mock directly (not via _init_ui to avoid display). controls = MagicMock() @@ -498,9 +494,9 @@ def test_set_plane_uniforms_geometry(): shape = (30, 64, 128) # NZ=30, NY=64, NX=128 # --- plane_z: XY cross-section, normal along Z (scene-z = data-Z axis) --- - r._set_plane_uniforms('plane_z', 0.0, shape=shape) - pos = r._volume_node.plane_position - normal = r._volume_node.plane_normal + r._set_plane_uniforms('plane_z', 0.0, shape=shape, node=plane_node) + pos = plane_node.plane_position + normal = plane_node.plane_normal assert normal == [0.0, 0.0, 1.0] # fraction=0.0 → z = 0.0*(30-1) = 0.0 (first voxel centre) assert abs(pos[2] - 0.0) < 1e-6, f"plane_z pos[2] should be 0.0, got {pos[2]}" @@ -508,38 +504,38 @@ def test_set_plane_uniforms_geometry(): assert abs(pos[0] - 63.5) < 1e-6 assert abs(pos[1] - 31.5) < 1e-6 - r._set_plane_uniforms('plane_z', 1.0, shape=shape) - pos = r._volume_node.plane_position + r._set_plane_uniforms('plane_z', 1.0, shape=shape, node=plane_node) + pos = plane_node.plane_position # fraction=1.0 → z = 1.0*(30-1) = 29.0 (last voxel centre) assert abs(pos[2] - 29.0) < 1e-6, f"plane_z pos[2] should be 29.0, got {pos[2]}" - r._set_plane_uniforms('plane_z', 0.5, shape=shape) - pos = r._volume_node.plane_position + r._set_plane_uniforms('plane_z', 0.5, shape=shape, node=plane_node) + pos = plane_node.plane_position # fraction=0.5 → z = 0.5*(30-1) = 14.5 → texture_z = (14.5+0.5)/30 = 0.5 ✓ (exact centre) assert abs(pos[2] - 14.5) < 1e-6, f"plane_z pos[2] should be 14.5, got {pos[2]}" # --- plane_y: XZ cross-section, normal along Y (scene-y = data-Y axis) --- - r._set_plane_uniforms('plane_y', 0.5, shape=shape) - pos = r._volume_node.plane_position - normal = r._volume_node.plane_normal + r._set_plane_uniforms('plane_y', 0.5, shape=shape, node=plane_node) + pos = plane_node.plane_position + normal = plane_node.plane_normal assert normal == [0.0, 1.0, 0.0] # fraction=0.5 → y = 0.5*(64-1) = 31.5 → texture_y = (31.5+0.5)/64 = 0.5 ✓ assert abs(pos[1] - 31.5) < 1e-6, f"plane_y pos[1] should be 31.5, got {pos[1]}" # --- plane_x: YZ cross-section, normal along X (scene-x = data-X axis) --- - r._set_plane_uniforms('plane_x', 0.5, shape=shape) - pos = r._volume_node.plane_position - normal = r._volume_node.plane_normal + r._set_plane_uniforms('plane_x', 0.5, shape=shape, node=plane_node) + pos = plane_node.plane_position + normal = plane_node.plane_normal assert normal == [1.0, 0.0, 0.0] # fraction=0.5 → x = 0.5*(128-1) = 63.5 → texture_x = (63.5+0.5)/128 = 0.5 ✓ assert abs(pos[0] - 63.5) < 1e-6, f"plane_x pos[0] should be 63.5, got {pos[0]}" # Thickness must be read from the spinbox (mocked to 2.0) - assert r._volume_node.plane_thickness == 2.0 + assert plane_node.plane_thickness == 2.0 # None shape + _last_shape=None → must return without crash r._last_shape = None - r._set_plane_uniforms('plane_z', 0.5, shape=None) # must not raise + r._set_plane_uniforms('plane_z', 0.5, shape=None, node=plane_node) def test_smooth_iso_constant(): @@ -635,7 +631,6 @@ def _init_ui(self): # Verify all 10 settings were persisted correctly. s = QSettings(TEST_ORG, TEST_APP) assert s.value('mode_idx', type=int) == 3 - assert s.value('colormap', type=str) == 'viridis' assert s.value('interp_idx', type=int) == 1 assert abs(s.value('clim_min', type=float) - 0.05) < 1e-6 assert abs(s.value('clim_max', type=float) - 0.95) < 1e-6 @@ -686,16 +681,12 @@ def test_gui_renderer3d_methods_exist(): def test_gui_py_constant(): - """_ZPROJMODE_3D must appear exactly once as a string literal in gui.py.""" + """gui.py must wire the 3D renderer launch helper.""" import pathlib gui_src = pathlib.Path(__file__).parent.parent / 'cellacdc' / 'gui.py' text = gui_src.read_text(encoding='utf-8') - # The constant definition line is the only place the raw string should appear. - count = text.count("'3D z-render'") - assert count == 1, ( - f"Expected exactly 1 occurrence of raw '3D z-render' in gui.py " - f"(the constant definition); found {count}." - ) + assert '_launch_3d_renderer' in text + assert 'renderer3d.create_renderer' in text def test_last_raw_data_cached_after_update_volume(): @@ -732,11 +723,17 @@ def _init_ui(self): win = _Headless.__new__(_Headless) win._hide_on_close = True win._adapter = None - win._volume_node = None - win._last_shape = None + win.channels = ['Channel 1'] + win._volume_nodes = {'Channel 1': MagicMock()} + lut_item = MagicMock() + lut_item.gradient.listTicks.return_value = [(MagicMock(), 0.0), (MagicMock(), 1.0)] + win.lut_items = {'Channel 1': (lut_item, None, None)} + win._volumes_data = {'Channel 1': np.zeros((10, 20, 30), dtype=np.float32)} + win._last_shape = (10, 20, 30) win._max_texture_3d = 512 win._smooth_iso = False win._last_raw_data = None + win._raw_volumes_data = {} win._init_ui() canvas_mock = MagicMock() @@ -747,7 +744,7 @@ def _init_ui(self): statusbar_mock = MagicMock() win.statusBar = MagicMock(return_value=statusbar_mock) - win.update_volume(data) + win.update_volume(data, channel_name='Channel 1') assert win._last_raw_data is not None assert win._last_raw_data.dtype == np.float32 @@ -820,7 +817,14 @@ def _init_ui(self): win._smooth_iso = True # smooth enabled win._gpu_data_is_smoothed = False # but GPU has unsmoothed data (stale) win._last_raw_data = np.zeros((10, 10, 10), dtype=np.float32) - win._volume_node = MagicMock() + mock_node = MagicMock() + win._volume_nodes = {'Channel 1': mock_node} + win.channels = ['Channel 1'] + lut_item = MagicMock() + lut_item.gradient.listTicks.return_value = [(MagicMock(), 0.0), (MagicMock(), 1.0)] + win.lut_items = {'Channel 1': (lut_item, None, None)} + win._overlay_mode_overrides = {} + win._overlay_mode_overrides = {} win._canvas = MagicMock() win._view = MagicMock() win.statusBar = MagicMock(return_value=MagicMock()) @@ -845,25 +849,17 @@ def _spy_rerender(self): def test_auto_contrast_percentile_no_data(): """auto_contrast_percentile returns [0,1] when no raw data is cached.""" from cellacdc.renderer3d import VolumeRenderer3DWindow - from unittest.mock import MagicMock class _Headless(VolumeRenderer3DWindow): def _init_vispy(self): pass - def _init_ui(self): - c = MagicMock() - c._clim_min.value.return_value = 0.0 - c._clim_max.value.return_value = 1.0 - self._controls = c + def _init_ui(self): pass win = _Headless.__new__(_Headless) win._last_raw_data = None - win._volume_node = None - win._init_ui() - win.auto_contrast_percentile() # must not raise - - # Spinboxes set to full range fallback - win._controls._clim_min.setValue.assert_called_with(0.0) - win._controls._clim_max.setValue.assert_called_with(1.0) + win._raw_volumes_data = None + lo, hi = win.auto_contrast_percentile() + assert lo == 0.0 + assert hi == 1.0 def test_auto_contrast_percentile_with_data(): @@ -894,18 +890,13 @@ def _init_ui(self): win = _Headless.__new__(_Headless) win._last_raw_data = raw - win._volume_node = None - win._init_ui() - win.auto_contrast_percentile(lo_pct=1.0, hi_pct=99.5) + win._raw_volumes_data = {'Channel 1': raw} + lo, hi = win.auto_contrast_percentile(lo_pct=1.0, hi_pct=99.5, channel='Channel 1') - # The 99.5th percentile (index 994 of 1000) falls within the 997 background - # voxels → hi is mapped to well below 1.0 in normalised space. - hi_call = win._controls._clim_max.setValue.call_args[0][0] - assert hi_call < 1.0, ( - f"Expected hi < 1.0 (outliers excluded by percentile), got {hi_call}" + assert hi < 1.0, ( + f"Expected hi < 1.0 (outliers excluded by percentile), got {hi}" ) - lo_call = win._controls._clim_min.setValue.call_args_list[0][0][0] - assert 0.0 <= lo_call <= hi_call <= 1.0 + assert 0.0 <= lo <= hi <= 1.0 def test_auto_contrast_percentile_constant_data(): @@ -925,13 +916,9 @@ def _init_ui(self): win = _Headless.__new__(_Headless) win._last_raw_data = raw - win._volume_node = None - win._init_ui() - win.auto_contrast_percentile() - - # Falls back to [0, 1] when span is zero (degenerate data). - win._controls._clim_min.setValue.assert_called_with(0.0) - win._controls._clim_max.setValue.assert_called_with(1.0) + lo, hi = win.auto_contrast_percentile() + assert lo == 0.0 + assert hi == 1.0 def test_auto_contrast_percentile_large_volume_subsampled(): @@ -955,12 +942,7 @@ def _init_ui(self): win = _Headless.__new__(_Headless) win._last_raw_data = raw - win._volume_node = None - win._init_ui() - win.auto_contrast_percentile(lo_pct=1.0, hi_pct=99.0) - - lo = win._controls._clim_min.setValue.call_args_list[0][0][0] - hi = win._controls._clim_max.setValue.call_args[0][0] + lo, hi = win.auto_contrast_percentile(lo_pct=1.0, hi_pct=99.0) assert 0.0 <= lo <= hi <= 1.0, f"Invalid limits: lo={lo}, hi={hi}" @@ -971,12 +953,13 @@ def test_apply_voxel_scale_updates_canvas(): class _Bare(VolumeRenderer3DWindow): def _init_vispy(self): - if self._volume_node is None: - return + pass def _init_ui(self): self._controls = None r = _Bare() - r._volume_node = MagicMock() + mock_node = MagicMock() + r._volume_nodes = {'Channel 1': mock_node} + r._overlay_mode_overrides = {} r._canvas = MagicMock() r._last_strides = (1, 1, 1) r._voxel_dz = 2.0 @@ -984,7 +967,7 @@ def _init_ui(self): self._controls = None r._voxel_dx = 1.0 assigned = [] - type(r._volume_node).transform = property( + type(mock_node).transform = property( fget=lambda self: None, fset=lambda self, v: assigned.append(v), ) @@ -996,3 +979,99 @@ def _init_ui(self): self._controls = None r.close() del r + + +def test_vispy_cmap_from_spec_plain_colour(): + from cellacdc.colors import vispy_cmap_from_spec + from vispy.color import Colormap + + cmap = vispy_cmap_from_spec('green') + assert isinstance(cmap, Colormap) + assert vispy_cmap_from_spec('viridis') == 'viridis' + + +def test_overlay_channel_helpers(): + from cellacdc.renderer3d import ( + OVERLAY_CHANNEL_PREFIX, + is_overlay_channel, + overlay_channel_name, + ) + + assert OVERLAY_CHANNEL_PREFIX == 'overlay:' + assert is_overlay_channel('overlay:0') + assert not is_overlay_channel('Channel 1') + assert overlay_channel_name(2) == 'overlay:2' + + +def test_update_overlay_volumes_clear_and_add(): + from cellacdc.renderer3d import VolumeRenderer3DWindow + from unittest.mock import MagicMock, patch + + class _Headless(VolumeRenderer3DWindow): + def _init_vispy(self): pass + def _init_ui(self): + c = MagicMock() + c._mode_combo.currentData.return_value = 'mip' + c._interp_combo.currentData.return_value = 'linear' + c._step_spin.value.return_value = 0.8 + c._depict_combo.currentData.return_value = 'volume' + c._zplane_slider.value.return_value = 50 + c._gamma_spin.value.return_value = 1.0 + c._attn_spin.value.return_value = 0.5 + c._iso_spin.value.return_value = 0.5 + self._controls = c + + win = _Headless.__new__(_Headless) + win._overlay_mode_overrides = {} + win._volume_nodes = None + win._volumes_data = None + win._canvas = MagicMock() + win._view = MagicMock() + win._last_strides = (1, 1, 1) + win._voxel_dz = 1.0 + win._voxel_dy = 1.0 + win._voxel_dx = 1.0 + win._max_texture_3d = 512 + win._init_ui() + + win.update_overlay_volumes([]) + assert win._overlay_mode_overrides == {} + + data = np.ones((4, 8, 8), dtype=np.float32) + + def _fake_init_overlay(self, vol, channel_name, opacity, cmap_spec, mode_override): + node = MagicMock() + self._overlay_mode_overrides[channel_name] = mode_override + return node + + with patch.object( + _Headless, '_init_overlay_volume_node', _fake_init_overlay + ): + win.update_overlay_volumes([(data, 0.5, 'green', 'mip')]) + + assert 'overlay:0' in win._volume_nodes + assert win._overlay_mode_overrides == {'overlay:0': 'mip'} + assert win._volumes_data['overlay:0'].shape == data.shape + + +def test_on_full_clim_sets_normalized_range(): + from cellacdc.renderer3d import VolumeRenderer3DWindow + from unittest.mock import MagicMock + + win = VolumeRenderer3DWindow.__new__(VolumeRenderer3DWindow) + low_tick = MagicMock() + high_tick = MagicMock() + lut_item = MagicMock() + lut_item.channel = 'Channel 1' + lut_item.gradient.listTicks.return_value = [ + (low_tick, 0.2), + (high_tick, 0.8), + ] + + set_clim_calls = [] + win.set_clim = lambda lo, hi, channel: set_clim_calls.append((lo, hi, channel)) + win._on_full_clim(lut_item) + + lut_item.gradient.setTickValue.assert_any_call(low_tick, 0.0) + lut_item.gradient.setTickValue.assert_any_call(high_tick, 1.0) + assert set_clim_calls == [(0.0, 1.0, 'Channel 1')] From 14edb05cb6f1d679a936774a5cd463f57a9fd4c5 Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 09:42:10 +0200 Subject: [PATCH 2/8] Honor ElpadoCan CI and renderer UI conventions on this branch. Restore the module-level pytest skip for test_renderer3d (5fdb9237) and use the controls step size for primary volume relative_step_size, matching the pre-e8aceb63 renderer UI work. Co-authored-by: Cursor --- cellacdc/renderer3d.py | 2 +- tests/test_renderer3d.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index ba4956e8..328c15ff 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -908,7 +908,7 @@ def _init_volume_node( method=current_mode, cmap=current_cmap, interpolation=current_interp, - relative_step_size=2.5, + relative_step_size=current_step, parent=self._view.scene, ) diff --git a/tests/test_renderer3d.py b/tests/test_renderer3d.py index 7f46b20f..c1262123 100644 --- a/tests/test_renderer3d.py +++ b/tests/test_renderer3d.py @@ -3,8 +3,20 @@ These tests verify module structure, constants, and numpy-only logic without requiring a running display or GPU context. Window/canvas creation is not tested here because it requires an OpenGL context. + +Skipped in CI (see commit 5fdb9237) because the suite needs a GUI/OpenGL env. +Run locally with: pytest tests/test_renderer3d.py -v """ +try: + import pytest + pytest.skip( + 'skipping this test since it is gui based', + allow_module_level=True, + ) +except Exception: + pass + import numpy as np import pytest From ed1bc72ebc86a31a3c062a9ec1bf76dcafd8f5dc Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 10:22:54 +0200 Subject: [PATCH 3/8] Implement Batch 2 LUT polish and overlay UI for the 3D renderer. Add Clim myHistogramLUTitem, right-side opacity colorbar, in-renderer overlay controls, bidirectional sync with the main GUI, and roadmap docs under .features/. Co-authored-by: Cursor --- .features/3drenderer/README.md | 132 ++++++ .features/3drenderer/batch-1-done.md | 125 +++++ .features/3drenderer/batch-2-lut-overlays.md | 179 +++++++ .features/3drenderer/batch-3-cell-id.md | 79 ++++ .features/3drenderer/batch-4-z-anisotropy.md | 88 ++++ cellacdc/gui.py | 148 +++++- cellacdc/renderer3d.py | 465 +++++++++++++++++-- tests/test_renderer3d.py | 71 +++ 8 files changed, 1235 insertions(+), 52 deletions(-) create mode 100644 .features/3drenderer/README.md create mode 100644 .features/3drenderer/batch-1-done.md create mode 100644 .features/3drenderer/batch-2-lut-overlays.md create mode 100644 .features/3drenderer/batch-3-cell-id.md create mode 100644 .features/3drenderer/batch-4-z-anisotropy.md diff --git a/.features/3drenderer/README.md b/.features/3drenderer/README.md new file mode 100644 index 00000000..16433fb2 --- /dev/null +++ b/.features/3drenderer/README.md @@ -0,0 +1,132 @@ +# 3D Renderer Feature Roadmap + +Branch: `improvements_3d_renderer` · Fork HEAD: [`14edb05c`](https://github.com/SchmollerLab/Cell_ACDC/commit/14edb05c) · PR: [#1102](https://github.com/SchmollerLab/Cell_ACDC/pull/1102) + +This folder tracks the 3D Z-stack renderer feature request in batches. The renderer lives in [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py); the main GUI wires it through [`cellacdc/gui.py`](../../cellacdc/gui.py). + +## Commits to honor + +Upstream work by **ElpadoCan** on `improvements_3d_renderer` is the baseline this fork extends. When adding batches 2–4, preserve the multi-channel `_volume_nodes` model, overlay keys under `overlay:N` in the same dict, and colormap helpers in [`cellacdc/colors.py`](../../cellacdc/colors.py) (`vispy_cmap_from_spec` / `pg_to_vispy_cmap`). Do **not** revert Francesco's unified volume-node design or reintroduce `_ZPROJMODE_3D`. + +| Commit | Message | Intent | Status on branch | +|--------|---------|--------|------------------| +| `a3ad90e9` | feat: add GPU-accelerated 3D z-stack renderer | Initial renderer | **Preserved** | +| `6e9efa5f` | fix: install vispy and PyOpenGL for CI tests | `requirements_test.txt` + CI workflows | **Honored** — still present | +| `0f64a810` | fix: test_rendered3d failing | Test fixes | Superseded by refactor; patterns updated | +| `3f0d6f2a` | fix: test_rendered3d failing because of GUI init | GUI init in tests | Superseded by refactor | +| `ca5f179d` | fix: test_rendered3d failing because not closing gui elements | Test cleanup | Superseded by refactor | +| `5fdb9237` | ci: ignore test_renderer3d because it requires a GUI environment | Module-level `pytest.skip` | **Honored** — restored in `14edb05c` | +| `537cd967` | WIP: improving UI of 3D renderer | Remove `_ZPROJMODE_3D`, decouple 3D from z-proj dropdown | **Honored** — no `_ZPROJMODE_3D` in codebase | +| `1dd00e8e` | improvement: use launch 3d renderer button with 3d icon | `launch3dRendererButton` / `launch3dRendererAction` with `:3d.svg` | **Honored** in `gui.py` | +| `391377c1` | WIP: support for multiple overlay volumes | Overlay volume support | **Evolved** — unified `_volume_nodes` with `overlay:N` keys (not parallel list) in `e9c6311b` | +| `e8aceb63` | broken: multiple volume nodes one per channel | Multi-channel volume model | **Fixed/evolved** in `e9c6311b` — per-channel nodes + batch 1 completion | +| `e9c6311b` | Complete 3D renderer batch 1 on the multi-channel volume model | Batch 1 deliverables | Current baseline | +| `14edb05c` | Honor ElpadoCan CI and renderer UI conventions | CI skip + `relative_step_size=current_step` | **Latest on fork** | + +See [batch-1-done.md — Honored commits mapping](batch-1-done.md#honored-commits-mapping) for how each honored commit maps to delivered features. + +## Key files + +| File | Role | +|------|------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | `VolumeRenderer3DWindow`, controls, LUT, overlay volume nodes | +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | Launch adapter, `_get_overlay_zstacks()`, frame sync | +| [`cellacdc/widgets.py`](../../cellacdc/widgets.py) | `VolumeRendererToolbar`, `baseHistogramLUTitem`, `myHistogramLUTitem` | +| [`cellacdc/colors.py`](../../cellacdc/colors.py) | `pg_to_vispy_cmap`, `vispy_cmap_from_spec` | +| [`tests/test_renderer3d.py`](../../tests/test_renderer3d.py) | Smoke tests (module-level CI skip) | + +## Feature progress + +**Summary:** 14 Done · 0 Partial · 4 Not started (batches 3–4) + +| # | Feature | Status | Batch | Notes | +|---|---------|--------|-------|-------| +| 1 | "Clim:" colorbar slider (main GUI parity) | **Done** | [Batch 2](batch-2-lut-overlays.md) | `myHistogramLUTitem` with `Clim:` label | +| 2 | Auto + Full LUT buttons | **Done** | [Batch 1](batch-1-done.md) | | +| 3 | Colormap from LUT slider | **Done** | [Batch 1](batch-1-done.md) | `pg_to_vispy_cmap` path | +| 4 | Gamma slider + numeric control | **Done** | [Batch 1](batch-1-done.md) | | +| 5 | Step slider + numeric control | **Done** | [Batch 1](batch-1-done.md) | | +| 6 | Primary opacity (right-side grayscale colorbar) | **Done** | [Batch 2](batch-2-lut-overlays.md) | Right-side opacity LUT; form sliders removed | +| 7 | Home button with icon in toolbar | **Done** | [Batch 1](batch-1-done.md) | | +| 8 | Top toolbar (Home + Save) | **Done** | [Batch 1](batch-1-done.md) | | +| 9 | Shortcut `H` for home | **Done** | [Batch 1](batch-1-done.md) | | +| 10 | Overlaid segmentation masks | **Done** | [Batch 1](batch-1-done.md) | Data path via `_get_overlay_zstacks()` | +| 11 | Overlaid fluorescence channels | **Done** | [Batch 1](batch-1-done.md) | Data path via `_get_overlay_zstacks()` | +| 12 | Opacity sliders for overlay channels | **Done** | [Batch 2](batch-2-lut-overlays.md) | In-renderer + bidirectional sync with main GUI | +| 13 | LUT sliders for overlay channels | **Done** | [Batch 2](batch-2-lut-overlays.md) | PG gradient from main GUI `lutItem` | +| 14 | Segmentation mask opacity slider in 3D UI | **Done** | [Batch 2](batch-2-lut-overlays.md) | Overlays panel + sync with `labelsAlphaSlider` | +| 15 | Cell ID selector (show one cell) | **Not started** | [Batch 3](batch-3-cell-id.md) | | +| 16 | Clickable Cell ID (show one cell) | **Not started** | [Batch 3](batch-3-cell-id.md) | | +| 17 | z-anisotropy via `scipy.ndimage.zoom` | **Not started** | [Batch 4](batch-4-z-anisotropy.md) | Transform-only scaling today | +| 18 | z-anisotropy numeric control | **Not started** | [Batch 4](batch-4-z-anisotropy.md) | | + +## Batch status + +| Batch | Theme | Progress | Status | Doc | +|-------|-------|----------|--------|-----| +| 1 | Core renderer, toolbar, primary LUT, overlay data path, launch button (`:3d.svg`) | 10 / 10 scope items | **Complete** | [batch-1-done.md](batch-1-done.md) | +| 2 | LUT polish + in-renderer overlay UI + live sync | 5 / 5 checklist items | **Complete** | [batch-2-lut-overlays.md](batch-2-lut-overlays.md) | +| 3 | Cell ID isolation (selector + click) | 0 / 2 checklist items | **Planned** | [batch-3-cell-id.md](batch-3-cell-id.md) | +| 4 | z-anisotropy UI + `ndimage.zoom` resampling | 0 / 2 checklist items | **Planned** | [batch-4-z-anisotropy.md](batch-4-z-anisotropy.md) | + +## Data flow + +```mermaid +flowchart LR + subgraph MainGUI["gui.py (guiWin)"] + ZStack["_get_current_zstack()"] + Overlays["_get_overlay_zstacks()"] + Voxels["_get_current_voxel_sizes()"] + Adapter["_GuiWinRenderer3DAdapter"] + FrameSync["_update_3d_renderer_if_active()"] + end + + subgraph Renderer["renderer3d.py (VolumeRenderer3DWindow)"] + UpdateVol["update_volume()"] + UpdateOvl["update_overlay_volumes()"] + SetScale["set_voxel_scale()"] + VolNodes["_volume_nodes"] + Primary["primary channel(s)"] + Overlay["overlay:N keys"] + LUT["lut_items + VolumeRendererControls"] + Toolbar["VolumeRendererToolbar"] + end + + Launch["_launch_3d_renderer()"] --> UpdateVol + Launch --> UpdateOvl + Launch --> SetScale + FrameSync --> UpdateVol + FrameSync --> UpdateOvl + FrameSync --> SetScale + + ZStack --> UpdateVol + Overlays --> UpdateOvl + Voxels --> SetScale + Adapter -.-> Launch + + UpdateVol --> Primary + UpdateOvl --> Overlay + Primary --> VolNodes + Overlay --> VolNodes + LUT --> Primary + Toolbar --> Renderer +``` + +## Architecture notes + +### Primary vs overlay colormap paths + +- **Primary channel:** PyQtGraph LUT (`baseHistogramLUTitem`) → [`pg_to_vispy_cmap`](../../cellacdc/colors.py) → vispy `Volume.cmap`. Contrast limits come from gradient tick positions via `set_clim` / `set_cmap`. +- **Overlay channels:** Hardcoded colour names from [`_get_overlay_zstacks()`](../../cellacdc/gui.py) → [`vispy_cmap_from_spec`](../../cellacdc/colors.py) (black→colour ramp for plain names). Overlay LUT widgets in the main GUI are **not** read today. + +### 2D/3D overlay colour mismatch + +[`_get_overlay_zstacks()`](../../cellacdc/gui.py) assigns colours from `_FLUO_CMAPS` / `_LABEL_CMAPS` by index. It ignores each overlay's `lutItem` gradient (the two-colour ramp built in [`getOverlayItems()`](../../cellacdc/gui.py)). Batch 2 should align 3D overlay LUTs with the main GUI pattern. + +### Shared rendering parameters + +Overlay volumes inherit global **gamma**, **step**, and **interpolation** from `VolumeRendererControls`, not per-overlay LUT settings. See `_init_overlay_volume_node()` in [`renderer3d.py`](../../cellacdc/renderer3d.py). + +### z-anisotropy today + +Physical voxel sizes flow from metadata via `_get_current_voxel_sizes()` → `set_voxel_scale()` → vispy `STTransform`. No user-facing control and no `scipy.ndimage.zoom` resampling yet. See [batch-4-z-anisotropy.md](batch-4-z-anisotropy.md). diff --git a/.features/3drenderer/batch-1-done.md b/.features/3drenderer/batch-1-done.md new file mode 100644 index 00000000..0c00a4f3 --- /dev/null +++ b/.features/3drenderer/batch-1-done.md @@ -0,0 +1,125 @@ +# Batch 1 — Completed + +Core 3D renderer infrastructure, primary-channel controls, toolbar, and overlay **data** path. UI for per-overlay LUT/opacity and several parity items remain for Batch 2. + +Baseline commit: [`e9c6311b`](https://github.com/SchmollerLab/Cell_ACDC/commit/e9c6311b) · Fork HEAD: [`14edb05c`](https://github.com/SchmollerLab/Cell_ACDC/commit/14edb05c) + +## Honored commits mapping + +How upstream ElpadoCan commits map to batch 1 deliverables on this branch. Full table: [README — Commits to honor](README.md#commits-to-honor). + +| Commit | Delivered feature(s) | Where in codebase | +|--------|----------------------|-------------------| +| `a3ad90e9` | Initial GPU 3D z-stack renderer | [`renderer3d.py`](../../cellacdc/renderer3d.py) — `VolumeRenderer3DWindow`, vispy canvas | +| `6e9efa5f` | CI test dependencies (vispy, PyOpenGL) | `requirements_test.txt`, CI workflows | +| `5fdb9237` | Module-level GUI skip for CI | [`tests/test_renderer3d.py`](../../tests/test_renderer3d.py) — restored in `14edb05c` | +| `537cd967` | Decouple 3D from z-projection dropdown | No `_ZPROJMODE_3D`; launch via dedicated button only | +| `1dd00e8e` | Launch 3D renderer button with `:3d.svg` | [`gui.py`](../../cellacdc/gui.py) — `launch3dRendererButton`, `launch3dRendererAction` | +| `391377c1` | Multiple overlay volumes | `_volume_nodes` dict with `overlay:N` keys (evolved from parallel list) | +| `e8aceb63` | Multi-channel volume nodes (one per channel) | Per-channel primary keys in `_volume_nodes`; fixed in `e9c6311b` | +| `e9c6311b` | Batch 1 completion on multi-channel model | Checklist items 2–11 below; colormap helpers in [`colors.py`](../../cellacdc/colors.py) | +| `14edb05c` | CI + renderer UI conventions | `pytest.skip` restore; `relative_step_size=current_step` in renderer | + +**Superseded (refactor, patterns retained):** `0f64a810`, `3f0d6f2a`, `ca5f179d` — test fixes for GUI init/cleanup; current tests follow the same intent with updated structure. + +**Preservation rules for later batches:** keep unified `_volume_nodes` (primary + `overlay:N`); keep `vispy_cmap_from_spec` / `pg_to_vispy_cmap` in `colors.py`; do not reintroduce `_ZPROJMODE_3D`. + +## Checklist items delivered + +| # | Feature | Implementation | +|---|---------|----------------| +| 2 | Auto + Full LUT buttons | `_add_lut_items()`, `_on_auto_clim()`, `_on_full_clim()` | +| 3 | Colormap from LUT slider | `_on_lut_changed()` → `set_cmap()` → `pg_to_vispy_cmap` | +| 4 | Gamma slider + numeric | `VolumeRendererControls._gamma_spin` (`sliderWithSpinBox`) | +| 5 | Step slider + numeric | `VolumeRendererControls._step_spin` | +| 6 | Opacity control (primary) | Form-row `sliderWithSpinBox` per channel — **not** right-side colorbar yet | +| 7–9 | Home toolbar + Save + `H` | `VolumeRendererToolbar`, wired in `_init_ui()` | +| 10–11 | Overlay segm + fluo volumes | `_get_overlay_zstacks()` → `update_overlay_volumes()` | +| — | Launch 3D renderer button | `launch3dRendererButton` / `launch3dRendererAction` (`1dd00e8e`, `537cd967`) | + +## Primary channel LUT + +[`renderer3d.py`](../../cellacdc/renderer3d.py) `_add_lut_items()` creates one [`baseHistogramLUTitem`](../../cellacdc/widgets.py) per channel with: + +- Auto / Full buttons above each histogram +- `sigLookupTableChanged` → `set_clim` + `set_cmap` +- `include_rescale_lut_options=False` (main GUI uses full `myHistogramLUTitem` menu) + +Partial vs main GUI (`gui.py` `imgGrad`): + +- Uses `baseHistogramLUTitem`, not `myHistogramLUTitem` +- No "Clim:" axis labelling parity (Batch 2) +- No rescale-intensities menu (2D image / z-stack / time) + +## Toolbar + +[`VolumeRendererToolbar`](../../cellacdc/widgets.py): + +- **Home view** — `:home.svg` icon, shortcut `H`, emits `sigHomeView` → `reset_view()` +- **Save** — `:file-save.svg`, shortcut `Ctrl+S`, emits `sigSave` → `save_screenshot()` + +Wired in `VolumeRenderer3DWindow._init_ui()`. + +## Rendering controls panel + +`VolumeRendererControls` provides: + +- Gamma, step, per-primary-channel opacity (form sliders) +- Rendering mode, interpolation, ISO threshold, attenuation, depiction mode, z-plane slider + +Overlay volumes pick up gamma/step/interp at creation time in `_init_overlay_volume_node()`. + +## Overlay data path + +### GUI side — [`gui.py`](../../cellacdc/gui.py) + +`_get_overlay_zstacks()` returns `list[tuple]` of `(data, opacity, cmap[, mode])`: + +1. **Fluorescence overlays** — checked overlay channels, alpha scrollbar value, hardcoded `_FLUO_CMAPS[i]` +2. **Primary segmentation mask** — when draw mode includes "overlay segm. masks" and `labelsAlphaSlider > 0`; binary `(lab > 0)` volume +3. **Overlay label channels** — when overlay-labels button active; binary masks with `_LABEL_CMAPS[j]` + +Launched and refreshed from: + +- `_launch_3d_renderer()` +- `_update_3d_renderer_if_active()` (frame/position navigation) + +Voxel sizes: `_get_current_voxel_sizes()` reads `PhysicalSizeZ/Y/X` from `posData`. + +### Renderer side — [`renderer3d.py`](../../cellacdc/renderer3d.py) + +- Unified `_volume_nodes` dict: primary keys = channel names; overlays = `overlay:0`, `overlay:1`, … +- `update_overlay_volumes()` replaces overlay nodes on each call +- `_normalize_overlay_volume()` min–max normalizes to [0, 1] +- `_init_overlay_volume_node()` applies `vispy_cmap_from_spec(cmap_spec)` and stored opacity + +## Colormap conversion + +| Path | Function | Used for | +|------|----------|----------| +| PG gradient → vispy | [`pg_to_vispy_cmap`](../../cellacdc/colors.py) | Primary LUT changes | +| Plain colour name | [`vispy_cmap_from_spec`](../../cellacdc/colors.py) | Overlay volumes | + +## z-anisotropy (transform only) + +`set_voxel_scale(dz, dy, dx)` stores physical µm sizes and applies vispy `STTransform` in `_apply_voxel_scale()`, accounting for GPU downsampling strides (`_last_strides`). No UI control; no `ndimage.zoom` resampling. + +## Launch adapter + +[`_GuiWinRenderer3DAdapter`](../../cellacdc/gui.py) implements `VolumeRendererAdapter`: + +- `get_current_zstack()` → `_get_current_zstack()` +- `get_voxel_sizes()` → `_get_current_voxel_sizes()` + +## CI + +[`tests/test_renderer3d.py`](../../tests/test_renderer3d.py) uses a module-level `pytest.skip` for GUI/OpenGL environments. Run locally: `pytest tests/test_renderer3d.py -v`. + +## Known gaps carried to later batches + +- Right-side grayscale opacity colorbar (`imgGradRight` pattern) +- In-renderer overlay LUT + opacity sliders with live sync +- `myHistogramLUTitem` / "Clim:" labelling parity +- Overlay colours ignore main GUI `lutItem` gradients +- Cell ID isolation +- z-anisotropy numeric UI and zoom-based correction diff --git a/.features/3drenderer/batch-2-lut-overlays.md b/.features/3drenderer/batch-2-lut-overlays.md new file mode 100644 index 00000000..902d3fbd --- /dev/null +++ b/.features/3drenderer/batch-2-lut-overlays.md @@ -0,0 +1,179 @@ +# Batch 2 — LUT Polish + Overlay UI + +Bring primary LUT and overlay controls in the 3D window to parity with the main GUI, and wire live updates so slider changes apply immediately (not only on frame navigation). + +## Checklist targets + +| # | Feature | +|---|---------| +| 1 | "Clim:" colorbar slider matching main GUI | +| 6 | Opacity as right-side grayscale colorbar | +| 12 | Opacity sliders for overlaid fluorescence channels | +| 13 | LUT sliders for overlay channels | +| 14 | Segmentation mask opacity slider in 3D UI | + +## Goals + +1. Upgrade primary LUT toward main GUI behaviour. +2. Add right-side grayscale opacity colorbar (mirror `imgGradRight`). +3. Add in-renderer overlay LUT + opacity controls. +4. Add segmentation mask opacity control in the 3D window. +5. Live-sync overlay control changes to volume nodes. + +--- + +## 1. Primary LUT parity + +### Current state + +[`renderer3d.py`](../../cellacdc/renderer3d.py) `_add_lut_items()` uses [`baseHistogramLUTitem`](../../cellacdc/widgets.py) with `include_rescale_lut_options=False`. + +Main GUI uses [`myHistogramLUTitem`](../../cellacdc/widgets.py) on `guiWin.imgGrad` with full gradient menu, child LUT linkage, and settings restore. + +### Tasks + +- [ ] Evaluate switching primary LUT to `myHistogramLUTitem` (or extend `baseHistogramLUTitem` with Clim labelling only). +- [ ] Match axis label style — user request specifies **"Clim:"** as the colorbar slider label (main GUI uses channel name via `setAxisLabel`; confirm desired label text). +- [ ] Consider enabling rescale-intensities options if 3D should respect the same rescale policy as 2D (may need adapter hooks to re-fetch normalized data). +- [ ] Keep existing Auto / Full buttons and `_on_lut_changed` → `set_clim` / `set_cmap` wiring. + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | `_add_lut_items()`, `_on_lut_changed`, `_on_auto_clim`, `_on_full_clim` | +| [`cellacdc/widgets.py`](../../cellacdc/widgets.py) | LUT item class choice, axis label helper if needed | + +### Reference — main GUI primary LUT + +```4256:4310:cellacdc/gui.py + self.imgGrad = widgets.myHistogramLUTitem(parent=self, name='image') + ... + self.imgGradRight = widgets.baseHistogramLUTitem( + name='image', parent=self, gradientPosition='left' + ) + ... + self.imgGrad.setChildLutItem(self.imgGradRight) +``` + +--- + +## 2. Right-side grayscale opacity colorbar + +### Current state + +Primary opacity is a form-row [`sliderWithSpinBox`](../../cellacdc/widgets.py) in `VolumeRendererControls` (`Opacity ({channel}):`). + +Main GUI uses vertical gradient LUT on the right (`imgGradRight`, `gradientPosition='left'`) linked via `setChildLutItem`. + +### Tasks + +- [ ] Add `baseHistogramLUTitem` with grayscale gradient to the right of the vispy canvas (same layout slot as LUT row, or dedicated column). +- [ ] Link to primary LUT via `setChildLutItem` if dual-slider behaviour should match 2D. +- [ ] Map gradient tick positions → `volume_node.opacity` (or equivalent vispy alpha control). +- [ ] Deprecate or hide redundant form-row opacity sliders once colorbar works (avoid duplicate controls). + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | `_init_ui()`, `_add_lut_items()` or new `_add_opacity_lut()`, `VolumeRendererControls` | +| [`cellacdc/widgets.py`](../../cellacdc/widgets.py) | Reuse `baseHistogramLUTitem` pattern from main GUI | + +--- + +## 3. In-renderer overlay LUT sliders + +### Current state + +Overlays receive hardcoded cmap strings from [`_get_overlay_zstacks()`](../../cellacdc/gui.py): + +```20191:20217:cellacdc/gui.py + _FLUO_CMAPS = ['green', 'magenta', 'cyan', 'yellow', 'orange'] + ... + cmap = _FLUO_CMAPS[i % len(_FLUO_CMAPS)] + result.append((data, opacity, cmap)) +``` + +Main GUI builds per-channel two-colour gradients in [`getOverlayItems()`](../../cellacdc/gui.py) via `initColormapOverlayLayerItem(initColor, lutItem)`. + +### Tasks + +- [ ] Extend overlay tuple schema to carry channel name + optional PG gradient state (or read from GUI `overlayLayersItems` at sync time). +- [ ] Add overlay LUT widgets in 3D window (one per active overlay fluo channel) — mirror two-colour gradient UI. +- [ ] On LUT change: `pg_to_vispy_cmap(lutItem.gradient.colorMap())` → update `overlay:N` node `cmap`. +- [ ] Fix 2D/3D colour mismatch by sourcing overlay colour from GUI `lutItem` instead of `_FLUO_CMAPS[i]`. + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | `_get_overlay_zstacks()` — include channel metadata / lut gradient | +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | Overlay LUT layout, `update_overlay_volumes()`, node cmap updates | +| [`cellacdc/colors.py`](../../cellacdc/colors.py) | Already has `pg_to_vispy_cmap`; may need overlay-specific helpers | + +--- + +## 4. In-renderer overlay opacity sliders + +### Current state + +Opacity values are read once from main GUI alpha scrollbars when `_get_overlay_zstacks()` runs. No controls inside the 3D window for overlays. + +### Tasks + +- [ ] Add per-overlay opacity control in 3D UI (form slider or mini colorbar per overlay channel). +- [ ] On change: update `volume_node.opacity` directly for matching `overlay:N` key. +- [ ] Optionally bidirectional sync with main GUI alpha scrollbars (nice-to-have; document one-way vs two-way). + +### Segmentation mask opacity + +Main GUI: [`labelsAlphaSlider`](../../cellacdc/widgets.py) on `myHistogramLUTitem` / `imgGrad`. + +- [ ] Add dedicated "Segmentation opacity" control in 3D controls panel. +- [ ] When changed, rebuild or update segm overlay node opacity without full frame reload if possible. + +--- + +## 5. Live sync + +### Current state + +[`_update_3d_renderer_if_active()`](../../cellacdc/gui.py) pushes fresh data on frame/position changes only. Overlay slider edits in the main GUI do not refresh the 3D window until navigation. + +### Tasks + +- [ ] Connect main GUI overlay alpha / labels alpha changes to `_update_3d_renderer_if_active()` or a lighter `update_overlay_volumes()` call. +- [ ] In-renderer overlay control changes should update nodes in place (preferred) rather than full `_get_overlay_zstacks()` rebuild when only opacity/cmap changed. +- [ ] Add `VolumeRenderer3DWindow.set_overlay_opacity(index, value)` and `set_overlay_cmap(index, cmap)` helpers for incremental updates. + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | Signal connections from overlay widgets; optional sync callbacks | +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | Incremental overlay node update API | + +--- + +## Suggested implementation order + +1. Fix overlay colour source in `_get_overlay_zstacks()` (quick win for 2D/3D match). +2. Primary LUT labelling + optional `myHistogramLUTitem` upgrade. +3. Right-side primary opacity colorbar. +4. Overlay opacity sliders in 3D UI. +5. Overlay LUT sliders in 3D UI. +6. Live sync wiring (main GUI ↔ 3D renderer). + +## Acceptance criteria + +- Primary LUT looks and behaves like main GUI Clim slider (label, gradient, Auto/Full, cmap). +- Primary opacity adjustable via right-side grayscale colorbar. +- Each active overlay fluo channel has LUT + opacity in the 3D window. +- Segmentation mask opacity adjustable without leaving the 3D window. +- Changing overlay opacity or LUT in either GUI updates the 3D view immediately. + +## Out of scope (later batches) + +- Cell ID isolation → [batch-3-cell-id.md](batch-3-cell-id.md) +- z-anisotropy UI → [batch-4-z-anisotropy.md](batch-4-z-anisotropy.md) diff --git a/.features/3drenderer/batch-3-cell-id.md b/.features/3drenderer/batch-3-cell-id.md new file mode 100644 index 00000000..8d9241e0 --- /dev/null +++ b/.features/3drenderer/batch-3-cell-id.md @@ -0,0 +1,79 @@ +# Batch 3 — Cell ID Isolation + +Allow the 3D renderer to show a single labelled cell in isolation — either by selecting a cell ID from a control or by clicking a cell in the volume view. + +## Checklist targets + +| # | Feature | Status | +|---|---------|--------| +| 15 | Cell ID selector (show one cell) | **Not started** | +| 16 | Clickable Cell ID (show one cell) | **Not started** | + +## Goals + +1. Add a cell ID selector control in the 3D window (dropdown, spin box, or list synced with main GUI label set). +2. When a cell ID is selected, mask the primary and/or overlay segmentation volumes so only that label is visible. +3. Support click-to-pick: raycast or slice-based picking on the vispy canvas to set the active cell ID. +4. Provide a clear "show all cells" reset (e.g. ID 0 or dedicated button). + +--- + +## 1. Cell ID selector + +### Current state + +Segmentation overlays arrive as binary `(lab > 0)` masks via [`_get_overlay_zstacks()`](../../cellacdc/gui.py). The renderer has no per-label filtering; all labelled pixels render together. + +### Tasks + +- [ ] Read label volume (not just binary mask) from adapter or a new `get_label_zstack()` hook. +- [ ] Add UI control for active cell ID (0 = all cells). +- [ ] Apply label mask in `update_volume()` / overlay node setup: `data * (labels == cell_id)` or equivalent GPU-friendly masking. +- [ ] Sync selector with main GUI cell selection if one exists (document one-way vs two-way). + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | Adapter hook for raw label data; optional sync with 2D cell selection | +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | Cell ID control widget, masking logic on volume nodes | + +--- + +## 2. Clickable cell ID (pick in 3D view) + +### Current state + +No picking or cell-ID interaction on the vispy canvas. + +### Tasks + +- [ ] Handle mouse click on canvas → map screen coords to volume index (vispy scene picking or manual unproject). +- [ ] Read label value at picked voxel; set active cell ID and refresh masked volumes. +- [ ] Visual feedback (cursor, status bar, or highlight) for picked ID. +- [ ] Ignore picks on background (label 0). + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | Canvas event handler, pick → cell ID, refresh | + +--- + +## Dependencies + +- Batch 1 overlay data path (complete) — segmentation volumes must remain available as labelled data, not only binary masks. +- Batch 2 overlay UI (optional) — in-renderer segm opacity may interact with per-cell masking; coordinate designs before implementing. + +## Out of scope + +- z-anisotropy controls → [batch-4-z-anisotropy.md](batch-4-z-anisotropy.md) +- Tracking / lineage-aware cell selection across time (future enhancement) + +## Acceptance criteria + +- User can enter or select a cell ID and see only that cell in the 3D view. +- User can click a cell in the 3D canvas to isolate it. +- Resetting to "all cells" restores the full segmentation view. +- Frame navigation preserves the selected cell ID until explicitly cleared. diff --git a/.features/3drenderer/batch-4-z-anisotropy.md b/.features/3drenderer/batch-4-z-anisotropy.md new file mode 100644 index 00000000..6837d1f7 --- /dev/null +++ b/.features/3drenderer/batch-4-z-anisotropy.md @@ -0,0 +1,88 @@ +# Batch 4 — z-Anisotropy UI + Resampling + +Expose physical z-anisotropy to the user and optionally correct voxel data with `scipy.ndimage.zoom` instead of relying solely on vispy transform scaling. + +## Checklist targets + +| # | Feature | Status | +|---|---------|--------| +| 17 | z-anisotropy via `scipy.ndimage.zoom` | **Not started** | +| 18 | z-anisotropy numeric control | **Not started** | + +## Goals + +1. Add a user-facing z-anisotropy factor (numeric spin box / slider) in the 3D renderer controls. +2. Continue supporting metadata-driven physical sizes from `_get_current_voxel_sizes()`. +3. Optionally resample volume data with `scipy.ndimage.zoom` when anisotropy correction is enabled (vs. transform-only display today). +4. Document trade-offs: resampling quality/cost vs. GPU transform stretch. + +--- + +## 1. Current state (transform only) + +[`set_voxel_scale(dz, dy, dx)`](../../cellacdc/renderer3d.py) stores physical µm sizes and applies vispy `STTransform` in `_apply_voxel_scale()`, accounting for GPU downsampling strides (`_last_strides`). + +- Voxel sizes flow: `_get_current_voxel_sizes()` → `_launch_3d_renderer()` / `_update_3d_renderer_if_active()` → `set_voxel_scale()`. +- No user override; no `ndimage.zoom` on the numpy volume before upload. + +See also [batch-1-done.md — z-anisotropy (transform only)](batch-1-done.md#z-anisotropy-transform-only). + +--- + +## 2. Numeric z-anisotropy control + +### Tasks + +- [ ] Add control in `VolumeRendererControls` (e.g. "Z anisotropy:" spin box, default from metadata ratio `dz/dy` or `dz/dx`). +- [ ] On change: update `STTransform` scale even when metadata is missing or wrong. +- [ ] Persist value for the session (optional: save in renderer settings JSON if one exists). +- [ ] Show units / help text (physical µm per pixel vs. unitless stretch factor — pick one convention and document). + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | UI control, `_apply_voxel_scale()` user override | +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | Optional: pass default anisotropy from metadata | + +--- + +## 3. `scipy.ndimage.zoom` resampling path + +### Tasks + +- [ ] Add toggle or mode: **transform only** (current) vs. **resample volume**. +- [ ] When resampling: compute zoom factors from desired anisotropy and apply `ndimage.zoom` to primary + overlay volumes before GPU upload. +- [ ] Update `_last_strides` / downsampling logic to match resampled shape. +- [ ] Benchmark memory and launch latency; consider lazy resample on anisotropy change only. +- [ ] Match interpolation order with vispy volume interpolation where possible. + +### Files + +| File | Changes | +|------|---------| +| [`cellacdc/renderer3d.py`](../../cellacdc/renderer3d.py) | Resample helper, hook in `update_volume()` / `update_overlay_volumes()` | +| [`cellacdc/gui.py`](../../cellacdc/gui.py) | Unlikely changes unless adapter passes resample preference | + +--- + +## Design notes + +| Approach | Pros | Cons | +|----------|------|------| +| Transform only (`STTransform`) | Fast, no extra memory, current behaviour | Stretched voxels; sampling artifacts on thick Z | +| `ndimage.zoom` resample | Cubic/isotropic voxels for rendering | CPU cost, memory spike, must re-run on data refresh | + +Batch 4 should implement the numeric control first (transform path), then add optional resampling behind an explicit user toggle. + +## Dependencies + +- Batch 1 volume upload and stride logic (complete). +- Cell ID masking (batch 3) should apply **after** resampling if both are active, or resample masked volumes consistently. + +## Acceptance criteria + +- User can adjust z-anisotropy from the 3D window without editing metadata. +- Default reflects `PhysicalSizeZ/Y/X` when available. +- Optional resampling mode visibly corrects elongated Z voxels and updates on frame sync. +- Transform-only mode remains available as the fast default. diff --git a/cellacdc/gui.py b/cellacdc/gui.py index 87b8e85f..565b60b6 100755 --- a/cellacdc/gui.py +++ b/cellacdc/gui.py @@ -215,6 +215,83 @@ def get_voxel_sizes(self): def on_renderer_closed(self): pass + def on_main_overlay_changed(self): + from cellacdc.renderer3d import _parse_overlay_entry, overlay_channel_name + + win = getattr(self._gui, '_renderer3d_window', None) + if win is None or not win.isVisible(): + return + overlays = self._gui._get_overlay_zstacks() + win._syncing_overlay_from_main = True + try: + if not overlays: + win.update_overlay_volumes([]) + return + existing = [ + k for k in (win._volume_nodes or {}) + if k.startswith('overlay:') + ] + if len(existing) != len(overlays): + win.update_overlay_volumes(overlays) + return + for index, entry in enumerate(overlays): + _data, opacity, cmap_spec, _mode, meta = _parse_overlay_entry( + entry, index + ) + key = overlay_channel_name(index) + win.set_overlay_opacity(key, opacity, sync_main_gui=False) + win.set_overlay_cmap(key, cmap_spec, sync_main_gui=False) + widgets_info = win._overlay_widgets.get(key) + if widgets_info is None: + continue + opacity_spin = widgets_info.get('opacity_spin') + if opacity_spin is not None: + opacity_spin.blockSignals(True) + opacity_spin.setValue(float(opacity)) + opacity_spin.blockSignals(False) + lut_item = widgets_info.get('lut_item') + if lut_item is not None and hasattr(cmap_spec, 'getLookupTable'): + lut_item.blockSignals(True) + lut_item.setGradient(win._pg_cmap_to_gradient(cmap_spec)) + lut_item.blockSignals(False) + finally: + win._syncing_overlay_from_main = False + + def apply_overlay_control_from_renderer( + self, + channel_name: str, + opacity: float | None = None, + gradient_state: dict | None = None, + labels_alpha: float | None = None, + ) -> None: + if getattr(self._gui, '_renderer3d_sync_blocked', False): + return + self._gui._renderer3d_sync_blocked = True + try: + if labels_alpha is not None: + slider = self._gui.imgGrad.labelsAlphaSlider + slider.blockSignals(True) + slider.setValue( + float(labels_alpha) * slider.maximum() + ) + slider.blockSignals(False) + return + if channel_name not in getattr(self._gui, 'overlayLayersItems', {}): + return + _imageItem, lutItem, alphaSB = self._gui.overlayLayersItems[ + channel_name + ][:3] + if opacity is not None: + alphaSB.blockSignals(True) + alphaSB.setValue(int(round(opacity * alphaSB.maximum()))) + alphaSB.blockSignals(False) + if gradient_state is not None: + lutItem.gradient.blockSignals(True) + lutItem.gradient.restoreState(gradient_state) + lutItem.gradient.blockSignals(False) + finally: + self._gui._renderer3d_sync_blocked = False + class guiWin(QMainWindow, whitelist.WhitelistGUIElements, gui_combine.CombineGuiElements, @@ -20180,7 +20257,10 @@ def _get_current_voxel_sizes(self): return None def _get_overlay_zstacks(self): - """Return list of (data, opacity, cmap) for each active overlay volume. + """Return list of overlay tuples for each active overlay volume. + + Each entry is ``(data, opacity, cmap_spec, mode_override, meta)`` where + *meta* contains ``kind``, ``channel_name``, and ``overlay_index``. Covers three sources: 1. Fluorescence overlay channels (alpha scrollbar opacity, toolbar gate). @@ -20188,7 +20268,6 @@ def _get_overlay_zstacks(self): and labelsAlphaSlider > 0. 3. Overlay labels channels — when the overlay-labels button is checked. """ - _FLUO_CMAPS = ['green', 'magenta', 'cyan', 'yellow', 'orange'] _LABEL_CMAPS = ['blue', 'cyan', 'magenta'] if not self.isDataLoaded: return [] @@ -20213,8 +20292,13 @@ def _get_overlay_zstacks(self): if data.ndim != 3: continue opacity = alphaSB.value() / alphaSB.maximum() - cmap = _FLUO_CMAPS[i % len(_FLUO_CMAPS)] - result.append((data, opacity, cmap)) + cmap_spec = lutItem.gradient.colorMap() + meta = { + 'kind': 'fluo', + 'channel_name': chName, + 'overlay_index': len(result), + } + result.append((data, opacity, cmap_spec, None, meta)) # -- 2. Primary segmentation mask (2D or 3D segmentation) ------------- how = self.drawIDsContComboBox.currentText() @@ -20231,7 +20315,16 @@ def _get_overlay_zstacks(self): else: mask = None if mask is not None: - result.append((mask, float(labels_alpha), 'red', 'mip')) + meta = { + 'kind': 'segm', + 'channel_name': '__segm__', + 'overlay_index': len(result), + } + segm_alpha_max = max(1, self.imgGrad.labelsAlphaSlider.maximum()) + segm_opacity = float(labels_alpha) / segm_alpha_max + result.append( + (mask, segm_opacity, 'red', 'mip', meta) + ) # -- 3. Overlay label channels ----------------------------------------- ol_labels_active = ( @@ -20254,10 +20347,52 @@ def _get_overlay_zstacks(self): else: continue cmap = _LABEL_CMAPS[j % len(_LABEL_CMAPS)] - result.append((mask, 0.5, cmap, 'mip')) + meta = { + 'kind': 'ol_labels', + 'channel_name': segmEndname, + 'overlay_index': len(result), + } + result.append((mask, 0.5, cmap, 'mip', meta)) return result + def _connect_3d_renderer_overlay_sync(self): + """Wire main GUI overlay widgets to the open 3D renderer (bidirectional).""" + win = getattr(self, '_renderer3d_window', None) + if win is None: + return + + self._renderer3d_sync_blocked = False + adapter = win._adapter + if adapter is None: + adapter = _GuiWinRenderer3DAdapter(self) + win._adapter = adapter + + if not hasattr(self, '_renderer3d_overlay_push'): + def _push_overlay_changes(*_args): + if getattr(self, '_renderer3d_sync_blocked', False): + return + adapter.on_main_overlay_changed() + + self._renderer3d_overlay_push = _push_overlay_changes + self.imgGrad.labelsAlphaSlider.valueChanged.connect( + _push_overlay_changes + ) + + connected = getattr(self, '_renderer3d_overlay_connected', set()) + push = self._renderer3d_overlay_push + for items in getattr(self, 'overlayLayersItems', {}).values(): + lutItem, alphaSB = items[1], items[2] + sb_id = id(alphaSB) + if sb_id in connected: + continue + alphaSB.valueChanged.connect(push) + lutItem.sigLookupTableChanged.connect(push) + if hasattr(lutItem, 'overlayColorButton'): + lutItem.overlayColorButton.sigColorChanged.connect(push) + connected.add(sb_id) + self._renderer3d_overlay_connected = connected + def _get_current_zstack(self): """Return a (Z, Y, X) float32 array for the current position and frame. @@ -20323,6 +20458,7 @@ def _launch_3d_renderer(self, *args, **kwargs): ) if first_launch: self._position_renderer3d_window() + self._connect_3d_renderer_overlay_sync() self._renderer3d_window.show() self._renderer3d_window.raise_() diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index 328c15ff..3f70f48a 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -104,6 +104,37 @@ def overlay_channel_name(index: int) -> str: return f'{OVERLAY_CHANNEL_PREFIX}{index}' +OVERLAY_KIND_FLUO = 'fluo' +OVERLAY_KIND_SEGM = 'segm' +OVERLAY_KIND_OL_LABELS = 'ol_labels' + + +def _volume_cmap_from_spec(cmap_spec): + """Build a vispy colormap from a PG ColorMap, colour name, or passthrough.""" + if cmap_spec is None: + return colors.vispy_cmap_from_spec('green') + if hasattr(cmap_spec, 'getLookupTable'): + return colors.pg_to_vispy_cmap(cmap_spec) + if isinstance(cmap_spec, str): + return colors.vispy_cmap_from_spec(cmap_spec) + return cmap_spec + + +def _parse_overlay_entry(entry, index: int): + """Return (data, opacity, cmap_spec, mode_override, meta) from an overlay tuple.""" + data, opacity, cmap_spec = entry[0], entry[1], entry[2] + mode_override = None + meta: dict = {'overlay_index': index} + if len(entry) > 3: + if isinstance(entry[3], str): + mode_override = entry[3] + if len(entry) > 4 and isinstance(entry[4], dict): + meta.update(entry[4]) + elif isinstance(entry[3], dict): + meta.update(entry[3]) + return data, opacity, cmap_spec, mode_override, meta + + # --------------------------------------------------------------------------- # Pure-stdlib PNG writer (fallback when skimage is not available) # --------------------------------------------------------------------------- @@ -149,6 +180,18 @@ def get_voxel_sizes(self) -> tuple[float, float, float] | None: def on_renderer_closed(self) -> None: """Called when the renderer window is closed (hidden).""" + def on_main_overlay_changed(self) -> None: + """Push overlay opacity/cmap changes from the main GUI to the renderer.""" + + def apply_overlay_control_from_renderer( + self, + channel_name: str, + opacity: float | None = None, + gradient_state: dict | None = None, + labels_alpha: float | None = None, + ) -> None: + """Update main GUI overlay widgets from the 3D renderer (bidirectional sync).""" + # --------------------------------------------------------------------------- # Controls widget @@ -215,31 +258,8 @@ def _build(self) -> None: layout.addFormWidget(_step_form_widget, row=row) row += 1 - self._opacity_spins = {} - for r, channel in enumerate(self._channels): - opacity_spin = widgets.sliderWithSpinBox( - title_loc='in_line', - isFloat=True, - parent=self, - normalize_factor=20 - ) - opacity_spin.setRange(0.0, 1.0) - opacity_spin.setSingleStep(0.05) - opacity_spin.setValue(1.0) - opacity_spin.setDecimals(2) - opacity_spin.setToolTip( - f'Opacity for {channel} (0 = transparent, 1 = opaque).\n' - 'Mirrors napari\'s layer opacity control.' - ) - opacity_spin.valueChanged.connect( - partial(self._on_opacity_changed, channel=channel) - ) - _opacity_form_widget = widgets.formWidget( - opacity_spin, - labelTextLeft=f'Opacity ({channel}):', - ) - layout.addFormWidget(_opacity_form_widget, row=row+r) - self._opacity_spins[channel] = opacity_spin + # Primary-channel opacity is controlled via the right-side grayscale + # colorbar in the 3D window (see VolumeRenderer3DWindow._add_opacity_lut_items). layout.addNewColumn(with_separator=True) @@ -466,6 +486,13 @@ def __init__( self._volumes_data: dict[str, np.ndarray] | None = None self._raw_volumes_data: dict[str, np.ndarray] | None = None self.lut_items: dict[str, widgets.baseHistogramLUTitem] | None = None + self._opacity_lut_items: dict[str, widgets.baseHistogramLUTitem] = {} + self._overlay_meta: dict[str, dict] = {} + self._overlay_widgets: dict[str, dict] = {} + self._overlay_controls_layout: QVBoxLayout | None = None + self._overlay_controls_host: QWidget | None = None + self._syncing_overlay_from_main = False + self._syncing_overlay_from_renderer = False self._overlay_mode_overrides: dict[str, str | None] = {} self.channels: list[str] | None = None self._last_shape: tuple | None = None @@ -497,8 +524,10 @@ def _volume_shape(self, channel: str) -> tuple[int, int, int] | None: return self._volumes_data[channel].shape return self._last_shape - def _remove_overlay_channels(self) -> None: + def _remove_overlay_channels(self, clear_widgets: bool = True) -> None: if not self._volume_nodes: + if clear_widgets: + self._clear_overlay_widgets() return for name in list(self._volume_nodes): if not is_overlay_channel(name): @@ -507,7 +536,20 @@ def _remove_overlay_channels(self) -> None: del self._volume_nodes[name] if self._volumes_data is not None: self._volumes_data.pop(name, None) + self._overlay_meta.pop(name, None) self._overlay_mode_overrides.clear() + if clear_widgets: + self._clear_overlay_widgets() + + def _clear_overlay_widgets(self) -> None: + self._overlay_widgets.clear() + if self._overlay_controls_layout is None: + return + while self._overlay_controls_layout.count(): + item = self._overlay_controls_layout.takeAt(0) + widget = item.widget() + if widget is not None: + widget.deleteLater() def _normalize_overlay_volume(self, data: np.ndarray) -> np.ndarray: if data.ndim != 3: @@ -550,6 +592,42 @@ def _init_vispy(self) -> None: self._axis_visual = scene.visuals.XYZAxis(parent=self._view.scene) self._axis_visual.visible = False + def _configure_renderer_lut_item( + self, + lut_item: widgets.myHistogramLUTitem, + ) -> None: + """Strip 2D-only gradient menu entries not applicable to the 3D renderer.""" + lut_item.removeAddScaleBarAction() + lut_item.removeAddTimestampAction() + menu = lut_item.gradient.menu + for attr in ( + 'invertBwAction', + 'fontSizeMenu', + 'contLineWightActionGroup', + 'mothBudLineWightActionGroup', + ): + item = getattr(lut_item, attr, None) + if item is None: + continue + try: + if hasattr(item, 'menuAction'): + menu.removeAction(item.menuAction()) + else: + menu.removeAction(item) + except Exception: + pass + for attr in ('textColorButton', 'contoursColorButton', 'mothBudLineColorButton'): + button = getattr(lut_item, attr, None) + if button is None: + continue + for action in menu.actions(): + if action.defaultWidget() is not None: + try: + if button in action.defaultWidget().findChildren(type(button)): + menu.removeAction(action) + except Exception: + pass + def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: self.lut_items_graphics_layout = pg.GraphicsLayoutWidget() self.lut_items_graphics_layout.setBackground('black') @@ -572,12 +650,13 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: full_btn_proxy.setWidget(full_btn) self.lut_items_layout.addItem(full_btn_proxy, row=1, col=c) - lut_item = widgets.baseHistogramLUTitem( - parent=self, - name=channel, - axisLabel=channel, - include_rescale_lut_options=False + lut_item = widgets.myHistogramLUTitem( + parent=self, + name=channel, + axisLabel='Clim:', + include_rescale_lut_options=False, ) + self._configure_renderer_lut_item(lut_item) self.lut_items[channel] = (lut_item, auto_btn, full_btn) self.lut_items_layout.addItem(lut_item, row=2, col=c) @@ -594,9 +673,173 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: total_width += lut_item.sizeHint(Qt.PreferredSize).width() scene_layout.addWidget(self.lut_items_graphics_layout, stretch=0) - - # Add some padding to prevent clipping - self.lut_items_graphics_layout.setFixedWidth(int(total_width + 20)) + self.lut_items_graphics_layout.setFixedWidth(int(total_width + 20)) + + def _add_opacity_lut_items(self, scene_layout: QHBoxLayout) -> None: + self._opacity_lut_graphics_layout = pg.GraphicsLayoutWidget() + self._opacity_lut_graphics_layout.setBackground('black') + self._opacity_lut_layout = self._opacity_lut_graphics_layout.addLayout( + row=0, col=0 + ) + total_width = 0 + for c, channel in enumerate(self.channels): + opacity_lut = widgets.baseHistogramLUTitem( + parent=self, + name=f'opacity_{channel}', + axisLabel='Opacity:', + gradientPosition='left', + include_rescale_lut_options=False, + ) + opacity_lut.channel = channel + opacity_lut.vb.hide() + from pyqtgraph.graphicsItems.GradientEditorItem import Gradients + opacity_lut.setGradient(Gradients['grey']) + ticks = opacity_lut.gradient.listTicks() + if len(ticks) >= 2: + opacity_lut.gradient.setTickValue(ticks[0][0], 0.0) + opacity_lut.gradient.setTickValue(ticks[-1][0], 1.0) + opacity_lut.sigLookupTableChanged.connect( + partial(self._on_opacity_lut_changed, lut_item=opacity_lut) + ) + primary_lut = self.lut_items[channel][0] + primary_lut.setChildLutItem(opacity_lut) + self._opacity_lut_items[channel] = opacity_lut + self._opacity_lut_layout.addItem(opacity_lut, row=0, col=c) + total_width += opacity_lut.sizeHint(Qt.PreferredSize).width() + + scene_layout.addWidget(self._opacity_lut_graphics_layout, stretch=0) + self._opacity_lut_graphics_layout.setFixedWidth(int(total_width + 20)) + + def _on_opacity_lut_changed( + self, + lut_item: widgets.baseHistogramLUTitem, + ) -> None: + ticks_pos = [x for _t, x in lut_item.gradient.listTicks()] + if not ticks_pos: + return + opacity = max(0.0, min(1.0, max(ticks_pos))) + self.set_opacity(opacity, channel=lut_item.channel) + + def _sync_opacity_lut_value( + self, + channel: str, + opacity: float, + ) -> None: + opacity_lut = self._opacity_lut_items.get(channel) + if opacity_lut is None: + return + ticks = opacity_lut.gradient.listTicks() + if not ticks: + return + high_tick = max(ticks, key=lambda item: item[1])[0] + opacity_lut.gradient.setTickValue(high_tick, max(0.0, min(1.0, opacity))) + + def _pg_cmap_to_gradient(self, pg_cmap): + table = pg_cmap.getLookupTable(0.0, 1.0, 2) + rgba = [tuple(row) for row in table] + return colors.get_pg_gradient(rgba) + + def _rebuild_overlay_controls(self, overlay_entries) -> None: + if self._overlay_controls_layout is None: + return + self._clear_overlay_widgets() + if not overlay_entries: + if self._overlay_controls_host is not None: + self._overlay_controls_host.hide() + return + if self._overlay_controls_host is not None: + self._overlay_controls_host.show() + + for channel_name, opacity, cmap_spec, _mode_override, meta in overlay_entries: + kind = meta.get('kind', '') + row_widget = QWidget() + row_layout = QHBoxLayout(row_widget) + row_layout.setContentsMargins(0, 0, 0, 0) + widgets_info: dict = {} + + if kind == OVERLAY_KIND_FLUO: + label = meta.get('channel_name', channel_name) + lut_item = widgets.baseHistogramLUTitem( + parent=self, + name=channel_name, + axisLabel=label, + include_rescale_lut_options=False, + ) + lut_item.vb.hide() + if hasattr(cmap_spec, 'getLookupTable'): + lut_item.setGradient(self._pg_cmap_to_gradient(cmap_spec)) + elif isinstance(cmap_spec, str): + bkgr = (0, 0, 0, 255) + fg = colors.FLUO_CHANNELS_COLORS.get( + cmap_spec, (0, 255, 0, 255) + ) + if len(fg) == 3: + fg = (*fg, 255) + lut_item.setGradient(colors.get_pg_gradient((bkgr, fg))) + lut_item.sigLookupTableChanged.connect( + partial( + self._on_overlay_lut_changed, + overlay_key=channel_name, + lut_item=lut_item, + ) + ) + row_layout.addWidget(lut_item) + widgets_info['lut_item'] = lut_item + + opacity_spin = widgets.sliderWithSpinBox( + title_loc='in_line', + isFloat=True, + parent=row_widget, + normalize_factor=20, + ) + opacity_spin.setRange(0.0, 1.0) + opacity_spin.setSingleStep(0.05) + opacity_spin.setDecimals(2) + opacity_spin.setValue(float(opacity)) + if kind == OVERLAY_KIND_SEGM: + opacity_spin.setToolTip('Segmentation mask overlay opacity') + label_widget = QLabel('Segmentation opacity:') + row_layout.addWidget(label_widget) + elif kind == OVERLAY_KIND_OL_LABELS: + opacity_spin.setToolTip( + f'Opacity for overlay labels ({meta.get("channel_name", "")})' + ) + else: + opacity_spin.setToolTip( + f'Opacity for overlay channel {meta.get("channel_name", "")}' + ) + opacity_spin.valueChanged.connect( + partial( + self._on_overlay_opacity_changed, + overlay_key=channel_name, + ) + ) + row_layout.addWidget(opacity_spin) + widgets_info['opacity_spin'] = opacity_spin + self._overlay_widgets[channel_name] = widgets_info + self._overlay_controls_layout.addWidget(row_widget) + + def _on_overlay_lut_changed( + self, + overlay_key: str, + lut_item: widgets.baseHistogramLUTitem, + ) -> None: + if self._syncing_overlay_from_main: + return + self.set_overlay_cmap( + overlay_key, + lut_item.gradient.colorMap(), + sync_main_gui=True, + ) + + def _on_overlay_opacity_changed( + self, + overlay_key: str, + value: float, + ) -> None: + if self._syncing_overlay_from_main: + return + self.set_overlay_opacity(overlay_key, value, sync_main_gui=True) def _on_lut_changed(self, lut_item: widgets.baseHistogramLUTitem) -> None: ticks = lut_item.gradient.listTicks() @@ -669,11 +912,17 @@ def _init_ui(self) -> None: self.scene_layout = QHBoxLayout() + self._overlay_controls_host = QGroupBox('Overlays') + self._overlay_controls_layout = QVBoxLayout(self._overlay_controls_host) + self._overlay_controls_layout.setContentsMargins(4, 4, 4, 4) + self._overlay_controls_host.hide() + central = QWidget() main_layout = QVBoxLayout(central) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) main_layout.addLayout(self.scene_layout) + main_layout.addWidget(self._overlay_controls_host) main_layout.addWidget(controls_box) self.setCentralWidget(central) @@ -977,7 +1226,7 @@ def _init_overlay_volume_node( volume, clim=(0.0, 1.0), method=node_mode, - cmap=colors.vispy_cmap_from_spec(cmap_spec), + cmap=_volume_cmap_from_spec(cmap_spec), interpolation=current_interp, relative_step_size=current_step, parent=self._view.scene, @@ -1082,8 +1331,9 @@ def set_volumes( self._volume_nodes = {} if self.lut_items is None: - lut_items = self._add_lut_items(self.scene_layout) + self._add_lut_items(self.scene_layout) self.scene_layout.addWidget(self._canvas.native, stretch=1) + self._add_opacity_lut_items(self.scene_layout) if cmaps is not None: for channel_name, cmap in cmaps.items(): @@ -1126,12 +1376,14 @@ def update_volume( maximum 3-D texture size. """ vol = self._preprocess_volume(data, channel=channel_name) - + + if self._volumes_data is None or self.channels is None: + name = channel_name or 'Channel 1' + self.set_volume(data, channel_name=name) + return + if channel_name is None and channel_index is None: - raise ValueError( - 'Both `channel_name` and `channel_index` are None. ' - 'Updating volume requires either one of them.' - ) + channel_name = self.channels[0] if channel_index is not None and channel_index >= len(self.channels): self.channels.append(f'Channel {channel_index+1}') @@ -1160,12 +1412,13 @@ def update_volume( def update_overlay_volumes( self, overlays: list[tuple], + preserve_widgets: bool = False, ) -> None: """Replace overlay volumes stored in ``_volume_nodes`` under ``overlay:N``.""" if self._controls is None: return - self._remove_overlay_channels() + self._remove_overlay_channels(clear_widgets=not preserve_widgets) if not overlays: if hasattr(self, '_canvas') and self._canvas is not None: @@ -1176,25 +1429,143 @@ def update_overlay_volumes( if self._volumes_data is None: self._volumes_data = {} + overlay_entries = [] for index, entry in enumerate(overlays): - data, opacity, cmap = entry[0], entry[1], entry[2] - mode_override = entry[3] if len(entry) > 3 else None + data, opacity, cmap_spec, mode_override, meta = _parse_overlay_entry( + entry, index + ) if data.ndim != 3: continue - channel_name = overlay_channel_name(index) vol = self._normalize_overlay_volume(data) self._volumes_data[channel_name] = vol + meta.setdefault('overlay_index', index) + meta.setdefault('channel_name', channel_name) + self._overlay_meta[channel_name] = meta nodes[channel_name] = self._init_overlay_volume_node( vol, channel_name, opacity, - cmap, + cmap_spec, mode_override, ) + overlay_entries.append( + (channel_name, opacity, cmap_spec, mode_override, meta) + ) + + if not preserve_widgets: + self._rebuild_overlay_controls(overlay_entries) + + self._canvas.update() + + def _overlay_key_from_index(self, index_or_key) -> str | None: + if isinstance(index_or_key, str): + if index_or_key in (self._volume_nodes or {}): + return index_or_key + if index_or_key.isdigit(): + index_or_key = int(index_or_key) + if isinstance(index_or_key, int): + key = overlay_channel_name(index_or_key) + if self._volume_nodes and key in self._volume_nodes: + return key + return None + def _find_overlay_by_kind(self, kind: str) -> str | None: + for key, meta in self._overlay_meta.items(): + if meta.get('kind') == kind: + return key + return None + + def set_overlay_opacity( + self, + index_or_key, + value: float, + *, + sync_main_gui: bool = True, + ) -> None: + key = self._overlay_key_from_index(index_or_key) + if key is None or self._volume_nodes is None: + return + volume_node = self._volume_nodes.get(key) + if volume_node is None: + return + opacity = max(0.0, min(1.0, float(value))) + volume_node.opacity = opacity + widgets_info = self._overlay_widgets.get(key) + if widgets_info is not None: + opacity_spin = widgets_info.get('opacity_spin') + if opacity_spin is not None and not self._syncing_overlay_from_main: + self._syncing_overlay_from_renderer = True + try: + opacity_spin.blockSignals(True) + opacity_spin.setValue(opacity) + opacity_spin.blockSignals(False) + finally: + self._syncing_overlay_from_renderer = False + if sync_main_gui and not self._syncing_overlay_from_main: + meta = self._overlay_meta.get(key, {}) + adapter = self._adapter + if adapter is not None and hasattr( + adapter, 'apply_overlay_control_from_renderer' + ): + kind = meta.get('kind') + channel_name = meta.get('channel_name', '') + if kind == OVERLAY_KIND_SEGM: + adapter.apply_overlay_control_from_renderer( + channel_name, labels_alpha=opacity + ) + else: + adapter.apply_overlay_control_from_renderer( + channel_name, opacity=opacity + ) self._canvas.update() + def set_overlay_cmap( + self, + index_or_key, + cmap_spec, + *, + sync_main_gui: bool = True, + ) -> None: + key = self._overlay_key_from_index(index_or_key) + if key is None or self._volume_nodes is None: + return + volume_node = self._volume_nodes.get(key) + if volume_node is None: + return + volume_node.cmap = _volume_cmap_from_spec(cmap_spec) + if sync_main_gui and not self._syncing_overlay_from_main: + meta = self._overlay_meta.get(key, {}) + adapter = self._adapter + if adapter is not None and hasattr( + adapter, 'apply_overlay_control_from_renderer' + ): + kind = meta.get('kind') + if kind == OVERLAY_KIND_FLUO: + gradient_state = None + widgets_info = self._overlay_widgets.get(key) + lut_item = widgets_info.get('lut_item') if widgets_info else None + if lut_item is not None: + gradient_state = lut_item.gradient.saveState() + adapter.apply_overlay_control_from_renderer( + meta.get('channel_name', ''), + gradient_state=gradient_state, + ) + self._canvas.update() + + def set_segm_overlay_opacity( + self, + value: float, + *, + sync_main_gui: bool = True, + ) -> None: + key = self._find_overlay_by_kind(OVERLAY_KIND_SEGM) + if key is None: + return + self.set_overlay_opacity( + key, value, sync_main_gui=sync_main_gui + ) + def set_rendering_mode(self, mode: str) -> None: if not self._has_volume_nodes(): return @@ -1335,6 +1706,8 @@ def set_opacity(self, value: float, channel: str | None = None) -> None: return volume_node.opacity = max(0.0, min(1.0, value)) + if channel is not None: + self._sync_opacity_lut_value(channel, volume_node.opacity) self._canvas.update() def set_iso_threshold(self, value: float) -> None: diff --git a/tests/test_renderer3d.py b/tests/test_renderer3d.py index c1262123..7998f79d 100644 --- a/tests/test_renderer3d.py +++ b/tests/test_renderer3d.py @@ -1087,3 +1087,74 @@ def test_on_full_clim_sets_normalized_range(): lut_item.gradient.setTickValue.assert_any_call(low_tick, 0.0) lut_item.gradient.setTickValue.assert_any_call(high_tick, 1.0) assert set_clim_calls == [(0.0, 1.0, 'Channel 1')] + + +def test_parse_overlay_entry_with_meta(): + from cellacdc.renderer3d import _parse_overlay_entry + + entry = (None, 0.5, 'green', 'mip', {'kind': 'segm'}) + data, opacity, cmap, mode, meta = _parse_overlay_entry(entry, 0) + assert mode == 'mip' + assert meta['kind'] == 'segm' + assert opacity == 0.5 + + legacy = (None, 0.3, 'cyan') + _d, op, cm, mo, me = _parse_overlay_entry(legacy, 1) + assert mo is None + assert me['overlay_index'] == 1 + + +def test_set_overlay_opacity_incremental(): + from cellacdc.renderer3d import VolumeRenderer3DWindow + from unittest.mock import MagicMock + + win = VolumeRenderer3DWindow.__new__(VolumeRenderer3DWindow) + node = MagicMock() + node.opacity = 1.0 + win._volume_nodes = {'overlay:0': node} + win._overlay_meta = { + 'overlay:0': {'kind': 'fluo', 'channel_name': 'GFP'}, + } + win._overlay_widgets = {} + win._canvas = MagicMock() + win._adapter = None + win._syncing_overlay_from_main = False + win._syncing_overlay_from_renderer = False + + win.set_overlay_opacity('overlay:0', 0.4, sync_main_gui=False) + assert node.opacity == 0.4 + + +def test_set_segm_overlay_opacity_finds_segm_node(): + from cellacdc.renderer3d import ( + OVERLAY_KIND_SEGM, + VolumeRenderer3DWindow, + ) + from unittest.mock import MagicMock + + win = VolumeRenderer3DWindow.__new__(VolumeRenderer3DWindow) + node = MagicMock() + win._volume_nodes = {'overlay:0': node} + win._overlay_meta = { + 'overlay:0': {'kind': OVERLAY_KIND_SEGM, 'channel_name': '__segm__'}, + } + win._overlay_widgets = {} + win._canvas = MagicMock() + win._adapter = MagicMock() + win._syncing_overlay_from_main = False + win._syncing_overlay_from_renderer = False + + win.set_segm_overlay_opacity(0.25, sync_main_gui=True) + assert node.opacity == 0.25 + win._adapter.apply_overlay_control_from_renderer.assert_called_once() + + +def test_volume_cmap_from_spec_pg_colormap(): + from cellacdc.renderer3d import _volume_cmap_from_spec + from pyqtgraph.colormap import ColorMap + from vispy.color import Colormap + + pg_cmap = ColorMap(pos=[0, 1], color=[[0, 0, 0, 255], [0, 255, 0, 255]]) + result = _volume_cmap_from_spec(pg_cmap) + assert isinstance(result, Colormap) + assert _volume_cmap_from_spec('viridis') == 'viridis' From f17df8244ff26d5bad797b6fc8694918636b95b0 Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 10:32:32 +0200 Subject: [PATCH 4/8] Implement Batch 3 cell ID isolation in the 3D renderer. Add label volume masking, Cell ID selector with Show all, Shift+click pick, and bidirectional sync with the main GUI props and highlight toolbar. Co-authored-by: Cursor --- .features/3drenderer/README.md | 8 +- cellacdc/gui.py | 93 +++++++++++++++- cellacdc/renderer3d.py | 195 +++++++++++++++++++++++++++++++++ tests/test_renderer3d.py | 48 ++++++++ 4 files changed, 338 insertions(+), 6 deletions(-) diff --git a/.features/3drenderer/README.md b/.features/3drenderer/README.md index 16433fb2..c0250a54 100644 --- a/.features/3drenderer/README.md +++ b/.features/3drenderer/README.md @@ -37,7 +37,7 @@ See [batch-1-done.md — Honored commits mapping](batch-1-done.md#honored-commit ## Feature progress -**Summary:** 14 Done · 0 Partial · 4 Not started (batches 3–4) +**Summary:** 16 Done · 0 Partial · 2 Not started (batch 4) | # | Feature | Status | Batch | Notes | |---|---------|--------|-------|-------| @@ -55,8 +55,8 @@ See [batch-1-done.md — Honored commits mapping](batch-1-done.md#honored-commit | 12 | Opacity sliders for overlay channels | **Done** | [Batch 2](batch-2-lut-overlays.md) | In-renderer + bidirectional sync with main GUI | | 13 | LUT sliders for overlay channels | **Done** | [Batch 2](batch-2-lut-overlays.md) | PG gradient from main GUI `lutItem` | | 14 | Segmentation mask opacity slider in 3D UI | **Done** | [Batch 2](batch-2-lut-overlays.md) | Overlays panel + sync with `labelsAlphaSlider` | -| 15 | Cell ID selector (show one cell) | **Not started** | [Batch 3](batch-3-cell-id.md) | | -| 16 | Clickable Cell ID (show one cell) | **Not started** | [Batch 3](batch-3-cell-id.md) | | +| 15 | Cell ID selector (show one cell) | **Done** | [Batch 3](batch-3-cell-id.md) | Spinbox + Show all; `_label_volumes` masking | +| 16 | Clickable Cell ID (show one cell) | **Done** | [Batch 3](batch-3-cell-id.md) | Shift+left-click pick on canvas | | 17 | z-anisotropy via `scipy.ndimage.zoom` | **Not started** | [Batch 4](batch-4-z-anisotropy.md) | Transform-only scaling today | | 18 | z-anisotropy numeric control | **Not started** | [Batch 4](batch-4-z-anisotropy.md) | | @@ -66,7 +66,7 @@ See [batch-1-done.md — Honored commits mapping](batch-1-done.md#honored-commit |-------|-------|----------|--------|-----| | 1 | Core renderer, toolbar, primary LUT, overlay data path, launch button (`:3d.svg`) | 10 / 10 scope items | **Complete** | [batch-1-done.md](batch-1-done.md) | | 2 | LUT polish + in-renderer overlay UI + live sync | 5 / 5 checklist items | **Complete** | [batch-2-lut-overlays.md](batch-2-lut-overlays.md) | -| 3 | Cell ID isolation (selector + click) | 0 / 2 checklist items | **Planned** | [batch-3-cell-id.md](batch-3-cell-id.md) | +| 3 | Cell ID isolation (selector + Shift+click pick) | 2 / 2 checklist items | **Complete** | [batch-3-cell-id.md](batch-3-cell-id.md) | | 4 | z-anisotropy UI + `ndimage.zoom` resampling | 0 / 2 checklist items | **Planned** | [batch-4-z-anisotropy.md](batch-4-z-anisotropy.md) | ## Data flow diff --git a/cellacdc/gui.py b/cellacdc/gui.py index 565b60b6..e830e241 100755 --- a/cellacdc/gui.py +++ b/cellacdc/gui.py @@ -292,6 +292,44 @@ def apply_overlay_control_from_renderer( finally: self._gui._renderer3d_sync_blocked = False + def get_available_cell_ids(self): + if not getattr(self._gui, 'isDataLoaded', False): + return [] + try: + posData = self._gui.data[self._gui.pos_i] + return [int(i) for i in posData.IDs] + except Exception: + return [] + + def apply_cell_id_from_renderer(self, cell_id: int) -> None: + if getattr(self._gui, '_renderer3d_sync_blocked', False): + return + self._gui._renderer3d_sync_blocked = True + try: + cell_id = int(cell_id) + propsQGBox = self._gui.guiTabControl.propsQGBox + propsQGBox.idSB.blockSignals(True) + propsQGBox.idSB.setValue(cell_id) + propsQGBox.idSB.blockSignals(False) + if hasattr(self._gui, 'highlightIDToolbar'): + self._gui.highlightIDToolbar.setIDNoSignals(cell_id) + if cell_id > 0: + self._gui.highlightSearchedID(cell_id, force=True) + else: + self._gui.clearHighlightedKeepIDs() + finally: + self._gui._renderer3d_sync_blocked = False + + def on_cell_id_changed_from_main(self, cell_id: int) -> None: + win = getattr(self._gui, '_renderer3d_window', None) + if win is None or not win.isVisible(): + return + win._syncing_cell_id_from_main = True + try: + win.set_active_cell_id(int(cell_id), sync_main_gui=False) + finally: + win._syncing_cell_id_from_main = False + class guiWin(QMainWindow, whitelist.WhitelistGUIElements, gui_combine.CombineGuiElements, @@ -20306,19 +20344,26 @@ def _get_overlay_zstacks(self): if 'overlay segm. masks' in how and labels_alpha > 0 and posData.lab is not None: lab = posData.lab if lab.ndim == 3: + label_vol = lab.astype(np.int32, copy=False) mask = (lab > 0).astype(np.float32) elif lab.ndim == 2: - # 2D segmentation on a 3D z-stack: extrude along Z (cylinder) + label_vol = np.repeat( + lab.astype(np.int32, copy=False)[np.newaxis], + posData.SizeZ, + axis=0, + ) mask = np.repeat( (lab > 0).astype(np.float32)[np.newaxis], posData.SizeZ, axis=0 ) else: mask = None - if mask is not None: + label_vol = None + if mask is not None and label_vol is not None: meta = { 'kind': 'segm', 'channel_name': '__segm__', 'overlay_index': len(result), + 'label_data': label_vol, } segm_alpha_max = max(1, self.imgGrad.labelsAlphaSlider.maximum()) segm_opacity = float(labels_alpha) / segm_alpha_max @@ -20339,8 +20384,14 @@ def _get_overlay_zstacks(self): continue ol_lab = posData.ol_labels_data[segmEndname][posData.frame_i] if ol_lab.ndim == 3: + label_vol = ol_lab.astype(np.int32, copy=False) mask = (ol_lab > 0).astype(np.float32) elif ol_lab.ndim == 2: + label_vol = np.repeat( + ol_lab.astype(np.int32, copy=False)[np.newaxis], + posData.SizeZ, + axis=0, + ) mask = np.repeat( (ol_lab > 0).astype(np.float32)[np.newaxis], posData.SizeZ, axis=0 ) @@ -20351,6 +20402,7 @@ def _get_overlay_zstacks(self): 'kind': 'ol_labels', 'channel_name': segmEndname, 'overlay_index': len(result), + 'label_data': label_vol, } result.append((mask, 0.5, cmap, 'mip', meta)) @@ -20393,6 +20445,31 @@ def _push_overlay_changes(*_args): connected.add(sb_id) self._renderer3d_overlay_connected = connected + def _connect_3d_renderer_cell_id_sync(self): + """Wire main GUI cell ID controls to the open 3D renderer.""" + win = getattr(self, '_renderer3d_window', None) + if win is None: + return + + adapter = win._adapter + if adapter is None: + adapter = _GuiWinRenderer3DAdapter(self) + win._adapter = adapter + + if not hasattr(self, '_renderer3d_cell_id_push'): + def _push_cell_id(*_args): + if getattr(self, '_renderer3d_sync_blocked', False): + return + cell_id = self.guiTabControl.propsQGBox.idSB.value() + adapter.on_cell_id_changed_from_main(cell_id) + + self._renderer3d_cell_id_push = _push_cell_id + self.guiTabControl.propsQGBox.idSB.valueChanged.connect( + _push_cell_id + ) + if hasattr(self, 'highlightIDToolbar'): + self.highlightIDToolbar.sigIDChanged.connect(_push_cell_id) + def _get_current_zstack(self): """Return a (Z, Y, X) float32 array for the current position and frame. @@ -20459,6 +20536,13 @@ def _launch_3d_renderer(self, *args, **kwargs): if first_launch: self._position_renderer3d_window() self._connect_3d_renderer_overlay_sync() + self._connect_3d_renderer_cell_id_sync() + self._renderer3d_window.update_cell_id_range() + active_cell_id = self.guiTabControl.propsQGBox.idSB.value() + self._renderer3d_window.set_active_cell_id( + int(active_cell_id), + sync_main_gui=False, + ) self._renderer3d_window.show() self._renderer3d_window.raise_() @@ -20512,6 +20596,11 @@ def _update_3d_renderer_if_active(self): self._renderer3d_window.update_overlay_volumes( self._get_overlay_zstacks() ) + self._renderer3d_window.update_cell_id_range() + self._renderer3d_window.set_active_cell_id( + self._renderer3d_window._active_cell_id, + sync_main_gui=False, + ) voxel_sizes = self._get_current_voxel_sizes() if voxel_sizes is not None: self._renderer3d_window.set_voxel_scale(*voxel_sizes) diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index 3f70f48a..b11c8bcb 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -135,6 +135,28 @@ def _parse_overlay_entry(entry, index: int): return data, opacity, cmap_spec, mode_override, meta +def _mask_labels_for_display(labels: np.ndarray, cell_id: int) -> np.ndarray: + """Build a float32 overlay mask from integer label data and active cell ID.""" + lab = labels.astype(np.int32, copy=False) + if int(cell_id) <= 0: + return (lab > 0).astype(np.float32) + return (lab == int(cell_id)).astype(np.float32) + + +def _scene_pos_to_voxel_indices( + local_pos, + shape: tuple[int, int, int], + ) -> tuple[int, int, int] | None: + """Convert vispy volume local coordinates to (z, y, x) voxel indices.""" + nz, ny, nx = shape + x = int(np.floor(float(local_pos[0]) + 0.5)) + y = int(np.floor(float(local_pos[1]) + 0.5)) + z = int(np.floor(float(local_pos[2]) + 0.5)) + if 0 <= z < nz and 0 <= y < ny and 0 <= x < nx: + return (z, y, x) + return None + + # --------------------------------------------------------------------------- # Pure-stdlib PNG writer (fallback when skimage is not available) # --------------------------------------------------------------------------- @@ -192,6 +214,16 @@ def apply_overlay_control_from_renderer( ) -> None: """Update main GUI overlay widgets from the 3D renderer (bidirectional sync).""" + def get_available_cell_ids(self) -> list[int]: + """Return valid cell IDs for the current frame, or empty if unknown.""" + return [] + + def apply_cell_id_from_renderer(self, cell_id: int) -> None: + """Update main GUI cell selection from the 3D renderer.""" + + def on_cell_id_changed_from_main(self, cell_id: int) -> None: + """Push main GUI cell ID selection to the 3D renderer.""" + # --------------------------------------------------------------------------- # Controls widget @@ -257,6 +289,31 @@ def _build(self) -> None: ) layout.addFormWidget(_step_form_widget, row=row) + row += 1 + cell_id_row = QHBoxLayout() + self._cell_id_spin = widgets.SpinBox() + self._cell_id_spin.setMinimum(0) + self._cell_id_spin.setMaximum(999999) + self._cell_id_spin.setToolTip( + 'Show only this cell ID in segmentation overlays (0 = all cells).\n' + 'Shift+left-click on the volume to pick a cell.' + ) + self._cell_id_spin.valueChanged.connect(self._on_cell_id_changed) + cell_id_row.addWidget(self._cell_id_spin) + self._show_all_cells_btn = QPushButton('Show all') + self._show_all_cells_btn.setToolTip( + 'Reset to show all labelled cells (Cell ID 0)' + ) + self._show_all_cells_btn.clicked.connect(self._on_show_all_cells) + cell_id_row.addWidget(self._show_all_cells_btn) + cell_id_widget = QWidget() + cell_id_widget.setLayout(cell_id_row) + _cell_id_form = widgets.formWidget( + cell_id_widget, + labelTextLeft='Cell ID:', + ) + layout.addFormWidget(_cell_id_form, row=row) + row += 1 # Primary-channel opacity is controlled via the right-side grayscale # colorbar in the 3D window (see VolumeRenderer3DWindow._add_opacity_lut_items). @@ -399,6 +456,16 @@ def _on_mode_changed(self, idx: int) -> None: self._update_mode_controls(mode) self._renderer.set_rendering_mode(mode) + def _on_cell_id_changed(self, value: int) -> None: + if getattr(self._renderer, '_syncing_cell_id_from_main', False): + return + if getattr(self._renderer, '_syncing_cell_id_from_renderer', False): + return + self._renderer.set_active_cell_id(int(value)) + + def _on_show_all_cells(self) -> None: + self._cell_id_spin.setValue(0) + def _on_gamma_changed(self, value: float) -> None: self._renderer.set_gamma(value) @@ -493,6 +560,10 @@ def __init__( self._overlay_controls_host: QWidget | None = None self._syncing_overlay_from_main = False self._syncing_overlay_from_renderer = False + self._label_volumes: dict[str, np.ndarray] = {} + self._active_cell_id: int = 0 + self._syncing_cell_id_from_main = False + self._syncing_cell_id_from_renderer = False self._overlay_mode_overrides: dict[str, str | None] = {} self.channels: list[str] | None = None self._last_shape: tuple | None = None @@ -537,6 +608,7 @@ def _remove_overlay_channels(self, clear_widgets: bool = True) -> None: if self._volumes_data is not None: self._volumes_data.pop(name, None) self._overlay_meta.pop(name, None) + self._label_volumes.pop(name, None) self._overlay_mode_overrides.clear() if clear_widgets: self._clear_overlay_widgets() @@ -567,6 +639,122 @@ def _normalize_overlay_volume(self, data: np.ndarray) -> np.ndarray: vol = np.zeros_like(vol) return vol + def _store_label_volume( + self, + channel_name: str, + label_data: np.ndarray, + ) -> None: + if label_data.ndim != 3: + return + lab = label_data.astype(np.int32, copy=False) + max_tex = self._resolve_max_texture_3d() + if max(lab.shape) > max_tex: + lab = self._downsample(lab, max_tex) + self._label_volumes[channel_name] = np.ascontiguousarray(lab) + + def _overlay_volume_from_labels(self, channel_name: str) -> np.ndarray | None: + labels = self._label_volumes.get(channel_name) + if labels is None: + return None + mask = _mask_labels_for_display(labels, self._active_cell_id) + return self._normalize_overlay_volume(mask) + + def _connect_canvas_events(self) -> None: + if not hasattr(self, '_canvas') or self._canvas is None: + return + self._canvas.events.mouse_press.connect(self._on_canvas_mouse_press) + + def _on_canvas_mouse_press(self, event) -> None: + modifiers = getattr(event, 'modifiers', ()) or () + if event.button != 1 or 'Shift' not in modifiers: + return + picked_id = self._pick_cell_id_at_canvas_pos(event.pos) + if picked_id is None: + return + self.set_active_cell_id(int(picked_id)) + + def _pick_cell_id_at_canvas_pos(self, canvas_pos) -> int | None: + key = self._find_overlay_by_kind(OVERLAY_KIND_SEGM) + if key is None: + for candidate, labels in self._label_volumes.items(): + if labels is not None: + key = candidate + break + if key is None or self._volume_nodes is None: + return None + labels = self._label_volumes.get(key) + volume_node = self._volume_nodes.get(key) + if labels is None or volume_node is None: + return None + try: + scene_pos = self._canvas.scene.node_transform.imap(canvas_pos) + node_tr = volume_node.transform + if node_tr is None: + return None + inv = node_tr.inverse + if inv is None: + return None + local_pos = inv.map(scene_pos) + except Exception: + return None + indices = _scene_pos_to_voxel_indices(local_pos, labels.shape) + if indices is None: + return None + z, y, x = indices + cell_id = int(labels[z, y, x]) + return cell_id if cell_id > 0 else None + + def update_cell_id_range(self) -> None: + if self._controls is None: + return + adapter = self._adapter + if adapter is None or not hasattr(adapter, 'get_available_cell_ids'): + return + ids = adapter.get_available_cell_ids() + if not ids: + return + spin = self._controls._cell_id_spin + spin.setMaximum(max(ids)) + + def set_active_cell_id( + self, + cell_id: int, + *, + sync_main_gui: bool = True, + ) -> None: + cell_id = int(cell_id) + self._active_cell_id = cell_id + if self._controls is not None and not self._syncing_cell_id_from_main: + self._syncing_cell_id_from_renderer = True + try: + spin = self._controls._cell_id_spin + spin.blockSignals(True) + spin.setValue(cell_id) + spin.blockSignals(False) + finally: + self._syncing_cell_id_from_renderer = False + + if self._volume_nodes is not None: + for key in list(self._label_volumes.keys()): + vol = self._overlay_volume_from_labels(key) + if vol is None: + continue + self._volumes_data[key] = vol + volume_node = self._volume_nodes.get(key) + if volume_node is not None: + volume_node.set_data(vol, clim=(0.0, 1.0)) + + if ( + sync_main_gui + and not self._syncing_cell_id_from_main + and self._adapter is not None + and hasattr(self._adapter, 'apply_cell_id_from_renderer') + ): + self._adapter.apply_cell_id_from_renderer(cell_id) + + if hasattr(self, '_canvas') and self._canvas is not None: + self._canvas.update() + # -- vispy setup ---------------------------------------------------------- def _init_vispy(self) -> None: @@ -1334,6 +1522,7 @@ def set_volumes( self._add_lut_items(self.scene_layout) self.scene_layout.addWidget(self._canvas.native, stretch=1) self._add_opacity_lut_items(self.scene_layout) + self._connect_canvas_events() if cmaps is not None: for channel_name, cmap in cmaps.items(): @@ -1437,6 +1626,12 @@ def update_overlay_volumes( if data.ndim != 3: continue channel_name = overlay_channel_name(index) + if 'label_data' in meta: + self._store_label_volume(channel_name, meta['label_data']) + data = _mask_labels_for_display( + self._label_volumes[channel_name], + self._active_cell_id, + ) vol = self._normalize_overlay_volume(data) self._volumes_data[channel_name] = vol meta.setdefault('overlay_index', index) diff --git a/tests/test_renderer3d.py b/tests/test_renderer3d.py index 7998f79d..9ff11897 100644 --- a/tests/test_renderer3d.py +++ b/tests/test_renderer3d.py @@ -1158,3 +1158,51 @@ def test_volume_cmap_from_spec_pg_colormap(): result = _volume_cmap_from_spec(pg_cmap) assert isinstance(result, Colormap) assert _volume_cmap_from_spec('viridis') == 'viridis' + + +def test_mask_labels_for_display(): + from cellacdc.renderer3d import _mask_labels_for_display + + labels = np.array([[[0, 1], [2, 0]]], dtype=np.int32) + all_mask = _mask_labels_for_display(labels, 0) + assert all_mask.shape == labels.shape + assert all_mask.max() == 1.0 + assert all_mask.min() == 0.0 + + one_mask = _mask_labels_for_display(labels, 2) + assert one_mask[0, 1, 0] == 1.0 + assert one_mask.sum() == 1.0 + + +def test_scene_pos_to_voxel_indices(): + from cellacdc.renderer3d import _scene_pos_to_voxel_indices + + assert _scene_pos_to_voxel_indices((0.0, 0.0, 0.0), (4, 8, 8)) == (0, 0, 0) + assert _scene_pos_to_voxel_indices((7.4, 3.6, 1.2), (4, 8, 8)) == (1, 4, 7) + assert _scene_pos_to_voxel_indices((99, 0, 0), (4, 8, 8)) is None + + +def test_set_active_cell_id_updates_overlay_node(): + from cellacdc.renderer3d import VolumeRenderer3DWindow + from unittest.mock import MagicMock + + win = VolumeRenderer3DWindow.__new__(VolumeRenderer3DWindow) + node = MagicMock() + win._volume_nodes = {'overlay:0': node} + win._label_volumes = { + 'overlay:0': np.array([[[0, 1], [2, 0]]], dtype=np.int32), + } + win._volumes_data = {} + win._overlay_meta = {'overlay:0': {'kind': 'segm'}} + win._controls = MagicMock() + win._controls._cell_id_spin = MagicMock() + win._canvas = MagicMock() + win._adapter = None + win._max_texture_3d = 512 + win._active_cell_id = 0 + win._syncing_cell_id_from_main = False + win._syncing_cell_id_from_renderer = False + + win.set_active_cell_id(2, sync_main_gui=False) + assert win._active_cell_id == 2 + node.set_data.assert_called_once() From d81d17e3635df4fa72f2298bfe1969e5a9c9f257 Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 10:43:18 +0200 Subject: [PATCH 5/8] Implement Batch 4 z-anisotropy controls for the 3D renderer. Add a user-facing dz/dx ratio with optional Z resampling so frame sync no longer overwrites manual anisotropy settings. Co-authored-by: Cursor --- cellacdc/gui.py | 4 +- cellacdc/renderer3d.py | 293 +++++++++++++++++++++++++++++++++------ tests/test_renderer3d.py | 136 +++++++++++++++++- 3 files changed, 391 insertions(+), 42 deletions(-) diff --git a/cellacdc/gui.py b/cellacdc/gui.py index e830e241..75f2ef5f 100755 --- a/cellacdc/gui.py +++ b/cellacdc/gui.py @@ -20526,7 +20526,7 @@ def _launch_3d_renderer(self, *args, **kwargs): ) voxel_sizes = self._get_current_voxel_sizes() if voxel_sizes is not None: - self._renderer3d_window.set_voxel_scale(*voxel_sizes) + self._renderer3d_window.set_metadata_voxel_sizes(*voxel_sizes) posData = self.data[self.pos_i] self._renderer3d_window.setWindowTitle( @@ -20603,7 +20603,7 @@ def _update_3d_renderer_if_active(self): ) voxel_sizes = self._get_current_voxel_sizes() if voxel_sizes is not None: - self._renderer3d_window.set_voxel_scale(*voxel_sizes) + self._renderer3d_window.set_metadata_voxel_sizes(*voxel_sizes) posData = self.data[self.pos_i] self._renderer3d_window.setWindowTitle( f'3D Z-Stack Renderer — ' diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index b11c8bcb..d5eba495 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -18,7 +18,7 @@ QGraphicsProxyWidget, QGridLayout ) -from qtpy.QtCore import Qt +from qtpy.QtCore import Qt, QTimer from qtpy.QtGui import QKeySequence import pyqtgraph as pg @@ -143,6 +143,23 @@ def _mask_labels_for_display(labels: np.ndarray, cell_id: int) -> np.ndarray: return (lab == int(cell_id)).astype(np.float32) +def _resample_z_axis( + vol: np.ndarray, + z_factor: float, + *, + is_labels: bool, + ) -> np.ndarray: + """Stretch or compress the Z axis with ``scipy.ndimage.zoom``.""" + if abs(z_factor - 1.0) < 1e-6: + return vol + try: + import scipy.ndimage # noqa: PLC0415 + except ImportError: + return vol + order = 0 if is_labels else 1 + return scipy.ndimage.zoom(vol, (z_factor, 1.0, 1.0), order=order) + + def _scene_pos_to_voxel_indices( local_pos, shape: tuple[int, int, int], @@ -314,6 +331,51 @@ def _build(self) -> None: ) layout.addFormWidget(_cell_id_form, row=row) + row += 1 + z_aniso_row = QHBoxLayout() + self._z_aniso_spin = widgets.sliderWithSpinBox( + title_loc='in_line', + isFloat=True, + parent=self, + normalize_factor=10, + ) + self._z_aniso_spin.setRange(0.1, 50.0) + self._z_aniso_spin.setSingleStep(0.1) + self._z_aniso_spin.setValue(1.0) + self._z_aniso_spin.setToolTip( + 'Physical Z/X voxel size ratio.\n' + '1.0 = isotropic. Values >1 stretch Z.' + ) + self._z_aniso_spin.valueChanged.connect(self._on_z_aniso_changed) + z_aniso_row.addWidget(self._z_aniso_spin) + self._z_aniso_reset_btn = QPushButton('Reset') + self._z_aniso_reset_btn.setToolTip( + 'Reset Z anisotropy to the value from image metadata' + ) + self._z_aniso_reset_btn.clicked.connect(self._on_z_aniso_reset) + z_aniso_row.addWidget(self._z_aniso_reset_btn) + z_aniso_widget = QWidget() + z_aniso_widget.setLayout(z_aniso_row) + layout.addFormWidget( + widgets.formWidget(z_aniso_widget, labelTextLeft='Z anisotropy (dz/dx):'), + row=row, + ) + + row += 1 + self._resample_z_cb = QCheckBox('Resample Z to isotropic voxels') + self._resample_z_cb.setToolTip( + 'Resample volume data along Z before GPU upload so voxels are\n' + 'physically isotropic. Slower and uses more memory than transform-only.' + ) + self._resample_z_cb.toggled.connect(self._on_resample_z_changed) + layout.addFormWidget(self._resample_z_cb, row=row) + + self._z_aniso_debounce = QTimer(self) + self._z_aniso_debounce.setSingleShot(True) + self._z_aniso_debounce.setInterval(150) + self._z_aniso_debounce.timeout.connect(self._emit_z_aniso_changed) + self._pending_z_aniso = 1.0 + row += 1 # Primary-channel opacity is controlled via the right-side grayscale # colorbar in the 3D window (see VolumeRenderer3DWindow._add_opacity_lut_items). @@ -466,6 +528,25 @@ def _on_cell_id_changed(self, value: int) -> None: def _on_show_all_cells(self) -> None: self._cell_id_spin.setValue(0) + def _on_z_aniso_changed(self, value: float) -> None: + if getattr(self._renderer, '_syncing_z_aniso', False): + return + self._pending_z_aniso = float(value) + self._z_aniso_debounce.start() + + def _emit_z_aniso_changed(self) -> None: + self._renderer.set_z_anisotropy_ratio( + self._pending_z_aniso, + from_user=True, + ) + + def _on_z_aniso_reset(self) -> None: + self._z_aniso_debounce.stop() + self._renderer.reset_z_anisotropy_to_metadata() + + def _on_resample_z_changed(self, checked: bool) -> None: + self._renderer.set_resample_z_enabled(checked) + def _on_gamma_changed(self, value: float) -> None: self._renderer.set_gamma(value) @@ -561,6 +642,13 @@ def __init__( self._syncing_overlay_from_main = False self._syncing_overlay_from_renderer = False self._label_volumes: dict[str, np.ndarray] = {} + self._raw_label_volumes: dict[str, np.ndarray] = {} + self._raw_overlay_data: dict[str, np.ndarray] = {} + self._cached_overlay_entries: list[tuple] = [] + self._metadata_voxel_sizes: tuple[float, float, float] = (1.0, 1.0, 1.0) + self._z_aniso_user_override: float | None = None + self._resample_z_enabled: bool = False + self._syncing_z_aniso: bool = False self._active_cell_id: int = 0 self._syncing_cell_id_from_main = False self._syncing_cell_id_from_renderer = False @@ -609,6 +697,8 @@ def _remove_overlay_channels(self, clear_widgets: bool = True) -> None: self._volumes_data.pop(name, None) self._overlay_meta.pop(name, None) self._label_volumes.pop(name, None) + self._raw_label_volumes.pop(name, None) + self._raw_overlay_data.pop(name, None) self._overlay_mode_overrides.clear() if clear_widgets: self._clear_overlay_widgets() @@ -623,12 +713,23 @@ def _clear_overlay_widgets(self) -> None: if widget is not None: widget.deleteLater() - def _normalize_overlay_volume(self, data: np.ndarray) -> np.ndarray: + def _normalize_overlay_volume( + self, + data: np.ndarray, + *, + skip_resample: bool = False, + ) -> np.ndarray: if data.ndim != 3: raise ValueError( f'Expected 3-D (Z, Y, X) overlay array; got shape {data.shape}' ) vol = data.astype(np.float32, copy=False) + if self._resample_z_enabled and not skip_resample: + vol = _resample_z_axis( + vol, + self._effective_z_ratio(), + is_labels=False, + ) vmin, vmax = float(vol.min()), float(vol.max()) max_tex = self._resolve_max_texture_3d() if max(vol.shape) > max_tex: @@ -639,6 +740,18 @@ def _normalize_overlay_volume(self, data: np.ndarray) -> np.ndarray: vol = np.zeros_like(vol) return vol + def _process_label_volume(self, lab: np.ndarray) -> np.ndarray: + if self._resample_z_enabled: + lab = _resample_z_axis( + lab, + self._effective_z_ratio(), + is_labels=True, + ) + max_tex = self._resolve_max_texture_3d() + if max(lab.shape) > max_tex: + lab = self._downsample(lab, max_tex) + return np.ascontiguousarray(lab) + def _store_label_volume( self, channel_name: str, @@ -647,17 +760,15 @@ def _store_label_volume( if label_data.ndim != 3: return lab = label_data.astype(np.int32, copy=False) - max_tex = self._resolve_max_texture_3d() - if max(lab.shape) > max_tex: - lab = self._downsample(lab, max_tex) - self._label_volumes[channel_name] = np.ascontiguousarray(lab) + self._raw_label_volumes[channel_name] = np.ascontiguousarray(lab) + self._label_volumes[channel_name] = self._process_label_volume(lab) def _overlay_volume_from_labels(self, channel_name: str) -> np.ndarray | None: labels = self._label_volumes.get(channel_name) if labels is None: return None mask = _mask_labels_for_display(labels, self._active_cell_id) - return self._normalize_overlay_volume(mask) + return self._normalize_overlay_volume(mask, skip_resample=True) def _connect_canvas_events(self) -> None: if not hasattr(self, '_canvas') or self._canvas is None: @@ -1127,12 +1238,16 @@ def _init_ui(self) -> None: # Per-axis downsampling strides used in the last upload (z, y, x). # Stored so set_voxel_scale can correct for non-uniform stride compression. _last_strides: tuple = (1, 1, 1) - # Last physical voxel sizes (µm) passed to set_voxel_scale. + # Last physical voxel sizes (µm) used for STTransform scaling. # Auto-reapplied when a new volume node is created in update_volume so - # callers need not re-call set_voxel_scale after a shape change. + # callers need not re-call set_metadata_voxel_sizes after a shape change. _voxel_dz: float = 1.0 _voxel_dy: float = 1.0 _voxel_dx: float = 1.0 + _metadata_voxel_sizes: tuple[float, float, float] = (1.0, 1.0, 1.0) + _z_aniso_user_override: float | None = None + _resample_z_enabled: bool = False + _syncing_z_aniso: bool = False _SETTINGS_ORG = 'Cell-ACDC' _SETTINGS_APP = 'renderer3d' @@ -1171,6 +1286,13 @@ def _load_settings(self) -> None: c._step_spin.maximum())) ) c._smooth_iso_cb.setChecked(s.value('smooth_iso', False, type=bool)) + c._resample_z_cb.setChecked(s.value('resample_z', False, type=bool)) + z_aniso = s.value('z_aniso_ratio', None, type=float) + if z_aniso is not None: + c._z_aniso_spin.setValue( + max(c._z_aniso_spin.minimum(), + min(z_aniso, c._z_aniso_spin.maximum())) + ) # Depiction and plane parameters. depict_idx = s.value('depict_idx', 0, type=int) @@ -1200,6 +1322,8 @@ def _save_settings(self) -> None: s.setValue('gamma', c._gamma_spin.value()) s.setValue('step_size', c._step_spin.value()) s.setValue('smooth_iso', c._smooth_iso_cb.isChecked()) + s.setValue('resample_z', c._resample_z_cb.isChecked()) + s.setValue('z_aniso_ratio', c._z_aniso_spin.value()) s.setValue('depict_idx', c._depict_combo.currentIndex()) s.setValue('plane_thickness', c._plane_thick_spin.value()) s.setValue('opacity', c._opacity_spin.value()) @@ -1270,7 +1394,13 @@ def _preprocess_volume( if self._raw_volumes_data is None: self._raw_volumes_data = {} self._raw_volumes_data[channel] = vol - original_shape = vol.shape + + if self._resample_z_enabled: + vol = _resample_z_axis( + vol, + self._effective_z_ratio(), + is_labels=False, + ) # Compute the value range on the full-resolution data BEFORE downsampling # so that stride-based subsampling cannot accidentally exclude extreme voxels @@ -1607,6 +1737,7 @@ def update_overlay_volumes( if self._controls is None: return + self._cached_overlay_entries = list(overlays) self._remove_overlay_channels(clear_widgets=not preserve_widgets) if not overlays: @@ -1632,7 +1763,12 @@ def update_overlay_volumes( self._label_volumes[channel_name], self._active_cell_id, ) - vol = self._normalize_overlay_volume(data) + vol = self._normalize_overlay_volume(data, skip_resample=True) + else: + self._raw_overlay_data[channel_name] = np.ascontiguousarray( + data.astype(np.float32, copy=False) + ) + vol = self._normalize_overlay_volume(data) self._volumes_data[channel_name] = vol meta.setdefault('overlay_index', index) meta.setdefault('channel_name', channel_name) @@ -2044,9 +2180,113 @@ def set_plane_thickness(self, thickness: float) -> None: def _rerender(self) -> None: """Re-process and re-upload the last received volume (smooth ISO toggle).""" - if self._last_raw_data is not None: + self._rerender_all() + + def _rerender_all(self) -> None: + """Re-process primary and overlay volumes from cached raw data.""" + if self._raw_volumes_data: + for channel_name, raw in self._raw_volumes_data.items(): + self.update_volume(raw, channel_name=channel_name) + elif self._last_raw_data is not None: self.update_volume(self._last_raw_data) + if self._cached_overlay_entries: + self.update_overlay_volumes( + self._cached_overlay_entries, + preserve_widgets=True, + ) + + def _metadata_z_ratio(self) -> float: + dz, _dy, dx = self._metadata_voxel_sizes + if dx <= 0: + return 1.0 + return dz / dx + + def _effective_z_ratio(self) -> float: + if self._z_aniso_user_override is not None: + return self._z_aniso_user_override + return self._metadata_z_ratio() + + def sync_z_aniso_spinbox(self, ratio: float) -> None: + if self._controls is None: + return + self._syncing_z_aniso = True + try: + spin = self._controls._z_aniso_spin + spin.blockSignals(True) + spin.setValue(float(ratio)) + spin.blockSignals(False) + finally: + self._syncing_z_aniso = False + + def _apply_effective_voxel_sizes(self) -> None: + dz_meta, dy_meta, dx_meta = self._metadata_voxel_sizes + if dx_meta <= 0: + dx_meta = 1.0 + if self._resample_z_enabled: + self._voxel_dz = dx_meta + self._voxel_dy = dy_meta + self._voxel_dx = dx_meta + else: + self._voxel_dz = self._effective_z_ratio() * dx_meta + self._voxel_dy = dy_meta + self._voxel_dx = dx_meta + if self._has_volume_nodes(): + self._apply_voxel_scale() + + def set_metadata_voxel_sizes( + self, + dz: float = 1.0, + dy: float = 1.0, + dx: float = 1.0, + ) -> None: + """Store physical voxel sizes from metadata and apply the active Z ratio.""" + old_ratio = self._metadata_z_ratio() + self._metadata_voxel_sizes = (float(dz), float(dy), float(dx)) + ratio_changed = ( + self._z_aniso_user_override is None + and abs(self._metadata_z_ratio() - old_ratio) > 1e-9 + ) + if self._z_aniso_user_override is None: + self.sync_z_aniso_spinbox(self._metadata_z_ratio()) + self._apply_effective_voxel_sizes() + if self._resample_z_enabled and ratio_changed: + self._rerender_all() + + def set_z_anisotropy_ratio( + self, + ratio: float, + *, + from_user: bool = True, + ) -> None: + ratio = float(ratio) + if from_user: + self._z_aniso_user_override = ratio + self.sync_z_aniso_spinbox(ratio) + if self._resample_z_enabled: + self._apply_effective_voxel_sizes() + self._rerender_all() + else: + self._apply_effective_voxel_sizes() + + def reset_z_anisotropy_to_metadata(self) -> None: + self._z_aniso_user_override = None + ratio = self._metadata_z_ratio() + self.sync_z_aniso_spinbox(ratio) + if self._resample_z_enabled: + self._apply_effective_voxel_sizes() + self._rerender_all() + else: + self._apply_effective_voxel_sizes() + + def set_resample_z_enabled(self, enabled: bool) -> None: + enabled = bool(enabled) + if enabled == self._resample_z_enabled: + return + self._resample_z_enabled = enabled + self._apply_effective_voxel_sizes() + self._rerender_all() + def set_smooth_iso(self, enabled: bool) -> None: """ Toggle Gaussian pre-smoothing for ISO surface rendering. @@ -2085,33 +2325,8 @@ def set_voxel_scale( dy: float = 1.0, dx: float = 1.0, ) -> None: - """ - Correct for anisotropic voxel sizes by scaling the volume transform. - - Parameters - ---------- - dz, dy, dx: - Physical voxel size in µm along Z, Y, X. All three are normalised - to *dx* so the rendered volume has correct physical proportions. - - The scale also accounts for per-axis downsampling strides (stored in - ``_last_strides`` from the last ``update_volume`` call). When the GPU - texture limit forces non-uniform downsampling (e.g. stride_x=4 while - stride_z=1), each downsampled voxel along X spans ``stride_x × dx`` - physical µm. Ignoring this would compress the X axis by 4×. - - Example — 100×512×2048 confocal stack on a 512-texture GPU: - Physical voxels: dz=1 µm, dy=0.2 µm, dx=0.2 µm - Downsampling: stride=(1, 1, 4) → shape (100, 512, 512) - Effective sizes: dz_eff=1, dy_eff=0.2, dx_eff=0.8 µm - Scale: (1.0, 0.2/0.8, 1.0/0.8) = (1, 0.25, 1.25) - """ - # Persist so the transform is re-applied automatically when the node is - # rebuilt due to a shape change (update_volume calls _apply_voxel_scale). - self._voxel_dz, self._voxel_dy, self._voxel_dx = dz, dy, dx - if not self._has_volume_nodes(): - return - self._apply_voxel_scale() + """Backward-compatible alias for :meth:`set_metadata_voxel_sizes`.""" + self.set_metadata_voxel_sizes(dz, dy, dx) def _apply_voxel_scale(self, node=None) -> None: """Apply the stored voxel scale and stride correction to volume nodes.""" diff --git a/tests/test_renderer3d.py b/tests/test_renderer3d.py index 9ff11897..4c99ef6c 100644 --- a/tests/test_renderer3d.py +++ b/tests/test_renderer3d.py @@ -192,7 +192,9 @@ def test_renderer_public_api(): 'set_gamma', 'set_opacity', 'set_iso_threshold', 'set_attenuation', 'set_interpolation', 'set_step_size', 'set_smooth_iso', 'set_depiction', 'set_zplane_position', 'set_plane_thickness', - 'set_voxel_scale', 'reset_view', 'save_screenshot', + 'set_voxel_scale', 'set_metadata_voxel_sizes', 'set_z_anisotropy_ratio', + 'reset_z_anisotropy_to_metadata', 'set_resample_z_enabled', + 'reset_view', 'save_screenshot', 'auto_contrast_percentile', 'get_auto_contrast_percentile', } missing = required - set(dir(VolumeRenderer3DWindow)) @@ -1199,6 +1201,7 @@ def test_set_active_cell_id_updates_overlay_node(): win._canvas = MagicMock() win._adapter = None win._max_texture_3d = 512 + win._resample_z_enabled = False win._active_cell_id = 0 win._syncing_cell_id_from_main = False win._syncing_cell_id_from_renderer = False @@ -1206,3 +1209,134 @@ def test_set_active_cell_id_updates_overlay_node(): win.set_active_cell_id(2, sync_main_gui=False) assert win._active_cell_id == 2 node.set_data.assert_called_once() + + +def _make_bare_renderer(): + from cellacdc.renderer3d import VolumeRenderer3DWindow + + class _Bare(VolumeRenderer3DWindow): + def _init_vispy(self): + pass + + def _init_ui(self): + self._controls = None + + r = _Bare() + r._overlay_mode_overrides = {} + return r + + +def test_z_aniso_ratio_default_from_metadata(): + from unittest.mock import MagicMock + + r = _make_bare_renderer() + r._controls = MagicMock() + r._controls._z_aniso_spin = MagicMock() + r.set_metadata_voxel_sizes(2.0, 1.0, 1.0) + assert r._metadata_z_ratio() == 2.0 + assert r._z_aniso_user_override is None + r._controls._z_aniso_spin.setValue.assert_called_with(2.0) + r.close() + del r + + +def test_z_aniso_user_override_updates_transform(): + from unittest.mock import MagicMock + + r = _make_bare_renderer() + mock_node = MagicMock() + r._volume_nodes = {'Channel 1': mock_node} + r._canvas = MagicMock() + r._last_strides = (1, 1, 1) + r.set_metadata_voxel_sizes(1.0, 1.0, 1.0) + + assigned_transforms = [] + type(mock_node).transform = property( + fget=lambda self: None, + fset=lambda self, v: assigned_transforms.append(v), + ) + + r.set_z_anisotropy_ratio(3.0, from_user=True) + assert r._z_aniso_user_override == 3.0 + assert r._voxel_dz == 3.0 + assert len(assigned_transforms) >= 1 + scale = assigned_transforms[-1].scale + assert abs(scale[2] - 3.0) < 1e-6 + r.close() + del r + + +def test_metadata_update_preserves_user_override(): + from unittest.mock import MagicMock + + r = _make_bare_renderer() + mock_node = MagicMock() + r._volume_nodes = {'Channel 1': mock_node} + r._canvas = MagicMock() + r._last_strides = (1, 1, 1) + r._controls = MagicMock() + r._controls._z_aniso_spin = MagicMock() + r.set_metadata_voxel_sizes(1.0, 1.0, 1.0) + r.set_z_anisotropy_ratio(4.0, from_user=True) + r._controls._z_aniso_spin.reset_mock() + + r.set_metadata_voxel_sizes(2.0, 0.5, 0.5) + assert r._z_aniso_user_override == 4.0 + r._controls._z_aniso_spin.setValue.assert_not_called() + assert r._voxel_dz == 4.0 * 0.5 + r.close() + del r + + +def test_resample_z_axis_shape(): + from cellacdc.renderer3d import _resample_z_axis + + vol = np.zeros((10, 20, 30), dtype=np.float32) + out = _resample_z_axis(vol, 2.0, is_labels=False) + assert out.shape[0] == 20 + assert out.shape[1:] == vol.shape[1:] + + +def test_resample_labels_uses_nearest(): + from cellacdc.renderer3d import _resample_z_axis + + labels = np.zeros((4, 2, 2), dtype=np.int32) + labels[1, 0, 0] = 5 + out = _resample_z_axis(labels, 2.0, is_labels=True) + assert np.issubdtype(out.dtype, np.integer) + assert out.max() <= 5 + + +def test_resample_then_mask_cell_id(): + from cellacdc.renderer3d import _mask_labels_for_display, _resample_z_axis + + labels = np.zeros((4, 2, 2), dtype=np.int32) + labels[1, 0, 0] = 2 + labels[2, 1, 1] = 3 + resampled = _resample_z_axis(labels, 2.0, is_labels=True) + mask = _mask_labels_for_display(resampled, 2) + assert mask.sum() >= 1.0 + assert mask.max() <= 1.0 + + +def test_resample_disabled_skips_zoom(): + from cellacdc.renderer3d import _resample_z_axis + + vol = np.arange(24, dtype=np.float32).reshape(2, 3, 4) + out = _resample_z_axis(vol, 1.0, is_labels=False) + assert out is vol or np.array_equal(out, vol) + + +def test_reset_z_anisotropy_to_metadata(): + from unittest.mock import MagicMock + + r = _make_bare_renderer() + r._controls = MagicMock() + r._controls._z_aniso_spin = MagicMock() + r.set_metadata_voxel_sizes(3.0, 1.0, 1.0) + r.set_z_anisotropy_ratio(7.0, from_user=True) + r.reset_z_anisotropy_to_metadata() + assert r._z_aniso_user_override is None + assert r._metadata_z_ratio() == 3.0 + r.close() + del r From 66082894cb8f70203f2246e67e08fcda9532408b Mon Sep 17 00:00:00 2001 From: keejkrej Date: Mon, 25 May 2026 22:22:33 +0200 Subject: [PATCH 6/8] Fix 3D renderer first-launch crash and add brush lazy mode and acdc-gui. Initialize the renderer UI before preprocessing on the first update_volume call so _controls exists, and guard _preprocess_volume when controls are not yet available. Also add a direct GUI entry point and lazy brush/eraser strokes for click-move-click editing. --- cellacdc/__main__.py | 196 ++++++++----- cellacdc/config.py | 4 +- cellacdc/gui.py | 606 +++++++++++++++++++++++------------------ cellacdc/renderer3d.py | 9 +- pyproject.toml | 1 + 5 files changed, 486 insertions(+), 330 deletions(-) diff --git a/cellacdc/__main__.py b/cellacdc/__main__.py index 30d670d1..83fa6799 100755 --- a/cellacdc/__main__.py +++ b/cellacdc/__main__.py @@ -38,116 +38,131 @@ from cellacdc import _run -def run(): + +def _handle_parser_early_exit(): from cellacdc.config import parser_args - PARAMS_PATH = parser_args['params'] - if parser_args['version'] or parser_args['info']: from cellacdc.myutils import get_info_version_text - info_txt = get_info_version_text() - print(info_txt) + print(get_info_version_text()) exit() if parser_args['reset']: from cellacdc.myutils import reset_settings - reset_info_txt = reset_settings() - print(reset_info_txt) + print(reset_settings()) exit() - - if PARAMS_PATH: - _run.run_cli(PARAMS_PATH) - else: - run_gui() -def main(): - # Keep compatibility with users that installed older versions - # where the entry point was main() - run() -def run_gui(): +def _bootstrap_gui_app(): from ._run import ( - _setup_gui_libraries, + _setup_gui_libraries, _setup_symlink_app_name_macos, - _setup_numpy, - download_model_params, - _exit_on_setup + _setup_numpy, + download_model_params, + _exit_on_setup, ) - + _setup_symlink_app_name_macos() - + requires_exit = _setup_gui_libraries(exit_at_end=False) - + _setup_numpy() - + download_model_params() - + if requires_exit: _exit_on_setup() - - from qtpy import QtGui, QtWidgets, QtCore + + from qtpy import QtWidgets, QtCore if os.name == 'nt': try: - # Set taskbar icon in windows import ctypes - myappid = 'schmollerlab.cellacdc.pyqt.v1' # arbitrary string + myappid = 'schmollerlab.cellacdc.pyqt.v1' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) - except Exception as e: + except Exception: pass - # Needed by pyqtgraph with display resolution scaling try: QtWidgets.QApplication.setAttribute( QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough ) - except Exception as e: + except Exception: pass import pyqtgraph as pg - # Interpret image data as row-major instead of col-major pg.setConfigOption('imageAxisOrder', 'row-major') try: - import numba - pg.setConfigOption("useNumba", True) - except Exception as e: + import numba # noqa: F401 + pg.setConfigOption('useNumba', True) + except Exception: pass try: - import cupy as cp - pg.setConfigOption("useCupy", True) - except Exception as e: + import cupy as cp # noqa: F401 + pg.setConfigOption('useCupy', True) + except Exception: pass - # Create the application - app, splashScreen = _run._setup_app(splashscreen=True) + return _run._setup_app(splashscreen=True) + + +def _read_gui_version(logger_func=None): + from cellacdc import myutils + + version, success = myutils.read_version( + logger=logger_func, return_success=True + ) + if success: + return version + + error = myutils.check_install_package( + 'setuptools_scm', pypi_name='setuptools-scm' + ) + if error and logger_func is not None: + logger_func(error) + return myutils.read_version(logger=logger_func) + + +def run(): + from cellacdc.config import parser_args + + _handle_parser_early_exit() + + PARAMS_PATH = parser_args['params'] + + if PARAMS_PATH: + _run.run_cli(PARAMS_PATH) + else: + run_gui() + + +def main(): + # Keep compatibility with users that installed older versions + # where the entry point was main() + run() + + +def run_gui(): + app, splashScreen = _bootstrap_gui_app() + + from cellacdc import myutils - from cellacdc import myutils, printl - print('Launching application...') from cellacdc._main import mainWin - + if not splashScreen.isVisible(): splashScreen.show() - + win = mainWin(app) try: myutils.check_matplotlib_version(qparent=win) - except Exception as e: + except Exception: pass - version, success = myutils.read_version( - logger=win.logger.info, return_success=True - ) - if not success: - error = myutils.check_install_package( - 'setuptools_scm', pypi_name='setuptools-scm' - ) - if error: - win.logger.info(error) - else: - version = myutils.read_version(logger=win.logger.info) + + version = _read_gui_version(logger_func=win.logger.info) win.setVersion(version) win.launchWelcomeGuide() win.show() @@ -159,10 +174,65 @@ def run_gui(): win.logger.info(f'Welcome to Cell-ACDC v{version}') win.logger.info('**********************************************') win.logger.info('----------------------------------------------') - win.logger.info('NOTE: If application is not visible, it is probably minimized\n' - 'or behind some other open windows.') + win.logger.info( + 'NOTE: If application is not visible, it is probably minimized\n' + 'or behind some other open windows.' + ) + win.logger.info('----------------------------------------------') + splashScreen.close() + app.exec_() + + +def run_gui_direct(): + """Launch the annotation GUI directly, skipping the module launcher.""" + _handle_parser_early_exit() + + app, splashScreen = _bootstrap_gui_app() + + from cellacdc import myutils + from cellacdc.gui import guiWin + + print('Launching GUI...') + + if not splashScreen.isVisible(): + splashScreen.show() + + version = _read_gui_version() + gui_windows = [] + + def launch_gui_window(checked=False): + win = guiWin( + app, + mainWin=None, + version=version, + launcherSlot=launch_gui_window, + ) + gui_windows.append(win) + win.sigClosed.connect(_gui_window_closed) + win.run() + return win + + def _gui_window_closed(closed_win): + try: + gui_windows.remove(closed_win) + except ValueError: + pass + + win = launch_gui_window() + + try: + myutils.check_matplotlib_version(qparent=win) + except Exception: + pass + + win.logger.info('**********************************************') + win.logger.info(f'Welcome to Cell-ACDC GUI v{version}') + win.logger.info('**********************************************') + win.logger.info('----------------------------------------------') + win.logger.info( + 'NOTE: If application is not visible, it is probably minimized\n' + 'or behind some other open windows.' + ) win.logger.info('----------------------------------------------') splashScreen.close() - # splashScreenApp.quit() - # modernWin.show() - app.exec_() \ No newline at end of file + app.exec_() diff --git a/cellacdc/config.py b/cellacdc/config.py index da319ee8..e458cdf5 100755 --- a/cellacdc/config.py +++ b/cellacdc/config.py @@ -44,7 +44,9 @@ def _resizeWarningHandler(self, msg_type, msg_log_context, msg_string): help_text = ( 'Welcome to Cell-ACDC!\n\n' 'You can run Cell-ACDC both as a GUI or in the command line.\n' - 'To run the GUI type `acdc`. To run the command line type `acdc -p `.\n' + 'To run the GUI type `acdc`. To open the annotation GUI directly ' + '(skipping the launcher) type `acdc-gui`.\n' + 'To run the command line type `acdc -p `.\n' 'The `` must be a workflow INI file.\n' 'If you do not have one, use the GUI to set up the parameters.\n\n' 'Enjoy!' diff --git a/cellacdc/gui.py b/cellacdc/gui.py index 75f2ef5f..1f9d4a27 100755 --- a/cellacdc/gui.py +++ b/cellacdc/gui.py @@ -2187,6 +2187,20 @@ def gui_createControlsToolbar(self): if 'brushAutoHide' in self.df_settings.index: checked = self.df_settings.at['brushAutoHide', 'value'] == 'Yes' self.brushAutoHideCheckbox.setChecked(checked) + + brushEraserToolBar.addWidget(QLabel(' ')) + self.brushLazyModeCheckbox = QCheckBox('Lazy mode') + self.brushLazyModeCheckbox.setToolTip( + 'Click once to start brushing or erasing, move without holding ' + 'the mouse button, then click again to finish.' + ) + self.brushLazyModeAction = brushEraserToolBar.addWidget( + self.brushLazyModeCheckbox + ) + self.brushLazyModeAction.setVisible(False) + if 'brushLazyMode' in self.df_settings.index: + checked = self.df_settings.at['brushLazyMode', 'value'] == 'Yes' + self.brushLazyModeCheckbox.setChecked(checked) brushEraserToolBar.setVisible(False) self.brushEraserToolBar = brushEraserToolBar @@ -3717,6 +3731,7 @@ def gui_connectEditActions(self): self.brushAutoFillCheckbox.toggled.connect(self.brushAutoFillToggled) self.brushAutoHideCheckbox.toggled.connect(self.brushAutoHideToggled) + self.brushLazyModeCheckbox.toggled.connect(self.brushLazyModeToggled) self.imgGrad.sigAddScaleBar.connect(self.addScaleBarAction.setChecked) self.imgGrad.sigAddTimestamp.connect(self.addTimestampAction.setChecked) @@ -5187,6 +5202,29 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.startBlinkingModeCB() event.ignore() return + + if ( + left_click and brushON + and (mode == 'Segmentation and Tracking' or self.isSnapshot) + and not is_event_from_img1 + ): + ctrl = modifiers == Qt.ControlModifier + if self._lazyModeEnabled() and self.isMouseDragImg1: + self.finishLazyStroke() + return + self.startBrushStroke(xdata, ydata, ctrl=ctrl) + return + + if ( + left_click and eraserON + and (mode == 'Segmentation and Tracking' or self.isSnapshot) + and not is_event_from_img1 + ): + if self._lazyModeEnabled() and self.isMouseDragImg1: + self.finishLazyStroke() + return + self.startEraserStroke(xdata, ydata) + return # Left-click is used for brush, eraser, separate bud, curvature tool # and magic labeller @@ -5954,103 +5992,11 @@ def gui_mouseDragEventImg1(self, event): # Brush dragging mouse --> keep brushing elif self.isMouseDragImg1 and self.brushButton.isChecked(): - lab_2D = self.get_2Dlab(posData.lab) - - # t1 = time.perf_counter() - - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) - - # t2 = time.perf_counter() - - diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) - - # Build brush mask - mask = np.zeros(lab_2D.shape, bool) - mask[diskSlice][diskMask] = True - mask[rrPoly, ccPoly] = True - - modifiers = QGuiApplication.keyboardModifiers() - ctrl = modifiers == Qt.ControlModifier - - # t3 = time.perf_counter() - if not self.isPowerBrush() and not ctrl: - mask[lab_2D!=0] = False - self.setHoverToolSymbolColor( - xdata, ydata, self.ax2_BrushCirclePen, - (self.ax2_BrushCircle, self.ax1_BrushCircle), - self.brushButton, brush=self.ax2_BrushCircleBrush - ) - - # t4 = time.perf_counter() - - # Apply brush mask - self.applyBrushMask(mask, posData.brushID) - - self.setImageImg2(updateLookuptable=False) - - # t5 = time.perf_counter() - - lab2D = self.get_2Dlab(posData.lab) - brushMask = np.logical_and( - lab2D[diskSlice] == posData.brushID, diskMask - ) - self.setTempImg1Brush( - False, brushMask, posData.brushID, - toLocalSlice=diskSlice - ) - - # t6 = time.perf_counter() - - # printl( - # 'Brush exec times =\n' - # f' * {(t1-t0)*1000 = :.4f} ms\n' - # f' * {(t2-t1)*1000 = :.4f} ms\n' - # f' * {(t3-t2)*1000 = :.4f} ms\n' - # f' * {(t4-t3)*1000 = :.4f} ms\n' - # f' * {(t5-t4)*1000 = :.4f} ms\n' - # f' * {(t6-t5)*1000 = :.4f} ms\n' - # f' * {(t6-t0)*1000 = :.4f} ms' - # ) + self._continueBrushStroke(x, y, xdata, ydata) # Eraser dragging mouse --> keep erasing elif self.isMouseDragImg1 and self.eraserButton.isChecked(): - posData = self.data[self.pos_i] - lab_2D = self.get_2Dlab(posData.lab) - rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) - - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - - diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) - - # Build eraser mask - mask = np.zeros(lab_2D.shape, bool) - mask[ymin:ymax, xmin:xmax][diskMask] = True - mask[rrPoly, ccPoly] = True - - if self.eraseOnlyOneID: - mask[lab_2D!=self.erasedID] = False - self.setHoverToolSymbolColor( - xdata, ydata, self.eraserCirclePen, - (self.ax2_EraserCircle, self.ax1_EraserCircle), - self.eraserButton, hoverRGB=self.img2.lut[self.erasedID], - ID=self.erasedID - ) - - self.erasedIDs.update(lab_2D[mask]) - self.applyEraserMask(mask) - - self.setImageImg2() - - for erasedID in self.erasedIDs: - if erasedID == 0: - continue - self.erasedLab[lab_2D==erasedID] = erasedID - self.erasedLab[mask] = 0 - - eraserMask = mask[diskSlice] - self.setTempImg1Eraser(eraserMask, toLocalSlice=diskSlice) - self.setTempImg1Eraser(eraserMask, toLocalSlice=diskSlice, ax=1) + self._continueEraserStroke(x, y, xdata, ydata) # Move label dragging mouse --> keep moving elif self.isMovingLabel and self.moveLabelToolButton.isChecked(): @@ -6397,6 +6343,11 @@ def gui_hoverEventImg1(self, event, isHoverImg1=True): self.checkHighlightScaleBar(x, y, activeToolButton) self.checkHighlightTimestamp(x, y, activeToolButton) self.wcLabel.setText(hoverText) + if self._lazyStrokeActive(): + if self.brushButton.isChecked(): + self._continueBrushStroke(x, y, xdata, ydata) + elif self.eraserButton.isChecked(): + self._continueEraserStroke(x, y, xdata, ydata) else: self.clickedOnBud = False self.BudMothTempLine.setData([], []) @@ -6452,6 +6403,11 @@ def gui_hoverEventImg1(self, event, isHoverImg1=True): x, y = event.pos() self.updateBrushCursor(x, y, isHoverImg1=isHoverImg1) self.hideItemsHoverBrush(xy=(x, y)) + elif cursorsInfo['setCurvCursor'] and not event.isExit(): + x, y = event.pos() + xdata, ydata = int(x), int(y) + if self.autoIDcheckbox.isChecked(): + self.getHoverID(xdata, ydata) elif cursorsInfo['setAddPointCursor']: x, y = event.pos() self.setHoverCircleAddPoint(x, y) @@ -6786,10 +6742,27 @@ def gui_hoverEventImg2(self, event): # hoverText = self.hoverValuesFormatted(xdata, ydata) # self.wcLabel.setText(hoverText) else: - if self.eraserButton.isChecked() or self.brushButton.isChecked(): + if ( + (self.eraserButton.isChecked() or self.brushButton.isChecked()) + and not self._lazyStrokeActive() + ): self.gui_mouseReleaseEventImg2(event) self.wcLabel.setText(f'') + if not event.isExit(): + x, y = event.pos() + xdata, ydata = int(x), int(y) + if ( + self._lazyStrokeActive() + and myutils.is_in_bounds( + xdata, ydata, *self.currentLab2D.shape[::-1] + ) + ): + if self.brushButton.isChecked(): + self._continueBrushStroke(x, y, xdata, ydata) + elif self.eraserButton.isChecked(): + self._continueEraserStroke(x, y, xdata, ydata) + if setMoveLabelCursor or setExpandLabelCursor: x, y = event.pos() self.updateHoverLabelCursor(x, y) @@ -6858,66 +6831,12 @@ def gui_mouseDragEventImg2(self, event): return # Eraser dragging mouse --> keep erasing - if self.isMouseDragImg2 and self.eraserButton.isChecked(): - posData = self.data[self.pos_i] - lab_2D = self.get_2Dlab(posData.lab) - Y, X = lab_2D.shape - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - brushSize = self.brushSizeSpinbox.value() - rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) - - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - - # Build eraser mask - mask = np.zeros(lab_2D.shape, bool) - mask[ymin:ymax, xmin:xmax][diskMask] = True - mask[rrPoly, ccPoly] = True - - if self.eraseOnlyOneID: - mask[lab_2D!=self.erasedID] = False - self.setHoverToolSymbolColor( - xdata, ydata, self.eraserCirclePen, - (self.ax2_EraserCircle, self.ax1_EraserCircle), - self.eraserButton, hoverRGB=self.img2.lut[self.erasedID], - ID=self.erasedID - ) - - self.erasedIDs.update(lab_2D[mask]) - - self.applyEraserMask(mask) - self.setImageImg2(updateLookuptable=False) + if self.isMouseDragImg1 and self.eraserButton.isChecked(): + self._continueEraserStroke(x, y, xdata, ydata) # Brush paint dragging mouse --> keep painting - if self.isMouseDragImg2 and self.brushButton.isChecked(): - posData = self.data[self.pos_i] - lab_2D = self.get_2Dlab(posData.lab) - Y, X = lab_2D.shape - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) - - # Build brush mask - mask = np.zeros(lab_2D.shape, bool) - mask[ymin:ymax, xmin:xmax][diskMask] = True - mask[rrPoly, ccPoly] = True - - # If user double-pressed 'b' then draw over the labels - color = self.brushButton.palette().button().color().name() - if color != self.doublePressKeyButtonColor: - mask[lab_2D!=0] = False - self.setHoverToolSymbolColor( - xdata, ydata, self.ax2_BrushCirclePen, - (self.ax2_BrushCircle, self.ax1_BrushCircle), - self.eraserButton, brush=self.ax2_BrushCircleBrush - ) - - # Apply brush mask - self.applyBrushMask(mask, self.ax2BrushID) - - self.setImageImg2() + if self.isMouseDragImg1 and self.brushButton.isChecked(): + self._continueBrushStroke(x, y, xdata, ydata) # Move label dragging mouse --> keep moving elif self.isMovingLabel and self.moveLabelToolButton.isChecked(): @@ -7078,7 +6997,9 @@ def gui_mouseReleaseEventImg1(self, event): self.curvToolSplineToObj(isRightClick=True) self.update_rp() if self.autoIDcheckbox.isChecked(): - self.trackManuallyAddedObject(posData.brushID, True) + self.trackManuallyAddedObject( + posData.brushID, self.isNewID + ) if self.isSnapshot: self.fixCcaDfAfterEdit('Add new ID with curvature tool') self.updateAllImages() @@ -7093,25 +7014,17 @@ def gui_mouseReleaseEventImg1(self, event): # Eraser mouse release --> update IDs and contours elif self.isMouseDragImg1 and self.eraserButton.isChecked(): - self.isMouseDragImg1 = False - - self.clearTempBrushImage() - - # Update data (rp, etc) - self.update_rp() + if self._lazyModeEnabled(): + return - doUpdateImages = self.checkWarnDeletedIDwithEraser() - - if doUpdateImages: - self.updateAllImages() + self.finishEraserStroke() # Brush button mouse release elif self.isMouseDragImg1 and self.brushButton.isChecked(): - self.isMouseDragImg1 = False + if self._lazyModeEnabled(): + return - self.clearTempBrushImage() - - self.brushReleased() + self.finishBrushStroke() # Wand tool release, add new object elif self.isMouseDragImg1 and self.wandToolButton.isChecked(): @@ -7734,100 +7647,24 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): xdata, ydata = int(x), int(y) lab_2D = self.get_2Dlab(posData.lab) Y, X = lab_2D.shape - - # Store undo state before modifying stuff - self.storeUndoRedoStates(False, storeOnlyZoom=True) - - ID = self.getHoverID(xdata, ydata) - - if ID > 0: - posData.brushID = ID - self.isNewID = False - else: - # Update brush ID. Take care of disappearing cells to remember - # to not use their IDs anymore in the future - self.isNewID = True - self.setBrushID() - self.updateLookuptable(lenNewLut=posData.brushID+1) - - self.brushColor = self.lut[posData.brushID]/255 self.yPressAx2, self.xPressAx2 = y, x - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) - - self.isMouseDragImg1 = True - - # Draw new objects - localLab = lab_2D[diskSlice] - mask = diskMask.copy() - if not self.isPowerBrush() and not ctrl: - mask[localLab!=0] = False - - self.applyBrushMask(mask, posData.brushID, toLocalSlice=diskSlice) - - self.setImageImg2(updateLookuptable=False) - - how = self.drawIDsContComboBox.currentText() - lab2D = self.get_2Dlab(posData.lab) - self.globalBrushMask = np.zeros(lab2D.shape, dtype=bool) - brushMask = localLab == posData.brushID - brushMask = np.logical_and(brushMask, diskMask) - self.setTempImg1Brush( - True, brushMask, posData.brushID, toLocalSlice=diskSlice - ) + if self._lazyModeEnabled() and self.isMouseDragImg1: + self.finishLazyStroke() + return - self.lastHoverID = -1 + self.startBrushStroke(xdata, ydata, ctrl=ctrl) elif left_click and canErase: x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) - lab_2D = self.get_2Dlab(posData.lab) - Y, X = lab_2D.shape - - # Store undo state before modifying stuff - self.storeUndoRedoStates(False, storeOnlyZoom=True) - - self.yPressAx2, self.xPressAx2 = y, x - # Keep a list of erased IDs got erased - self.erasedIDs = set() - - if self.xyOnCtrlPressedFirstTime is not None: - self.erasedID = self.getHoverID(*self.xyOnCtrlPressedFirstTime) - else: - self.erasedID = self.getHoverID(xdata, ydata) - - ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) - # Build eraser mask - mask = np.zeros(lab_2D.shape, bool) - mask[ymin:ymax, xmin:xmax][diskMask] = True - - - # If user double-pressed 'b' then erase over ALL labels - color = self.eraserButton.palette().button().color().name() - eraseOnlyOneID = ( - color != self.doublePressKeyButtonColor - and self.erasedID != 0 - ) - - self.eraseOnlyOneID = eraseOnlyOneID - - if eraseOnlyOneID: - mask[lab_2D!=self.erasedID] = False - - self.setTempImg1Eraser(mask, init=True) - self.applyEraserMask(mask) + if self._lazyModeEnabled() and self.isMouseDragImg1: + self.finishLazyStroke() + return - self.erasedIDs.update(lab_2D[mask]) - - for erasedID in self.erasedIDs: - if erasedID == 0: - continue - self.erasedLab[lab_2D==erasedID] = erasedID - - self.isMouseDragImg1 = True + self.startEraserStroke(xdata, ydata) elif canAddPoint: action = addPointsByClickingButton.action @@ -8067,7 +7904,9 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.curvToolSplineToObj() self.update_rp() if self.autoIDcheckbox.isChecked(): - self.trackManuallyAddedObject(posData.brushID, True) + self.trackManuallyAddedObject( + posData.brushID, self.isNewID + ) if self.isSnapshot: self.fixCcaDfAfterEdit('Add new ID with curvature tool') self.updateAllImages() @@ -9925,7 +9764,13 @@ def getHoverID(self, xdata, ydata, byPassShiftCheck=False): if self.isSegm3D: z = self.z_lab() SizeZ = posData.lab.shape[0] - doNotLinkThroughZ = self.brushButton.isChecked() and shift + doNotLinkThroughZ = ( + shift + and ( + self.brushButton.isChecked() + or self.curvToolButton.isChecked() + ) + ) if doNotLinkThroughZ: if self.brushHoverCenterModeAction.isChecked() or ID>0: hoverID = ID @@ -9972,8 +9817,11 @@ def getHoverID(self, xdata, ydata, byPassShiftCheck=False): else: hoverID = 0 else: - if self.brushButton.isChecked() and shift: - # Force new ID with brush and Shift + if shift and ( + self.brushButton.isChecked() + or self.curvToolButton.isChecked() + ): + # Force new ID with brush/curvature tool and Shift hoverID = 0 elif self.brushHoverCenterModeAction.isChecked() or ID>0: hoverID = ID @@ -11756,6 +11604,203 @@ def brushAutoHideToggled(self, checked): self.df_settings.at['brushAutoHide', 'value'] = val self.df_settings.to_csv(self.settings_csv_path) + def brushLazyModeToggled(self, checked): + val = 'Yes' if checked else 'No' + self.df_settings.at['brushLazyMode', 'value'] = val + self.df_settings.to_csv(self.settings_csv_path) + if not checked: + self.finishLazyStroke() + + def _lazyModeEnabled(self): + return self.brushLazyModeCheckbox.isChecked() + + def _lazyStrokeActive(self): + return ( + self._lazyModeEnabled() + and self.isMouseDragImg1 + and ( + self.brushButton.isChecked() + or self.eraserButton.isChecked() + ) + ) + + def finishLazyStroke(self): + if self.brushButton.isChecked() and self.isMouseDragImg1: + self.finishBrushStroke() + elif self.eraserButton.isChecked() and self.isMouseDragImg1: + self.finishEraserStroke() + + def _continueBrushStroke(self, x, y, xdata, ydata): + posData = self.data[self.pos_i] + lab_2D = self.get_2Dlab(posData.lab) + Y, X = lab_2D.shape + + ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) + rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) + diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) + + mask = np.zeros(lab_2D.shape, bool) + mask[diskSlice][diskMask] = True + mask[rrPoly, ccPoly] = True + + modifiers = QGuiApplication.keyboardModifiers() + ctrl = modifiers == Qt.ControlModifier + if not self.isPowerBrush() and not ctrl: + mask[lab_2D != 0] = False + self.setHoverToolSymbolColor( + xdata, ydata, self.ax2_BrushCirclePen, + (self.ax2_BrushCircle, self.ax1_BrushCircle), + self.brushButton, brush=self.ax2_BrushCircleBrush, + ) + + self.applyBrushMask(mask, posData.brushID) + self.setImageImg2(updateLookuptable=False) + + lab2D = self.get_2Dlab(posData.lab) + brushMask = np.logical_and( + lab2D[diskSlice] == posData.brushID, diskMask + ) + self.setTempImg1Brush( + False, brushMask, posData.brushID, + toLocalSlice=diskSlice, + ) + + def startBrushStroke(self, xdata, ydata, ctrl=False): + posData = self.data[self.pos_i] + lab_2D = self.get_2Dlab(posData.lab) + + self.storeUndoRedoStates(False, storeOnlyZoom=True) + + ID = self.getHoverID(xdata, ydata) + + if ID > 0: + posData.brushID = ID + self.isNewID = False + else: + self.isNewID = True + self.setBrushID() + self.updateLookuptable(lenNewLut=posData.brushID+1) + + self.brushColor = self.lut[posData.brushID]/255 + + ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) + diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) + + self.isMouseDragImg1 = True + + localLab = lab_2D[diskSlice] + mask = diskMask.copy() + if not self.isPowerBrush() and not ctrl: + mask[localLab!=0] = False + + self.applyBrushMask(mask, posData.brushID, toLocalSlice=diskSlice) + + self.setImageImg2(updateLookuptable=False) + + lab2D = self.get_2Dlab(posData.lab) + self.globalBrushMask = np.zeros(lab2D.shape, dtype=bool) + brushMask = localLab == posData.brushID + brushMask = np.logical_and(brushMask, diskMask) + self.setTempImg1Brush( + True, brushMask, posData.brushID, toLocalSlice=diskSlice + ) + + self.lastHoverID = -1 + + def startEraserStroke(self, xdata, ydata): + posData = self.data[self.pos_i] + lab_2D = self.get_2Dlab(posData.lab) + + self.storeUndoRedoStates(False, storeOnlyZoom=True) + + self.yPressAx2, self.xPressAx2 = ydata, xdata + self.erasedIDs = set() + + if self.xyOnCtrlPressedFirstTime is not None: + self.erasedID = self.getHoverID(*self.xyOnCtrlPressedFirstTime) + else: + self.erasedID = self.getHoverID(xdata, ydata) + + ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) + mask = np.zeros(lab_2D.shape, bool) + mask[ymin:ymax, xmin:xmax][diskMask] = True + + color = self.eraserButton.palette().button().color().name() + self.eraseOnlyOneID = ( + color != self.doublePressKeyButtonColor + and self.erasedID != 0 + ) + + if self.eraseOnlyOneID: + mask[lab_2D != self.erasedID] = False + + self.setTempImg1Eraser(mask, init=True) + self.applyEraserMask(mask) + + self.erasedIDs.update(lab_2D[mask]) + for erasedID in self.erasedIDs: + if erasedID == 0: + continue + self.erasedLab[lab_2D == erasedID] = erasedID + + self.isMouseDragImg1 = True + + def _continueEraserStroke(self, x, y, xdata, ydata): + posData = self.data[self.pos_i] + lab_2D = self.get_2Dlab(posData.lab) + Y, X = lab_2D.shape + + ymin, xmin, ymax, xmax, diskMask = self.getDiskMask(xdata, ydata) + rrPoly, ccPoly = self.getPolygonBrush((y, x), Y, X) + diskSlice = (slice(ymin, ymax), slice(xmin, xmax)) + + mask = np.zeros(lab_2D.shape, bool) + mask[ymin:ymax, xmin:xmax][diskMask] = True + mask[rrPoly, ccPoly] = True + + if self.eraseOnlyOneID: + mask[lab_2D != self.erasedID] = False + self.setHoverToolSymbolColor( + xdata, ydata, self.eraserCirclePen, + (self.ax2_EraserCircle, self.ax1_EraserCircle), + self.eraserButton, hoverRGB=self.img2.lut[self.erasedID], + ID=self.erasedID, + ) + + self.erasedIDs.update(lab_2D[mask]) + self.applyEraserMask(mask) + self.setImageImg2() + + for erasedID in self.erasedIDs: + if erasedID == 0: + continue + self.erasedLab[lab_2D == erasedID] = erasedID + self.erasedLab[mask] = 0 + + eraserMask = mask[diskSlice] + self.setTempImg1Eraser(eraserMask, toLocalSlice=diskSlice) + self.setTempImg1Eraser(eraserMask, toLocalSlice=diskSlice, ax=1) + + def finishEraserStroke(self): + if not self.isMouseDragImg1: + return + + self.isMouseDragImg1 = False + self.clearTempBrushImage() + self.update_rp() + + doUpdateImages = self.checkWarnDeletedIDwithEraser() + if doUpdateImages: + self.updateAllImages() + + def finishBrushStroke(self): + if not self.isMouseDragImg1: + return + + self.isMouseDragImg1 = False + self.clearTempBrushImage() + self.brushReleased() + def brushReleased(self): posData = self.data[self.pos_i] self.fillHolesID(posData.brushID, sender='brush') @@ -14350,6 +14395,8 @@ def Brush_cb(self, checked): self.connectLeftClickButtons() self.setFocusGraphics() else: + if self.isMouseDragImg1: + self.finishLazyStroke() self.ax1_lostObjScatterItem.setVisible(True) self.ax2_lostObjScatterItem.setVisible(True) self.ax1_lostTrackedScatterItem.setVisible(True) @@ -14361,6 +14408,7 @@ def Brush_cb(self, checked): self.resetCursors() self.showEditIDwidgets(checked) + self.brushLazyModeAction.setVisible(checked) self.enableSizeSpinbox(checked) def showEditIDwidgets(self, visible): @@ -14530,6 +14578,7 @@ def equalizeHist(self, checked=True): def curvTool_cb(self, checked): posData = self.data[self.pos_i] if checked: + self.setDiskMask() self.disconnectLeftClickButtons() self.uncheckLeftClickButtons(self.curvToolButton) self.connectLeftClickButtons() @@ -14633,6 +14682,8 @@ def Eraser_cb(self, checked): self.brushButton.setStyleSheet(f'background-color: {c}') self.connectLeftClickButtons() else: + if self.isMouseDragImg1: + self.finishLazyStroke() self.setHoverToolSymbolData( [], [], (self.ax1_EraserCircle, self.ax2_EraserCircle, self.ax1_EraserX, self.ax2_EraserX) @@ -14641,6 +14692,7 @@ def Eraser_cb(self, checked): self.updateAllImages() self.showEditIDwidgets(checked) + self.brushLazyModeAction.setVisible(checked) self.enableSizeSpinbox(checked) def storeCurrentAnnotOptions_ax1(self, return_value=False): @@ -20738,16 +20790,32 @@ def curvToolSplineToObj(self, xxA=None, yyA=None, isRightClick=False): xxS, yyS = self.getClosedSplineCoords() + xx, yy = self.curvAnchors.getData() + if len(xx) > 0: + xdata, ydata = int(round(xx[0])), int(round(yy[0])) + else: + xdata, ydata = int(self.autoCont_x0), int(self.autoCont_y0) + if self.autoIDcheckbox.isChecked(): - self.setBrushID() - curvToolID = posData.brushID + hoverID = self.getHoverID(xdata, ydata) + if hoverID > 0: + curvToolID = hoverID + self.isNewID = False + else: + self.setBrushID() + curvToolID = posData.brushID + self.isNewID = True + self.updateLookuptable(lenNewLut=posData.brushID+1) else: curvToolID = self.editIDspinbox.value() - posData.brushID = curvToolID - - if curvToolID <= 0: - self.setBrushID() - curvToolID = posData.brushID + if curvToolID <= 0: + self.setBrushID() + curvToolID = posData.brushID + self.isNewID = True + self.updateLookuptable(lenNewLut=posData.brushID+1) + else: + self.isNewID = False + posData.brushID = curvToolID lab2D = self.get_2Dlab(posData.lab).copy() newIDMask = np.zeros(lab2D.shape, bool) @@ -33270,6 +33338,18 @@ def onEscape( self.typingEditID = False QTimer.singleShot(300, self.autoRange) return + + if ( + self.isMouseDragImg1 + and self._lazyModeEnabled() + and ( + self.brushButton.isChecked() + or self.eraserButton.isChecked() + ) + ): + self.finishLazyStroke() + QTimer.singleShot(300, self.autoRange) + return if isTypingIDFunctionChecked and self.typingEditID: self.typingEditID = False diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index d5eba495..4aca5b90 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -1425,7 +1425,10 @@ def _preprocess_volume( else: vol = np.zeros_like(vol) - current_mode = self._controls._mode_combo.currentData() or 'mip' + current_mode = ( + self._controls._mode_combo.currentData() or 'mip' + if self._controls is not None else 'mip' + ) # Smooth ISO pre-filter: approximates napari's SMOOTH_GRADIENT_DEFINITION # (Sobel-Feldman 27-sample kernel) without requiring custom GLSL injection. @@ -1694,13 +1697,13 @@ def update_volume( Data is automatically downsampled if any dimension exceeds the GPU's maximum 3-D texture size. """ - vol = self._preprocess_volume(data, channel=channel_name) - if self._volumes_data is None or self.channels is None: name = channel_name or 'Channel 1' self.set_volume(data, channel_name=name) return + vol = self._preprocess_volume(data, channel=channel_name) + if channel_name is None and channel_index is None: channel_name = self.channels[0] diff --git a/pyproject.toml b/pyproject.toml index a11398d9..622ab6ce 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -148,6 +148,7 @@ dev = [ [project.scripts] cellacdc = "cellacdc.__main__:run" acdc = "cellacdc.__main__:run" +acdc-gui = "cellacdc.__main__:run_gui_direct" Cell-ACDC = "cellacdc.__main__:run" [tool.setuptools] From dc03f2eb20cd7ae96cc8c5b50b0518d52a9f1f60 Mon Sep 17 00:00:00 2001 From: keejkrej Date: Tue, 26 May 2026 01:13:44 +0200 Subject: [PATCH 7/8] Improve 3D label overlays and simplify keyboard shortcuts to core edit tools. Remove delete-object shortcut customization and bidirectional 2D/3D sync in favor of one-way pushes from the main GUI. Add LUT-aware label rendering, segmentation-only mode, BF/segm blend, and KEYBINDS.md. Co-authored-by: Cursor --- KEYBINDS.md | 34 + cellacdc/apps.py | 41 +- cellacdc/colors.py | 40 ++ cellacdc/gui.py | 1310 +++++++++++++++++--------------------- cellacdc/renderer3d.py | 1036 ++++++++++++++++++++++++------ renderer3d_snapshot4.png | Bin 0 -> 409141 bytes 6 files changed, 1497 insertions(+), 964 deletions(-) create mode 100644 KEYBINDS.md create mode 100644 renderer3d_snapshot4.png diff --git a/KEYBINDS.md b/KEYBINDS.md new file mode 100644 index 00000000..c1161443 --- /dev/null +++ b/KEYBINDS.md @@ -0,0 +1,34 @@ +# Cell-ACDC keyboard shortcuts + +## Core edit tools (customizable) + +These five tools are listed in **Settings → Customize keyboard shortcuts…** (`Ctrl+K`). + +| Key | Tool | Usage | +|-----|------|--------| +| `B` | Brush | Left-click / drag to paint (double-`B` = power brush) | +| `E` | Eraser | Left-click / drag to erase (double-`E` = power eraser) | +| `P` | Curvature tool | Left-click to place spline anchors | +| `I` | Edit ID | Left-click a cell to change its ID | +| `X` | Delete ID | Left-click a cell to delete it | + +All toolbar tools use **activate tool → left-click** on the image. + +--- + +## Navigation & file (not in shortcut editor) + +| Key | Action | +|-----|--------| +| `←` / `→` | Previous / next frame | +| `H` | Zoom to cells; double-`H` = reset zoom | +| `Ctrl+S` | Quick save | +| `Ctrl+Z` / `Ctrl+Y` | Undo / redo | +| `Ctrl+F` | Find ID | +| `Esc` | Cancel / clear highlights | + +See the GUI menus for additional bindings (slideshow, auto-pilot, cell-cycle table, etc.). + +--- + +*Custom bindings are saved in `shortcuts.ini` and override these defaults.* diff --git a/cellacdc/apps.py b/cellacdc/apps.py index 5bc4553c..0e8b09f7 100755 --- a/cellacdc/apps.py +++ b/cellacdc/apps.py @@ -14206,9 +14206,7 @@ def showEvent(self, event) -> None: class ShortcutEditorDialog(QBaseDialog): def __init__( - self, widgetsWithShortcut: dict, - delObjectKey='', - delObjectButton: Literal['Middle click', 'Left click']='Middle click', + self, widgetsWithShortcut: dict, zoomOutKeyValue: int=None, parent=None ): @@ -14226,26 +14224,8 @@ def __init__( scrollArea.setWidgetResizable(True) scrollAreaWidget = QWidget() entriesLayout = QGridLayout() - + row = 0 - button = widgets.PushButton(self, flat=True) - button.setIcon(QIcon(":del_obj_click.svg")) - self.delObjShortcutLineEdit = widgets.ShortcutLineEdit( - allowModifiers=True, notAllowedModifier=Qt.AltModifier - ) - if delObjectKey is not None: - self.delObjShortcutLineEdit.setText(delObjectKey) - self.delObjButtonCombobox = QComboBox() - self.delObjButtonCombobox.addItems(['Middle click', 'Left click']) - self.delObjButtonCombobox.setCurrentText(delObjectButton) - entriesLayout.addWidget(button, row, 0) - entriesLayout.addWidget(QLabel('Delete object:'), row, 1) - entriesLayout.addWidget(self.delObjShortcutLineEdit, row, 2) - entriesLayout.addWidget( - self.delObjButtonCombobox, row, 3, alignment=Qt.AlignLeft - ) - - row += 1 name = 'Zoom out' button = widgets.PushButton(self, flat=True) label = QLabel('Zoom out:') @@ -14261,7 +14241,7 @@ def __init__( entriesLayout.addWidget(label, row, 1) entriesLayout.addWidget(self.zoomShortcutLineEdit, row, 2) self.shortcutLineEdits[name] = self.zoomShortcutLineEdit - + row += 1 for row, (name, widget) in enumerate(widgetsWithShortcut.items(), start=row): button = widgets.PushButton(self, flat=True) @@ -14324,12 +14304,6 @@ def warnInvalidKeySequenceDelObjWithLeftClick(self): msg.warning(self, 'Invalid key sequence to delete objects', txt) def ok_cb(self): - delObjButtonText = self.delObjButtonCombobox.currentText() - delObjKeySequence = self.delObjShortcutLineEdit.keySequence - if delObjButtonText == 'Left click' and delObjKeySequence is None: - self.warnInvalidKeySequenceDelObjWithLeftClick() - return - self.shortcutLineEdits.pop('Zoom out') self.cancel = False for name, shortcutLineEdit in self.shortcutLineEdits.items(): @@ -14340,14 +14314,9 @@ def ok_cb(self): self.customShortcuts[name] = ( text, shortcutLineEdit.keySequence ) - - delObjQtButton = ( - Qt.MouseButton.LeftButton if delObjButtonText == 'Left click' - else Qt.MouseButton.MiddleButton - ) - self.delObjAction = delObjKeySequence, delObjQtButton + self.zoomOutKeyValue = self.zoomShortcutLineEdit.key - + self.close() def showEvent(self, event) -> None: diff --git a/cellacdc/colors.py b/cellacdc/colors.py index e5501a85..464c6507 100644 --- a/cellacdc/colors.py +++ b/cellacdc/colors.py @@ -411,6 +411,46 @@ def pg_to_vispy_cmap(pg_cmap, n=256): }) +def labels_lut_vispy_cmap(lut: np.ndarray): + """Convert the 2D labels LUT (N×4 uint8, index 0 transparent) to VisPy.""" + table = np.asarray(lut, dtype=np.float32) + if table.ndim != 2 or table.shape[1] < 3: + raise ValueError( + f'Expected labels LUT with shape (N, 4); got {table.shape}' + ) + if table.shape[1] == 3: + alpha = np.ones((len(table), 1), dtype=np.float32) + table = np.concatenate([table, alpha], axis=1) + rgba = table[:, :4] / 255.0 + transparent = (0.0, 0.0, 0.0, 0.0) + return VisPyColormap( + rgba, + interpolation='zero', + bad_color=transparent, + low_color=transparent, + high_color=transparent, + ) + + +def overlay_mask_vispy_cmap(color: str = 'red'): + """Colormap for binary label-mask overlays (transparent at 0, *color* at 1).""" + rgb = { + 'red': (1.0, 0.0, 0.0), + 'green': (0.0, 1.0, 0.0), + 'blue': (0.0, 0.0, 1.0), + 'cyan': (0.0, 1.0, 1.0), + 'magenta': (1.0, 0.0, 1.0), + 'yellow': (1.0, 1.0, 0.0), + 'orange': (1.0, 0.5, 0.0), + 'white': (1.0, 1.0, 1.0), + }.get(color, (1.0, 0.0, 0.0)) + colors = np.array( + [[0.0, 0.0, 0.0, 0.0], [*rgb, 1.0]], + dtype=np.float32, + ) + return VisPyColormap(colors) + + def vispy_cmap_from_spec(spec: str): """Return a vispy colormap object or name for *spec*. diff --git a/cellacdc/gui.py b/cellacdc/gui.py index 1f9d4a27..561addef 100755 --- a/cellacdc/gui.py +++ b/cellacdc/gui.py @@ -215,47 +215,36 @@ def get_voxel_sizes(self): def on_renderer_closed(self): pass - def on_main_overlay_changed(self): - from cellacdc.renderer3d import _parse_overlay_entry, overlay_channel_name + def push_overlays_from_main(self): + """One-way push: refresh 3D overlay volumes/colors from current 2D state.""" + from cellacdc.renderer3d import ( + OVERLAY_KIND_SEGM, + _parse_overlay_entry, + overlay_channel_name, + ) win = getattr(self._gui, '_renderer3d_window', None) if win is None or not win.isVisible(): return - overlays = self._gui._get_overlay_zstacks() - win._syncing_overlay_from_main = True - try: - if not overlays: - win.update_overlay_volumes([]) - return - existing = [ - k for k in (win._volume_nodes or {}) - if k.startswith('overlay:') - ] - if len(existing) != len(overlays): - win.update_overlay_volumes(overlays) - return - for index, entry in enumerate(overlays): - _data, opacity, cmap_spec, _mode, meta = _parse_overlay_entry( - entry, index - ) - key = overlay_channel_name(index) - win.set_overlay_opacity(key, opacity, sync_main_gui=False) - win.set_overlay_cmap(key, cmap_spec, sync_main_gui=False) - widgets_info = win._overlay_widgets.get(key) - if widgets_info is None: - continue - opacity_spin = widgets_info.get('opacity_spin') - if opacity_spin is not None: - opacity_spin.blockSignals(True) - opacity_spin.setValue(float(opacity)) - opacity_spin.blockSignals(False) - lut_item = widgets_info.get('lut_item') - if lut_item is not None and hasattr(cmap_spec, 'getLookupTable'): - lut_item.blockSignals(True) - lut_item.setGradient(win._pg_cmap_to_gradient(cmap_spec)) - lut_item.blockSignals(False) - finally: - win._syncing_overlay_from_main = False + if getattr(win, '_segmentation_only', False): + overlays = self._gui._get_3d_renderer_overlays_without_segm() + else: + overlays = self._gui._get_3d_renderer_overlays() + if not overlays: + win.update_overlay_volumes([]) + return + if not win.refresh_overlay_volumes(overlays): + win.update_overlay_volumes(overlays) + return + for index, entry in enumerate(overlays): + _data, opacity, cmap_spec, _mode, meta = _parse_overlay_entry( + entry, index + ) + key = overlay_channel_name(index) + if meta.get('kind') == OVERLAY_KIND_SEGM: + continue + win.set_overlay_opacity(key, opacity, sync_main_gui=False) + win.set_overlay_cmap(key, cmap_spec, sync_main_gui=False) def apply_overlay_control_from_renderer( self, @@ -264,33 +253,7 @@ def apply_overlay_control_from_renderer( gradient_state: dict | None = None, labels_alpha: float | None = None, ) -> None: - if getattr(self._gui, '_renderer3d_sync_blocked', False): - return - self._gui._renderer3d_sync_blocked = True - try: - if labels_alpha is not None: - slider = self._gui.imgGrad.labelsAlphaSlider - slider.blockSignals(True) - slider.setValue( - float(labels_alpha) * slider.maximum() - ) - slider.blockSignals(False) - return - if channel_name not in getattr(self._gui, 'overlayLayersItems', {}): - return - _imageItem, lutItem, alphaSB = self._gui.overlayLayersItems[ - channel_name - ][:3] - if opacity is not None: - alphaSB.blockSignals(True) - alphaSB.setValue(int(round(opacity * alphaSB.maximum()))) - alphaSB.blockSignals(False) - if gradient_state is not None: - lutItem.gradient.blockSignals(True) - lutItem.gradient.restoreState(gradient_state) - lutItem.gradient.blockSignals(False) - finally: - self._gui._renderer3d_sync_blocked = False + return def get_available_cell_ids(self): if not getattr(self._gui, 'isDataLoaded', False): @@ -301,34 +264,78 @@ def get_available_cell_ids(self): except Exception: return [] - def apply_cell_id_from_renderer(self, cell_id: int) -> None: - if getattr(self._gui, '_renderer3d_sync_blocked', False): - return - self._gui._renderer3d_sync_blocked = True + def get_labels_image_lut(self): + """One-time copy of the 2D per-label colour table when 3D opens.""" + if not hasattr(self._gui, 'getLabelsImageLut'): + return None try: - cell_id = int(cell_id) - propsQGBox = self._gui.guiTabControl.propsQGBox - propsQGBox.idSB.blockSignals(True) - propsQGBox.idSB.setValue(cell_id) - propsQGBox.idSB.blockSignals(False) - if hasattr(self._gui, 'highlightIDToolbar'): - self._gui.highlightIDToolbar.setIDNoSignals(cell_id) - if cell_id > 0: - self._gui.highlightSearchedID(cell_id, force=True) - else: - self._gui.clearHighlightedKeepIDs() - finally: - self._gui._renderer3d_sync_blocked = False + return self._gui.getLabelsImageLut() + except Exception: + return None - def on_cell_id_changed_from_main(self, cell_id: int) -> None: + def get_labels_gradient_initial_state(self): + """One-time copy of the 2D labels gradient when the 3D window opens.""" + try: + grad = self._gui.labelsGrad.item.saveState() + bkgr = self._gui.labelsGrad.colorButton.color().getRgb()[:3] + return grad, bkgr + except Exception: + return None + + def _normalized_clim_from_main_image_levels(self): + """Map 2D img1 levels to [0, 1] clim for the current 3D z-stack.""" + zstack = self._gui._get_current_zstack() + if zstack is None: + return (0.0, 1.0) + try: + lo_raw, hi_raw = self._gui.img1.getLevels() + except Exception: + return (0.0, 1.0) + vmin, vmax = float(zstack.min()), float(zstack.max()) + if vmax <= vmin: + return (0.0, 1.0) + span = vmax - vmin + lo = max(0.0, min(1.0, (float(lo_raw) - vmin) / span)) + hi = max(0.0, min(1.0, (float(hi_raw) - vmin) / span)) + if hi <= lo: + return (0.0, 1.0) + return (lo, hi) + + def get_primary_image_lut_state(self): + return ( + self._gui.imgGrad.gradient.saveState(), + self._normalized_clim_from_main_image_levels(), + ) + + @staticmethod + def _primary_lut_cache_key(gradient_state, clim): + ticks = gradient_state.get('ticks', ()) + tick_key = tuple( + (round(float(pos), 6), tuple(color)) + for pos, color in ticks + ) + return (tick_key, round(float(clim[0]), 6), round(float(clim[1]), 6)) + + def apply_primary_lut_from_main(self): win = getattr(self._gui, '_renderer3d_window', None) if win is None or not win.isVisible(): return - win._syncing_cell_id_from_main = True - try: - win.set_active_cell_id(int(cell_id), sync_main_gui=False) - finally: - win._syncing_cell_id_from_main = False + if getattr(win, '_segmentation_only', False): + return + if not win.lut_items: + return + gradient_state, clim = self.get_primary_image_lut_state() + cache_key = self._primary_lut_cache_key(gradient_state, clim) + if getattr(win, '_cached_primary_lut_key', None) == cache_key: + return + win._cached_primary_lut_key = cache_key + win.apply_primary_lut_from_main(gradient_state, clim) + + def apply_cell_id_from_renderer(self, cell_id: int) -> None: + return + + def on_cell_id_changed_from_main(self, cell_id: int) -> None: + return class guiWin(QMainWindow, whitelist.WhitelistGUIElements, @@ -833,10 +840,7 @@ def dropEvent(self, event): self.openFile(file_path=file_path) def changeEvent(self, event): - try: - self.delObjToolAction.setChecked(False) - except Exception as err: - return + pass def leaveEvent(self, event): if self.slideshowWin is not None: @@ -910,25 +914,9 @@ def isPanImageClick(self, mouseEvent, modifiers): return modifiers == Qt.AltModifier and left_click def middleClickText(self): - if self.delObjAction is None and is_mac: + if is_mac: return 'Command + Left Click' - - if self.delObjAction is None: - return 'Middle Click' - - delObjKeySequence, delObjQtButton = self.delObjAction - - if delObjQtButton == Qt.MouseButton.LeftButton: - buttonName = 'Left click' - elif delObjQtButton == Qt.MouseButton.RightButton: - buttonName = 'Right click' - else: - buttonName = 'Middle click' - - if delObjKeySequence is None: - return buttonName - - return f'{delObjKeySequence.toString()} + {buttonName}' + return 'Middle Click' def isDefaultMiddleClick(self, mouseEvent, modifiers): if is_mac: @@ -942,24 +930,7 @@ def isDefaultMiddleClick(self, mouseEvent, modifiers): return middle_click def isMiddleClick(self, mouseEvent, modifiers): - if self.delObjAction is None: - return self.isDefaultMiddleClick(mouseEvent, modifiers) - - delObjKeySequence, delObjQtButton = self.delObjAction - if delObjKeySequence is None: - # Setting only middle click on mac is allowed, however the - # delObjKeySequence is None and the tool button is never checked - isDelObjectActive = True - else: - isDelObjectActive = self.delObjToolAction.isChecked() - - mouseEventButton = self.changeRightClickToLeftOnMac(mouseEvent) - - middle_click = ( - mouseEventButton == delObjQtButton and isDelObjectActive - ) - - return middle_click + return self.isDefaultMiddleClick(mouseEvent, modifiers) def gui_createCursors(self): pixmap = QPixmap(":wand_cursor.svg") @@ -1334,7 +1305,7 @@ def gui_createToolBars(self): self.eraserButton.setIcon(QIcon(":eraser.svg")) self.eraserButton.setCheckable(True) editToolBar.addWidget(self.eraserButton) - self.eraserButton.keyPressShortcut = Qt.Key_X + self.eraserButton.keyPressShortcut = Qt.Key_E self.widgetsWithShortcut['Eraser'] = self.eraserButton self.checkableButtons.append(self.eraserButton) self.LeftClickButtons.append(self.eraserButton) @@ -1343,7 +1314,7 @@ def gui_createToolBars(self): self.curvToolButton = QToolButton(self) self.curvToolButton.setIcon(QIcon(":curvature-tool.svg")) self.curvToolButton.setCheckable(True) - self.curvToolButton.setShortcut('C') + self.curvToolButton.keyPressShortcut = Qt.Key_P self.curvToolButton.action = editToolBar.addWidget(self.curvToolButton) self.LeftClickButtons.append(self.curvToolButton) # self.functionsNotTested3D.append(self.curvToolButton) @@ -1354,27 +1325,20 @@ def gui_createToolBars(self): self.wandToolButton = QToolButton(self) self.wandToolButton.setIcon(QIcon(":magic_wand.svg")) self.wandToolButton.setCheckable(True) - self.wandToolButton.setShortcut('Ctrl+D') self.wandToolButton.action = editToolBar.addWidget(self.wandToolButton) self.LeftClickButtons.append(self.wandToolButton) self.checkableButtons.append(self.eraserButton) - self.widgetsWithShortcut['Magic wand'] = self.wandToolButton self.magicPromptsToolButton = QToolButton(self) self.magicPromptsToolButton.setIcon(QIcon(":magic-prompts.svg")) self.magicPromptsToolButton.setCheckable(True) - self.magicPromptsToolButton.setShortcut('W') self.magicPromptsToolButton.action = editToolBar.addWidget( self.magicPromptsToolButton ) - self.widgetsWithShortcut['Magic prompts'] = self.magicPromptsToolButton self.drawClearRegionButton = QToolButton(self) self.drawClearRegionButton.setCheckable(True) self.drawClearRegionButton.setIcon(QIcon(":clear_freehand_region.svg")) - self.widgetsWithShortcut['Clear freehand region'] = ( - self.drawClearRegionButton - ) self.toolsActiveInProj3Dsegm.add(self.drawClearRegionButton) self.checkableButtons.append(self.drawClearRegionButton) @@ -1384,56 +1348,37 @@ def gui_createToolBars(self): self.drawClearRegionButton ) - self.widgetsWithShortcut['Annotate mother/daughter pairing'] = ( - self.assignBudMothButton - ) - self.widgetsWithShortcut['Annotate unknown history'] = ( - self.setIsHistoryKnownButton - ) - self.copyLostObjButton = QToolButton(self) self.copyLostObjButton.setIcon(QIcon(":copyContour.svg")) self.copyLostObjButton.setCheckable(True) - self.copyLostObjButton.setShortcut('V') self.copyLostObjButton.action = editToolBar.addWidget( self.copyLostObjButton ) self.checkableButtons.append(self.copyLostObjButton) self.checkableQButtonsGroup.addButton(self.copyLostObjButton) - self.widgetsWithShortcut['Copy lost object contour'] = ( - self.copyLostObjButton - ) self.functionsNotTested3D.append(self.copyLostObjButton) self.labelRoiButton = widgets.rightClickToolButton(parent=self) self.labelRoiButton.setIcon(QIcon(":label_roi.svg")) self.labelRoiButton.setCheckable(True) - self.labelRoiButton.setShortcut('L') self.labelRoiButton.action = editToolBar.addWidget(self.labelRoiButton) self.LeftClickButtons.append(self.labelRoiButton) self.checkableButtons.append(self.labelRoiButton) self.checkableQButtonsGroup.addButton(self.labelRoiButton) - self.widgetsWithShortcut['Label ROI'] = self.labelRoiButton # self.functionsNotTested3D.append(self.labelRoiButton) self.manualAnnotPastButton = QToolButton(self) self.manualAnnotPastButton.setIcon(QIcon(":lock_id_annotate_future.svg")) self.manualAnnotPastButton.setCheckable(True) - self.manualAnnotPastButton.setShortcut('Y') self.manualAnnotPastButton.action = editToolBar.addWidget( self.manualAnnotPastButton ) self.checkableButtons.append(self.manualAnnotPastButton) - self.widgetsWithShortcut['Lock ID and annotate single object'] = ( - self.manualAnnotPastButton - ) self.functionsNotTested3D.append(self.manualAnnotPastButton) self.manulAnnotToolButtons.add(self.manualAnnotPastButton) self.segmentToolAction = QAction('Segment with last used model', self) self.segmentToolAction.setIcon(QIcon(":segment.svg")) - self.segmentToolAction.setShortcut('R') - self.widgetsWithShortcut['Repeat segmentation'] = self.segmentToolAction editToolBar.addAction(self.segmentToolAction) self.segForLostIDsButton = QToolButton(self) @@ -1451,11 +1396,9 @@ def gui_createToolBars(self): self.manualBackgroundButton = QToolButton(self) self.manualBackgroundButton.setIcon(QIcon(":manual_background.svg")) self.manualBackgroundButton.setCheckable(True) - self.manualBackgroundButton.setShortcut('G') self.LeftClickButtons.append(self.manualBackgroundButton) self.checkableButtons.append(self.manualBackgroundButton) self.checkableQButtonsGroup.addButton(self.manualBackgroundButton) - self.widgetsWithShortcut['Manual background'] = self.manualBackgroundButton self.manualBackgroundAction = editToolBar.addWidget( self.manualBackgroundButton @@ -1466,92 +1409,88 @@ def gui_createToolBars(self): 'Select a segmentation file and delete all objects on the background', self ) - self.delObjsOutSegmMaskAction.setShortcut('I') - self.widgetsWithShortcut['Delete all objects outside segm'] = ( - self.delObjsOutSegmMaskAction - ) editToolBar.addAction(self.delObjsOutSegmMaskAction) self.hullContToolButton = QToolButton(self) self.hullContToolButton.setIcon(QIcon(":hull.svg")) self.hullContToolButton.setCheckable(True) - self.hullContToolButton.setShortcut('O') self.hullContToolButton.action = editToolBar.addWidget(self.hullContToolButton) self.checkableButtons.append(self.hullContToolButton) self.checkableQButtonsGroup.addButton(self.hullContToolButton) self.functionsNotTested3D.append(self.hullContToolButton) - self.widgetsWithShortcut['Hull contour'] = self.hullContToolButton self.fillHolesToolButton = QToolButton(self) self.fillHolesToolButton.setIcon(QIcon(":fill_holes.svg")) self.fillHolesToolButton.setCheckable(True) - self.fillHolesToolButton.setShortcut('F') self.fillHolesToolButton.action = editToolBar.addWidget( self.fillHolesToolButton ) self.checkableButtons.append(self.fillHolesToolButton) self.checkableQButtonsGroup.addButton(self.fillHolesToolButton) self.functionsNotTested3D.append(self.fillHolesToolButton) - self.widgetsWithShortcut['Fill holes'] = self.fillHolesToolButton self.moveLabelToolButton = QToolButton(self) self.moveLabelToolButton.setIcon(QIcon(":moveLabel.svg")) self.moveLabelToolButton.setCheckable(True) - self.moveLabelToolButton.setShortcut('P') self.moveLabelToolButton.action = editToolBar.addWidget(self.moveLabelToolButton) self.checkableButtons.append(self.moveLabelToolButton) self.checkableQButtonsGroup.addButton(self.moveLabelToolButton) - self.widgetsWithShortcut['Move label'] = self.moveLabelToolButton self.expandLabelToolButton = QToolButton(self) self.expandLabelToolButton.setIcon(QIcon(":expandLabel.svg")) self.expandLabelToolButton.setCheckable(True) - self.expandLabelToolButton.setShortcut('E') self.expandLabelToolButton.action = editToolBar.addWidget(self.expandLabelToolButton) self.expandLabelToolButton.hide() self.checkableButtons.append(self.expandLabelToolButton) self.LeftClickButtons.append(self.expandLabelToolButton) self.checkableQButtonsGroup.addButton(self.expandLabelToolButton) - self.widgetsWithShortcut['Expand/shrink label'] = self.expandLabelToolButton + + self.deleteIDButton = QToolButton(self) + self.deleteIDButton.setIcon(QIcon(":del_obj_click.svg")) + self.deleteIDButton.setCheckable(True) + self.deleteIDButton.keyPressShortcut = Qt.Key_X + editToolBar.addWidget(self.deleteIDButton) + self.checkableButtons.append(self.deleteIDButton) + self.checkableQButtonsGroup.addButton(self.deleteIDButton) + self.widgetsWithShortcut['Delete ID'] = self.deleteIDButton self.editIDbutton = QToolButton(self) self.editIDbutton.setIcon(QIcon(":edit-id.svg")) self.editIDbutton.setCheckable(True) - self.editIDbutton.setShortcut('N') + self.editIDbutton.keyPressShortcut = Qt.Key_I editToolBar.addWidget(self.editIDbutton) self.checkableButtons.append(self.editIDbutton) self.checkableQButtonsGroup.addButton(self.editIDbutton) self.widgetsWithShortcut['Edit ID'] = self.editIDbutton + self.exclusiveEditTools = ( + self.brushButton, + self.eraserButton, + self.curvToolButton, + self.deleteIDButton, + self.editIDbutton, + ) + self.separateBudButton = QToolButton(self) self.separateBudButton.setIcon(QIcon(":separate-bud.svg")) self.separateBudButton.setCheckable(True) - self.separateBudButton.setShortcut('S') self.separateBudButton.action = editToolBar.addWidget(self.separateBudButton) self.checkableButtons.append(self.separateBudButton) self.checkableQButtonsGroup.addButton(self.separateBudButton) - # self.functionsNotTested3D.append(self.separateBudButton) - self.widgetsWithShortcut['Separate objects'] = self.separateBudButton self.mergeIDsButton = QToolButton(self) self.mergeIDsButton.setIcon(QIcon(":merge-IDs.svg")) self.mergeIDsButton.setCheckable(True) - self.mergeIDsButton.setShortcut('M') self.mergeIDsButton.action = editToolBar.addWidget(self.mergeIDsButton) self.checkableButtons.append(self.mergeIDsButton) self.checkableQButtonsGroup.addButton(self.mergeIDsButton) - # self.functionsNotTested3D.append(self.mergeIDsButton) - self.widgetsWithShortcut['Merge objects'] = self.mergeIDsButton self.keepIDsButton = QToolButton(self) self.keepIDsButton.setIcon(QIcon(":keep_objects.svg")) self.keepIDsButton.setCheckable(True) self.keepIDsButton.action = editToolBar.addWidget(self.keepIDsButton) - self.keepIDsButton.setShortcut('K') self.checkableButtons.append(self.keepIDsButton) self.checkableQButtonsGroup.addButton(self.keepIDsButton) - # self.functionsNotTested3D.append(self.keepIDsButton) - self.widgetsWithShortcut['Select objects to keep'] = self.keepIDsButton self.whitelistIDsButton = QToolButton(self) self.whitelistIDsButton.setIcon(QIcon(":whitelist.svg")) @@ -1559,14 +1498,9 @@ def gui_createToolBars(self): self.whitelistIDsButton.action = editToolBar.addWidget( self.whitelistIDsButton ) - self.whitelistIDsButton.setShortcut('Ctrl+K') self.checkableButtons.append(self.whitelistIDsButton) self.checkableQButtonsGroup.addButton(self.whitelistIDsButton) self.LeftClickButtons.append(self.whitelistIDsButton) - # self.functionsNotTested3D.append(self.whitelistIDsButton) - self.widgetsWithShortcut['Select objects to add to a tracking whitelist'] = ( - self.whitelistIDsButton - ) self.binCellButton = QToolButton(self) self.binCellButton.setIcon(QIcon(":bin.svg")) @@ -1580,20 +1514,16 @@ def gui_createToolBars(self): self.manualTrackingButton = QToolButton(self) self.manualTrackingButton.setIcon(QIcon(":manual_tracking.svg")) self.manualTrackingButton.setCheckable(True) - self.manualTrackingButton.setShortcut('T') self.checkableQButtonsGroup.addButton(self.manualTrackingButton) self.checkableButtons.append(self.manualTrackingButton) - self.widgetsWithShortcut['Manual tracking'] = self.manualTrackingButton self.ripCellButton = QToolButton(self) self.ripCellButton.setIcon(QIcon(":rip.svg")) self.ripCellButton.setCheckable(True) - self.ripCellButton.setShortcut('D') self.ripCellButton.action = editToolBar.addWidget(self.ripCellButton) self.checkableButtons.append(self.ripCellButton) self.checkableQButtonsGroup.addButton(self.ripCellButton) self.functionsNotTested3D.append(self.ripCellButton) - self.widgetsWithShortcut['Annotate cell as dead'] = self.ripCellButton editToolBar.addAction(self.addDelRoiAction) # editToolBar.addAction(self.addDelPolyLineRoiAction) @@ -1654,37 +1584,27 @@ def gui_createToolBars(self): self.findNextMotherButton.setCheckable(True) self.editLin_TreeBar.addWidget(self.findNextMotherButton) self.editLin_TreeGroup.addButton(self.findNextMotherButton) - self.findNextMotherButton.setShortcut('F') - self.widgetsWithShortcut['Find next potential mother (lineage tree)'] = self.findNextMotherButton self.unknownLineageButton = QToolButton(self) self.unknownLineageButton.setIcon(QIcon(":history.svg")) self.unknownLineageButton.setCheckable(True) self.editLin_TreeBar.addWidget(self.unknownLineageButton) self.editLin_TreeGroup.addButton(self.unknownLineageButton) - self.unknownLineageButton.setShortcut('U') - self.widgetsWithShortcut['Unknown lineage (lineage tree)'] = self.unknownLineageButton self.noToolLinTreeButton = QToolButton(self) self.noToolLinTreeButton.setIcon(QIcon(":arrow_cursor.svg")) self.noToolLinTreeButton.setCheckable(True) self.editLin_TreeBar.addWidget(self.noToolLinTreeButton) self.editLin_TreeGroup.addButton(self.noToolLinTreeButton) - self.noToolLinTreeButton.setShortcut('N') - self.widgetsWithShortcut['No tool (lineage tree)'] = self.noToolLinTreeButton self.propagateLinTreeButton = QToolButton(self) self.propagateLinTreeButton.setIcon(QIcon(":compute.svg")) self.editLin_TreeBar.addWidget(self.propagateLinTreeButton) - self.propagateLinTreeButton.setShortcut('P') - self.widgetsWithShortcut['Propagate (lineage tree)'] = self.propagateLinTreeButton self.propagateLinTreeButton.clicked.connect(self.propagateLinTreeAction) self.viewLinTreeInfoButton = QToolButton(self) self.viewLinTreeInfoButton.setIcon(QIcon(":addCustomAnnotation.svg")) self.editLin_TreeBar.addWidget(self.viewLinTreeInfoButton) - self.viewLinTreeInfoButton.setShortcut('S') - self.widgetsWithShortcut['View Changes (lineage tree)'] = self.viewLinTreeInfoButton self.viewLinTreeInfoButton.clicked.connect(self.viewLinTreeInfoAction) @@ -2459,7 +2379,7 @@ def gui_createControlsToolbar(self): "Copy lost object controls", self ) for name, action in self.copyLostObjToolbar.widgetsWithShortcut.items(): - self.widgetsWithShortcut[name] = action + pass # toolbar shortcuts not exposed in shortcut editor self.copyLostObjToolbar.sigCopyAllObjects.connect( self.copyAllLostObjects @@ -2487,7 +2407,7 @@ def gui_createControlsToolbar(self): addNewIDToggleState, self ) for name, action in self.whitelistIDsToolbar.widgetsWithShortcut.items(): - self.widgetsWithShortcut[name] = action + pass self.addToolBar(Qt.TopToolBarArea, self.whitelistIDsToolbar) self.whitelistIDsToolbar.setVisible(False) @@ -2495,7 +2415,7 @@ def gui_createControlsToolbar(self): self.magicPromptsToolbar = widgets.MagicPromptsToolbar(self) for name, action in self.magicPromptsToolbar.widgetsWithShortcut.items(): - self.widgetsWithShortcut[name] = action + pass self.magicPromptsToolbar.sigComputeOnZoom.connect( self.magicPromptsComputeOnZoomTriggered @@ -2538,21 +2458,9 @@ def gui_createControlsToolbar(self): self.promptSegmentPointsLayerToolbar ) - # Second level toolbar + # Second level toolbar (legacy placeholder, kept hidden) secondLevelToolbar = widgets.ToolBar("Second level toolbar", self) self.addToolBar(Qt.TopToolBarArea, secondLevelToolbar) - self.delObjToolAction = QAction(self) - self.delObjToolAction.setIcon(QIcon(":del_obj_click.svg")) - self.delObjToolAction.setCheckable(True) - self.delObjToolAction.setToolTip( - 'Customisable delete object action\n\n' - 'Go to the `Settings --> Customise keyboard shortcuts...` menu ' - 'on the top menubar\n' - 'to customise the action required to delete ' - 'an object with a click.\n\n' - 'When working with 3D segmentations, to delete only the z-slice mask, hold "Shift" while clicking.' - ) - secondLevelToolbar.addAction(self.delObjToolAction) secondLevelToolbar.setMovable(False) self.secondLevelToolbar = secondLevelToolbar self.secondLevelToolbar.setVisible(False) @@ -2839,13 +2747,9 @@ def gui_createActions(self): self.zoomRectButton = QToolButton(self) self.zoomRectButton.setIcon(QIcon(":zoom_rect.svg")) self.zoomRectButton.setCheckable(True) - self.zoomRectButton.setShortcut('Shift+Z') self.LeftClickButtons.append(self.zoomRectButton) self.checkableButtons.append(self.zoomRectButton) self.checkableQButtonsGroup.addButton(self.zoomRectButton) - self.widgetsWithShortcut['Zoom to rectangular area'] = ( - self.zoomRectButton - ) self.skipToNewIdAction = QAction(self) self.skipToNewIdAction.setIcon(QIcon(":skip_forward_new_ID.svg")) @@ -2902,8 +2806,6 @@ def gui_createActions(self): self.repeatTrackingAction = QAction( QIcon(":repeat-tracking.svg"), "Repeat tracking", self ) - self.repeatTrackingAction.setShortcut('Shift+T') - self.widgetsWithShortcut['Repeat Tracking'] = self.repeatTrackingAction self.editRtTrackerParamsAction = QAction( @@ -3564,6 +3466,8 @@ def gui_connectEditActions(self): self.brushButton.toggled.connect(self.Brush_cb) self.eraserButton.toggled.connect(self.Eraser_cb) self.curvToolButton.toggled.connect(self.curvTool_cb) + self.editIDbutton.toggled.connect(self.editID_cb) + self.deleteIDButton.toggled.connect(self.deleteID_cb) self.wandToolButton.toggled.connect(self.wand_cb) self.labelRoiButton.toggled.connect(self.labelRoi_cb) self.magicPromptsToolButton.toggled.connect(self.magicPrompts_cb) @@ -5122,8 +5026,6 @@ def gui_initImg1BottomWidgets(self): def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): modifiers = QGuiApplication.keyboardModifiers() alt = modifiers == Qt.AltModifier - shift = modifiers == Qt.ShiftModifier - shift_regardless = bool(modifiers & Qt.ShiftModifier) isMod = alt posData = self.data[self.pos_i] mode = str(self.modeComboBox.currentText()) @@ -5136,10 +5038,12 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): separateON = self.separateBudButton.isChecked() self.typingEditID = False - # Drag image if neither brush or eraser are On pressed + # Drag image if no left-click edit tool is active dragImg = ( - left_click and not eraserON and not - brushON and not middle_click + left_click and not eraserON and not brushON + and not self.deleteIDButton.isChecked() + and not middle_click + and not self._usesImg2MousePressHandler() ) if isPanImageClick: dragImg = True @@ -5195,7 +5099,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): editInViewerMode = ( (is_right_click_action_ON or is_right_click_custom_ON) - and (right_click or middle_click) and mode=='Viewer' + and left_click and mode=='Viewer' ) if editInViewerMode: @@ -5233,83 +5137,14 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): # separate ON canDelete = mode == 'Segmentation and Tracking' or self.isSnapshot - # Delete ID (set to 0) - if middle_click and canDelete: - t0 = time.perf_counter() - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - delID = self.get_2Dlab(posData.lab)[ydata, xdata] - if delID == 0: - nearest_ID = core.nearest_nonzero_2D( - self.get_2Dlab(posData.lab), y, x - ) - delID_prompt = apps.QLineEditDialog( - title='Clicked on background', - msg='You clicked on the background.
' - 'Enter here ID(s) that you want to delete

' - 'You can enter multiple IDs separated by comma', - parent=self, - allowedValues=posData.IDs, - defaultTxt=str(nearest_ID), - allowList=True, - isInteger=True - ) - delID_prompt.exec_() - if delID_prompt.cancel: - return - delIDs = delID_prompt.EntryID - else: - delIDs = [delID] - - # Ask to propagate change to all future visited frames - key = 'Delete ID' - askAction = self.askHowFutureFramesActions[key] - doNotShow = not askAction.isChecked() - (UndoFutFrames, applyFutFrames, endFrame_i, - doNotShowAgain) = self.propagateChange( - delIDs, key, doNotShow, - posData.UndoFutFrames_DelID, posData.applyFutFrames_DelID - ) - - if UndoFutFrames is None: - return - - # Store undo state before modifying stuff - self.storeUndoRedoStates(UndoFutFrames) - posData.doNotShowAgain_DelID = doNotShowAgain - posData.UndoFutFrames_DelID = UndoFutFrames - posData.applyFutFrames_DelID = applyFutFrames - includeUnvisited = posData.includeUnvisitedInfo['Delete ID'] - - delID_mask = self.deleteIDmiddleClick( - delIDs, applyFutFrames, includeUnvisited, shift=shift_regardless - ) - if delID_mask.ndim == 3: - delID_mask = delID_mask[self.z_lab()] - - if self.isSnapshot: - self.fixCcaDfAfterEdit('Delete ID') - else: - self.warnEditingWithCca_df('Delete ID', update_images=False) - - self.setImageImg2() - delROIsIDs = self.setAllTextAnnotations() - self.setAllContoursImages(delROIsIDs=delROIsIDs, compute=False) + if ( + left_click and self.deleteIDButton.isChecked() and canDelete + ): + self._handleDeleteIDClick(event) + return - how = self.drawIDsContComboBox.currentText() - if how.find('overlay segm. masks') != -1: - self.labelsLayerImg1.image[delID_mask] = 0 - self.labelsLayerImg1.setImage(self.labelsLayerImg1.image) - - how_ax2 = self.getAnnotateHowRightImage() - if how_ax2.find('overlay segm. masks') != -1: - self.labelsLayerRightImg.image[delID_mask] = 0 - self.labelsLayerRightImg.setImage(self.labelsLayerRightImg.image) - - self.highlightLostNew() - # Separate bud or objects with same ID - elif right_click and separateON: + elif left_click and separateON: x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5336,22 +5171,19 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.storeUndoRedoStates(False) max_ID = max(posData.IDs, default=1) - if self.isSegm3D and not shift: + if self.isSegm3D: z = self.zSliceScrollBar.sliderPosition() posData.lab, splittedIDs = measure.separate_with_label( posData.lab, posData.rp, [ID], max_ID, click_coords_list=[(z, ydata, xdata)] ) success = True - # self.set_2Dlab(lab2D) - elif not shift: + else: result = core.split_along_convexity_defects( ID, self.get_2Dlab(posData.lab), max_ID ) lab2D, success, splittedIDs = result self.set_2Dlab(lab2D) - else: - success = False # If automatic bud separation was not successfull call manual one if not success: @@ -5401,7 +5233,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.separateBudButton.setChecked(False) # Fill holes - elif right_click and self.fillHolesToolButton.isChecked(): + elif left_click and self.fillHolesToolButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5440,7 +5272,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.fillHolesToolButton.setChecked(False) # Hull contour - elif right_click and self.hullContToolButton.isChecked(): + elif left_click and self.hullContToolButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5479,7 +5311,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.hullContToolButton.setChecked(False) # Move label - elif right_click and self.moveLabelToolButton.isChecked(): + elif left_click and self.moveLabelToolButton.isChecked(): # Store undo state before modifying stuff self.storeUndoRedoStates(False) @@ -5487,7 +5319,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.startMovingLabel(x, y) # Fill holes - elif right_click and self.fillHolesToolButton.isChecked(): + elif left_click and self.fillHolesToolButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5511,7 +5343,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): ID = clickedBkgrID.EntryID # Merge IDs - elif right_click and self.mergeIDsButton.isChecked(): + elif left_click and self.mergeIDsButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5544,7 +5376,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.clickObjYc, self.clickObjXc = int(yc), int(xc) # Edit ID - elif right_click and self.editIDbutton.isChecked(): + elif left_click and self.editIDbutton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5605,11 +5437,10 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.applyEditID( ID, currentIDs, editID.how, x, y, - shift=shift, doPropagateUnvisited=editID.doPropagateFutureFrames ) - elif (right_click or left_click) and self.keepIDsButton.isChecked(): + elif left_click and self.keepIDsButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5641,7 +5472,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.updateTempLayerKeepIDs() # Annotate cell as removed from the analysis - elif right_click and self.binCellButton.isChecked(): + elif left_click and self.binCellButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -5722,7 +5553,7 @@ def gui_mousePressEventImg2(self, event: QGraphicsSceneMouseEvent): self.binCellButton.setChecked(False) # Annotate cell as dead - elif right_click and self.ripCellButton.isChecked(): + elif left_click and self.ripCellButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) ID = self.get_2Dlab(posData.lab)[ydata, xdata] @@ -6582,6 +6413,9 @@ def gui_setCursor(self, modifiers, event): setEditIDCursor = ( self.editIDbutton.isChecked() and not event.isExit() ) + setDeleteIDCursor = ( + self.deleteIDButton.isChecked() and not event.isExit() + ) magicPromptsON = self.magicPromptsToolButton.isChecked() pointsLayerON = self.togglePointsLayerAction.isChecked() addPointsByClickingButton = self.buttonAddPointsByClickingActive() @@ -6625,6 +6459,11 @@ def gui_setCursor(self, modifiers, event): self.app.setOverrideCursor(Qt.CrossCursor) else: self.app.restoreOverrideCursor() + elif setDeleteIDCursor and overrideCursor is None: + if shift: + self.app.setOverrideCursor(Qt.CrossCursor) + else: + self.app.setOverrideCursor(Qt.PointingHandCursor) return { 'setBrushCursor': setBrushCursor, @@ -6642,7 +6481,8 @@ def gui_setCursor(self, modifiers, event): 'setManualBackgroundCursor': setManualBackgroundCursor, 'setAddPointCursor': setAddPointCursor, 'setZoomRectCursor': setZoomRectCursor, - 'setEditIDCursor': setEditIDCursor + 'setEditIDCursor': setEditIDCursor, + 'setDeleteIDCursor': setDeleteIDCursor } def warnAddingPointWithExistingId(self, point_id, table_endname=''): @@ -6982,15 +6822,21 @@ def gui_mouseReleaseEventImg1(self, event): self.timestamp.clicked = False return - sendRightClickImg2 = ( + sendEditReleaseImg2 = ( (mode=='Segmentation and Tracking' or self.isSnapshot) - and right_click + and event.button() == Qt.MouseButton.LeftButton and not alt + and ( + self.mergeIDsButton.isChecked() + or ( + self.isMovingLabel + and self.moveLabelToolButton.isChecked() + ) + ) ) - if sendRightClickImg2: - # Allow right-click actions on both images + if sendEditReleaseImg2: self.gui_mouseReleaseEventImg2(event) - # Right-click curvature tool mouse release + # Curvature auto-contour mouse release if self.isRightClickDragImg1 and self.curvToolButton.isChecked(): self.isRightClickDragImg1 = False try: @@ -7381,6 +7227,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): curvToolON = self.curvToolButton.isChecked() histON = self.setIsHistoryKnownButton.isChecked() eraserON = self.eraserButton.isChecked() + deleteIDON = self.deleteIDButton.isChecked() rulerON = self.rulerButton.isChecked() wandON = self.wandToolButton.isChecked() and not isPanImageClick polyLineRoiON = self.addDelPolyLineRoiButton.isChecked() @@ -7401,36 +7248,10 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): drawClearRegionON = self.drawClearRegionButton.isChecked() zoomRectON = self.zoomRectButton.isChecked() - # Check if right-click on segment of polyline roi to add segment - segments = self.gui_getHoveredSegmentsPolyLineRoi() - if len(segments) == 1 and right_click: - seg = segments[0] - seg.roi.segmentClicked(seg, event) - return - - # Check if right-click on handle of polyline roi to remove it - handles = self.gui_getHoveredHandlesPolyLineRoi() - if len(handles) == 1 and right_click: - handle = handles[0] - handle.roi.removeHandle(handle) - return - # Check if click on ROI isClickOnDelRoi = self.gui_clickedDelRoi(event, left_click, right_click) if isClickOnDelRoi: return - - dragImgLeft = ( - left_click and not brushON and not histON - and not curvToolON and not eraserON and not rulerON - and not wandON and not polyLineRoiON and not labelRoiON - and not middle_click and not keepObjON and not separateON - and not manualBackgroundON and not drawClearRegionON - and addPointsByClickingButton is None and not whitelistIDsON - and not zoomRectON - ) - if isPanImageClick: - dragImgLeft = True is_right_click_custom_ON = any([ b.isChecked() for b in self.customAnnotDict.keys() @@ -7445,48 +7266,70 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): and not separateON ) - # In timelapse mode division can be annotated if isCcaMode and right-click - # while in snapshot mode with Ctrl+right-click + # In timelapse mode division can be annotated with left-click in CCA mode isAnnotateDivision = ( - (right_click and isCcaMode and canAnnotateDivision) - or (right_click and ctrl and self.isSnapshot) + left_click and canAnnotateDivision + and (isCcaMode or self.isSnapshot) ) - isCustomAnnot = ( - (right_click or dragImgLeft) - and (isCustomAnnotMode or self.isSnapshot) + isCustomAnnotModeActive = ( + (isCustomAnnotMode or self.isSnapshot) and self.customAnnotButton is not None ) + + dragImgLeft = ( + left_click and not brushON and not histON + and not curvToolON and not eraserON and not rulerON + and not wandON and not polyLineRoiON and not labelRoiON + and not middle_click and not keepObjON and not separateON + and not manualBackgroundON and not drawClearRegionON + and addPointsByClickingButton is None and not whitelistIDsON + and not zoomRectON and not deleteIDON + and not self.fillHolesToolButton.isChecked() + and not self.hullContToolButton.isChecked() + and not self.moveLabelToolButton.isChecked() + and not self.mergeIDsButton.isChecked() + and not self.editIDbutton.isChecked() + and not self.binCellButton.isChecked() + and not self.ripCellButton.isChecked() + and not copyContourON + and not self.manualTrackingButton.isChecked() + and not self.assignBudMothButton.isChecked() + and not self.setIsHistoryKnownButton.isChecked() + and not findNextMotherButtonON and not unknownLineageButtonON + and not isAnnotateDivision + and not (left_click and isCustomAnnotModeActive) + ) + if isPanImageClick: + dragImgLeft = True + + isCustomAnnot = ( + (left_click or dragImgLeft) + and isCustomAnnotModeActive + ) is_right_click_action_ON = any([ b.isChecked() for b in self.checkableQButtonsGroup.buttons() ]) - isOnlyRightClick = ( - right_click and canAnnotateDivision and not isAnnotateDivision - and not isMod and not is_right_click_action_ON - and not is_right_click_custom_ON and not copyContourON + showImg1ContextMenu = ( + right_click and not isMod and not is_right_click_action_ON + and not is_right_click_custom_ON and not copyContourON and not findNextMotherButtonON and not unknownLineageButtonON - and not middle_click + and not middle_click and not isAnnotateDivision + and not isPanImageClick ) - - if isOnlyRightClick: - # Start timer or check if it is a double-right-click - if self.countRightClicks == 0: - self.isDoubleRightClick = False - self.countRightClicks = 1 - self.doubleRightClickTimeElapsed = False - screenPos = event.screenPos() - self._img1_click_xy = (screenPos.x(), screenPos.y()) - QTimer.singleShot(400, self.doubleRightClickTimerCallBack) - return - elif ( - self.countRightClicks == 1 - and not self.doubleRightClickTimeElapsed - ): - self.isDoubleRightClick = True - self.countRightClicks = 0 - self.editIDbutton.setChecked(True) + if showImg1ContextMenu: + screenPos = event.screenPos() + self.gui_imgGradShowContextMenu(screenPos.x(), screenPos.y()) + return + + if ( + left_click and deleteIDON + and (mode == 'Segmentation and Tracking' or self.isSnapshot) + ): + self._handleDeleteIDClick(event) + return # Left click actions canCurv = ( @@ -7502,7 +7345,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): and not dragImgLeft and not eraserON and not wandON and not labelRoiON and not manualBackgroundON and addPointsByClickingButton is None and not drawClearRegionON - and not magicPromptsON and not zoomRectON + and not magicPromptsON and not zoomRectON and not deleteIDON ) canErase = ( eraserON and not curvToolON and not rulerON @@ -7510,7 +7353,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): and not polyLineRoiON and not labelRoiON and addPointsByClickingButton is None and not manualBackgroundON and not drawClearRegionON - and not magicPromptsON and not zoomRectON + and not magicPromptsON and not zoomRectON and not deleteIDON ) canRuler = ( rulerON and not curvToolON and not brushON @@ -7620,12 +7463,10 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): event.ignore() return - # Allow right-click or middle-click actions on both images + # Forward left-click edit-tool actions to img2 handler (both images) eventOnImg2 = ( - ( - right_click or (middle_click and not canAddPoint) - # or (left_click and separateON) - ) + left_click + and self._usesImg2MousePressHandler() and (mode=='Segmentation and Tracking' or self.isSnapshot) and not isAnnotateDivision and not manualBackgroundON ) @@ -7685,7 +7526,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): else: point_id = self.getAddedPointId( magicPromptsON, addPointsByClickingButton, - right_click, left_click, middle_click + left_click, middle_click ) if point_id is None: return @@ -7849,27 +7690,13 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.whitelistUpdateTempLayer() - elif right_click and copyContourON: + elif left_click and copyContourON: hoverLostID = self.ax1_lostObjScatterItem.hoverLostID self.copyLostObjectMask(hoverLostID) self.update_rp() self.updateAllImages() self.store_data() - elif right_click and canCurv: - # Draw manually assisted auto contour - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - Y, X = self.get_2Dlab(posData.lab).shape - - self.autoCont_x0 = xdata - self.autoCont_y0 = ydata - self.xxA_autoCont, self.yyA_autoCont = [], [] - self.curvAnchors.addPoints([x], [y]) - img = self.getDisplayedImg1() - self.autoContObjMask = np.zeros(img.shape, np.uint8) - self.isRightClickDragImg1 = True - elif left_click and canCurv: # Draw manual spline x, y = event.pos().x(), event.pos().y() @@ -7959,7 +7786,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.setTempBrushMaskFromWand(self.flood_mask, init=True) self.isMouseDragImg1 = True - elif right_click and self.manualTrackingButton.isChecked(): + elif left_click and self.manualTrackingButton.isChecked(): x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) manualTrackID = self.manualTrackingToolbar.spinboxID.value() @@ -7998,19 +7825,6 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.update_rp() self.updateAllImages() - elif right_click and manualBackgroundON: - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - - delID = posData.manualBackgroundLab[ydata, xdata] - if delID == 0: - return - - self.clearManualBackgroundObject(delID) - textItem = self.manualBackgroundTextItems.pop(delID) - self.ax1.removeItem(textItem) - self.setManualBackgroundImage() - elif left_click and canAddManualBackgroundObj: x, y = event.pos().x(), event.pos().y() @@ -8019,11 +7833,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.setManualBackgrounNextID() # Label ROI mouse press - elif (left_click or right_click) and canLabelRoi: - if right_click: - # Force model initialization on mouse release - self.labelRoiModel = None - + elif left_click and canLabelRoi: x, y = event.pos().x(), event.pos().y() xdata, ydata = int(x), int(y) @@ -8072,7 +7882,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.undoBudMothAssignment(ID) # Assign bud to mother (mouse down on bud) - elif right_click and self.assignBudMothButton.isChecked(): + elif left_click and self.assignBudMothButton.isChecked(): if self.clickedOnBud: # NOTE: self.clickedOnBud is set to False when assigning a mother # is successfull in mouse release event @@ -8126,7 +7936,7 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): self.xClickBud, self.yClickBud = xdata, ydata # Annotate (or undo) that cell has unknown history - elif right_click and self.setIsHistoryKnownButton.isChecked(): + elif left_click and self.setIsHistoryKnownButton.isChecked(): if posData.cca_df is None: return @@ -8192,36 +8002,25 @@ def gui_mousePressEventImg1(self, event: QMouseEvent): if not keepActive: button.setChecked(False) - elif right_click and findNextMotherButtonON: + elif left_click and findNextMotherButtonON: if posData.frame_i == 0: return self.find_mother_action(posData, event, ydata, xdata) - elif right_click and unknownLineageButtonON: + elif left_click and unknownLineageButtonON: if posData.frame_i == 0: return self.annotate_unknown_lineage_action(posData, event, ydata, xdata) - elif (left_click or right_click) and canZoomRect: - if left_click: - x, y = event.pos().x(), event.pos().y() - xdata, ydata = int(x), int(y) - - self.zoomRectItem.setPos((xdata, ydata)) - - self.isMouseDragImg1 = True - else: - try: - xRange, yRange = self.zoomRectItem.getLastRange() - self.ax1.setRange( - xRange=xRange, - yRange=yRange, - padding=0 - ) - except Exception as err: - QTimer.singleShot(100, self.autoRange) + elif left_click and canZoomRect: + x, y = event.pos().x(), event.pos().y() + xdata, ydata = int(x), int(y) + + self.zoomRectItem.setPos((xdata, ydata)) + + self.isMouseDragImg1 = True def repeat_click_and_backup(self, posData, event, ydata, xdata): """ @@ -8270,8 +8069,6 @@ def repeat_click_and_backup(self, posData, event, ydata, xdata): self.right_click_i = 0 self.right_click_ID = ID self.original_mother_skipped = False - elif event.modifiers() & Qt.ShiftModifier: - self.right_click_i -= 1 else: self.right_click_i += 1 @@ -13343,6 +13140,24 @@ def disconnectLeftClickButtons(self): # Not all the LeftClickButtons have toggled connected pass + def deactivateOtherExclusiveEditTools(self, keep=None): + for tool in self.exclusiveEditTools: + if tool != keep and tool.isChecked(): + tool.setChecked(False) + + def _usesImg2MousePressHandler(self): + return any([ + self.separateBudButton.isChecked(), + self.fillHolesToolButton.isChecked(), + self.hullContToolButton.isChecked(), + self.moveLabelToolButton.isChecked(), + self.mergeIDsButton.isChecked(), + self.editIDbutton.isChecked(), + self.keepIDsButton.isChecked(), + self.binCellButton.isChecked(), + self.ripCellButton.isChecked(), + ]) + def uncheckLeftClickButtons(self, sender): for button in self.LeftClickButtons: if button != sender: @@ -13366,6 +13181,39 @@ def uncheckLeftClickButtons(self, sender): if sender is not None: self.keepIDsButton.setChecked(False) + def _matchesKeyPressShortcut(self, event: QKeyEvent, shortcut) -> bool: + key = event.key() + modifiers = event.modifiers() + if modifiers not in (Qt.NoModifier, Qt.KeypadModifier): + return False + if isinstance(shortcut, int): + return key == shortcut + if isinstance(shortcut, QKeySequence): + if shortcut.count() == 0: + return False + return shortcut[0] == key + try: + return int(shortcut) == key + except (TypeError, ValueError): + return False + + def activateExclusiveEditTool(self, tool): + if tool not in self.exclusiveEditTools: + if tool.isCheckable(): + tool.setChecked(not tool.isChecked()) + else: + tool.trigger() + return + + if tool.isChecked(): + tool.setChecked(False) + return + + self.disconnectLeftClickButtons() + self.deactivateOtherExclusiveEditTools(keep=tool) + tool.setChecked(True) + self.connectLeftClickButtons() + def connectLeftClickButtonsPointsLayersToolbar(self): for toolbar in self.pointsLayersToolbars: for action in toolbar.actions()[1:]: @@ -13382,6 +13230,8 @@ def connectLeftClickButtons(self): self.curvToolButton.toggled.connect(self.curvTool_cb) self.rulerButton.toggled.connect(self.ruler_cb) self.eraserButton.toggled.connect(self.Eraser_cb) + self.editIDbutton.toggled.connect(self.editID_cb) + self.deleteIDButton.toggled.connect(self.deleteID_cb) self.wandToolButton.toggled.connect(self.wand_cb) self.labelRoiButton.toggled.connect(self.labelRoi_cb) self.magicPromptsToolButton.toggled.connect(self.magicPrompts_cb) @@ -14389,7 +14239,7 @@ def Brush_cb(self, checked): self.setBrushID() self.disconnectLeftClickButtons() - self.uncheckLeftClickButtons(self.sender()) + self.deactivateOtherExclusiveEditTools(keep=self.sender()) c = self.defaultToolBarButtonColor self.eraserButton.setStyleSheet(f'background-color: {c}') self.connectLeftClickButtons() @@ -14410,6 +14260,18 @@ def Brush_cb(self, checked): self.showEditIDwidgets(checked) self.brushLazyModeAction.setVisible(checked) self.enableSizeSpinbox(checked) + + def editID_cb(self, checked): + if checked: + self.disconnectLeftClickButtons() + self.deactivateOtherExclusiveEditTools(keep=self.editIDbutton) + self.connectLeftClickButtons() + + def deleteID_cb(self, checked): + if checked: + self.disconnectLeftClickButtons() + self.deactivateOtherExclusiveEditTools(keep=self.deleteIDButton) + self.connectLeftClickButtons() def showEditIDwidgets(self, visible): self.editIDLabelAction.setVisible(visible) @@ -14580,7 +14442,7 @@ def curvTool_cb(self, checked): if checked: self.setDiskMask() self.disconnectLeftClickButtons() - self.uncheckLeftClickButtons(self.curvToolButton) + self.deactivateOtherExclusiveEditTools(keep=self.curvToolButton) self.connectLeftClickButtons() self.hoverLinSpace = np.linspace(0, 1, 1000) self.curvPlotItem = pg.PlotDataItem(pen=self.newIDs_cpen) @@ -14677,7 +14539,7 @@ def Eraser_cb(self, checked): ) self.updateEraserCursor(self.xHoverImg, self.yHoverImg) self.disconnectLeftClickButtons() - self.uncheckLeftClickButtons(self.sender()) + self.deactivateOtherExclusiveEditTools(keep=self.sender()) c = self.defaultToolBarButtonColor self.brushButton.setStyleSheet(f'background-color: {c}') self.connectLeftClickButtons() @@ -14886,88 +14748,23 @@ def _resizeLeaveSpaceTerminalBelow(self): height = geometry.height() self.setGeometry(left, top+10, width, height-200) - def checkSetDelObjActionActive(self, event): - if self.delObjAction is None and self.is_win: - return - - if self.delObjAction is None: - # On mac we check for Key_Control - if event.key() == Qt.Key_Control: - self.delObjToolAction.setChecked(True) - return - - delObjKeySequence, delObjQtButton = self.delObjAction - keySequenceText = widgets.QKeyEventToString(event).rstrip('+') - - if delObjKeySequence is None: - # self.delObjToolAction.setChecked(True) - return - - delObjKeySequenceText = widgets.macShortcutToWindows( - delObjKeySequence.toString() - ) - keySequenceText = widgets.macShortcutToWindows(keySequenceText) - - # printl( - # delObjKeySequence.toString(), - # keySequenceText, - # delObjKeySequenceText - # ) - - if keySequenceText == delObjKeySequenceText: - self.delObjToolAction.setChecked(True) - - def changeRightClickToLeftOnMac(self, mouseEvent): - button = mouseEvent.button() - if not is_mac: - return button - - delObjKeySequence, delObjQtButton = self.delObjAction - if delObjKeySequence is None: - return button - - if not delObjKeySequence.toString() == 'Control': - return button - - if button != Qt.MouseButton.RightButton: - return button - - if delObjQtButton == Qt.MouseButton.LeftButton: - # On mac, pressing "Control" and clicking with left button changes - # it to a right click button --> here, left click is required for - # delete object --> force return of left click - return Qt.MouseButton.LeftButton - - return button - - def checkTriggerKeyPressShortcuts(self, event: QKeyEvent): - isBrushKey = event.key() == self.brushButton.keyPressShortcut - isEraserKey = event.key() == self.eraserButton.keyPressShortcut + isBrushKey = self._matchesKeyPressShortcut( + event, self.brushButton.keyPressShortcut + ) + isEraserKey = self._matchesKeyPressShortcut( + event, self.eraserButton.keyPressShortcut + ) if isBrushKey or isEraserKey: return isBrushKey, isEraserKey - - modifierText = widgets.modifierKeyToText(event.modifiers()) - for widget in self.widgetsWithShortcut.values(): + + for widget in self.exclusiveEditTools: if not hasattr(widget, 'keyPressShortcut'): continue - - if event.key() == widget.keyPressShortcut: - if widget.isCheckable(): - widget.setChecked(True) - else: - widget.trigger() - continue - - shortcutText = widget.keyPressShortcut.toString() - try: - mod, key = shortcutText.split('+') - if modifierText == mod and event.key() == QKeySequence(key): - widget.trigger() - - except Exception as e: - pass - + if self._matchesKeyPressShortcut(event, widget.keyPressShortcut): + self.activateExclusiveEditTool(widget) + break + return isBrushKey, isEraserKey def _temp_debug(self, id=None): @@ -15062,8 +14859,6 @@ def keyPressEvent(self, ev): isCtrlModifier = modifiers == Qt.ControlModifier isShiftModifier = modifiers == Qt.ShiftModifier - self.checkSetDelObjActionActive(ev) - self.isZmodifier = ( ev.key()== Qt.Key_Z and not isAltModifier and not isCtrlModifier and not isShiftModifier @@ -15194,8 +14989,11 @@ def keyPressEvent(self, ev): # If first time clicking B activate brush and start timer # to catch double press of B if not self.Button.isChecked(): + self.disconnectLeftClickButtons() + self.deactivateOtherExclusiveEditTools(keep=self.Button) self.uncheck = False self.Button.setChecked(True) + self.connectLeftClickButtons() else: self.uncheck = True self.countKeyPress = 1 @@ -15298,14 +15096,11 @@ def keyReleaseEvent(self, ev): or ev.key() == Qt.Key_Down or ev.key() == Qt.Key_Control or ev.key() == Qt.Key_Backspace - or self.delObjToolAction.isChecked() ) if canRepeat and ev.isAutoRepeat(): return - self.delObjToolAction.setChecked(False) - if ev.isAutoRepeat() and not ev.key() == Qt.Key_Z: if self.warnKeyPressedMsg is not None: return @@ -20418,9 +20213,17 @@ def _get_overlay_zstacks(self): 'label_data': label_vol, } segm_alpha_max = max(1, self.imgGrad.labelsAlphaSlider.maximum()) - segm_opacity = float(labels_alpha) / segm_alpha_max + segm_blend = float(labels_alpha) + if segm_blend <= 0: + segm_blend = 50.0 result.append( - (mask, segm_opacity, 'red', 'mip', meta) + ( + label_vol.astype(np.float32, copy=False), + segm_blend, + self.getLabelsImageLut(), + None, + meta, + ) ) # -- 3. Overlay label channels ----------------------------------------- @@ -20456,72 +20259,10 @@ def _get_overlay_zstacks(self): 'overlay_index': len(result), 'label_data': label_vol, } - result.append((mask, 0.5, cmap, 'mip', meta)) + result.append((mask, 0.5, cmap, 'translucent', meta)) return result - def _connect_3d_renderer_overlay_sync(self): - """Wire main GUI overlay widgets to the open 3D renderer (bidirectional).""" - win = getattr(self, '_renderer3d_window', None) - if win is None: - return - - self._renderer3d_sync_blocked = False - adapter = win._adapter - if adapter is None: - adapter = _GuiWinRenderer3DAdapter(self) - win._adapter = adapter - - if not hasattr(self, '_renderer3d_overlay_push'): - def _push_overlay_changes(*_args): - if getattr(self, '_renderer3d_sync_blocked', False): - return - adapter.on_main_overlay_changed() - - self._renderer3d_overlay_push = _push_overlay_changes - self.imgGrad.labelsAlphaSlider.valueChanged.connect( - _push_overlay_changes - ) - - connected = getattr(self, '_renderer3d_overlay_connected', set()) - push = self._renderer3d_overlay_push - for items in getattr(self, 'overlayLayersItems', {}).values(): - lutItem, alphaSB = items[1], items[2] - sb_id = id(alphaSB) - if sb_id in connected: - continue - alphaSB.valueChanged.connect(push) - lutItem.sigLookupTableChanged.connect(push) - if hasattr(lutItem, 'overlayColorButton'): - lutItem.overlayColorButton.sigColorChanged.connect(push) - connected.add(sb_id) - self._renderer3d_overlay_connected = connected - - def _connect_3d_renderer_cell_id_sync(self): - """Wire main GUI cell ID controls to the open 3D renderer.""" - win = getattr(self, '_renderer3d_window', None) - if win is None: - return - - adapter = win._adapter - if adapter is None: - adapter = _GuiWinRenderer3DAdapter(self) - win._adapter = adapter - - if not hasattr(self, '_renderer3d_cell_id_push'): - def _push_cell_id(*_args): - if getattr(self, '_renderer3d_sync_blocked', False): - return - cell_id = self.guiTabControl.propsQGBox.idSB.value() - adapter.on_cell_id_changed_from_main(cell_id) - - self._renderer3d_cell_id_push = _push_cell_id - self.guiTabControl.propsQGBox.idSB.valueChanged.connect( - _push_cell_id - ) - if hasattr(self, 'highlightIDToolbar'): - self.highlightIDToolbar.sigIDChanged.connect(_push_cell_id) - def _get_current_zstack(self): """Return a (Z, Y, X) float32 array for the current position and frame. @@ -20541,13 +20282,135 @@ def _get_current_zstack(self): return None return data + def _get_segm_label_volume(self): + """Return (Z, Y, X) int32 labels aligned to the current image z-stack.""" + if not self.isDataLoaded: + return None + posData = self.data[self.pos_i] + if posData.SizeZ <= 1 or posData.lab is None: + return None + img = posData.img_data[posData.frame_i] + if img.ndim == 4: + z_depth = img.shape[0] + elif img.ndim == 3: + z_depth = img.shape[0] + else: + return None + lab = posData.lab + if lab.ndim == 3: + label_vol = lab.astype(np.int32, copy=False) + if label_vol.shape[0] == 1 and z_depth > 1: + label_vol = np.repeat(label_vol, z_depth, axis=0) + elif lab.ndim == 2: + label_vol = np.repeat( + lab.astype(np.int32, copy=False)[np.newaxis], + z_depth, + axis=0, + ) + else: + return None + return label_vol + + def _get_3d_renderer_overlays_without_segm(self): + from .renderer3d import OVERLAY_KIND_SEGM, _parse_overlay_entry + + overlays = self._get_overlay_zstacks() + filtered = [] + for index, entry in enumerate(overlays): + *_, meta = _parse_overlay_entry(entry, index) + if meta.get('kind') == OVERLAY_KIND_SEGM: + continue + filtered.append(entry) + return filtered + + def _current_3d_segm_blend(self) -> float: + """BF↔Segm crossfade — 3D-only (defaults to 50 until the 3D window exists).""" + win = getattr(self, '_renderer3d_window', None) + if win is not None: + return float(win._segm_blend) + return 50.0 + + def _with_3d_segm_blend(self, overlays): + """Replace segm overlay blend with the live 3D crossfade value.""" + from .renderer3d import OVERLAY_KIND_SEGM, _parse_overlay_entry + + win = getattr(self, '_renderer3d_window', None) + if win is None or not win.isVisible(): + return overlays + blend = float(win._segm_blend) + patched = [] + for index, entry in enumerate(overlays): + data, _opacity, cmap, mode, meta = _parse_overlay_entry(entry, index) + if meta.get('kind') == OVERLAY_KIND_SEGM: + patched.append((data, blend, cmap, mode, meta)) + else: + patched.append(entry) + return patched + + def _get_3d_renderer_overlays(self): + """Overlays for the 3D window, always including segmentation when labels exist.""" + from .renderer3d import OVERLAY_KIND_SEGM, _parse_overlay_entry + + overlays = self._with_3d_segm_blend(list(self._get_overlay_zstacks())) + for index, entry in enumerate(overlays): + *_, meta = _parse_overlay_entry(entry, index) + if meta.get('kind') == OVERLAY_KIND_SEGM: + return overlays + + label_vol = self._get_segm_label_volume() + if label_vol is None: + return overlays + + segm_blend = self._current_3d_segm_blend() + + meta = { + 'kind': OVERLAY_KIND_SEGM, + 'channel_name': '__segm__', + 'overlay_index': len(overlays), + 'label_data': label_vol, + } + overlays.append( + ( + label_vol.astype(np.float32, copy=False), + segm_blend, + None, + None, + meta, + ) + ) + return overlays + + def _push_volumes_to_3d_renderer(self, win) -> bool: + """Load brightfield/image as primary and segmentation as overlay.""" + if getattr(self, '_pushing_3d_volumes', False): + return True + self._pushing_3d_volumes = True + try: + data = self._get_current_zstack() + if data is None: + return False + + overlays = self._get_3d_renderer_overlays() + + if getattr(win, '_segmentation_only', False): + win.switch_to_image_volume(data) + elif win._volumes_data is None or not win.channels: + win.set_volume(data, channel_name='Channel 1') + else: + win.update_volume(data) + + if not win.refresh_overlay_volumes(overlays): + win.update_overlay_volumes(overlays) + return True + finally: + self._pushing_3d_volumes = False + @exception_handler def _launch_3d_renderer(self, *args, **kwargs): """Create (if needed) and show the 3D renderer; feed current data.""" from . import renderer3d # renderer3d itself only needs numpy/qtpy - data = self._get_current_zstack() - if data is None: + if self._get_current_zstack() is None: return myutils.check_install_package( @@ -20572,31 +20435,46 @@ def _launch_3d_renderer(self, *args, **kwargs): hide_on_close=True, adapter=adapter, ) - self._renderer3d_window.update_volume(data) - self._renderer3d_window.update_overlay_volumes( - self._get_overlay_zstacks() - ) - voxel_sizes = self._get_current_voxel_sizes() - if voxel_sizes is not None: - self._renderer3d_window.set_metadata_voxel_sizes(*voxel_sizes) + else: + win = self._renderer3d_window + if ( + win._volumes_data is not None + and (win._volume_nodes is None or not win._volume_nodes) + ): + win._hide_on_close = False + win.close() + self._renderer3d_window = None + first_launch = True + adapter = _GuiWinRenderer3DAdapter(self) + self._renderer3d_window = renderer3d.create_renderer( + parent=None, + hide_on_close=True, + adapter=adapter, + ) + try: + if not self._push_volumes_to_3d_renderer(self._renderer3d_window): + return + voxel_sizes = self._get_current_voxel_sizes() + if voxel_sizes is not None: + self._renderer3d_window.set_metadata_voxel_sizes(*voxel_sizes) - posData = self.data[self.pos_i] - self._renderer3d_window.setWindowTitle( - f'3D Z-Stack Renderer — ' - f'Pos {self.pos_i + 1}, Frame {posData.frame_i + 1}' - ) - if first_launch: - self._position_renderer3d_window() - self._connect_3d_renderer_overlay_sync() - self._connect_3d_renderer_cell_id_sync() - self._renderer3d_window.update_cell_id_range() - active_cell_id = self.guiTabControl.propsQGBox.idSB.value() - self._renderer3d_window.set_active_cell_id( - int(active_cell_id), - sync_main_gui=False, - ) - self._renderer3d_window.show() - self._renderer3d_window.raise_() + posData = self.data[self.pos_i] + self._renderer3d_window.setWindowTitle( + f'3D Z-Stack Renderer — ' + f'Pos {self.pos_i + 1}, Frame {posData.frame_i + 1}' + ) + if first_launch: + self._position_renderer3d_window() + self._renderer3d_window.update_cell_id_range() + self._renderer3d_window.show() + self._renderer3d_window.raise_() + except Exception: + if first_launch and self._renderer3d_window is not None: + failed_win = self._renderer3d_window + self._renderer3d_window = None + failed_win._hide_on_close = False + failed_win.close() + raise def _position_renderer3d_window(self): """Place the renderer window to the right of (or below) the main window.""" @@ -20641,17 +20519,11 @@ def _update_3d_renderer_if_active(self): return if not self._renderer3d_window.isVisible(): return - data = self._get_current_zstack() - if data is None: + if not self._push_volumes_to_3d_renderer(self._renderer3d_window): return - self._renderer3d_window.update_volume(data) - self._renderer3d_window.update_overlay_volumes( - self._get_overlay_zstacks() - ) self._renderer3d_window.update_cell_id_range() self._renderer3d_window.set_active_cell_id( self._renderer3d_window._active_cell_id, - sync_main_gui=False, ) voxel_sizes = self._get_current_voxel_sizes() if voxel_sizes is not None: @@ -24243,7 +24115,7 @@ def setupAddPointsByClicking(self, toolButton, isLoadedDf, toolbar): rightClickIDSpinbox.setMaximumWidth(pointIdSpinbox.sizeHint().width()) rightClickIDSpinbox.setValue(pointIdSpinbox.value()) rightClickIDSpinbox.setMinimum(0) - rightClickIDSpinbox.label = QLabel(' | Right-click ID: ') + rightClickIDSpinbox.label = QLabel(' | 2nd ID: ') rightClickIDSpinbox.labelAction = toolbar.addWidget( rightClickIDSpinbox.label ) @@ -24320,12 +24192,10 @@ def undoAddPoint(self, action): def getAddedPointId( self, isMagicPrompts, addPointsByClickingButton, - right_click, left_click, middle_click + left_click, middle_click ): action = addPointsByClickingButton.action - if right_click: - id = addPointsByClickingButton.rightClickIDSpinbox.value() - elif left_click: + if left_click: id = addPointsByClickingButton.pointIdSpinbox.value() id = self.getClickedPointNewId( action, id, addPointsByClickingButton.pointIdSpinbox, @@ -26135,10 +26005,10 @@ def initShortcuts(self): cp = config.ConfigParser() if os.path.exists(shortcut_filepath): cp.read(shortcut_filepath) - + if 'keyboard.shortcuts' not in cp: cp['keyboard.shortcuts'] = {} - + if cp.has_option('keyboard.shortcuts', 'Zoom out'): zoomOutKeyValueStr = cp['keyboard.shortcuts']['Zoom out'] try: @@ -26148,25 +26018,7 @@ def initShortcuts(self): f'{zoomOutKeyValueStr} is not a valid key ' 'zooming out action. Restoring default key "H".' ) - - if 'delete_object.action' not in cp: - self.delObjAction = None - else: - delObjKeySequenceText = cp['delete_object.action']['Key sequence'] - delObjButtonText = cp['delete_object.action']['Mouse button'] - delObjQtButton = ( - Qt.MouseButton.LeftButton if delObjButtonText == 'Left click' - else Qt.MouseButton.MiddleButton - ) - if not delObjKeySequenceText: - delObjKeySequence = None - else: - delObjKeySequence = widgets.KeySequenceFromText( - delObjKeySequenceText - ) - self.delObjToolAction.setChecked(True) - self.delObjAction = delObjKeySequence, delObjQtButton - + shortcuts = {} for name, widget in self.widgetsWithShortcut.items(): if name not in cp.options('keyboard.shortcuts'): @@ -26180,12 +26032,12 @@ def initShortcuts(self): else: shortcut_text = cp['keyboard.shortcuts'][name] shortcut = widgets.KeySequenceFromText(shortcut_text) - + shortcuts[name] = (shortcut_text, shortcut) self.setShortcuts(shortcuts, save=False) with open(shortcut_filepath, 'w') as ini: cp.write(ini) - + def setShortcuts(self, shortcuts: dict, save=True): for name, (text, shortcut) in shortcuts.items(): widget = self.widgetsWithShortcut[name] @@ -26198,85 +26050,29 @@ def setShortcuts(self, shortcuts: dict, save=True): s = widget.toolTip() toolTip = re.sub(r'Shortcut: "(.*)"', f'Shortcut: "{text}"', s) widget.setToolTip(toolTip) - - if not save: + + if not save: return - + from . import config cp = config.ConfigParser() if os.path.exists(shortcut_filepath): cp.read(shortcut_filepath) - + if 'keyboard.shortcuts' not in cp: cp['keyboard.shortcuts'] = {} for name, (text, shortcut) in shortcuts.items(): cp['keyboard.shortcuts'][name] = text - + cp['keyboard.shortcuts']['Zoom out'] = str(self.zoomOutKeyValue) - - if self.delObjAction is None: - with open(shortcut_filepath, 'w') as ini: - cp.write(ini) - return - - delObjKeySequence, delObjQtButton = self.delObjAction - try: - if delObjKeySequence is None: - delObjKeySequenceText = '' - else: - delObjKeySequenceText = delObjKeySequence.toString() - - delObjKeySequenceText = ( - delObjKeySequenceText - .encode('ascii', 'ignore') - .decode('utf-8') - ) - delObjButtonText = ( - 'Left click' if delObjQtButton == Qt.MouseButton.LeftButton - else 'Middle click' - ) - cp['delete_object.action'] = { - 'Key sequence': delObjKeySequenceText, - 'Mouse button': delObjButtonText - } - except Exception as err: - self.logger.warning( - f'{delObjKeySequence} is not a valid keys sequence for ' - 'deleting objects. Setting default action' - ) - self.delObjAction = None - cp.remove_section('delete_object.action') - + with open(shortcut_filepath, 'w') as ini: cp.write(ini) - + def editShortcuts_cb(self): - if is_mac: - delObjKeySequenceText = 'Ctrl' - delObjButtonText = 'Left click' - else: - delObjKeySequenceText = '' - delObjButtonText = 'Middle click' - - if self.delObjAction is not None: - delObjKeySequence, delObjQtButton = self.delObjAction - if delObjKeySequence is None: - delObjKeySequenceText = '' - else: - delObjKeySequenceText = delObjKeySequence.toString() - delObjKeySequenceText = ( - delObjKeySequenceText.encode('ascii', 'ignore').decode('utf-8') - ) - delObjButtonText = ( - 'Left click' if delObjQtButton == Qt.MouseButton.LeftButton - else 'Middle click' - ) - win = apps.ShortcutEditorDialog( - self.widgetsWithShortcut, - delObjectKey=delObjKeySequenceText, - delObjectButton=delObjButtonText, + self.widgetsWithShortcut, zoomOutKeyValue=self.zoomOutKeyValue, parent=self ) @@ -26284,7 +26080,6 @@ def editShortcuts_cb(self): if win.cancel: return - self.delObjAction = win.delObjAction self.zoomOutKeyValue = win.zoomOutKeyValue self.setShortcuts(win.customShortcuts) @@ -28589,6 +28384,81 @@ def removeStoredContours(self, delID, frame_i=None, z_slice=None): except KeyError as err: pass + @disableWindow + def _handleDeleteIDClick(self, event, shift=False): + posData = self.data[self.pos_i] + x, y = event.pos().x(), event.pos().y() + delID = self.get_2Dlab(posData.lab)[int(y), int(x)] + if delID == 0: + nearest_ID = core.nearest_nonzero_2D( + self.get_2Dlab(posData.lab), y, x + ) + delID_prompt = apps.QLineEditDialog( + title='Clicked on background', + msg='You clicked on the background.
' + 'Enter here ID(s) that you want to delete

' + 'You can enter multiple IDs separated by comma', + parent=self, + allowedValues=posData.IDs, + defaultTxt=str(nearest_ID), + allowList=True, + isInteger=True + ) + delID_prompt.exec_() + if delID_prompt.cancel: + return + delIDs = delID_prompt.EntryID + else: + delIDs = [delID] + + key = 'Delete ID' + askAction = self.askHowFutureFramesActions[key] + doNotShow = not askAction.isChecked() + (UndoFutFrames, applyFutFrames, endFrame_i, + doNotShowAgain) = self.propagateChange( + delIDs, key, doNotShow, + posData.UndoFutFrames_DelID, posData.applyFutFrames_DelID + ) + + if UndoFutFrames is None: + return + + self.storeUndoRedoStates(UndoFutFrames) + posData.doNotShowAgain_DelID = doNotShowAgain + posData.UndoFutFrames_DelID = UndoFutFrames + posData.applyFutFrames_DelID = applyFutFrames + includeUnvisited = posData.includeUnvisitedInfo['Delete ID'] + + delID_mask = self.deleteIDmiddleClick( + delIDs, applyFutFrames, includeUnvisited, shift=shift + ) + if delID_mask.ndim == 3: + delID_mask = delID_mask[self.z_lab()] + + if self.isSnapshot: + self.fixCcaDfAfterEdit('Delete ID') + else: + self.warnEditingWithCca_df('Delete ID', update_images=False) + + self.setImageImg2() + delROIsIDs = self.setAllTextAnnotations() + self.setAllContoursImages(delROIsIDs=delROIsIDs, compute=False) + + how = self.drawIDsContComboBox.currentText() + if how.find('overlay segm. masks') != -1: + self.labelsLayerImg1.image[delID_mask] = 0 + self.labelsLayerImg1.setImage(self.labelsLayerImg1.image) + + how_ax2 = self.getAnnotateHowRightImage() + if how_ax2.find('overlay segm. masks') != -1: + self.labelsLayerRightImg.image[delID_mask] = 0 + self.labelsLayerRightImg.setImage(self.labelsLayerRightImg.image) + + self.highlightLostNew() + + if not self.deleteIDButton.findChild(QAction).isChecked(): + self.deleteIDButton.setChecked(False) + @disableWindow def deleteIDmiddleClick( self, delIDs: Iterable, applyFutFrames, includeUnvisited, diff --git a/cellacdc/renderer3d.py b/cellacdc/renderer3d.py index 4aca5b90..39ce29e6 100644 --- a/cellacdc/renderer3d.py +++ b/cellacdc/renderer3d.py @@ -1,5 +1,4 @@ from __future__ import annotations -from functools import partial import numpy as np @@ -106,6 +105,13 @@ def overlay_channel_name(index: int) -> str: OVERLAY_KIND_FLUO = 'fluo' OVERLAY_KIND_SEGM = 'segm' +# Label overlays use translucent alpha compositing (not additive, which sums +# RGB along the ray and washes multi-colour labels to white). +_LABEL_OVERLAY_MODE = 'translucent' +_LABEL_VOLUME_INTERP = 'nearest' + +SEGM_PRIMARY_CHANNEL = 'Segmentation' + OVERLAY_KIND_OL_LABELS = 'ol_labels' @@ -126,21 +132,56 @@ def _parse_overlay_entry(entry, index: int): mode_override = None meta: dict = {'overlay_index': index} if len(entry) > 3: - if isinstance(entry[3], str): - mode_override = entry[3] + third = entry[3] + if third is None: if len(entry) > 4 and isinstance(entry[4], dict): meta.update(entry[4]) - elif isinstance(entry[3], dict): - meta.update(entry[3]) + elif isinstance(third, str): + mode_override = third + if len(entry) > 4 and isinstance(entry[4], dict): + meta.update(entry[4]) + elif isinstance(third, dict): + meta.update(third) return data, opacity, cmap_spec, mode_override, meta -def _mask_labels_for_display(labels: np.ndarray, cell_id: int) -> np.ndarray: - """Build a float32 overlay mask from integer label data and active cell ID.""" - lab = labels.astype(np.int32, copy=False) +def _is_labels_lut_spec(cmap_spec) -> bool: + return ( + isinstance(cmap_spec, np.ndarray) + and cmap_spec.ndim == 2 + and cmap_spec.shape[1] >= 3 + ) + + +def _labels_overlay_clim(cmap_spec) -> tuple[float, float]: + if _is_labels_lut_spec(cmap_spec): + # Center integer label IDs on LUT entries (matches napari / PG indexing). + n = float(len(cmap_spec)) + return (-0.5, n - 0.5) + return (0.0, 1.0) + + +def _label_overlay_cmap(cmap_spec): + if _is_labels_lut_spec(cmap_spec): + return colors.labels_lut_vispy_cmap(cmap_spec) + if isinstance(cmap_spec, str): + return colors.overlay_mask_vispy_cmap(cmap_spec) + return _volume_cmap_from_spec(cmap_spec) + + +def _labels_for_display(labels: np.ndarray, cell_id: int) -> np.ndarray: + """Return label IDs for 3D overlay coloring (matches 2D LUT indexing).""" + lab = labels.astype(np.float32, copy=False) if int(cell_id) <= 0: - return (lab > 0).astype(np.float32) - return (lab == int(cell_id)).astype(np.float32) + return lab + cid = float(int(cell_id)) + return np.where(lab == cid, lab, 0.0).astype(np.float32, copy=False) + + +def _segm_blend_opacities(blend_0_to_100: float) -> tuple[float, float]: + """Return (brightfield_opacity, segmentation_opacity) for blend 0–100.""" + t = max(0.0, min(100.0, float(blend_0_to_100))) / 100.0 + return 1.0 - t, t def _resample_z_axis( @@ -368,7 +409,10 @@ def _build(self) -> None: 'physically isotropic. Slower and uses more memory than transform-only.' ) self._resample_z_cb.toggled.connect(self._on_resample_z_changed) - layout.addFormWidget(self._resample_z_cb, row=row) + layout.addFormWidget( + widgets.formWidget(self._resample_z_cb, labelTextLeft=''), + row=row, + ) self._z_aniso_debounce = QTimer(self) self._z_aniso_debounce.setSingleShot(True) @@ -377,8 +421,7 @@ def _build(self) -> None: self._pending_z_aniso = 1.0 row += 1 - # Primary-channel opacity is controlled via the right-side grayscale - # colorbar in the 3D window (see VolumeRenderer3DWindow._add_opacity_lut_items). + # Segmentation label colours are edited via the right-side labels gradient bar. layout.addNewColumn(with_separator=True) @@ -431,7 +474,10 @@ def _build(self) -> None: 'requiring custom GLSL injection.' ) self._smooth_iso_cb.toggled.connect(self._on_smooth_iso_changed) - layout.addFormWidget(self._smooth_iso_cb, row=row) + layout.addFormWidget( + widgets.formWidget(self._smooth_iso_cb, labelTextLeft=''), + row=row, + ) row += 1 self._attn_spin = QDoubleSpinBox() @@ -519,8 +565,6 @@ def _on_mode_changed(self, idx: int) -> None: self._renderer.set_rendering_mode(mode) def _on_cell_id_changed(self, value: int) -> None: - if getattr(self._renderer, '_syncing_cell_id_from_main', False): - return if getattr(self._renderer, '_syncing_cell_id_from_renderer', False): return self._renderer.set_active_cell_id(int(value)) @@ -634,7 +678,9 @@ def __init__( self._volumes_data: dict[str, np.ndarray] | None = None self._raw_volumes_data: dict[str, np.ndarray] | None = None self.lut_items: dict[str, widgets.baseHistogramLUTitem] | None = None - self._opacity_lut_items: dict[str, widgets.baseHistogramLUTitem] = {} + self._labels_grad: widgets.labelsGradientWidget | None = None + self._3d_labels_lut_rgba: np.ndarray | None = None + self._3d_lut_rgb: np.ndarray | None = None self._overlay_meta: dict[str, dict] = {} self._overlay_widgets: dict[str, dict] = {} self._overlay_controls_layout: QVBoxLayout | None = None @@ -650,8 +696,9 @@ def __init__( self._resample_z_enabled: bool = False self._syncing_z_aniso: bool = False self._active_cell_id: int = 0 - self._syncing_cell_id_from_main = False self._syncing_cell_id_from_renderer = False + self._syncing_primary_lut_from_main = False + self._syncing_primary_lut_from_renderer = False self._overlay_mode_overrides: dict[str, str | None] = {} self.channels: list[str] | None = None self._last_shape: tuple | None = None @@ -661,6 +708,10 @@ def __init__( self._last_raw_data: np.ndarray | None = None # float32, for re-render self._ui_initialised: bool = False self._is_set_volumes_first_call: bool = True + self._controls = None + self._segmentation_only: bool = False + self._cached_primary_lut_state = None + self._segm_blend: float = 50.0 self._init_vispy() @@ -733,7 +784,7 @@ def _normalize_overlay_volume( vmin, vmax = float(vol.min()), float(vol.max()) max_tex = self._resolve_max_texture_3d() if max(vol.shape) > max_tex: - vol = self._downsample(vol, max_tex) + vol = self._downsample_max_pool(vol, max_tex) if vmax > vmin: vol = (vol - vmin) / (vmax - vmin) else: @@ -749,7 +800,9 @@ def _process_label_volume(self, lab: np.ndarray) -> np.ndarray: ) max_tex = self._resolve_max_texture_3d() if max(lab.shape) > max_tex: - lab = self._downsample(lab, max_tex) + lab = self._downsample_max_pool(lab.astype(np.float32), max_tex).astype( + np.int32 + ) return np.ascontiguousarray(lab) def _store_label_volume( @@ -767,8 +820,28 @@ def _overlay_volume_from_labels(self, channel_name: str) -> np.ndarray | None: labels = self._label_volumes.get(channel_name) if labels is None: return None - mask = _mask_labels_for_display(labels, self._active_cell_id) - return self._normalize_overlay_volume(mask, skip_resample=True) + return np.ascontiguousarray( + _labels_for_display(labels, self._active_cell_id) + ) + + def _resolve_label_cmap_spec(self, cmap_spec): + if _is_labels_lut_spec(cmap_spec): + return cmap_spec + local = self._get_segm_labels_cmap() + if local is not None: + return local + return cmap_spec + + def _label_overlay_clim_for_key(self, channel_name: str) -> tuple[float, float]: + meta = self._overlay_meta.get(channel_name, {}) + cmap_spec = self._resolve_label_cmap_spec(meta.get('cmap_spec')) + return _labels_overlay_clim(cmap_spec) + + def _get_segm_labels_cmap(self): + lut = self._build_labels_image_lut() + if _is_labels_lut_spec(lut): + return lut + return None def _connect_canvas_events(self) -> None: if not hasattr(self, '_canvas') or self._canvas is None: @@ -827,15 +900,10 @@ def update_cell_id_range(self) -> None: spin = self._controls._cell_id_spin spin.setMaximum(max(ids)) - def set_active_cell_id( - self, - cell_id: int, - *, - sync_main_gui: bool = True, - ) -> None: + def set_active_cell_id(self, cell_id: int) -> None: cell_id = int(cell_id) self._active_cell_id = cell_id - if self._controls is not None and not self._syncing_cell_id_from_main: + if self._controls is not None and not self._syncing_cell_id_from_renderer: self._syncing_cell_id_from_renderer = True try: spin = self._controls._cell_id_spin @@ -850,18 +918,14 @@ def set_active_cell_id( vol = self._overlay_volume_from_labels(key) if vol is None: continue + clim = self._label_overlay_clim_for_key(key) self._volumes_data[key] = vol volume_node = self._volume_nodes.get(key) if volume_node is not None: - volume_node.set_data(vol, clim=(0.0, 1.0)) - - if ( - sync_main_gui - and not self._syncing_cell_id_from_main - and self._adapter is not None - and hasattr(self._adapter, 'apply_cell_id_from_renderer') - ): - self._adapter.apply_cell_id_from_renderer(cell_id) + volume_node.set_data(vol, clim=clim) + volume_node.clim = clim + if self._segmentation_only and key == SEGM_PRIMARY_CHANNEL: + self._apply_segmentation_volume_style(volume_node, key) if hasattr(self, '_canvas') and self._canvas is not None: self._canvas.update() @@ -920,12 +984,17 @@ def _configure_renderer_lut_item( if button is None: continue for action in menu.actions(): - if action.defaultWidget() is not None: - try: - if button in action.defaultWidget().findChildren(type(button)): - menu.removeAction(action) - except Exception: - pass + get_widget = getattr(action, 'defaultWidget', None) + if get_widget is None: + continue + widget = get_widget() + if widget is None: + continue + try: + if button in widget.findChildren(type(button)): + menu.removeAction(action) + except Exception: + pass def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: self.lut_items_graphics_layout = pg.GraphicsLayoutWidget() @@ -963,10 +1032,10 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: lut_item.sigLookupTableChanged.connect(self._on_lut_changed) auto_btn.clicked.connect( - partial(self._on_auto_clim, lut_item=lut_item) + lambda *_args, li=lut_item: self._on_auto_clim(li) ) full_btn.clicked.connect( - partial(self._on_full_clim, lut_item=lut_item) + lambda *_args, li=lut_item: self._on_full_clim(li) ) total_width += lut_item.sizeHint(Qt.PreferredSize).width() @@ -974,64 +1043,167 @@ def _add_lut_items(self, scene_layout: QHBoxLayout) -> None: scene_layout.addWidget(self.lut_items_graphics_layout, stretch=0) self.lut_items_graphics_layout.setFixedWidth(int(total_width + 20)) - def _add_opacity_lut_items(self, scene_layout: QHBoxLayout) -> None: - self._opacity_lut_graphics_layout = pg.GraphicsLayoutWidget() - self._opacity_lut_graphics_layout.setBackground('black') - self._opacity_lut_layout = self._opacity_lut_graphics_layout.addLayout( - row=0, col=0 + def _add_labels_lut_widget(self, scene_layout: QHBoxLayout) -> None: + """Right-side labels gradient (same role as the main GUI labelsGrad bar).""" + self._labels_grad = widgets.labelsGradientWidget( + parent=self, + orientation='left', ) - total_width = 0 - for c, channel in enumerate(self.channels): - opacity_lut = widgets.baseHistogramLUTitem( - parent=self, - name=f'opacity_{channel}', - axisLabel='Opacity:', - gradientPosition='left', - include_rescale_lut_options=False, - ) - opacity_lut.channel = channel - opacity_lut.vb.hide() - from pyqtgraph.graphicsItems.GradientEditorItem import Gradients - opacity_lut.setGradient(Gradients['grey']) - ticks = opacity_lut.gradient.listTicks() - if len(ticks) >= 2: - opacity_lut.gradient.setTickValue(ticks[0][0], 0.0) - opacity_lut.gradient.setTickValue(ticks[-1][0], 1.0) - opacity_lut.sigLookupTableChanged.connect( - partial(self._on_opacity_lut_changed, lut_item=opacity_lut) - ) - primary_lut = self.lut_items[channel][0] - primary_lut.setChildLutItem(opacity_lut) - self._opacity_lut_items[channel] = opacity_lut - self._opacity_lut_layout.addItem(opacity_lut, row=0, col=c) - total_width += opacity_lut.sizeHint(Qt.PreferredSize).width() - - scene_layout.addWidget(self._opacity_lut_graphics_layout, stretch=0) - self._opacity_lut_graphics_layout.setFixedWidth(int(total_width + 20)) + self._labels_grad.setToolTip( + 'Colormap for segmentation label IDs (independent from the 2D labels bar).' + ) + self._labels_grad.sigGradientChangeFinished.connect( + self._on_labels_grad_finished + ) + self._labels_grad.shuffleCmapAction.triggered.connect( + self._shuffle_3d_labels_lut + ) + self._labels_grad.colorButton.sigColorChanged.connect( + self._on_labels_bkgr_color_changed + ) + width = max(80, self._labels_grad.sizeHint().width()) + self._labels_grad.setFixedWidth(int(width)) + scene_layout.addWidget(self._labels_grad, stretch=0) + self._init_labels_grad_from_main() - def _on_opacity_lut_changed( - self, - lut_item: widgets.baseHistogramLUTitem, - ) -> None: - ticks_pos = [x for _t, x in lut_item.gradient.listTicks()] - if not ticks_pos: + def _init_labels_grad_from_main(self) -> None: + if self._labels_grad is None: return - opacity = max(0.0, min(1.0, max(ticks_pos))) - self.set_opacity(opacity, channel=lut_item.channel) + adapter = self._adapter + copied_lut = None + if adapter is not None and hasattr(adapter, 'get_labels_image_lut'): + copied_lut = adapter.get_labels_image_lut() + if copied_lut is not None: + self._3d_labels_lut_rgba = np.asarray(copied_lut, dtype=np.uint8).copy() + self._3d_lut_rgb = self._3d_labels_lut_rgba[:, :3].copy() + if adapter is not None and hasattr(adapter, 'get_labels_gradient_initial_state'): + state = adapter.get_labels_gradient_initial_state() + if state: + grad, bkgr = state + self._labels_grad.item.restoreState(grad) + self._labels_grad.colorButton.setColor(bkgr) + else: + if adapter is not None and hasattr(adapter, 'get_labels_gradient_initial_state'): + state = adapter.get_labels_gradient_initial_state() + if state: + grad, bkgr = state + self._labels_grad.item.restoreState(grad) + self._labels_grad.colorButton.setColor(bkgr) + self._rebuild_3d_labels_lut_from_gradient(shuffle=True) + self._ensure_3d_labels_lut_size() + self._apply_labels_lut_to_segm() + + def _sample_gradient_rgb_table(self, *, shuffle: bool) -> np.ndarray: + table = np.asarray( + self._labels_grad.item.colorMap().getLookupTable(0, 1, 255), + dtype=np.uint8, + ) + if table.ndim != 2: + raise ValueError(f'Expected 2D LUT table; got shape {table.shape}') + table = table[:, :3].copy() + if shuffle: + np.random.shuffle(table) + return table + + def _labels_rgba_from_lut_rgb(self, lut_rgb: np.ndarray) -> np.ndarray: + lut_rgb = np.asarray(lut_rgb, dtype=np.uint8) + rgba = np.zeros((len(lut_rgb), 4), dtype=np.uint8) + rgba[:, :3] = lut_rgb[:, :3] + rgba[:, 3] = 255 + rgba[0] = [0, 0, 0, 0] + return rgba + + def _max_label_id_in_volumes(self) -> int: + max_id = 0 + for labels in self._label_volumes.values(): + if labels is None or labels.size == 0: + continue + max_id = max(max_id, int(labels.max())) + return max_id - def _sync_opacity_lut_value( - self, - channel: str, - opacity: float, - ) -> None: - opacity_lut = self._opacity_lut_items.get(channel) - if opacity_lut is None: + def _ensure_3d_labels_lut_size(self) -> None: + """Grow the LUT when label IDs exceed the current table (matches 2D extendLabelsLUT).""" + if self._3d_labels_lut_rgba is None: + return + need = self._max_label_id_in_volumes() + 1 + if need <= len(self._3d_labels_lut_rgba): + return + old = self._3d_labels_lut_rgba + extra_count = need - len(old) + if len(old) > 1: + pick = np.random.randint(1, len(old), size=extra_count) + extra = old[pick].copy() + else: + extra = np.zeros((extra_count, 4), dtype=np.uint8) + extra[:, 3] = 255 + self._3d_labels_lut_rgba = np.concatenate([old, extra], axis=0) + if self._3d_lut_rgb is not None: + self._3d_lut_rgb = self._3d_labels_lut_rgba[:, :3].copy() + + def _rebuild_3d_labels_lut_from_gradient(self, *, shuffle: bool) -> None: + table = self._sample_gradient_rgb_table(shuffle=shuffle) + bkgr = np.asarray( + self._labels_grad.colorButton.color().getRgb()[:3], + dtype=np.uint8, + ) + self._3d_lut_rgb = np.insert(table, 0, bkgr, axis=0) + self._3d_labels_lut_rgba = self._labels_rgba_from_lut_rgb(self._3d_lut_rgb) + + def _build_labels_image_lut(self) -> np.ndarray | None: + if self._3d_labels_lut_rgba is None and self._labels_grad is not None: + self._rebuild_3d_labels_lut_from_gradient(shuffle=True) + self._ensure_3d_labels_lut_size() + return self._3d_labels_lut_rgba + + def _apply_labels_lut_to_segm(self) -> None: + lut = self._build_labels_image_lut() + if lut is None: return - ticks = opacity_lut.gradient.listTicks() - if not ticks: + key = self._find_overlay_by_kind(OVERLAY_KIND_SEGM) + if key is not None: + self.set_overlay_cmap(key, lut, sync_main_gui=False) + volume_node = self._volume_nodes.get(key) if self._volume_nodes else None + if volume_node is not None: + volume_node.clim = _labels_overlay_clim(lut) return - high_tick = max(ticks, key=lambda item: item[1])[0] - opacity_lut.gradient.setTickValue(high_tick, max(0.0, min(1.0, opacity))) + if self._segmentation_only and self._volume_nodes is not None: + volume_node = self._volume_nodes.get(SEGM_PRIMARY_CHANNEL) + if volume_node is not None: + volume_node.cmap = colors.labels_lut_vispy_cmap(lut) + volume_node.clim = _labels_overlay_clim(lut) + self._apply_label_overlay_node_style(volume_node) + self._canvas.update() + + def _on_labels_grad_finished(self, *_args) -> None: + # Match 2D updateLabelsCmap → setLut(shuffle=True): permute palette entries. + self._rebuild_3d_labels_lut_from_gradient(shuffle=True) + self._ensure_3d_labels_lut_size() + self._apply_labels_lut_to_segm() + + def _on_labels_bkgr_color_changed(self, *_args) -> None: + if self._3d_lut_rgb is not None: + bkgr = np.asarray( + self._labels_grad.colorButton.color().getRgb()[:3], + dtype=np.uint8, + ) + self._3d_lut_rgb[0] = bkgr + self._3d_labels_lut_rgba = self._labels_rgba_from_lut_rgb(self._3d_lut_rgb) + else: + self._rebuild_3d_labels_lut_from_gradient(shuffle=True) + self._apply_labels_lut_to_segm() + + def _shuffle_3d_labels_lut(self) -> None: + if self._3d_lut_rgb is None or len(self._3d_lut_rgb) < 2: + self._rebuild_3d_labels_lut_from_gradient(shuffle=True) + else: + np.random.shuffle(self._3d_lut_rgb[1:]) + self._3d_labels_lut_rgba = self._labels_rgba_from_lut_rgb(self._3d_lut_rgb) + self._ensure_3d_labels_lut_size() + self._apply_labels_lut_to_segm() + + def _primary_bf_opacity(self) -> float: + bf_opacity, _segm_opacity = _segm_blend_opacities(self._segm_blend) + return bf_opacity def _pg_cmap_to_gradient(self, pg_cmap): table = pg_cmap.getLookupTable(0.0, 1.0, 2) @@ -1076,10 +1248,8 @@ def _rebuild_overlay_controls(self, overlay_entries) -> None: fg = (*fg, 255) lut_item.setGradient(colors.get_pg_gradient((bkgr, fg))) lut_item.sigLookupTableChanged.connect( - partial( - self._on_overlay_lut_changed, - overlay_key=channel_name, - lut_item=lut_item, + lambda *_args, k=channel_name, li=lut_item: ( + self._on_overlay_lut_changed(k, li) ) ) row_layout.addWidget(lut_item) @@ -1091,26 +1261,37 @@ def _rebuild_overlay_controls(self, overlay_entries) -> None: parent=row_widget, normalize_factor=20, ) - opacity_spin.setRange(0.0, 1.0) - opacity_spin.setSingleStep(0.05) - opacity_spin.setDecimals(2) - opacity_spin.setValue(float(opacity)) if kind == OVERLAY_KIND_SEGM: - opacity_spin.setToolTip('Segmentation mask overlay opacity') - label_widget = QLabel('Segmentation opacity:') - row_layout.addWidget(label_widget) - elif kind == OVERLAY_KIND_OL_LABELS: + opacity_spin.setRange(0.0, 100.0) + opacity_spin.setSingleStep(1.0) + opacity_spin.setDecimals(0) + opacity_spin.setValue(float(opacity)) opacity_spin.setToolTip( - f'Opacity for overlay labels ({meta.get("channel_name", "")})' + 'Crossfade brightfield ↔ segmentation (0–100). ' + '0 = 100% brightfield / 0% labels, ' + '40 = 60% brightfield / 40% labels, ' + '100 = 0% brightfield / 100% labels.' ) + label_widget = QLabel('BF ↔ Segm:') + row_layout.addWidget(label_widget) else: - opacity_spin.setToolTip( - f'Opacity for overlay channel {meta.get("channel_name", "")}' - ) + opacity_spin.setRange(0.0, 1.0) + opacity_spin.setSingleStep(0.05) + opacity_spin.setDecimals(2) + opacity_spin.setValue(float(opacity)) + if kind == OVERLAY_KIND_OL_LABELS: + opacity_spin.setToolTip( + f'Opacity for overlay labels ' + f'({meta.get("channel_name", "")})' + ) + else: + opacity_spin.setToolTip( + f'Opacity for overlay channel ' + f'{meta.get("channel_name", "")}' + ) opacity_spin.valueChanged.connect( - partial( - self._on_overlay_opacity_changed, - overlay_key=channel_name, + lambda value, k=channel_name: ( + self._on_overlay_opacity_changed(k, value) ) ) row_layout.addWidget(opacity_spin) @@ -1128,7 +1309,7 @@ def _on_overlay_lut_changed( self.set_overlay_cmap( overlay_key, lut_item.gradient.colorMap(), - sync_main_gui=True, + sync_main_gui=False, ) def _on_overlay_opacity_changed( @@ -1136,11 +1317,18 @@ def _on_overlay_opacity_changed( overlay_key: str, value: float, ) -> None: - if self._syncing_overlay_from_main: + if self._syncing_overlay_from_main or self._syncing_overlay_from_renderer: return - self.set_overlay_opacity(overlay_key, value, sync_main_gui=True) + self.set_overlay_opacity(overlay_key, value, sync_main_gui=False) def _on_lut_changed(self, lut_item: widgets.baseHistogramLUTitem) -> None: + if ( + self._segmentation_only + and lut_item.channel == SEGM_PRIMARY_CHANNEL + ): + return + if self._syncing_primary_lut_from_main: + return ticks = lut_item.gradient.listTicks() ticks_pos = [x for t, x in ticks] min_val = min(ticks_pos) if ticks_pos else 0.0 @@ -1208,6 +1396,7 @@ def _init_ui(self) -> None: box_layout = QVBoxLayout(controls_box) box_layout.setContentsMargins(4, 4, 4, 4) box_layout.addWidget(self._controls) + controls_box.hide() self.scene_layout = QHBoxLayout() @@ -1268,14 +1457,12 @@ def _load_settings(self) -> None: # Restore numeric spinboxes — clamp to widget range so stale values # from older versions don't break the UI. - c._clim_min.setValue( - max(c._clim_min.minimum(), - min(s.value('clim_min', 0.0, type=float), c._clim_min.maximum())) - ) - c._clim_max.setValue( - max(c._clim_max.minimum(), - min(s.value('clim_max', 1.0, type=float), c._clim_max.maximum())) - ) + if self.lut_items and self.channels: + channel = self.channels[0] + lo = max(0.0, min(s.value('clim_min', 0.0, type=float), 1.0)) + hi = max(0.0, min(s.value('clim_max', 1.0, type=float), 1.0)) + if hi > lo: + self.set_clim(lo, hi, channel) c._gamma_spin.setValue( max(c._gamma_spin.minimum(), min(s.value('gamma', 1.0, type=float), c._gamma_spin.maximum())) @@ -1304,11 +1491,12 @@ def _load_settings(self) -> None: min(s.value('plane_thickness', 1.0, type=float), c._plane_thick_spin.maximum())) ) - c._opacity_spin.setValue( - max(c._opacity_spin.minimum(), - min(s.value('opacity', 1.0, type=float), - c._opacity_spin.maximum())) - ) + if self.channels: + channel = self.channels[0] + self.set_opacity( + max(0.0, min(s.value('opacity', 1.0, type=float), 1.0)), + channel=channel, + ) def _save_settings(self) -> None: """Persist current rendering settings so they survive app restarts.""" @@ -1317,8 +1505,12 @@ def _save_settings(self) -> None: c = self._controls s.setValue('mode_idx', c._mode_combo.currentIndex()) s.setValue('interp_idx', c._interp_combo.currentIndex()) - s.setValue('clim_min', c._clim_min.value()) - s.setValue('clim_max', c._clim_max.value()) + if self.lut_items and self.channels: + channel = self.channels[0] + lo, hi = self._get_clim(self._get_lut_item(channel)) + s.setValue('clim_min', lo) + s.setValue('clim_max', hi) + s.setValue('opacity', self._primary_bf_opacity()) s.setValue('gamma', c._gamma_spin.value()) s.setValue('step_size', c._step_spin.value()) s.setValue('smooth_iso', c._smooth_iso_cb.isChecked()) @@ -1326,7 +1518,6 @@ def _save_settings(self) -> None: s.setValue('z_aniso_ratio', c._z_aniso_spin.value()) s.setValue('depict_idx', c._depict_combo.currentIndex()) s.setValue('plane_thickness', c._plane_thick_spin.value()) - s.setValue('opacity', c._opacity_spin.value()) # -- GPU helpers ---------------------------------------------------------- @@ -1374,6 +1565,20 @@ def _downsample(vol: np.ndarray, max_size: int) -> np.ndarray: return vol return np.ascontiguousarray(vol[::strides[0], ::strides[1], ::strides[2]]) + @staticmethod + def _downsample_max_pool(vol: np.ndarray, max_size: int) -> np.ndarray: + """Downsample *vol* preserving any foreground in each block (for masks).""" + strides = tuple(max(1, int(np.ceil(s / max_size))) for s in vol.shape) + if all(s == 1 for s in strides): + return np.ascontiguousarray(vol) + pad_shape = tuple(int(np.ceil(s / st)) * st for s, st in zip(vol.shape, strides)) + padded = np.zeros(pad_shape, dtype=vol.dtype) + padded[: vol.shape[0], : vol.shape[1], : vol.shape[2]] = vol + sz, sy, sx = strides + z, y, x = pad_shape + reshaped = padded.reshape(z // sz, sz, y // sy, sy, x // sx, sx) + return np.ascontiguousarray(reshaped.max(axis=(1, 3, 5))) + def _preprocess_volume( self, volume: np.ndarray, @@ -1449,6 +1654,71 @@ def _preprocess_volume( def _get_lut_item(self, channel_name: str): return self.lut_items[channel_name][0] + + def _primary_channel_name(self) -> str | None: + for channel in self.channels or []: + if not is_overlay_channel(channel): + return channel + return None + + def _set_primary_clim_ticks( + self, + lut_item: widgets.baseHistogramLUTitem, + clim: tuple[float, float], + ) -> None: + lo, hi = clim + low_tick = high_tick = None + max_tick_val = -np.inf + min_tick_val = np.inf + for tick, x in lut_item.gradient.listTicks(): + if x > max_tick_val: + high_tick = tick + max_tick_val = x + if x < min_tick_val: + low_tick = tick + min_tick_val = x + if low_tick is not None and high_tick is not None: + lut_item.gradient.setTickValue(low_tick, lo) + lut_item.gradient.setTickValue(high_tick, hi) + + def apply_primary_lut_from_main( + self, + gradient_state, + clim: tuple[float, float], + ) -> None: + """Apply the main GUI brightfield LUT (gradient + contrast) to 3D.""" + if self._segmentation_only or not self.lut_items: + return + channel = self._primary_channel_name() + if channel is None: + return + lut_item = self._get_lut_item(channel) + self._syncing_primary_lut_from_main = True + try: + lut_item.blockSignals(True) + lut_item.gradient.blockSignals(True) + try: + lut_item.gradient.restoreState(gradient_state) + self._set_primary_clim_ticks(lut_item, clim) + finally: + lut_item.gradient.blockSignals(False) + lut_item.blockSignals(False) + lo, hi = clim + self.set_clim(lo, hi, channel) + self.set_cmap(lut_item) + # LUT-only update: do not touch BF↔Segm crossfade or opacity LUT. + finally: + self._syncing_primary_lut_from_main = False + + def get_primary_lut_state_for_main(self) -> tuple | None: + """Return (gradient saveState, clim) for the primary 3D channel.""" + if self._segmentation_only or not self.lut_items: + return None + channel = self._primary_channel_name() + if channel is None: + return None + lut_item = self._get_lut_item(channel) + return lut_item.gradient.saveState(), self._get_clim(lut_item) def _init_volume_node( self, @@ -1483,9 +1753,7 @@ def _init_volume_node( ) volume_node.gamma = self._controls._gamma_spin.value() - volume_node.opacity = ( - self._controls._opacity_spins[channel_name].value() - ) + volume_node.opacity = self._primary_bf_opacity() volume_node.attenuation = 0.05 if current_mode in _ATTN_MODES: @@ -1532,33 +1800,56 @@ def _init_overlay_volume_node( opacity: float, cmap_spec: str, mode_override: str | None, + *, + is_label_mask: bool = False, ): from vispy.scene import visuals # noqa: PLC0415 primary_mode = self._controls._mode_combo.currentData() or 'mip' - node_mode = mode_override or primary_mode - current_interp = self._controls._interp_combo.currentData() or 'linear' + if is_label_mask: + node_mode = _LABEL_OVERLAY_MODE + else: + node_mode = mode_override or primary_mode + if is_label_mask: + current_interp = _LABEL_VOLUME_INTERP + else: + current_interp = self._controls._interp_combo.currentData() or 'linear' current_step = self._controls._step_spin.value() depict_mode = self._controls._depict_combo.currentData() or 'volume' is_plane = depict_mode in _PLANE_CONFIGS plane_fraction = self._controls._zplane_slider.value() / 100.0 + if is_label_mask: + cmap_spec = self._resolve_label_cmap_spec(cmap_spec) + cmap = _label_overlay_cmap(cmap_spec) + else: + cmap = _volume_cmap_from_spec(cmap_spec) + + clim = _labels_overlay_clim(cmap_spec) if is_label_mask else (0.0, 1.0) + volume_node = visuals.Volume( volume, - clim=(0.0, 1.0), + clim=clim, method=node_mode, - cmap=_volume_cmap_from_spec(cmap_spec), + cmap=cmap, interpolation=current_interp, relative_step_size=current_step, parent=self._view.scene, ) - volume_node.opacity = max(0.0, min(1.0, opacity)) - volume_node.gamma = self._controls._gamma_spin.value() - self._apply_mode_cutoffs_to(volume_node, node_mode, 0.0, 1.0) + if is_label_mask and opacity > 1.0: + _bf_opacity, segm_opacity = _segm_blend_opacities(opacity) + volume_node.opacity = segm_opacity + else: + volume_node.opacity = max(0.0, min(1.0, opacity)) + volume_node.gamma = 1.0 if is_label_mask else self._controls._gamma_spin.value() + if node_mode in _MIP_CUTOFF_MODES: + self._apply_mode_cutoffs_to(volume_node, node_mode, 0.0, 1.0) if node_mode in _ATTN_MODES: volume_node.attenuation = self._controls._attn_spin.value() if node_mode in _ISO_MODES: volume_node.threshold = self._controls._iso_spin.value() + if node_mode in ('translucent', 'additive'): + volume_node.set_gl_state(node_mode, depth_test=False) if is_plane: volume_node.raycasting_mode = 'plane' self._set_plane_uniforms( @@ -1569,9 +1860,38 @@ def _init_overlay_volume_node( ) self._apply_voxel_scale(volume_node) - self._overlay_mode_overrides[channel_name] = mode_override + if is_label_mask: + if opacity > 1.0: + _bf_opacity, segm_opacity = _segm_blend_opacities(opacity) + else: + segm_opacity = max(0.0, min(1.0, float(opacity))) + self._apply_label_overlay_node_style( + volume_node, opacity=segm_opacity + ) + self._overlay_mode_overrides[channel_name] = ( + _LABEL_OVERLAY_MODE if is_label_mask else mode_override + ) return volume_node + def _is_label_overlay_channel(self, channel_name: str) -> bool: + if channel_name in self._label_volumes: + return True + kind = self._overlay_meta.get(channel_name, {}).get('kind') + return kind in (OVERLAY_KIND_SEGM, OVERLAY_KIND_OL_LABELS) + + def _apply_label_overlay_node_style( + self, + volume_node, + *, + opacity: float | None = None, + ) -> None: + volume_node.method = _LABEL_OVERLAY_MODE + volume_node.interpolation = _LABEL_VOLUME_INTERP + volume_node.gamma = 1.0 + if opacity is not None: + volume_node.opacity = max(0.0, min(1.0, float(opacity))) + volume_node.set_gl_state(_LABEL_OVERLAY_MODE, depth_test=False) + def _get_clim(self, lut_item): ticks = lut_item.gradient.listTicks() ticks_pos = [x for t, x in ticks] @@ -1594,6 +1914,142 @@ def _set_cmap( # -- Public API ----------------------------------------------------------- + def _clear_primary_channels(self) -> None: + if not self._volume_nodes: + return + for ch in list(self.channels or []): + if is_overlay_channel(ch): + continue + node = self._volume_nodes.pop(ch, None) + if node is not None: + node.parent = None + if self._volumes_data is not None: + self._volumes_data.pop(ch, None) + self._label_volumes.pop(ch, None) + self._raw_label_volumes.pop(ch, None) + self.channels = [] + + def _apply_segmentation_volume_style( + self, + volume_node=None, + channel: str | None = None, + ) -> None: + channel = channel or SEGM_PRIMARY_CHANNEL + if volume_node is None and self._volume_nodes is not None: + volume_node = self._volume_nodes.get(channel) + if volume_node is None: + return + volume_node.method = _LABEL_OVERLAY_MODE + labels_cmap = self._get_segm_labels_cmap() + if labels_cmap is not None: + volume_node.cmap = colors.labels_lut_vispy_cmap(labels_cmap) + volume_node.clim = _labels_overlay_clim(labels_cmap) + else: + volume_node.cmap = colors.overlay_mask_vispy_cmap('red') + volume_node.clim = (0.0, 1.0) + volume_node.interpolation = _LABEL_VOLUME_INTERP + volume_node.gamma = 1.0 + volume_node.opacity = 1.0 + volume_node.set_gl_state(_LABEL_OVERLAY_MODE, depth_test=False) + + def set_segmentation_volume(self, label_data: np.ndarray) -> None: + """Show only the segmentation mask as the primary 3D volume.""" + if label_data.ndim != 3: + raise ValueError( + f'Expected 3-D (Z, Y, X) label array; got shape {label_data.shape}' + ) + self._segmentation_only = True + channel = SEGM_PRIMARY_CHANNEL + self._clear_primary_channels() + self._store_label_volume(channel, label_data) + labels_cmap = self._get_segm_labels_cmap() + vol = self._overlay_volume_from_labels(channel) + if vol is None: + vol = np.ascontiguousarray( + _labels_for_display(label_data, self._active_cell_id) + ) + cmap_spec = labels_cmap if labels_cmap is not None else 'red' + + if self._volumes_data is None: + self._volumes_data = {} + if self._volume_nodes is None: + self._volume_nodes = {} + + self.channels = [channel] + self._init_ui() + + if self.lut_items is None: + self.scene_layout.addWidget(self._canvas.native, stretch=1) + self._connect_canvas_events() + + self._volume_nodes[channel] = self._init_overlay_volume_node( + vol, + channel, + 1.0, + cmap_spec, + _LABEL_OVERLAY_MODE, + is_label_mask=True, + ) + self._apply_segmentation_volume_style(self._volume_nodes[channel], channel) + self._volumes_data[channel] = vol + self._last_shape = vol.shape + self._last_raw_data = None + + if self._is_set_volumes_first_call: + from vispy import gloo + gloo.set_state(blend=True, depth_test=False) + self._is_set_volumes_first_call = False + + self._apply_voxel_scale(self._volume_nodes[channel]) + self._view.camera.set_range() + self._canvas.update() + + def switch_to_image_volume( + self, + data: np.ndarray, + channel_name: str = 'Channel 1', + ) -> None: + """Replace a segmentation-only view with a normal image primary volume.""" + self._segmentation_only = False + if self._volume_nodes and SEGM_PRIMARY_CHANNEL in self._volume_nodes: + self._volume_nodes[SEGM_PRIMARY_CHANNEL].parent = None + del self._volume_nodes[SEGM_PRIMARY_CHANNEL] + self._label_volumes.pop(SEGM_PRIMARY_CHANNEL, None) + self._raw_label_volumes.pop(SEGM_PRIMARY_CHANNEL, None) + if self._volumes_data is not None: + self._volumes_data.pop(SEGM_PRIMARY_CHANNEL, None) + self.channels = [] + self.lut_items = None + self.set_volume(data, channel_name=channel_name) + + def update_segmentation_volume(self, label_data: np.ndarray) -> None: + """Replace the segmentation-only primary volume.""" + if label_data.ndim != 3: + raise ValueError( + f'Expected 3-D (Z, Y, X) label array; got shape {label_data.shape}' + ) + channel = SEGM_PRIMARY_CHANNEL + if ( + not self._segmentation_only + or self._volume_nodes is None + or channel not in self._volume_nodes + ): + self.set_segmentation_volume(label_data) + return + + self._store_label_volume(channel, label_data) + vol = self._overlay_volume_from_labels(channel) + if vol is None: + vol = np.ascontiguousarray( + _labels_for_display(label_data, self._active_cell_id) + ) + clim = self._label_overlay_clim_for_key(channel) + self._volumes_data[channel] = vol + self._volume_nodes[channel].set_data(vol, clim=clim) + self._apply_segmentation_volume_style(self._volume_nodes[channel], channel) + self._last_shape = vol.shape + self._canvas.update() + def set_volume( self, volume: np.ndarray, @@ -1612,6 +2068,8 @@ def set_volume( self.set_volumes([volume], channel_names) + self._segmentation_only = False + if cmap is None: return @@ -1635,15 +2093,14 @@ def set_volumes( if not isinstance(volumes, dict): if channel_names is None: - keys = [ + channel_names = [ f'Channel {ch_idx+1}' for ch_idx in range(num_volumes) ] - - volumes = dict(zip(keys, volumes)) - channel_names = keys + + volumes = dict(zip(channel_names, volumes)) if cmaps is not None and not isinstance(cmaps, dict): - cmaps = dict(zip(channel_names, volumes)) + cmaps = dict(zip(channel_names, cmaps)) self.channels = list(volumes.keys()) self._init_ui() @@ -1651,10 +2108,11 @@ def set_volumes( if self._volume_nodes is None: self._volume_nodes = {} - if self.lut_items is None: + if not self.lut_items: self._add_lut_items(self.scene_layout) - self.scene_layout.addWidget(self._canvas.native, stretch=1) - self._add_opacity_lut_items(self.scene_layout) + if self._canvas.native.parent() is None: + self.scene_layout.addWidget(self._canvas.native, stretch=1) + self._add_labels_lut_widget(self.scene_layout) self._connect_canvas_events() if cmaps is not None: @@ -1663,12 +2121,12 @@ def set_volumes( for channel, volume in volumes.items(): vol = self._preprocess_volume(volume, channel=channel) - self._volumes_data[channel] = vol - + vol_node = self._init_volume_node( vol, channel, update_canvas=False ) self._volume_nodes[channel] = vol_node + self._volumes_data[channel] = vol self._last_shape = vol.shape if self._is_set_volumes_first_call: @@ -1715,9 +2173,14 @@ def update_volume( if channel_name not in self._volumes_data.keys(): self.set_volume(data, channel_name) - + return + + volume_node = self._volume_nodes.get(channel_name) + if volume_node is None: + self.set_volume(data, channel_name=channel_name) + return + current_mode = self._controls._mode_combo.currentData() or 'mip' - volume_node = self._volume_nodes[channel_name] lut_item = self._get_lut_item(channel_name) @@ -1731,6 +2194,86 @@ def update_volume( self._canvas.update() + def _overlays_match_existing(self, overlays: list[tuple]) -> bool: + if not self._volume_nodes or not overlays: + return False + for index, entry in enumerate(overlays): + _, _, _, _, meta = _parse_overlay_entry(entry, index) + key = overlay_channel_name(index) + if key not in self._volume_nodes: + return False + old_meta = self._overlay_meta.get(key, {}) + if old_meta.get('kind') != meta.get('kind'): + return False + if old_meta.get('channel_name') != meta.get('channel_name'): + return False + expected = {overlay_channel_name(i) for i in range(len(overlays))} + existing = {k for k in self._volume_nodes if is_overlay_channel(k)} + return existing == expected + + def _overlay_volume_from_entry( + self, + entry: tuple, + index: int, + channel_name: str, + ) -> tuple[np.ndarray, object, float, dict]: + data, opacity, cmap_spec, _mode_override, meta = _parse_overlay_entry( + entry, index + ) + if 'label_data' in meta: + self._store_label_volume(channel_name, meta['label_data']) + vol = self._overlay_volume_from_labels(channel_name) + if vol is None: + vol = np.ascontiguousarray( + _labels_for_display( + self._label_volumes[channel_name], + self._active_cell_id, + ) + ) + else: + self._raw_overlay_data[channel_name] = np.ascontiguousarray( + data.astype(np.float32, copy=False) + ) + vol = self._normalize_overlay_volume(data) + return vol, cmap_spec, opacity, meta + + def refresh_overlay_volumes(self, overlays: list[tuple]) -> bool: + """Update overlay textures in place when structure is unchanged.""" + if self._controls is None or not self._overlays_match_existing(overlays): + return False + + self._cached_overlay_entries = list(overlays) + for index, entry in enumerate(overlays): + channel_name = overlay_channel_name(index) + vol, cmap_spec, opacity, meta = self._overlay_volume_from_entry( + entry, index, channel_name + ) + volume_node = self._volume_nodes.get(channel_name) + if volume_node is None: + return False + is_label_mask = 'label_data' in meta + if is_label_mask: + cmap_spec = self._resolve_label_cmap_spec(cmap_spec) + clim = _labels_overlay_clim(cmap_spec) + volume_node.cmap = _label_overlay_cmap(cmap_spec) + volume_node.interpolation = _LABEL_VOLUME_INTERP + volume_node.gamma = 1.0 + self._apply_label_overlay_node_style(volume_node) + else: + clim = (0.0, 1.0) + volume_node.set_data(vol, clim=clim) + volume_node.clim = clim + if not is_label_mask: + volume_node.opacity = max(0.0, min(1.0, float(opacity))) + self._volumes_data[channel_name] = vol + meta.setdefault('overlay_index', index) + meta.setdefault('channel_name', channel_name) + meta['cmap_spec'] = cmap_spec + self._overlay_meta[channel_name] = meta + + self._canvas.update() + return True + def update_overlay_volumes( self, overlays: list[tuple], @@ -1762,11 +2305,14 @@ def update_overlay_volumes( channel_name = overlay_channel_name(index) if 'label_data' in meta: self._store_label_volume(channel_name, meta['label_data']) - data = _mask_labels_for_display( - self._label_volumes[channel_name], - self._active_cell_id, - ) - vol = self._normalize_overlay_volume(data, skip_resample=True) + vol = self._overlay_volume_from_labels(channel_name) + if vol is None: + vol = np.ascontiguousarray( + _labels_for_display( + self._label_volumes[channel_name], + self._active_cell_id, + ) + ) else: self._raw_overlay_data[channel_name] = np.ascontiguousarray( data.astype(np.float32, copy=False) @@ -1775,6 +2321,7 @@ def update_overlay_volumes( self._volumes_data[channel_name] = vol meta.setdefault('overlay_index', index) meta.setdefault('channel_name', channel_name) + meta['cmap_spec'] = cmap_spec self._overlay_meta[channel_name] = meta nodes[channel_name] = self._init_overlay_volume_node( vol, @@ -1782,6 +2329,7 @@ def update_overlay_volumes( opacity, cmap_spec, mode_override, + is_label_mask='label_data' in meta, ) overlay_entries.append( (channel_name, opacity, cmap_spec, mode_override, meta) @@ -1790,6 +2338,13 @@ def update_overlay_volumes( if not preserve_widgets: self._rebuild_overlay_controls(overlay_entries) + for _channel_name, blend, _cmap, _mode, meta in overlay_entries: + if meta.get('kind') == OVERLAY_KIND_SEGM and not preserve_widgets: + self.set_segm_brightfield_blend( + blend, sync_main_gui=False, update_widget=True + ) + break + self._canvas.update() def _overlay_key_from_index(self, index_or_key) -> str | None: @@ -1810,16 +2365,68 @@ def _find_overlay_by_kind(self, kind: str) -> str | None: return key return None + def set_segm_brightfield_blend( + self, + blend_0_to_100: float, + *, + sync_main_gui: bool = False, + update_widget: bool = True, + ) -> None: + """Crossfade primary brightfield vs segmentation (0=BF only, 100=segm only).""" + blend = max(0.0, min(100.0, float(blend_0_to_100))) + if abs(self._segm_blend - blend) < 1e-6: + return + self._segm_blend = blend + bf_opacity, segm_opacity = _segm_blend_opacities(blend) + + primary = self._primary_channel_name() + if primary is not None and self._volume_nodes is not None: + volume_node = self._volume_nodes.get(primary) + if volume_node is not None: + volume_node.opacity = bf_opacity + + key = self._find_overlay_by_kind(OVERLAY_KIND_SEGM) + if key is not None and self._volume_nodes is not None: + volume_node = self._volume_nodes.get(key) + if volume_node is not None: + volume_node.opacity = segm_opacity + if ( + update_widget + and not self._syncing_overlay_from_main + ): + widgets_info = self._overlay_widgets.get(key) + opacity_spin = ( + widgets_info.get('opacity_spin') if widgets_info else None + ) + if opacity_spin is not None: + self._syncing_overlay_from_renderer = True + try: + opacity_spin.blockSignals(True) + opacity_spin.setValue(blend) + opacity_spin.blockSignals(False) + finally: + self._syncing_overlay_from_renderer = False + + self._canvas.update() + def set_overlay_opacity( self, index_or_key, value: float, *, - sync_main_gui: bool = True, + sync_main_gui: bool = False, ) -> None: key = self._overlay_key_from_index(index_or_key) if key is None or self._volume_nodes is None: return + meta = self._overlay_meta.get(key, {}) + if meta.get('kind') == OVERLAY_KIND_SEGM: + self.set_segm_brightfield_blend( + value, + sync_main_gui=sync_main_gui, + update_widget=False, + ) + return volume_node = self._volume_nodes.get(key) if volume_node is None: return @@ -1836,22 +2443,6 @@ def set_overlay_opacity( opacity_spin.blockSignals(False) finally: self._syncing_overlay_from_renderer = False - if sync_main_gui and not self._syncing_overlay_from_main: - meta = self._overlay_meta.get(key, {}) - adapter = self._adapter - if adapter is not None and hasattr( - adapter, 'apply_overlay_control_from_renderer' - ): - kind = meta.get('kind') - channel_name = meta.get('channel_name', '') - if kind == OVERLAY_KIND_SEGM: - adapter.apply_overlay_control_from_renderer( - channel_name, labels_alpha=opacity - ) - else: - adapter.apply_overlay_control_from_renderer( - channel_name, opacity=opacity - ) self._canvas.update() def set_overlay_cmap( @@ -1859,7 +2450,7 @@ def set_overlay_cmap( index_or_key, cmap_spec, *, - sync_main_gui: bool = True, + sync_main_gui: bool = False, ) -> None: key = self._overlay_key_from_index(index_or_key) if key is None or self._volume_nodes is None: @@ -1867,31 +2458,29 @@ def set_overlay_cmap( volume_node = self._volume_nodes.get(key) if volume_node is None: return - volume_node.cmap = _volume_cmap_from_spec(cmap_spec) - if sync_main_gui and not self._syncing_overlay_from_main: - meta = self._overlay_meta.get(key, {}) - adapter = self._adapter - if adapter is not None and hasattr( - adapter, 'apply_overlay_control_from_renderer' - ): - kind = meta.get('kind') - if kind == OVERLAY_KIND_FLUO: - gradient_state = None - widgets_info = self._overlay_widgets.get(key) - lut_item = widgets_info.get('lut_item') if widgets_info else None - if lut_item is not None: - gradient_state = lut_item.gradient.saveState() - adapter.apply_overlay_control_from_renderer( - meta.get('channel_name', ''), - gradient_state=gradient_state, - ) + is_label_mask = ( + key in self._label_volumes + or self._overlay_meta.get(key, {}).get('kind') + in (OVERLAY_KIND_SEGM, OVERLAY_KIND_OL_LABELS) + ) + if is_label_mask: + volume_node.cmap = _label_overlay_cmap(cmap_spec) + if _is_labels_lut_spec(cmap_spec): + volume_node.clim = _labels_overlay_clim(cmap_spec) + meta = self._overlay_meta.setdefault(key, {}) + meta['cmap_spec'] = cmap_spec + self._apply_label_overlay_node_style(volume_node) + elif isinstance(cmap_spec, str): + volume_node.cmap = _volume_cmap_from_spec(cmap_spec) + else: + volume_node.cmap = _volume_cmap_from_spec(cmap_spec) self._canvas.update() def set_segm_overlay_opacity( self, value: float, *, - sync_main_gui: bool = True, + sync_main_gui: bool = False, ) -> None: key = self._find_overlay_by_kind(OVERLAY_KIND_SEGM) if key is None: @@ -1914,6 +2503,9 @@ def set_rendering_mode(self, mode: str) -> None: for channel, volume_node in self._volume_nodes.items(): if is_overlay_channel(channel): + if self._is_label_overlay_channel(channel): + self._apply_label_overlay_node_style(volume_node) + continue if self._overlay_mode_overrides.get(channel) is not None: continue volume_node.method = mode @@ -1924,6 +2516,10 @@ def set_rendering_mode(self, mode: str) -> None: volume_node.attenuation = self._controls._attn_spin.value() continue + if self._segmentation_only and channel == SEGM_PRIMARY_CHANNEL: + self._apply_segmentation_volume_style(volume_node, channel) + continue + lut_item = self._get_lut_item(channel) volume_node.method = mode ticks_pos = [x for t, x in lut_item.gradient.listTicks()] @@ -1938,6 +2534,10 @@ def set_rendering_mode(self, mode: str) -> None: self._canvas.update() def set_clim(self, lo: float, hi: float, channel: str) -> None: + if self._segmentation_only and channel == SEGM_PRIMARY_CHANNEL: + return + if self._is_label_overlay_channel(channel): + return volume_node = self._volume_nodes.get(channel, None) if volume_node is None: return @@ -1948,8 +2548,12 @@ def set_clim(self, lo: float, hi: float, channel: str) -> None: self._canvas.update() def set_cmap(self, lut_item: widgets.baseHistogramLUTitem): - cmap = colors.pg_to_vispy_cmap(lut_item.gradient.colorMap()) channel = lut_item.channel + if self._segmentation_only and channel == SEGM_PRIMARY_CHANNEL: + return + if self._is_label_overlay_channel(channel): + return + cmap = colors.pg_to_vispy_cmap(lut_item.gradient.colorMap()) volume_node = self._volume_nodes.get(channel, None) if volume_node is None: return @@ -2021,7 +2625,10 @@ def auto_contrast_percentile( def set_gamma(self, value: float) -> None: if not self._has_volume_nodes(): return - for volume_node in self._each_volume_node(): + for channel, volume_node in self._volume_nodes.items(): + if self._is_label_overlay_channel(channel): + volume_node.gamma = 1.0 + continue volume_node.gamma = value self._canvas.update() @@ -2040,8 +2647,6 @@ def set_opacity(self, value: float, channel: str | None = None) -> None: return volume_node.opacity = max(0.0, min(1.0, value)) - if channel is not None: - self._sync_opacity_lut_value(channel, volume_node.opacity) self._canvas.update() def set_iso_threshold(self, value: float) -> None: @@ -2064,9 +2669,12 @@ def set_interpolation(self, method: str) -> None: """Set 3D volume interpolation method (e.g. 'linear', 'nearest', 'catrom').""" if self._volume_nodes is None: return - for volume_node in self._volume_nodes.values(): - volume_node.interpolation = method - + for channel, volume_node in self._volume_nodes.items(): + if self._is_label_overlay_channel(channel): + volume_node.interpolation = _LABEL_VOLUME_INTERP + else: + volume_node.interpolation = method + self._canvas.update() def set_depiction(self, mode: str) -> None: @@ -2187,6 +2795,18 @@ def _rerender(self) -> None: def _rerender_all(self) -> None: """Re-process primary and overlay volumes from cached raw data.""" + if self._segmentation_only: + channel = SEGM_PRIMARY_CHANNEL + raw_labels = self._raw_label_volumes.get(channel) + if raw_labels is not None: + self.update_segmentation_volume(raw_labels) + if self._cached_overlay_entries: + self.update_overlay_volumes( + self._cached_overlay_entries, + preserve_widgets=True, + ) + return + if self._raw_volumes_data: for channel_name, raw in self._raw_volumes_data.items(): self.update_volume(raw, channel_name=channel_name) diff --git a/renderer3d_snapshot4.png b/renderer3d_snapshot4.png new file mode 100644 index 0000000000000000000000000000000000000000..1de3f6ff2aa74aef2a46d657ebda043190353411 GIT binary patch literal 409141 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

Z_tGbG%u9WL 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 !CdlRRh($yc#WO4_NoP`Xo) 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 -9oAqm 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 l{wM+8|Nn=Eo7>@Al98k!o4f&edLqK7rUHCb@t Date: Tue, 26 May 2026 01:14:52 +0200 Subject: [PATCH 8/8] Remove accidental 3D renderer snapshot from the repo. Co-authored-by: Cursor --- renderer3d_snapshot4.png | Bin 409141 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 renderer3d_snapshot4.png diff --git a/renderer3d_snapshot4.png b/renderer3d_snapshot4.png deleted file mode 100644 index 1de3f6ff2aa74aef2a46d657ebda043190353411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409141 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

Z_tGbG%u9WL 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 !CdlRRh($yc#WO4_NoP`Xo) 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 -9oAqm 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 l{wM+8|Nn=Eo7>@Al98k!o4f&edLqK7rUHCb@t