/********************************************************************/
/* Copyright (c) 2019 System fugen G.K. and Yuzi Mizuno          */
/* All rights reserved.                                             */
/********************************************************************/
/********************************************************************/
/**
 * @file CurveConvert.h
 * @brief MGCurveConvertTool クラスのインターフェイス
 */
#if !defined(AFX_CURVECONVERT_H__B92663BD_C32A_4CA8_8001_0762B5EA9303__INCLUDED_)
#define AFX_CURVECONVERT_H__B92663BD_C32A_4CA8_8001_0762B5EA9303__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Common/SelectState.h"

/// @class MGCurveConvertTool CurveConvert.h CurveCmd/CurveConvert.h
///
/// 曲線をポリラインまたは円弧が接続したような曲線に変換するコマンド
class MGCurveConvertTool : public MGSelectState{
public:
	explicit MGCurveConvertTool(fugenDoc* pDoc, UINT nCmdID);

	virtual MGCommandBase* initial_clone(fugenDoc* pDoc)const;
	virtual bool initiate_tool();
	virtual bool terminate_tool(bool cancel = false);
	virtual bool OnKeyDown(fugenView* pView, UINT nChar, UINT nRepCnt, UINT nFlags);

private:
	bool calculate();
	void prompt_message() const;

	MGPickObjects  m_curve;   // 変換対象となる曲線オブジェクト

	double m_azero; ///< 変換計算のときに用いる angle_zero の値
	double m_lzero; ///< 変換計算のときに用いる line_zero の値
	UINT m_nIDS; ///< 失敗用メッセージ
	bool m_bPolyline; ///< true : ポリラインに変換する false : 円弧に変換する
	bool m_bRemove; ///< オリジナルの曲線を削除するかどうか
};

MGCommandBase* CreateCurveConvertTool(fugenDoc* pDoc, UINT nCmdID);

#endif // !defined(AFX_CURVECONVERT_H__B92663BD_C32A_4CA8_8001_0762B5EA9303__INCLUDED_)
