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

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
namespace AIStudio.Wpf.DiagramDesigner
{
public class RouterFishBone : IRouter
{
public PointBase[] Get(IDiagramViewModel _, ConnectionViewModel link)
{
return Routers.FishBone(_, link);
}
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
// Implementation taken from the JS version: https://gist.github.com/menendezpoo/4a8894c152383b9d7a870c24a04447e4
// Todo: Make it more c#, Benchmark A* vs Dijkstra, Add more options
namespace AIStudio.Wpf.DiagramDesigner
{
public static partial class Routers
{
public static PointBase[] FishBone(IDiagramViewModel _, ConnectionViewModel link)
{
if (link.IsPortless)
throw new Exception("Orthogonal router doesn't work with portless links yet");
if (link.IsFullConnection == false)
return Normal(_, link);
double x2 = link.SourceConnectorInfo.MiddlePosition.X < link.SinkConnectorInfoFully.MiddlePosition.X ?
link.SinkConnectorInfoFully.MiddlePosition.X - Math.Abs(link.SourceConnectorInfo.MiddlePosition.Y - link.SinkConnectorInfoFully.MiddlePosition.Y)
: link.SinkConnectorInfoFully.MiddlePosition.X + Math.Abs(link.SourceConnectorInfo.MiddlePosition.Y - link.SinkConnectorInfoFully.MiddlePosition.Y);
double y2 = link.SourceConnectorInfo.MiddlePosition.Y;
return new PointBase[] { new PointBase(x2, y2) };
}
}
}

View File

@@ -38,6 +38,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
shapeMargin = 0;
inflatedA = shapeA;
inflatedB = shapeB;
}