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();
}
}
}