// PADRegion.h: interface for the CPADRegion class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_PADREGION_H__3BA9C7BC_907E_4E3E_8EE1_44CE00B3D434__INCLUDED_) #define AFX_PADREGION_H__3BA9C7BC_907E_4E3E_8EE1_44CE00B3D434__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include "PADRegionParm.h" const int PAD_MAX_POLYGON_POINT = 5; enum emRegionType{PADREGION_RECT=0,PADREGION_POLY,PADREGION_NONEAREA,PADREGION_NONE}; class AFX_EXT_CLASS CPADRegionNoneArea : public CArray { public: CPADRegionNoneArea() { } CPADRegionNoneArea& operator=(CPADRegionNoneArea& rhs) { Reset(); int iLoop; for(iLoop=0;iLoopGetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nCount); for(i=0;iGetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nValue,0); rect.left = nValue; strSection.Format("PADREGION_NONEAREA%d_TOP",i); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nValue,0); rect.top = nValue; strSection.Format("PADREGION_NONEAREA%d_RIGHT",i); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nValue,0); rect.right = nValue; strSection.Format("PADREGION_NONEAREA%d_BOTTOM",i); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nValue,0); rect.bottom = nValue; Add(rect); } return TRUE; } BOOL WriteRegionNoneArea(int iModel,CHMRegiConfig* pFile) { int i; CRect rect; CString strSection; int nCount; nCount = static_cast(GetSize()); strSection.Format("PADREGION_NONEAREA_COUNT"); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,nCount); for(i=0;iSetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,rect.left); strSection.Format("PADREGION_NONEAREA%d_TOP",i); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,rect.top); strSection.Format("PADREGION_NONEAREA%d_RIGHT",i); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,rect.right); strSection.Format("PADREGION_NONEAREA%d_BOTTOM",i); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection,rect.bottom); } return TRUE; } BOOL ReadRecipe(CMosisPacket *pPacket) { int nCount,i; CRect rect; pPacket->ReadValue(nCount); for(i=0;iReadValue(rect.left); pPacket->ReadValue(rect.top); pPacket->ReadValue(rect.right); pPacket->ReadValue(rect.bottom); Add(rect); } return TRUE; } BOOL WriteRecipe(CMosisPacket *pPacket) { int i,nValue; CRect rect; nValue = (int)GetSize(); pPacket->WriteValue(nValue); for(i=0;iWriteValue(rect.left); pPacket->WriteValue(rect.top); pPacket->WriteValue(rect.right); pPacket->WriteValue(rect.bottom); } return TRUE; } }; class AFX_EXT_CLASS CPADRegion { public: emRegionType m_emRegType; int m_nGroupIdx; CRect m_rectangle; int m_nPolyPointCnt; CPoint m_pPolyPoint[PAD_MAX_POLYGON_POINT]; CPADRegion() { Reset(); } CPADRegion& operator=(CPADRegion& rhs) { m_emRegType = rhs.m_emRegType; m_nGroupIdx = rhs.m_nGroupIdx; m_rectangle = rhs.m_rectangle; m_nPolyPointCnt = rhs.m_nPolyPointCnt; CopyMemory(m_pPolyPoint,rhs.m_pPolyPoint,sizeof(CPoint)*PAD_MAX_POLYGON_POINT); return *this; } void Reset() { int i; m_emRegType = PADREGION_NONE; m_nGroupIdx = -1; m_rectangle.SetRect(0,0,0,0); m_nPolyPointCnt = 0; for(i=0;i 0) { int i; for(i=0;iGetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_emRegType = (emRegionType)nValue; strSection.Format("PADREGION_REGION%d_REG_GROUP",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, m_nGroupIdx,0); switch(m_emRegType) { case PADREGION_RECT: case PADREGION_NONEAREA: strSection.Format("PADREGION_REGION%d_REG_LEFT",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_rectangle.left = nValue; strSection.Format("PADREGION_REGION%d_REG_TOP",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_rectangle.top = nValue; strSection.Format("PADREGION_REGION%d_REG_RIGHT",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_rectangle.right = nValue; strSection.Format("PADREGION_REGION%d_REG_BOTTOM",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_rectangle.bottom = nValue; break; case PADREGION_POLY: strSection.Format("PADREGION_REGION%d_REG_POLYCNT",iRegion); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, m_nPolyPointCnt,0); if(m_nPolyPointCnt >= PAD_MAX_POLYGON_POINT) m_nPolyPointCnt=PAD_MAX_POLYGON_POINT; if(m_nPolyPointCnt < 0) m_nPolyPointCnt=0; for(i=0;iGetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_pPolyPoint[i].x = nValue; strSection.Format("PADREGION_REGION%d_REG_POS%d_Y",iRegion,i); pFile->GetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, nValue,0); m_pPolyPoint[i].y = nValue; } break; } return TRUE; } BOOL WriteRegion(int iModel,int iRegion,CHMRegiConfig* pFile) { if(iModel < 0 || iRegion < 0 || pFile == NULL) return FALSE; CString strSection; int i; strSection.Format("PADREGION_REGION%d_REG_TYPE",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_emRegType); strSection.Format("PADREGION_REGION%d_REG_GROUP",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, m_nGroupIdx); switch(m_emRegType) { case PADREGION_RECT: case PADREGION_NONEAREA: strSection.Format("PADREGION_REGION%d_REG_LEFT",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_rectangle.left); strSection.Format("PADREGION_REGION%d_REG_TOP",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_rectangle.top); strSection.Format("PADREGION_REGION%d_REG_RIGHT",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_rectangle.right); strSection.Format("PADREGION_REGION%d_REG_BOTTOM",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_rectangle.bottom); break; case PADREGION_POLY: if(m_nPolyPointCnt >= PAD_MAX_POLYGON_POINT) m_nPolyPointCnt=PAD_MAX_POLYGON_POINT; if(m_nPolyPointCnt < 0) m_nPolyPointCnt=0; strSection.Format("PADREGION_REGION%d_REG_POLYCNT",iRegion); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, m_nPolyPointCnt); for(i=0;iSetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_pPolyPoint[i].x); strSection.Format("PADREGION_REGION%d_REG_POS%d_Y",iRegion,i); pFile->SetItemValue(iModel,(LPSTR)(LPCTSTR)strSection, (int)m_pPolyPoint[i].y); } break; } return TRUE; } BOOL ReadRecipe(CMosisPacket *pPacket) { int i; int nValue; pPacket->ReadValue(nValue); m_emRegType = (emRegionType)nValue; switch(m_emRegType) { case PADREGION_RECT: case PADREGION_NONEAREA: pPacket->ReadValue(m_rectangle.left); pPacket->ReadValue(m_rectangle.top); pPacket->ReadValue(m_rectangle.right); pPacket->ReadValue(m_rectangle.bottom); break; case PADREGION_POLY: pPacket->ReadValue(m_nPolyPointCnt); if(m_nPolyPointCnt > PAD_MAX_POLYGON_POINT) m_nPolyPointCnt=PAD_MAX_POLYGON_POINT; if(m_nPolyPointCnt < 0) m_nPolyPointCnt=0; for(i=0;iReadValue(m_pPolyPoint[i].x); pPacket->ReadValue(m_pPolyPoint[i].y); } break; } return TRUE; } BOOL WriteRecipe(CMosisPacket *pPacket) { int i; int nValue; nValue = (int)m_emRegType; pPacket->WriteValue(nValue); switch(m_emRegType) { case PADREGION_RECT: case PADREGION_NONEAREA: pPacket->WriteValue(m_rectangle.left); pPacket->WriteValue(m_rectangle.top); pPacket->WriteValue(m_rectangle.right); pPacket->WriteValue(m_rectangle.bottom); break; case PADREGION_POLY: if(m_nPolyPointCnt > PAD_MAX_POLYGON_POINT) m_nPolyPointCnt=PAD_MAX_POLYGON_POINT; if(m_nPolyPointCnt < 0) m_nPolyPointCnt=0; pPacket->WriteValue(m_nPolyPointCnt); for(i=0;iWriteValue(m_pPolyPoint[i].x); pPacket->WriteValue(m_pPolyPoint[i].y); } break; } return TRUE; } }; class AFX_EXT_CLASS CPAD_ManData { public: emPADINSTYPE m_emInsType; LONG m_nID; CPADRegion m_pRegion; CPADRegionParm *m_pParm; public: CPAD_ManData() { m_pParm = NULL; m_pRegion.Reset(); m_emInsType = PADINSTYPE_PITCH; m_nID = -1; } ~CPAD_ManData() { if (m_pParm) delete m_pParm, m_pParm = NULL; } CPAD_ManData& operator=(CPAD_ManData& rhs) { if (m_pParm) delete m_pParm, m_pParm = NULL; m_emInsType = rhs.m_emInsType; m_nID = rhs.m_nID; m_pRegion = rhs.m_pRegion; switch (m_emInsType) { case PADINSTYPE_PITCH: case PADINSTYPE_ASG: m_pParm = new CPADParmPitch; break; default: return *this; } *m_pParm = *rhs.m_pParm; return *this; } }; class AFX_EXT_CLASS CPAD_ManDataArray : public CArray { public: ~CPAD_ManDataArray() { DeleteAll(); } LONG FindMaxID() { LONG nID = 0; for (LONG i = 0; i < GetSize(); i++) { if(nID < GetAt(i)->m_nID) nID = GetAt(i)->m_nID; } return nID; } void DeleteAt(LONG nIndex) { if(nIndex >= GetSize()) return; for (int i = 0; i < GetSize(); i++) { if(nIndex == i) { delete GetAt(i); RemoveAt(i); break; } } } void DeleteAll() { for (int i = 0; i < GetSize(); i++) delete GetAt(i); RemoveAll(); } }; class AFX_EXT_CLASS CPADRegionInfo { public: CPADRegionInfo(); virtual ~CPADRegionInfo(); CPADRegionInfo& operator=(CPADRegionInfo& rhs); protected: CPAD_ManDataArray m_pPADDataManager; CPADRegionNoneArea m_pPADNoneArea; public: int AddRegion(emPADINSTYPE emInsType); int AddNoneArea(CRect rect); BOOL ReadRegionInfo(int iModel,CHMRegiConfig* pFile); BOOL WriteRegionInfo(int iModel,CHMRegiConfig* pFile); BOOL ResetRegionInfo(); int GetDataCount(){return static_cast(m_pPADDataManager.GetSize());} int GetNoneAreaCount(){return static_cast(m_pPADNoneArea.GetSize());} CPAD_ManData* GetManData(int nIndex); CRect GetNoneAreaData(int nIndex); BOOL ReadRecipe(CMosisPacket *pPacket); BOOL WriteRecipe(CMosisPacket *pPacket); }; #endif // !defined(AFX_PADREGION_H__3BA9C7BC_907E_4E3E_8EE1_44CE00B3D434__INCLUDED_)