忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024年04月29日15:03 】 |
C#3D立方体ワイヤーフレーム マウスの座標渡し(第3回) for VS2013 Express

C#3D立方体ワイヤーフレーム マウスの座標渡し(第3回) 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回目、マウスのイベントを拾ってこのクラスに渡す処理。
PR
【2016年09月11日19:20 】 | グラフィック | コメント(0)
コメントの投稿













前ページ | ホーム | 次ページ

忍者ブログ [PR]