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.

915 lines
25 KiB
C++

#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);
}