#include "StdAfx.h" #include "MouseToolStretch.h" #include "EnumDirection.h" #include "EasyOperationMgr.h" #include "GlobalDrawMgr.h" #include "GlobalFunction.h" #include "CommandStretch.h" #include "CommandMgr.h" CMouseToolStretch::CMouseToolStretch(void) { } CMouseToolStretch::~CMouseToolStretch(void) { } void CMouseToolStretch::OnLButtonDown(UINT nFlags, CPoint point,CClientDC &dc) { if(m_Status==_STATUS_1) { SaveDownPoint(point); //创建模拟操作的对象 CreatOpSimulateObj(); ToNextStatus(); } } void CMouseToolStretch::OnLButtonUp(UINT nFlags, CPoint point,CClientDC &dc) { //创建undo 用的指令-----start CCommandStretch *pCmd = new CCommandStretch; //obj 操作 DIRECTION dir = gEasyOperationMgr->GetOprDir(); if(dir == _DIR_L || dir == _DIR_R) { pCmd->SetOperatePar(m_ParX); } else if(dir == _DIR_U || dir == _DIR_D) { pCmd->SetOperatePar(m_ParY); } else { pCmd->SetOperatePar(m_ParX); pCmd->SetOperateParY(m_ParY); } gCommandMgr.AddUndoCommand(pCmd); //创建undo 用的指令-----end pCmd->Excute(); OperateOver(); m_Status = _STATUS_END; } void CMouseToolStretch::OperateObj(Dbxy StartPt,Dbxy EndPt) { m_OpSimulateObj.DelAllPt(); m_OpSimulateObj.CopyPt(m_OpSimulateObjBak); //obj 操作 DIRECTION dir = gEasyOperationMgr->GetOprDir(); //保持比例 if(dir == _DIR_LB || dir == _DIR_RB || dir == _DIR_LT || dir == _DIR_RT) { if(abs(EndPt.x - StartPt.x)StartPt.y) { EndPt.y = StartPt.y + abs(EndPt.x - StartPt.x); } else { EndPt.y = StartPt.y - abs(EndPt.x - StartPt.x); } } else { if(EndPt.x>StartPt.x) { EndPt.x = StartPt.x + abs(EndPt.y - StartPt.y); } else { EndPt.x = StartPt.x - abs(EndPt.y - StartPt.y); } } } if(dir != _DIR_U && dir != _DIR_D) { m_ParX.OpType = _OP_STRETCH; m_ParX.BasePt = gEasyOperationMgr->GetBasePt(); m_ParX.OldSize = gEasyOperationMgr->GetSize(_X); m_ParX.Diff = gEasyOperationMgr->GetDiff(StartPt,EndPt).x; m_ParX.NewSize = m_ParX.OldSize + m_ParX.Diff; m_ParX.xy = _X; //操作模拟对象 m_OpSimulateObj.Operate(m_ParX); } if(dir != _DIR_L && dir != _DIR_R) { m_ParY.OpType = _OP_STRETCH; m_ParY.BasePt = gEasyOperationMgr->GetBasePt(); m_ParY.OldSize = gEasyOperationMgr->GetSize(_Y); m_ParY.Diff = gEasyOperationMgr->GetDiff(StartPt,EndPt).y; m_ParY.NewSize = m_ParY.OldSize + m_ParY.Diff; m_ParY.xy = _Y; //操作模拟对象 m_OpSimulateObj.Operate(m_ParY); } } void CMouseToolStretch::OnMouseMove(UINT nFlags, CPoint point,CClientDC &dc) { Dbxy CurPt = gDraw->CPoint2Dbxy(point); CLayer &layer = gLayer; if(nFlags&MK_LBUTTON && (m_Status!=_STATUS_1)) { if(m_bFirstMove==false) { //重绘模拟对象 XorRedrawOpSimulateObj(&dc); } m_bFirstMove = false; OperateObj(m_DownPoint,CurPt);//操作 XorRedrawOpSimulateObj(&dc); } }