#include "StdAfx.h" #include "ObjComposite.h" #include "ObjPline.h" #include "GlobalFunction.h" CObjComposite::CObjComposite(void) { m_Distance = 10;//两个基准点的距离 } CObjComposite::~CObjComposite(void) { } CObjComposite::CObjComposite(CObjComposite &rhs) :CObjBase(rhs) { m_BasePt1 = rhs.m_BasePt1;//保存object 当前的位置 m_BasePt2 = rhs.m_BasePt2;//保存object 当前的位置(用于记录旋转) m_Distance = rhs.m_Distance;//两个点的距离 rhs.m_ObjContainer.CloneObj(m_ObjContainer,false); } #if 1 void CObjComposite::WriteWorkFileExt(vector &LabVec) { //写入obj 信息 m_ObjContainer.WriteWorkFile(LabVec); } void CObjComposite::ReadWorkFileExt(CLabVecRang &LabVecRang) { //读取obj 信息 m_ObjContainer.ReadWorkFile(LabVecRang); } #endif //bNewLine 表示是否要新建一段线段 void CObjComposite::AddPt(CDataPoint pt,bool bNewLine) { if(bNewLine) { CObjPline *p = new CObjPline; p->AddDataPoint(pt); m_ObjContainer.AddObject(p); } else { m_ObjContainer.AddPtToLastObj(pt); } } void CObjComposite::Creat() { CreatExt(); UpdateSelState(); } //更新组obj 的选择状态 void CObjComposite::UpdateSelState() { if(m_bSelected) { m_ObjContainer.SelAllObj(); } else { m_ObjContainer.NotSelAllObj(); } } void CObjComposite::Draw(CDC* pDC,CPen &Pen) { m_ObjContainer.DrawAllObj(pDC); } bool CObjComposite::IsInRect(DbRect rect,bool bNeedAllIn) { return m_ObjContainer.IsInRect(rect,bNeedAllIn); } void CObjComposite::SetSelected(bool bSelected) { CObjBase::SetSelected(bSelected);//全部的选择状态 m_ObjContainer.SetSelected(bSelected);//每个成员的选择状态 } void CObjComposite::Operate(SObjOperatePar &par) { //记录操作参数 SavePar(par); m_ObjContainer.Operate(par); } //记录操作参数, 用来从新生成的是否定位 void CObjComposite::SavePar(SObjOperatePar &par) { if(par.OpType == _OP_MOVE) { m_BasePt1.x += par.MoveX; m_BasePt1.y += par.MoveY; m_BasePt2.x += par.MoveX; m_BasePt2.y += par.MoveY; } if(par.OpType == _OP_ROTATO) { m_BasePt1 = RotatoPt(m_BasePt1,_360ToAngle(par.Angle),par.BasePt); m_BasePt2 = RotatoPt(m_BasePt2,_360ToAngle(par.Angle),par.BasePt); } } DbRect CObjComposite::GetRect() { return m_ObjContainer.GetObjRect(false); } void CObjComposite::SetPosition(Dbxy pt) { m_BasePt1 = m_BasePt2= pt; m_BasePt2.x += m_Distance; }; //委托给组成员去搜集 void CObjComposite::GetPtData(vector> &vec) { m_ObjContainer.GetObjPtData(vec,false); } //获取rect 范围内所有的线段 void CObjComposite::GetLineInRect(DbRect &rect,vector &DataPtLineVec,bool bGetCatchNode) { m_ObjContainer.GetLineInRect(rect,DataPtLineVec,true); }