diff --git a/AIStudio.Wpf.DiagramDesigner/Enums/ValueTypePoint.cs b/AIStudio.Wpf.DiagramDesigner/Enums/ValueTypePoint.cs index c2dcfba..ec68c36 100644 --- a/AIStudio.Wpf.DiagramDesigner/Enums/ValueTypePoint.cs +++ b/AIStudio.Wpf.DiagramDesigner/Enums/ValueTypePoint.cs @@ -6,9 +6,11 @@ namespace AIStudio.Wpf.DiagramDesigner { public enum ConnectorValueType { + //前面分给值类型,值类型之间可以兼容,直接转换 Real = 0, Int = 1, Bool = 2, - String = 3, + ValueType = 10, + String = 11, } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs index 9b92bbb..f739255 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs @@ -15,7 +15,7 @@ namespace AIStudio.Wpf.DiagramDesigner public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ConnectorValueType valueTypePoint = ConnectorValueType.Real) : base(root, dataItem, orientation, isInnerPoint, isPortless) { this.ConnectorValueType = valueTypePoint; - } + } public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, SelectableItemBase designer) : base(root, dataItem, designer) { @@ -42,7 +42,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public double _connectorValue; + private double _connectorValue; public double ConnectorValue { get @@ -55,7 +55,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public string _connectorString; + private string _connectorString; public string ConnectorString { get @@ -68,7 +68,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public ConnectorValueType _connectorValueType; + private ConnectorValueType _connectorValueType; public ConnectorValueType ConnectorValueType { get @@ -81,9 +81,42 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public bool IsError + public bool ConnectorError { - get;set; + get; set; + } + + public bool ValueError + { + get; set; + } + + public string ErrorMessage + { + get; set; + } + + public override bool CanAttachTo(FullyCreatedConnectorInfo port) + { + if (!base.CanAttachTo(port)) + { + return false; + } + + if (port is LogicalConnectorInfo logical) + { + if (logical.ConnectorValueType == ConnectorValueType.String && this.ConnectorValueType == logical.ConnectorValueType) + { + return true; + } + else if (logical.ConnectorValueType <= ConnectorValueType.ValueType && this.ConnectorValueType <= ConnectorValueType.ValueType) + { + return true; + } + } + + return false; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs index 989be5a..eece016 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -280,20 +281,29 @@ namespace AIStudio.Wpf.DiagramDesigner if (connector.SourceConnectorInfo.DataItem is LogicalGateItemViewModelBase) { - input.Value.ConnectorValue = (connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorValue; - input.Value.ConnectorString = (connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorString; + var output = (connector.SourceConnectorInfo as LogicalConnectorInfo); + connector.ColorViewModel.LineColor.Color = output.ColorViewModel.FillColor.Color; + connector.ColorViewModel.FillColor.Color = output.ColorViewModel.FillColor.Color; - input.Value.ColorViewModel.FillColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color; - connector.ColorViewModel.LineColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color; - connector.ColorViewModel.FillColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color; - - if (LogicalType == LogicalType.Output) + if (input.Value.CanAttachTo(output)) { - input.Value.ConnectorValueType = (connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorValueType; + input.Value.ConnectorValue = output.ConnectorValue; + input.Value.ConnectorString = output.ConnectorString; + input.Value.ColorViewModel.FillColor.Color = connector.SourceConnectorInfo.ColorViewModel.FillColor.Color; + if (LogicalType == LogicalType.Output) + { + input.Value.ConnectorValueType = (connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorValueType; + } + else if (LogicalType == LogicalType.NOT) + { + input.Value.ConnectorValueType = ((connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorValueType == ConnectorValueType.Bool) ? ConnectorValueType.Bool : ConnectorValueType.Int; + } } - else if (LogicalType == LogicalType.NOT) + else { - input.Value.ConnectorValueType = ((connector.SourceConnectorInfo as LogicalConnectorInfo).ConnectorValueType == ConnectorValueType.Bool) ? ConnectorValueType.Bool : ConnectorValueType.Int; + input.Value.ConnectorError = true; + input.Value.ErrorMessage = "连接类型不匹配"; + input.Value.ColorViewModel.FillColor.Color = Colors.Orange; } } } @@ -303,7 +313,7 @@ namespace AIStudio.Wpf.DiagramDesigner { foreach (var output in Output) { - if (output.Value.IsError) + if (output.Value.ValueError) { output.Value.ColorViewModel.FillColor.Color = Colors.Orange; }