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) { } 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.DiagramOption.LayoutOption.PageSizeType = PageSizeType.Custom; DiagramViewModel.DiagramOption.LayoutOption.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 intNode = new IntScriptViewModel(DiagramViewModel) { Name = "Int", Left = 40, Top = 220 }; DiagramViewModel.Add(intNode); 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("青色|梯形", "M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.78 7.77L10 18.78l8.39-8.4a5.5 5.5 0 0 0-7.78-7.77l-.61.61z", 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, intNode.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().OrderBy(p => p.OrderNumber).ToList()) { item.Execute(); } if (readDataTimer != null) readDataTimer.Start(); } public override void Dispose() { base.Dispose(); readDataTimer.Stop(); readDataTimer.Dispose(); readDataTimer = null; foreach (var item in DiagramViewModel.Items.OfType().OrderBy(p => p.OrderNumber).ToList()) { item.Dispose(); } } } }