#pragma once #include #include "InfraredTempSDK.h" #include "../../config/bean/InfraredTempCfg.h" #include "../../config/bean/MachineCfg.h" #include #include #include #include #include "../../job/JobController.h" #include "TempRegion.h" #include "../../log/LogImage.h" class InfraredTemp { public: struct PartTempStat { int id; //int pid; float minTemp; float maxTemp; float avgTemp; float printMaxTemp; float difPower; float difTemp; PartTempStat() { id = 0; //pid = 0; minTemp = 0.0f; maxTemp = 0.0f; avgTemp = 0.0f; printMaxTemp = 0.0f; difPower = 0.0f; difTemp = 0.0f; } }; struct PrintPlatform { cv::Point pa; cv::Point pb; cv::Point pc; cv::Point pd; vector points; int startX; int startY; int endX; int endY; }; struct Dimension { int xmin; int ymin; int xmax; int ymax; }; struct InfraredTempAssist { unsigned int layerStartIndex; unsigned int layerEndIndex; int trSelectIndex; int layerSelect; TempRegion* selectTR; LayerTempPointConfig::LayerRegion* selectLR; int pointAddX; int pointAddY; bool addPointClick; InfraredTempAssist() { layerStartIndex = 1; layerEndIndex = 2; trSelectIndex = -1; layerSelect = -1; selectTR = NULL; selectLR = NULL; pointAddX = 0; pointAddY = 0; addPointClick = false; } }; InfraredTemp(); ~InfraredTemp(); bool Init(); void Startup(); void Shutdown(); bool IsConnect(); void UpdateEnv(); void SetOSD(); void UpdateOSD(); void UpdateColorPalette(); //void UpdateGain(); void UpdateOverTurn(); void UpdateAutoFocus(); //void GetGain(); void UpdateTempUnit(); unsigned int GetShowImage(); int GetWidth() { return m_ImageWidth; } int GetHeight() { return m_ImageHeight; } void AddTempRegion(TempRegion* tr); void ClearTempRegion(); void CalcPrintPlatform(); //void TranRect(float stx,float sty,float edx,float edy,int& _stx,int& _sty,int& _edx,int& _edy); void CalcRefRegion(TempRegion* tr); void GetPartTemp(vector& pts); void GetPartTempCtrlPower(vector& pts); void GetPartTempCoveredWait(vector& pts); string GetIp() { return string(m_ChanelInfo.szIP); } bool IsOverChillDown(); void SaveTempData(); //void CalcTestTemp(); void ResetPrintMax(); //void FindContours(bool isPrint); void SetJobCtrl(JobController* jc) { m_JobController = jc; } void SetAvgSize(); void GetMousePointInfo(int* x, int* y, float* temp) { EnterCriticalSection(&m_ShowCS); *x = m_MouseX; *y = m_MouseY; //int iTemp = (int)m_TempCalcData[m_MouseY*m_ImageWidth + m_MouseX]; float fK = m_TempCalcData[m_MouseY * m_ImageWidth + m_MouseX]; float fC = fK - 273.15f; *temp = fC; LeaveCriticalSection(&m_ShowCS); } void SetMouseXY(int x, int y) { if (x < 0)x = 0; if (y < 0)y = 0; if (x >= m_ImageWidth)x = m_ImageWidth - 1; if (y >= m_ImageHeight)y = m_ImageHeight - 1; EnterCriticalSection(&m_ShowCS); m_MouseX = x; m_MouseY = y; LeaveCriticalSection(&m_ShowCS); } float GetMouxeXYTemp() { float temp = 0.0f; EnterCriticalSection(&m_ShowCS); temp = m_MouseXYTemp; LeaveCriticalSection(&m_ShowCS); return temp; } bool WaitTempReady(int partId); void ResetWaitFlag(); bool IsPartWaited(int partid); void SetPartWaited(int partid); void Lock() { EnterCriticalSection(&m_ShowCS); } void UnLock() { LeaveCriticalSection(&m_ShowCS); } vector* GetTempRegions() { return &m_TempRegions; } bool InitLog(IFImage* ifimage); unsigned int GetShowIFImage(unsigned char* data, unsigned long size, int* width, int* height); private: static void WINAPI MessageCallBackHandle(IRNETHANDLE hHandle, WPARAM wParam, LPARAM lParam, void *context); static void TempCallBackHandle(char *pBuffer, long BufferLen, void* pContext); static void VideoCallBackHandle(char *pBuffer, long BufferLen, int width, int height, void* pContext); static void SerialCallBackHandle(char *pRecvDataBuff, int BuffSize, void* pContext); static DWORD WINAPI RunPorc(InfraredTemp* _this); void Run(); void Connect(); void GenTex(uint32_t *tex, unsigned int w, unsigned int h, void * data); void SetConnect(bool bvalue); int ReadPN(char* strPN); public: bool m_ShowFlag; bool m_LogFlag; InfraredTempAssist m_InfraredTempAssist; private: IRNETHANDLE m_Handle; ChannelInfo m_ChanelInfo; HANDLE m_Thread; bool m_RunFlag; CRITICAL_SECTION m_CS; CRITICAL_SECTION m_ShowCS; CRITICAL_SECTION m_WaitCS; InfraredTempCfg* m_InfraredTempCfg; MachineCfg* m_MachineCfg; bool m_IsConnect; int m_ImageWidth; int m_ImageHeight; float m_Aspect; PrintPlatform m_PrintPlatform; char* m_VideoSrcData; char* m_VideoShowData; int m_VideoDataLength; bool m_VideoSrcDataUpdate; int m_TempImageEnable; bool m_IsNewNios; //float m_TempValueFix; unsigned short* m_TempSrcData; float* m_TempSrcTraData; float* m_TempCalcData; bool m_TempSrcDataUpdate; float m_MaxTemp; cv::Mat m_MatSrc; cv::Mat m_ShowMat; uint32_t m_GLTex; vector m_TempRegions; JobController* m_JobController; int m_MouseX; int m_MouseY; float m_MouseXYTemp; double m_PlatformRef[3][3]; //int m_TempMeasType; //int m_IComReadDataSize; //unsigned char m_ComReadData[512]; uint32_t m_LogGLTex; };