diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs index 4fcbcf94b7de6a50415541a35844d7ef4d5e9f7e..0ee1b861e177f8369cf753b9140422b2cc4011cf 100644 --- a/src/ui/panes/pid_drawing_tool.rs +++ b/src/ui/panes/pid_drawing_tool.rs @@ -275,7 +275,7 @@ impl PidPane { let points: Vec<Vec2> = self .elements .iter() - .map(|e| e.position()) + .map(|e| e.center()) .chain(self.connections.iter().flat_map(|conn| conn.points())) .collect(); @@ -303,8 +303,7 @@ impl PidPane { .unwrap(); let max = Vec2::new(max_x, max_y); - let center_g = (min + max) / 2.0; - self.grid.zero_pos = ui_center - center_g * self.grid.size(); + self.grid.zero_pos = ui_center - min.midpoint(max) * self.grid.size(); } fn handle_zoom(&mut self, ui: &Ui, theme: Theme, pointer_pos: Vec2) { diff --git a/src/ui/panes/pid_drawing_tool/elements.rs b/src/ui/panes/pid_drawing_tool/elements.rs index e3748a197fb3831d392aa7da02f5895c8a24e96c..7db6c7239208c62e83a4dcf92e0cd17ec43bb63f 100644 --- a/src/ui/panes/pid_drawing_tool/elements.rs +++ b/src/ui/panes/pid_drawing_tool/elements.rs @@ -108,9 +108,9 @@ impl Element { self.symbol.size() } - /// Position of the element's top-left corner - pub fn position(&self) -> Vec2 { - self.position + /// Position of the element's center in grid frame + pub fn center(&self) -> Vec2 { + self.position + Mat2::from_angle(self.rotation) * self.size() * 0.5 } pub fn draw(&self, grid: &GridInfo, ui: &Ui, theme: Theme) {