////////////////////////////////////////////////////////////////////////////// //文件 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); }