动画demo完成

This commit is contained in:
艾竹
2023-01-27 14:54:03 +08:00
parent 64ea56f01e
commit 72e3efb052
81 changed files with 1211 additions and 503 deletions

View File

@@ -15,24 +15,22 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectionViewModel : SelectableDesignerItemViewModelBase
{
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode, RouterMode routerMode)
{
Root = root;
PathMode = drawMode.ToString();
RouterMode = routerMode.ToString();
Init(sourceConnectorInfo, sinkConnectorInfo);
}
public ConnectionViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode)
{
}
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : base(root)
{
PathMode = drawMode.ToString();
RouterMode = routerMode.ToString();
Init(sourceConnectorInfo, sinkConnectorInfo);
}
public ConnectionViewModel(IDiagramViewModel root, FullyCreatedConnectorInfo sourceConnectorInfo, FullyCreatedConnectorInfo sinkConnectorInfo, ConnectionItem designer) : base(root, designer)
{
PathMode = designer.PathMode;
RouterMode = designer.RouterMode;
Init(sourceConnectorInfo, sinkConnectorInfo);
}
@@ -76,9 +74,9 @@ namespace AIStudio.Wpf.DiagramDesigner
AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel());
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectionItem designer)
{
@@ -297,23 +295,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private LineAnimation _lineAnimation = LineAnimation.None;
[Browsable(true)]
[CanDo]
[StyleName("LineAnimationStyle")]
public LineAnimation LineAnimation
{
get
{
return _lineAnimation;
}
set
{
SetProperty(ref _lineAnimation, value);
}
}
public virtual Dictionary<string, string> PropertiesSetting
{
get
@@ -384,6 +365,11 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public void RaiseFullConnection()
{
RaisePropertyChanged(nameof(IsFullConnection));
}
public bool IsPortless => SourceConnectorInfo?.DataItem?.Connectors?.Count() == 0;
#endregion
@@ -506,6 +492,15 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
}
else if (sender is ColorViewModel)
{
switch (e.PropertyName)
{
case nameof(ColorViewModel.LineAnimation):
RaisePropertyChanged(nameof(PathGeneratorResult));
break;
}
}
}
private void UpdateArea()

View File

