ここまで来れば、PictureBoxの中に縦又は横の直線を描いて、マウスの動きに合わせて動かすのは難しいことではありません。出口はもうすぐです。
前回作成したpictureBox1_Paint()メソッドにおいて、X軸に垂直な平面で輪切りにするモードか、Y軸に垂直な平面で輪切りにするモードかを判定し、X軸に垂直な平面で輪切りにする場合は縦向きの直線を横に、Y軸に垂直な平面で輪切りにする場合は横向きの直線を縦に平行移動するようにすればよいです。
以下のようなコードになりました。
/* *ペイントイベントが発生したときに、直線を描画する */ private void pictureBox1_Paint(object sender, PaintEventArgs e) { //Brush brush = new SolidBrush(Color.White); //ここに図形を描く処理を追加すると、マウスの動きに合わせてその図形が動いてくれるようになる。 //e.Graphics.FillEllipse(brush, pt.X, pt.Y, size.Width, size.Height); Pen whitePen = new Pen(Color.FromArgb( 255, 255, 255), 1); if (button1_on && !button2_on ) { e.Graphics.DrawLine(whitePen, pt2.X, 0, pt2.X, this.pictureBox1.Size.Height); } else if( button2_on && !button1_on ) { e.Graphics.DrawLine(whitePen, 0, pt2.Y, this.pictureBox1.Size.Width, pt2.Y); } else { } }
まず、線を描くためのペンの設定をします。色をColor.FromArgb(255,255,255)で白に設定し、幅を1ピクセルに指定しています。
次に、ボタンの状態を保持している変数button1_onとbutton2_onを読んで、
- button1が有効、button2が無効の場合は、(X座標, 0)と(X座標, pictureBox1の高さ)の2点を結ぶ直線を描画
- button1が無効、button2が有効の場合は、(0, Y座標)と(pictureBox2の幅, Y座標)の2点を結ぶ直線を描画
と言う処理をしています。動作の様子を示します。
これで、輪切りする場所の指定がとてもわかりやすくなったと思います。
今回をもって、必要な機能は全て盛り込んだことになります。完成です。下のアニメーションgifのような動きをします。
このプログラムのプロジェクトフォルダー全体(ただしコンパイル済みバイナリーを除く)をここに置きますので、ご興味があればご覧になって下さい。
ビルド、動作環境はWindows10(64bit) + Visual Studio 2017 Communityエディションを2011年型Mac Book Pro 13上のmacOS High Sierra上のParallels Desktop13上で動作させたものです。
なお、このプログラムは筆者がC#の学習を進めながら作り上げたものです。ご利用はあくまでも学習用、参考用に留めてください。内容は無保証です。ご質問には可能な限りお答えいたしますが、お時間を頂く場合もあります。
今回はここまでにします。
0 件のコメント:
コメントを投稿
コメントを頂ければ幸いです。