|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
#include "ObjContainer.h"
|
|
|
|
|
#include "GlobalDrawMgr.h"
|
|
|
|
|
#include "GlobalFunction.h"
|
|
|
|
|
#include "ObjPLine.h"
|
|
|
|
|
#include "ObjFactory.h"
|
|
|
|
|
#include "CommandBase.h"
|
|
|
|
|
#include "CStringFuc.h"
|
|
|
|
|
#include "WorkFileLable.h"
|
|
|
|
|
#include "WorkFileMgr.h"
|
|
|
|
|
#include "LogMgr.h"
|
|
|
|
|
|
|
|
|
|
CObjContainer::CObjContainer(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
CObjContainer::~CObjContainer(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
#if 1
|
|
|
|
|
void CObjContainer::WriteWorkFile(vector<CLab> &LabVec)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
LabVec.push_back(CLab(LAB_OBJ_START));
|
|
|
|
|
(*iter)->WriteWorkFile(LabVec);
|
|
|
|
|
LabVec.push_back(CLab(LAB_OBJ_END));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::ReadWorkFile(CLabVecRang &LabVecRang)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD>---------------------------------------------------
|
|
|
|
|
vector<CLabVecRang> LabVecRangVec;
|
|
|
|
|
CWorkFileMgr WorkFileMgr;
|
|
|
|
|
WorkFileMgr.SeparateStrVec(LabVecRang,LabVecRangVec,LAB_OBJ_START,LAB_OBJ_END);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>obj ---------------------------------------------------
|
|
|
|
|
if(gDraw->IsbDelOldObj())
|
|
|
|
|
Clear();//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>obj
|
|
|
|
|
|
|
|
|
|
if(!LabVecRangVec.empty())
|
|
|
|
|
{
|
|
|
|
|
vector<CLabVecRang>::iterator iter = LabVecRangVec.begin();
|
|
|
|
|
vector<CLabVecRang>::iterator iter_end = LabVecRangVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
//<2F><>ȡobj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CLab ObjType= WorkFileMgr.FindLab((*iter),LAB_OBJ_TYPE);
|
|
|
|
|
if(ObjType.m_ValType != _TYPE_NULL)
|
|
|
|
|
{
|
|
|
|
|
OBJ_TYPE type = (OBJ_TYPE)(ObjType.m_Int);
|
|
|
|
|
if(type != _TYPE_BASE)
|
|
|
|
|
{
|
|
|
|
|
CObjFactory ObjFactory;
|
|
|
|
|
CObjBase *p = ObjFactory.CreatObj(type);//<2F>ָ<EFBFBD>obj <20><>ʵ<EFBFBD><CAB5>
|
|
|
|
|
if(p)
|
|
|
|
|
{
|
|
|
|
|
p->ReadWorkFile(*iter);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
AddObject(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
void CObjContainer::AddObject(CObjBase *pMarkObject)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>浽<EFBFBD><E6B5BD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
Sptr<CObjBase> sPtr(pMarkObject);
|
|
|
|
|
AddObject(sPtr);
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::AddObject(Sptr<CObjBase> p)
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec.push_back(p);
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD>ӵ㵽ĩβ<C4A9><CEB2>obj
|
|
|
|
|
void CObjContainer::AddPtToLastObj(CDataPoint pt)
|
|
|
|
|
{
|
|
|
|
|
if(!m_ObjVec.empty())
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec[m_ObjVec.size()-1]->AddDataPoint(pt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Բ)
|
|
|
|
|
CMFCPropertyGridProperty *CObjContainer::CreatSpecialGridProperty(CModule *pModule)
|
|
|
|
|
{
|
|
|
|
|
if(GetSelObjCnt() == 1)//ֻ<><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
return GetFirstSelObj()->CreatSpecialGridProperty(pModule);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Եı仯
|
|
|
|
|
void CObjContainer::OnSpecialPropertyChanged()
|
|
|
|
|
{
|
|
|
|
|
if(GetSelObjCnt() == 1)//ֻ<><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
GetFirstSelObj()->OnSpecialPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
void CObjContainer::InsertList(CListCtrl &List)
|
|
|
|
|
{
|
|
|
|
|
int size = m_ObjVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
int idx = 0;
|
|
|
|
|
List.InsertItem(i," ");//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
List.SetItemText(i,idx++,Int2CString(i+1));//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
List.SetItemText(i,idx++,m_ObjVec[i]->GetStr());//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::DrawAllObj(CDC* pDC)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Draw(pDC,gDraw->GetSelObjectPen());
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Draw(pDC);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::DrawAllObj(CDC* pDC,CPen &Pen)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Draw(pDC,Pen);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CObjContainer::XorRedrawObj(CDC* pDC,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
int old_rop = pDC->SetROP2(R2_XORPEN);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Draw(pDC,gDraw->GetSelObjectPen());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Draw(pDC,gDraw->GetObjectPen());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pDC->SetROP2(old_rop);
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::XorDrawLastObj(CDC* pDC)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec.empty()==false)
|
|
|
|
|
{
|
|
|
|
|
int old_rop = pDC->SetROP2(R2_XORPEN);
|
|
|
|
|
m_ObjVec[m_ObjVec.size()-1]->Draw(pDC,gDraw->GetObjectPen());
|
|
|
|
|
pDC->SetROP2(old_rop);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj
|
|
|
|
|
bool CObjContainer::HasObjSel()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡѡ<C8A1><D1A1>obj <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
|
|
|
int CObjContainer::GetSelObjCnt()
|
|
|
|
|
{
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
return cnt;
|
|
|
|
|
}
|
|
|
|
|
bool CObjContainer::HasSelObjectInRect(DbRect rect)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected() && (*iter)->IsInRect(rect,false))
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rect <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>Ľڵ<C4BD>
|
|
|
|
|
bool CObjContainer::HasSelNodeInRect(DbRect rect)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected()&&(*iter)->HasNodeInRect(rect))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
bool CObjContainer::HasObjectInRect(DbRect rect)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsInRect(rect,false))
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj
|
|
|
|
|
Sptr<CObjBase> CObjContainer::GetFirstSelObj()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
return (*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Sptr<CObjBase> sp(NULL);
|
|
|
|
|
return sp;
|
|
|
|
|
}
|
|
|
|
|
Sptr<CObjBase> CObjContainer::GetFirstObjInRect(DbRect &rect)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsInRect(rect,false))
|
|
|
|
|
{
|
|
|
|
|
Sptr<CObjBase> sp(*iter);
|
|
|
|
|
return sp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Sptr<CObjBase> sp(NULL);
|
|
|
|
|
return sp;
|
|
|
|
|
}
|
|
|
|
|
Sptr<CObjBase> CObjContainer::GetFirstNodeObjInRect(DbRect &rect)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->HasNodeInRect(rect))
|
|
|
|
|
{
|
|
|
|
|
Sptr<CObjBase> sp(*iter);
|
|
|
|
|
return sp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Sptr<CObjBase> sp(NULL);
|
|
|
|
|
return sp;
|
|
|
|
|
}
|
|
|
|
|
DbRect CObjContainer::GetSelObjRect()
|
|
|
|
|
{
|
|
|
|
|
DbRect SelObjRect;
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected()==false)
|
|
|
|
|
continue;
|
|
|
|
|
DbRect rect = (*iter)->GetRect();
|
|
|
|
|
if(SelObjRect.IsZero())
|
|
|
|
|
{
|
|
|
|
|
SelObjRect = rect;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
AdjustRectByRect(SelObjRect,rect);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return SelObjRect;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Obj <20>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
|
|
|
|
|
DbRect CObjContainer::GetObjRect(bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
DbRect ObjRect;
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel && (*iter)->IsSelected()==false)
|
|
|
|
|
continue;
|
|
|
|
|
DbRect rect = (*iter)->GetRect();
|
|
|
|
|
if(ObjRect.IsZero())
|
|
|
|
|
{
|
|
|
|
|
ObjRect = rect;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
AdjustRectByRect(ObjRect,rect);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ObjRect;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>obj <20>ľ<EFBFBD><C4BE>η<EFBFBD>Χ
|
|
|
|
|
DbRect CObjContainer::GetObjRect(int idx)
|
|
|
|
|
{
|
|
|
|
|
DbRect ObjRect;
|
|
|
|
|
int size = m_ObjVec.size();
|
|
|
|
|
if(CorrectIdx(idx))
|
|
|
|
|
{
|
|
|
|
|
ObjRect = m_ObjVec[idx]->GetRect();
|
|
|
|
|
}
|
|
|
|
|
return ObjRect;
|
|
|
|
|
}
|
|
|
|
|
//ѡ<><D1A1>rect <20>ڵ<EFBFBD>obj
|
|
|
|
|
bool CObjContainer::SelObjectInRect(DbRect rect,bool bNeedAllIn)
|
|
|
|
|
{
|
|
|
|
|
bool ret = false;
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
Sptr<CObjBase> p = (*iter);
|
|
|
|
|
if(p->IsInRect(rect,bNeedAllIn))
|
|
|
|
|
{
|
|
|
|
|
p->SetSelected(true);
|
|
|
|
|
ret = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
//ȫѡ
|
|
|
|
|
void CObjContainer::SelAllObj()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetSelected(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::NotSelAllObj()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetSelected(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ѡ
|
|
|
|
|
void CObjContainer::RevSelAllObj()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetSelected(false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetSelected(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::DelSelObj()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>> vec;
|
|
|
|
|
//<2F>ȱ<EFBFBD><C8B1>ݷ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected() == false)
|
|
|
|
|
{
|
|
|
|
|
vec.push_back(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
m_ObjVec.clear();
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>obj <20><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = vec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = vec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec.push_back(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>obj
|
|
|
|
|
void CObjContainer::DelObj(Sptr<CObjBase> p)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter).GetPtr() == p.GetPtr())
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec.erase(iter);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>obj
|
|
|
|
|
void CObjContainer::DeleteLastObj()
|
|
|
|
|
{
|
|
|
|
|
if(Empty()==false)
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec.pop_back();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
void CObjContainer::DelNullLine()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>> vec;
|
|
|
|
|
//<2F>ȱ<EFBFBD><C8B1>ݷ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->Empty() == false)
|
|
|
|
|
{
|
|
|
|
|
vec.push_back(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
m_ObjVec.clear();
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>obj <20><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = vec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = vec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec.push_back(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ϲ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
|
|
|
|
CObjBase* CObjContainer::JoinSelObj()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ʺϷ<CABA><CFB7>ڵ<EFBFBD>һλ<D2BB><CEBB>obj ---------------------------------------------------
|
|
|
|
|
int size = m_ObjVec.size();
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
bool flg1;
|
|
|
|
|
bool flg2;
|
|
|
|
|
int idx=0;
|
|
|
|
|
double eps = 0.01;//<2F>жϾ<D0B6><CFBE><EFBFBD>
|
|
|
|
|
int firstSelIdx = -1;//<2F><>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj
|
|
|
|
|
for(;idx<size;idx++)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec[idx]->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
if(firstSelIdx==-1)
|
|
|
|
|
{
|
|
|
|
|
firstSelIdx = idx;
|
|
|
|
|
}
|
|
|
|
|
flg1 = true;
|
|
|
|
|
flg2 = true;
|
|
|
|
|
for(int j=0;j<size;j++)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec[j]->IsSelected()&&j!=idx)
|
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if(m_ObjVec[idx]->GetFirstPt() == m_ObjVec[j]->GetFirstPt() || m_ObjVec[idx]->GetFirstPt() == m_ObjVec[j]->GetLastPt())
|
|
|
|
|
{
|
|
|
|
|
flg1 = false;
|
|
|
|
|
}
|
|
|
|
|
if(m_ObjVec[idx]->GetLastPt() == m_ObjVec[j]->GetFirstPt() || m_ObjVec[idx]->GetLastPt() == m_ObjVec[j]->GetLastPt())
|
|
|
|
|
{
|
|
|
|
|
flg2 = false;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if(IsTwoDbPtEqual(m_ObjVec[idx]->GetFirstPt(),m_ObjVec[j]->GetFirstPt(),eps)|| IsTwoDbPtEqual(m_ObjVec[idx]->GetFirstPt(),m_ObjVec[j]->GetLastPt(),eps))
|
|
|
|
|
{
|
|
|
|
|
flg1 = false;
|
|
|
|
|
}
|
|
|
|
|
if(IsTwoDbPtEqual(m_ObjVec[idx]->GetLastPt(),m_ObjVec[j]->GetFirstPt(),eps)|| IsTwoDbPtEqual(m_ObjVec[idx]->GetLastPt(),m_ObjVec[j]->GetLastPt(),eps))
|
|
|
|
|
{
|
|
|
|
|
flg2 = false;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(flg1 || flg2)//<2F>ҵ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(flg1 && flg2)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>û<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>obj<62><6A><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺϲ<DCBA>
|
|
|
|
|
return NULL;
|
|
|
|
|
if(firstSelIdx==-1)
|
|
|
|
|
return NULL;
|
|
|
|
|
if(!flg1 && !flg2)//ѡ<><D1A1><EFBFBD><EFBFBD>obj Ϊ<>պ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj <20><>ʼ
|
|
|
|
|
{
|
|
|
|
|
idx= flg1;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>obj ------------------------------------------
|
|
|
|
|
bool bReverse = false;
|
|
|
|
|
if(flg2)
|
|
|
|
|
{
|
|
|
|
|
bReverse = true;
|
|
|
|
|
}
|
|
|
|
|
CObjPline *p = new CObjPline;
|
|
|
|
|
p->AddObj(m_ObjVec[idx],bReverse);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>obj
|
|
|
|
|
set<int> Set;//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>Щ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Set.insert(idx);
|
|
|
|
|
|
|
|
|
|
Dbxy ConectPt = p->GetLastPt();//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
for(int j=0;j<size;j++)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec[j]->IsSelected()&&Set.count(j)==false)//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>obj
|
|
|
|
|
{
|
|
|
|
|
if(IsTwoDbPtEqual(ConectPt,m_ObjVec[j]->GetFirstPt(),eps))//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
p->AddObj(m_ObjVec[j],false);
|
|
|
|
|
Set.insert(j);//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
ConectPt = m_ObjVec[j]->GetLastPt();
|
|
|
|
|
}
|
|
|
|
|
else if(IsTwoDbPtEqual(ConectPt,m_ObjVec[j]->GetLastPt(),eps))//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
p->AddObj(m_ObjVec[j],true);
|
|
|
|
|
Set.insert(j);//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
ConectPt = m_ObjVec[j]->GetFirstPt();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj û<>б<EFBFBD><D0B1>ϲ<EFBFBD>
|
|
|
|
|
bool flg = false;
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec[i]->IsSelected()&&Set.count(i)==false)
|
|
|
|
|
{
|
|
|
|
|
flg = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ܺϲ<DCBA>
|
|
|
|
|
if(flg)
|
|
|
|
|
{
|
|
|
|
|
delete p;
|
|
|
|
|
p = NULL;
|
|
|
|
|
}
|
|
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idx <20>ڵ<EFBFBD><DAB5><EFBFBD>ֵΪpt
|
|
|
|
|
void CObjContainer::SetNodePtByIdx(int idx,Dbxy pt)
|
|
|
|
|
{
|
|
|
|
|
if(Empty())
|
|
|
|
|
return;
|
|
|
|
|
m_ObjVec[0]->SetNodePtByIdx(idx,pt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>obj
|
|
|
|
|
//bNeedSel <20><>ʾ<EFBFBD><CABE>ҪΪѡ<CEAA><D1A1>״̬<D7B4>Ų<EFBFBD><C5B2><EFBFBD>
|
|
|
|
|
//bTmpOp <20><>ʾ<EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::OperateObj(SObjOperatePar &par,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel==false || (bNeedSel && (*iter)->IsSelected()))
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Operate(par);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>obj
|
|
|
|
|
void CObjContainer::OperateLastObj(SObjOperatePar &par)
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec.empty()==false)
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec[m_ObjVec.size()-1]->Operate(par);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::GetLineInRect(DbRect &rect,vector<DbLine> &DataPtLineVec,bool bCatchTemp)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><D7BD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>Ϊѡ<CEAA><D1A1><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
if(bCatchTemp==false&&(*iter)->IsSelected())
|
|
|
|
|
continue;
|
|
|
|
|
(*iter)->GetLineInRect(rect,DataPtLineVec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>m_ObjVec <20><>obj <20><>rhs <20><><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::CloneObj(CObjContainer &rhs,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(!bNeedSel ||(bNeedSel && (*iter)->IsSelected()))
|
|
|
|
|
{
|
|
|
|
|
CObjBase *p = (*iter)->Clone();
|
|
|
|
|
rhs.AddObject(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>line <20>ཻ<EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD>㵽PointVec <20><>
|
|
|
|
|
void CObjContainer::GetIntersectPoint(DbLine &line,vector<Dbxy> &PointVec)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>obj <20><>line <20>ཻ
|
|
|
|
|
bool CObjContainer::HasObjIntersectWithLine(DbLine &line)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IntersectWithLine(line))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>obj <20><>ָ<EFBFBD><D6B8>
|
|
|
|
|
void CObjContainer::AddObjToCmd(CCommandBase *p,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
p->AddOpObj((*iter));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
p->AddOpObj((*iter));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>obj <20><><EFBFBD>뵱ǰ<EBB5B1><C7B0>layer
|
|
|
|
|
void CObjContainer::AllObjAddToLayer()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
GetLayerInstance().AddObject(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>е<EFBFBD>obj <20><><EFBFBD><EFBFBD>rhs
|
|
|
|
|
void CObjContainer::AllObjAddToContainer(CObjContainer &rhs,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
rhs.AddObject(*iter);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rhs.AddObject(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::AllObjAddToLayerTmp()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
GetLayerInstance().AddTmpObject(*iter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>obj <20><>ָ<EFBFBD><D6B8>(<28>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tool ʹ<><CAB9>)
|
|
|
|
|
CObjBase *CObjContainer::GetCurOpObj()
|
|
|
|
|
{
|
|
|
|
|
if(m_ObjVec.empty())
|
|
|
|
|
return NULL;
|
|
|
|
|
else
|
|
|
|
|
return m_ObjVec[m_ObjVec.size()-1].GetPtr();
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1//group <20><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
|
|
|
|
|
bool CObjContainer::IsInRect(DbRect rect,bool bNeedAllIn)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsInRect(rect,bNeedAllIn))
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
void CObjContainer::SetSelected(bool bSelected)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetSelected(bSelected);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//idx Ϊ-1 ʱ<><CAB1><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>
|
|
|
|
|
void CObjContainer::Operate(SObjOperatePar &par,int idx)
|
|
|
|
|
{
|
|
|
|
|
if(idx==-1)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->Operate(par);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if(CorrectIdx(idx))
|
|
|
|
|
{
|
|
|
|
|
m_ObjVec[idx]->Operate(par);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
bool CObjContainer::CorrectIdx(int idx)
|
|
|
|
|
{
|
|
|
|
|
int size = m_ObjVec.size();
|
|
|
|
|
if(0<=idx && idx<size)
|
|
|
|
|
return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><EFBFBD><F3B6A8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
void CObjContainer::BindingDlg()
|
|
|
|
|
{
|
|
|
|
|
int cnt = GetSelObjCnt();
|
|
|
|
|
if(cnt ==1)//ֻѡ<D6BB><D1A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
(*iter)->BindingDlg();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><>vec <20><>(<28>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>)
|
|
|
|
|
void CObjContainer::GetObjPtData(vector<vector<Dbxy>> &vec,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(!bNeedSel || (bNeedSel && (*iter)->IsSelected()))
|
|
|
|
|
{
|
|
|
|
|
(*iter)->GetPtData(vec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>vec <20><>
|
|
|
|
|
void CObjContainer::GetObjFillData(vector<vector<Dbxy>> &vec,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(!bNeedSel || (bNeedSel && (*iter)->IsSelected()))
|
|
|
|
|
{
|
|
|
|
|
(*iter)->GetFillData(vec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>굽vec
|
|
|
|
|
void CObjContainer::GetOnePoint(vector<Dbxy> &vec)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->GetType()==_TYPE_POINT)
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt = (*iter)->GetFirstPt();
|
|
|
|
|
vec.push_back(pt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
void CObjContainer::FillObj(SFillPar FillPar,bool bNeedSel)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(bNeedSel && (*iter)->IsSelected()==false)
|
|
|
|
|
continue;
|
|
|
|
|
(*iter)->CreatFillData(FillPar);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
void CObjContainer::GetAllPointObjPt(vector<Dbxy> &PtVec)
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->GetType()==_TYPE_POINT)
|
|
|
|
|
{
|
|
|
|
|
PtVec.push_back(((*iter)->GetRect()).GetCenterPt());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>obj <20><><EFBFBD>ڵ<EFBFBD>ѡ<EFBFBD><D1A1>״̬
|
|
|
|
|
void CObjContainer::SaveOldSelState()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SaveOldSelState();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ָ<EFBFBD>obj ֮ǰ<D6AE><C7B0>ѡ<EFBFBD><D1A1>״̬
|
|
|
|
|
void CObjContainer::RecoverOldSelState()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->RecoverOldSelState();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD>״̬
|
|
|
|
|
void CObjContainer::ResetAllCollectedState()
|
|
|
|
|
{
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter)->SetbCollected(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡΨһѡ<D2BB><D1A1><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rect
|
|
|
|
|
bool CObjContainer::GetSelOffsetRect(DbRect &Rect)
|
|
|
|
|
{
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter = m_ObjVec.begin();
|
|
|
|
|
vector<Sptr<CObjBase>>::iterator iter_end = m_ObjVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter)->IsbOffsetAreaRect()&&(*iter)->IsSelected())
|
|
|
|
|
{
|
|
|
|
|
cnt++;
|
|
|
|
|
Rect = (*iter)->GetRect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return (cnt==1);
|
|
|
|
|
}
|