SDC C-Project CF Review 프로그램
LYW
2021-11-12 039bde2990b5b015232b5da9ff4df0cf1d88ddac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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;
};