|
|
#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;
|
|
|
}
|