/// <summary> /// 绘制内容到笔画 /// </summary> /// <param name="Cmd"></param> /// <param name="isDown"></param> public void Handle(IPainterCmd Cmd, bool isDown = true) { if (!Cmd.CouldHandle) { return; } switch (Cmd.Type) { case PaintType.Rectangle: var tpdr = Cmd as PCmdData_2p; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawRectangle(tpdr.Pen, getRectangle(tpdr.Start, tpdr.End)); break; case PaintType.Ellipse: var tpdc = Cmd as PCmdData_2p; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawEllipse(tpdc.Pen, getRectangleF(tpdc.Start, tpdc.End)); break; case PaintType.Arrow: var tpda = Cmd as PCmdData_2p; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawLine(tpda.Pen, tpda.Start, tpda.End); break; case PaintType.StraightLine: var tpds = Cmd as PCmdData_2p; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawLine(tpds.Pen, tpds.Start, tpds.End); break; case PaintType.Dashed: tpds = Cmd as PCmdData_2p; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawLine(tpds.Pen, tpds.Start, tpds.End); break; case PaintType.Lines: var tpdls = Cmd as PCmdData_Lines; glyph.Clear(Color.Transparent); PrintCmd = g => g.DrawCurve(tpdls.Pen, tpdls.Points); break; default: throw new Exception("error.." + Cmd.Type); } PrintCmd(glyph); glyph.Flush(); }
/// <summary> /// /// </summary> /// <param name="graphics"></param> /// <param name="cmd"></param> public static void Draw(this Graphics graphics, IPainterCmd cmd) { switch (cmd.Type) { case PaintType.Rectangle: //var rectData = cmd as break; case PaintType.Ellipse: break; case PaintType.Arrow: break; case PaintType.StraightLine: break; case PaintType.Dashed: var dashedData = cmd as PCmdData_Dashed; //var length = dashedData.Length; //int caps = (int)(length / 20) + 1; //var delta = getDelta(dashedData.Start, dashedData.End, length); //var deltaSizex15 = new SizeF(delta.X * 15, delta.Y * 15); //var deltaSizex20 = new SizeF(delta.X * 20, delta.Y * 20); //for (int i = 0; i < caps; i++) // graphics.DrawLine(dashedData.Pen, dashedData.Start, dashedData.Start + deltaSizex15, deltaSizex20.Multiple(i)); var pen = dashedData.Pen; pen.DashOffset = 15; pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; graphics.DrawLine(pen, dashedData.Start, dashedData.End); break; case PaintType.Lines: var linesData = cmd as PCmdData_Lines; graphics.DrawLines(cmd.Pen, linesData.Points); break; default: break; } }