diff --git a/AIStudio.Wpf.Diagram.sln b/AIStudio.Wpf.Diagram.sln
index 754b77b..09fd910 100644
--- a/AIStudio.Wpf.Diagram.sln
+++ b/AIStudio.Wpf.Diagram.sln
@@ -35,6 +35,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.DiagramDesigne
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Script", "Extensions\AIStudio.Wpf.Script\AIStudio.Wpf.Script.csproj", "{27A4C86D-3792-4D14-BAEE-3B103A709872}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AIStudio.Wpf.Block", "Extensions\AIStudio.Wpf.Block\AIStudio.Wpf.Block.csproj", "{C7031E27-57A9-498E-95EE-9C3E7DCCA642}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -81,6 +83,10 @@ Global
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27A4C86D-3792-4D14-BAEE-3B103A709872}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C7031E27-57A9-498E-95EE-9C3E7DCCA642}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C7031E27-57A9-498E-95EE-9C3E7DCCA642}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C7031E27-57A9-498E-95EE-9C3E7DCCA642}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C7031E27-57A9-498E-95EE-9C3E7DCCA642}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -92,6 +98,7 @@ Global
{85C437B9-16D2-4076-ABCD-52029AC232FC} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
{FCFC5ABF-8459-4B45-ABA0-9B820C7ED5C6} = {62DC8608-D98F-47BB-9F19-ABB0C60B72FF}
{27A4C86D-3792-4D14-BAEE-3B103A709872} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
+ {C7031E27-57A9-498E-95EE-9C3E7DCCA642} = {4959F170-02FB-4B7F-8F53-93DAF22713F9}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D30FC641-F06C-4E35-AEA5-48A9B6E59CE0}
diff --git a/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj b/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj
index d7243c8..cdd960b 100644
--- a/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj
+++ b/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj
@@ -129,6 +129,7 @@
+
@@ -148,15 +149,27 @@
-
+
- ..\Extensions\AIStudio.Wpf.Script\Dlls\netcoreapp3.1\AIStudio.Wpf.Script.Core.dll
+ ..\Extensions\AIStudio.Wpf.Script\Dlls\net461\AIStudio.Wpf.Script.Core.dll
+
+
+
+
+
+ ..\Extensions\AIStudio.Wpf.Block\Dlls\net5.0-windows\AIStudio.Wpf.Block.Core.dll
+
+
+
+
+
+ ..\Extensions\AIStudio.Wpf.Block\Dlls\net6.0-windows\AIStudio.Wpf.Block.Core.dll
-
- ..\Extensions\AIStudio.Wpf.Script\Dlls\net461\AIStudio.Wpf.Script.Core.dll
+
+ ..\Extensions\AIStudio.Wpf.Block\Dlls\net461\AIStudio.Wpf.Block.Core.dll
diff --git a/AIStudio.Wpf.DiagramApp/App.xaml b/AIStudio.Wpf.DiagramApp/App.xaml
index 5142858..492f431 100644
--- a/AIStudio.Wpf.DiagramApp/App.xaml
+++ b/AIStudio.Wpf.DiagramApp/App.xaml
@@ -17,7 +17,7 @@
-
+
diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/BlockViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/BlockViewModel.cs
index 21e1260..dcd7a2b 100644
--- a/AIStudio.Wpf.DiagramApp/ViewModels/BlockViewModel.cs
+++ b/AIStudio.Wpf.DiagramApp/ViewModels/BlockViewModel.cs
@@ -4,7 +4,8 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
-//using AIStudio.Wpf.Block.ViewModels;
+using AIStudio.Wpf.Block;
+using AIStudio.Wpf.Block.Core.ViewModels;
using AIStudio.Wpf.DiagramApp.Models;
using AIStudio.Wpf.DiagramDesigner;
@@ -25,6 +26,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
{
base.InitDiagramViewModel();
+ DiagramViewModel.DiagramOption.LayoutOption.PageSizeOrientation = PageSizeOrientation.Horizontal;
DiagramViewModel.DiagramOption.LayoutOption.ShowGrid = false;
}
@@ -32,17 +34,224 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
{
base.Init(initNew);
- //StartBlockItemViewModel start = new StartBlockItemViewModel(DiagramViewModel) { Left = 28, Top = 28 };
- //DiagramViewModel.Add(start);
+ #region
+ //运动
+ BlockDesignerItemViewModel MoveNode = new MoveNode(DiagramViewModel) { Name = nameof(MoveNode), Left = 28, Top = 28 };
+ DiagramViewModel.Add(MoveNode);
+ BlockDesignerItemViewModel TurnRightNode = new TurnRightNode(DiagramViewModel) { Name = nameof(TurnRightNode), Left = 28, Top = 68 };
+ DiagramViewModel.Add(TurnRightNode);
+ BlockDesignerItemViewModel TurnLeftNode = new TurnLeftNode(DiagramViewModel) { Name = nameof(TurnLeftNode), Left = 28, Top = 108 };
+ DiagramViewModel.Add(TurnLeftNode);
+ BlockDesignerItemViewModel MoveToNode = new MoveToNode(DiagramViewModel) { Name = nameof(MoveToNode), Left = 28, Top = 148 };
+ DiagramViewModel.Add(MoveToNode);
+ BlockDesignerItemViewModel MoveToPointNode = new MoveToPointNode(DiagramViewModel) { Name = nameof(MoveToPointNode), Left = 28, Top = 188 };
+ DiagramViewModel.Add(MoveToPointNode);
+ BlockDesignerItemViewModel TimeMoveToNode = new TimeMoveToNode(DiagramViewModel) { Name = nameof(TimeMoveToNode), Left = 28, Top = 228 };
+ DiagramViewModel.Add(TimeMoveToNode);
+ BlockDesignerItemViewModel TimeMoveToPointNode = new TimeMoveToPointNode(DiagramViewModel) { Name = nameof(TimeMoveToPointNode), Left = 28, Top = 268 };
+ DiagramViewModel.Add(TimeMoveToPointNode);
+ BlockDesignerItemViewModel FaceToNode = new FaceToNode(DiagramViewModel) { Name = nameof(FaceToNode), Left = 28, Top = 308 };
+ DiagramViewModel.Add(FaceToNode);
+ BlockDesignerItemViewModel FaceToMouseNode = new FaceToMouseNode(DiagramViewModel) { Name = nameof(FaceToMouseNode), Left = 28, Top = 348 };
+ DiagramViewModel.Add(FaceToMouseNode);
+ BlockDesignerItemViewModel PointXAddNode = new PointXAddNode(DiagramViewModel) { Name = nameof(PointXAddNode), Left = 28, Top = 388 };
+ DiagramViewModel.Add(PointXAddNode);
+ BlockDesignerItemViewModel PointXSetNode = new PointXSetNode(DiagramViewModel) { Name = nameof(PointXSetNode), Left = 28, Top = 428 };
+ DiagramViewModel.Add(PointXSetNode);
+ BlockDesignerItemViewModel PointYAddNode = new PointYAddNode(DiagramViewModel) { Name = nameof(PointYAddNode), Left = 28, Top = 468 };
+ DiagramViewModel.Add(PointYAddNode);
+ BlockDesignerItemViewModel PointYSetNode = new PointYSetNode(DiagramViewModel) { Name = nameof(PointYSetNode), Left = 28, Top = 508 };
+ DiagramViewModel.Add(PointYSetNode);
+ BlockDesignerItemViewModel BorderBounceNode = new BorderBounceNode(DiagramViewModel) { Name = nameof(BorderBounceNode), Left = 28, Top = 548 };
+ DiagramViewModel.Add(BorderBounceNode);
+ BlockDesignerItemViewModel RotationMethodNode = new RotationMethodNode(DiagramViewModel) { Name = nameof(RotationMethodNode), Left = 28, Top = 588 };
+ DiagramViewModel.Add(RotationMethodNode);
+ BlockDesignerItemViewModel PointXNode = new PointXNode(DiagramViewModel) { Name = nameof(PointXNode), Left = 28, Top = 628 };
+ DiagramViewModel.Add(PointXNode);
+ BlockDesignerItemViewModel PointYNode = new PointYNode(DiagramViewModel) { Name = nameof(PointYNode), Left = 28, Top = 668 };
+ DiagramViewModel.Add(PointYNode);
+ BlockDesignerItemViewModel DirectionNode = new DirectionNode(DiagramViewModel) { Name = nameof(DirectionNode), Left = 28, Top = 708 };
+ DiagramViewModel.Add(DirectionNode);
- //WaitTimeBlockItemViewModel waittime = new WaitTimeBlockItemViewModel(DiagramViewModel) { Left = 28, Top = 28 };
- //DiagramViewModel.Add(waittime);
+ BlockDesignerItemViewModel SayTimeNode = new SayTimeNode(DiagramViewModel) { Name = nameof(SayTimeNode), Left = 288, Top = 28 };
+ DiagramViewModel.Add(SayTimeNode);
+ BlockDesignerItemViewModel SayNode = new SayNode(DiagramViewModel) { Name = nameof(SayNode), Left = 288, Top = 68 };
+ DiagramViewModel.Add(SayNode);
+ BlockDesignerItemViewModel ThinkTimeNode = new ThinkTimeNode(DiagramViewModel) { Name = nameof(ThinkTimeNode), Left = 288, Top = 108 };
+ DiagramViewModel.Add(ThinkTimeNode);
+ BlockDesignerItemViewModel ThinkBlockNode = new ThinkBlockNode(DiagramViewModel) { Name = nameof(ThinkBlockNode), Left = 288, Top = 148 };
+ DiagramViewModel.Add(ThinkBlockNode);
+ BlockDesignerItemViewModel ChangeLookNode = new ChangeLookNode(DiagramViewModel) { Name = nameof(ChangeLookNode), Left = 288, Top = 188 };
+ DiagramViewModel.Add(ChangeLookNode);
+ BlockDesignerItemViewModel NextLookNode = new NextLookNode(DiagramViewModel) { Name = nameof(NextLookNode), Left = 288, Top = 228 };
+ DiagramViewModel.Add(NextLookNode);
+ BlockDesignerItemViewModel ChangeBackgroundNode = new ChangeBackgroundNode(DiagramViewModel) { Name = nameof(ChangeBackgroundNode), Left = 288, Top = 268 };
+ DiagramViewModel.Add(ChangeBackgroundNode);
+ BlockDesignerItemViewModel NextBackgroundNode = new NextBackgroundNode(DiagramViewModel) { Name = nameof(NextBackgroundNode), Left = 288, Top = 308 };
+ DiagramViewModel.Add(NextBackgroundNode);
+ BlockDesignerItemViewModel AddSizeNode = new AddSizeNode(DiagramViewModel) { Name = nameof(AddSizeNode), Left = 288, Top = 348 };
+ DiagramViewModel.Add(AddSizeNode);
+ BlockDesignerItemViewModel SetSizeNode = new SetSizeNode(DiagramViewModel) { Name = nameof(SetSizeNode), Left = 288, Top = 388 };
+ DiagramViewModel.Add(SetSizeNode);
+ BlockDesignerItemViewModel ClearEffectNode = new ClearEffectNode(DiagramViewModel) { Name = nameof(ClearEffectNode), Left = 288, Top = 428 };
+ DiagramViewModel.Add(ClearEffectNode);
+ BlockDesignerItemViewModel ShowEffectNode = new ShowNode(DiagramViewModel) { Name = nameof(ShowNode), Left = 288, Top = 468 };
+ DiagramViewModel.Add(ShowEffectNode);
+ BlockDesignerItemViewModel HideEffectNode = new HideNode(DiagramViewModel) { Name = nameof(HideNode), Left = 288, Top = 508 };
+ DiagramViewModel.Add(HideEffectNode);
+ BlockDesignerItemViewModel BringToNode = new BringToNode(DiagramViewModel) { Name = nameof(BringToNode), Left = 288, Top = 548 };
+ DiagramViewModel.Add(BringToNode);
+ BlockDesignerItemViewModel BringLayerNode = new BringLayerNode(DiagramViewModel) { Name = nameof(BringLayerNode), Left = 288, Top = 588 };
+ DiagramViewModel.Add(BringLayerNode);
+ BlockDesignerItemViewModel LookNode = new LookNode(DiagramViewModel) { Name = nameof(LookNode), Left = 288, Top = 628 };
+ DiagramViewModel.Add(LookNode);
+ BlockDesignerItemViewModel BackgroundNode = new BackgroundNode(DiagramViewModel) { Name = nameof(BackgroundNode), Left = 288, Top = 668 };
+ DiagramViewModel.Add(BackgroundNode);
+ BlockDesignerItemViewModel SizeNode = new SizeNode(DiagramViewModel) { Name = nameof(SizeNode), Left = 288, Top = 708 };
+ DiagramViewModel.Add(SizeNode);
- //AddBlockItemViewModel add = new AddBlockItemViewModel(DiagramViewModel) { Left = 28, Top = 28 };
- //DiagramViewModel.Add(add);
+ BlockDesignerItemViewModel PlaySoundCompleteNode = new PlaySoundCompleteNode(DiagramViewModel) { Name = nameof(PlaySoundCompleteNode), Left = 448, Top = 28 };
+ DiagramViewModel.Add(PlaySoundCompleteNode);
+ BlockDesignerItemViewModel PlaySoundNode = new PlaySoundNode(DiagramViewModel) { Name = nameof(PlaySoundNode), Left = 448, Top = 68 };
+ DiagramViewModel.Add(PlaySoundNode);
+ BlockDesignerItemViewModel StopAllSoundNode = new StopAllSoundNode(DiagramViewModel) { Name = nameof(StopAllSoundNode), Left = 448, Top = 108 };
+ DiagramViewModel.Add(StopAllSoundNode);
+ BlockDesignerItemViewModel AddSoundEffectNode = new AddSoundEffectNode(DiagramViewModel) { Name = nameof(AddSoundEffectNode), Left = 448, Top = 148 };
+ DiagramViewModel.Add(AddSoundEffectNode);
+ BlockDesignerItemViewModel SetSoundEffectNode = new SetSoundEffectNode(DiagramViewModel) { Name = nameof(SetSoundEffectNode), Left = 448, Top = 188 };
+ DiagramViewModel.Add(SetSoundEffectNode);
+ BlockDesignerItemViewModel ClearSoundEffectNode = new ClearSoundEffectNode(DiagramViewModel) { Name = nameof(ClearSoundEffectNode), Left = 448, Top = 228 };
+ DiagramViewModel.Add(ClearSoundEffectNode);
+ BlockDesignerItemViewModel AddVolumeNode = new AddVolumeNode(DiagramViewModel) { Name = nameof(AddVolumeNode), Left = 448, Top = 268 };
+ DiagramViewModel.Add(AddVolumeNode);
+ BlockDesignerItemViewModel SetVolumeNode = new SetVolumeNode(DiagramViewModel) { Name = nameof(SetVolumeNode), Left = 448, Top = 308 };
+ DiagramViewModel.Add(SetVolumeNode);
+ BlockDesignerItemViewModel VolumeNode = new VolumeNode(DiagramViewModel) { Name = nameof(VolumeNode), Left = 448, Top = 348 };
+ DiagramViewModel.Add(VolumeNode);
- //KeyboardPressBlockItemViewModel keyboardPress = new KeyboardPressBlockItemViewModel(DiagramViewModel) { Left = 28, Top = 28 };
- //DiagramViewModel.Add(keyboardPress);
+ BlockDesignerItemViewModel StartNode = new StartNode(DiagramViewModel) { Name = nameof(StartNode), Left = 638, Top = 28 };
+ DiagramViewModel.Add(StartNode);
+ BlockDesignerItemViewModel KeyboardPressNode = new KeyboardPressNode(DiagramViewModel) { Name = nameof(KeyboardPressNode), Left = 638, Top = 88 };
+ DiagramViewModel.Add(KeyboardPressNode);
+ BlockDesignerItemViewModel WhenRoleClickedNode = new WhenRoleClickedNode(DiagramViewModel) { Name = nameof(WhenRoleClickedNode), Left = 638, Top = 148 };
+ DiagramViewModel.Add(WhenRoleClickedNode);
+ BlockDesignerItemViewModel WhenBackgroundSwitchNode = new WhenBackgroundSwitchNode(DiagramViewModel) { Name = nameof(WhenBackgroundSwitchNode), Left = 638, Top = 208 };
+ DiagramViewModel.Add(WhenBackgroundSwitchNode);
+ BlockDesignerItemViewModel WhenGreaterThanNode = new WhenGreaterThanNode(DiagramViewModel) { Name = nameof(WhenGreaterThanNode), Left = 638, Top = 268 };
+ DiagramViewModel.Add(WhenGreaterThanNode);
+ BlockDesignerItemViewModel WhenReceivedMessageNode = new WhenReceivedMessageNode(DiagramViewModel) { Name = nameof(WhenReceivedMessageNode), Left = 638, Top = 328 };
+ DiagramViewModel.Add(WhenReceivedMessageNode);
+ BlockDesignerItemViewModel BroadcastMessageNode = new BroadcastMessageNode(DiagramViewModel) { Name = nameof(BroadcastMessageNode), Left = 638, Top = 388 };
+ DiagramViewModel.Add(BroadcastMessageNode);
+ BlockDesignerItemViewModel BroadcastMessageAndWaitingNode = new BroadcastMessageAndWaitingNode(DiagramViewModel) { Name = nameof(BroadcastMessageAndWaitingNode), Left = 638, Top = 448 };
+ DiagramViewModel.Add(BroadcastMessageAndWaitingNode);
+
+ BlockDesignerItemViewModel WaitTimeNode = new WaitTimeNode(DiagramViewModel) { Name = nameof(WaitTimeNode), Left = 788, Top = 28 };
+ DiagramViewModel.Add(WaitTimeNode);
+ BlockDesignerItemViewModel ForNode = new ForNode(DiagramViewModel) { Name = nameof(ForNode), Left = 788, Top = 68 };
+ DiagramViewModel.Add(ForNode);
+ BlockDesignerItemViewModel AlwaysNode = new AlwaysNode(DiagramViewModel) { Name = nameof(AlwaysNode), Left = 788, Top = 158 };
+ DiagramViewModel.Add(AlwaysNode);
+ BlockDesignerItemViewModel IfNode = new IfNode(DiagramViewModel) { Name = nameof(IfNode), Left = 788, Top = 238 };
+ DiagramViewModel.Add(IfNode);
+ BlockDesignerItemViewModel IfElseNode = new IfElseNode(DiagramViewModel) { Name = nameof(IfElseNode), Left = 788, Top = 328 };
+ DiagramViewModel.Add(IfElseNode);
+ BlockDesignerItemViewModel WaitNode = new WaitNode(DiagramViewModel) { Name = nameof(WaitNode), Left = 788, Top = 458 };
+ DiagramViewModel.Add(WaitNode);
+ BlockDesignerItemViewModel WhileNode = new WhileNode(DiagramViewModel) { Name = nameof(WhileNode), Left = 788, Top = 498 };
+ DiagramViewModel.Add(WhileNode);
+ BlockDesignerItemViewModel StopNode = new StopNode(DiagramViewModel) { Name = nameof(StopNode), Left = 788, Top = 578 };
+ DiagramViewModel.Add(StopNode);
+ BlockDesignerItemViewModel CloneStartNode = new CloneStartNode(DiagramViewModel) { Name = nameof(CloneStartNode), Left = 788, Top = 618 };
+ DiagramViewModel.Add(CloneStartNode);
+ BlockDesignerItemViewModel CloneNode = new CloneNode(DiagramViewModel) { Name = nameof(CloneNode), Left = 788, Top = 678 };
+ DiagramViewModel.Add(CloneNode);
+ BlockDesignerItemViewModel DeleteThisCloneNode = new DeleteThisCloneNode(DiagramViewModel) { Name = nameof(DeleteThisCloneNode), Left = 788, Top = 718 };
+ DiagramViewModel.Add(DeleteThisCloneNode);
+
+ BlockDesignerItemViewModel HitNode = new HitNode(DiagramViewModel) { Name = nameof(HitNode), Left = 928, Top = 28 };
+ DiagramViewModel.Add(HitNode);
+ BlockDesignerItemViewModel HitColorNode = new HitColorNode(DiagramViewModel) { Name = nameof(HitColorNode), Left = 928, Top = 68 };
+ DiagramViewModel.Add(HitColorNode);
+ BlockDesignerItemViewModel ColorHitColorNode = new ColorHitColorNode(DiagramViewModel) { Name = nameof(ColorHitColorNode), Left = 928, Top = 108 };
+ DiagramViewModel.Add(ColorHitColorNode);
+ BlockDesignerItemViewModel DistanceNode = new DistanceNode(DiagramViewModel) { Name = nameof(DistanceNode), Left = 928, Top = 148 };
+ DiagramViewModel.Add(DistanceNode);
+ BlockDesignerItemViewModel AskNode = new AskNode(DiagramViewModel) { Name = nameof(AskNode), Left = 928, Top = 188 };
+ DiagramViewModel.Add(AskNode);
+ BlockDesignerItemViewModel AnswerNode = new AnswerNode(DiagramViewModel) { Name = nameof(AnswerNode), Left = 928, Top = 228 };
+ DiagramViewModel.Add(AnswerNode);
+ BlockDesignerItemViewModel PressKeyNode = new PressKeyNode(DiagramViewModel) { Name = nameof(PressKeyNode), Left = 928, Top = 268 };
+ DiagramViewModel.Add(PressKeyNode);
+ BlockDesignerItemViewModel PressMouseNode = new PressMouseNode(DiagramViewModel) { Name = nameof(PressMouseNode), Left = 928, Top = 308 };
+ DiagramViewModel.Add(PressMouseNode);
+ BlockDesignerItemViewModel MousePointXNode = new MousePointXNode(DiagramViewModel) { Name = nameof(MousePointXNode), Left = 928, Top = 348 };
+ DiagramViewModel.Add(MousePointXNode);
+ BlockDesignerItemViewModel MousePointYNode = new MousePointYNode(DiagramViewModel) { Name = nameof(MousePointYNode), Left = 928, Top = 388 };
+ DiagramViewModel.Add(MousePointYNode);
+ BlockDesignerItemViewModel DragModeNode = new DragModeNode(DiagramViewModel) { Name = nameof(DragModeNode), Left = 928, Top = 428 };
+ DiagramViewModel.Add(DragModeNode);
+ BlockDesignerItemViewModel LoudnessNode = new LoudnessNode(DiagramViewModel) { Name = nameof(LoudnessNode), Left = 928, Top = 468 };
+ DiagramViewModel.Add(LoudnessNode);
+ BlockDesignerItemViewModel TimerNode = new TimerNode(DiagramViewModel) { Name = nameof(TimerNode), Left = 928, Top = 508 };
+ DiagramViewModel.Add(TimerNode);
+ BlockDesignerItemViewModel ClearTimerNode = new ClearTimerNode(DiagramViewModel) { Name = nameof(ClearTimerNode), Left = 928, Top = 548 };
+ DiagramViewModel.Add(ClearTimerNode);
+ BlockDesignerItemViewModel StageObjectNode = new StageObjectNode(DiagramViewModel) { Name = nameof(StageObjectNode), Left = 928, Top = 588 };
+ DiagramViewModel.Add(StageObjectNode);
+ BlockDesignerItemViewModel NowTimeNode = new NowTimeNode(DiagramViewModel) { Name = nameof(NowTimeNode), Left = 928, Top = 628 };
+ DiagramViewModel.Add(NowTimeNode);
+ BlockDesignerItemViewModel DaysFrom2000Node = new DaysFrom2000Node(DiagramViewModel) { Name = nameof(DaysFrom2000Node), Left = 928, Top = 668 };
+ DiagramViewModel.Add(DaysFrom2000Node);
+ BlockDesignerItemViewModel UserNameNode = new UserNameNode(DiagramViewModel) { Name = nameof(UserNameNode), Left = 928, Top = 708 };
+ DiagramViewModel.Add(UserNameNode);
+
+ BlockDesignerItemViewModel AddNode = new AddNode(DiagramViewModel) { Name = nameof(AddNode), Left = 1108, Top = 28 };
+ DiagramViewModel.Add(AddNode);
+ BlockDesignerItemViewModel SubtractNode = new SubtractNode(DiagramViewModel) { Name = nameof(SubtractNode), Left = 1108, Top = 68 };
+ DiagramViewModel.Add(SubtractNode);
+ BlockDesignerItemViewModel MultiplyNode = new MultiplyNode(DiagramViewModel) { Name = nameof(MultiplyNode), Left = 1108, Top = 108 };
+ DiagramViewModel.Add(MultiplyNode);
+ BlockDesignerItemViewModel DivisionNode = new DivisionNode(DiagramViewModel) { Name = nameof(DivisionNode), Left = 1108, Top = 148 };
+ DiagramViewModel.Add(DivisionNode);
+ BlockDesignerItemViewModel RandomNode = new RandomNode(DiagramViewModel) { Name = nameof(RandomNode), Left = 1108, Top = 188 };
+ DiagramViewModel.Add(RandomNode);
+ BlockDesignerItemViewModel GreaterThanNode = new GreaterThanNode(DiagramViewModel) { Name = nameof(GreaterThanNode), Left = 1108, Top = 228 };
+ DiagramViewModel.Add(GreaterThanNode);
+ BlockDesignerItemViewModel LessThanNode = new LessThanNode(DiagramViewModel) { Name = nameof(LessThanNode), Left = 1108, Top = 268 };
+ DiagramViewModel.Add(LessThanNode);
+ BlockDesignerItemViewModel EqualThanNode = new EqualThanNode(DiagramViewModel) { Name = nameof(EqualThanNode), Left = 1108, Top = 308 };
+ DiagramViewModel.Add(EqualThanNode);
+ BlockDesignerItemViewModel AndNode = new AndNode(DiagramViewModel) { Name = nameof(AndNode), Left = 1108, Top = 348 };
+ DiagramViewModel.Add(AndNode);
+ BlockDesignerItemViewModel OrNode = new OrNode(DiagramViewModel) { Name = nameof(OrNode), Left = 1108, Top = 388 };
+ DiagramViewModel.Add(OrNode);
+ BlockDesignerItemViewModel NotNode = new NotNode(DiagramViewModel) { Name = nameof(NotNode), Left = 1108, Top = 428 };
+ DiagramViewModel.Add(NotNode);
+ BlockDesignerItemViewModel StringAddNode = new StringAddNode(DiagramViewModel) { Name = nameof(StringAddNode), Left = 1108, Top = 468 };
+ DiagramViewModel.Add(StringAddNode);
+ BlockDesignerItemViewModel StringIndexNode = new StringIndexNode(DiagramViewModel) { Name = nameof(StringIndexNode), Left = 1108, Top = 508 };
+ DiagramViewModel.Add(StringIndexNode);
+ BlockDesignerItemViewModel StringContainNode = new StringContainNode(DiagramViewModel) { Name = nameof(StringContainNode), Left = 1108, Top = 548 };
+ DiagramViewModel.Add(StringContainNode);
+ BlockDesignerItemViewModel ModNode = new ModNode(DiagramViewModel) { Name = nameof(ModNode), Left = 1108, Top = 588 };
+ DiagramViewModel.Add(ModNode);
+ BlockDesignerItemViewModel RoundNode = new RoundNode(DiagramViewModel) { Name = nameof(RoundNode), Left = 1108, Top = 628 };
+ DiagramViewModel.Add(RoundNode);
+ BlockDesignerItemViewModel MathNode = new MathNode(DiagramViewModel) { Name = nameof(MathNode), Left = 1108, Top = 668 };
+ DiagramViewModel.Add(MathNode);
+
+ BlockDesignerItemViewModel VariableNode = new VariableNode(DiagramViewModel) { Name = nameof(VariableNode), Left = 1318, Top = 28 };
+ DiagramViewModel.Add(VariableNode);
+ BlockDesignerItemViewModel SetVariableNode = new SetVariableNode(DiagramViewModel) { Name = nameof(SetVariableNode), Left = 1318, Top = 68 };
+ DiagramViewModel.Add(SetVariableNode);
+ BlockDesignerItemViewModel IncreaseVariableNode = new IncreaseVariableNode(DiagramViewModel) { Name = nameof(IncreaseVariableNode), Left = 1318, Top = 108 };
+ DiagramViewModel.Add(IncreaseVariableNode);
+ BlockDesignerItemViewModel ShowVariableNode = new ShowVariableNode(DiagramViewModel) { Name = nameof(ShowVariableNode), Left = 1318, Top = 148 };
+ DiagramViewModel.Add(ShowVariableNode);
+ BlockDesignerItemViewModel HiddenVariableNode = new HiddenVariableNode(DiagramViewModel) { Name = nameof(HiddenVariableNode), Left = 1318, Top = 188 };
+ DiagramViewModel.Add(HiddenVariableNode);
+ #endregion
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_ihwwsf1d_wpftmp.csproj b/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_ihwwsf1d_wpftmp.csproj
new file mode 100644
index 0000000..8b4dabd
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Additionals/AIStudio.Wpf.DiagramDesigner.Additionals_ihwwsf1d_wpftmp.csproj
@@ -0,0 +1,309 @@
+
+
+ AIStudio.Wpf.DiagramDesigner.Additionals
+ obj\Debug\
+ obj\
+ F:\aistudio.-wpf.-diagram\AIStudio.Wpf.DiagramDesigner.Additionals\obj\
+ <_TargetAssemblyProjectName>AIStudio.Wpf.DiagramDesigner.Additionals
+
+
+
+ true
+ true
+ AIStudio.Wpf.Controls
+ akwkevin
+ https://gitee.com/akwkevin
+ A.png
+
+
+ 1.1.7
+ 一个Wpf的Diagram控件帮助库
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/BlockConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/BlockConnectorInfo.cs
index c17171e..e176e3b 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/BlockConnectorInfo.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/BlockConnectorInfo.cs
@@ -64,5 +64,53 @@ namespace AIStudio.Wpf.DiagramDesigner
return false;
}
}
+
+ public PointBase LeftPosition
+ {
+ get
+ {
+ return new PointBase(MiddlePosition.X - DataItem.GetItemWidth() / 2, MiddlePosition.Y);
+ }
+ }
+
+ public PointBase RightPosition
+ {
+ get
+ {
+ return new PointBase(MiddlePosition.X + DataItem.GetItemWidth() / 2, MiddlePosition.Y);
+ }
+ }
+
+ public double DistanceTo(BlockConnectorInfo port)
+ {
+ PointBase p0 = port.LeftPosition;
+ PointBase p1 = port.RightPosition;
+ PointBase p2 = LeftPosition;
+ PointBase p3 = RightPosition;
+ var distance1 = DistanceTo(p0, p1, p2);
+ var distance2 = DistanceTo(p0, p1, p3);
+ var distance3 = DistanceTo(p2, p3, p0);
+ var distance4 = DistanceTo(p2, p3, p1);
+
+ return Math.Min(Math.Min(distance1, distance2), Math.Min(distance3, distance4));
+ }
+
+ double DistanceTo(PointBase A, PointBase B, PointBase P) //点P到线段AB的最短距离
+ {
+ double r = ((P.X - A.X) * (B.X - A.X) + (P.Y - A.Y) * (B.Y - A.Y)) / DistanceToPow(A, B);
+ if (r <= 0) return Math.Sqrt(DistanceToPow(A, P));
+ else if (r >= 1) return Math.Sqrt(DistanceToPow(B, P));
+ else
+ {
+ double AC = r * Math.Sqrt(DistanceToPow(A, B));
+ return Math.Sqrt(DistanceToPow(A, P) - AC * AC);
+ }
+ }
+
+ double DistanceToPow(PointBase a, PointBase b) //点a、b距离的平方
+ {
+ return (a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y);
+ }
+
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
index 02c4501..c5f0d9a 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs
@@ -776,12 +776,12 @@ namespace AIStudio.Wpf.DiagramDesigner
public double GetItemWidth()
{
- return double.IsNaN(ItemWidth) ? ActualItemWidth : ItemWidth;
+ return double.IsNaN(ItemWidth) ? Math.Max(ActualItemWidth, MinItemWidth) : ItemWidth;
}
public double GetItemHeight()
{
- return double.IsNaN(ItemHeight) ? ActualItemHeight : ItemHeight;
+ return double.IsNaN(ItemHeight) ? Math.Max(ActualItemHeight, MinItemHeight) : ItemHeight;
}
public IShape GetShape() => ShapeDefiner(this);
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs
index 8a3ad5e..49ffc2c 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs
@@ -382,6 +382,10 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
} = 50;
+ public double BlockSnappingRadius
+ {
+ get; set;
+ } = 30;
}
public class ShortcutOption
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModel.cs
index a90329b..4bc4871 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModel.cs
@@ -37,30 +37,35 @@ namespace AIStudio.Wpf.DiagramDesigner
IsReadOnlyText = true;
}
- public void AddNext(BlockDesignerItemViewModel next)
+ public void AddNext(BlockDesignerItemViewModel next, bool first = true)
{
if (this.Next == next)
{
AlignNext(next);
return;
}
- var oldnext = this.Next;
- RemoveNext();
+
+ if (next.Prev != null)
+ {
+ next.Prev.RemoveNext();
+ }
+
+ var oldnext = RemoveNext();
next.Left = this.Left;
next.Top = this.Top + this.GetItemHeight();
next.ParentId = this.Id;
- next.Parent = this;
+ next.Prev = this;
this.Next = next;
if (next.Next != null)
{
next.AlignNext(next.Next);
}
- if (oldnext != null)
+ if (oldnext != null && first == true)
{
System.Windows.Application.Current?.Dispatcher.BeginInvoke(new Action(async () => {
await Task.Delay(10);
- GetLast().AddNext(oldnext);
+ GetLast().AddNext(oldnext, false);
}));
}
@@ -79,14 +84,19 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
- public void RemoveNext()
+ public BlockDesignerItemViewModel RemoveNext()
{
var next = this.Next;
if (next != null)
{
next.ParentId = new Guid();
- next.Parent = null;
+ next.Prev = null;
this.Next = null;
+ return next;
+ }
+ else
+ {
+ return null;
}
}
@@ -120,9 +130,34 @@ namespace AIStudio.Wpf.DiagramDesigner
{
this.RemoveChild(oldchildren, container);
}
+ Root.Items.Remove(child);
+ if (child.Prev != null)
+ {
+ child.Prev.RemoveNext();
+ }
+ if (child.Next != null)
+ {
+ child.RemoveNext();
+ }
+ container.InsertChild(child, index);
+ }
+ else
+ {
+ var list = child.GetNexts(true);
+ list.Reverse();
+ list.ForEach(p => {
+ Root.Items.Remove(p);
+ if (p.Prev != null)
+ {
+ p.Prev.RemoveNext();
+ }
+ if (p.Next != null)
+ {
+ p.RemoveNext();
+ }
+ container.InsertChild(p, index);
+ });
}
- Root.Items.Remove(child);
- container.InsertChild(child, index);
child.RemoveFromSelection();
this.GetRootContainItem.AddToSelection(true, true);
@@ -177,6 +212,13 @@ namespace AIStudio.Wpf.DiagramDesigner
{
return Parent as BlockDesignerItemViewModel;
}
+ set
+ {
+ if (Parent != value)
+ {
+ Parent = value;
+ }
+ }
}
public BlockDesignerItemViewModel Next
@@ -220,28 +262,44 @@ namespace AIStudio.Wpf.DiagramDesigner
public BlockDesignerItemViewModel GetFirst()
{
- var parent = this.Next;
- if (parent != null)
+ var parent = this.Prev;
+ while (parent?.Prev != null)
{
- while (parent.Parent != null)
- {
- parent = parent.Parent as BlockDesignerItemViewModel;
- }
+ parent = parent.Prev;
}
+
return parent;
}
public BlockDesignerItemViewModel GetLast()
{
var next = this;
- if (next != null)
+ while (next.Next != null)
{
- while (next.Next != null)
+ next = next.Next;
+ }
+
+ return next;
+ }
+
+ public List GetNexts(bool self)
+ {
+ List blockDesignerItemViewModels = new List();
+ if (self)
+ {
+ blockDesignerItemViewModels.Add(this);
+ }
+ var next = this;
+ while (next != null)
+ {
+ next = next.Next;
+ if (next != null)
{
- next = next.Next;
+ blockDesignerItemViewModels.Add(next);
}
}
- return next;
+
+ return blockDesignerItemViewModels;
}
public void AddContainer(BlockItemsContainerInfo container)
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModelHelper.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModelHelper.cs
index ce0cc2d..8292b00 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModelHelper.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BlockViewModel/BlockDesignerItemViewModelHelper.cs
@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
+using System.Windows.Documents;
namespace AIStudio.Wpf.DiagramDesigner
{
@@ -33,65 +35,84 @@ namespace AIStudio.Wpf.DiagramDesigner
FullyCreatedConnectorInfo parent = null;
FullyCreatedConnectorInfo next = null;
- foreach (var port in items.SelectMany(n => n.Connectors).OfType())
+
+ foreach (var port2 in blockDesignerItemTempLink.Connectors.OfType())
{
- //已经被连接的不允许在顶部吸附了
- if ((port.Orientation == ConnectorOrientation.Top || port.Orientation == ConnectorOrientation.Left) && port.DataItem.Prev != null)
- {
- continue;
+ bool success = false;
+ foreach (var item in items)
+ {
+ foreach (var port in item.Connectors.OfType())
+ {
+ //已经被连接的不允许在顶部吸附了
+ if ((port.Orientation == ConnectorOrientation.Top || port.Orientation == ConnectorOrientation.Left) && port.DataItem.Prev != null)
+ {
+ continue;
+ }
+
+ //parent
+ if (parent == null)
+ {
+ if ((port.Orientation == ConnectorOrientation.Right && port2.Orientation == ConnectorOrientation.Left)
+ || (port.Orientation == ConnectorOrientation.Bottom && port2.Orientation == ConnectorOrientation.Top))
+ {
+ var dis = port.DistanceTo(port2);
+ Debug.WriteLine($"{port.DataItem.Name}-{port2.DataItem.Name}:{dis}");
+ if (dis < diagramViewModel.DiagramOption.SnappingOption.BlockSnappingRadius)
+ {
+ port.DataItem.ShowConnectors = true;
+ if (port.CanAttachTo(port2) == true)
+ {
+ diagramViewModel.AddAttachTo(port, true);
+ parent = port;
+ success = true;
+ break;
+ }
+ else
+ {
+ diagramViewModel.AddAttachTo(port, false);
+ }
+
+ }
+ }
+ }
+
+ //next
+ if (next == null)
+ {
+ if ((port.Orientation == ConnectorOrientation.Left && port2.Orientation == ConnectorOrientation.Right)
+ || (port.Orientation == ConnectorOrientation.Top && port2.Orientation == ConnectorOrientation.Bottom))
+ {
+ var dis = port.DistanceTo(port2);
+ Debug.WriteLine($"{port.DataItem.Name}-{port2.DataItem.Name}:{dis}");
+ if (dis < diagramViewModel.DiagramOption.SnappingOption.BlockSnappingRadius)
+ {
+ port.DataItem.ShowConnectors = true;
+ if (port.CanAttachTo(port2) == true)
+ {
+ diagramViewModel.AddAttachTo(port, true);
+ next = port;
+ success = true;
+ break;
+ }
+ else
+ {
+ diagramViewModel.AddAttachTo(port, false);
+ }
+
+ }
+ }
+ }
+ }
+
+ if (success)
+ {
+ break;
+ }
}
- foreach (var port2 in blockDesignerItemTempLink.Connectors)
+ if (success)
{
- //parent
- if (parent == null)
- {
- if ((port.Orientation == ConnectorOrientation.Right && port2.Orientation == ConnectorOrientation.Left)
- || (port.Orientation == ConnectorOrientation.Bottom && port2.Orientation == ConnectorOrientation.Top))
- {
-
- if (port.Position.DistanceTo(port2.Position) < diagramViewModel.DiagramOption.SnappingOption.SnappingRadius)
- {
- port.DataItem.ShowConnectors = true;
- if (port2.CanAttachTo(port) == true)
- {
- diagramViewModel.AddAttachTo(port, true);
- parent = port;
- continue;
- }
- else
- {
- diagramViewModel.AddAttachTo(port, false);
- }
-
- }
- }
- }
-
- //next
- if (next == null)
- {
- if ((port.Orientation == ConnectorOrientation.Left && port2.Orientation == ConnectorOrientation.Right)
- || (port.Orientation == ConnectorOrientation.Top && port2.Orientation == ConnectorOrientation.Bottom))
- {
-
- if (port.Position.DistanceTo(port2.Position) < diagramViewModel.DiagramOption.SnappingOption.SnappingRadius)
- {
- port.DataItem.ShowConnectors = true;
- if (port2.CanAttachTo(port) == true)
- {
- diagramViewModel.AddAttachTo(port, true);
- next = port;
- continue;
- }
- else
- {
- diagramViewModel.AddAttachTo(port, false);
- }
-
- }
- }
- }
+ break;
}
}
@@ -113,17 +134,17 @@ namespace AIStudio.Wpf.DiagramDesigner
{
var innerport = container.GetAllContainers(container.Children, false).Where(p => p.GetBounds().IntersectsWith(blockDesignerItemTempLink.GetBounds())).OrderByDescending(p => p.ContainerLevel).FirstOrDefault();
if (innerport != null)
- {
+ {
if (innerport.CanAttachTo(blockDesignerItemTempLink.Items.FirstOrDefault()) == true)
{
- innerport.DataItem.ShowConnectors = true;
+ innerport.DataItem.ShowConnectors = true;
if (innerport.OnlyOneChild || innerport.Children.Count == 0)
{
diagramViewModel.AddAttachTo(innerport, true);
}
else
{
- diagramViewModel.FindNearPortToAttachTo(innerport.Children.ToList(), blockDesignerItemTempLink);
+ diagramViewModel.FindNearPortToAttachTo(innerport.Children.ToList(), blockDesignerItemTempLink);
}
return innerport;
}
@@ -136,7 +157,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
else
{
-
+
if (container.CanAttachTo(blockDesignerItemTempLink.Items.FirstOrDefault()) == true)
{
container.DataItem.ShowConnectors = true;
@@ -146,7 +167,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
else
{
- diagramViewModel.FindNearPortToAttachTo(container.Children.ToList(), blockDesignerItemTempLink);
+ diagramViewModel.FindNearPortToAttachTo(container.Children.ToList(), blockDesignerItemTempLink);
}
return container;
}
@@ -172,6 +193,11 @@ namespace AIStudio.Wpf.DiagramDesigner
{
diagramViewModel.ClearAttachTo();
var links = BlockDesignerItemTempLink.Build(blocks);
+
+ blocks.ToList().ForEach(p => {
+ p.ZIndex = int.MaxValue;
+ });
+
foreach (BlockDesignerItemTempLink item in links)
{
var container = diagramViewModel.FindNearContainerToAttachTo(item);
@@ -192,9 +218,13 @@ namespace AIStudio.Wpf.DiagramDesigner
return;
if (blocks.Any())
- {
+ {
var links = BlockDesignerItemTempLink.Build(blocks);
+ blocks.ToList().ForEach(p => {
+ p.ZIndex = diagramViewModel.Items.Where(q => q.ZIndex != int.MaxValue).Any() ? diagramViewModel.Items.Where(q => q.ZIndex != int.MaxValue).Max(r => r.ZIndex) + 1 : 0;
+ });
+
foreach (BlockDesignerItemTempLink item in links)
{
var container = diagramViewModel.FindNearContainerToAttachTo(item);
@@ -207,10 +237,10 @@ namespace AIStudio.Wpf.DiagramDesigner
index = container.Children.IndexOf(child);
if (child.RightConnector?.BeAttachTo == true || child.BottomConnector?.BeAttachTo == true)
{
- index ++;
+ index++;
}
}
- diagramViewModel.InsertChildCommand.Execute(new BlockContainerPara() { Item = container.DataItem, Child = item.Items.FirstOrDefault(), Container = container, Index = index });
+ diagramViewModel.InsertChildCommand.Execute(new BlockContainerPara() { Item = container.DataItem, Child = item.Items.FirstOrDefault(), Container = container, Index = index });
continue;
}
diff --git a/Extensions/AIStudio.Wpf.Block/AIStudio.Wpf.Block.csproj b/Extensions/AIStudio.Wpf.Block/AIStudio.Wpf.Block.csproj
new file mode 100644
index 0000000..41c34cb
--- /dev/null
+++ b/Extensions/AIStudio.Wpf.Block/AIStudio.Wpf.Block.csproj
@@ -0,0 +1,34 @@
+
+
+
+ true
+ AIStudio.Wpf.Controls
+ akwkevin
+ https://gitee.com/akwkevin
+ 1.0.7
+ 一个Block控件
+
+
+
+
+ Dlls\net5.0-windows\AIStudio.Wpf.Block.Core.dll
+
+
+
+
+
+ Dlls\net6.0-windows\AIStudio.Wpf.Block.Core.dll
+
+
+
+
+
+ Dlls\net461\AIStudio.Wpf.Block.Core.dll
+
+
+
+
+
+
+
+
diff --git a/Extensions/AIStudio.Wpf.Block/AssemblyInfo.cs b/Extensions/AIStudio.Wpf.Block/AssemblyInfo.cs
new file mode 100644
index 0000000..8b5504e
--- /dev/null
+++ b/Extensions/AIStudio.Wpf.Block/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/Extensions/AIStudio.Wpf.Block/BlockTest.cs b/Extensions/AIStudio.Wpf.Block/BlockTest.cs
new file mode 100644
index 0000000..ffc8036
--- /dev/null
+++ b/Extensions/AIStudio.Wpf.Block/BlockTest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AIStudio.Wpf.DiagramDesigner;
+using AIStudio.Wpf.Block.Core.ViewModels;
+
+namespace AIStudio.Wpf.Block
+{
+ public class BlockTest
+ {
+ public BlockTest()
+ {
+ BlockDesignerItemViewModel MoveNode = new MoveNode() { Name = nameof(MoveNode), Left = 28, Top = 28 };
+ }
+ }
+}
diff --git a/Extensions/AIStudio.Wpf.Block/Dlls/net461/AIStudio.Wpf.Block.Core.dll b/Extensions/AIStudio.Wpf.Block/Dlls/net461/AIStudio.Wpf.Block.Core.dll
new file mode 100644
index 0000000..5dfdba7
Binary files /dev/null and b/Extensions/AIStudio.Wpf.Block/Dlls/net461/AIStudio.Wpf.Block.Core.dll differ
diff --git a/Extensions/AIStudio.Wpf.Block/Dlls/net5.0-windows/AIStudio.Wpf.Block.Core.dll b/Extensions/AIStudio.Wpf.Block/Dlls/net5.0-windows/AIStudio.Wpf.Block.Core.dll
new file mode 100644
index 0000000..7c5abd4
Binary files /dev/null and b/Extensions/AIStudio.Wpf.Block/Dlls/net5.0-windows/AIStudio.Wpf.Block.Core.dll differ
diff --git a/Extensions/AIStudio.Wpf.Block/Dlls/net6.0-windows/AIStudio.Wpf.Block.Core.dll b/Extensions/AIStudio.Wpf.Block/Dlls/net6.0-windows/AIStudio.Wpf.Block.Core.dll
new file mode 100644
index 0000000..1c7f9ce
Binary files /dev/null and b/Extensions/AIStudio.Wpf.Block/Dlls/net6.0-windows/AIStudio.Wpf.Block.Core.dll differ
diff --git a/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_a2dtqtuc_wpftmp.csproj b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_a2dtqtuc_wpftmp.csproj
new file mode 100644
index 0000000..dcc2a7a
--- /dev/null
+++ b/Extensions/AIStudio.Wpf.SFC/AIStudio.Wpf.SFC_a2dtqtuc_wpftmp.csproj
@@ -0,0 +1,235 @@
+
+
+ AIStudio.Wpf.SFC
+ obj\Debug\
+ obj\
+ F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.SFC\obj\
+ <_TargetAssemblyProjectName>AIStudio.Wpf.SFC
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_iozmnnjw_wpftmp.csproj b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_iozmnnjw_wpftmp.csproj
new file mode 100644
index 0000000..7d1a01b
--- /dev/null
+++ b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_iozmnnjw_wpftmp.csproj
@@ -0,0 +1,276 @@
+
+
+ AIStudio.Wpf.Script
+ obj\Debug\
+ obj\
+ F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.Script\obj\
+ <_TargetAssemblyProjectName>AIStudio.Wpf.Script
+
+
+
+ true
+ AIStudio.Wpf.Controls
+ akwkevin
+ https://gitee.com/akwkevin
+ A.png
+
+
+ 1.0.6
+ 一个Wpf的脚本生成模块
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Images/90d797c820ea33386617d32c148e1a9.jpg b/Images/90d797c820ea33386617d32c148e1a9.jpg
new file mode 100644
index 0000000..b11fe82
Binary files /dev/null and b/Images/90d797c820ea33386617d32c148e1a9.jpg differ
diff --git a/Images/block.gif b/Images/block.gif
new file mode 100644
index 0000000..3fde2c2
Binary files /dev/null and b/Images/block.gif differ
diff --git a/Images/block1.png b/Images/block1.png
new file mode 100644
index 0000000..668d0a5
Binary files /dev/null and b/Images/block1.png differ
diff --git a/Images/block2.png b/Images/block2.png
new file mode 100644
index 0000000..f771dcb
Binary files /dev/null and b/Images/block2.png differ
diff --git a/Images/block3.png b/Images/block3.png
new file mode 100644
index 0000000..78c47d5
Binary files /dev/null and b/Images/block3.png differ
diff --git a/Images/da3cc91baa07eb81acebf9fc1246a01.jpg b/Images/da3cc91baa07eb81acebf9fc1246a01.jpg
new file mode 100644
index 0000000..e2b46ac
Binary files /dev/null and b/Images/da3cc91baa07eb81acebf9fc1246a01.jpg differ
diff --git a/README.md b/README.md
index e4f7e0e..ed8a11c 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,18 @@
友情提示 很多朋友老问为什么编译不过去,您需要安装对应的net版本,或者修改工程的net版本,如下图。

+## 2023年7月2日更新内容(做一个Block编程画板)
+先上一张效果动图,本次更新主要仿照Scratch,目前仅完成拖拽部分,逻辑部分后续完善。
+
+
+### 本次扩展主要内容:
+### 1.Block模块,入口在文件新建下。
+
+### 2.简易Block的使用:
+
+### 3.仿Scratch的Block的使用(完成图鉴,准备编写逻辑):
+
+
## 2023年5月17日更新内容(做一个画笔画板)

@@ -728,6 +740,12 @@ nuget地址:
### 用Wpf做一个画笔画板(续5-Diagram画板)[https://www.cnblogs.com/akwkevin/p/17417546.html](https://www.cnblogs.com/akwkevin/p/17417546.html)
+## 捐助 如果您觉得我们的开源软件对你有所帮助,请扫下方二维码打赏我们一杯咖啡。(可以联系我,在下面添加特别鸣谢,谢谢。)
+
+
+
+
+
相关链接地址:
Fluent.Ribbon: https://github.com/fluentribbon/Fluent.Ribbon