using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace MECF.Framework.UI.Core.DxfScript { /// /// 名称:画布类 /// 用途:Canvas信息初始化 /// public partial class GasDxfDocument { //显示处理 //初始化尺寸和位置 private double canvasWidth, canvasHeight; private double rate;//dxf文件与屏幕画布的尺寸比例 private double DefaultSpace = 5;// 默认边缘空间 private double XSPACE = 10; private double YSPACE = 10; public double Scale = 1; //屏幕显示的缩放比例 public double dragX, dragY; //拖动的偏移量 //初始化画布 private void InitScale() { // 减去两边的空间以确定实际可用画布大小 canvasWidth = draw.Width - 2 * DefaultSpace; canvasHeight = draw.Height - 2 * DefaultSpace; // 检查DXF尺寸是否有效 if (DxfWidth < 1 || DxfHeight < 1) return; // 计算宽度和高度的比例 double widthRate = canvasWidth / DxfWidth; double heightRate = canvasHeight / DxfHeight; // 选择较小的比例以确保DXF文件完整显示在画布上 rate = Math.Min(widthRate, heightRate); // 计算空间以使图形居中 XSPACE = DefaultSpace + (canvasWidth - DxfWidth * rate * Scale) / 2; YSPACE = DefaultSpace + (canvasHeight - DxfHeight * rate * Scale) / 2; } //显示移动结果 public void DrawMovedImage() { CreateGraphics(); draw.LoadDrawing(dragX, dragY); CloseGraphics(); } public double ScreenToDxfX(double x) { return (x - XSPACE - dragX) / (rate * Scale); } public double ScreenToDxfY(double y) { return DxfHeight - (y - YSPACE - dragY) / (rate * Scale); } /// /// 纠正拖拽后产生的位移偏差 /// public void ModifyDrag() { var scaleTransform = draw.RenderTransform as ScaleTransform; if (scaleTransform == null) { scaleTransform = new ScaleTransform(); draw.RenderTransform = scaleTransform; } double backupDragX = dragX; double backupDragY = dragY; dragX = 0; dragY = 0; Draw(); dragX = backupDragX * scaleTransform.ScaleY; dragY = backupDragY * scaleTransform.ScaleY; DrawMovedImage(); } } }