/********************************************************************/
/* Copyright (c) 2019 System fugen G.K. and Yuzi Mizuno          */
/* All rights reserved.                                             */
/********************************************************************/
/********************************************************************/
// EvalPointFromUV.h: MGEvalPointFromUVTool クラスのインターフェイス

#if !defined(AFX_EVALPOINTFROMUV_H__ABE487AB_46EF_4227_BEF5_467C7696244E__INCLUDED_)
#define AFX_EVALPOINTFROMUV_H__ABE487AB_46EF_4227_BEF5_467C7696244E__INCLUDED_

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

#include "Common/SelectState.h"

// class MGEvalPointFromUVTool
//
// UV 座標から点を生成するコマンド
class MGEvalPointFromUVTool : public MGSelectState{
public:
	explicit MGEvalPointFromUVTool(fugenDoc* pDoc);

	virtual bool can_break_into()const{return true;};
	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);
	virtual bool OnSelected(
		fugenView* pView,
		MGPickObjects& curobj,
		MGPickObjects& rejobj
		);

	virtual void do_make_temporary_display(mgSysGL& sgl,fugenView* pView);

private:
	void calculate(const MGPickObject& pobj);
	bool input_param(const MGPickObject& pobj, MGPosition& uv);

	MGPosition m_pos; // XYZ

	bool m_bCreatePoint : 1;  // その位置に点を生成するかどうか
	bool m_bNormU : 1;        // U は正規化された値を指定しているかどうか
	bool m_bNormV : 1;        // V は正規化された値を指定しているかどうか
};

#endif // !defined(AFX_EVALPOINTFROMUV_H__ABE487AB_46EF_4227_BEF5_467C7696244E__INCLUDED_)
