mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
127 lines
3.8 KiB
C#
127 lines
3.8 KiB
C#
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);
|
|
}
|
|
}
|