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 new file mode 100644 index 0000000..269433c --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.cpp @@ -0,0 +1,261 @@ +// SO7_Verfication_Algorithm.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" + +#include +#include "SO7_Verfication_Algorithm.h" +#include "afxdialogex.h" + + +// CSO7_Verfication_Algorithm dialog + +IMPLEMENT_DYNAMIC(CSO7_Verfication_Algorithm, CDialog) + +CSO7_Verfication_Algorithm::CSO7_Verfication_Algorithm(CWnd* pParent /*=NULL*/) + : CDialog(CSO7_Verfication_Algorithm::IDD, pParent) +{ + +} + +CSO7_Verfication_Algorithm::~CSO7_Verfication_Algorithm() +{ +} + +void CSO7_Verfication_Algorithm::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CSO7_Verfication_Algorithm, CDialog) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_2LASER_CALCULATE, &CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate) +END_MESSAGE_MAP() + + +// CSO7_Verfication_Algorithm message handlers + +//====================================================== +BOOL CSO7_Verfication_Algorithm::OnInitDialog() +{ + CDialog::OnInitDialog(); + + m_BTNFont.CreatePointFont(200,L"Arial Black") ; + ((CButton*)(GetDlgItem(IDC_BUTTON_IMAGEDLL_2LASER_CALCULATE)))->SetFont(&m_BTNFont); + + return TRUE; // return TRUE unless you set the focus to a control +} +void CSO7_Verfication_Algorithm::OnBnClickedButtonImagedll2laserCalculate() +{ + + CString str; + UpdateData(TRUE); + USES_CONVERSION; + + Struct_3DPoint TopSurfacePnts[3]; + Struct_3DPoint BottomSurfacePnts[3]; + Struct_3DPoint ReferencePlanePnts[3]; + double TopPlaneCoeff[4]={0.0}; + double BottomPlaneCoeff[4]={0.0}; + double ReferencePlaneCoeff[4]={0.0}; + + double CalibrateValue(0.0); + double CalibrateTopLaserValue(0.0); + double CalibrateBottomLaserValue(0.0); + + double TopLaserValue(0.0); + + //==================Calibrate Value=============================== + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_TOPZ_CALIBRATE)->GetWindowText(str); + const char* 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; + + ThreePntsConstructionPanel(ReferencePlanePnts,ReferencePlaneCoeff); + //=====================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; + + ThreePntsConstructionPanel(TopSurfacePnts,TopPlaneCoeff); + //====================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); + + ThreePntsConstructionPanel(BottomSurfacePnts,BottomPlaneCoeff); + + /*************************************************************** + result + ****************************************************************/ + double Top2ReferenceDis[4]={0.0}; + double Bottom2ReferenceDis[4]={0.0}; + 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[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]=PointToPanelDistance(BottomSurfacePnts[0],ReferencePlaneCoeff); + Bottom2ReferenceDis[1]=PointToPanelDistance(BottomSurfacePnts[1],ReferencePlaneCoeff); + Bottom2ReferenceDis[2]=PointToPanelDistance(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); + + +} +//=================================================================== +BOOL CSO7_Verfication_Algorithm::ThreePntsConstructionPanel(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 CSO7_Verfication_Algorithm::PointToPanelDistance(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; +}; \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h new file mode 100644 index 0000000..c47c880 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h @@ -0,0 +1,32 @@ +#pragma once +typedef struct{ + double x; + double y; + double z; +}Struct_3DPoint; + +// CSO7_Verfication_Algorithm dialog + +class CSO7_Verfication_Algorithm : public CDialog +{ + DECLARE_DYNAMIC(CSO7_Verfication_Algorithm) + +public: + CSO7_Verfication_Algorithm(CWnd* pParent = NULL); // standard constructor + virtual ~CSO7_Verfication_Algorithm(); + +// Dialog Data + enum { IDD = IDD_SO7_UTIL_VERIFICATION_ALGORITHM }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); + DECLARE_MESSAGE_MAP() +protected: + CFont m_BTNFont; +public: + BOOL ThreePntsConstructionPanel(Struct_3DPoint* pArr,double* Coe); + double PointToPanelDistance(Struct_3DPoint PntPos,double* Coe); + + afx_msg void OnBnClickedButtonImagedll2laserCalculate(); +};