mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
34 lines
1.3 KiB
C#
34 lines
1.3 KiB
C#
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.SourceConnectorInfoFully.MiddlePosition.X < link.SinkConnectorInfoFully.MiddlePosition.X ?
|
|
link.SinkConnectorInfoFully.MiddlePosition.X - Math.Abs(link.SourceConnectorInfoFully.MiddlePosition.Y - link.SinkConnectorInfoFully.MiddlePosition.Y)
|
|
: link.SinkConnectorInfoFully.MiddlePosition.X + Math.Abs(link.SourceConnectorInfoFully.MiddlePosition.Y - link.SinkConnectorInfoFully.MiddlePosition.Y);
|
|
double y2 = link.SourceConnectorInfoFully.MiddlePosition.Y;
|
|
|
|
return new PointBase[] { new PointBase(x2, y2) };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|