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.

124 lines
2.4 KiB
C++

#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);
//Ԫ<><D4AA>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pAction->AddDeleteItem(ci.m_plDel);
//Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
CActionAddItem* pItem = new CActionAddItem(GetDoc(), 0, ci.m_plAdd);
pAction->AddTailItem(pItem);
GetDoc()->SetActionItem(pAction);
return 1;
}