#include "StdAfx.h" #include ".\itemcutin.h" #include "SigmaDoc.h" #include "SigmaView.h" #include "DrawOperator\cutout.h" #include "ActionAddItem.h" #include "ActionListItem.h" CItemCutIn::CItemCutIn(CSigmaDoc* ppDoc) : CItemCutOut(ppDoc) { this->SetType(ITEM_CUT_IN); } CItemCutIn::~CItemCutIn(void) { if(m_pSelectCurve) delete m_pSelectCurve; m_pSelectCurve=NULL; } void CItemCutIn::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) { m_pSelectCurve->OnLButtonDown(pDC, nFlags, point, vk); if (m_pSelectCurve->GetSelectCount() > 0) CutInPickup(); } void CItemCutIn::DoLButtonUp(void) { /* m_nInfoID=0; int c=0; switch(m_idea) { default: case CUT_OUT_RECTANGLE: m_nInfoID=ID_CUT_OUT_MAP_RECTANGLE; c=CutInRectangle(); break; case CUTOUT_ACCURATELY: m_nInfoID=ID_CUT_OUT_MAP_ACCURATELY; break; case CUT_OUT_PICKUP: m_nInfoID=ID_CUT_OUT_MAP_PICKUP; CutInPickup(); break; } if(c>0) { GetDoc()->Invalidate(); //GetDoc()->SetModifiedFlag(); } //GetDoc()->EnableDefaultTool(); */ } int CItemCutIn::CutInRectangle(CRect8 rect) { CCurveEx ceRange; ceRange.CreateCurveFromRect(&rect); return CutIn(&ceRange); } int CItemCutIn::CutInPickup(void) { POSITION pos=m_pSelectCurve->GetSelectItem(0); if(pos==NULL) return 0; BOOL bDeleteCurve=FALSE; CCurveEx* pRgn=m_pSelectCurve->GetRangeCurve(pos, bDeleteCurve); if(pRgn==NULL) return 0; int rt=0; if(pRgn->IsClosed()) rt=CutIn(pRgn, pRgn); else { CCurveEx* pc=new CCurveEx; *pc=*pRgn; pc->SetToClose(); pc->num+=1; pc->GetLocation(); rt=CutIn(pc, pRgn); delete pc; } if(bDeleteCurve) delete pRgn; return rt; } int NItem::CItemCutIn::CutAccurately(CCurveEx* pCurveRange) { return CutIn(pCurveRange); } int CItemCutIn::CutIn(CCurveEx* pCurveRange, CCurveEx* pSourceCurveRange) { //GetDoc()->BeginProgress("Cut in..."); CCutIn ci; ci.SetSourceCurveRange(pSourceCurveRange); ci.SetXY(GetXY()); ci.m_dMiniCurveSmoothStep=GetDC()->GetMiniSmoothStep(); ci.CutIn(pCurveRange); //GetDoc()->EndProgress(); if(m_nInfoID==0) m_nInfoID=ID_CUT_OUT_MAP_RECTANGLE; //for undo/redo CActionListItem *pAction = new CActionListItem(GetDoc(), m_nInfoID); //元素删除操作 pAction->AddDeleteItem(ci.m_plDel); //元素增加操作 CActionAddItem* pItem = new CActionAddItem(GetDoc(), 0, ci.m_plAdd); pAction->AddTailItem(pItem); GetDoc()->SetActionItem(pAction); return 1; }