DrawModel.h

#pragma once


#include "ExpressionModel.h"


namespace Core
{
    ref class AxisOfCoordinate;
    ref class AxisOfRotation;

    ref class Model;
    ref class Link;
    ref class Distinction;


    /// モデルの描画
    public ref class DrawModel
    {
    // Construction --------------------------------------------------------
    public:
        DrawModel( Microsoft::DirectX::Direct3D::Device^ device, System::Object^ obj );


    // Operation -----------------------------------------------------------
    public:
        void CreateModelFigure();
        void Render();

        Distinction^ SelectLink( System::Drawing::Point location );

    private:
        void DrawLink();
        void DrawSelectedLink( Link^ link );

        float ComputeDistanceToIntersection( Distinction^ distinction, System::Drawing::PointF location );

        void TransferToLinkPosition( Link^ link );
        Microsoft::DirectX::Matrix ConvertToMatrix( Robotics::RotationMatrix^ matrix );

        System::Drawing::Color GetColorFromHSB( double hue, double saturation, double brightness );


    // Attribute ===========================================================
    private:
        Model^ m_model;                 ///< モデル
        Distinction^ m_selectedLink;    ///< 選択されているリンク

        Microsoft::DirectX::Direct3D::Device^ m_device;  ///< デバイス
        AxisOfCoordinate^ m_axisOfCoordinate;            ///< 座標軸
        AxisOfRotation^ m_axisOfRotation;                ///< 回転軸

        ExpressionModel m_expressionMode;    ///< 表示モード


    // Property ------------------------------------------------------------
    public:
        /// 選択されているリンク
        property Distinction^ SelectedLink
        {
            Distinction^ get()
            {
                return m_selectedLink;
            }
        }

        /// 表示モード
        property ExpressionModel ExpressionMode
        {
            ExpressionModel get()
            {
                return m_expressionMode;
            }
            void set( ExpressionModel value );
        }
    };
}