using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace GeoSigmaViewer { //绘制多段线:此线可包含直线段、圆弧、三次样条曲线。 public class DrawToolCurve : DrawTool { private MouseMoveResult mmResult; public DrawToolCurve() { ToolCursor = DrawCursors.CurveDraw; ItemType = DrawItemType.ITEM_CURVE; mmResult = new MouseMoveResult(); } public override void Start() { drawer.ChangeContextMenu(DrawToolType.Curve); } public override void End() { drawer.ChangeContextMenu(DrawToolType.Select); } public override void Execute(string cmdString) { switch(cmdString) { case "cancel": { drawer.Geo.CancelCurve(); drawer.Geo.EnableRedraw(true); drawer.ReDraw(); } break; case "end": { drawer.Geo.EndCurve(); drawer.Geo.EnableRedraw(true); drawer.ReDraw(); } break; case "autoclose": { drawer.Geo.AutoCloseCurve(); drawer.Geo.EnableRedraw(true); drawer.ReDraw(); } break; case "merge": { drawer.Geo.ChangeCurveMergeState(); drawer.Geo.EnableRedraw(true); drawer.ReDraw(); } break; case "next": { drawer.Geo.DrawNextCurve(); drawer.Geo.EnableRedraw(true); drawer.ReDraw(); } break; default: break; } } public override void OnLButtonDown(Drawer drawArea, MouseEventArgs e) { drawArea.Geo.OnLButtonDown(e.X, e.Y); //base.OnLButtonDown(drawArea, e); } public override void OnLButtonUp(Drawer drawArea, MouseEventArgs e) { drawArea.Geo.OnLButtonUp(e.X, e.Y); drawArea.Geo.EnableRedraw(true); // 不用刷新,结束时刷新一次就行。 //drawArea.ReDraw(); } public override void OnMouseMove(Drawer drawArea, MouseEventArgs e) { //if (e.Button == MouseButtons.Left) { Graphics g = drawArea.CreateGraphics(); drawArea.Geo.ItemMouseMove(g.GetHdc(), e.X, e.Y, ref mmResult); } } } }