#pragma once #include "CHImageControls/CHImageData.h" #include "CHVirtualGlassMap/VirtualGlassMapInfo.h" class AFX_EXT_CLASS CVirtualGlassMap { public: CVirtualGlassMap(void); virtual ~CVirtualGlassMap(void); void Reset(); BOOL LoadGlassMap(const CString& strFilename); BOOL SaveGlassMap(const CString& strFilename); // func BOOL GetImageData(const CVirtualImageInfo& imageInfo, BYTE *pImageData); BOOL GetImageData(const CVirtualImageInfo& imageInfo, CCHImageData* pImageData); // getter CVirtualMotorInfo* GetMotorInfo() { return &m_MotorInfo; } CVirtualGlassInfo* GetGlassnfo() { return &m_GlassInfo; } const CVirtualMotorInfo* GetMotorInfo() const { return &m_MotorInfo; } const CVirtualGlassInfo* GetGlassnfo() const { return &m_GlassInfo; } int GetGlassObjectCount() const { return (int)m_vecGlassObject.size(); } CVirtualGlassObject* GetGlassObject(int nIndex); const CVirtualGlassObject* GetGlassObject(int nIndex) const; void AddGlassObject(const CVirtualGlassObject& glassObject); IWICBitmap* GetWicBitmap() { return m_pWicBitmap; } // setter void SetGlassTilt(double dDx, double dDy, double dAngle); void SetGlassTilt(const CVirtualGlassTilt& glassTilt); void SetMotorOriginDir(int nDir); void SetGlassOriginDir(int nDir); protected: void CalculateGlassPos(int nMotorDir, const CVirtualGlassInfo& glassInfo); BOOL GetImageDataFromWicBitmap(BYTE *pImageData); BOOL MakeWicImage(const CVirtualImageInfo& imageInfo); void DrawMotor(ID2D1RenderTarget* pRenderTarget, const D2D1_RECT_F& rtRect); void DrawGlass(ID2D1RenderTarget* pRenderTarget, const D2D1_RECT_F& rtRect); void DrawGalssObject(ID2D1RenderTarget* pRenderTarget, const D2D1_RECT_F& rtRect); void DrawGalssObject(ID2D1RenderTarget* pRenderTarget, const CVirtualGlassObject& object, const D2D1_RECT_F& rtRect, const D2D1_POINT_2F& ptPoint); static BOOL IntersectsWith(const D2D1_RECT_F& rect1, const D2D1_RECT_F& rect2) { return ( rect1.left < rect2.right && rect1.top < rect2.bottom && rect1.right > rect2.left && rect1.bottom > rect2.top); } protected: bool m_bGlassTilt; CVirtualGlassTilt m_GlassTilt; CVirtualImageInfo m_ImageInfo; CVirtualMotorInfo m_MotorInfo; CVirtualGlassInfo m_GlassInfo; VectorVirtualGlassObject m_vecGlassObject; private: IWICImagingFactory *m_pWICFactory; ID2D1Factory *m_pD2DFactory; IWICBitmap *m_pWicBitmap; ID2D1RenderTarget *m_pRenderTarget; #define GLASS_POS_COUNT 8 D2D1_POINT_2F m_ptPosition[GLASS_POS_COUNT]; int m_nCurMotorDir; CVirtualGlassInfo m_CurGlassInfo; CRITICAL_SECTION m_csImageData; };