private void replaceInnerNeighborhoodNodesByDirectLinks(IContainerBase containerBase, GoLayoutForceDirectedNetwork net) { // replace neighborhood nodes and neighbor links by direct links between the nodes they connect (ContainerNodes or PortNodes) foreach (var neighborHoodNode in containerBase.GetDirectChildren <INeighborhoodNode>()) { var fromLink = net.FindLink(neighborHoodNode.FirstNeighborLink as GoObject); var toLink = net.FindLink(neighborHoodNode.SecondNeighborLink as GoObject); if (fromLink == null || toLink == null) { continue; } var netLink = new GoLayoutForceDirectedLink { FromNode = fromLink.ToNode, ToNode = toLink.ToNode }; netLink.GoObject = neighborHoodNode as GoObject; netLink.Length = Config.BaseSpringLength * Config.RelativeSpringLengthOf[NodeLayoutType.CONTAINER_NODE, NodeLayoutType.CONTAINER_NODE].Value; netLink.Stiffness = Config.BaseSpringLength * Config.RelativeSpringStiffnessOf[NodeLayoutType.CONTAINER_NODE, NodeLayoutType.CONTAINER_NODE].Value; net.DeleteNode(neighborHoodNode as GoObject); net.AddLink(netLink); } }
protected override float SpringLength(GoLayoutForceDirectedLink pLink) { GoLayoutForceDirectedNode pFromNode = pLink.FromNode; int fromGroup = pFromNode.UserFlags; GoLayoutForceDirectedNode pToNode = pLink.ToNode; int toGroup = pToNode.UserFlags; if (fromGroup >= 0 && fromGroup < NUMBER_OF_GROUPS && toGroup >= 0 && toGroup < NUMBER_OF_GROUPS && Config.RelativeSpringLengthOf[fromGroup, toGroup].HasValue) { float length = Config.BaseSpringLength * Config.RelativeSpringLengthOf[fromGroup, toGroup].Value; float fromSizefactor = pFromNode.Width / 150F * pFromNode.Height / 50F; float toSizefactor = pToNode.Width / 150F * pToNode.Height / 50F; float sizefactor = (float)(Math.Sqrt(fromSizefactor + toSizefactor)); if (sizefactor > 40) { sizefactor = 40F; } return(length * sizefactor); } return(Config.BaseSpringLength); }