#pragma once
#define C_MACHINE_EXPORTS
#include "Machine.h"
#include "CDieBondFsm.h"
#include "CMessageBox.h"
#include "dt.h"
namespace ns_module
{
typedef MATERIAL_BOX_VIEW_STRUCT MATERIAL_BOX_STRUCT;
enum NOZZLE_STATUS {
NOZZLE_EXIST,/*存在*/
NOZZLE_NO_EXIST,/*不存在*/
NOZZLE_DISABLE,/*不可用*/
};
typedef struct
{
int nRow; //矩阵中所在行
int nCol; //矩阵中所在列
int iIndex; //所在点ID
NOZZLE_STATUS eStatus; //状态
XY_DOUBLE_STRUCT stPosition; //程序设置的位置
} NOZZLE_TABLE_MATRIX_INFO_STRUCT;
class __declspec(dllexport) CViewMatrix
{
private:
static CViewMatrix* m_instance;
CManageDB* m_pCManageDB = nullptr;
Machine* m_pMachine = nullptr;
CCameraManage* m_pCameraManage = nullptr;
CBondHead* m_pBondHead = nullptr;
CWaferTable* m_pWaferTable = nullptr;
CWaferHead* m_pWaferHead = nullptr;
CTransferTable* m_pWaferTransferTable = nullptr;
CTransferTable* m_pWaffleTransferTable = nullptr;
CResources* m_pResource = nullptr;
CDieBondFsm* m_pDieBondFsm = nullptr;
public:
static CViewMatrix* GetInstance();
CViewMatrix();
#pragma region 晶圆接口
///
/// 获取所有晶圆信息
///
/// 晶圆信息
/// 成功返回0,否则返回错误码
long GetWaferAllPointInfo(vector& stPointInfo);
///
/// 获取晶环尺寸
///
/// 晶环圆心坐标
/// 晶环圆心坐标
/// 获取到的晶圆半径
/// 成功返回0,否则返回错误码
long GetWaferSize(double& dCenterX, double& dCenterY, double& iRadius);
///
/// 获取晶圆尺寸
///
/// 长
/// 宽
/// 成功返回0,否则返回错误码
long GetDieSize(int& iLong, int& iWide);
///
/// 移动到指定的点
///
///
/// 成功返回0,否则返回错误码
long MoveWaferToPoint(int iDieIndex);
///
/// 从底层获取模板图片
///
/// 获取到的图片
/// 成功返回0,否则返回错误码
long GetWaferRefImage(ImageInfo& image);
///
/// 获取晶圆台角度
///
/// 获取到的角度
/// 成功返回0,否则返回错误码
long GetWaferTableAngle(double& angle);
///
/// 设置矩形边界
///
/// 矩阵Id
/// 左上角行号
/// 左上角列号
/// 右下角行号
/// 右下触目列号
///
long SetWaferRectBorder(int nDieMatrixId, int row1, int col1, int row2, int col2);
#pragma endregion
#pragma region 载具物料接口
///
/// 获取所有晶圆信息
///
/// 晶圆信息
/// 成功返回0,否则返回错误码
long GetBondAllPointInfo(vector& stPointInfo);
///
/// 移动到指定的点
///
///
/// 成功返回0,否则返回错误码
long MoveBondToPoint(int iDieIndex);
///
/// 从底层获取模板图片
///
///
/// 获取到的图片
/// 成功返回0,否则返回错误码
long GetBondRefImage(int iDieIndex,ImageInfo& image);
///
/// 设置矩形边界
///
/// 华夫盒矩阵 Id
/// 矩阵Id
/// 左上角行号
/// 左上角列号
/// 右下角行号
/// 右下触目列号
///
long SetBondRectBorder(int nPackMatrixId, int nDieMatrixId, int row1, int col1, int row2, int col2);
/**设置当前所有圆晶信息,菜单选中拖拽
* 这里分2种情况
* 1.点击一个发送当前选中的贴片信息(鼠标左键点击)
* 2.2个点确定一个矩形(可以选中多个贴片)(右键菜单选择)
* 3.鼠标左键按住不松开拖拽多个贴片(例:界面显示三个组合,三个组合都可以选中,(1,2都是一样))(拖拽)
*/
long SetBondAllSelectPointInfo(std::vector& stPointInfo);
#pragma endregion
#pragma region 料盒类
///
/// 获取所有料盒信息
///
/// 晶圆信息
/// 成功返回0,否则返回错误码
long GetMaterialBoxAllPointInfo(std::vector & stPointInfo);
///
/// 移动到指定的层
///
///
/// 成功返回0,否则返回错误码
long MoveMaterialBoxToiLayers(int iLayers);
#pragma endregion
#pragma region 吸嘴库
///
/// 获取吸嘴库信息
///
/// 晶圆信息
/// 成功返回0,否则返回错误码
long GetNozzleTableAllPointInfo(vector& stPointInfo);
///
/// 移动到指定的点
///
///
/// 成功返回0,否则返回错误码
long MoveNozzleTableToPoint(int iIndex);
#pragma endregion
#pragma region 华夫盒接口
///
/// 获取所有晶圆信息
///
/// 晶圆信息
/// 成功返回0,否则返回错误码
long GetWafflePackAllPointInfo(vector& stPointInfo);
///
/// 移动到指定的点
///
///
/// 成功返回0,否则返回错误码
long MoveWafflePackToPoint(int iDieIndex);
///
/// 从底层获取模板图片
///
/// 获取到的图片
/// 成功返回0,否则返回错误码
long GetWafflePackRefImage(ImageInfo& image);
///
/// 设置矩形边界
///
/// 华夫盒矩阵 Id
/// 矩阵Id
/// 左上角行号
/// 左上角列号
/// 右下角行号
/// 右下触目列号
///
long SetWafflePackRectBorder(int nPackMatrixId, int nDieMatrixId, int row1, int col1, int row2, int col2);
#pragma endregion
};
}