Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h
T
2013-05-29 11:08:59 +08:00

1158 lines
35 KiB
C++

#ifndef DLL_H_
#define DLL_H_
#pragma once
#include <vector>
#include "NewDataStruct.h"
#define PI 3.14159
#define SET_FACE_NUM 100
#define BAR_CODE_WIDTH 20
#define BAR_CODE_HEIGHT 20
#ifdef EF_IMAGE_DLL
#define EXP __declspec(dllexport)
#else
#define EXP __declspec(dllimport)
#endif
#define WM_MSG (WM_USER+101)
#define RS232 (WM_USER+102)
#define WM_COMM_USBIN (WM_USER+103)
#define WM_IMAGE_MSG (WM_USER+104)
#define WM_IMAGE_DAT (WM_USER+105)
#define WM_MUL_CCD (WM_USER+106)
#define WM_MUL_CCD1 (WM_USER+107)
#define WM_M1K_CCD1 (WM_USER+108)
#define WM_M1K_CCD2 (WM_USER+109)
#define WM_GET_PIC (WM_USER+110)
const UINT WM_USERDEFMSG = ::RegisterWindowMessage(_T("UserDefMsg"));
//using namespace std;
#pragma pack(push)
#pragma pack(16)
typedef struct float_point
{
double x;
double y;
}FP;
typedef struct light_value
{
char top_value;
char bom_value;
char fan_value;
char bom1_value;
char bom2_value;
char fan1_switch;
char fan2_switch;
}g_light;
typedef struct Image_Section
{
double x0;
double y0;
double x1;
double y1;
double scalex;
double scaley;
}Image_Section;
//typedef struct video_80M
//{
// BOOL m_Aeen;
// BYTE m_AeTarget;
// int m_BGain;
// BOOL m_bColorCorrect;
// BYTE m_Contrast;
// int m_ExpTime;
// int m_AnalogGain;
// BYTE m_Gamma;
// int m_GGain;
// int m_RGain;
// BYTE m_Saturation;
// BYTE m_FrameSpeed;
// UINT m_StrobleDelay;
// UINT m_StrobleDuration;
// UINT m_TriggerDelay;
// char m_Mode;
// char m_Save_Mode;
// //bool m_
//
//}video_80M;
typedef struct Dev_Info
{
//CWnd * m_cWnd;
HWND g_USB_hWnd;
HWND g_hWnd_Display;//显示主窗口
HWND g_hWnd_Msg;//消息主窗口
int g_Card_Num;
int g_Card_No;
int g_Switch_No;//显示通道
int g_Width;
int g_Height;
//BYTE pBuf[640*480*2];
int g_Sharpness; //锐度
int g_Saturation;//饱和度
int g_Hue;//色度
int g_Contrast;//对比度
int g_Brightness;//亮度
char g_Picture_Type;//0-bmp,1-jpg
char StrFileName[50];
int cap_xa;
int cap_ya;
int cap_xb;
int cap_yb;
int disp_xa;
int disp_ya;
int disp_xb;
int disp_yb;
char IOin;
char IOout;
BYTE RD_Usb_Dat[64];
BYTE WR_Usb_Dat[64];
BYTE User_Dat[250];
unsigned long RD_Usb_Dat_Length;
unsigned long WR_Usb_Dat_Length;
char MoveX_Value;
char MoveY_Value;
char MoveZ_Value;
char MoveV_Value;
double MoveToX_Value;
double MoveToY_Value;
double MoveToZ_Value;
char MoveToV_Value;
double MaxisX;
double MaxisY;
double MaxisZ;
int Fan_Light_Size;
int Top_Light_Size;
int Bottom_Light_Size;
char Light_Value[14];
char Light_Switch;
int light_size_value;
BYTE *pBit;
int startX;
int startY;
int nWidth;
int nHeight;
double coorX;
double coorY;
int coorX_Off;
int coorY_Off;
double ValueZ;
char rect_flag;
int bar_type;
int bar_num;
char g_type;
char g_mode;
char g_base;
char g_fresh;
char g_start;
char g_hold;
float g_slow;
float g_precision;
char get_xy_flag_num;
char draw_num;
int bar_dir;
int Dog_Cmd;
int User_Dat_Len;
int MaxisX_Dir;
int MaxisY_Dir;
int MaxisZ_Dir;
char Face_Flag;
//double Get_Axis_Z[SET_FACE_NUM];
//double Get_Image_Value[SET_FACE_NUM];
int g_Face_Index;
double Org_AbsX;
double Org_AbsY;
double Org_AbsZ;
double g_Bar_Scalex;
double g_Bar_Scaley;
double g_Bar_Orgx;
double g_Bar_Orgy;
double g_Bar_curx;
double g_Bar_cury;
double MaxisX1;
double MaxisY1;
double MaxisZ1;
double MaxisX_Scale;
double MaxisY_Scale;
double MaxisZ_Scale;
double g_Bar_dirx;
double g_Bar_diry;
int Bar_fresh_flag;
char Usb_Cmd;
char m_Usb_Cmd;
char m_Usb_type;
double m_Usb_dat;
double g_Bar_LineScaleX;
double g_Bar_LineScaleY;
double ResultVZ;
char Diy_Face_Flag;
double Diy_x;
double Diy_y;
double Face_Long_Dis;
double Face_Short_Dis;
double Face_Long_Step;
double Face_Short_Step;
int Mdat1;
int Mdat2;
int Mdat3;
int Mdat4;
int Mdat5;
int Mdat6;
int Mdat;
char value;
long Max_ToV;
int Min_ToV;
int g_Rule_Type;//1,旧板,2-新板
unsigned long g_Axis_V;
long Org_AbsV;
int BarCode_Width;
int BarCode_Height;
double XT_scale;
double XM_scale;
double XB_scale;
double YL_scale;
double YM_scale;
double YR_scale;
char Enable_Face_flag;
char g_Check_BarCode_Flag;
g_light g_light1;
char g_sys_reset_flag;
char Adc_Num;
int Adc_Value[10];
char Adc_No;
int g_Adc_Value;
int motor_type;
double motor_ScaleX;
double motor_ScaleY;
double motor_ScaleZ;
char motor_check_flag;
char g_video_type;
char bar_XY_type;//barcode XY 读数坐标对换
char Set_Current_Flag;
char m_Aeen;
BYTE m_AeTarget;
int m_BGain;
char m_bColorCorrect;
BYTE m_Contrast;
int m_ExpTime;
int m_AnalogGain;
BYTE m_Gamma;
int m_GGain;
int m_RGain;
BYTE m_Saturation;
BYTE m_FrameSpeed;
UINT m_StrobleDelay;
UINT m_StrobleDuration;
UINT m_TriggerDelay;
char m_Mode;
char m_Save_Mode;
UINT m_RawTime;
double m_Motor_Dx;
double m_Motor_Dy;
double m_Motor_Dz;
int m_Motor_Plus_Num;
char m_face_mode;
char g_M_Count_Flag;
char Get_Plc_Dat;
char Set_Plc_Dat;
double g_ProbeX;
double g_ProbeY;
double g_ProbeZ;
char g_video_type1;
int g_Cap_Image;
double g_Angle;
char g_Debug_Video;
int bar_Len_Type;
int g_BarY_dir;
float g_Lase1;
float g_Lase2;
char g_BarCode_Dir_Flag;
int g_HOff1;// = 1192;
int g_VOff1;
int g_HOff2;// = 1192;
int g_VOff2;
int g_Add_Pic_Flag;
int Lase_USB_Type;
int g_OScreen_Flag;
bool g_Mon;
bool g_MirrorV;
bool g_MirrorH;
char g_M1k_Mode;
int BarCodeX;
int BarCodeY;
int RunBar_Mode;
float Axis_X;
float Axis_Y;
float Bar_Ofx;
float Bar_Ofy;
float Bar_X;
float Bar_Y;
int Bar_Filter_Mode;
int g_Set_Area_Flag;
PointDB g_Set_Areas[5];
int gFrameKey;
float Bar_Scale_Unit;
int g_ITO_Flag;
int g_face_flag;
int g_Nav_Flag;
int g_Video_Input_Mode;
int gAutoZoomFlag;
int gScanLaserPntsSampleTime;
int gScanLaserPntsNumber;
int gIsLaserStorage;
int gLaserStoredNumber;
Dev_Info()
{
g_hWnd_Display = NULL;
g_hWnd_Msg = NULL;
g_Card_Num = 0;
g_Card_No = 0;
g_Switch_No = 0;
g_Width = 640;
g_Height = 480;
g_Sharpness = 0;
g_Saturation = 0;
g_Hue = 0;
g_Contrast = 0;
g_Picture_Type = 0;
cap_xa = 0;
cap_ya = 0;
cap_xb = 640;
cap_yb = 480;
disp_xa = 0;
disp_ya = 0;
disp_xb = 640;
disp_yb = 480;
IOin = 0;
IOout = 0;
RD_Usb_Dat_Length=0;
WR_Usb_Dat_Length=0;
MoveX_Value=0;
MoveY_Value=0;
MoveZ_Value=0;
MoveV_Value=0;
MoveToX_Value=0;
MoveToY_Value=0;
MoveToZ_Value=0;
MoveToV_Value=0;
MaxisX=0;
MaxisY=0;
MaxisZ=0;
Fan_Light_Size=0;
Top_Light_Size=0;
Bottom_Light_Size=0;
Light_Switch=0;
light_size_value=0;
pBit=NULL;
startX=0;
startY=0;
nWidth=0;
nHeight=0;
coorX=0;
coorY=0;
coorX_Off=0;
coorY_Off=0;
ValueZ=0;
rect_flag=0;
bar_type=2;
bar_num=10;
g_mode=1;
g_base=10;
g_fresh=10;
g_start=100;
g_hold=10;
g_slow=1;
g_precision=0.0;
get_xy_flag_num=3;
draw_num=0;
bar_dir=0;
Dog_Cmd=0;
User_Dat_Len=0;
MaxisX_Dir=1;
MaxisY_Dir=1;
MaxisZ_Dir=1;
Face_Flag=0;
g_Face_Index=150;
Org_AbsX=0;
Org_AbsY=0;
Org_AbsZ=0;
g_Bar_Scalex=0.00243309;
g_Bar_Scaley=0.00247525;
g_Bar_Orgx=0;
g_Bar_Orgy=0;
g_Bar_curx=0;
g_Bar_cury=0;
MaxisX1=0;
MaxisY1=0;
g_Bar_dirx=1;
g_Bar_diry=-1;
Bar_fresh_flag=0;
Usb_Cmd=0;
m_Usb_Cmd=0;
m_Usb_type=0;
m_Usb_dat=0;
MaxisX_Scale=1;
MaxisY_Scale=1;
MaxisZ_Scale=1;
g_Bar_LineScaleX=1;
g_Bar_LineScaleY=1;
ResultVZ = 0;
Diy_Face_Flag=0;
Diy_x = 0;
Diy_y = 0;
Face_Long_Dis = 0;
Face_Short_Dis = 0;
Face_Long_Step = 0;
Face_Short_Step = 0;
Mdat1 = 0;
Mdat2 = 0;
Mdat3 = 0;
Mdat4 = 0;
Mdat5 = 0;
Mdat6 = 0;
Mdat = 0;
value = 0;
Max_ToV = 2800;
Min_ToV = 10;
g_Rule_Type = 2;
g_Axis_V = 0;
Org_AbsV = 0;
BarCode_Width = 600;
BarCode_Height = 500;
XT_scale = 1;
XM_scale = 1;
XB_scale = 1;
YL_scale = 1;
YM_scale = 1;
YR_scale = 1;
Enable_Face_flag = 0;
g_Check_BarCode_Flag = 0;
g_sys_reset_flag = 0;
Adc_Num = 0;
Adc_No = 0;
g_Adc_Value = 0;
motor_type = 0;
motor_ScaleX = 0.001;
motor_ScaleY = 0.001;
motor_ScaleZ = 0.001;
motor_check_flag = 0;
g_video_type = 0;
bar_XY_type = 1;
Set_Current_Flag = 0;
m_Aeen=0;
m_AeTarget=1;
m_BGain=1;
m_bColorCorrect=0;
m_Contrast=1;
m_ExpTime=1;
m_AnalogGain=5;
m_Gamma=5;
m_GGain=10;
m_RGain=10;
m_Saturation=1;
m_FrameSpeed=5;
m_StrobleDelay=5;
m_StrobleDuration=5;
m_TriggerDelay=5;
m_Mode=3;
m_Save_Mode=0;
m_RawTime=1;
m_Motor_Dx=1.5;
m_Motor_Dy=1.5;
m_Motor_Dz=1.5;
m_Motor_Plus_Num=10000;
m_face_mode=1;
g_M_Count_Flag=0;
Set_Plc_Dat=0;
Get_Plc_Dat=0;
g_ProbeX = 0;
g_ProbeY = 0;
g_ProbeZ = 0;
g_video_type1=1;
g_Cap_Image=0;
g_Angle=0;
g_Debug_Video=0;
bar_Len_Type=0;
g_BarY_dir=1;
g_Lase1=0;
g_Lase2=0;
g_BarCode_Dir_Flag=0;
g_HOff1 = 1192;
g_VOff1 = 1134;
g_HOff2 = 1192;
g_VOff2 = 1134;
g_Add_Pic_Flag=0;
Lase_USB_Type=0;
g_OScreen_Flag=0;
g_MirrorV=0;
g_MirrorH=0;
g_Mon=0;
g_M1k_Mode=0;
BarCodeX=0;
BarCodeY=0;
RunBar_Mode=0;
Axis_X=0;
Axis_Y=0;
Bar_Ofx=0;
Bar_Ofy=0;
Bar_X=0;
Bar_Y=0;
Bar_Filter_Mode=0;
g_Set_Area_Flag=0;
gFrameKey=10;
Bar_Scale_Unit=0.5;
g_ITO_Flag=0;
g_face_flag=0;
g_Nav_Flag=0;
g_Video_Input_Mode=0;
gAutoZoomFlag=0;
gScanLaserPntsSampleTime=0;
gScanLaserPntsNumber=0;
gIsLaserStorage=0;
gLaserStoredNumber=0;
};
}g_Dev_Info;
#pragma pack(pop)
enum
{
VINIT_DLL,
VSEND_DAT,
VSWITCH_NO,
VSET_PARAMETER,
VGET_PARAMETER,
VSAVE_PICTURE,
VGET_PICTURE,
VSET_CAP_VALUE,
VSET_DISP_VALUE,
VOUT_VALUE,
VIN_VALUE,
VIN_START,
VIN_STOP,
VRUN_VIDEO,
VPUSE_VIDEO,
VSTOP_VIDEO,
VDISP_PROPERTY,
VQUIT_DLL,
RSDAT,
MINIT_USB,
MWRITE_DAT,
MREAD_DAT,
MMOVEX,
MMOVEY,
MMOVEZ,
MMOVEV,
MMOVETOX,
MMOVETOY,
MMOVETOZ,
MMOVETOV,
MMOVETOXYZ,
MMOVETOXYZV,
MSTOP,
MCLOSE,
MREAD_AXIS,
MREAD_PRODE,
MRESET_V,
RWRITE_LIGHT1_SWITCH,
RWRITE_LIGHT2_SWITCH,
RWRITE_LIGHT3_SWITCH,
RWRITE_LIGHT4_SWITCH,
RSET_LIGHT1_SIZE,
RSET_LIGHT2_SIZE,
RSET_LIGHT3_SIZE,
RSET_LIGHT4_SIZE,
CALE_XY_VALUE,
CALE_Z_VALUE,
GET_RECT,
SET_SPEED,
SET_PRECISION,
PRO_DOG,
MRESETXY,
MRESETXYZ,
MRESET_ORG,
MUSB_SEND_CMD,
MUSB_SEND_DAT,
PRO_BARCODE,
CALE_Z_VALUE_DIY,
MUSB_SEND_MDAT,
MUSB_READ_MDAT,
MUSB_SEND_MCMD,
READ_V,
RSET_LIGHT_CMD,
MUSB_GET_RESET_FLAG,
MUSB_READ_ADC,
MUSB_READ_ADC_INDEX,
PRO_MOTOR_TYPE,
PRO_MOTOR_SCALE,
PRO_CHANGE_VIDEO_TYPE,
PRO_SET_CURRENT_FLAG,
PRO_CHANGE_VIDEO_PARAMETER,
VIDEO_GET_ALL_PARAMETER,
VIDEO_SET_ALL_PARAMETER,
VIDEO_ENABLE_AE,
VIDEO_EXPOSURE,
VIDEO_COLOR_CONTROL,
VIDEO_AUTO_WB,
VIDEO_ENHACEMENT,
VIDEO_FRAME_SPEED,
VIDEO_TRIGGER_CONTROL,
VIDEO_SAVE_PARAMETER,
VIDEO_READ_SAVE_PARAMETER,
VIDEO_PRO_PARAMETER,
VIDEO_SET_MODE,
MOTOR_XYZ_DXYZ,
RS232_FRESH_DAT,
SET_TABLE_MODE,
PRO_IMAGE_MSG,
PRO_IMAGE_DAT,
INIT_RS232_PLC,
MUSB_READ_PLC,
MUSB_WRITE_PLC,
PRO_CHANGE_VIDEO_TYPE1,
PRO_CAP_IMAGE,
CALE_BARCODE_COOR_ANGLE,
START_CAP_IMAGE,
START_CAP_IMAGE1,
START_MUL_NAV,
STOP_MUL_NAV,
MMOVE_TOXYZ,
MMOVE_TOXYZ_LASE,
//GET_MIN_BOX,
MUSB_GET_LASE_VALUE,
Exit_DLL,
MADD_M1000K,
SWITCH_USB_LASE,
MMOVE_TOXYZV,
SWITCH_WORK_MODE,
DLL_DEBUG_ON,
DLL_DEBUG_OFF,
VIDEO_MIRROR_VH_MONO,
CHANGE_M1K_MODE,
MMOVE_TOXYZ_JM,
MVIDEO_NAV_START,
MVAUTOZOOM,
START_SCAN_LASER_POINTS,
STOP_SCAN_LASER_POINTS,
GET_SCAN_LASER_STATUS,
VCOM_TOTAL
};
#ifdef EF_IMAGE_DLL
extern BOOL WINAPI OpenPicture(LPBYTE pBits,int nWidth,int nHeight,int* px,int* py,int* pR);
//Mv8800回调
void WINAPI __stdcall StreamCap(const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam);
void CALLBACK VCAPrcVidCapCallBack(DWORD dwCard, BYTE *pbuff,DWORD dwSize);
//============================SV2000E=====================================
unsigned CALLBACK SVAPrcVidCapCallBack(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void WINAPI* context);
int CALLBACK SnapThreadCallback(BYTE *pBuffer);
#endif
extern "C"
{
EXP void WINAPI Pro_Cmd(int nCmd, LPARAM value);
EXP void WINAPI Get_Image_Dat(BYTE* pBuf,int type);
EXP void WINAPI Pro_Image_Data(LPBYTE pBits,int nWidth, int nHeight);
EXP void WINAPI Pro_Circle(float_point* pBits,int num,double *x,double *y,double* pR);
EXP void WINAPI Pro_Line(float_point *p,int num,float_point *p2,float *dis,float *ange,float *t);//p取点缓冲区首址 num取点数 dis线长度 ange角度 t直线度
EXP bool WINAPI init_232(HWND hwnd, char com_type, UINT baud,BYTE m_iDataBIT, BYTE m_iStopBit, BYTE m_iParity);
EXP void WINAPI Write_Com(BYTE* Str,int len);
EXP void WINAPI Get_Dat(BYTE* Str);
EXP void WINAPI Get_Picture_Dat(BYTE* pBuf);
// Function name : ExpArrEdgeLine
// Description : 输入一个矩形框,返回框内的直线边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point pot1Rect 输入矩形框的第一个顶点
// Argument : Point pot2Rect 输入矩形框的第二个顶点
// Argument : Point _pot1Rect 输入矩形框的第三个顶点
// Argument : Point _pot2Rect 输入矩形框的第四个顶点
// Argument : Point* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrEdgeLine(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold);
EXP int WINAPI ExpArrEdgeLine_down(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold);
// Function name : ExpArrEdgeArc
// Description : 输入一个环扇形区,返回区内的圆弧边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point center 输入环扇形区圆心
// Argument : double dRadiusIn 输入环扇形区的内径
// Argument : double dRadiusOut 输入环扇形区的外径
// Argument : double dAngleStart 输入环扇形区的起始边角度
// Argument : double dAngleEnd 输入环扇形区的终止边角度
// Argument : Point* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrEdgeArc(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,double dAngleStart,double dAngleEnd,PointDB* ptArr,int& count,int threshold,PointDB& cen,double& R);
// Function name : ExpLineFit
// Description : 直线拟合函数
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : Point* ptArr 输入参与拟合运算的点数组
// Argument : int count 点数组长度
// Argument : Point& pot1Line 返回拟合线段一个端点
// Argument : Point& pot2Line 返回拟合线段的另一个端点
EXP int WINAPI ExpLineFit(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line);
// Function name : ExpArcFit
// Description : 圆弧拟合函数
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : Point* ptArr 输入参与拟合运算的点数组
// Argument : int count 点数组长度
// Argument : Point& center 返回拟合圆弧的圆心
// Argument : double& dRadius 返回拟合圆弧的半径
// Argument : double& dAngleStart 返回拟合圆弧的起始角度
// Argument : double& dAngleEnd 返回拟合圆弧的终止角度
EXP int WINAPI ExpArcFit(PointDB* ptArr,int count,PointDB& center,double& dRadius,double& dAngleStart,double& dAngleEnd);
// Function name : ExpCircleFit
// Description : 圆拟合函数
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : Point* ptArr 输入参与拟合运算的点数组
// Argument : int count 点数组长度
// Argument : Point& center 返回拟合圆的圆心
// Argument : double& dRadius 返回拟合圆的半径
EXP int WINAPI ExpCircleFit(PointDB* ptArr,int count,PointDB& center,double& dRadius);
// Function name : ExpEllipseFit
// Description : 椭圆拟合函数
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : Point* ptArr 输入参与拟合运算的点数组
// Argument : int count 点数组长度
// Argument : PointDB& center 返回拟合椭圆的中心点坐标
// Argument : PointDB& ptVer1Long 返回拟合椭圆长轴的一个端点
// Argument : PointDB& ptVer2Long 返回拟合椭圆长轴的另一个端点
// Argument : PointDB& ptVer1Short 返回拟合椭圆短轴的一个端点
// Argument : PointDB& ptVer2Short 返回拟合椭圆短轴的另一个端点
// Argument : double& dShaftLong 返回拟合椭圆的长轴长度
// Argument : double& dShaftShort 返回拟合椭圆的短轴长度
EXP int WINAPI ExpEllipseFit(PointDB* ptArr,int count,PointDB& center,PointDB& ptVer1Long,PointDB& ptVer2Long,PointDB& ptVer1Short,PointDB& ptVer2Short,double& dShaftLong,double& dShaftShort);
// Function name : ArcReviseAngle
// Description : 圆弧起点终点,起始角终止角转换函数
// Argument : pot1Arc,pot2Arc,pot3Arc 输入圆弧上三点 center为圆心,radius为半径
// Argument : ptStart,ptEnd 返回圆弧起点终点
//Argument : dAngleStart,dAngleEnd返回起始角终止角
EXP void WINAPI ArcReviseAngle(Point pot1Arc,Point pot2Arc,Point pot3Arc,Point center,double radius,Point& ptStart,Point& ptEnd,double& dAngleStart,double& dAngleEnd);
EXP void WINAPI Circle_3P(Point pot1Arc,Point pot2Arc,Point pot3Arc,Point& center,double& radius);
EXP void WINAPI LintTo4P(Point p1,Point p2,Point point,Point& pa,Point& pb,Point& pc,Point& pd);
// Function name : ExpCircleBoundSearch
// Description : 区域查找圆,输入一个环形区域,返回区域内的一个圆的圆心和半径
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : PointDB& center 输入环形的圆心同时用于返回查找出的圆的圆心
// Argument : double dRadiusIn 输入环形的内径值
// Argument : double dRadiusOut 输入环形的外径值
// Argument : double& dRadius 返回查找出的圆的半径
EXP int WINAPI ExpCircleBoundSearch1(LPBYTE pBits,int nWidth,int nHeight,PointDB& center,double dRadiusIn,double dRadiusOut,double& dRadius);
// Function name : ExpCirclePotSearch
// Description : 点查找圆,输入一个点,查找包围该点的最小的圆
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point pot 输入一个点
// Argument : PointDB& center 返回查找出的圆的圆心
// Argument : double& dRadius 返回查找出的圆的半径
EXP int WINAPI ExpCirclePotSearch1(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB& ptCenter,double& dRadius);
// Function name : ExpCirclePotSearch
// Description : 点查找圆,输入一个点,查找包围该点的最小的圆
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point pot 输入一个点
// Argument : PointDB& center 返回查找出的圆的圆心
// Argument : double& dRadius 返回查找出的圆的半径
//超强查找
EXP int WINAPI ExpCirclePotSearch2(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB& ptCenter,double& dRadius);
// Function name : ExpArrEdgeCircle
// Description : 输入一个环形区,返回区内的圆边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point center 输入环形区圆心
// Argument : double dRadiusStart 输入环形区的搜索起始半径
// Argument : double dRadiusEnd 输入环形区的搜索终止半径
// Argument : PointDB* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrEdgeCircle2(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,PointDB* ptArr,int& count,int threshold=-1);
// Function name : ExpArrCirclePotSearch
// Description : 点返回圆边沿数组,输入一个点,查找包围该点的最小的圆的边沿数组
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point pot 输入一个点
// Argument : PointDB* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrCirclePotSearch(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB* ptArr,int& count,int threshold=-1);
// Function name : PlumbLine
// Description : 输入一条线段返回经过它第一个端点的垂线
// Return type : void WINAPI
// Argument : Point pot1 输入线段的第一个端点
// Argument : Point pot2 输入线段的第二个端点
// Argument : int width 输入屏幕宽度
// Argument : int height 输入屏幕高度
// Argument : Point& pot3 返回垂线与屏幕边框的第一个交点
// Argument : Point& pot4 返回垂线与屏幕边框的第二个交点
EXP void WINAPI PlumbLine(PointDB pot1,PointDB pot2,int width,int height,PointDB& pot3,PointDB& pot4);
// Function name : Bisector
// Description : 输入两条线段返回它们的角平分线
// Return type : void WINAPI
// Argument : Point pot1 第1条线段的第1个端点
// Argument : Point pot2 第1条线段的第2个端点
// Argument : Point pot3 第2条线段的第1个端点
// Argument : Point pot4 第2条线段的第2个端点
// Argument : int width 输入屏幕宽度
// Argument : int height 输入屏幕高度
// Argument : Point& pot5 返回角平分线与屏幕边框的第一个交点
// Argument : Point& pot6 返回角平分线与屏幕边框的第二个交点
EXP void WINAPI Bisector(PointDB pot1,PointDB pot2,PointDB pot3,PointDB pot4,int width,int height,PointDB& pot5,PointDB& pot6);
EXP int WINAPI ExpLineFit2(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line);
EXP int WINAPI ExpArrEdgeLine2(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold);
EXP int WINAPI ExpArrTwoEdge(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr1,int& count1,PointDB* ptArr2,int& count2,int threshold);
// Function name : ExpArrTwoEdge
// Description : 输入一个矩形框,返回框内的两条直线边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point Start1Rect 输入矩形框既搜索起始边的第一个顶点
// Argument : Point Start2Rect 输入矩形框既搜索起始边的第二个顶点
// Argument : Point End1Rect 输入矩形框既搜索终止边的第一个顶点
// Argument : Point End2Rect 输入矩形框既搜索终止边的第二个顶点
// Argument : PointDB* ptArr1 返回边沿点数组1
// Argument : int& count1 返回边沿点数组1长度
// Argument : PointDB* ptArr2 返回边沿点数组2
// Argument : int& count2 返回边沿点数组2长度
// Argument : int threshold 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrTwoEdgeNew(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr1,int& count1,PointDB* ptArr2,int& count2,int threshold=-1);
// Function name : ExpArrEdgeLine
// Description : 输入一个矩形框,返回框内的直线边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : Point Start1Rect 输入矩形框既搜索起始边的第一个顶点
// Argument : Point Start2Rect 输入矩形框既搜索起始边的第二个顶点
// Argument : Point End1Rect 输入矩形框既搜索终止边的第一个顶点
// Argument : Point End2Rect 输入矩形框既搜索终止边的第二个顶点
// Argument : Point* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArrEdgeLineNew(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold=-1);
// Function name : ExpLineFit
// Description : 直线拟合函数
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : Point* ptArr 输入参与拟合运算的点数组
// Argument : int count 点数组长度
// Argument : Point& pot1Line 返回拟合线段一个端点
// Argument : Point& pot2Line 返回拟合线段的另一个端点
EXP int WINAPI ExpArrEdgeArcNew(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,double dAngleStart,double dAngleEnd,PointDB* ptArr,int& count,int threshold=-1);
EXP int WINAPI ExpLineFitNew(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line);
EXP int WINAPI ExpArrEdgeCircleNew(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,PointDB* ptArr,int& count,int threshold=-1);
// Function name : NearInsertValue
// Description :
// Return type : void WINAPI
// Argument : MYPIXEL *lpOldDIBBits 输入图像指针
// Argument : int oldWidth 输入图像宽度
// Argument : int oldHeight 输入图像高度
// Argument : MYPIXEL *lpNewDIBBits 输入图像指针
// Argument : int newWidth 输出图像高度
// Argument : int newHeight 输出图像高度
//几何校正(球形镜头校正)
EXP int WINAPI GeometryAdjust(MYPIXEL *pBits,int nWidth,int nHeight,double R/*球的半径*/);
//精确修改版//功能同上
EXP void WINAPI GeometryAdjustA(MYPIXEL *pBits,int inWidth,int inHeight,double R,MYPIXEL *pNewBits,int outWidth,int outHeight);
EXP int WINAPI FindLine(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold);
EXP void WINAPI Get_BianYuan(LPBYTE pBits,int nWidth,int nHeight,int threshold=-1);
// Function name : CTaperFit::Fitting
// Description : 返回拟合结果
// Return type : BOOL 返回TRUE,表示拟合出结果,返回FALSE,表示无法拟合
// Argument : MY3DPoint* pArr 输入欲进行拟合运算的点坐标数组
// Argument : int num 输入欲进行拟合运算的点数目
// Argument : double &x_Value 返回拟合出的圆锥顶点x坐标
// Argument : double &y_Value 返回拟合出的圆锥顶点y坐标
// Argument : double &z_Value 返回拟合出的圆锥顶点z坐标
// 圆锥轴心线用方程 (x-x0)/p=(y-y0)/q=(z-z0)/r,x0,y0,z0就是上面求出的圆锥顶点的x,y,z坐标
// Argument : double &p_Value 返回圆锥轴心线方程中的p值
// Argument : double &q_Value 返回圆锥轴心线方程中的q值
// Argument : double &r_Value 返回圆锥轴心线方程中的r值
// Argument : double &R_Value 返回圆锥顶角的余弦值
EXP int WINAPI TaperFit(MY3DPoint* pArr,int num,double &x_Value,double &y_Value,double &z_Value,double &p_Value,double &q_Value,double &r_Value,double &R_Value);
// Function name : columnFit::Fitting
// Description : 拟和函数,该函数参数返回拟和后的圆柱的半径和轴心线信息
// Return type : void WINAPI
// 轴心线以方程(x-x1)/p=(y-y1)/q=(z-z1)/r
// Argument : double& x_Value 返回轴心线的x1值
// Argument : double& y_Value 返回轴心线的y1值
// Argument : double& z_Value 返回轴心线的z1值
// Argument : double& p_Value 返回轴心线的p值
// Argument : double& q_Value 返回轴心线的q值
// Argument : double& r_Value 返回轴心线的r值
// Argument : double& R_Value 返回圆柱的半径R值
EXP bool WINAPI ColumnFit(MY3DPoint* pArr,int num,double& x_Value,double& y_Value,double& z_Value,double& p_Value,double& q_Value,double& r_Value,double& R_Value);
EXP int WINAPI Read_Barcode(LPBYTE pBits,PointDB *ptr,int *Num);//int& x,int& y,int& x_off, int& y_off, char type, int num, char dir);
EXP int WINAPI FaceFit(MY3DPoint* pArr,int n, double* Coe, double* Error, double& dis, double& dis2, double& dis3);
EXP int WINAPI Pro_Drl(char *str,int& len,READPOINT* myvalue, int type, int flag);//(char *str,std::vector<READPOINT> &myvalue);
// Res放四边形ABCD四点,Dest分别返回图形区域中最靠近AB、BC、CD、DA边的四点
EXP void WINAPI PicGetPoint(BYTE * mBits, Point *Dest, const Point Res[4], int mWidth, int mHeight);
EXP void WINAPI TestVec(std::vector<int>& t1,std::vector<double>& t2);
// 边沿点及平均值
// Return Value:
// Pots 跳变点
// DBPots 平均后的跳变点
//
// Entry:
// Res 边框四点,顺时针或逆时针压入
// Set 4控制参数。
// THREAD_WIDTH; //线宽
// AVER_NUMS; //做一个平均值的个数
// RETURN_NUM_POINTS; //返回点数
// MIN_POINTS; //认为是曲线的最少点数
EXP void WINAPI Pro_Get_PAve_Value(BYTE * mBits, Point* Pots, PointDB* DBPots, const Point Res[4], const SetCtrl & Set, int* num,int &num1, int mWidth, int mHeight,int YV);
// Function name : ExpArrEdgeArc
// Description : 输入一个环扇形区,返回区内的圆弧边沿点数组和数组长度
// Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败
// Argument : LPBYTE pBits 输入图像像素数组
// Argument : int nWidth 输入图像宽度
// Argument : int nHeight 输入图像高度
// Argument : PointDB mPos 输入当前点
// Argument : Point* ptArr 返回边沿点数组
// Argument : int& count 返回边沿点数组长度
// Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值
EXP int WINAPI ExpArcPoints(LPBYTE pBits,int nWidth,int nHeight,PointDB mPos,PointDB* ptArr,int& count,int threshold,PointDB
&cen,double& R);
EXP void WINAPI init_Lasercom(void);
EXP double WINAPI Get_Lasercom(void);
EXP void WINAPI Start_Lasercom(char mode,int nTime);
EXP void WINAPI End_Lasercom(void);
EXP void WINAPI Get_Light_Parameter(long *power_value,float *max_value, float *min_value,long *focal_value);
EXP void WINAPI Set_Power(char type,int value);
EXP int WINAPI Get_laserValue(float *value, float *mSnr,float *mQuality);
//处理松下PLC_232通讯
EXP void WINAPI SetBit(int nAddr,bool bSet);//
EXP bool WINAPI GetBit(int nAddr);
EXP void WINAPI SetDTData(int nAddr,int data);
EXP int WINAPI GetDTData(int nAddr);
//松下PLC_USB_IO通讯
EXP void WINAPI SetPLCData(int data);
EXP int WINAPI GetPLCData(void );
EXP char WINAPI Get_Usb_Switch_Data(void);
//返回最小包围盒
EXP void WINAPI pro_Min_Box(PointDB *pc,double *nWidth, double *nHeight,double *nAngle);
//返回当前周苌
EXP double WINAPI pro_Length(void);
//返回面积
EXP double WINAPI pro_Area(void );
//返回当前周苌 面积
EXP void WINAPI pro_Length_Area(double *mLen,double *mArea);
//返回最小包围盒 周苌 面积
EXP void WINAPI pro_Min_Box_LenArea(PointDB *pc,double *nWidth, double *nHeight,double *nAngle,double *nLen,double *nArea);
//返回最小包围盒 周苌 面积,外围角点
EXP void WINAPI pro_Min_Box_LenArea1(PointDB *pc,double *nWidth, double *nHeight,double *nAngle,double *nLen,double *nArea,PointDB *nPtr,int &nNum,double &nDis_Tal,PointDB *pc1);
EXP void WINAPI GetKeycen_LaseData(float *value1,float *value2);
//返回当前画面封闭区域面积和周长
EXP void WINAPI Get_All_Lenth_Area(PBYTE buf, int mWidth, int mHeight,int mU,int mD,double* mLength, double* mArea,int *nNum);
//LK_H GETDATA
EXP void WINAPI GetData_LKH(float *value1,float *value2);
EXP void WINAPI Link_LKH();
//得到buf图形中的距形中点坐标x,y
EXP void WINAPI Get_Rangle(PBYTE buf,int mWidth, int mHeight,double *x,double *y,double *nAngle,double *mW, double *mH);
EXP void WINAPI Get_PRangle(PBYTE buf,int mWidth, int mHeight,PointDB pos,double *x,double *y,double *nAngle,double *mW, double *mH);
EXP void WINAPI Set_Image_Face(double scalex,double scaley,int row,int col,double nRow_dis,double nCol_dis,char g_En_Flag,double midx,double midy,struct Image_Section *mFace_Section,int num);
EXP void WINAPI Get_All_Cen_Area(PBYTE buf, int mWidth, int mHeight,int Setp,char flag,int SetV,PointDBV* pc,int *nNum);
EXP void WINAPI Get_Rangle_Points(PBYTE buf,int startX,int startY,int nW,int nH,PointDB* ptr,int *num);
EXP void WINAPI Get_Rangle_Box(PointDB *ptr,int n,PointDB *cen,double *w,double *h,double *angle);
//获得激光扫描点的数据
EXP int WINAPI GetLaserStoredData(float *GetStorageData,int *GetStorageNumber);
//获得激光扫描时候的实时数据
EXP int WINAPI PauseScanAndGetLaserData(float *GetStorageData,int *GetStorageNumber);
//获得激光扫描时候的状态
EXP void WINAPI GetKeyenceStorageStatus(int& _bStatus,int& _StorageNumber);
}
#endif