private void DSApictureBox_MouseDown(object sender, MouseEventArgs e) { if (drawLine) { start = new PointF(e.X,e.Y); start = LineAlgorithm.Control2Image(matrix,start); if (list1.Count == 0) { addLine1 = true; } else { addLine1 = false; } } if ((Control.ModifierKeys & Keys.Control) == Keys.Control) { if (e.Button == MouseButtons.Left) { isZooming = true; } else { isZooming = false; } if (e.Button == MouseButtons.Right) { isPanning = true; } else { isPanning = false; } startPoint = new System.Drawing.Point(e.X, e.Y); drawLine = false; } } private void DSApictureBox_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && drawLine) { end = new PointF(e.X,e.Y); end = LineAlgorithm.Control2Image(matrix,end); if (addLine1) { list1.Add(end); } else { list2.Add(end); cursorToolStripMenuItem.Enabled = true; } DSApictureBox.Refresh(); } if (startPoint.HasValue && drawLine == false) { int diffX = e.X - startPoint.Value.X; int diffY = e.Y - startPoint.Value.Y; //Console.WriteLine(string.Format("DiffX {0} DiffY {1}", diffX, diffY)); if (isPanning) { PointF p1 = new PointF(startPoint.Value.X, startPoint.Value.Y); PointF p2 = new PointF(e.X, e.Y); Console.WriteLine(string.Format("p1 {0} {1}", p1.X, p1.Y)); Console.WriteLine(string.Format("p2 {0} {1}", p2.X, p2.Y)); matrix.Invert(); var pts = new PointF[] { p1, p2 }; matrix.TransformPoints(pts); Console.WriteLine(string.Format("p1 {0} {1}", pts[0].X, pts[0].Y)); Console.WriteLine(string.Format("p2 {0} {1}", pts[1].X, pts[1].Y)); matrix.Invert(); matrix.Translate(pts[1].X - pts[0].X, pts[1].Y - pts[0].Y); } if (isZooming) { matrix.Scale((300 + diffX) / 300f, (300 + diffX) / 300f); } startPoint = new System.Drawing.Point(e.X, e.Y); DSApictureBox.Refresh(); } }