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/ActionEmbellishItem.cpp

248 lines
5.7 KiB
C++

//////////////////////////////////////////////////////////////////////////////
//文件 ActionEmbellishItem.cpp
//主要功能:
//
//程序编写: 2006-12-07
/////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include ".\actionembellishitem.h"
#include "SigmaDoc.h"
#include "SigmaView.h"
#include "Visitor.h"
NAction::CActionEmbellishItem::CActionEmbellishItem()
: CActionItem(nullptr, 0)
{
}
CActionEmbellishItem::CActionEmbellishItem(CSigmaDoc * ppDoc, UINT actionType, CLayer* pLayer)
: CActionItem(ppDoc, actionType)
{
m_pLayer=pLayer;
m_pOne=NULL;
m_pOldViewCurve=NULL;
m_pOldViewPoint=NULL;
m_pNewViewCurve=NULL;
m_pNewViewPoint=NULL;
}
CActionEmbellishItem::CActionEmbellishItem(CSigmaDoc * ppDoc, UINT actionType, COne* pOne) //个性修饰
: CActionItem(ppDoc, actionType)
{
m_pLayer=NULL;
m_pOne=pOne;
m_pOldViewCurve=NULL;
m_pOldViewPoint=NULL;
m_pNewViewCurve=NULL;
m_pNewViewPoint=NULL;
}
CActionEmbellishItem::~CActionEmbellishItem(void)
{
if(m_pOldViewCurve) delete m_pOldViewCurve;
m_pOldViewCurve=NULL;
if(m_pOldViewPoint) delete m_pOldViewPoint;
m_pOldViewPoint=NULL;
if(m_pNewViewCurve) delete m_pNewViewCurve;
m_pNewViewCurve=NULL;
if(m_pNewViewPoint) delete m_pNewViewPoint;
m_pNewViewPoint=NULL;
}
void CActionEmbellishItem::Undo(void)
{
CActionItem::Undo();
//设置老修饰
CHowToViewCurve *hvc=NULL;
CHowToViewPoint *hvp=NULL;
if(m_pOldViewCurve)
{
hvc=new CHowToViewCurve;
*hvc=*m_pOldViewCurve;
}
if(m_pOldViewPoint)
{
hvp=new CHowToViewPoint;
*hvp=*m_pOldViewPoint;
}
if(m_pLayer) //层修饰
{
m_pLayer->SetHowToViewCurve(hvc);
m_pLayer->SetHowToViewPoint(hvp);
// 查找所有组合并设置层修改
CPtrList* plist = GetDoc()->GetDraw()->GetValueList();
POSITION pos;
COne* pOne;
pos = plist->GetHeadPosition();
while (pos)
{
pOne = (COne*)plist->GetNext(pos);
if (pOne->GetType() != DOUBLEFOX_BLOCK)continue;
CInsertBlock* pBlock = ((CInsertBlock*)pOne->value);
CXy* pXyBlock = (CXy*)pBlock->GetXy();
CLayer* pLayerBlock = pXyBlock->FindLayer(m_pLayer->GetName());
if (pLayerBlock != nullptr)
{
CHowToViewCurve* hvcBlock = nullptr;
if (m_pOldViewCurve) {
hvcBlock = new CHowToViewCurve;
*hvcBlock = *m_pOldViewCurve;
}
pLayerBlock->SetHowToViewCurve(hvcBlock);
CHowToViewPoint* hvpBlock = NULL;
if (m_pOldViewPoint) {
hvpBlock = new CHowToViewPoint;
*hvpBlock = *m_pOldViewPoint;
}
pLayerBlock->SetHowToViewPoint(hvpBlock);
}
}
}
else if(m_pOne)//个性修饰
{
if(m_pOne->HowToViewCurve)delete m_pOne->HowToViewCurve;
m_pOne->HowToViewCurve=hvc;
if(m_pOne->HowToViewPoint)delete m_pOne->HowToViewPoint;
m_pOne->HowToViewPoint=hvp;
//GetDoc()->Invalidate(m_pOne);
}
}
void CActionEmbellishItem::Redo(void)
{
CActionItem::Redo();
//设置老修饰
CHowToViewCurve *hvc=NULL;
CHowToViewPoint *hvp=NULL;
if(m_pNewViewCurve)
{
hvc=new CHowToViewCurve;
*hvc=*m_pNewViewCurve;
}
if(m_pNewViewPoint)
{
hvp=new CHowToViewPoint;
*hvp=*m_pNewViewPoint;
}
if(m_pLayer) //层修饰
{
m_pLayer->SetHowToViewCurve(hvc);
m_pLayer->SetHowToViewPoint(hvp);
// 查找所有组合并设置层修改
CPtrList* plist = GetDoc()->GetDraw()->GetValueList();
POSITION pos;
COne* pOne;
pos = plist->GetHeadPosition();
while (pos)
{
pOne = (COne*)plist->GetNext(pos);
if (pOne->GetType() != DOUBLEFOX_BLOCK)continue;
CInsertBlock* pBlock = ((CInsertBlock*)pOne->value);
CXy* pXyBlock = (CXy*)pBlock->GetXy();
CLayer* pLayerBlock = pXyBlock->FindLayer(m_pLayer->GetName());
if (pLayerBlock != nullptr)
{
CHowToViewCurve* hvcBlock = nullptr;
if (m_pNewViewCurve) {
hvcBlock = new CHowToViewCurve;
*hvcBlock = *m_pNewViewCurve;
}
pLayerBlock->SetHowToViewCurve(hvcBlock);
CHowToViewPoint* hvpBlock = NULL;
if (m_pNewViewPoint) {
hvpBlock = new CHowToViewPoint;
*hvpBlock = *m_pNewViewPoint;
}
pLayerBlock->SetHowToViewPoint(hvpBlock);
}
}
}
else if(m_pOne)//个性修饰
{
if(m_pOne->HowToViewCurve)delete m_pOne->HowToViewCurve;
m_pOne->HowToViewCurve=hvc;
if(m_pOne->HowToViewPoint)delete m_pOne->HowToViewPoint;
m_pOne->HowToViewPoint=hvp;
//GetDoc()->Invalidate(m_pOne);
}
}
void NAction::CActionEmbellishItem::accept(CActionVisitor& visitor)
{
visitor.visit(*this);
}
void CActionEmbellishItem::SetOldHowToView(CHowToViewCurve* pOldCurve, CHowToViewPoint* pOldPoint)
{
if(m_pOldViewCurve) delete m_pOldViewCurve;
m_pOldViewCurve=NULL;
if(m_pOldViewPoint) delete m_pOldViewPoint;
m_pOldViewPoint=NULL;
if(pOldCurve)
{
m_pOldViewCurve=new CHowToViewCurve;
*m_pOldViewCurve=*pOldCurve;
}
if(pOldPoint)
{
m_pOldViewPoint=new CHowToViewPoint;
*m_pOldViewPoint=*pOldPoint;
}
}
void CActionEmbellishItem::SetNewHowToView(CHowToViewCurve* pNewCurve, CHowToViewPoint* pNewPoint)
{
if(m_pNewViewCurve) delete m_pNewViewCurve;
m_pNewViewCurve=NULL;
if(m_pNewViewPoint) delete m_pNewViewPoint;
m_pNewViewPoint=NULL;
if(pNewCurve)
{
m_pNewViewCurve=new CHowToViewCurve;
*m_pNewViewCurve=*pNewCurve;
}
if(pNewPoint)
{
m_pNewViewPoint=new CHowToViewPoint;
*m_pNewViewPoint=*pNewPoint;
}
}
void CActionEmbellishItem::SetOldHowToView(CLayer* pLayer)
{
if(pLayer==NULL) return;
SetOldHowToView(pLayer->HowToViewCurve, pLayer->HowToViewPoint);
}
void CActionEmbellishItem::SetNewHowToView(CLayer* pLayer)
{
if(pLayer==NULL) return;
SetNewHowToView(pLayer->HowToViewCurve, pLayer->HowToViewPoint);
}
void CActionEmbellishItem::SetOldHowToView(COne* pOne)
{
if(pOne==NULL) return;
SetOldHowToView(pOne->HowToViewCurve, pOne->HowToViewPoint);
}
void CActionEmbellishItem::SetNewHowToView(COne* pOne)
{
if(pOne==NULL) return;
SetNewHowToView(pOne->HowToViewCurve, pOne->HowToViewPoint);
}