ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

C# 画像にラインを引く際にShiftキーで垂直/水平に補正する

前回の記事の続き。
effect.hatenablog.com

色んなツールで定番の機能として、ラインを引く際にShiftキーを押せば縦または横に真っすぐになるよう補正されるというのがあります。
それを取り入れてみました。

f:id:moko_03_25:20200308032744g:plain

考え方としては、開始位置と終了位置の長さを出して「Math.Abs」関数で絶対値にしてXとYを比較して、Xの方が大きければ横線・Yの方が大きければ縦線と判断して補正してあげます。

// マウスドラッグ中
private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
	// マウスの左ボタンが押されている場合のみ処理
	if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
	{
		// Shiftキーが押されていれば直線にする
		if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
		{
			// 比較のためにXとYの移動距離を算出
			int checkPosX = Math.Abs(cursorPos().X - startPoint.X);
			int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y);

			// XとYのどちらが長いか比較する
			if (checkPosX >= checkPosY) // 横長の場合
			{
				// 座標を取得
				endPoint.X = cursorPos().X;
				endPoint.Y = startPoint.Y;
			}
			else // 縦長の場合
			{
				// 座標を取得
				endPoint.X = startPoint.X;
				endPoint.Y = cursorPos().Y;
			}
		}
		else
		{
			// 座標を取得
			endPoint.X = cursorPos().X;
			endPoint.Y = cursorPos().Y;
		}

		// 描画
		DrawLine(startPoint, endPoint);
	}
}