// ArmSimulatorDlg.h : ヘッダー ファイル
//

#pragma once
#include "afxcmn.h"
#include "afxwin.h"
#include "ArmSimulaotrODE.h"
#include <vector>

using namespace std;

#define BUTTON_NUM 28

UINT __cdecl StartSimulationThread(LPVOID pParam);
UINT __cdecl ShowInfoThread(LPVOID pParam);
UINT __cdecl MoveDualArm(LPVOID pParam);

typedef struct
{
	float joint[6];
} JointAngle;

// CArmSimulatorDlg ダイアログ
class CArmSimulatorDlg : public CDialog
{
// コンストラクション
public:
	CArmSimulatorDlg(CWnd* pParent = NULL);	// 標準コンストラクタ

// ダイアログ データ
	enum { IDD = IDD_ARMSIMULATOR_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV サポート


// 実装
protected:
	HICON m_hIcon;

	// 生成された、メッセージ割り当て関数
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()


// 自分で追加したメンバ変数・メンバ関数
public:
	ArmSim m_ArmSim;
	bool m_isCollision;
	vector<JointAngle> m_JointAngleL;
	vector<JointAngle> m_JointAngleR;

	CString m_DualArmPassPath;

	// アーム移動ボタンが押された時の動作
	static LRESULT CALLBACK MoveButtonProc( HWND hwnd , UINT msg , WPARAM wp , LPARAM lp );
	static WNDPROC m_originalWndProc[BUTTON_NUM];	// オリジナルのウィンドウプロシージャ

// GUI
public:
	CSliderCtrl m_sldr_Step;
	CEdit m_edit_Step;
	CButton m_check_GUI;
	afx_msg void OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnEnChangeEdit1();
	afx_msg void OnBnClickedButton2();
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCheck1();
	afx_msg void OnBnClickedButton31();
	CButton m_button_End;
	CEdit m_edit_ArmInfoLeft;
	CEdit m_edit_ArmInfoRight;
	CButton m_button_Start;
	CButton m_check_manual;
	afx_msg void OnBnClickedCheck2();
	afx_msg void OnBnClickedButton32();
public:
	afx_msg void OnBnClickedButton33();
	CEdit m_edit_TargetLX;
	CEdit m_edit_TargetLY;
	CEdit m_edit_TargetLZ;
public:
	CEdit m_edit_TargetRX;
public:
	CEdit m_edit_TargetRY;
public:
	CEdit m_edit_TargetRZ;
public:
	afx_msg void OnBnClickedButton34();
public:
	afx_msg void OnBnClickedButton35();
	afx_msg void OnBnClickedButton36();
	CEdit m_edit_PassPath;
	afx_msg void OnBnClickedButton38();
	afx_msg void OnBnClickedButton37();
public:
	CButton m_Check_slow;
};
