You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TwoLaserHead-PushJig/LaiPuLaser/MarkArea.h

75 lines
2.6 KiB
C++

#pragma once
#include "GlobalDefine.h"
#include "ObjContainer.h"
#include "WorkData.h"
#include "SmartPtr.h"
#include "ObjComponent.h"
class CProduct;
//标刻区域
class CMarkArea
{
friend class CDlgMarkArea;
public:
CMarkArea();
CMarkArea(Dbxy pt,DbSize size);
~CMarkArea(void);
void Serialize(CArchive& ar);
void WriteWorkFile(vector<CLab> &LabVec);
void ReadWorkFile(CLabVecRang &LabVecRang);
void Draw(CDC* pDC,bool bSel);
DbRect GetRect();
Dbxy GetBasePt(){return m_BasePt;};
void SetBasePt(Dbxy pt);
DbSize GetSize(){return m_Size;};
void CollectOrgWorkData(bool bNeedSel);
void CollectWorkData(bool bNeedSel,CProduct &Product);
bool HasWorkData();
bool HasSpecialWorkData();
vector<vector<Dbxy>> &GetDataVec();
vector<vector<Dbxy>> &GetSpecialDataVec();
void SetSelState(bool b){m_bSel = b;};
bool IsSelected(){return m_bSel;};
bool IsPtInArea(Dbxy pt);
void UpdateSize();
void AdjustByObj();
Dbxy GetRealBasePt();//获取实际中心位置
void SetRealBasePt(Dbxy pt){m_RealBasePt = pt;};
void CalRealBasePt(CProduct &Product);
Dbxy GetOffset(){return m_Offset;};
Dbxy GetOffset2(){return m_Offset2;};
void CollectSrcWorkData();//搜集数据源
void ClearSrcWorkData();//清除数据源
private:
void CollectLayerObj(CObjContainer &ObjContainer);
void CollectComponentObj(vector<vector<Dbxy>> &vec,bool bNeedSel);
bool DrawObjComponentVec(vector<Sptr<CObjComponent>> &vec,CDC* pDC,bool bSel);
void CollectObjExt(Sptr<CObjComponent> &pObj,DbRect &rect);
void ResetObjCollectState();
bool CheckbNeedMark();
private:
bool m_bSel;//选择状态
Dbxy m_BasePt;//区域的基准点(理论中心点)
Dbxy m_RealBasePt;//区域的基准点(实际中心点)根据CCD 的抓取结果算出
Dbxy m_OrgCenter;//区域的中心点,移动区域前的位置
DbSize m_Size;//区域的尺寸
Dbxy m_Offset;//区域强制偏移,用来针对区域进行调整(轨道1)
Dbxy m_Offset2;//区域强制偏移,用来针对区域进行调整(轨道2)
CWorkData m_WorkData;//工作数据
CWorkData m_SpecialWorkData;//特殊工作数据
CWorkData m_SrcWorkData;//工作数据源
CWorkData m_DecWorkData;//实际加工数据
bool m_bSelMarkMode;//是否为选择加工模式
bool m_bNeedMark;//是否需要加工
};