diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs index 16e04b3a20ad8c8e175b552dfc3394929315ebcf..a2354bee5a9e231f0881f58cdee8896439c5dc9a 100644 --- a/src/ui/panes/pid_drawing_tool.rs +++ b/src/ui/panes/pid_drawing_tool.rs @@ -424,10 +424,25 @@ impl PidPane { fn center(&mut self, ui: &Ui) { let ui_center = ui.max_rect().center(); - let elements_center = self.elements.iter().fold(Vec2::ZERO, |acc, e| { - acc + e.position.to_relative_pos2(&self.grid).to_vec2() - }) / self.elements.len() as f32; + let points: Vec<Pos> = self + .elements + .iter() + .map(|e| e.position.clone()) + .chain( + self.connections + .iter() + .flat_map(|conn| conn.middle_points.clone()), + ) + .collect(); + + let min_x = points.iter().map(|p| p.x).min().unwrap(); + let max_x = points.iter().map(|p| p.x).max().unwrap(); + let min_y = points.iter().map(|p| p.y).min().unwrap(); + let max_y = points.iter().map(|p| p.y).max().unwrap(); + + let pid_center = + Pos::new((max_x + min_x) / 2, (max_y + min_y) / 2).to_relative_pos2(&self.grid); - self.grid.zero_pos = ui_center - elements_center; + self.grid.zero_pos = ui_center - pid_center.to_vec2(); } } diff --git a/src/ui/panes/pid_drawing_tool/pos.rs b/src/ui/panes/pid_drawing_tool/pos.rs index 2a85b4b7dadb1a39174e33a87f816a65766407c3..88178616c6a12ac969c3c89fbeb8642009026d33 100644 --- a/src/ui/panes/pid_drawing_tool/pos.rs +++ b/src/ui/panes/pid_drawing_tool/pos.rs @@ -10,6 +10,10 @@ pub struct Pos { } impl Pos { + pub fn new(x: i32, y: i32) -> Self { + Self { x, y } + } + pub fn add_size(&self, size: i32) -> Self { Self { x: self.x + size,