#include "StdAfx.h" #include "MouseToolDelNode.h" #include "GlobalDrawMgr.h" #include "Layer.h" #include "GlobalFunction.h" #include "CommandDelNode.h" #include "CommandMgr.h" #include "LogMgr.h" CMouseToolDelNode::CMouseToolDelNode(void) { } CMouseToolDelNode::~CMouseToolDelNode(void) { } void CMouseToolDelNode::OnLButtonDown(UINT nFlags, CPoint point,CClientDC &dc) { Dbxy pt = gDraw->CPoint2Dbxy(point); DbRect rect = gDraw->GetCurPointRect(pt); CLayer &layer = gLayer; if(!layer.HasObjectInRect(rect)) { gLogMgr->WriteDebugLog("对象不在范围之内",_LOG_ERROR); return; } //先找到第一个在rect 的obj ----------------------------------------------- Sptr pObj = layer.GetFirstObjInRect(rect); if(pObj->GetPtCnt()<=2)//只删除3 个点以上的对象 { gLogMgr->WriteDebugLog("只能删除3个点以上的对象",_LOG_ERROR); return; } //获得obj 在rect 中的第一个node 点----------------------------------------------- vector LineVec; pObj->GetLineInRect(rect,LineVec,false); if(LineVec.empty()) return; Dbxy NodePt = LineVec[0].m_pt1.GetPt(); if(!IsPointInRect(NodePt,rect)) { NodePt = LineVec[0].m_pt2.GetPt(); } if(!IsPointInRect(NodePt,rect)) { gLogMgr->WriteDebugLog("节点不在范围内",_LOG_ERROR); return; } //获得NodePt 在obj 的序号 int idx = pObj->GetNodePtIdx(NodePt); if(idx!=-1 && idx!=0) { pObj->DelNodePtByIdx(idx); //创建撤销指令----------------------------------- CCommandDelNode *p = new CCommandDelNode; p->SetPar(idx,NodePt); p->AddOpObj(pObj); gCommandMgr.AddUndoCommand(p); //刷新 GetCurViewPtr()->RefreshView(); } }