Joint.h
#pragma once
#include "Distinction.h" // < BaseClass >
namespace Core
{
/// 関節
[ System::ComponentModel::TypeConverter( CustomProperty::DisplayNameTypeConverter::typeid ) ] // プロパティ表示の変換
public ref class Joint : public Distinction
{
// Construction --------------------------------------------------------
public:
Joint( Robotics::PositionVector^ relativePosition, Robotics::AxisVector^ axialDirection, Robotics::Angle angle );
// Operation -----------------------------------------------------------
public:
void AddAngleWithinRange( double value );
void InitializeAngle();
virtual System::String^ ToString() override;
void CreateFigure( Microsoft::DirectX::Direct3D::Device^ device );
void Render( Microsoft::DirectX::Direct3D::Device^ device );
void RotateAroundAxis( Microsoft::DirectX::Direct3D::Device^ device );
// Event Handler -------------------------------------------------------
private:
void OnMechanicsChanged( System::Object^ sender, System::EventArgs^ e );
// Event ---------------------------------------------------------------
public:
event System::EventHandler^ AbsolutePositionChanged; ///< 絶対位置の変更イベント
// static
static event System::EventHandler^ AngleChanged; ///< 回転角の変更イベント
static event System::EventHandler^ MechanicsChanged; ///< 構造変化イベント
// Attribute ===========================================================
private:
Robotics::PositionVector^ m_absolutePosition; ///< 絶対位置[ m ] (ワールド座標系)
Robotics::PositionVector^ m_relativePosition; ///< 相対(他の関節に対する)位置[ m ] (ローカル座標系)
Robotics::Angle m_angle; ///< 回転角[ rad ]
Robotics::AngleRange m_angleRange; ///< 回転角 範囲[ rad ]
Robotics::AngleRange m_angularVelocityRange; ///< 回転角速度 範囲[ rad/sec ]
Robotics::Angle m_initialAngle; ///< 初期回転角[ rad ]
Robotics::AxisVector^ m_axialDirection; ///< 軸方向 (ローカル座標系)
double m_torqueConstant; ///< トルク定数[ Nm/A ]
// Property ------------------------------------------------------------
public:
/// 絶対位置[ m ] (ワールド座標系)
[ System::ComponentModel::Browsable( false ) ] // 参照不可
property Robotics::PositionVector^ AbsolutePosition
{
Robotics::PositionVector^ get()
{
return m_absolutePosition;
}
void set( Robotics::PositionVector^ value );
}
/// 相対(他の関節に対する)位置[ m ] (ローカル座標系)
[ CustomProperty::DisplayName( "相対位置" ) ]
[ System::ComponentModel::Description( "接続元の関節に対する相対位置を表します。" ) ]
property Robotics::PositionVector^ RelativePosition
{
Robotics::PositionVector^ get()
{
return m_relativePosition;
}
}
/// 回転角[ rad ]
[ System::ComponentModel::Browsable( false ) ] // 参照不可
property Robotics::Angle Angle
{
Robotics::Angle get()
{
return m_angle;
}
void set( Robotics::Angle value );
}
/// 回転角 範囲[ rad ]
[ CustomProperty::DisplayName( "回転角 範囲" ) ]
[ System::ComponentModel::Description( "関節の動作角度を表します。" ) ]
property Robotics::AngleRange AngleRange
{
Robotics::AngleRange get()
{
return m_angleRange;
}
void set( Robotics::AngleRange value )
{
m_angleRange = value;
}
}
/// 回転角速度 範囲[ rad/sec ]
[ CustomProperty::DisplayName( "回転角速度 範囲" ) ]
property Robotics::AngleRange AngularVelocityRange
{
Robotics::AngleRange get()
{
return m_angularVelocityRange;
}
void set( Robotics::AngleRange value )
{
m_angularVelocityRange = value;
}
}
/// 軸方向 (ローカル座標系)
[ CustomProperty::DisplayName( "軸方向" ) ]
[ System::ComponentModel::Description( "軸方向をベクトルで表します。" ) ]
property Robotics::AxisVector^ AxialDirection
{
Robotics::AxisVector^ get()
{
return m_axialDirection;
}
}
/// トルク定数[ Nm/A ]
[ CustomProperty::DisplayName( "トルク定数" ) ]
property double TorqueConstant
{
double get()
{
return m_torqueConstant;
}
void set( double value )
{
m_torqueConstant = value;
}
}
};
}