@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public abstract class ConnectorInfoBase : SelectableViewModelBase
{
public ConnectorInfoBase(ConnectorOrientation orientation)
public ConnectorInfoBase(ConnectorOrientation orientation) : this(null, orientation)
{
}
public ConnectorInfoBase(IDiagramViewModel root, ConnectorOrientation orientation) : base(root)
{
this.Orientation = orientation;
}
@@ -31,9 +36,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorInfoItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ColorViewModel = new ColorViewModel()
{
@@ -42,9 +47,9 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorInfoItemBase designer)
{

View File

@@ -8,12 +8,16 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorLabelModel : ConnectorPointModel, ISelectable
{
public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null)
public ConnectorLabelModel(ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : this(null, connector, content, distance, offset)
{
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string content, double? distance = null, PointBase? offset = null) : base(root)
{
Parent = connector;
Text = content;
Distance = distance;
Offset = offset ?? new PointBase();
Offset = offset ?? new PointBase();
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
@@ -31,9 +35,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorLabelItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ConnectorWidth = 30;
ConnectorHeight = 30;
@@ -41,9 +45,9 @@ namespace AIStudio.Wpf.DiagramDesigner
DeleteLabelCommand = new SimpleCommand(Command_Enable, DeleteLabel);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorLabelItem designer)
{

View File

@@ -11,9 +11,24 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorPointModel : SelectableViewModelBase
{
public ConnectorPointModel()
public ConnectorPointModel() : this(null)
{
}
public ConnectorPointModel(IDiagramViewModel root) : base(root)
{
}
public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public ConnectorPointModel(PointBase point) : this()
@@ -28,24 +43,14 @@ namespace AIStudio.Wpf.DiagramDesigner
Y = y;
}
public ConnectorPointModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
}
public ConnectorPointModel(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
}
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorPointItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
ColorViewModel = new ColorViewModel()
{
LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) },
@@ -53,9 +58,9 @@ namespace AIStudio.Wpf.DiagramDesigner
};
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorPointItem designer)
{
@@ -78,7 +83,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
if(SetProperty(ref _x, value))
if (SetProperty(ref _x, value))
{
RaisePropertyChanged(nameof(Left));
}
@@ -138,15 +143,27 @@ namespace AIStudio.Wpf.DiagramDesigner
private double connectorWidth = 8;
public double ConnectorWidth
{
get { return connectorWidth; }
set { connectorWidth = value; }
get
{
return connectorWidth;
}
set
{
connectorWidth = value;
}
}
private double connectorHeight = 8;
public double ConnectorHeight
{
get { return connectorHeight; }
set { connectorHeight = value; }
get
{
return connectorHeight;
}
set
{
connectorHeight = value;
}
}
public static ConnectorPointModel operator -(ConnectorPointModel a, ConnectorPointModel b)

View File

@@ -6,11 +6,15 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class ConnectorVertexModel : ConnectorPointModel
{
public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null)
public ConnectorVertexModel(ConnectionViewModel connector, PointBase? position = null) : this(null, connector, position)
{
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, PointBase? position = null) : base(root)
{
Parent = connector;
X = position?.X ?? 0;
Y = position?.Y ?? 0;
Y = position?.Y ?? 0;
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, SelectableItemBase designer) : base(root, designer)
@@ -28,16 +32,16 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorVertexItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
DeleteVertexCommand = new SimpleCommand(Command_Enable, DeleteVertex);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ConnectorVertexItem designer)
{

View File

@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public class FullyCreatedConnectorInfo : ConnectorInfoBase
{
public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(orientation)
: this(null, dataItem, orientation, isInnerPoint, valueTypePoint)
{
}
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
: base(root, orientation)
{
this.Parent = dataItem;
this.IsInnerPoint = isInnerPoint;
@@ -45,9 +50,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new FullyCreatedConnectorInfoItem(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
menuOptions = new List<CinchMenuItem>();
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
@@ -55,9 +60,9 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is FullyCreatedConnectorInfoItem designer)
{

View File

@@ -9,6 +9,18 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class PartCreatedConnectorInfo : ConnectorInfoBase
{
public PartCreatedConnectorInfo(double X, double Y) : this(null, X, Y)
{
}
public PartCreatedConnectorInfo(IDiagramViewModel root, double X, double Y) : base(root, ConnectorOrientation.None)
{
this.position = new PointBase(X, Y);
}
private PointBase position;
public override PointBase Position
{
@@ -18,9 +30,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public PartCreatedConnectorInfo(double X, double Y) : base(ConnectorOrientation.None)
{
this.position = new PointBase(X, Y);
}
}
}

View File

@@ -13,7 +13,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public abstract class DesignerItemViewModelBase : SelectableDesignerItemViewModelBase
{
public DesignerItemViewModelBase() : base()
public DesignerItemViewModelBase() : this(null)
{
}
public DesignerItemViewModelBase(IDiagramViewModel root) : base(root)
{
ShapeDefiner = Shapes.Rectangle;
}
@@ -33,16 +38,16 @@ namespace AIStudio.Wpf.DiagramDesigner
return new DesignerItemBase(this);
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
InitConnector();
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DesignerItemBase designer)
{

View File

@@ -9,14 +9,19 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class GroupDesignerItemViewModel : DesignerItemViewModelBase
{
public GroupDesignerItemViewModel() : base()
public GroupDesignerItemViewModel() : this(null)
{
}
public GroupDesignerItemViewModel(IDiagramViewModel root) : base(root)
{
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
this.IsHitTestVisible = false;
}

View File

@@ -22,8 +22,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public abstract class SelectableDesignerItemViewModelBase : SelectableViewModelBase, ISelectItems, ISelectable, IGroupable
{
public SelectableDesignerItemViewModelBase() : this(null)
{
public SelectableDesignerItemViewModelBase():base()
}
public SelectableDesignerItemViewModelBase(IDiagramViewModel root) :base(root)
{
}
@@ -38,17 +42,17 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void Init()
protected override void Init(IDiagramViewModel root)
{
base.Init();
base.Init(root);
SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand);
EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand);
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
base.LoadDesignerItemViewModel(designerbase);
}
public virtual bool InitData()

View File

@@ -20,34 +20,38 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public SelectableViewModelBase()
public SelectableViewModelBase() : this(null)
{
Init();
}
public SelectableViewModelBase(IDiagramViewModel root)
{
Init(root);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer)
{
Init();
LoadDesignerItemViewModel(root, designer);
Init(root);
LoadDesignerItemViewModel(designer);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType)
{
Init();
Init(root);
SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType);
LoadDesignerItemViewModel(root, obj);
LoadDesignerItemViewModel(obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
}
public virtual SerializableItem ToSerializableItem(string serializableType)
{
var obj = GetSerializableObject();
if (obj != null)
{
return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
return new SerializableItem() { ModelTypeName = this.GetType().FullName, SerializableTypeName = obj.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
}
else
{
@@ -60,8 +64,10 @@ namespace AIStudio.Wpf.DiagramDesigner
return null;
}
protected virtual void Init()
protected virtual void Init(IDiagramViewModel root)
{
Root = root;
if (Root?.ColorViewModel != null)
{
this.ColorViewModel = CopyHelper.Mapper(Root.ColorViewModel);
@@ -92,10 +98,8 @@ namespace AIStudio.Wpf.DiagramDesigner
LockObjectViewModel = new LockObjectViewModel();
}
protected virtual void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
this.Root = root;
this.Id = designerbase.Id;
this.ParentId = designerbase.ParentId;
this.IsGroup = designerbase.IsGroup;
@@ -211,7 +215,7 @@ namespace AIStudio.Wpf.DiagramDesigner
return _isHitTestVisible;
}
set
{
{
if (SetProperty(ref _isHitTestVisible, value))
{
RaisePropertyChanged("IsReadOnly");