155 lines
4.7 KiB
C++
155 lines
4.7 KiB
C++
#include "StdAfx.h"
|
|
#include <WinDef.h>
|
|
#include <WinBase.h>
|
|
#include "dll.h"
|
|
#include "So7_Interface.h "
|
|
|
|
#define MAX_STORAGE_DATA_SIZE 65536
|
|
|
|
CSo7_Interface::CSo7_Interface()
|
|
{
|
|
m_hImageDLL=NULL;
|
|
m_hFitDLL=NULL;
|
|
}
|
|
|
|
CSo7_Interface::~CSo7_Interface()
|
|
{
|
|
if(m_hImageDLL)
|
|
{
|
|
Pro_cmd(Exit_DLL,(LPARAM)&Image_Info);
|
|
Sleep(50);
|
|
Pro_cmd(VQUIT_DLL,(LPARAM)&Image_Info);
|
|
Sleep(50);
|
|
Pro_cmd(MCLOSE,(LPARAM)&Image_Info);
|
|
Sleep(50);
|
|
FreeLibrary(m_hImageDLL);
|
|
}
|
|
if(m_hFitDLL)
|
|
{
|
|
FreeLibrary(m_hFitDLL);
|
|
}
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::InitDll(void)
|
|
{
|
|
m_hImageDLL=(HMODULE)LoadLibrary(GetAppPath()+_T("\\Image.dll"));
|
|
if(m_hImageDLL)
|
|
{
|
|
Pro_cmd=(PRO_CMD)GetProcAddress(m_hImageDLL,"Pro_Cmd");
|
|
m_pGET_LASER_STORED_DATA=(GET_LASER_STORED_DATA)GetProcAddress(m_hImageDLL,"GetLaserStoredData");
|
|
m_pPAUSE_SCAN_AND_GET_LASER_DATA=(PAUSE_SCAN_AND_GET_LASER_DATA)GetProcAddress(m_hImageDLL,"PauseScanAndGetLaserData");
|
|
m_pGET_SCAN_LASER_STORAGE_STATUS=(GET_SCAN_LASER_STORAGE_STATUS)GetProcAddress(m_hImageDLL,"GetKeyenceStorageStatus");
|
|
g_FitFace=(FITTING_SURFACE)GetProcAddress(m_hImageDLL,"FaceFit");
|
|
m_pGetLaserData=(GET_LASER_DATA)GetProcAddress(m_hImageDLL,"GetKeycen_LaseData");
|
|
|
|
Pro_cmd(VINIT_DLL,(LPARAM)&Image_Info);
|
|
Pro_cmd(MINIT_USB,(LPARAM)&Image_Info);
|
|
}
|
|
else
|
|
{
|
|
MessageBox(NULL, _T("Load Image.dll failed!"), _T("Message"), MB_OK);
|
|
}
|
|
//=====================================
|
|
m_hFitDLL=(HMODULE)LoadLibrary(GetAppPath()+_T("\\FitDll.dll"));
|
|
if(m_hFitDLL)
|
|
{
|
|
g_FitFace_PCD=(FITTING_SURFACE_PCD)GetProcAddress(m_hFitDLL,"FaceFit");
|
|
}
|
|
else
|
|
{
|
|
MessageBox(NULL, _T("Load FitDll.dll failed!"), _T("Message"), MB_OK);
|
|
}
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::StartStoreData(void)
|
|
{
|
|
Image_Info.gScanLaserPntsNumber=500;
|
|
Image_Info.gScanLaserPntsSampleTime=20;
|
|
Pro_cmd(START_SCAN_LASER_POINTS,(LPARAM)&Image_Info);
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::StopStoreData(void)
|
|
{
|
|
Pro_cmd(STOP_SCAN_LASER_POINTS,(LPARAM)&Image_Info);
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::GetStorageStatus(void)
|
|
{
|
|
int _bIsStorage(0),_StoredDataNumber(0);
|
|
Pro_cmd(GET_SCAN_LASER_STATUS,(LPARAM)&Image_Info);
|
|
_bIsStorage = Image_Info.gIsLaserStorage;
|
|
_StoredDataNumber= Image_Info.gLaserStoredNumber;
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::GetStoredData(void)
|
|
{
|
|
float Laserval[1000];
|
|
int LaserNum(0);
|
|
m_pGET_LASER_STORED_DATA(Laserval,&LaserNum);
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::PauseScanAndGetData(void)
|
|
{
|
|
float Laserval[1000];
|
|
int LaserNum(0);
|
|
m_pPAUSE_SCAN_AND_GET_LASER_DATA(Laserval,&LaserNum);
|
|
}
|
|
//========================================
|
|
int CSo7_Interface::Pro_Face_Du(MY3DPoint* pArr, int n, double* Coe, double* Error, double& dis)
|
|
{
|
|
//g_Set_Face_Flag 1--双向最大值差 2--平均值 3--正向最大值
|
|
double dis1(0.0),dis2(0.0),dis3(0.0);
|
|
double sum(0.0);
|
|
double d1=pArr[0].z;
|
|
for(int i=1;i<n;i++)
|
|
sum+=fabs(d1-pArr[i].z);
|
|
if(sum<0.0001)
|
|
pArr[0].z+=0.0001;
|
|
//g_FitFace(pArr,n,Coe,Error,dis1,dis2,dis3);
|
|
//MY3DPoint* pArr,int n, double* Coe, double* N, double *Error,double& dis1, double& dis2, double& dis3,double & d_max,double & d_min,int & i_max,int & i_min)
|
|
double ParN[1024]={0.0};
|
|
double d_max(0.0),d_min(0.0);
|
|
int i_max(0),i_min(0);
|
|
g_FitFace_PCD(pArr,n,Coe,ParN,Error,dis1,dis2,dis3,d_max,d_min,i_max,i_min);
|
|
dis=dis2;
|
|
|
|
return 1;
|
|
}
|
|
//========================================
|
|
double CSo7_Interface::PointToFace_1(double* _dCoe, MY3DPoint _PointXYZ)
|
|
{
|
|
double a,b,c,d;
|
|
double r1(0.0);
|
|
a = _dCoe[0];
|
|
b = _dCoe[1];
|
|
c = _dCoe[2];
|
|
d = _dCoe[3];
|
|
r1=((a*_PointXYZ.x + b*_PointXYZ.y + c*_PointXYZ.z + d)/sqrt(a*a + b*b + c*c));
|
|
return r1;
|
|
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::GetPositionXYZ(double* _dPosition)
|
|
{
|
|
Image_Info.Org_AbsX=0;
|
|
Image_Info.Org_AbsY=0;
|
|
Image_Info.MaxisX_Scale=0.5;
|
|
Image_Info.MaxisY_Scale=0.5;
|
|
Image_Info.g_Bar_curx=0.0;
|
|
Image_Info.g_Bar_cury=0.0;
|
|
Pro_cmd(MREAD_AXIS,(LPARAM)&Image_Info);
|
|
_dPosition[0]=Image_Info.MaxisX;
|
|
_dPosition[1]=Image_Info.MaxisY;
|
|
_dPosition[2]=Image_Info.MaxisZ;
|
|
}
|
|
//========================================
|
|
void CSo7_Interface::GetLaserData(double* _dLaserData)
|
|
{
|
|
Image_Info.Lase_USB_Type=10;
|
|
Pro_cmd(SWITCH_USB_LASE,(LPARAM)&Image_Info);
|
|
float fData1,fData2;
|
|
m_pGetLaserData(&fData1,&fData2);
|
|
_dLaserData[0]=static_cast<double>(fData1);
|
|
_dLaserData[1]=static_cast<double>(fData2);
|
|
}
|