From b1841d69f632c994e2af00287988413d3c0677c8 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Sun, 9 Jun 2013 18:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LITE/Utility_Lite/Utility_Lite.cpp | 94 ++ .../LITE/Utility_Lite/Utility_Lite.h | 32 + .../LITE/Utility_Lite/Utility_Lite.rc | Bin 0 -> 26582 bytes .../LITE/Utility_Lite/Utility_Lite.vcxproj | 127 ++ .../Utility_Lite/Utility_Lite.vcxproj.filters | 59 + .../Utility_Lite/Utility_Lite.vcxproj.user | 3 + .../LITE/Utility_Lite/Utility_LiteDlg.cpp | 1281 +++++++++++++++++ .../LITE/Utility_Lite/Utility_LiteDlg.h | 93 ++ .../UsbUtility/LITE/Utility_Lite/stdafx.cpp | 8 + .../UsbUtility/LITE/Utility_Lite/stdafx.h | 58 + .../UsbUtility/LITE/Utility_Lite/targetver.h | 8 + .../UsbUtil/SO7_Verfication_Algorithm.cpp | 22 +- .../UsbUtility/UsbUtil/So7_Manual_Machine.cpp | 49 +- .../UsbUtility/UsbUtil/So7_Manual_Machine.h | 6 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln | 11 + .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 1202176 -> 1202176 bytes 16 files changed, 1836 insertions(+), 15 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.rc create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.filters create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.user create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/targetver.h diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.cpp new file mode 100644 index 0000000..bc24a99 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.cpp @@ -0,0 +1,94 @@ + +// Utility_Lite.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "Utility_Lite.h" +#include "Utility_LiteDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CUtility_LiteApp + +BEGIN_MESSAGE_MAP(CUtility_LiteApp, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CUtility_LiteApp construction + +CUtility_LiteApp::CUtility_LiteApp() +{ + // support Restart Manager + m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; + + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + + +// The one and only CUtility_LiteApp object + +CUtility_LiteApp theApp; + + +// CUtility_LiteApp initialization + +BOOL CUtility_LiteApp::InitInstance() +{ + // InitCommonControlsEx() is required on Windows XP if an application + // manifest specifies use of ComCtl32.dll version 6 or later to enable + // visual styles. Otherwise, any window creation will fail. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // Set this to include all the common control classes you want to use + // in your application. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + + AfxEnableControlContainer(); + + // Create the shell manager, in case the dialog contains + // any shell tree view or shell list view controls. + CShellManager *pShellManager = new CShellManager; + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need + // Change the registry key under which our settings are stored + // TODO: You should modify this string to be something appropriate + // such as the name of your company or organization + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + + CUtility_LiteDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: Place code here to handle when the dialog is + // dismissed with OK + } + else if (nResponse == IDCANCEL) + { + // TODO: Place code here to handle when the dialog is + // dismissed with Cancel + } + + // Delete the shell manager created above. + if (pShellManager != NULL) + { + delete pShellManager; + } + + // Since the dialog has been closed, return FALSE so that we exit the + // application, rather than start the application's message pump. + return FALSE; +} + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.h new file mode 100644 index 0000000..acc112e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.h @@ -0,0 +1,32 @@ + +// Utility_Lite.h : main header file for the PROJECT_NAME application +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "include 'stdafx.h' before including this file for PCH" +#endif + +#include "resource.h" // main symbols + + +// CUtility_LiteApp: +// See Utility_Lite.cpp for the implementation of this class +// + +class CUtility_LiteApp : public CWinApp +{ +public: + CUtility_LiteApp(); + +// Overrides +public: + virtual BOOL InitInstance(); + +// Implementation + + DECLARE_MESSAGE_MAP() +}; + +extern CUtility_LiteApp theApp; \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.rc new file mode 100644 index 0000000000000000000000000000000000000000..fdd69f53406b66eb5cb03d4c6263a14c2fac373d GIT binary patch literal 26582 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 literal 0 HcmV?d00001 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj new file mode 100644 index 0000000..d9a4854 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj @@ -0,0 +1,127 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58} + Utility_Lite + MFCProj + + + + Application + true + Unicode + Dynamic + + + Application + false + true + Unicode + Dynamic + + + + + + + + + + + + + true + + + false + + + + Use + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + + + Windows + true + + + false + true + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + false + true + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + Create + Create + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.filters new file mode 100644 index 0000000..18ca7f4 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.filters @@ -0,0 +1,59 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + Resource Files + + + Resource Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.user b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_Lite.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.cpp new file mode 100644 index 0000000..6619ca3 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.cpp @@ -0,0 +1,1281 @@ + +// Utility_LiteDlg.cpp : implementation file +// +#include "stdafx.h" +#include +#include +#include "Resource.h" +#include "Utility_Lite.h" +#include "Utility_LiteDlg.h" +#include "afxdialogex.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif +#define M_E 2.71828182845904523536 +#define M_LOG2E 1.44269504088896340736 +#define M_LOG10E 0.434294481903251827651 +#define M_LN2 0.693147180559945309417 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.785398163397448309616 +#define M_1_PI 0.318309886183790671538 +#define M_2_PI 0.636619772367581343076 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.707106781186547524401 +std::vector g_Report; + +// CAboutDlg dialog used for App About + +class CAboutDlg : public CDialogEx +{ +public: + CAboutDlg(); + + // Dialog Data + enum { IDD = IDD_ABOUTBOX }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + // Implementation +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) +END_MESSAGE_MAP() + + +// CUtility_LiteDlg dialog + + + + +CUtility_LiteDlg::CUtility_LiteDlg(CWnd* pParent /*=NULL*/) + : CDialogEx(CUtility_LiteDlg::IDD, pParent) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CUtility_LiteDlg::DoDataExchange(CDataExchange* pDX) +{ + DDX_Control(pDX, IDC_EDIT_MSG_OUT, m_edMSG); + CDialogEx::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CUtility_LiteDlg, CDialogEx) + ON_WM_SYSCOMMAND() + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_2LASER_CALCULATE, &CUtility_LiteDlg::OnBnClickedButtonImagedll2laserCalculate) + ON_BN_CLICKED(IDC_BUTTON_SAVE_ALL_MSG, &CUtility_LiteDlg::OnBnClickedButtonSaveAllMsg) + ON_BN_CLICKED(IDC_BUTTON_CLEAR_ALL_MSG, &CUtility_LiteDlg::OnBnClickedButtonClearAllMsg) + ON_BN_CLICKED(IDC_BUTTON_OPEN_DATA_FILE, &CUtility_LiteDlg::OnBnClickedButtonOpenDataFile) +END_MESSAGE_MAP() + + +// CUtility_LiteDlg message handlers + +BOOL CUtility_LiteDlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + + // Set the icon for this dialog. The framework does this automatically + // when the application's main window is not a dialog + SetIcon(m_hIcon, TRUE); // Set big icon + SetIcon(m_hIcon, FALSE); // Set small icon + + // TODO: Add extra initialization here + m_BTNFont.CreatePointFont(150,L"Arial Black") ; + ((CButton*)(GetDlgItem(IDC_BUTTON_IMAGEDLL_2LASER_CALCULATE)))->SetFont(&m_BTNFont); + for (int i=0;i<4;i++) + { + TopPlaneCoeff[i]=0.0; + BottomPlaneCoeff[i]=0.0; + ReferencePlaneCoeff[i]=0.0; + } + CalibrateValue=0.0; + CalibrateTopLaserValue=0.0; + CalibrateBottomLaserValue=0.0; + dStandThickness=0.0; + CalXShiftMin=0.0; + CalXShiftMax=0.0; + CalXShiftStep=0.0; + CalYShiftMin=0.0; + CalYShiftMax=0.0; + CalYShiftStep=0.0; + TopLaserValue=0.0; + dYShiftInputVal=0.0; + dXShiftInputVal=0.0; + + InitData(); + ((CButton*)(GetDlgItem(IDC_RADIO_CALCULATE_THICKNESS)))->SetCheck(FALSE); + ((CButton*)(GetDlgItem(IDC_RADIO_CALCULATE_XYSHIFT)))->SetCheck(TRUE); + return TRUE; // return TRUE unless you set the focus to a control +} + +void CUtility_LiteDlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDialogEx::OnSysCommand(nID, lParam); + } +} + +// If you add a minimize button to your dialog, you will need the code below +// to draw the icon. For MFC applications using the document/view model, +// this is automatically done for you by the framework. + +void CUtility_LiteDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // device context for painting + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); + + // Center icon in client rectangle + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // Draw the icon + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialogEx::OnPaint(); + } +} + +// The system calls this function to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CUtility_LiteDlg::OnQueryDragIcon() +{ + return static_cast(m_hIcon); +} + + +//=================================================================== +void CUtility_LiteDlg::OnBnClickedButtonImagedll2laserCalculate() +{ + if(((CButton *)GetDlgItem(IDC_RADIO_CALCULATE_THICKNESS))->GetCheck()) + { + CalculatePNT2Plane(); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CALCULATE_XYSHIFT_fORMULA))->GetCheck()) + { + CalculateXYSHIFT_METHOD2(); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CALCULATE_XYSHIFT_fORMULA2))->GetCheck()) + { + CalculateXYSHIFT_METHOD3(); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CALCULATE_XYSHIFT_RESULT))->GetCheck()) + { + CalculateXYSHIFT_Result(); + } + else + { + g_Report.clear(); + CalculateXYSHIFT(); + } + +} + +//=================================================================== +void CUtility_LiteDlg::CalculatePNT2Plane() +{ + GetPNTSData(); + ThreePntsConstructPlane(ReferencePlanePnts,ReferencePlaneCoeff); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); + /**************************************************************** + Result + *****************************************************************/ + m_OutMessage=_T("===========================Thickness========================"); + OutputWithScroll(m_OutMessage,m_edMSG); + double Top2ReferenceDis[4]={0.0}; + double Bottom2ReferenceDis[4]={0.0}; + double dAnswer(0.0); + CString csOutput; + //==================Top - Reference================================ + Top2ReferenceDis[0]=PointToPlaneDistance(TopSurfacePnts[0],ReferencePlaneCoeff); + Top2ReferenceDis[1]=PointToPlaneDistance(TopSurfacePnts[1],ReferencePlaneCoeff); + Top2ReferenceDis[2]=PointToPlaneDistance(TopSurfacePnts[2],ReferencePlaneCoeff); + Top2ReferenceDis[3]=(Top2ReferenceDis[0]+Top2ReferenceDis[1]+Top2ReferenceDis[2])/3.0; + + + csOutput.Format(_T("%.4g"),Top2ReferenceDis[0]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Top2ReferenceDis[1]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE2)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Top2ReferenceDis[2]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE3)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Top2ReferenceDis[3]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE4)))->SetWindowText(csOutput); + + + Bottom2ReferenceDis[0]=PointToPlaneDistance(BottomSurfacePnts[0],ReferencePlaneCoeff); + Bottom2ReferenceDis[1]=PointToPlaneDistance(BottomSurfacePnts[1],ReferencePlaneCoeff); + Bottom2ReferenceDis[2]=PointToPlaneDistance(BottomSurfacePnts[2],ReferencePlaneCoeff); + Bottom2ReferenceDis[3]=(Bottom2ReferenceDis[0]+Bottom2ReferenceDis[1]+Bottom2ReferenceDis[2])/3.0; + dAnswer=Top2ReferenceDis[3]-Bottom2ReferenceDis[3]; + + csOutput.Format(_T("%.4g"),Bottom2ReferenceDis[0]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE5)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Bottom2ReferenceDis[1]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE6)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Bottom2ReferenceDis[2]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE7)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Bottom2ReferenceDis[3]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE8)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),dAnswer); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE9)))->SetWindowText(csOutput); + UpdateData(FALSE); + +} +//=================================================================== +//´úÈë·¨ +void CUtility_LiteDlg::CalculateXYSHIFT() +{ + GetPNTSData(); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); + + /**************************************************************** + Result + *****************************************************************/ + m_OutMessage=_T("============================XYShift========================="); + OutputWithScroll(m_OutMessage,m_edMSG); + + double Top2BottomDis[4]={0.0}; + double Bottom2ReferenceDis[4]={0.0}; + double dXShiftCalVal(CalXShiftMin),dYShiftCalVal(CalYShiftMin); + CalShiftReport TmpReport,TmpMinErrRpt; + int MinErrX(0),MinErrY(0); + CString csOutput; + Struct_3DPoint CalPNTs[3]; + CalPNTs[0]=TopSurfacePnts[0]; + CalPNTs[1]=TopSurfacePnts[1]; + CalPNTs[2]=TopSurfacePnts[2]; + + int m_Xsteps=static_cast((CalXShiftMax-CalXShiftMin)/CalXShiftStep); + int m_Ysteps=static_cast((CalYShiftMax-CalYShiftMin)/CalYShiftStep); + + //==================Dis================================ + for (int i=0;i1) + { +#ifdef _DEBUG + m_OutMessage=_T("---------------------------Err<0.005u-----------------------"); + OutputWithScroll(m_OutMessage,m_edMSG); +#endif + TmpMinErrRpt=g_Report.at(0); + for(size_t i=0;iSetWindowText(csOutput); + csOutput.Format(_T("%.4g"),TmpMinErrRpt.YShift); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_YSHIFT)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),TmpMinErrRpt.DisAverage); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_RESULT)))->SetWindowText(csOutput); + } + else + { + m_OutMessage=_T("Error: no data."); + OutputWithScroll(m_OutMessage,m_edMSG); + } + UpdateData(FALSE); + +} +//=================================================================== +//¼ÆËã·¨ µÃµ½µÄ½á¹ûΪµãµ½ÃæÆ½¾ù +void CUtility_LiteDlg::CalculateXYSHIFT_METHOD2() +{ + GetPNTSData(); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); + + /**************************************************************** + Result + *****************************************************************/ + m_OutMessage=_T("========================XYShift Formula====================="); + OutputWithScroll(m_OutMessage,m_edMSG); + + double HorizontalCoe[4]={0,0,1,0}; + double BOTXZLineV[3]={0.0}; + double BOTYZLineV[3]={0.0}; + double TOPXZLineV[3]={0.0}; + double TOPYZLineV[3]={0.0}; + double TOPAngle[3]={0.0}; + double BOTAngle[3]={0.0}; + + TOPXZLineV[0]=TopSurfacePnts[2].x-TopSurfacePnts[1].x; + TOPXZLineV[1]=TopSurfacePnts[2].y-TopSurfacePnts[1].y; + TOPXZLineV[2]=TopSurfacePnts[2].z-TopSurfacePnts[1].z; + + TOPYZLineV[0]=TopSurfacePnts[1].x-TopSurfacePnts[0].x; + TOPYZLineV[1]=TopSurfacePnts[1].y-TopSurfacePnts[0].y; + TOPYZLineV[2]=TopSurfacePnts[1].z-TopSurfacePnts[0].z; + + TOPAngle[0]=LineToPlaneAngle(TOPXZLineV,HorizontalCoe); + TOPAngle[1]=LineToPlaneAngle(TOPYZLineV,HorizontalCoe); + TOPAngle[2]=DoublePlaneAngle(TopPlaneCoeff,HorizontalCoe); + m_OutMessage.Format(_T("[Top Surface]X(DEG):%.6f,Y(DEG):%.6f,Plane(DEG):%.6f"),(TOPAngle[0]*180.0/M_PI),(TOPAngle[1]*180.0/M_PI),(TOPAngle[2]*180.0/M_PI)); + OutputWithScroll(m_OutMessage,m_edMSG); + + BOTXZLineV[0]=BottomSurfacePnts[2].x-BottomSurfacePnts[1].x; + BOTXZLineV[1]=BottomSurfacePnts[2].y-BottomSurfacePnts[1].y; + BOTXZLineV[2]=BottomSurfacePnts[2].z-BottomSurfacePnts[1].z; + + BOTYZLineV[0]=BottomSurfacePnts[1].x-BottomSurfacePnts[0].x; + BOTYZLineV[1]=BottomSurfacePnts[1].y-BottomSurfacePnts[0].y; + BOTYZLineV[2]=BottomSurfacePnts[1].z-BottomSurfacePnts[0].z; + + BOTAngle[0]=LineToPlaneAngle(BOTXZLineV,HorizontalCoe); + BOTAngle[1]=LineToPlaneAngle(BOTYZLineV,HorizontalCoe); + BOTAngle[2]=DoublePlaneAngle(HorizontalCoe,BottomPlaneCoeff); + m_OutMessage.Format(_T("[Bot Surface]X(DEG):%.6f,Y(DEG):%.6f,Plane(DEG):%.6f"),(BOTAngle[0]*180.0/M_PI),(BOTAngle[1]*180.0/M_PI),(BOTAngle[2]*180.0/M_PI)); + OutputWithScroll(m_OutMessage,m_edMSG); + + /*************************************************************** + result + ****************************************************************/ + double Top2BottomDis[4]={0.0}; + double dXYShift[4]={0.0}; + double dXShiftCalVal(0.0),dYShiftCalVal(0.0); + double ShiftAver[4]={0.0}; + Top2BottomDis[0]=TopSurfacePnts[0].z-BottomSurfacePnts[0].z; + Top2BottomDis[1]=TopSurfacePnts[1].z-BottomSurfacePnts[1].z; + Top2BottomDis[2]=TopSurfacePnts[2].z-BottomSurfacePnts[2].z; + Top2BottomDis[3]=(Top2BottomDis[0]+Top2BottomDis[1]+Top2BottomDis[2])/3.0; + //=====================================X============================================== + int i=0; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + ShiftAver[0]=dXYShift[3]; + m_OutMessage.Format(_T("[Top Surface]Delta X1:%.6f,Delta X2:%.6f,Delta X3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + i=1; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + ShiftAver[1]=dXYShift[3]; + m_OutMessage.Format(_T("[Top Surface]Delta Y1:%.6f,Delta Y2:%.6f,Delta Y3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + //=====================================Y============================================== + i=0; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + ShiftAver[2]=dXYShift[3]; + m_OutMessage.Format(_T("[Bot Surface]Delta X1:%.6f,Delta X2:%.6f,Delta X3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + i=1; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + ShiftAver[3]=dXYShift[3]; + m_OutMessage.Format(_T("[Bot Surface]Delta Y1:%.6f,Delta Y2:%.6f,Delta Y3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + dXShiftCalVal=0.5*(ShiftAver[0]+ShiftAver[2]); + dYShiftCalVal=0.5*(ShiftAver[1]+ShiftAver[3]); + m_OutMessage.Format(_T("[Average Result]Delta X:%.6f,Delta Y:%.6f"),dXShiftCalVal,dYShiftCalVal); + OutputWithScroll(m_OutMessage,m_edMSG); + + Struct_3DPoint CalPNTs[3]; + CalPNTs[0]=TopSurfacePnts[0]; + CalPNTs[1]=TopSurfacePnts[1]; + CalPNTs[2]=TopSurfacePnts[2]; + CalPNTs[0].x=TopSurfacePnts[0].x+dXShiftCalVal; + CalPNTs[1].x=TopSurfacePnts[1].x+dXShiftCalVal; + CalPNTs[2].x=TopSurfacePnts[2].x+dXShiftCalVal; + + CalPNTs[0].y=TopSurfacePnts[0].y+dYShiftCalVal; + CalPNTs[1].y=TopSurfacePnts[1].y+dYShiftCalVal; + CalPNTs[2].y=TopSurfacePnts[2].y+dYShiftCalVal; + + Top2BottomDis[0]=PointToPlaneDistance(CalPNTs[0],BottomPlaneCoeff); + Top2BottomDis[1]=PointToPlaneDistance(CalPNTs[1],BottomPlaneCoeff); + Top2BottomDis[2]=PointToPlaneDistance(CalPNTs[2],BottomPlaneCoeff); + Top2BottomDis[3]=(Top2BottomDis[0]+Top2BottomDis[1]+Top2BottomDis[2])/3.0; + + CString csOutput; + + csOutput.Format(_T("%.4g"),0.5*(ShiftAver[0]+ShiftAver[2])); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_XSHIFT)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),0.5*(ShiftAver[1]+ShiftAver[3])); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_YSHIFT)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),Top2BottomDis[3]); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_RESULT)))->SetWindowText(csOutput); + + + UpdateData(FALSE); + +} + +//=================================================================== +//¼ÆËã·¨ µÃµ½µÄ½á¹ûΪµãµ½ÃæµÄ¾àÀë¼Ó£¨¼õ£©Æ«ÒƵÄÎó²î +void CUtility_LiteDlg::CalculateXYSHIFT_METHOD3() +{ + GetPNTSData(); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); + /**************************************************************** + Result + *****************************************************************/ + m_OutMessage=_T("========================XYShift Formula2===================="); + OutputWithScroll(m_OutMessage,m_edMSG); + + + double HorizontalCoe[4]={0,0,1,0}; + double BOTXZLineV[3]={0.0}; + double BOTYZLineV[3]={0.0}; + double TOPXZLineV[3]={0.0}; + double TOPYZLineV[3]={0.0}; + double TOPAngle[3]={0.0}; + double BOTAngle[3]={0.0}; + + TOPXZLineV[0]=TopSurfacePnts[2].x-TopSurfacePnts[1].x; + TOPXZLineV[1]=TopSurfacePnts[2].y-TopSurfacePnts[1].y; + TOPXZLineV[2]=TopSurfacePnts[2].z-TopSurfacePnts[1].z; + + TOPYZLineV[0]=TopSurfacePnts[1].x-TopSurfacePnts[0].x; + TOPYZLineV[1]=TopSurfacePnts[1].y-TopSurfacePnts[0].y; + TOPYZLineV[2]=TopSurfacePnts[1].z-TopSurfacePnts[0].z; + + TOPAngle[0]=LineToPlaneAngle(TOPXZLineV,HorizontalCoe); + TOPAngle[1]=LineToPlaneAngle(TOPYZLineV,HorizontalCoe); + TOPAngle[2]=DoublePlaneAngle(TopPlaneCoeff,HorizontalCoe); + m_OutMessage.Format(_T("[Top Surface]X(DEG):%.6f,Y(DEG):%.6f,Plane(DEG):%.6f"),(TOPAngle[0]*180.0/M_PI),(TOPAngle[1]*180.0/M_PI),(TOPAngle[2]*180.0/M_PI)); + OutputWithScroll(m_OutMessage,m_edMSG); + + BOTXZLineV[0]=BottomSurfacePnts[2].x-BottomSurfacePnts[1].x; + BOTXZLineV[1]=BottomSurfacePnts[2].y-BottomSurfacePnts[1].y; + BOTXZLineV[2]=BottomSurfacePnts[2].z-BottomSurfacePnts[1].z; + + BOTYZLineV[0]=BottomSurfacePnts[1].x-BottomSurfacePnts[0].x; + BOTYZLineV[1]=BottomSurfacePnts[1].y-BottomSurfacePnts[0].y; + BOTYZLineV[2]=BottomSurfacePnts[1].z-BottomSurfacePnts[0].z; + + BOTAngle[0]=LineToPlaneAngle(BOTXZLineV,HorizontalCoe); + BOTAngle[1]=LineToPlaneAngle(BOTYZLineV,HorizontalCoe); + BOTAngle[2]=DoublePlaneAngle(HorizontalCoe,BottomPlaneCoeff); + m_OutMessage.Format(_T("[Bot Surface]X(DEG):%.6f,Y(DEG):%.6f,Plane(DEG):%.6f"),(BOTAngle[0]*180.0/M_PI),(BOTAngle[1]*180.0/M_PI),(BOTAngle[2]*180.0/M_PI)); + OutputWithScroll(m_OutMessage,m_edMSG); + + /*************************************************************** + result + ****************************************************************/ + double Top2BottomDis[4]={0.0}; + double dXYShift[4]={0.0}; + double dXShiftCalVal(0.0),dYShiftCalVal(0.0); + double ShiftAver[4]={0.0}; + Top2BottomDis[0]=TopSurfacePnts[0].z-BottomSurfacePnts[0].z; + Top2BottomDis[1]=TopSurfacePnts[1].z-BottomSurfacePnts[1].z; + Top2BottomDis[2]=TopSurfacePnts[2].z-BottomSurfacePnts[2].z; + Top2BottomDis[3]=(Top2BottomDis[0]+Top2BottomDis[1]+Top2BottomDis[2])/3.0; + + //=====================================X============================================== + int i=0; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + ShiftAver[0]=dXYShift[3]; + m_OutMessage.Format(_T("[Top Surface]Delta X1:%.6f,Delta X2:%.6f,Delta X3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + i=1; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(TOPAngle[i]))))/(sin(TOPAngle[i])); + ShiftAver[1]=dXYShift[3]; + m_OutMessage.Format(_T("[Top Surface]Delta Y1:%.6f,Delta Y2:%.6f,Delta Y3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + //=====================================Y============================================== + i=0; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + ShiftAver[2]=dXYShift[3]; + m_OutMessage.Format(_T("[Bot Surface]Delta X1:%.6f,Delta X2:%.6f,Delta X3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + i=1; + dXYShift[0]=(dStandThickness-(Top2BottomDis[0]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[1]=(dStandThickness-(Top2BottomDis[1]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[2]=(dStandThickness-(Top2BottomDis[2]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + dXYShift[3]=(dStandThickness-(Top2BottomDis[3]*(cos(BOTAngle[i]))))/(sin(BOTAngle[i])); + ShiftAver[3]=dXYShift[3]; + m_OutMessage.Format(_T("[Bot Surface]Delta Y1:%.6f,Delta Y2:%.6f,Delta Y3:%.6f,Average:%.6f"),dXYShift[0],dXYShift[1],dXYShift[2],dXYShift[3]); + OutputWithScroll(m_OutMessage,m_edMSG); + dXShiftCalVal=0.5*(ShiftAver[0]+ShiftAver[2]); + dYShiftCalVal=0.5*(ShiftAver[1]+ShiftAver[3]); + m_OutMessage.Format(_T("[Average Result]Delta X:%.6f,Delta Y:%.6f"),dXShiftCalVal,dYShiftCalVal); + OutputWithScroll(m_OutMessage,m_edMSG); + + Struct_3DPoint CalPNTs[3]; + CalPNTs[0]=TopSurfacePnts[0]; + CalPNTs[1]=TopSurfacePnts[1]; + CalPNTs[2]=TopSurfacePnts[2]; + CalPNTs[0].x=TopSurfacePnts[0].x+dXShiftCalVal; + CalPNTs[1].x=TopSurfacePnts[1].x+dXShiftCalVal; + CalPNTs[2].x=TopSurfacePnts[2].x+dXShiftCalVal; + + CalPNTs[0].y=TopSurfacePnts[0].y+dYShiftCalVal; + CalPNTs[1].y=TopSurfacePnts[1].y+dYShiftCalVal; + CalPNTs[2].y=TopSurfacePnts[2].y+dYShiftCalVal; + ThreePntsConstructPlane(CalPNTs,TopPlaneCoeff); + double m_ShiftedTopAngle=DoublePlaneAngle(TopPlaneCoeff,HorizontalCoe); + double m_Result(0.0); + + Top2BottomDis[0]=PointToPlaneDistance(TopSurfacePnts[0],BottomPlaneCoeff); + Top2BottomDis[1]=PointToPlaneDistance(TopSurfacePnts[1],BottomPlaneCoeff); + Top2BottomDis[2]=PointToPlaneDistance(TopSurfacePnts[2],BottomPlaneCoeff); + Top2BottomDis[3]=(Top2BottomDis[0]+Top2BottomDis[1]+Top2BottomDis[2])/3.0; + if (m_ShiftedTopAngle>M_PI_2) + { + m_Result=Top2BottomDis[3]+sqrt(dXShiftCalVal*dXShiftCalVal+dYShiftCalVal*dYShiftCalVal)*sin(m_ShiftedTopAngle); + m_OutMessage.Format(_T("[Result]%.6f(Thickness)=%.6f(Thick Before calibrate)+%.6f(Delta XY)"),m_Result,Top2BottomDis[3],(sqrt(dXShiftCalVal*dXShiftCalVal+dYShiftCalVal*dYShiftCalVal)*sin(m_ShiftedTopAngle))); + OutputWithScroll(m_OutMessage,m_edMSG); + } + else + { + m_Result=Top2BottomDis[3]-sqrt(dXShiftCalVal*dXShiftCalVal+dYShiftCalVal*dYShiftCalVal)*sin(m_ShiftedTopAngle); + m_OutMessage.Format(_T("[Result]%.6f(Thickness)=%.6f(Thick Before calibrate)-%.6f(Delta XY)"),m_Result,Top2BottomDis[3],(sqrt(dXShiftCalVal*dXShiftCalVal+dYShiftCalVal*dYShiftCalVal)*sin(m_ShiftedTopAngle))); + OutputWithScroll(m_OutMessage,m_edMSG); + } + + + CString csOutput; + + csOutput.Format(_T("%.4g"),0.5*(ShiftAver[0]+ShiftAver[2])); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_XSHIFT)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),0.5*(ShiftAver[1]+ShiftAver[3])); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_YSHIFT)))->SetWindowText(csOutput); + csOutput.Format(_T("%.4g"),m_Result); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_RESULT)))->SetWindowText(csOutput); + + + UpdateData(FALSE); + +} +//¸ù¾ÝXYÆ«ÒÆ¼ÆËã²âÁ¿Öµ +void CUtility_LiteDlg::CalculateXYSHIFT_Result() +{ + GetPNTSData(); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); + /**************************************************************** + Result + *****************************************************************/ + m_OutMessage=_T("========================XYShift Result===================="); + OutputWithScroll(m_OutMessage,m_edMSG); + double HorizontalCoe[4]={0,0,1,0}; + double Top2BottomDis[4]={0.0}; + Struct_3DPoint CalPNTs[3]; + CalPNTs[0]=TopSurfacePnts[0]; + CalPNTs[1]=TopSurfacePnts[1]; + CalPNTs[2]=TopSurfacePnts[2]; + CalPNTs[0].x=TopSurfacePnts[0].x+dXShiftInputVal; + CalPNTs[1].x=TopSurfacePnts[1].x+dXShiftInputVal; + CalPNTs[2].x=TopSurfacePnts[2].x+dXShiftInputVal; + + CalPNTs[0].y=TopSurfacePnts[0].y+dYShiftInputVal; + CalPNTs[1].y=TopSurfacePnts[1].y+dYShiftInputVal; + CalPNTs[2].y=TopSurfacePnts[2].y+dYShiftInputVal; + ThreePntsConstructPlane(CalPNTs,TopPlaneCoeff); + double m_ShiftedTopAngle=DoublePlaneAngle(TopPlaneCoeff,HorizontalCoe); + double m_Result(0.0); + + Top2BottomDis[0]=PointToPlaneDistance(TopSurfacePnts[0],BottomPlaneCoeff); + Top2BottomDis[1]=PointToPlaneDistance(TopSurfacePnts[1],BottomPlaneCoeff); + Top2BottomDis[2]=PointToPlaneDistance(TopSurfacePnts[2],BottomPlaneCoeff); + Top2BottomDis[3]=(Top2BottomDis[0]+Top2BottomDis[1]+Top2BottomDis[2])/3.0; + if (m_ShiftedTopAngle>M_PI_2) + { + m_Result=Top2BottomDis[3]+sqrt(dXShiftInputVal*dXShiftInputVal+dYShiftInputVal*dYShiftInputVal)*sin(m_ShiftedTopAngle); + m_OutMessage.Format(_T("[Result]%.6f(Thickness)=%.6f(Thick Before calibrate)+%.6f(Delta XY)"),m_Result,Top2BottomDis[3],(sqrt(dXShiftInputVal*dXShiftInputVal+dYShiftInputVal*dYShiftInputVal)*sin(m_ShiftedTopAngle))); + OutputWithScroll(m_OutMessage,m_edMSG); + } + else + { + m_Result=Top2BottomDis[3]-sqrt(dXShiftInputVal*dXShiftInputVal+dYShiftInputVal*dYShiftInputVal)*sin(m_ShiftedTopAngle); + m_OutMessage.Format(_T("[Result]%.6f(Thickness)=%.6f(Thick Before calibrate)-%.6f(Delta XY)"),m_Result,Top2BottomDis[3],(sqrt(dXShiftInputVal*dXShiftInputVal+dYShiftInputVal*dYShiftInputVal)*sin(m_ShiftedTopAngle))); + OutputWithScroll(m_OutMessage,m_edMSG); + } + + CString csOutput; + + csOutput.Format(_T("%.4g"),m_Result); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_RESULT)))->SetWindowText(csOutput); + + + UpdateData(FALSE); + +} + + + +//=================================================================== +BOOL CUtility_LiteDlg::ThreePntsConstructPlane(Struct_3DPoint* pArr,double* Coe) +{ + Struct_3DPoint p1,p2,p3; + + p1 = pArr[0]; + p2 = pArr[1]; + p3 = pArr[2]; + double a(0.0),b(0.0),c(0.0),d(0.0); + a = ( (p2.y-p1.y)*(p3.z-p1.z)-(p2.z-p1.z)*(p3.y-p1.y) ); + b = ( (p2.z-p1.z)*(p3.x-p1.x)-(p2.x-p1.x)*(p3.z-p1.z) ); + c = ( (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x) ); + d = ( 0-(a*p1.x+b*p1.y+c*p1.z) ); + Coe[0]=a; + Coe[1]=b; + Coe[2]=c; + Coe[3]=d; + + return TRUE; +}; +//=================================================================== +double CUtility_LiteDlg::PointToPlaneDistance(Struct_3DPoint PntPos,double* Coe) +{ + double m_result(0.0); + double a(0.0),b(0.0),c(0.0),d(0.0); + a=Coe[0]; + b=Coe[1]; + c=Coe[2]; + d=Coe[3]; + double x(0.0),y(0.0),z(0.0); + x=PntPos.x; + y=PntPos.y; + z=PntPos.z; + m_result=fabs((a*x+b*y+c*z+d) / sqrt(a*a+b*b+c*c)); + return m_result; +}; +//=================================================================== +double CUtility_LiteDlg::DoublePlaneAngle(double* Coe1,double* Coe2) +{ + double m_result(0.0); + double a1(0.0),b1(0.0),c1(0.0),d1(0.0); + double a2(0.0),b2(0.0),c2(0.0),d2(0.0); + a1=Coe1[0]; + b1=Coe1[1]; + c1=Coe1[2]; + d1=Coe1[3]; + + a2=Coe2[0]; + b2=Coe2[1]; + c2=Coe2[2]; + d2=Coe2[3]; + + m_result=acos((fabs(a1*a2+b1*b2+c1*c2)) / ((sqrt(a1*a1+b1*b1+c1*c1))*(sqrt(a2*a2+b2*b2+c2*c2)))); + return m_result; +}; +//=================================================================== +double CUtility_LiteDlg::LineToPlaneAngle(double* LineVector,double* Coe) +{ + double m_result(0.0); + double m(0.0),n(0.0),p(0.0); + m=LineVector[0]; + n=LineVector[1]; + p=LineVector[2]; + + double a(0.0),b(0.0),c(0.0),d(0.0); + a=Coe[0]; + b=Coe[1]; + c=Coe[2]; + d=Coe[3]; + + m_result=asin((fabs(a*m+b*n+c*p)) / ((sqrt(a*a+b*b+c*c))*(sqrt(m*m+n*n+p*p)))); + return m_result; +}; + +//===================================================================================== +//Print message on edit control +void CUtility_LiteDlg::OutputWithScroll(const CString &strNewText,CEdit &edtOutput) +{ + CString strOutput; + edtOutput.GetWindowText(strOutput); + strOutput += strNewText; + if ("\r\n" != strOutput.Right(2)) + { + strOutput += "\r\n"; + } + + int iCount = strOutput.GetLength(); + + edtOutput.SetRedraw(FALSE); + edtOutput.SetWindowText(strOutput); + int iLine = edtOutput.GetLineCount(); + edtOutput.LineScroll(iLine, 0); + edtOutput.SetSel(iCount, iCount); + edtOutput.SetRedraw(TRUE); +} + +//===================================================================================== +void CUtility_LiteDlg::OnBnClickedButtonSaveAllMsg() +{ + USES_CONVERSION; + + CString FileName; + CString PathName; + + + FileName=_T("Cal_Result.csv"); + CString szFilter=_T("CSV Files(*.csv)|*.csv|TXT Files(*.txt)|*.txt|ALL Files(*.*)|*.*||"); + CFileDialog fdlg(FALSE,_T("TEXT"),FileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); + + if( fdlg.DoModal()==IDOK) + { + PathName=fdlg.GetPathName(); + switch(fdlg.m_ofn.nFilterIndex) + { + case 2: + { + FILE* m_pOutFile; + _wfopen_s(&m_pOutFile, PathName, _T("wt")); + if (!m_pOutFile) + { + MessageBox( _T("File name Error."), _T("Message"), MB_OK); + } + else + { + const char* outBuff=NULL; + CString strOutput; + m_edMSG.GetWindowText(strOutput); + outBuff=T2A(strOutput); + fprintf(m_pOutFile,"%s", outBuff); + fclose(m_pOutFile); + m_OutMessage=_T("[Saving successful] Data Stored into ")+PathName+_T("."); + OutputWithScroll(m_OutMessage,m_edMSG); + } + break; + } + case 1: + { + BOOL bSTATUS=ExportReportCSV(PathName); + if (bSTATUS) + { + m_OutMessage=_T("[Saving successful] Data Stored into ")+PathName+_T("."); + OutputWithScroll(m_OutMessage,m_edMSG); + } + else + { + MessageBox( _T("File name Error."), _T("Message"), MB_OK); + } + break; + } + } + } + delete fdlg; +} + +//=========================================================== +BOOL CUtility_LiteDlg::ExportReportCSV(const CString &FilePathName) +{ + FILE* m_pOutFile=NULL; + char *outBuff = NULL; + _wfopen_s(&m_pOutFile, FilePathName, _T("wt")); + if (!m_pOutFile) + { + free(outBuff); + return FALSE; + } + else + { + //Title + + fprintf(m_pOutFile,"XShift,YShift,Dis1,Dis2,Dis3,DisAverage,Standard Value,Standard Deviation,ABS(Standard Deviation),"); + fprintf(m_pOutFile, "\n"); + + //OUTPUT DATA + CalShiftReport TmpReport; + for(size_t i=0;iSetWindowText(_T("-0.2")); + ((CButton*)(GetDlgItem(IDC_EDIT_CALSHIFT_X_MAX)))->SetWindowText(_T("0.2")); + ((CButton*)(GetDlgItem(IDC_EDIT_CALSHIFT_X_STEP)))->SetWindowText(_T("0.001")); + ((CButton*)(GetDlgItem(IDC_EDIT_CALSHIFT_YMIN)))->SetWindowText(_T("-0.2")); + ((CButton*)(GetDlgItem(IDC_EDIT_CALSHIFT_YMAX)))->SetWindowText(_T("0.2")); + ((CButton*)(GetDlgItem(IDC_EDIT_CALSHIFT_YSTEP)))->SetWindowText(_T("0.001")); + //==================Calibrate Value=============================== + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ_CALIBRATE)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ__CALIBRATE)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_STANDARD_VALUE)))->SetWindowText(cStr); + //==================Standard thickness=========================== + ((CButton*)(GetDlgItem(IDC_EDIT_STANDARD_THICKNESS)))->SetWindowText(cStr); + + //=====================Reference Surface================================== + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X1)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y1)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ1)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X2)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y2)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ2)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X3)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y3)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ3)))->SetWindowText(cStr); + //=====================Top Surface================================== + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X4)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y4)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ4)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X5)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y5)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ5)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X6)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y6)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ6)))->SetWindowText(cStr); + //====================Bottom Surface================================ + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X7)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y7)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ1)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X8)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y8)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ2)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X9)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y9)))->SetWindowText(cStr); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ3)))->SetWindowText(cStr); +} + +//=================================================== +void CUtility_LiteDlg::UpdateDisplayPNTSData() +{ + CString csTmp; + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[0].x); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X4)))->SetWindowText(csTmp); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X7)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[0].y); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y4)))->SetWindowText(csTmp); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y7)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[0].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ4)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_BottomSurfacePNTs[0].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ1)))->SetWindowText(csTmp); + + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[1].x); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X5)))->SetWindowText(csTmp); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X8)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[1].y); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y5)))->SetWindowText(csTmp);; + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y8)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[1].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ5)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_BottomSurfacePNTs[1].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ2)))->SetWindowText(csTmp); + + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[2].x); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X6)))->SetWindowText(csTmp); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X9)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[2].y); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y6)))->SetWindowText(csTmp); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y9)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_TopSurfacePNTs[2].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ6)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),m_BottomSurfacePNTs[2].z); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ3)))->SetWindowText(csTmp); + + csTmp.Format(_T("%.4f"),CalibrateTopLaserValue); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ_CALIBRATE)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),CalibrateBottomLaserValue); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ__CALIBRATE)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),CalibrateValue); + ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_STANDARD_VALUE)))->SetWindowText(csTmp); + csTmp.Format(_T("%.4f"),dStandThickness); + ((CButton*)(GetDlgItem(IDC_EDIT_STANDARD_THICKNESS)))->SetWindowText(csTmp); + + + +} +//=================================================== +void CUtility_LiteDlg::GetPNTSData() +{ + CString str; + UpdateData(TRUE); + USES_CONVERSION; + //=====================XYShift Value=================================== + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_XSHIFT)->GetWindowText(str); + const char* cTempValue=T2A(str); + dXShiftInputVal=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_YSHIFT)->GetWindowText(str); + cTempValue=T2A(str); + dYShiftInputVal=atof(cTempValue); + //==================Standard thickness=========================== + GetDlgItem(IDC_EDIT_STANDARD_THICKNESS)->GetWindowText(str); + cTempValue=T2A(str); + dStandThickness=atof(cTempValue); + //==================Cal Value=============================== + GetDlgItem(IDC_EDIT_CALSHIFT_X_MIN)->GetWindowText(str); + cTempValue=T2A(str); + CalXShiftMin=atof(cTempValue); + GetDlgItem(IDC_EDIT_CALSHIFT_X_MAX)->GetWindowText(str); + cTempValue=T2A(str); + CalXShiftMax=atof(cTempValue); + GetDlgItem(IDC_EDIT_CALSHIFT_X_STEP)->GetWindowText(str); + cTempValue=T2A(str); + CalXShiftStep=atof(cTempValue); + GetDlgItem(IDC_EDIT_CALSHIFT_YMIN)->GetWindowText(str); + cTempValue=T2A(str); + CalYShiftMin=atof(cTempValue); + GetDlgItem(IDC_EDIT_CALSHIFT_YMAX)->GetWindowText(str); + cTempValue=T2A(str); + CalYShiftMax=atof(cTempValue); + GetDlgItem(IDC_EDIT_CALSHIFT_YSTEP)->GetWindowText(str); + cTempValue=T2A(str); + CalYShiftStep=atof(cTempValue); + + //==================Calibrate Value=============================== + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ_CALIBRATE)->GetWindowText(str); + cTempValue=T2A(str); + CalibrateTopLaserValue=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ__CALIBRATE)->GetWindowText(str); + cTempValue=T2A(str); + CalibrateBottomLaserValue=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_STANDARD_VALUE)->GetWindowText(str); + cTempValue=T2A(str); + CalibrateValue=atof(cTempValue); + //==================Reference Surface=============================== + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X1)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[0].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y1)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[0].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ1)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + ReferencePlanePnts[0].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X2)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[1].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y2)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[1].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ2)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + ReferencePlanePnts[1].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X3)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[2].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y3)->GetWindowText(str); + cTempValue=T2A(str); + ReferencePlanePnts[2].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ3)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + ReferencePlanePnts[2].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + + + //=====================Top Surface================================== + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X4)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[0].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y4)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[0].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ4)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + TopSurfacePnts[0].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X5)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[1].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y5)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[1].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ5)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + TopSurfacePnts[1].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X6)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[2].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y6)->GetWindowText(str); + cTempValue=T2A(str); + TopSurfacePnts[2].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ6)->GetWindowText(str); + cTempValue=T2A(str); + TopLaserValue=atof(cTempValue); + //calibrate + TopSurfacePnts[2].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; + + + //====================Bottom Surface================================ + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X7)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[0].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y7)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[0].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ1)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[0].z=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X8)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[1].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y8)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[1].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ2)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[1].z=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X9)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[2].x=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_Y9)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[2].y=atof(cTempValue); + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ3)->GetWindowText(str); + cTempValue=T2A(str); + BottomSurfacePnts[2].z=atof(cTempValue); + + +}; +#pragma warning(disable:4996) +//=========================================================== +void CUtility_LiteDlg::ReadData() +{ + +}; + +void CUtility_LiteDlg::OnBnClickedButtonOpenDataFile() +{ + USES_CONVERSION; + + CString FileName; + CString PathName; + + + FileName=_T("Data.csv"); + CFileDialog fdlg(TRUE, _T("*.csv"),(LPCTSTR) FileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CSV files (*.csv)|*.csv|TXT files (*.txt)|*.txt||"), this); + + if( fdlg.DoModal()==IDOK) + { + PathName=fdlg.GetPathName(); + + FILE* m_pOutFile; + char szLine[MAX_BUFF_SIZE]; + char *token = NULL; + char seps[] = ","; + char cTemp[20]={0}; + _wfopen_s(&m_pOutFile, PathName, _T("rt")); + if (!m_pOutFile) + { + MessageBox( _T("File name Error."), _T("Message"), MB_OK); + } + else + { + //while (!feof(m_pOutFile)) + { + fgets(szLine,MAX_BUFF_SIZE,m_pOutFile);//forget first line + fgets(szLine,MAX_BUFF_SIZE,m_pOutFile);//read a line + token = strtok(szLine,seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[0].x=atof(cTemp); + m_BottomSurfacePNTs[0].x=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[0].y=atof(cTemp); + m_BottomSurfacePNTs[0].y=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[0].z=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_BottomSurfacePNTs[0].z=atof(cTemp); + // + token = strtok(NULL,seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[1].x=atof(cTemp); + m_BottomSurfacePNTs[1].x=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[1].y=atof(cTemp); + m_BottomSurfacePNTs[1].y=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[1].z=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_BottomSurfacePNTs[1].z=atof(cTemp); + // + token = strtok(NULL,seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[2].x=atof(cTemp); + m_BottomSurfacePNTs[2].x=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[2].y=atof(cTemp); + m_BottomSurfacePNTs[2].y=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_TopSurfacePNTs[2].z=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + m_BottomSurfacePNTs[2].z=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + CalibrateTopLaserValue=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + CalibrateBottomLaserValue=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + CalibrateValue=atof(cTemp); + + token = strtok( NULL, seps); + strcpy(cTemp,token); + dStandThickness=atof(cTemp); + } + fclose(m_pOutFile); + UpdateDisplayPNTSData(); + } + + } + +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.h new file mode 100644 index 0000000..f289b16 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Utility_LiteDlg.h @@ -0,0 +1,93 @@ + +// Utility_LiteDlg.h : header file +// + +#pragma once +#define MAX_BUFF_SIZE 0x200 +typedef struct{ + double x; + double y; + double z; +}Struct_3DPoint; + +typedef struct{ +double XShift; +double YShift; +double Dis1; +double Dis2; +double Dis3; +double DisAverage; +double StandErr; +}CalShiftReport; + +// CUtility_LiteDlg dialog +class CUtility_LiteDlg : public CDialogEx +{ +// Construction +public: + CUtility_LiteDlg(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + enum { IDD = IDD_UTILITY_LITE_DIALOG }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + +// Implementation +protected: + HICON m_hIcon; + CFont m_BTNFont; + // Generated message map functions + virtual BOOL OnInitDialog(); + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +protected: + CString m_OutMessage; + CEdit m_edMSG; + Struct_3DPoint TopSurfacePnts[3]; + Struct_3DPoint BottomSurfacePnts[3]; + Struct_3DPoint ReferencePlanePnts[3]; + + double TopPlaneCoeff[4]; + double BottomPlaneCoeff[4]; + double ReferencePlaneCoeff[4]; + double CalibrateValue; + double CalibrateTopLaserValue; + double CalibrateBottomLaserValue; + double dStandThickness; + double CalXShiftMin,CalXShiftMax,CalXShiftStep; + double CalYShiftMin,CalYShiftMax,CalYShiftStep; + double TopLaserValue; + double dYShiftInputVal; + double dXShiftInputVal; + + + Struct_3DPoint m_BottomSurfacePNTs[3]; + Struct_3DPoint m_TopSurfacePNTs[3]; + +public: + void InitData(); + + void GetPNTSData(); + void UpdateDisplayPNTSData(); + + afx_msg void OnBnClickedButtonImagedll2laserCalculate(); + BOOL ThreePntsConstructPlane(Struct_3DPoint* pArr,double* Coe); + double PointToPlaneDistance(Struct_3DPoint PntPos,double* Coe); + double DoublePlaneAngle(double* Coe1,double* Coe2); + double LineToPlaneAngle(double* LineVector,double* Coe); + void CalculatePNT2Plane(); + void CalculateXYSHIFT(); + void CalculateXYSHIFT_METHOD2(); + void CalculateXYSHIFT_METHOD3(); + void CalculateXYSHIFT_Result(); + void ReadData(); + void OutputWithScroll(const CString &strNewText,CEdit &edtOutput); + BOOL ExportReportCSV(const CString &FilePathName); + afx_msg void OnBnClickedButtonSaveAllMsg(); + afx_msg void OnBnClickedButtonClearAllMsg(); + afx_msg void OnBnClickedButtonOpenDataFile(); +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.cpp new file mode 100644 index 0000000..80f569f --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.cpp @@ -0,0 +1,8 @@ + +// stdafx.cpp : source file that includes just the standard includes +// Utility_Lite.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.h new file mode 100644 index 0000000..4cb6425 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/stdafx.h @@ -0,0 +1,58 @@ + +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +#ifndef _SECURE_ATL +#define _SECURE_ATL 1 +#endif + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include // MFC core and standard components +#include // MFC extensions + + +#include // MFC Automation classes + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFC support for ribbons and control bars + + + + + + + + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/targetver.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/targetver.h new file mode 100644 index 0000000..90e767b --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.cpp index 269433c..2bb005e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.cpp @@ -111,7 +111,7 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() //calibrate ReferencePlanePnts[2].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; - ThreePntsConstructionPanel(ReferencePlanePnts,ReferencePlaneCoeff); + ThreePntsConstructPlane(ReferencePlanePnts,ReferencePlaneCoeff); //=====================Top Surface================================== GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X4)->GetWindowText(str); cTempValue=T2A(str); @@ -147,7 +147,7 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() //calibrate TopSurfacePnts[2].z=TopLaserValue-CalibrateTopLaserValue+CalibrateValue+CalibrateBottomLaserValue; - ThreePntsConstructionPanel(TopSurfacePnts,TopPlaneCoeff); + ThreePntsConstructPlane(TopSurfacePnts,TopPlaneCoeff); //====================Bottom Surface================================ GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_X7)->GetWindowText(str); cTempValue=T2A(str); @@ -177,7 +177,7 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() cTempValue=T2A(str); BottomSurfacePnts[2].z=atof(cTempValue); - ThreePntsConstructionPanel(BottomSurfacePnts,BottomPlaneCoeff); + ThreePntsConstructPlane(BottomSurfacePnts,BottomPlaneCoeff); /*************************************************************** result @@ -187,9 +187,9 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() double dAnswer(0.0); CString csOutput; //==================Top - Reference================================ - Top2ReferenceDis[0]=PointToPanelDistance(TopSurfacePnts[0],ReferencePlaneCoeff); - Top2ReferenceDis[1]=PointToPanelDistance(TopSurfacePnts[1],ReferencePlaneCoeff); - Top2ReferenceDis[2]=PointToPanelDistance(TopSurfacePnts[2],ReferencePlaneCoeff); + Top2ReferenceDis[0]=PointToPlaneDistance(TopSurfacePnts[0],ReferencePlaneCoeff); + Top2ReferenceDis[1]=PointToPlaneDistance(TopSurfacePnts[1],ReferencePlaneCoeff); + Top2ReferenceDis[2]=PointToPlaneDistance(TopSurfacePnts[2],ReferencePlaneCoeff); Top2ReferenceDis[3]=(Top2ReferenceDis[0]+Top2ReferenceDis[1]+Top2ReferenceDis[2])/3.0; @@ -203,9 +203,9 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() ((CButton*)(GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_MEASURED_VALUE4)))->SetWindowText(csOutput); - Bottom2ReferenceDis[0]=PointToPanelDistance(BottomSurfacePnts[0],ReferencePlaneCoeff); - Bottom2ReferenceDis[1]=PointToPanelDistance(BottomSurfacePnts[1],ReferencePlaneCoeff); - Bottom2ReferenceDis[2]=PointToPanelDistance(BottomSurfacePnts[2],ReferencePlaneCoeff); + Bottom2ReferenceDis[0]=PointToPlaneDistance(BottomSurfacePnts[0],ReferencePlaneCoeff); + Bottom2ReferenceDis[1]=PointToPlaneDistance(BottomSurfacePnts[1],ReferencePlaneCoeff); + Bottom2ReferenceDis[2]=PointToPlaneDistance(BottomSurfacePnts[2],ReferencePlaneCoeff); Bottom2ReferenceDis[3]=(Bottom2ReferenceDis[0]+Bottom2ReferenceDis[1]+Bottom2ReferenceDis[2])/3.0; dAnswer=Top2ReferenceDis[3]-Bottom2ReferenceDis[3]; @@ -224,7 +224,7 @@ void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() } //=================================================================== -BOOL CSO7_Verfication_Algorithm::ThreePntsConstructionPanel(Struct_3DPoint* pArr,double* Coe) +BOOL CSO7_Verfication_Algorithm::ThreePntsConstructPlane(Struct_3DPoint* pArr,double* Coe) { Struct_3DPoint p1,p2,p3; @@ -244,7 +244,7 @@ BOOL CSO7_Verfication_Algorithm::ThreePntsConstructionPanel(Struct_3DPoint* pArr return TRUE; }; //=================================================================== -double CSO7_Verfication_Algorithm::PointToPanelDistance(Struct_3DPoint PntPos,double* Coe) +double CSO7_Verfication_Algorithm::PointToPlaneDistance(Struct_3DPoint PntPos,double* Coe) { double m_result(0.0); double a(0.0),b(0.0),c(0.0),d(0.0); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp index 4fca2b2..3d50218 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp @@ -154,19 +154,62 @@ void CSo7_Manual_Machine::OnBnClickedRadioSo7ManualMachineCommonCmd3() //=================================================== void CSo7_Manual_Machine::OnBnClickedRadioSo7ManualMachineSendDataTypeHex() { - // TODO: Add your control notification handler code here + m_SendType=HEXADECIMAL; } //=================================================== void CSo7_Manual_Machine::OnBnClickedRadioSo7ManualMachineSendDataTypeAnscii() { - // TODO: Add your control notification handler code here + m_SendType=ANSCII; } //=================================================== void CSo7_Manual_Machine::OnBnClickedButtonSo7ManualMachineSendData() { - // TODO: Add your control notification handler code here + /* + UpdateData(TRUE); + USES_CONVERSION; + CString csSendData(L""); + + GetDlgItem(IDC_EDIT_SO7_MANUAL_MACHINE_DATA)->GetWindowText(csSendData); + const char* cSendData=T2A(csSendData); + if (m_SendType==HEXADECIMAL) + { + char* stop; + BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0}; + INT iSendDataLength=(csSendData.GetLength()+1)/3; + for(INT i=0;im_csRecv=_T(""); + + //¼ÓÉϻسµ»»Ðзû + CString csTemp; + csTemp.Format(_T("\r\n")); + csSendData+=csTemp; + + + cSendData=T2A(csSendData); + } + DWORD iSendDataLength=csSendData.GetLength(); + DWORD iWriteByte=m_pSO7_Serial->Send(cSendData,iSendDataLength); + + ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Send]: "))+cSendData);// + + csSendData.Format(_T("Send(%dByte)"),iWriteByte); + m_StatusBar.SetText(csSendData, 1, 0); + //½ÓÊÜÊý¾Ý + INT iRetrys(0); + while(!m_pSO7_Serial->m_iRecvState && iRetrys<20) + { + iRetrys++; + Sleep(100); + } + */ } //=================================================== diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h index f56bd1e..8954c3a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h @@ -1,6 +1,9 @@ #pragma once - +typedef enum{ + HEXADECIMAL = 0, + ANSCII, +}RS232SendType; // CSo7_Manual_Machine dialog class CSo7_Manual_Machine : public CDialog @@ -21,6 +24,7 @@ protected: protected: CStatusBarCtrl m_StatusBar; CEdit m_edit_Log; + char m_SendType; public: afx_msg void OnBnClickedButtonSo7ManualMachineStartMachine(); afx_msg void OnBnClickedButtonSo7ManualMachineStopMachine(); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln index 3197d25..337d6d3 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln @@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Usb_Util", "UsbUtil\Usb_Util.vcxproj", "{50B21A79-C887-4F7E-8911-7E3A685BFA25}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utility_Lite", "LITE\Utility_Lite\Utility_Lite.vcxproj", "{0E5F6F86-6883-47F0-9DC9-8232BBF13B58}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -25,6 +27,15 @@ Global {50B21A79-C887-4F7E-8911-7E3A685BFA25}.Template|Win32.Build.0 = Template|Win32 {50B21A79-C887-4F7E-8911-7E3A685BFA25}.Template|x64.ActiveCfg = Template|x64 {50B21A79-C887-4F7E-8911-7E3A685BFA25}.Template|x64.Build.0 = Template|x64 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Debug|Win32.Build.0 = Debug|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Debug|x64.ActiveCfg = Debug|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Release|Win32.ActiveCfg = Release|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Release|Win32.Build.0 = Release|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Release|x64.ActiveCfg = Release|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Template|Win32.ActiveCfg = Release|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Template|Win32.Build.0 = Release|Win32 + {0E5F6F86-6883-47F0-9DC9-8232BBF13B58}.Template|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 82bf99ccf8b73e290f81187ad3abaad633c8eeae..78fce168e5627dc145bd2dcbc6beda1f570950aa 100644 GIT binary patch delta 10689 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 GzyAY=NZ5w} delta 35629 zcmeI5dt6l2_Q22DduAL!aTrG=Lg&r!>*?BHD$|rgWj>WMD#gk? z`kSjPR_0K>P{~r3(BJv=PffDkB4WjN{j>RKC0*PMnJ3PM9Ipw@ z@=<8yw*#oNI@V@K=oIi#j?#I*t~S5nRQrw!{lxpx_lWZYl7uPT&}<0X0~o!51=k&A zHjx|R+w6>3&e&WoZbfG6`cQZDI3d=s3lt@1yjU5PtqbaE6dh4TJ+C-^YRGc81-url zxN3$531_rLMCwes&U0*B&5ST#-0VL^1jPjRN}`*WC=2N?{hG(doM1Xx6R|^sddLd> zM8K*6&99AdtZn+;# zIgn{MMi-VVn32YoQMXU%?36gs^129%4-ro5K{zW;UBb zMq|0FA(@G`7MFS}%`X!~{Ad^K!>Oa-85%$kyd_>5^$9eH_ZM!#^N)aq^sr9An`;`z zFmWShJiA*F`_qr`j}?c2XAfZdM{Ka(LQAlk<~N|pW@Hnjw(3cte5GKQOaG$8pyQ?`UJJ#qY)pcQBo;@pXdR-CN(Dn#7Vn19yn(L=htw5}}?{`LN*p{w#ziFLkbPxg7jAq*mBh$roUDn@AwKDN9 z-5{}R=1fBbofWh<-0Aj;;{-j|7QJn_}_&7|0WC^8>*l%D;I;lq@jA zdR4!@Vl{$Cyq^9nx+X)kelgwsqN-o$6cEf9i1Q2g!+NX_Wb;J(ev>$|Fi=!1I3>zf zY=VR8YLO!9^XR@!qV(!gv1@qYIU znw`ZCrmrBC4iWzv|6ae7qIR!y9SrmtAANPo+y zm$Yz_CiSmbn*}EK(t+jndp2O%p!l60V=wdJ`z@w!0t!evk(n282&k%B@NRb zoy8D|`_dq|IepJbz`1kidZc)+;oVNPky>uTwI$4eX`g^EiT)KutgYWEA`iSM${L$g zHL7mdYs8C15J5w167Z^9tUr93;972-h1J{GaCA)t-{!ktdmFG~6qE?(VI6EFeO@Q_ zA2I@|9`Tw+lcaB@1-T?jSCtCq!x6Z5A1z~g(@8Fp+(p84bRX&NcGal#2dU$6ud3%- zn3VyD*J|qUMis=u+jw9Hn<8va%@jW!Gr%5^_+&L1jz8-U!qu=-G+r}^5_h!TMbGd8 z>Beamq&L#3i`Mr^EZNQi^-?z$68jHBqm=RvG3iT-sxSxW!XcU(b}3{}VHtTu5?$|4 zDzcH>!{{cD-Ds57kVc(59rEc)z|6;as0M8bWF6w}H)ifFs`sc?Q%gKaJ-5Mkfs!^;BB?!fj@VD7P*ZauCzuzC_~ z6Q6z+;pe4aI!)=4^pYa%t7zDz65Vr#oMT%RqcP)iwG6Q;kq44;|M*=7?5DSnYx>(@ zy%@a1(mdwBTA7G=XokqUWg^{}NgQ|!S}*{iS}HL$y(4;coT&?eCY;+3_K>Z1x{M^S zi6xDy<24!NTI^6Tzb_oppQmUjP26@2!bl?{_4q#1Pn1s^ix)Ul;@>Z`LM&PaCUJ9d zGCuul)Y1-tedw&y?y4I4`az(H&Z0T0Wg=%AR5#e^6LhrQB0iTwA?WbS5qr`LKh zDH_bINev@n_XU9tYg$-^svy^~d^@~_?V)5fwbIs}#Fk-Xd#wpBRF&!;dJ0(t30V?Z zzne~pAzL=o^@m7zWEfngwRn= z7;xa+5fH3O8PPQa0`;}(IJ*dsAqimiGVTpr8&4c{kv^8o_`-mjF0mjo-~{l#Jr*tl z-bjHX;$me5PJSH%X+1{bfn<2TN0pSal83hwU_sP5(t$rv*-d2+mFK9qsMJ$wpz=JG zy|~2+_w<#~gquzeQ#nTE2$iGwl@$ghzDw1!R8CQOhstRxXQ;?q&eQR|&bmCmAnVoj zZ|_S2hBaqdg-Tg$OeW#mM#87qFa~xJD@&b)YM{qj6r4N?Uc~RxAyoop#ZtVSPJ-Hl zbF6#^x)QlTFQam27ZA;O@NO`{hf=j62cL+8D0gI1xD$JKfzV-Id5~48``bgy54zg>pHb@z74y!WJ9YfnDeB@fi>b;Oj2Tgejl~ zT6ic6CWxrq>?iDTzxh*o$rck)gZPf&YcFW6y2&3iPs0yy%*>;YgPXw`E0_b zTv&+_DZEN$Su$PSr1}gZb23O!J|(hW3MCy$l3wUN*z2`pG8bz55+9lY^=OYK6VCrZ zwxp03c~({FaZei6;5jwZ1};yo0@3g|T*bD@?%P@2qN!1lRdp@&K|sR1e(%C`!(<-;-RabPM4 zkzenNds5VWz*&0O$Eu8Fh=;aPkTKpt6@-{yLb}i-RRf))c?fPT1S4MC2p)>{CEeuC z1lu=)L6kY`aP2u339loZg;j#3+1$4I)Di0sGpZJWr-zs}e1tmh*Ra=mI7&KK9`h=i z0zs!AN~2hgi96xGePuM8>TvT^oOlWn+|Fg-^uujwOgdy=d_4rz=qna3ssW7`O+mC2 z4XPije419jD_{*o*9d09>zfG}4NnpA$>-84MyjtgOrlqAR!KNR*oH@lTboU!Ngq>d zmp1$$;rUN$xD$3_QVnUZ40Kctr!mctx*@%_)$0vj7bW=ylK7h{ zPw-o<+)taFVi{22oLn}Lw$fO>oQJwS&%?T&GN5)l8evjz{Ae7fXF@d(_CDJ3KcU{7+ z(#*YE->t({l5L^MZCCB1%Wa3XoP)RhL{?OyyW>Bgmkv+-k(EgY*At((O!R#k4@7{) zz4tQY=~WAH;_g89oUjzmM_W3N6h9PLSeb(9ec3UrNq`CN3D;nG0=|EkMc~I)7D{du zUhOM9={wciEAW{x_AEsra!V>9Mk3FrQSDNFh}xw$J`v0g<9Z9*-eWTDaUWOgSbY}y zO9!KKhX%3F0Q3D=AgOXB)%sBo-N|&h_dM5$?pq*NGf+igV)@dR5H^A7B+1qA&g}?g z6e^luV3Byel+ixIxm|)J5+?pE#HWZnNL(DRDw3rof@S%6w_nn#)yJSCj!nU=O^l=$ z$Idala+t-S^D?`uC6U=e5`Hb$6itKtKk`!UB{{6xNT%zNU=#V@##6XO!QTOjbvC!m zWT&~VgYNdupko%B($hPh@4FivMQjS-+mEwE>{vkYxm;JrLiU+X4V200-xjW65$IgP zoLDxR4^;!&0=m79Hs4Q*O+Wf$yC9|7D$47hri23fkj%A)ZGwv`h`S-dtbnF`l6-p| zOP7fmXN!YnF|S@PqcNzpj>p*{14Ll;YBr4WO6;2Z*b}T(2dD9blf5B9?(4Q~V4QpJ z+r)C2F@|It*)89W%`^!z7IZw#ruaY@U5M_w=0{$Xd9h}_9wa@I13wcS_Mvxn(@l`5cYYgm%1#y@()&D=(#+y_TOG@h6Re`wjs zvWz~;P#SYw*F@0K;9V;HO48|1-T!J}XQ|Ifx}MtA$KCM?o79t~<)Q5m+k}G-vyHgq z6q|~T&vOf2dWQ|gc}G}@SU=}(EXm;}F|{}pKRCkT(ALWC;*@W}`el6JfOVbgH&BJRZ8KeKqZ^Uuu5#N6d+GJRmcNp;L0PRXaD2LN?(pYRg1o?+*wu)R7(PW06V!7; z0Cv#15A6*UCF@R~!Q2axj=?-vcTaa;#}GbUcVAaGcgGOklZmQHRx~GYi>MvGNqU6A z6l=>wWXa0}vKwjKKq*Ix23N?aj6~^!15^0xSdz?}C@7||g;X+`=VRn73dAVf2!-Qv zXDV|c(2mt#vWM~HN@jIilXx2!7t>;K#&~leKdlssjDI4^JPSqT;bZwrVtrb+yUfmu z0gFfR8XsTfp7E4rR<2>`K=YH>Uc&Ffws$1Ta`-TKzq>U$I%UL2d!juhBQ7(=ZjBp} zkvcpsGch?iZe(KOaC>4(VpeL>h&8X`%~?DRJ(GE2zd4S@kItW$x3p|to;*5=$_nN! zDJ#V493D&i+&k}kuaukcu|hr!Gs4ZEQo{PqC3PqjMSKYS@lLDAE%uY+`v(4WrxEEX z!?EPA^VfLTBZq#pj9V!1We)eC= z3v)xwfpA8I>-wN|1#hc+jQ0+l*?m{MM<$Bp$1VFE!R7?klFEC3Q68CE2$vmxb%E69 z2l{n&R|a`x_Fw*fJ{{X{S`6=fKmY4*{(b%QF>`IdRTXsx#r|9RLZmsf&(`iYg?XN( zI(^&1I48HFE!_NV;Qa2Zin5aG^23Jxmx{|G%^88t?w;`;H`R&miv8DZLM}$&+HT=0 z6uEl8j@o~r${C?K-A|43$n}z+X#zstey1?1(55iV9%Z(&Om#`_u3N~R{pEXK{F&>P zdDL;_wC$9PPuv-WIg9u}{Le)c3OE<>UUiGO?M{+YhT*(e#aQ|ne-Nz;xbcn&yH}1fCv$vn z9gnXoYqCr=q_DJ5DWOW*V%91z2vI8sx&>BRC#MTQ-ci8D!xt)N*t>R?#dJzw^T`W?ASqV z-tch^w*Y?n0JFGvt>py(DVVTZ$kGAEU(mb*?eiuIigS^3z z;@V+TCu-fO9t~rPA6vXQU2Re@aje-opz9m)y~<;}MQlSqTB&O}G z!2Apz8?Z!~OW$65(O2v|`d6UL6Q5i=EO%xtHhzjj2G(cr4em*HeoBYo+xTDPpn9vf z`gGr_W^l-b1YzoBW}?WDrhIc34;8My7SZI2t*hf6`H@cX)Y;@gaaG#>jYv|5M;=ix z%Rk@0^+9)?Dvq5t^)!FJ_c)=}d)&U>_DhNxidL^)Ww(k0*)|!t`=ezyR|Q zcf!kjDPZD5e2_#&7=0#^b|OdTe*XpDOncUGJU-y5q)*~6Ir}{1=v|$XTRnfQue!Wf zoIL*b&OMxApJ{v*wom1hL)QLiGSKuuGXo6;8VNNLY9!Q1sF6@3p+-WDgc=Do5^5yW zNT`ueBcVn@jf5HrH4