mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-11 20:19:26 +08:00
79 lines
4.3 KiB
C#
79 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Data;
|
|
using System.Windows.Media;
|
|
|
|
namespace AIStudio.Wpf.DiagramDesigner
|
|
{
|
|
public class ClipConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
string para = parameter?.ToString();
|
|
try
|
|
{
|
|
if (value is ImageItemViewModel imageItemViewModel)
|
|
{
|
|
double xradio = imageItemViewModel.ItemWidth / imageItemViewModel.ImageWidth;
|
|
double yradio = imageItemViewModel.ItemHeight / imageItemViewModel.ImageHeight;
|
|
if (para == "Clip")
|
|
{
|
|
if (imageItemViewModel.ClipMode == ClipMode.RectangleGeometry)
|
|
{
|
|
RectangleGeometry rectangle = new RectangleGeometry();
|
|
if (imageItemViewModel.ResizeMode == false)
|
|
{
|
|
rectangle.Rect = new System.Windows.Rect(imageItemViewModel.ResizeMargin.Left * xradio, imageItemViewModel.ResizeMargin.Top * yradio, imageItemViewModel.ItemWidth, imageItemViewModel.ItemHeight);
|
|
}
|
|
else
|
|
{
|
|
rectangle.Rect = new System.Windows.Rect(imageItemViewModel.ResizeMargin.Left, imageItemViewModel.ResizeMargin.Top , imageItemViewModel.ItemWidth - (imageItemViewModel.ResizeMargin.Left + imageItemViewModel.ResizeMargin.Right), imageItemViewModel.ItemHeight - (imageItemViewModel.ResizeMargin.Top + imageItemViewModel.ResizeMargin.Bottom));
|
|
}
|
|
return rectangle;
|
|
}
|
|
else if (imageItemViewModel.ClipMode == ClipMode.EllipseGeometry)
|
|
{
|
|
EllipseGeometry ellipse = new EllipseGeometry();
|
|
if (imageItemViewModel.ResizeMode == false)
|
|
{
|
|
ellipse.Center = new Point(imageItemViewModel.ResizeMargin.Left * xradio + imageItemViewModel.ItemWidth / 2, imageItemViewModel.ResizeMargin.Top * yradio + imageItemViewModel.ItemHeight / 2);
|
|
ellipse.RadiusX = imageItemViewModel.ItemWidth / 2;
|
|
ellipse.RadiusY = imageItemViewModel.ItemHeight / 2;
|
|
}
|
|
else
|
|
{
|
|
ellipse.Center = new Point(imageItemViewModel.ResizeMargin.Left + (imageItemViewModel.ItemWidth - imageItemViewModel.ResizeMargin.Left - imageItemViewModel.ResizeMargin.Right) / 2, imageItemViewModel.ResizeMargin.Top + (imageItemViewModel.ItemHeight - imageItemViewModel.ResizeMargin.Top - imageItemViewModel.ResizeMargin.Bottom)/ 2);
|
|
ellipse.RadiusX = (imageItemViewModel.ItemWidth - imageItemViewModel.ResizeMargin.Left - imageItemViewModel.ResizeMargin.Right) / 2;
|
|
ellipse.RadiusY = (imageItemViewModel.ItemHeight - imageItemViewModel.ResizeMargin.Top - imageItemViewModel.ResizeMargin.Bottom) / 2;
|
|
}
|
|
return ellipse;
|
|
}
|
|
}
|
|
else if (para == "Margin")
|
|
{
|
|
if (imageItemViewModel.ResizeMode == false)
|
|
{
|
|
return new Thickness(-imageItemViewModel.ResizeMargin.Left * xradio, -imageItemViewModel.ResizeMargin.Top * yradio, -imageItemViewModel.ResizeMargin.Right * xradio, -imageItemViewModel.ResizeMargin.Bottom * yradio);
|
|
}
|
|
else
|
|
{
|
|
return new Thickness();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|