in GraphLayout/MSAGL/GraphmapsWithMesh/Tiling.cs [1076:1149]
public void ComputeDetourAroundVertex(WeightedPoint[] pt, int numPoints)
{
for (int i = numPoints; i >= 1; i--)
{
var x = pt[i].X;
var y = pt[i].Y;
int neighb;
if (x + 1 < N && y + 1 < N && NodeMap[x + 1, y + 1] > 0 &&
x + 2 < N && y < N && NodeMap[x + 2, y] > 0)
{
for (neighb = 1; neighb <= DegList[NodeMap[x + 1, y + 1]]; neighb++)
{
if (EList[NodeMap[x + 1, y + 1], neighb].NodeId == VList[NodeMap[x + 2, y]].Id)
{
SelectEdge(EList, DegList, VList[NodeMap[x + 1, y + 1]], VList[EList[NodeMap[x + 1, y + 1], neighb].NodeId], 6);
break;
}
}
}
if (x + 1 > 0 && y - 1 > 0 && NodeMap[x + 1, y - 1] > 0 &&
x + 2 < N && y < N && NodeMap[x + 2, y] > 0)
{
for (neighb = 1; neighb <= DegList[NodeMap[x + 1, y - 1]]; neighb++)
{
if (EList[NodeMap[x + 1, y - 1], neighb].NodeId == VList[NodeMap[x + 2, y]].Id)
{
SelectEdge(EList, DegList, VList[NodeMap[x + 1, y - 1]], VList[EList[NodeMap[x + 1, y - 1], neighb].NodeId], 6);
break;
}
}
}
if (x - 1 > 0 && y - 1 > 0 && NodeMap[x - 1, y - 1] > 0 &&
x - 2 > 0 && y > 0 && NodeMap[x - 2, y] > 0)
{
for (neighb = 1; neighb <= DegList[NodeMap[x - 1, y - 1]]; neighb++)
{
if (EList[NodeMap[x - 1, y - 1], neighb].NodeId == VList[NodeMap[x - 2, y]].Id)
{
SelectEdge(EList, DegList, VList[NodeMap[x - 1, y - 1]], VList[EList[NodeMap[x - 1, y - 1], neighb].NodeId], 6);
break;
}
}
}
if (x - 1 > 0 && y + 1 < N && NodeMap[x - 1, y + 1] > 0 &&
x - 2 > 0 && y > 0 && NodeMap[x - 2, y] > 0)
{
for (neighb = 1; neighb <= DegList[NodeMap[x - 1, y + 1]]; neighb++)
{
if (EList[NodeMap[x - 1, y + 1], neighb].NodeId == VList[NodeMap[x - 2, y]].Id)
{
SelectEdge(EList, DegList, VList[NodeMap[x - 1, y + 1]], VList[EList[NodeMap[x - 1, y + 1], neighb].NodeId], 6);
break;
}
}
}
if (x - 1 > 0 && y + 1 < N && NodeMap[x - 1, y + 1] > 0 &&
x + 1 < N && y + 1 < N && NodeMap[x + 1, y + 1] > 0)
{
for (neighb = 1; neighb <= DegList[NodeMap[x - 1, y + 1]]; neighb++)
{
if (EList[NodeMap[x - 1, y + 1], neighb].NodeId == VList[NodeMap[x + 1, y + 1]].Id)
{
SelectEdge(EList, DegList, VList[NodeMap[x - 1, y + 1]], VList[EList[NodeMap[x - 1, y + 1], neighb].NodeId], 6);
break;
}
}
}
}
}