public void ZoomToFit(double margin = 10) { var selectedNodes = SelectedModels.Where(s => s is NodeModel).Select(s => (NodeModel)s).ToList(); if (selectedNodes.Count == 0 && _nodes.Count == 0) { return; } (var minX, var maxX, var minY, var maxY) = GetNodesRect(selectedNodes); var width = maxX - minX + 2 * margin; var height = maxY - minY + 2 * margin; minX -= margin; minY -= margin; var xf = Container.Width / width; var yf = Container.Height / height; Zoom = Math.Min(xf, yf); var nx = Container.Left + Pan.X + minX * Zoom; var ny = Container.Top + Pan.Y + minY * Zoom; Pan = Pan.Add(Container.Left - nx, Container.Top - ny); Refresh(); }
public void UpdatePan(double deltaX, double deltaY) { Pan = Pan.Add(deltaX, deltaY); PanChanged?.Invoke(); Refresh(); }