#include "StdAfx.h" #include "MouseToolRotate.h" #include "GlobalFunction.h" #include "CommandRotato.h" #include "GlobalDrawMgr.h" #include "LogMgr.h" #include "CommandMgr.h" CMouseToolRotate::CMouseToolRotate(void) { //标签栏-------------------------start GetFrame()->ResetCaptionBar(); GetFrame()->SetCaptionCmdStr(CMD_TOOL_ROTATO_CENTER); GetFrame()->RefreashCaptionBar(); //标签栏-------------------------end } CMouseToolRotate::~CMouseToolRotate(void) { } void CMouseToolRotate::OperateOver() { if(m_Status==_STATUS_2) { //------------------------------------日志start CString val1; val1.Format("%lf",m_Angle); gLogMgr->WriteCmd(CMD_TOOL_ROTATO_ANGLE,val1,STR_NULL); //------------------------------------日志end //标签栏-------------------------start GetFrame()->ResetCaptionBar(); //标签栏-------------------------end //旋转 SObjOperatePar par; par.OpType = _OP_ROTATO; par.BasePt = m_CenterPt; par.Angle = m_Angle; //创建undo 用的指令-----start CCommandRotato *p = new CCommandRotato; p->SetOperatePar(par); gCommandMgr.AddUndoCommand(p); p->Excute(); //创建undo 用的指令-----end CMouseTool::OperateOver(); m_Status = _STATUS_END; } } void CMouseToolRotate::OnLButtonDown(UINT nFlags, CPoint point,CClientDC &dc) { Dbxy pt = gDraw->CPoint2Dbxy(point); if(m_Status==_STATUS_1) { SaveDownPoint(point); m_CenterPt = pt;//记录旋转中心点 m_DownPoint.x+=20; //------------------------------------日志start CString val1; val1.Format("%lf",pt.x); CString val2; val2.Format("%lf",pt.y); gLogMgr->WriteCmd(CMD_TOOL_ROTATO_CENTER,val1,val2); //------------------------------------日志end //标签栏-------------------------start GetFrame()->ResetCaptionBar(); GetFrame()->SetCaptionCmdStr(CMD_TOOL_ROTATO_ANGLE); GetFrame()->RefreashCaptionBar(); //标签栏-------------------------end ToNextStatus(); //将选中obj 复制到m_TmpObjContainer m_TmpObjContainer.Clear(); gLayer.CloneObj(m_TmpObjContainer,true); //创建模拟操作的对象 CreatOpSimulateObj(); } else { //最后计算一次,避免捕捉点影响 double Angle=CalAngle(m_CenterPt,m_DownPoint,pt); m_Angle = AngleTo360(Angle);//记录旋转角度 OperateOver(); } } void CMouseToolRotate::OnLButtonUp(UINT nFlags, CPoint point,CClientDC &dc) { } void CMouseToolRotate::OperateObj(Dbxy StartPt,Dbxy EndPt) { //计算反正切角 double Angle=CalAngle(m_CenterPt,StartPt,EndPt); m_Angle = AngleTo360(Angle);//记录旋转角度 } void CMouseToolRotate::OnMouseMove(UINT nFlags, CPoint point,CClientDC &dc) { Dbxy CurPt = gDraw->CPoint2Dbxy(point); if(m_Status==_STATUS_2) { if(m_bFirstMove==false) { //重绘模拟对象 XorRedrawOpSimulateObj(&dc); } m_bFirstMove = false; //计算反正切角 double Angle=CalAngle(m_CenterPt,m_DownPoint,CurPt); m_Angle = AngleTo360(Angle);//记录旋转角度 SObjOperatePar par; par.OpType = _OP_ROTATO; par.BasePt = m_CenterPt; par.Angle = m_Angle; //操作模拟对象 OpSimulateObj(par); //重绘模拟对象 XorRedrawOpSimulateObj(&dc); } } bool CMouseToolRotate::OnSetCmd(CString str) { if(m_Status==_STATUS_2) { double Val1=0;//旋转角度 double Val2=0; int result = GetTwoNum(str,Val1,Val2); if(result>0) { if(result == 1) { m_Angle = Val1; OperateOver(); return true; } } } return false; }