プログラムと政治とオカルトと戯れ言
C#3D立方体ワイヤーフレーム マウスの座標渡し(第3回) for VS2013 Express CThreeD.cs → C#3D立方体ワイヤーフレーム 序(第1回) for VS2013 Express
CRubic.cs → C#3D立方体ワイヤーフレーム マウスの座標渡し(第3回) for VS2013 Express
Form1.cs → C#3D立方体ワイヤーフレーム 終(第4回) for VS2013 Express CRubicクラス using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
class CRubic
{
private Vertex m_ViewVertex;
private Polar m_ViewPolar = new Polar();
private CThreeD m_pThreeD;
private int m_scale;
Polar m_OldViewPolar = new Polar();
Point m_ClickPoint = new Point();
private CBond[] m_pBond = new CBond[3];
/*=============================================================================
機能 メモリDCに描画する
引数 pDC : メモリデバイスコンテキストへのポインタ
=============================================================================*/
public void DrawRubic(Graphics gra, Pen pen, int scale)
{
int i, j, k;
i = 0; j = 0; k = 0;
m_scale = scale;
m_ViewPolar.r = m_scale;
m_pBond[0].DrawBond(gra, pen, m_ViewVertex);
}
/*=============================================================================
機能 コンストラクタ
=============================================================================*/
public CRubic(int scale)
{
int i, j, k;
i = 0; j = 0; k = 0;
m_pThreeD = new CThreeD();
m_scale = scale;
m_pBond[0] = new CBond(i, j, k, ref m_pThreeD);
InitWorld();
TransferScreen();
}
/*=============================================================================
機能 視点を初期化する
=============================================================================*/
public void InitWorld()
{
m_ViewPolar.r = m_scale;
m_ViewPolar.p = 0;
m_ViewPolar.q = 0;
m_pThreeD.PolarToVertex(m_ViewPolar, ref m_ViewVertex);
}
/*========================================================================
機能 ルービックキューブを投影変換をする
========================================================================*/
public void TransferScreen()
{
int i, j, k;
i = 0; j = 0; k = 0;
m_pBond[0].TransferScreen(m_ViewPolar);
}
/*========================================================================
機能 マウスがクリックされた位置を覚えておく
引数 point : クリックされた位置
========================================================================*/
public void SetClickPoint(Point point)
{
SetViewPolar();
m_ClickPoint.X = point.X;
m_ClickPoint.Y = point.Y;
}
/*========================================================================
機能 視点を回転させる
引数 point : 現在のマウスの位置
========================================================================*/
public void TurnViewPoint(Point point)
{
double p, q;
p = m_ClickPoint.X - point.X;
q = m_ClickPoint.Y - point.Y;
m_pThreeD.TurnPolar(ref m_ViewPolar, m_OldViewPolar, p / 200, q / 200);
m_pThreeD.PolarToVertex(m_ViewPolar, ref m_ViewVertex);
TransferScreen();
}
public void MoveCubes(Point point)
{
double p, q;
p = m_ClickPoint.X - point.X;
q = m_ClickPoint.Y - point.Y;
m_pBond[0].m_Center.x = -(int)p;
m_pBond[0].m_Center.y = -(int)q;
TransferScreen();
}
/*========================================================================
機能 現在の視点を記憶する
========================================================================*/
public void SetViewPolar()
{
m_OldViewPolar.r = m_ViewPolar.r;
m_OldViewPolar.p = m_ViewPolar.p;
m_OldViewPolar.q = m_ViewPolar.q;
}
}
}
}
private CBond[] m_pBond = new CBond[3]; CBondの座標情報郡を入れている。 今回0番目しか使用していないが、増やすことで 座標情報を一つの塊としてそれぞれ動かす事が出来る。 public void DrawRubic(Graphics gra, Pen pen, int scale)
{
int i, j, k;
i = 0; j = 0; k = 0;
m_scale = scale;
m_ViewPolar.r = m_scale;
m_pBond[0].DrawBond(gra, pen, m_ViewVertex);
}
Form1クラスのGraphics,Penを渡して描画しているだけですね。 public void SetClickPoint(Point point)
{
SetViewPolar();
m_ClickPoint.X = point.X;
m_ClickPoint.Y = point.Y;
}
マウスがクリックされたときのX,Y座標を取得。 public void TurnViewPoint(Point point)
{
double p, q;
p = m_ClickPoint.X - point.X;
q = m_ClickPoint.Y - point.Y;
m_pThreeD.TurnPolar(ref m_ViewPolar, m_OldViewPolar, p / 200, q / 200);
m_pThreeD.PolarToVertex(m_ViewPolar, ref m_ViewVertex);
TransferScreen();
}
public void MoveCubes(Point point)
{
double p, q;
p = m_ClickPoint.X - point.X;
q = m_ClickPoint.Y - point.Y;
m_pBond[0].m_Center.x = -(int)p;
m_pBond[0].m_Center.y = -(int)q;
TransferScreen();
}
マウスが動いたときに呼び出される。 (TurnViewPoint)は左クリックしたまま動いた時。 (MoveCubes)は左クリックしたまま動いた時。 次回は第4回目、マウスのイベントを拾ってこのクラスに渡す処理。 終わり。 CThreeD.cs → C#3D立方体ワイヤーフレーム 序(第1回) for VS2013 Express
CRubic.cs → C#3D立方体ワイヤーフレーム マウスの座標渡し(第3回) for VS2013 Express
Form1.cs → C#3D立方体ワイヤーフレーム 終(第4回) for VS2013 Express PR |