#ifndef DLL_H_ #define DLL_H_ #pragma once #include #include "NewDataStruct.h" #define MAX_POINT 5000 #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 &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& t1,std::vector& 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