#pragma once #include "GlobalDefine.h" #include "LabVecRang.h" //工件产品 class CProduct//:public CObject { friend class CProductMgr; // DECLARE_SERIAL(CProduct) public: CProduct(void); ~CProduct(void); void Draw(CDC* pDC); void WriteWorkFile(vector &LabVec); void ReadWorkFile(CLabVecRang &LabVecRang); void SetBasePt(Dbxy pt){m_BasePt = pt;}; Dbxy &GetProductBasePt(){return m_BasePt;}; Dbxy &GetOffset(){return m_Offset;}; double GetRotateAng(); bool &IsUsed(){return m_bUsed;}; void SetUsed(bool b){m_bUsed = b;}; void GetMarkCoord(Dbxy &mark1,Dbxy &mark2); void SetRealMarkPt(Dbxy pt); void ResetRealMarkPt(); void SetTheoryMarkPt(Dbxy pt1,Dbxy pt2); void SetbHasMarkPt3(bool b){m_bHasMarkPt3 = b;}; void SetTheoryMark3Pt(Dbxy pt){m_TheoryMarkPt3 = pt;}; void SetRealMark3Pt(Dbxy pt){m_RealMarkPt3 = pt;}; Dbxy TheoryPtToRealPt(Dbxy TheoryMarkPt); void StretchDataToRealSize(vector> &vec); void TheoryDataToRealData(vector> &vec, Dbxy &Offset); void TheoryDataToRealData(vector &vec, Dbxy &Offset); void TheoryDataToRealData0(vector& vec, Dbxy & AreaCenter, Dbxy CutAdjust);//旧算法,但参数有变化 void TheoryDataToRealData0(vector>& vec, Dbxy & AreaCenter, Dbxy CutAdjust);//旧算法,但参数有变化 void TheoryDataToRealData(vector& vec, Dbxy & AreaCenter, Dbxy CutAdjust); void TheoryDataToRealData(vector>& vec, Dbxy & AreaCenter, Dbxy CutAdjust); void ResetAffinePars();//重置仿射变换参数 void TheoryDataToRealData(vector> &SrcVec,vector> &DecVec,Dbxy &Offset); void TheoryDataToRealData(vector &SrcVec,vector &DecVec,Dbxy &Offset); bool IsSetRealMarkPt1(); bool IsSetRealMarkPt2(); void UseDefualtOffset(); bool IsMarkReady(); bool IsbLastOne(){return m_bLastOne;}; void SetbLastOne(bool b){m_bLastOne = b;}; void SetbNewAddProduct(bool bNew) { m_bNewAddProduct = bNew; };//设置是否是改造新增的产品 bool IsbNewAddProduct() { return m_bNewAddProduct; };//查询是否是改造新增的产品 private: void CalAffinePars(); void CalTheoryToRealPar(); Dbxy CalRealProductScale(); void StretchPt(Dbxy &Pt,SObjOperatePar &Par); void CalRealStretchPar(); double CalRealProductScaleExt(Dbxy TheoryMarkPt1,Dbxy TheoryMarkPt2,Dbxy RealMarkPt1,Dbxy RealMarkPt2); private: Dbxy m_BasePt;//工件的基准坐标点 bool m_bUsed;//是否使用 bool m_bLastOne;//是否为最后一个 bool m_bHasMarkPt3;//是否有mark3 bool m_bNewAddProduct = false;//是否是改造后新增的那块产品(201910) public: bool m_bManualMark = false;//是否是手动标刻(PCIMark按钮) //用于定位的两个定位点--------------------------- Dbxy m_TheoryMarkPt1;//理论坐标(layer 中的坐标) mm Dbxy m_TheoryMarkPt2; Dbxy m_TheoryMarkPt3; //ccd 抓取的实际值------------------------------------ Dbxy m_RealMarkPt1;//真实坐标(相对于激光中心点) mm Dbxy m_RealMarkPt2; Dbxy m_RealMarkPt3; public: Dbxy o_TheoryMarkPt1;//理论坐标(不移动时) mm Dbxy o_TheoryMarkPt2; Dbxy o_TheoryMarkPt3; //ccd 抓取的实际值------------------------------------ Dbxy o_RealMarkPt1;//真实坐标(不移动时) mm Dbxy o_RealMarkPt2; Dbxy o_RealMarkPt3; //抓取后计算得到的Mark1偏移 Dbxy m_CatchMark1Oft = Dbxy(0, 0); //仿射参数------------------------------------ float m_p00=1; float m_p01=0; float m_p02=0; float m_p10=0; float m_p11=1; float m_p12=0; //强制(微调)旋转角度的仿射参数(应对平台不垂直)------------------------------------ float m_rp00 = 1; float m_rp01 = 0; float m_rp02 = 0; float m_rp10 = 0; float m_rp11 = 1; float m_rp12 = 0; public: //实际偏移旋转结果--------------------------------- Dbxy m_Offset;//理论数据映射为平台坐标的偏移 double m_RotateAng;//理论数据映射为平台坐标的旋转角度(反正切角) double m_MaxRotateAng;//最大旋转角度(360 度角)计算出来的旋转角度超过这个值时可能有错误,计算无效 SObjOperatePar m_StretchParX;//X 方向拉伸参数 SObjOperatePar m_StretchParY;//Y 方向拉伸参数 //virtual void Serialize(CArchive& ar); };