Relink issue with not visible port

Hi there,

some time ago we have discovered that on big diagrams, with multiple nodes and links, changing links source is a bit difficult to make - when the destination port (or links end) is not visible. I cannot attach here the video, so you can check this example here:

We use the same objects and templates, as mentioned here:
https://forum.nwoods.com/t/strange-scrolling-behavior/13516/26

The only modification, after layout is complete we do is :

private void DoOnLayoutComplete(object sender, DiagramEventArgs e)
		{
			Diagram.LayoutCompleted -= DoOnLayoutComplete;
			foreach (Link link in Diagram.Links)
			{
				var d = link.Data as ConfigLinkDiagramModel;
				if (d == null || d.Points == null) continue;
				link.Route.Points = d.Points.ToList();
			}
			OnBusyChanged(false);
		}

Is this a typical behavior of the diagram? Can we somehow change it?

Best regards.

That’s odd. Have you implemented any kind of virtualization?

No. No Virtualization.

Is your Diagram.LayoutCompleted event handler being called at any time during the attempt to reconnect that existing link?

In my tests I have been unable to reproduce the problem. Could you please help us with a reproducible example?

Problem is not with Layout, but with snaping links to ports.
It is happening in method CheckLinkValid, but sometimes it won’t be snapped, and this method is not firing.

And then I have this kind of situation:
ports

Are you saying that the problem only happens during a RelinkingTool operation? With a port that is not seen because it is outside of the viewport?

If you scroll or zoom so that both nodes and ports are shown in the viewport, does relinking work as normal?

Could you please describe more precisely how to reproduce the problem?

This is exactly what is happening. When second port is not visible at the time, the relinking operation is impossible.

After scroll to destination port, i have no problem with relinking.

Try turning off one of our internal optimizations:

myDiagram.InitialLayoutCompleted += (s, e) => {
  myDiagram.Panel.Unsupported(23, false);
};

Thanks, it works!