Files
aistudio-wpf-diagram/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs

180 lines
8.1 KiB
C#
Raw Normal View History

using System;
2021-07-23 09:42:22 +08:00
using System.Linq;
using System.Windows;
using System.Windows.Media;
using AIStudio.Wpf.DiagramApp.Models;
2022-10-28 22:45:39 +08:00
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.Logical;
using AIStudio.Wpf.Logical.ViewModels;
2021-07-23 09:42:22 +08:00
namespace AIStudio.Wpf.DiagramApp.ViewModels
2021-07-23 09:42:22 +08:00
{
2023-02-12 21:30:16 +08:00
public class LogicalViewModel : PageViewModel
2021-07-23 09:42:22 +08:00
{
2021-07-29 13:55:18 +08:00
public LogicalViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType)
2021-07-23 09:42:22 +08:00
{
2023-04-04 22:42:09 +08:00
2021-07-23 09:42:22 +08:00
}
2021-08-03 18:19:47 +08:00
public LogicalViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
2023-01-14 21:52:05 +08:00
_service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth;
}
2021-07-23 09:42:22 +08:00
protected override void InitDiagramViewModel()
{
base.InitDiagramViewModel();
DiagramViewModel.DiagramOption.LayoutOption.ShowGrid = true;
DiagramViewModel.DiagramOption.LayoutOption.GridCellSize = new Size(150, 100);
DiagramViewModel.DiagramOption.LayoutOption.PageSizeOrientation = PageSizeOrientation.Horizontal;
DiagramViewModel.DiagramOption.LayoutOption.CellHorizontalAlignment = CellHorizontalAlignment.Left;
DiagramViewModel.DiagramOption.LayoutOption.CellVerticalAlignment = CellVerticalAlignment.None;
2021-07-23 09:42:22 +08:00
DiagramViewModel.Items.CollectionChanged += Items_CollectionChanged;
2023-01-14 21:52:05 +08:00
_service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth;
2021-07-23 09:42:22 +08:00
}
protected override void Init(bool initNew)
2021-07-23 09:42:22 +08:00
{
base.Init(initNew);
2021-07-23 09:42:22 +08:00
TimerDesignerItemViewModel timer = new TimerDesignerItemViewModel() { Left = 28, Top = 28 };
2023-02-04 16:38:56 +08:00
timer.Value = 1;
DiagramViewModel.Add(timer);
2021-07-23 09:42:22 +08:00
InputItemViewModel in1 = new InputItemViewModel() { Left = 28, Top = 110 };
2021-07-23 09:42:22 +08:00
in1.LinkPoint = LogicalService.LinkPoint[0];
DiagramViewModel.Add(in1);
2021-07-23 09:42:22 +08:00
InputItemViewModel in2 = new InputItemViewModel() { Left = 28, Top = 300 };
2021-07-23 09:42:22 +08:00
in2.LinkPoint = LogicalService.LinkPoint[1];
DiagramViewModel.Add(in2);
2021-07-23 09:42:22 +08:00
AddGateItemViewModel item1 = new AddGateItemViewModel() { Left = 178, Top = 160 };
DiagramViewModel.Add(item1);
2021-07-23 09:42:22 +08:00
ConstantDesignerItemViewModel constant = new ConstantDesignerItemViewModel() { Left = 178, Top = 300, Value = 10 };
DiagramViewModel.Add(constant);
2021-07-23 09:42:22 +08:00
GTGateItemViewModel gTGate = new GTGateItemViewModel() { Left = 328, Top = 110 };
DiagramViewModel.Add(gTGate);
2021-07-23 09:42:22 +08:00
InputItemViewModel in3 = new InputItemViewModel() { Left = 328, Top = 210 };
2021-07-23 09:42:22 +08:00
in3.LinkPoint = LogicalService.LinkPoint[2];
DiagramViewModel.Add(in3);
2021-07-23 09:42:22 +08:00
InputItemViewModel in4 = new InputItemViewModel() { Left = 328, Top = 300 };
2021-07-23 09:42:22 +08:00
in4.LinkPoint = LogicalService.LinkPoint[3];
DiagramViewModel.Add(in4);
2021-07-23 09:42:22 +08:00
SELGateItemViewModel sELGate = new SELGateItemViewModel() { Left = 478, Top = 160 };
DiagramViewModel.Add(sELGate);
2021-07-23 09:42:22 +08:00
OutputItemViewModel out1 = new OutputItemViewModel() { Left = 628, Top = 110 };
2021-07-23 09:42:22 +08:00
out1.LinkPoint = LogicalService.LinkPoint[4];
DiagramViewModel.Add(out1);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector1 = new ConnectionViewModel(in1.Output[0], item1.Input[0], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector1.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector1.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector1);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector2 = new ConnectionViewModel(in2.Output[0], item1.Input[1], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector2.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector2.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector2);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector3 = new ConnectionViewModel(item1.Output[0], gTGate.Input[0], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector3.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector3.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector3);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector4 = new ConnectionViewModel(constant.Output[0], gTGate.Input[1], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector4.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector4.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector4);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector5 = new ConnectionViewModel(gTGate.Output[0], sELGate.Input[0], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector5.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector5.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector5);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector6 = new ConnectionViewModel(in3.Output[0], sELGate.Input[1], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector6.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector6.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector6);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector7 = new ConnectionViewModel(in4.Output[0], sELGate.Input[2], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector7.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector7.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector7);
2021-07-23 09:42:22 +08:00
2023-01-24 17:53:04 +08:00
ConnectionViewModel connector8 = new ConnectionViewModel(sELGate.Output[0], out1.Input[0], _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode);
connector8.ColorViewModel.FillColor.Color = Colors.Green;
2023-04-29 18:36:50 +08:00
connector8.AnimationViewModel.Animation = LineAnimation.PathAnimation;
DiagramViewModel.Add(connector8);
2021-07-23 09:42:22 +08:00
}
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (var item in e.OldItems.OfType<TimerDesignerItemViewModel>())
{
item.Do -= Do;
}
}
if (e.NewItems != null)
{
foreach (var item in e.NewItems.OfType<TimerDesignerItemViewModel>())
{
item.Do += Do;
}
}
RaisePropertyChanged("Items");
}
2023-01-24 09:02:40 +08:00
protected override bool AddVerify(SelectableDesignerItemViewModelBase arg)
2021-07-23 09:42:22 +08:00
{
if (base.AddVerify(arg) == false)
return false;
2023-01-24 17:53:04 +08:00
if (arg is ConnectionViewModel connector)
2021-07-23 09:42:22 +08:00
{
2023-01-08 09:22:37 +08:00
if (connector.IsFullConnection)
2021-07-23 09:42:22 +08:00
{
2023-01-24 17:53:04 +08:00
if (DiagramViewModel.Items.OfType<ConnectionViewModel>().Any(p => p.SinkConnectorInfo == connector.SinkConnectorInfoFully))
2021-07-23 09:42:22 +08:00
{
return false;
}
}
}
2021-08-02 18:08:43 +08:00
if (arg is TimerDesignerItemViewModel)
{
if (DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().Any(p => p.LogicalType == LogicalType.Time))
{
return false;
}
}
2021-07-23 09:42:22 +08:00
return true;
}
private void Do()
{
Random rd = new Random();
foreach (var link in LogicalService.LinkPoint)
{
link.Value = rd.NextDouble() * 10;
}
2021-07-23 09:42:22 +08:00
foreach (var item in DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().OrderBy(p => p.OrderNumber))
{
2023-04-16 10:10:12 +08:00
item.Execute();
2021-07-23 09:42:22 +08:00
}
}
}
}