Files
aistudio-wpf-diagram/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/SharpPath.cs

127 lines
3.8 KiB
C#
Raw Normal View History

2023-04-29 18:36:50 +08:00
using System;
using System.Collections.Generic;
namespace AIStudio.Wpf.DiagramDesigner
{
public class SharpPath : BindableBase, ISharpPath
{
public static SharpPath None { get; } = new SharpPath("", 10, 10, PathStyle.None, SizeStyle.Middle);
public static SharpPath Arrow { get; } = new SharpPath("M 0 -5 10 0 0 5 z", 10, 10, PathStyle.Arrow, SizeStyle.Middle);
public static SharpPath Circle { get; } = new SharpPath("M 0, 0 a 5,5 0 1,0 10,0 a 5,5 0 1,0 -10,0", 10, 10, PathStyle.Circle, SizeStyle.Middle);
public static SharpPath Square { get; } = new SharpPath("M 0 -5 10 -5 10 5 0 5 z", 10, 10, PathStyle.Square, SizeStyle.Middle);
public static readonly Dictionary<PathStyle, string> ArrowDictionary = new Dictionary<PathStyle, string>()
{
{ PathStyle.None, None.Path },
{ PathStyle.Arrow, Arrow.Path },
{ PathStyle.Circle, Circle.Path },
{ PathStyle.Square, Square.Path },
};
public SharpPath()
{
}
public SharpPath(string path, double width, double height, PathStyle arrowPathStyle, SizeStyle arrowSizeStyle)
{
Path = path;
Width = width;
Height = height;
_pathStyle = arrowPathStyle;
_sizeStyle = arrowSizeStyle;
}
private string _path;
[CanDo]
public string Path
{
get
{
return _path;
}
set
{
SetProperty(ref _path, value);
}
}
private double _witdh;
[CanDo]
public double Width
{
get
{
return _witdh;
}
set
{
SetProperty(ref _witdh, value);
}
}
private double _height;
[CanDo]
public double Height
{
get
{
return _height;
}
set
{
SetProperty(ref _height, value);
}
}
private PathStyle _pathStyle = PathStyle.None;
[CanDo]
public PathStyle PathStyle
{
get
{
return _pathStyle;
}
set
{
if (SetProperty(ref _pathStyle, value))
{
if (ArrowDictionary.ContainsKey(_pathStyle))
{
Path = ArrowDictionary[_pathStyle];
}
}
}
}
private SizeStyle _sizeStyle = SizeStyle.Middle;
[CanDo]
public SizeStyle SizeStyle
{
get
{
return _sizeStyle;
}
set
{
if (SetProperty(ref _sizeStyle, value))
{
Width = (double)_sizeStyle;
Height = (double)_sizeStyle;
}
}
}
public static SharpPath NewArrow(double width, double height)
=> new SharpPath(FormattableString.Invariant($"M 0 -{height / 2} {width} 0 0 {height / 2}"), width, height, PathStyle.Arrow, (SizeStyle)width);
public static SharpPath NewCircle(double r)
=> new SharpPath(FormattableString.Invariant($"M 0, 0 a {r},{r} 0 1,0 {r * 2},0 a {r},{r} 0 1,0 -{r * 2},0"), r * 2, r * 2, PathStyle.Circle, (SizeStyle)(r * 2));
public static SharpPath NewRectangle(double width, double height)
=> new SharpPath(FormattableString.Invariant($"M 0 -{height / 2} {width} -{height / 2} {width} {height / 2} 0 {height / 2} z"), width, height, PathStyle.Square, (SizeStyle)width);
public static SharpPath NewSquare(double size) => NewRectangle(size, size);
}
}