DrawingCanvas.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. namespace MECF.Framework.UI.Core.DxfScript
  13. {
  14. public class DrawingCanvas : Canvas
  15. {
  16. private DrawingVisual _drawingVisual = new DrawingVisual();
  17. protected override int VisualChildrenCount { get { return 1; } }
  18. private DrawingContext _dc = null;
  19. private Drawing _drawing = null;
  20. public void ClearDrawing()
  21. {
  22. _drawing = null;
  23. }
  24. public void SaveDrawing()
  25. {
  26. _drawing = _drawingVisual.Drawing;
  27. }
  28. public void LoadDrawing(double x, double y)
  29. {
  30. if (_drawing != null)
  31. {
  32. DrawingImage drawingImage = new DrawingImage(_drawing);
  33. _dc.DrawImage(drawingImage, new System.Windows.Rect(x + _drawing.Bounds.X, y + _drawing.Bounds.Y, _drawing.Bounds.Width, _drawing.Bounds.Height));
  34. }
  35. }
  36. protected override Visual GetVisualChild(int index)
  37. {
  38. if (index == 0)
  39. {
  40. return _drawingVisual;
  41. }
  42. throw new ArgumentOutOfRangeException();
  43. }
  44. public DrawingCanvas()
  45. {
  46. this.AddVisualChild(_drawingVisual);
  47. }
  48. public DrawingContext CreateGraphics()
  49. {
  50. if (_dc != null)
  51. {
  52. return _dc;
  53. }
  54. _dc = _drawingVisual.RenderOpen();
  55. return _dc;
  56. }
  57. public void Dispose()
  58. {
  59. if (_dc != null)
  60. {
  61. _dc.Close();
  62. }
  63. _dc = null;
  64. }
  65. }
  66. }