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