C#3D立方体ワイヤーフレーム (第4回) for VS2013 Express
4回目
CThreeD.cs C#3D立方体ワイヤーフレーム (第1回) for VS2013 Express
CBond.cs C#3D立方体ワイヤーフレーム (第2回) for VS2013 Express
CRubic.cs C#3D立方体ワイヤーフレーム (第3回) for VS2013 Express
Form1.cs C#3D立方体ワイヤーフレーム (第4回) for VS2013 Express
今回は、1回~3回目で作成したクラスを使用します。
C#グラフィック コッホ曲線 for VS2013 Expressで作成したのを流用します。
コモンコントロールより
button1と、picturebox1とtextbox1、textbox2を追加
してペタペタ貼り付けて下さい。
コモンコントロールの使い方が分からない方は
Windowsアプリを作成してみよう for VS2015 Express for Desktop C#
を参照して下さいね。
こんな感じ。
Form1 クラス
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { CRubic m_pRubic;// = new CRubic(); bool nFlags = false; public Form1() { //int scale = int.Parse(textBox2.Text); m_pRubic = new CRubic(600); InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ondraw(); } void ondraw() { //描画先とするImageオブジェクトを作成する Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height); //ImageオブジェクトのGraphicsオブジェクトを作成する Graphics gra = Graphics.FromImage(canvas); //Penオブジェクトの作成(幅1の黒色) //(この場合はPenを作成せずに、Pens.Blackを使っても良い) Pen pen = new Pen(Color.Blue, 1); //立方体 int scale = int.Parse(textBox2.Text); m_pRubic.DrawRubic(gra, pen, scale); pen.Dispose(); gra.Dispose(); //PictureBox1に表示する pictureBox1.Image = canvas; } private void pictureBox1_Click(object sender, EventArgs e) { } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { Point point = new Point(); point.X = e.X; point.Y = e.Y; if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { nFlags = true; m_pRubic.SetClickPoint(point); } else if ((e.Button & MouseButtons.Right) == MouseButtons.Right) { nFlags = true; m_pRubic.SetClickPoint(point); } ondraw(); } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { Point point = new Point(); point.X = e.X; point.Y = e.Y; if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { nFlags = false; } else if ((e.Button & MouseButtons.Right) == MouseButtons.Right) { nFlags = false; } ondraw(); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { Point point = new Point(); point.X = e.X; point.Y = e.Y; if (nFlags && (e.Button & MouseButtons.Left) == MouseButtons.Left) { m_pRubic.TurnViewPoint(point); ondraw(); } else if (nFlags && (e.Button & MouseButtons.Right) == MouseButtons.Right) { m_pRubic.MoveCubes(point); ondraw(); } } } }
void ondraw()
{
//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics gra = Graphics.FromImage(canvas);
//Penオブジェクトの作成(幅1の黒色)
//(この場合はPenを作成せずに、Pens.Blackを使っても良い)
Pen pen = new Pen(Color.Blue, 1);
//立方体
int scale = int.Parse(textBox2.Text);
m_pRubic.DrawRubic(gra, pen, scale);
pen.Dispose();
gra.Dispose();
//PictureBox1に表示する
pictureBox1.Image = canvas;
}
ondraw()関数はよく使われるので関数化した。
//立方体
int scale = int.Parse(textBox2.Text);
m_pRubic.DrawRubic(gra, pen, scale);
の部分以外は同じ使い回し。
textBox2で、スケール情報をもたせた。
イベント
pictureBox1上で、マウスがクリックされた情報を取得し
それを、今まで作ったクラスに渡してpictureBox1に描画しています。
なので、pictureBox1上でマウスがクリックされた、動いた、
ボタンが離されたという情報を以下の関数で取得しています。
pictureBox1_MouseDown ・・・pictureBox1上マウスがクリックされた
pictureBox1_MouseUp ・・・pictureBox1上マウスがクリックから離された
pictureBox1_MouseMove ・・・pictureBox1上マウスをクリックしたまま動いた
この関数名は覚える必要はありません。
以下のやり方で自動生成しています。
エディタ上で、右クリックしてプロパティをクリックすると
以下のような画面が表示されます。雷マークみたいをクリックします。
雷マークをクリックすると
このpictureBox1で拾えるイベント一覧が表示されます。
この中の
pictureBox1_MouseDown ・・・マウスがクリックされたとき
pictureBox1_MouseUp ・・・マウスがクリックから離されたとき
pictureBox1_MouseMove ・・・マウスをクリックしたまま動したとき
のそれぞれをWクリックすると、ソースが自動で追加されます。
それを編集することになります。
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Point point = new Point();
point.X = e.X;
point.Y = e.Y;
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
nFlags = true;
m_pRubic.SetClickPoint(point);
}
else if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
{
nFlags = true;
m_pRubic.SetClickPoint(point);
}
ondraw();
}
左マウスがクリックされた時、m_pRubic.SetClickPoint( point );が処理される。
左マウスが離された時、nFlags がtrue;になる。
右マウスがクリックされた時、m_pRubic.SetClickPoint( point );が処理される。
右マウスが離された時、nFlags がtrueになる。
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
Point point = new Point();
point.X = e.X;
point.Y = e.Y;
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
nFlags = false;
}
else if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
{
nFlags = false;
}
ondraw();
}
左マウスが離された時、nFlags がfalse;になる。
右マウスが離された時、nFlags がfalse;になる。
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Point point = new Point();
point.X = e.X;
point.Y = e.Y;
if (nFlags && (e.Button & MouseButtons.Left) == MouseButtons.Left)
{
m_pRubic.TurnViewPoint( point );
ondraw();
}
else if (nFlags && (e.Button & MouseButtons.Right) == MouseButtons.Right)
{
m_pRubic.MoveCubes(point);
ondraw();
}
}
左マウスがクリックされた状態で動いた時、m_pRubic.TurnViewPoint( point );が処理される。
右マウスがクリックされた状態で動いた時、m_pRubic.MoveCubes( point );が処理される。
このイベントという概念は、C#だけのものではなく他の言語にもあります。
Windowsだけでなく、Linuxにもあり、似たり寄ったりなので
こういうもんだと思って頂ければよいかと思います。
終わり。
作って覚えるVisual C# 2015 デスクトップアプリ入門
- 作者: 荻原裕之,宮崎昭世
- 出版社/メーカー: 秀和システム
- 発売日: 2016/01/29
- メディア: 単行本
- この商品を含むブログ (1件) を見る
猫でもわかるC#プログラミング 第3版 (猫でもわかるプログラミング)
- 作者: 粂井康孝
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/27
- メディア: 単行本
- この商品を含むブログ (2件) を見る