Motion.h
#pragma once
namespace Core
{
ref class Model;
ref class Pose;
typedef array< Robotics::AngularVelocity > AngularVelocities;
typedef System::Collections::Generic::List< Pose^ > Poses;
/// モーション
public ref class Motion
{
// Construction --------------------------------------------------------
public:
Motion( Model^ model );
// Operation -----------------------------------------------------------
public:
void AddToTypicalPose( Pose^ pose );
int GetPoseIndex( Pose^ pose );
Pose^ GetTypicalPoseJustBefore( Pose^ pose );
Pose^ GetTypicalPoseJustAfter( Pose^ pose );
AngularVelocities^ GetAngularVelocities( int poseIndex );
Robotics::PositionVector^ GetDisplacementOfLink( int poseIndex, int linkIndex );
Robotics::PositionVector^ GetVelocityOfLink( int poseIndex, int linkIndex );
System::Xml::XmlElement^ SaveSettings( System::Xml::XmlDocument^ document );
void LoadSettings( System::Xml::XmlDocument^ document );
private:
void InitializePose();
int GetTypicalPoseIndex( Pose^ pose );
void ComplementBetweenPoses( Pose^ before, Pose^ after );
// Event Handler -------------------------------------------------------
private:
void ModelStateChanged( System::Object^ sender, System::EventArgs^ e );
void StandardLinkChanged( System::Object^ sender, System::EventArgs^ e );
void LinkStructureChanged( System::Object^ sender, System::EventArgs^ e );
// Event ---------------------------------------------------------------
public:
event System::EventHandler^ Changed; ///< 変更イベント
// Attribute ===========================================================
private:
System::String^ m_name; ///< 名称
Poses^ m_poses; ///< ポーズ
Poses^ m_typicalPoses; ///< 特徴ポーズ
int m_currentPoseIndex; ///< 現在のポーズのインデックス
Model^ m_model; ///< モデル
// static
public:
literal double UnitTime = 0.1; ///< 単位時間[ sec ]
// Property ------------------------------------------------------------
public:
/// Indexer
property Pose^ default[ int ]
{
Pose^ get( int index )
{
return m_poses[ index ];
}
}
/// 名称
property System::String^ Name
{
System::String^ get()
{
return m_name;
}
void set( System::String^ value )
{
m_name = value;
}
}
/// 現在のポーズのインデックス
property int CurrentPoseIndex
{
int get()
{
return m_currentPoseIndex;
}
void set(int value);
}
/// 現在のポーズ
property Pose^ CurrentPose
{
Pose^ get()
{
return m_poses[ m_currentPoseIndex ];
}
}
/// ポーズ数
property int PoseCount
{
int get()
{
return m_poses->Count;
}
}
/// 現在の時間[ sec ]
property double CurrentTime
{
double get()
{
return m_currentPoseIndex * UnitTime;
}
}
};
}