添加逻辑节点支持字符串值

This commit is contained in:
艾竹
2023-04-19 22:26:04 +08:00
parent 451df2d5de
commit f8340b5885
10 changed files with 1141 additions and 51 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -14,27 +14,32 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
if (values == null || values.Length < 1) if (values == null || values.Length < 2)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (values[0] is double && values[1] is ValueTypePoint) if (values[0] is double && values[2] is ValueType)
{ {
double connectorValue = (double)values[0]; double connectorValue = (double)values[0];
ValueTypePoint valueTypePoint = (ValueTypePoint)values[1]; string connectorString = values[1] as string;
ValueType valueTypePoint = (ValueType)values[2];
if (valueTypePoint == ValueTypePoint.Bool) if (valueTypePoint == ValueType.Bool)
{ {
return (connectorValue == 0) ? "F" : "T"; return (connectorValue == 0) ? "F" : "T";
} }
else if (valueTypePoint == ValueTypePoint.Int) else if (valueTypePoint == ValueType.Int)
{ {
return connectorValue.ToString("0"); return connectorValue.ToString("0");
} }
else else if (valueTypePoint == ValueType.Real)
{ {
return connectorValue.ToString("f3"); return connectorValue.ToString("f3");
} }
else
{
return connectorString;
}
} }
return null; return null;
} }

View File

@@ -4,10 +4,11 @@ using System.Text;
namespace AIStudio.Wpf.DiagramDesigner namespace AIStudio.Wpf.DiagramDesigner
{ {
public enum ValueTypePoint public enum ValueType
{ {
Real = 0, Real = 0,
Int = 1, Int = 1,
Bool = 2, Bool = 2,
String = 3,
} }
} }

View File

@@ -20,12 +20,13 @@ namespace AIStudio.Wpf.DiagramDesigner
public LogicalConnectorInfoItem(LogicalConnectorInfo viewmodel) : base(viewmodel) public LogicalConnectorInfoItem(LogicalConnectorInfo viewmodel) : base(viewmodel)
{ {
ValueTypePoint = viewmodel.ValueTypePoint; ValueType = viewmodel.ValueType;
ConnectorValue = viewmodel.ConnectorValue; ConnectorValue = viewmodel.ConnectorValue;
ConnectorString = viewmodel.ConnectorString;
} }
[XmlAttribute] [XmlAttribute]
public ValueTypePoint ValueTypePoint public ValueType ValueType
{ {
get; set; get; set;
} }
@@ -35,6 +36,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; get; set;
} }
[XmlAttribute]
public string ConnectorString
{
get; set;
}
} }

View File

@@ -59,7 +59,8 @@
<TextBlock.Text> <TextBlock.Text>
<MultiBinding Converter="{StaticResource ConectorValueConverter}"> <MultiBinding Converter="{StaticResource ConectorValueConverter}">
<Binding Path="ConnectorValue" /> <Binding Path="ConnectorValue" />
<Binding Path="ValueTypePoint"/> <Binding Path="ConnectorString" />
<Binding Path="ValueType"/>
</MultiBinding> </MultiBinding>
</TextBlock.Text> </TextBlock.Text>
<TextBlock.RenderTransform> <TextBlock.RenderTransform>
@@ -85,7 +86,8 @@
<TextBlock.Text> <TextBlock.Text>
<MultiBinding Converter="{StaticResource ConectorValueConverter}"> <MultiBinding Converter="{StaticResource ConectorValueConverter}">
<Binding Path="ConnectorValue" /> <Binding Path="ConnectorValue" />
<Binding Path="ValueTypePoint"/> <Binding Path="ConnectorString" />
<Binding Path="ValueType"/>
</MultiBinding> </MultiBinding>
</TextBlock.Text> </TextBlock.Text>
<TextBlock.RenderTransform> <TextBlock.RenderTransform>

View File

@@ -8,11 +8,6 @@
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<dd:ColorBrushConverter x:Key="ColorBrushConverter" /> <dd:ColorBrushConverter x:Key="ColorBrushConverter" />
<dd:ConectorOrientationConverter x:Key="ConectorOrientationConverter" />
<dd:ConectorValueConverter x:Key="ConectorValueConverter"/>
<dd:ArrowPathConverter x:Key="ArrowPathConverter"/>
<dd:ArrowSizeConverter x:Key="ArrowSizeConverter"/>
<dd:LineDashConverter x:Key="LineDashConverter"/>
<dd:ClipConverter x:Key="ClipConverter"/> <dd:ClipConverter x:Key="ClipConverter"/>
<DataTemplate DataType="{x:Type dd:DefaultDesignerItemViewModel}"> <DataTemplate DataType="{x:Type dd:DefaultDesignerItemViewModel}">

View File

