GasDxfCanvas.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Media;
  7. namespace MECF.Framework.UI.Core.DxfScript
  8. {
  9. /// <summary>
  10. /// 名称:画布类
  11. /// 用途:Canvas信息初始化
  12. /// </summary>
  13. public partial class GasDxfDocument
  14. {
  15. //显示处理
  16. //初始化尺寸和位置
  17. private double canvasWidth, canvasHeight;
  18. private double rate;//dxf文件与屏幕画布的尺寸比例
  19. private double DefaultSpace = 5;// 默认边缘空间
  20. private double XSPACE = 10;
  21. private double YSPACE = 10;
  22. public double Scale = 1; //屏幕显示的缩放比例
  23. public double dragX, dragY; //拖动的偏移量
  24. //初始化画布
  25. private void InitScale()
  26. {
  27. // 减去两边的空间以确定实际可用画布大小
  28. canvasWidth = draw.Width - 2 * DefaultSpace;
  29. canvasHeight = draw.Height - 2 * DefaultSpace;
  30. // 检查DXF尺寸是否有效
  31. if (DxfWidth < 1 || DxfHeight < 1) return;
  32. // 计算宽度和高度的比例
  33. double widthRate = canvasWidth / DxfWidth;
  34. double heightRate = canvasHeight / DxfHeight;
  35. // 选择较小的比例以确保DXF文件完整显示在画布上
  36. rate = Math.Min(widthRate, heightRate);
  37. // 计算空间以使图形居中
  38. XSPACE = DefaultSpace + (canvasWidth - DxfWidth * rate * Scale) / 2;
  39. YSPACE = DefaultSpace + (canvasHeight - DxfHeight * rate * Scale) / 2;
  40. }
  41. //显示移动结果
  42. public void DrawMovedImage()
  43. {
  44. CreateGraphics();
  45. draw.LoadDrawing(dragX, dragY);
  46. CloseGraphics();
  47. }
  48. public double ScreenToDxfX(double x)
  49. {
  50. return (x - XSPACE - dragX) / (rate * Scale);
  51. }
  52. public double ScreenToDxfY(double y)
  53. {
  54. return DxfHeight - (y - YSPACE - dragY) / (rate * Scale);
  55. }
  56. /// <summary>
  57. /// 纠正拖拽后产生的位移偏差
  58. /// </summary>
  59. public void ModifyDrag()
  60. {
  61. var scaleTransform = draw.RenderTransform as ScaleTransform;
  62. if (scaleTransform == null)
  63. {
  64. scaleTransform = new ScaleTransform();
  65. draw.RenderTransform = scaleTransform;
  66. }
  67. double backupDragX = dragX;
  68. double backupDragY = dragY;
  69. dragX = 0;
  70. dragY = 0;
  71. Draw();
  72. dragX = backupDragX * scaleTransform.ScaleY;
  73. dragY = backupDragY * scaleTransform.ScaleY;
  74. DrawMovedImage();
  75. }
  76. }
  77. }