#include "StdAfx.h" #include "MouseToolMoveNode.h" #include "GlobalDrawMgr.h" #include "GlobalFunction.h" #include "CommandMoveNode.h" #include "CommandMgr.h" CMouseToolMoveNode::CMouseToolMoveNode(void) { m_NodeIdx = -1; } CMouseToolMoveNode::~CMouseToolMoveNode(void) { } void CMouseToolMoveNode::OnLButtonDown(UINT nFlags, CPoint point,CClientDC &dc) { if(m_Status==_STATUS_1) { Dbxy pt = gDraw->CPoint2Dbxy(point); DbRect rect = gDraw->GetCurPointRect(pt); CLayer &layer = gLayer; if(!layer.HasSelNodeInRect(rect)) return; //先找到第一个在rect 的obj ----------------------------------------------- Sptr pObj = layer.GetFirstNodeObjInRect(rect); m_TmpObjContainer.AddObject(pObj); //获得obj 在rect 中的第一个node 点----------------------------------------------- vector LineVec; pObj->GetLineInRect(rect,LineVec,false); Dbxy NodePt = LineVec[0].m_pt1.GetPt(); if(!IsPointInRect(NodePt,rect)) { NodePt = LineVec[0].m_pt2.GetPt(); } if(!IsPointInRect(NodePt,rect)) return; //获得NodePt 在obj 的序号 m_NodeIdx = pObj->GetNodePtIdx(NodePt); if(m_NodeIdx!=-1) { //记录旧的坐标 m_OldPt = NodePt; ToNextStatus(); } } } void CMouseToolMoveNode::OnLButtonUp(UINT nFlags, CPoint point,CClientDC &dc) { if(!m_TmpObjContainer.Empty()) { //创建撤销指令-------start CCommandMoveNode *p = new CCommandMoveNode; p->SetPar(m_NodeIdx,m_OldPt,m_NewPt); gCommandMgr.AddUndoCommand(p,m_TmpObjContainer.GetObjVec()); p->Excute(); //创建撤销指令-------end } //清空临时容器 m_TmpObjContainer.Clear(); OperateOver(); m_Status = _STATUS_END; } void CMouseToolMoveNode::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) { layer.XorRedrawObj(&dc);//擦除之前的 } m_bFirstMove = false; m_TmpObjContainer.SetNodePtByIdx(m_NodeIdx,CurPt); //记录新的坐标 m_NewPt = CurPt; layer.XorRedrawObj(&dc);//重绘 } }