#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;
|
};
|