This commit is contained in:
kwai
2023-02-27 20:18:58 +08:00
parent 298ec29dd9
commit f8c2115f03
21 changed files with 326 additions and 75 deletions

View File

@@ -75,6 +75,18 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
connector.ShapeViewModel.SinkMarker.PathStyle = source.ShapeViewModel.SinkMarker.PathStyle;
connector.ShapeViewModel.SinkMarker.SizeStyle = source.ShapeViewModel.SinkMarker.SizeStyle;
return connector;
}
public void LayoutUpdated(MindNode mindNode)
{
if (mindNode == null) return;
@@ -131,7 +143,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.TopConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}
}
@@ -153,7 +165,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomConnector);
connect?.SetSinkPort(child.LeftConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}
}

View File

@@ -49,13 +49,9 @@ namespace AIStudio.Wpf.Mind.Helpers
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.BottomLeft, true) { XRatio = 0, YRatio = 1 };
mindNode.AddConnector(port1);
var port2 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Top, true) { XRatio = 0.25, YRatio = 0 };
mindNode.AddConnector(port2);
var port3 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.TopLeft, true) { XRatio = 0, YRatio = 0 };
mindNode.AddConnector(port3);
var port4 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Bottom, true) { XRatio = 0.25, YRatio = 1 };
mindNode.AddConnector(port4);
var port2 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.TopLeft, true) { XRatio = 0, YRatio = 0 };
mindNode.AddConnector(port2);
mindNode.IsInnerConnector = true;
@@ -70,15 +66,25 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ItemHeight = 25;
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.BottomLeft, true) { XRatio = 0, YRatio = 1 };
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };
mindNode.AddConnector(port1);
var port2 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Top, true) { XRatio = 0.25, YRatio = 0 };
mindNode.AddConnector(port2);
var port3 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.TopLeft, true) { XRatio = 0, YRatio = 0 };
mindNode.AddConnector(port3);
var port4 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Bottom, true) { XRatio = 0.25, YRatio = 1 };
mindNode.AddConnector(port4);
mindNode.IsInnerConnector = true;
mindNode.ColorViewModel.LineColor.Color = Color.FromRgb(0x73, 0xa1, 0xbf);
mindNode.ShapeViewModel.SinkMarker.PathStyle = ArrowPathStyle.None;
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
mindNode.CornerRadius = new System.Windows.CornerRadius(0);
mindNode.BorderThickness = new System.Windows.Thickness(0, 0, 0, 0);
break;
}
case NodeLevel.Level4:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };
mindNode.AddConnector(port1);
mindNode.IsInnerConnector = true;
mindNode.ColorViewModel.LineColor.Color = Color.FromRgb(0x73, 0xa1, 0xbf);
@@ -93,6 +99,25 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.GetLevel1Node().LayoutUpdating = false;
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
{
DrawMode drawMode = DrawMode.ConnectingLineStraight;
RouterMode routerMode = RouterMode.RouterNormal;
if (source.NodeLevel == NodeLevel.Level1)
{
drawMode = DrawMode.ConnectingLineStraight;
routerMode = RouterMode.RouterFishBone;
}
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), drawMode, routerMode);
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
connector.ShapeViewModel.SinkMarker.PathStyle = source.ShapeViewModel.SinkMarker.PathStyle;
connector.ShapeViewModel.SinkMarker.SizeStyle = source.ShapeViewModel.SinkMarker.SizeStyle;
return connector;
}
public void LayoutUpdated(MindNode mindNode)
{
@@ -126,7 +151,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
var childrensizes = mindNode.Children.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
var lastchildsize = childrensizes.LastOrDefault();
sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Sum(p => p.Width) + lastchildsize.Height / 2 - lastchildsize.Width, sizewithSpacing.Height + childrensizes.Sum(p => p.Height));
sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Sum(p => p.Height) - lastchildsize.Height / 2 + lastchildsize.Width, sizewithSpacing.Height + childrensizes.Sum(p => p.Height));
}
else if (mindNode.NodeLevel == NodeLevel.Level3)
{
@@ -159,10 +184,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
//var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
//connect?.SetSourcePort(mindNode.BottomConnector);
//connect?.SetSinkPort(child.TopConnector);
//connect.Visible = child.Visible;
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.BottomLeftConnector);
connect?.SetVisible(child.Visible);
}
}
@@ -181,10 +206,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
//var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
//connect?.SetSourcePort(mindNode.BottomConnector);
//connect?.SetSinkPort(child.TopConnector);
//connect.Visible = child.Visible;
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.TopLeftConnector);
connect?.SetVisible(child.Visible);
}
}
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -8,6 +9,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public interface IMindLayout
{
void Appearance(MindNode mindNode);
ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink);
void LayoutUpdated(MindNode mindNode);
}

View File

@@ -75,6 +75,17 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
connector.ShapeViewModel.SinkMarker.PathStyle = source.ShapeViewModel.SinkMarker.PathStyle;
connector.ShapeViewModel.SinkMarker.SizeStyle = source.ShapeViewModel.SinkMarker.SizeStyle;
return connector;
}
public void LayoutUpdated(MindNode mindNode)
{
@@ -121,7 +132,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector ?? mindNode.FirstConnector);
connect?.SetSinkPort(child.LeftConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}

View File

@@ -76,6 +76,17 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
connector.ShapeViewModel.SinkMarker.PathStyle = source.ShapeViewModel.SinkMarker.PathStyle;
connector.ShapeViewModel.SinkMarker.SizeStyle = source.ShapeViewModel.SinkMarker.SizeStyle;
return connector;
}
public void LayoutUpdated(MindNode mindNode)
{
@@ -138,7 +149,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.LeftConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
var lefts = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.Right).ToList();
@@ -156,7 +167,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.RightConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}
}
@@ -180,7 +191,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.LeftConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}
}
@@ -202,7 +213,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.LeftConnector);
connect?.SetSinkPort(child.RightConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}
}

View File

@@ -54,6 +54,7 @@ namespace AIStudio.Wpf.Mind.Helpers
break;
}
case NodeLevel.Level3:
case NodeLevel.Level4:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -76,6 +77,18 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
connector.ShapeViewModel.SinkMarker.PathStyle = source.ShapeViewModel.SinkMarker.PathStyle;
connector.ShapeViewModel.SinkMarker.SizeStyle = sink.ShapeViewModel.SinkMarker.SizeStyle;
return connector;
}
public void LayoutUpdated(MindNode mindNode)
{
if (mindNode == null) return;
@@ -89,7 +102,6 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.GetLevel1Node().LayoutUpdating = false;
}
public SizeBase MeasureOverride(MindNode mindNode, bool isExpanded = true)
{
var sizewithSpacing = mindNode.SizeWithSpacing;
@@ -122,7 +134,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomConnector);
connect?.SetSinkPort(child.TopConnector);
connect.Visible = child.Visible;
connect?.SetVisible(child.Visible);
}
}