//该类利用模式识别方法识别事物的两面，如正、反，左、右，上、下，黑、白，方、圆等等。

#if !defined(__RV_MULTI_DETECT_H_INCLUDED_)
#define      __RV_MULTI_DETECT_H_INCLUDED_
 


#include "pixelmatch.h"

#define MD_MAX_PATT_NAME_LEN  15  

typedef struct __md_big_pattern_
{
	TCHAR            name[MD_MAX_PATT_NAME_LEN+1];
	int             fineLevel;       //精mip级
	int             coarseLevel;     //糙mip级
	int             patternCount;    //每个具体事例模板数量（一般情况下为1，如果支持旋转，缩放，就形成过个模板）。
	void*           pPatternData;    //模板数据
	PM_MATCH_RESULT matchResult;     //结果
}MD_BIG_PATT;


class PATMAT_API CMultiDetect : 	public CPixelMatch
{
public:
	CMultiDetect(void);
	virtual ~CMultiDetect(void);
	
	virtual BOOL Serialize(HANDLE device, BOOL bIn );
	virtual CUCObj* Clone(  CUCObj *twin) ;

	virtual BOOL    Learn(const RvImage image=NULL,  int* pErrCode = NULL) { return Learn(image, NULL, pErrCode); };	
	BOOL    Learn(const RvImage image, const TCHAR* strName , int* pErrCode);	
	virtual int     Recognize(const RvImage image=NULL, int* pErrCode = NULL);


	//RvImage GetPatternImage(int index);
	//RvMask  GetPatternMask(int index);	

	PM_MATCH_RESULT* GetMatchResult(int index) ;
	int  GetMatchedCount(); //在档次识别以后有效，匹配的数量


	int   GetLearnedPatternCount();
	void  RemoveAllLearnedPattern();
	MD_BIG_PATT* GetLearnedPattern(int index);
	void  RemoveLearnedPattern(int index);
	
public:
	// virtual void OnEndTrack(HGPD hCur,  GPoint point, int nHitType) ;

	 //索引为-1， 0，1. -1表示当前设置为空。
	 //当设置当前模板的时候，如果对应的模板没有学习的话
	 //设置将失败，无效。
	 void SetCurPatternIndex(int index);
	 int  GetCurPatternIndex();

private:
	 

	void ReleasePatternData(MD_BIG_PATT* pData);

	RvSequence m_seqPattCollect;
	int m_nCurPattIndex;

	//临时变量
	int m_nMatchedCount;
};









#endif

