Exemplo n.º 1
0
        private void deleteInvisibleNodes(GoLayoutForceDirectedNetwork net)
        {
            IList <GoLayoutForceDirectedNode> invisibleNodes = new List <GoLayoutForceDirectedNode>();

            foreach (GoLayoutForceDirectedNode netNode in net.Nodes)
            {
                if (netNode.GoObject == null || !netNode.GoObject.Visible)
                {
                    invisibleNodes.Add(netNode);
                }
            }

            foreach (var node in invisibleNodes)
            {
                net.DeleteNode(node);
            }

            IList <GoLayoutForceDirectedLink> invisibleLinks = new List <GoLayoutForceDirectedLink>();

            foreach (GoLayoutForceDirectedLink netLink in net.Links)
            {
                if (netLink.GoObject == null || !netLink.GoObject.Visible)
                {
                    invisibleLinks.Add(netLink);
                }
            }

            foreach (var Link in invisibleLinks)
            {
                net.DeleteLink(Link);
            }
        }
Exemplo n.º 2
0
        private void insertExternalNeighborLinks(IContainerNode parentContainerNode, GoLayoutForceDirectedNetwork net)
        {
            foreach (var childContainerNode in parentContainerNode.GetDirectChildren <IContainerNode>())
            {
                foreach (var neighborhoodNode in childContainerNode.GetLinkedNodes <INeighborhoodNode>())
                {
                    if (!parentContainerNode.ContainsChildNode(neighborhoodNode, true))
                    {
                        var  otherContainerNode = neighborhoodNode.GetOtherContainerNode(childContainerNode);
                        var  nodeOnBoundary     = new GoLayoutForceDirectedNode();
                        var  pos         = neighborhoodNode.Location;
                        bool pointExists = GoObject.GetNearestIntersectionPoint(parentContainerNode.Bounds, otherContainerNode.Center, childContainerNode.Center, out pos);

                        if (!pointExists)
                        {
                            continue;
                        }

                        //to be not deleted due to invisible node, seems to set also the position
                        nodeOnBoundary.GoObject  = neighborhoodNode as GoObject;
                        nodeOnBoundary.IsFixed   = true;
                        nodeOnBoundary.UserFlags = NodeLayoutType.REMOTE_CONTAINER_BOUNDARY_NODE;

                        //set Position after setting GoObject, because setting GoObject seems to set position
                        nodeOnBoundary.Position = pos;
                        net.AddNode(nodeOnBoundary);
                        net.LinkNodes(net.FindNode(childContainerNode as GoObject), nodeOnBoundary, neighborhoodNode as GoObject);
                    }
                }
            }
        }
Exemplo n.º 3
0
        private void PrintLinks(string prefix, GoLayoutForceDirectedNetwork net)
        {
            string text = "";

            foreach (var netLink in net.Links)
            {
                text += NodeText(netLink.FromNode) + "-" + NodeText(netLink.ToNode) + "; ";
            }
            Console.WriteLine(prefix + " " + text + "\n");
        }
Exemplo n.º 4
0
        private void PrintNodes(string prefix, GoLayoutForceDirectedNetwork net)
        {
            string text = "";

            foreach (var netNode in net.Nodes)
            {
                text += NodeText(netNode) + NodePosition(netNode) + "; ";
            }
            Console.WriteLine(prefix + " " + text + "\n");
        }
Exemplo n.º 5
0
        private void setNodeType(GoLayoutForceDirectedNetwork net, IList <IHasLayoutInfo> freeNodes)
        {
            foreach (GoLayoutForceDirectedNode netNode in net.Nodes)
            {
                IHasLayoutInfo hasLayoutInfo = netNode.GoObject as IHasLayoutInfo;
                if (hasLayoutInfo != null && netNode.UserFlags == 0)
                {
                    netNode.IsFixed = hasLayoutInfo.LocationFixed ||
                                      hasLayoutInfo.IsAnImplementationOf <PortNode>() ||
                                      (freeNodes != null && !freeNodes.Contains(hasLayoutInfo));
                    netNode.UserFlags = hasLayoutInfo.UserFlags;

                    // position linkless nodes by gravitational force (fix positioning seems not so easy because of moving bounds)
                    if (netNode.LinksCount == 0)
                    {
                        netNode.UserFlags = NodeLayoutType.LINKLESS_NODE;                     //try to position linkless nodes by grav force,
                    }
                }
            }
        }
Exemplo n.º 6
0
        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);
            }
        }