From f05e263642d6a79e8af0194433f2377382cb792b Mon Sep 17 00:00:00 2001
From: Andi Gerken <andi.gerken@gmail.com>
Date: Fri, 21 Mar 2025 16:45:49 +0100
Subject: [PATCH] Changed arcs to wedges for better display of zones

---
 src/robofish/io/file.py                  |  17 +++++++++++++----
 tests/resources/valid_couzin_params.hdf5 | Bin 33648 -> 33648 bytes
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/robofish/io/file.py b/src/robofish/io/file.py
index c45bb74..cc267cb 100644
--- a/src/robofish/io/file.py
+++ b/src/robofish/io/file.py
@@ -1099,6 +1099,7 @@ class File(h5py.File):
 
         zones = []
         if render_zones:
+            fovs = []
             for ei, e in enumerate(self.entities):
                 zone_sizes_str = get_zone_sizes_from_model_str(self.attrs.get("guppy_model_rollout", ""))
                 zone_sizes_attrs = get_zone_sizes_from_attrs(e)
@@ -1110,10 +1111,14 @@ class File(h5py.File):
                 fov = zone_sizes.get("fov", np.pi*2)
                 fov = np.rad2deg(fov)
                 zone_sizes.pop("fov", None)
+                fovs.append(fov)
                 
                 entity_zones = []
                 for zone_size in zone_sizes.values():
-                    entity_zones.append(matplotlib.patches.Arc((0,0), zone_size, zone_size, angle=0, theta1=-fov/2, theta2=fov/2, color=fish_colors[ei], alpha=0.3, fill=False))
+                    if fov >= 360:
+                        entity_zones.append(matplotlib.patches.Circle((0, 0), zone_size, color=fish_colors[ei], alpha=0.3, fill=False))
+                    else:
+                        entity_zones.append(matplotlib.patches.Wedge((0,0), zone_size, theta1=-fov/2, theta2=fov/2, color=fish_colors[ei], alpha=0.3, fill=False))
                 zones.append(entity_zones)
                 
         zones_flat = []
@@ -1391,11 +1396,15 @@ class File(h5py.File):
                 poses_trails = entity_poses[:, max(0, file_frame - trail) : file_frame]
                 for i_entity in range(n_entities):
                     for zone in zones[i_entity]:
-                        zone.center = (
+    
+                        zone.set_center((
                             this_pose[i_entity, 0],
                             this_pose[i_entity, 1],
-                        )
-                        zone.angle = this_pose[i_entity, 2] * 180 / np.pi
+                        ))
+                        if fovs[i_entity] < 360:
+                            ori_deg = np.rad2deg(this_pose[i_entity, 2])
+                            zone.theta1 = ori_deg  - fovs[i_entity] / 2
+                            zone.theta2 = ori_deg + fovs[i_entity] / 2
 
                 if render_swarm_center:
                     swarm_center[0].set_offsets(swarm_center_position[file_frame])
diff --git a/tests/resources/valid_couzin_params.hdf5 b/tests/resources/valid_couzin_params.hdf5
index e8c7ef32b4b929f0db806dadbfd266ab1eaca66b..506cdd1ae9df5a0438b2bcec9b47ffc016037515 100644
GIT binary patch
delta 63
zcmey+#`K|$X@db5qtN7qoZ^halN~w58AZTsQ4o8w0T%~T0q<r<t~B0F5+)jqBAZPe
O&YLodZe}gZ<^=#Qv=F5L

delta 39
vcmey+#`K|$X@ddR<Oy6HOc!`J8zvv)-6Ub6!6>lV)Zx4-qu^%NvTR-eA}|dk

-- 
GitLab