mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
211 lines
12 KiB
C#
211 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Timers;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
using AIStudio.Wpf.DiagramApp.Models;
|
|
using AIStudio.Wpf.DiagramDesigner;
|
|
using AIStudio.Wpf.Script.Core.Helpers;
|
|
using AIStudio.Wpf.Script.Core.Models;
|
|
using AIStudio.Wpf.Script.Core.ViewModels;
|
|
using AIStudio.Wpf.Script.ViewModels;
|
|
using AIStudio.Wpf.SFC;
|
|
using Microsoft.CodeAnalysis;
|
|
|
|
namespace AIStudio.Wpf.DiagramApp.ViewModels
|
|
{
|
|
public class ScriptViewModel : PageViewModel
|
|
{
|
|
static ScriptViewModel()
|
|
{
|
|
TextEditorThemeHelper.SetCurrentTheme("VS2019_Dark");
|
|
}
|
|
|
|
public ScriptViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType)
|
|
{
|
|
Init(true);
|
|
}
|
|
|
|
public ScriptViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
|
|
{
|
|
if (DiagramViewModel != null)
|
|
{
|
|
|
|
}
|
|
|
|
readDataTimer.Elapsed += timeCycle;
|
|
readDataTimer.Interval = 1000;
|
|
readDataTimer.AutoReset = false;
|
|
readDataTimer.Start();
|
|
}
|
|
|
|
protected override void InitDiagramViewModel()
|
|
{
|
|
base.InitDiagramViewModel();
|
|
|
|
DiagramViewModel.PageSizeType = PageSizeType.Custom;
|
|
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
|
|
DiagramViewModel.ColorViewModel = new ColorViewModel();
|
|
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
|
|
}
|
|
|
|
private System.Timers.Timer readDataTimer = new System.Timers.Timer();
|
|
protected override void Init(bool initNew)
|
|
{
|
|
base.Init(initNew);
|
|
|
|
ConsoleLogViewModel logNode = new ConsoleLogViewModel(DiagramViewModel) { Name = "Log", Left = 150, Top = 420 };
|
|
DiagramViewModel.Add(logNode);
|
|
|
|
IntScriptViewModel intLog = new IntScriptViewModel(DiagramViewModel) { Name = "Int", Left = 40, Top = 220 };
|
|
DiagramViewModel.Add(intLog);
|
|
|
|
ColorBoxFactoryScriptViewModel factoryNode = new ColorBoxFactoryScriptViewModel(DiagramViewModel) { Name = "ColorBoxFactory", Left = 150, Top = 150 };
|
|
DiagramViewModel.Add(factoryNode);
|
|
|
|
BoolScriptViewModel boolNode = new BoolScriptViewModel(DiagramViewModel) { Name = "Bool", TrueString = "形状", FalseString = "颜色", Left = 410, Top = 190 };
|
|
DiagramViewModel.Add(boolNode);
|
|
|
|
ColorBoxSwitchScriptViewModel switchNode = new ColorBoxSwitchScriptViewModel(DiagramViewModel) { Name = "ColorBoxSwitch", Left = 500, Top = 150 };
|
|
DiagramViewModel.Add(switchNode);
|
|
|
|
TextScriptViewModel textNode = new TextScriptViewModel(DiagramViewModel) { Name = "Text", Text = "AIStudio Diagram", Left = 150, Top = 50, ItemWidth = 450, ItemHeight = 60 };
|
|
DiagramViewModel.Add(textNode);
|
|
|
|
ColorBoxIfScriptViewModel ifNode = new ColorBoxIfScriptViewModel(DiagramViewModel) { Name = "ColorBoxIf", Left = 660, Top = 60 };
|
|
DiagramViewModel.Add(ifNode);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode1_1 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector1_1", Left = 790, Top = 40 };
|
|
collectorNode1_1.Tag = new ColorBoxModel("红色|圆形", "M 10,20 A 20,20 0 1 1 50,20 A 20,20 0 1 1 10,20", Colors.Red);
|
|
DiagramViewModel.Add(collectorNode1_1);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode1_2 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector1_2", Left = 790, Top = 120 };
|
|
collectorNode1_2.Tag = new ColorBoxModel("红色|圆形", "M 10,20 A 20,20 0 1 1 50,20 A 20,20 0 1 1 10,20", Colors.Red);
|
|
DiagramViewModel.Add(collectorNode1_2);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode2 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector2", Left = 790, Top = 220 };
|
|
collectorNode2.Tag = new ColorBoxModel("橙色|三角形", "M1,21H23L12,2", Colors.Orange);
|
|
DiagramViewModel.Add(collectorNode2);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode3 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector3", Left = 790, Top = 305 };
|
|
collectorNode3.Tag = new ColorBoxModel("黄色|方形", "M3,3V21H21V3", Colors.Yellow);
|
|
DiagramViewModel.Add(collectorNode3);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode4 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector4", Left = 790, Top = 390 };
|
|
collectorNode4.Tag = new ColorBoxModel("绿色|菱形", "M 0,20 L 30 0 L 60,20 L 30,40 Z", Colors.Green);
|
|
DiagramViewModel.Add(collectorNode4);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode5 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector5", Left = 790, Top = 475 };
|
|
collectorNode5.Tag = new ColorBoxModel("青色|梯形", "M 0 0 H 60 L 50 40 H 10 Z", Colors.Cyan);
|
|
DiagramViewModel.Add(collectorNode5);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode6 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector6", Left = 790, Top = 560 };
|
|
collectorNode6.Tag = new ColorBoxModel("蓝色|五角星", "M 9,2 11,7 17,7 12,10 14,15 9,12 4,15 6,10 1,7 7,7 Z", Colors.Blue);
|
|
DiagramViewModel.Add(collectorNode6);
|
|
|
|
ColorBoxCollectorScriptViewModel collectorNode7 = new ColorBoxCollectorScriptViewModel(DiagramViewModel) { Name = "Collector7", Left = 790, Top = 645 };
|
|
collectorNode7.Tag = new ColorBoxModel("紫色|六边形", "M 0,20 L 10,0 H 50 L 60,20 L 50,40 H10 Z", Colors.Purple);
|
|
DiagramViewModel.Add(collectorNode7);
|
|
|
|
ConnectionViewModel int_factoryConnector = new ConnectionViewModel(DiagramViewModel, intLog.Output[0], factoryNode.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
DiagramViewModel.Add(int_factoryConnector);
|
|
|
|
ConnectionViewModel bool_switchConnector = new ConnectionViewModel(DiagramViewModel, boolNode.Output[0], switchNode.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
DiagramViewModel.Add(bool_switchConnector);
|
|
|
|
ConnectionViewModel factory_switchConnector = new ConnectionViewModel(DiagramViewModel, factoryNode.Output[0], switchNode.Input[1], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
factory_switchConnector.AnimationViewModel.Repeat = false;
|
|
factory_switchConnector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(factory_switchConnector);
|
|
|
|
ConnectionViewModel switch_textConnector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[0], textNode.Input[0], DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
|
|
switch_textConnector.SetPathGeneratorParameter(null, null, 5, 10);
|
|
DiagramViewModel.Add(switch_textConnector);
|
|
|
|
ConnectionViewModel switch_ifConnector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[1], ifNode.Input[2], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_ifConnector.AnimationViewModel.Repeat = false;
|
|
switch_ifConnector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_ifConnector);
|
|
|
|
ConnectionViewModel if_collector1_1Connector = new ConnectionViewModel(DiagramViewModel, ifNode.Output[0], collectorNode1_1.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
if_collector1_1Connector.AnimationViewModel.Repeat = false;
|
|
if_collector1_1Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(if_collector1_1Connector);
|
|
|
|
ConnectionViewModel if_collector1_2Connector = new ConnectionViewModel(DiagramViewModel, ifNode.Output[1], collectorNode1_2.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
if_collector1_2Connector.AnimationViewModel.Repeat = false;
|
|
if_collector1_2Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(if_collector1_2Connector);
|
|
|
|
ConnectionViewModel collector1_1_if_Connector = new ConnectionViewModel(DiagramViewModel, collectorNode1_1.Output[0], ifNode.Input[0], DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
|
|
collector1_1_if_Connector.SetPathGeneratorParameter(null, null, 5, 30);
|
|
DiagramViewModel.Add(collector1_1_if_Connector);
|
|
|
|
ConnectionViewModel collector1_2_if_Connector = new ConnectionViewModel(DiagramViewModel, collectorNode1_2.Output[0], ifNode.Input[1], DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
|
|
collector1_2_if_Connector.SetPathGeneratorParameter(null, null, 5, 10);
|
|
DiagramViewModel.Add(collector1_2_if_Connector);
|
|
|
|
ConnectionViewModel switch_collector2Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[2], collectorNode2.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector2Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector2Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector2Connector);
|
|
|
|
ConnectionViewModel switch_collector3Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[3], collectorNode3.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector3Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector3Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector3Connector);
|
|
|
|
ConnectionViewModel switch_collector4Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[4], collectorNode4.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector4Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector4Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector4Connector);
|
|
|
|
ConnectionViewModel switch_collector5Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[5], collectorNode5.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector5Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector5Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector5Connector);
|
|
|
|
ConnectionViewModel switch_collector6Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[6], collectorNode6.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector6Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector6Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector6Connector);
|
|
|
|
ConnectionViewModel switch_collector7Connector = new ConnectionViewModel(DiagramViewModel, switchNode.Output[7], collectorNode7.Input[0], DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
|
switch_collector7Connector.AnimationViewModel.Repeat = false;
|
|
switch_collector7Connector.AnimationViewModel.Animation = LineAnimation.PathAnimation;
|
|
DiagramViewModel.Add(switch_collector7Connector);
|
|
|
|
readDataTimer.Elapsed += timeCycle;
|
|
readDataTimer.Interval = 1000;
|
|
readDataTimer.AutoReset = false;
|
|
readDataTimer.Start();
|
|
}
|
|
|
|
private void timeCycle(object sender, ElapsedEventArgs e)
|
|
{
|
|
foreach (var item in DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().OrderBy(p => p.OrderNumber).ToList())
|
|
{
|
|
item.Execute();
|
|
}
|
|
readDataTimer.Start();
|
|
}
|
|
|
|
public override void Dispose()
|
|
{
|
|
base.Dispose();
|
|
|
|
readDataTimer.Stop();
|
|
readDataTimer.Dispose();
|
|
|
|
foreach (var item in DiagramViewModel.Items.OfType<LogicalGateItemViewModelBase>().OrderBy(p => p.OrderNumber).ToList())
|
|
{
|
|
item.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|