@@ -15,15 +15,8 @@
<ResourceDictionary Source="/AIStudio.Wpf.DiagramDesigner;component/Themes/Generic.xaml" /> <ResourceDictionary Source="/AIStudio.Wpf.DiagramDesigner;component/Themes/Generic.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<dd:ColorBrushConverter x:Key="ColorBrushConverter" /> <dd:ColorBrushConverter x:Key="ColorBrushConverter" />
<dd:ConectorOrientationConverter x:Key="ConectorOrientationConverter" />
<dd:ConectorValueConverter x:Key="ConectorValueConverter"/>
<dd:ArrowPathConverter x:Key="ArrowPathConverter"/>
<dd:ArrowSizeConverter x:Key="ArrowSizeConverter"/>
<dd:LineDashConverter x:Key="LineDashConverter"/>
<dd:ClipConverter x:Key="ClipConverter"/>
<dd:InvertBoolConverter x:Key="InvertBoolConverter"/> <dd:InvertBoolConverter x:Key="InvertBoolConverter"/>
<dd:ConectorStyleConverter x:Key="ConectorStyleConverter"/>
<dd:NotNullOrEmptyToBoolConverter x:Key="NotNullOrEmptyToBoolConverter"/> <dd:NotNullOrEmptyToBoolConverter x:Key="NotNullOrEmptyToBoolConverter"/>
<!-- ResizeDecorator Default Template --> <!-- ResizeDecorator Default Template -->

View File

@@ -7,14 +7,14 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
public class LogicalConnectorInfo : FullyCreatedConnectorInfo public class LogicalConnectorInfo : FullyCreatedConnectorInfo
{ {
public LogicalConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueTypePoint valueTypePoint = ValueTypePoint.Real) : base(dataItem, orientation, isInnerPoint, isPortless) public LogicalConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueType valueTypePoint = ValueType.Real) : base(dataItem, orientation, isInnerPoint, isPortless)
{ {
this.ValueTypePoint = valueTypePoint; this.ValueType = valueTypePoint;
} }
public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueTypePoint valueTypePoint = ValueTypePoint.Real) : base(root, dataItem, orientation, isInnerPoint, isPortless) public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueType valueTypePoint = ValueType.Real) : base(root, dataItem, orientation, isInnerPoint, isPortless)
{ {
this.ValueTypePoint = valueTypePoint; this.ValueType = valueTypePoint;
} }
public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, SelectableItemBase designer) : base(root, dataItem, designer) public LogicalConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, SelectableItemBase designer) : base(root, dataItem, designer)
@@ -37,7 +37,8 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designerbase is LogicalConnectorInfoItem designer) if (designerbase is LogicalConnectorInfoItem designer)
{ {
ConnectorValue = designer.ConnectorValue; ConnectorValue = designer.ConnectorValue;
ValueTypePoint = designer.ValueTypePoint; ValueType = designer.ValueType;
ConnectorString = designer.ConnectorString;
} }
} }
@@ -54,16 +55,29 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
public ValueTypePoint _valueTypePoint; public string _connectorString;
public ValueTypePoint ValueTypePoint public string ConnectorString
{ {
get get
{ {
return _valueTypePoint; return _connectorString;
} }
set set
{ {
SetProperty(ref _valueTypePoint, value); SetProperty(ref _connectorString, value);
}
}
public ValueType _valueType;
public ValueType ValueType
{
get
{
return _valueType;
}
set
{
SetProperty(ref _valueType, value);
} }
} }
} }

View File

