1717from shapely import Polygon
1818from spatialdata import get_element_annotators , get_element_instances
1919from spatialdata ._core .query .relational_query import _left_join_spatialelement_table
20+ from spatialdata ._types import ArrayLike
2021from spatialdata .models import PointsModel , ShapesModel , TableModel , force_2d , get_channels
2122from spatialdata .transformations import Affine , Identity
2223from spatialdata .transformations ._utils import scale_radii
@@ -162,13 +163,13 @@ def _write_element_to_disk(
162163 element : tuple [DaskDataFrame | GeoDataFrame | AnnData ],
163164 overwrite : bool ,
164165 ) -> None :
165- if sdata .is_backed :
166- self ._delete_from_disk (sdata , element_name , overwrite )
167- sdata [element_name ] = element
168- sdata .write_element (element_name )
169- else :
170- sdata [element_name ] = element
171- logger .warning ("Spatialdata object is not stored on disk, could only add element in memory ." )
166+ # if sdata.is_backed:
167+ # self._delete_from_disk(sdata, element_name, overwrite)
168+ # sdata[element_name] = element
169+ # sdata.write_element(element_name)
170+ # else:
171+ sdata [element_name ] = element
172+ logger .warning ("Annotations only added in memory, please manually save to disk ." )
172173
173174 def _save_points_to_sdata (
174175 self , layer_to_save : Points , spatial_element_name : str | None , overwrite : bool
@@ -188,6 +189,8 @@ def _save_points_to_sdata(
188189 swap_data = swap_data [:, :2 ]
189190 parsed = PointsModel .parse (swap_data , transformations = transformation )
190191
192+ # saving to disk of points temporarily disabled until the interface update that will unify the view widget,
193+ # annotation widget and scatterplot widget
191194 self ._write_element_to_disk (sdata , spatial_element_name , parsed , overwrite )
192195
193196 return parsed , coordinate_system
@@ -248,7 +251,18 @@ def _save_shapes_to_sdata(
248251 if len (layer_to_save .data ) == 0 :
249252 raise ValueError ("Cannot export a shapes element with no shapes" )
250253
251- polygons : list [Polygon ] = [Polygon (i ) for i in _transform_coordinates (layer_to_save .data , f = lambda x : x [::- 1 ])]
254+ coords = [
255+ np .array ([layer_to_save .data_to_world (xy ) for xy in shape ._data ])
256+ for shape in layer_to_save ._data_view .shapes
257+ ]
258+
259+ def _fix_coords (coords : ArrayLike ) -> ArrayLike :
260+ remove_z = coords .shape [1 ] == 3
261+ first_index = 1 if remove_z else 0
262+ coords = coords [:, first_index ::]
263+ return np .fliplr (coords )
264+
265+ polygons : list [Polygon ] = [Polygon (_fix_coords (p )) for p in coords ]
252266 gdf = GeoDataFrame ({"geometry" : polygons })
253267
254268 force_2d (gdf )
@@ -600,6 +614,7 @@ def get_sdata_shapes(self, sdata: SpatialData, key: str, selected_cs: str, multi
600614 name = key ,
601615 affine = affine ,
602616 shape_type = "polygon" ,
617+ face_color = "#00000000" ,
603618 metadata = {
604619 "sdata" : sdata ,
605620 "adata" : adata ,
0 commit comments