#pragma once #include #include #include #include enum VirtualObjectDraw_Type { VODT_Rectangle=0, VODT_Ellipse, VODT_Polygon, VODT_Count }; enum VirtualGlassObject_Type { VGOT_Align=0, VGOT_Active, VGOT_Pad, VGOT_Defect, VGOT_Count }; enum VirtualOriginDir_Type { VODT_LeftTop=0, VODT_RightTop, VODT_LeftBottom, VODT_RightBottom }; enum ColorBandShiftValue { AlphaShiftValue = 24, RedShiftValue = 16, GreenShiftValue = 8, BlueShiftValue = 0 }; static UINT MakeColor(BYTE a, BYTE r, BYTE g, BYTE b) { return (((UINT) (b) << BlueShiftValue) | ((UINT) (g) << GreenShiftValue) | ((UINT) (r) << RedShiftValue) | ((UINT) (a) << AlphaShiftValue)); } struct SDoublePos { SDoublePos(double dX=0, double dY=0) { dPosX = dX; dPosY = dY; } double dPosX; double dPosY; }; typedef std::vector VectorDoublePos; typedef std::vector::iterator VectorDoublePosIt; typedef std::vector::const_iterator constVectorDoublePosIt; class CVirtualGlassTilt { public: CVirtualGlassTilt(double dX=0, double dY=0, double dA=0) { dDx = dX; dDy = dY; dAngle = dA; } public: double dDx; double dDy; double dAngle; }; class CVirtualObject { public: CVirtualObject() { Reset(); } void Reset() { nIndex = 0; strName = _T(""); nPenColor = MakeColor(255,0,0,0); nBrushColor = MakeColor(255,0,0,0); dPenOpacity = 1.0; dBrushOpacity = 1.0; dPenSize = 0.01; // 10um } double Left() const { return dPosX; } double Top() const { return dPosY; } double Right() const { return (dPosX+dSizeX); } double Bottom() const { return (dPosY+dSizeY); } double Width() const { return dSizeX; } double Height() const { return dSizeY; } int nIndex; // ¼ø¹ø CString strName; // À̸§ UINT nPenColor; // Ææ Ä÷¯ UINT nBrushColor; // ºê·¯½Ã Ä÷¯ double dPenSize; // Ææ Å©±â // um double dPenOpacity; // Ææ ºÒÅõ¸íµµ (0~1) double dBrushOpacity; // ºê·¯½Ã ºÒÅõ¸íµµ (0~1) double dPosX; // ¿øÁ¡ X //um double dPosY; // ¿øÁ¡ Y //um double dSizeX; // »çÀÌÁî X //um double dSizeY; // »çÀÌÁî Y //um }; class CVirtualMotorInfo : public CVirtualObject { public: CVirtualMotorInfo() { Reset(); } void Reset() { strName = _T("Motor"); nPenColor = MakeColor(255,0,0,0); nBrushColor = MakeColor(255,50,0,50); dPenSize = 0.01; // 10um nOriginDir = VODT_LeftTop; dPosX = 0.0; dPosY = 0.0; dSizeX = 1800.0; dSizeY = 1400.0; } int nOriginDir; // ¿øÁ¡ ¹æÇâ }; class CVirtualGlassInfo : public CVirtualObject { public: CVirtualGlassInfo() { Reset(); } void Reset() { strName = _T("Glass"); nPenColor = MakeColor(255,100,100,100); nBrushColor = MakeColor(255,0,200,200); dPenSize = 0.50; // 500 nOriginDir = VODT_LeftTop; nCutDir = VODT_LeftTop; dCutSize = 3.0; dNoCutSize = 1.0; dPosX = 100; dPosY = 100; dSizeX = 1600; dSizeY = 1200; } bool operator==(const CVirtualGlassInfo& rhs) { if (rhs.nPenColor!=nPenColor) return false; if (rhs.nBrushColor!=nBrushColor) return false; if (rhs.dPenSize!=dPenSize) return false; if (rhs.nOriginDir!=nOriginDir) return false; if (rhs.nCutDir!=nCutDir) return false; if (rhs.dCutSize!=dCutSize) return false; if (rhs.dNoCutSize!=dNoCutSize) return false; if (rhs.dPosX!=dPosX) return false; if (rhs.dPosY!=dPosY) return false; if (rhs.dSizeX!=dSizeX) return false; if (rhs.dSizeY!=dSizeY) return false; return true; } int nOriginDir; // ¿øÁ¡ ¹æÇâ int nCutDir; // ÄÚ³ÊÄÆ ¹æÇâ double dCutSize; // ÄÚ³ÊÄÆ Å©±â double dNoCutSize; // ³ë ÄÚ³ÊÄÆ Å©±â }; class CVirtualGlassObject :public CVirtualObject { public: CVirtualGlassObject() { Reset(); } void Reset() { nObjectType = VGOT_Defect; nDrawType = VODT_Rectangle; dPosX = 0; dPosY = 0; dSizeX = 0; dSizeY = 0; vecPolygon.clear(); } int nObjectType; // ¿ÀºêÁ§Æ® ŸÀÔ int nDrawType; // »ý±ä ¸ð¾ç VectorDoublePos vecPolygon; // Æú¸®°ï Á¤º¸ um }; typedef std::vector VectorVirtualGlassObject; typedef std::vector::iterator VectorVirtualGlassObjectIt; typedef std::vector::const_iterator constVectorVirtualGlassObjectIt; class CVirtualImageInfo { public: CVirtualImageInfo() { Reset(); } void Reset() { dCenterX = 0.0; dCenterY = 0.0; dPixelSizeX = 1.0; dPixelSizeY = 1.0; dRulerGab = 100.0; nFrameWidth = 0; nFrameHeight = 0; nFrameChannels = 0; } bool operator==(const CVirtualImageInfo& rhs) { if (rhs.dCenterX!=dCenterX) return false; if (rhs.dCenterY!=dCenterY) return false; if (rhs.dPixelSizeX!=dPixelSizeX) return false; if (rhs.dPixelSizeY!=dPixelSizeY) return false; if (rhs.dRulerGab!=dRulerGab) return false; if (rhs.nFrameWidth!=nFrameWidth) return false; if (rhs.nFrameHeight!=nFrameHeight) return false; if (rhs.nFrameChannels!=nFrameChannels) return false; return true; } double dCenterX; // um double dCenterY; // um double dPixelSizeX; // um/pixel double dPixelSizeY; // um/pixel double dRulerGab; int nFrameWidth; // pixel int nFrameHeight; // pixel int nFrameChannels; // };