@@ -262,47 +262,47 @@ namespace AIStudio.Wpf.DiagramDesigner
AddConnector(connector); AddConnector(connector);
} }
public List<ValueTypePoint> ValueTypeInput public List<ValueType> ValueTypeInput
{ {
get get
{ {
if (LogicalType == LogicalType.NOT) if (LogicalType == LogicalType.NOT)
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Bool }; return new List<ValueType>() { ValueType.Bool };
} }
else if (LogicalType == LogicalType.AND || LogicalType == LogicalType.OR || LogicalType == LogicalType.XOR else if (LogicalType == LogicalType.AND || LogicalType == LogicalType.OR || LogicalType == LogicalType.XOR
|| LogicalType == LogicalType.SHL || LogicalType == LogicalType.SHR || LogicalType == LogicalType.ROL || LogicalType == LogicalType.ROR) || LogicalType == LogicalType.SHL || LogicalType == LogicalType.SHR || LogicalType == LogicalType.ROL || LogicalType == LogicalType.ROR)
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Int }; return new List<ValueType>() { ValueType.Int };
} }
else if (LogicalType == LogicalType.SEL) else if (LogicalType == LogicalType.SEL)
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Bool, ValueTypePoint.Real, ValueTypePoint.Real }; return new List<ValueType>() { ValueType.Bool, ValueType.Real, ValueType.Real };
} }
else else
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Real }; return new List<ValueType>() { ValueType.Real };
} }
} }
} }
public List<ValueTypePoint> ValueTypeOutput public List<ValueType> ValueTypeOutput
{ {
get get
{ {
if (LogicalType == LogicalType.GT || LogicalType == LogicalType.LT || LogicalType == LogicalType.GE || LogicalType == LogicalType.LE || LogicalType == LogicalType.EQ || LogicalType == LogicalType.NE if (LogicalType == LogicalType.GT || LogicalType == LogicalType.LT || LogicalType == LogicalType.GE || LogicalType == LogicalType.LE || LogicalType == LogicalType.EQ || LogicalType == LogicalType.NE
|| LogicalType == LogicalType.NOT) || LogicalType == LogicalType.NOT)
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Bool }; return new List<ValueType>() { ValueType.Bool };
} }
else if (LogicalType == LogicalType.AND || LogicalType == LogicalType.OR || LogicalType == LogicalType.XOR else if (LogicalType == LogicalType.AND || LogicalType == LogicalType.OR || LogicalType == LogicalType.XOR
|| LogicalType == LogicalType.SHL || LogicalType == LogicalType.SHR || LogicalType == LogicalType.ROL || LogicalType == LogicalType.ROR) || LogicalType == LogicalType.SHL || LogicalType == LogicalType.SHR || LogicalType == LogicalType.ROL || LogicalType == LogicalType.ROR)
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Int }; return new List<ValueType>() { ValueType.Int };
} }
else else
{ {
return new List<ValueTypePoint>() { ValueTypePoint.Real }; return new List<ValueType>() { ValueType.Real };
} }
} }
} }
@@ -332,11 +332,11 @@ namespace AIStudio.Wpf.DiagramDesigner
if (LogicalType == LogicalType.Output) if (LogicalType == LogicalType.Output)
{ {
input.Value.ValueTypePoint = (connector.SourceConnectorInfo as LogicalConnectorInfo).ValueTypePoint; input.Value.ValueType = (connector.SourceConnectorInfo as LogicalConnectorInfo).ValueType;
} }
else if (LogicalType == LogicalType.NOT) else if (LogicalType == LogicalType.NOT)
{ {
input.Value.ValueTypePoint = ((connector.SourceConnectorInfo as LogicalConnectorInfo).ValueTypePoint == ValueTypePoint.Bool) ? ValueTypePoint.Bool : ValueTypePoint.Int; input.Value.ValueType = ((connector.SourceConnectorInfo as LogicalConnectorInfo).ValueType == ValueType.Bool) ? ValueType.Bool : ValueType.Int;
} }
} }
} }
@@ -346,7 +346,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
foreach (var output in Output) foreach (var output in Output)
{ {
if (output.Value.ValueTypePoint == ValueTypePoint.Bool) if (output.Value.ValueType == ValueType.Bool)
{ {
if (output.Value.ConnectorValue == 0) if (output.Value.ConnectorValue == 0)
{ {

View File

@@ -13,12 +13,12 @@ namespace AIStudio.Wpf.Logical.ViewModels
protected IUIVisualizerService visualiserService; protected IUIVisualizerService visualiserService;
public LogicalGateItemViewModel(LogicalType logicalType) : this(null, logicalType) public LogicalGateItemViewModel(LogicalType logicalType) : this(null, logicalType)
{ {
ColorViewModel.FillColor.Color = Colors.Orange;
} }
public LogicalGateItemViewModel(IDiagramViewModel root, LogicalType logicalType) : base(root, logicalType) public LogicalGateItemViewModel(IDiagramViewModel root, LogicalType logicalType) : base(root, logicalType)
{ {
ColorViewModel.FillColor.Color = Colors.Orange;
} }
public LogicalGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) public LogicalGateItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
@@ -46,6 +46,8 @@ namespace AIStudio.Wpf.Logical.ViewModels
protected override void InitNew() protected override void InitNew()
{ {
base.InitNew(); base.InitNew();
ColorViewModel.FillColor.Color = Colors.Orange;
} }
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -392,15 +394,15 @@ namespace AIStudio.Wpf.Logical.ViewModels
{ {
foreach (var output in Output) foreach (var output in Output)
{ {
if (Input[0].ValueTypePoint == ValueTypePoint.Bool) if (Input[0].ValueType == DiagramDesigner.ValueType.Bool)
{ {
output.Value.ConnectorValue = Convert.ToInt32(!Convert.ToBoolean(Input[0].ConnectorValue)); output.Value.ConnectorValue = Convert.ToInt32(!Convert.ToBoolean(Input[0].ConnectorValue));
output.Value.ValueTypePoint = ValueTypePoint.Bool; output.Value.ValueType = DiagramDesigner.ValueType.Bool;
} }
else else
{ {
output.Value.ConnectorValue = ~Convert.ToInt32(Input[0].ConnectorValue); output.Value.ConnectorValue = ~Convert.ToInt32(Input[0].ConnectorValue);
output.Value.ValueTypePoint = ValueTypePoint.Int; output.Value.ValueType = DiagramDesigner.ValueType.Int;
} }
} }
base.CalculateOutput(); base.CalculateOutput();
@@ -1393,7 +1395,7 @@ namespace AIStudio.Wpf.Logical.ViewModels
foreach (var output in Output) foreach (var output in Output)
{ {
output.Value.ConnectorValue = first.ConnectorValue; output.Value.ConnectorValue = first.ConnectorValue;
output.Value.ValueTypePoint = first.ValueTypePoint; output.Value.ValueType = first.ValueType;
} }
base.CalculateOutput(); base.CalculateOutput();
} }