マウスホイールを使用してピクチャーボックスを拡大しようとしています。次の変数を使用します。
public static int offsetX = 0;
public static int offsetY = 0;
public static double scale = .05;
一連のポリゴンを画像ボックスに描画します。ただし、左下隅が0を参照するようにしたかったので、すべてを-yでフォームに描画します。描画されたポイントは上記の変数の影響を受けていますが、実際のポイントは同じままです。
void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
scale += .025;
else
scale -= .025;
pictureBox1.Invalidate();
}
マウスホイールを前方に動かすと、スケール変数が大きくなり、ボックスが更新されます。ピクチャーボックスのペイントメソッドで次のコードを使用して再ペイントされます。
Graphics g = e.Graphics;
foreach (Member m in activeTruss.members)
{
if (m.Visible == true)
{
Point[] pointArray = new Point[m.poly.Points.Count()];
int index = 0;
foreach (System.Windows.Point p in m.poly.Points)
{
pointArray[index].X = (int)((p.X + offsetX) * scale);
pointArray[index].Y = (int)-((p.Y + offsetY) * scale);
index++;
}
SolidBrush myBrush = new SolidBrush(m.color);
g.FillPolygon(myBrush, pointArray);
}
}
正しい量をズームしますが、オフセットが同じままであるため、左上隅に向かってズームしているように見えます。ズームアウトする場合は、逆になります。マウスの下のポイントに直接ズームするために、マウスホイールを回すときにオフセットを編集するにはどうすればよいですか?