1- from typing import Union
1+ from typing import List , Union
22
33import dask .array as da
44import numpy as np
5- from napari .layers import Image , Labels
5+ from napari .layers import Image , Labels , Layer , Points , Shapes
6+ from napari .utils .events import Event
7+
8+ _selectable_layers = [
9+ Labels ,
10+ Points ,
11+ # TODO: Shapes support is planned for future implementation; currently excluded from selectable layers due to incomplete support.
12+ ]
613
714
815def _get_unique_values (layer : Union [Image , Labels ]) -> np .ndarray :
@@ -29,3 +36,45 @@ def _get_unique_values(layer: Union[Image, Labels]) -> np.ndarray:
2936 unique_values = da .unique (data ).compute ()
3037
3138 return unique_values
39+
40+
41+ def _is_selectable_layer (layer : Layer ) -> bool :
42+ """
43+ Check if the layer is selectable.
44+ """
45+ if type (layer ) in _selectable_layers :
46+ return True
47+ return False
48+
49+
50+ def _get_selected_objects (layer : Layer ) -> List [int ]:
51+ """
52+ Retrieve id of selected object on napari canvas
53+ """
54+ if not _is_selectable_layer (layer ):
55+ raise TypeError (
56+ f"Layer type { type (layer )} is not supported for selection."
57+ )
58+
59+ if isinstance (layer , Points ):
60+ return list (layer .selected_data )
61+ elif isinstance (layer , Labels ):
62+ return [layer .selected_label ]
63+ elif isinstance (layer , Shapes ):
64+ return list (layer .selected_data )
65+
66+
67+ def _get_selection_event (layer : Layer ) -> Event :
68+ """
69+ Get the selection event for the layer.
70+ """
71+ if not _is_selectable_layer (layer ):
72+ raise TypeError (
73+ f"Layer type { type (layer )} is not supported for selection events."
74+ )
75+ if isinstance (layer , Points ):
76+ return layer .selected_data .events .items_changed
77+ elif isinstance (layer , Labels ):
78+ return layer .events .selected_label
79+ elif isinstance (layer , Shapes ):
80+ return layer .events .highlight
0 commit comments