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.
kev/Drawer/Module/GeoSigmaDraw/WellAndSection/ActionWellTrackDeleteItem.cpp

173 lines
5.1 KiB
C++

1 month ago
#include "stdafx.h"
#include "WellPoleLib/TrackGroup.h"
#include "WellPoleLib/WellPole.h"
#include "ActionWellTrackDeleteItem.h"
CActionWellTrackDeleteItem::CActionWellTrackDeleteItem(CSigmaDoc* ppDoc, UINT actionType, TRACKLIST& delTrackList)
: CActionItem(ppDoc, actionType)
{
m_bDeleted = false;
m_bPerformOperation = false;
GetTrackInfo(delTrackList);
RemoveOperation();//ִ<><D6B4>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Ͳ<EFBFBD>Ҫʹ<D2AA><CAB9>itemSingelWell<6C>е<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
//PerformOperation();
}
CActionWellTrackDeleteItem::~CActionWellTrackDeleteItem(void)
{
if (m_bDeleted == true)
{
for (int ii =0; ii< int(m_DelTrackInfos.size()); ii++)
{
if (m_DelTrackInfos[ii].pDelTrack)
delete m_DelTrackInfos[ii].pDelTrack;
if (m_DelTrackInfos[ii].pParentGroup)
delete m_DelTrackInfos[ii].pParentGroup;
}
m_DelTrackInfos.clear();
}
}
void CActionWellTrackDeleteItem::Undo(void)
{
CActionItem::Undo();
AddOperation();
}
void CActionWellTrackDeleteItem::Redo(void)
{
CActionItem::Redo();
RemoveOperation();
}
void CActionWellTrackDeleteItem::Finish()
{
if (!m_bPerformOperation)
RemoveOperation();
CActionItem::Finish();
}
void CActionWellTrackDeleteItem::AddOperation()
{
m_bDeleted = false;
if (m_DelTrackInfos.size() < 1)
return;
for (int ii = 0; ii < int(m_DelTrackInfos.size()); ii++)
{
if (m_DelTrackInfos[ii].pParentGroup)
{
CTrackObj* pBrotherTrack = NULL;
//<2F><><EFBFBD>ñ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵܵ<D6B5><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8B8><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ɾ<EFBFBD><C9BE>
if ((*m_DelTrackInfos[ii].groupTrackTrackList.begin()) == m_DelTrackInfos[ii].pDelTrack)
{
pBrotherTrack = *m_DelTrackInfos[ii].groupTrackTrackList.end();
}
else
pBrotherTrack = *m_DelTrackInfos[ii].groupTrackTrackList.begin();
CTrackGroup* ppTrackG = (CTrackGroup*)pBrotherTrack->GetParent();
ppTrackG->RemoveTrack(ppTrackG);
m_DelTrackInfos[ii].pParentGroup->GetTrackList().clear();
m_DelTrackInfos[ii].pParentGroup->GetTrackList().assign(m_DelTrackInfos[ii].groupTrackTrackList.begin(), m_DelTrackInfos[ii].groupTrackTrackList.end());
ppTrackG = (CTrackGroup*)m_DelTrackInfos[ii].pParentGroup->GetParent();
ppTrackG->AddTarckToPos(m_DelTrackInfos[ii].m_iDelParentGroupPos, m_DelTrackInfos[ii].pParentGroup);
}
else
{
CTrackGroup* ppTrackG = (CTrackGroup*)m_DelTrackInfos[ii].pDelTrack->GetParent();
ppTrackG->AddTarckToPos(m_DelTrackInfos[ii].m_iDelTrackPos,m_DelTrackInfos[ii].pDelTrack);
}
}
CTrackGroup* pTrackG = (CTrackGroup*)(m_DelTrackInfos[0].pDelTrack->GetParent());
CWellPole* pWell = pTrackG->GetWell();
CPoint2D ptf = pWell->GetAnchorPoint(); //->GetPos().TopLeft();
pWell->CalculateSize(ptf);
}
void CActionWellTrackDeleteItem::RemoveOperation()
{
m_bDeleted = true;
if (m_DelTrackInfos.size() < 1)
return;
for (int ii = 0; ii < int(m_DelTrackInfos.size()); ii++)
{
if (m_DelTrackInfos[ii].pParentGroup)
{
CTrackGroup* ppTrackG = (CTrackGroup*)m_DelTrackInfos[ii].pParentGroup;
ppTrackG->RemoveTrack(m_DelTrackInfos[ii].pParentGroup);
m_DelTrackInfos[ii].pParentGroup->GetTrackList().clear(); //<2F><><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTrackObj* pBrotherTrack = NULL;
//<2F><><EFBFBD>ñ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵܵ<D6B5><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB8B8><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>λ<EFBFBD><CEBB>
if ((*m_DelTrackInfos[ii].groupTrackTrackList.begin()) == m_DelTrackInfos[ii].pDelTrack)
{
pBrotherTrack = *m_DelTrackInfos[ii].groupTrackTrackList.end();
}
else
pBrotherTrack = *m_DelTrackInfos[ii].groupTrackTrackList.begin();
ppTrackG->AddTarckToPos(m_DelTrackInfos[ii].m_iDelParentGroupPos, pBrotherTrack);
}
else
{
CTrackGroup* ppTrackG =(CTrackGroup*)m_DelTrackInfos[ii].pDelTrack->GetParent();
ppTrackG->RemoveTrack(m_DelTrackInfos[ii].pDelTrack);
}
}
CTrackGroup* pTrackG = (CTrackGroup*)(m_DelTrackInfos[0].pDelTrack->GetParent());
CWellPole* pWell = pTrackG->GetWell();
CPoint2D ptf = pWell->GetAnchorPoint(); //->GetPos().TopLeft();
pWell->CalculateSize(ptf);
}
void CActionWellTrackDeleteItem::GetTrackInfo(TRACKLIST& delTrackList)
{
DELTRACKINFO delTrackInfo;
TRACKLIST::iterator it = delTrackList.begin();
for (; it != delTrackList.end(); it++)
{
CTrackGroup* pTrackG = (CTrackGroup*)(*it)->GetParent();
if (pTrackG->GetTrackList().size() == 2 && pTrackG->GetType() != KEP_WELL)
{//<2F><>ʱɾ<CAB1><C9BE>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8B8><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵܵ<D6B5><DCB5><EFBFBD><E6B2B9><EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>Ϊ,<2C><><EFBFBD>˼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
delTrackInfo.pDelTrack = *it;
delTrackInfo.m_iDelTrackPos = pTrackG->GetTrackPosInList(*it);
delTrackInfo.pParentGroup = pTrackG;
CTrackGroup* ppTrackG = (CTrackGroup*)pTrackG->GetParent();
delTrackInfo.m_iDelParentGroupPos = ppTrackG->GetTrackPosInList(pTrackG);
delTrackInfo.groupTrackTrackList.clear();
delTrackInfo.groupTrackTrackList.assign(pTrackG->GetTrackList().begin(), pTrackG->GetTrackList().end());//<2F><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_DelTrackInfos.push_back(delTrackInfo);
}
else
{
delTrackInfo.pDelTrack = *it;
delTrackInfo.m_iDelTrackPos = pTrackG->GetTrackPosInList(*it);
delTrackInfo.pParentGroup = NULL;
delTrackInfo.m_iDelParentGroupPos = -1;
delTrackInfo.groupTrackTrackList.clear();
m_DelTrackInfos.push_back(delTrackInfo);
}
}
}
void NAction::CActionWellTrackDeleteItem::accept(CActionVisitor& visitor)
{
//visitor.visit(*this);
}