/// <summary> /// Returns link instance, detached from the <see cref="freeGraph"/> model /// </summary> /// <param name="link">The link.</param> /// <param name="skipCheck">if set to <c>true</c> [skip check].</param> /// <returns></returns> public freeGraphLink GetLinkInstance(freeGraphLinkBase link, Boolean skipCheck = true) { freeGraphLink output = new freeGraphLink(link.GetClone()); output.nodeA = GetNode(link.nodeNameA, skipCheck); if (output.nodeA != null) { output.nodeA = output.nodeA.GetQueryResultClone(0); } output.nodeB = GetNode(link.nodeNameB, skipCheck); if (output.nodeB != null) { output.nodeB = output.nodeB.GetQueryResultClone(0); } return(output); }
/// <summary> /// Gets the links. /// </summary> /// <param name="nodeName">Name of the node.</param> /// <param name="AtoB">if set to <c>true</c> [ato b].</param> /// <param name="BtoA">if set to <c>true</c> [bto a].</param> /// <param name="nodeWeightFactor">The node weight factor.</param> /// <param name="nodeType">Type of the node.</param> /// <param name="skipCheck">if set to <c>true</c> [skip check].</param> /// <param name="initialWeightFromParent">if set to <c>true</c> [initial weight from parent].</param> /// <returns></returns> public freeGraphNodeAndLinks GetLinks(String nodeName, Boolean AtoB = true, Boolean BtoA = true, Double nodeWeightFactor = 1.0, Int32 nodeType = 0, Boolean skipCheck = true, Boolean initialWeightFromParent = true) { //if (!nodeDictionary.ContainsKey(nodeName)) return null; freeGraphNodeAndLinks output = new freeGraphNodeAndLinks(); //List<freeGraphLinkBase> lnks = new List<freeGraphLinkBase>(); if (skipCheck) { if (AtoB) { output.links.AddRange(links.Where(x => x.nodeNameA.Equals(nodeName))); } if (BtoA) { output.links.AddRange(links.Where(x => x.nodeNameB.Equals(nodeName))); } } else { output.links.AddRange(linkRegistry.GetLinks(nodeName, AtoB, BtoA)); } output.node = GetNode(nodeName, skipCheck); foreach (freeGraphLinkBase link in output.links) { freeGraphLink link_instance = GetLinkInstance(link, skipCheck); if (link_instance.IsReady) { if (link_instance.nodeA.name != nodeName) { if (initialWeightFromParent) { link_instance.nodeA.weight = link_instance.nodeA.weight * nodeWeightFactor; } else { link_instance.nodeA.weight = 1 * nodeWeightFactor; } } if (link_instance.nodeB.name != nodeName) { if (initialWeightFromParent) { link_instance.nodeB.weight = link_instance.nodeB.weight * nodeWeightFactor; } else { link_instance.nodeB.weight = 1 * nodeWeightFactor; } } if (link_instance.nodeA.name != nodeName) { link_instance.nodeA.type = nodeType; } if (link_instance.nodeB.name != nodeName) { link_instance.nodeB.type = nodeType; } output.Add(link_instance); if (!output.linkedNodeClones.ContainsKey(link_instance.nodeA.name)) { output.linkedNodeClones.Add(link_instance.nodeA.name, link_instance.nodeA); } if (!output.linkedNodeClones.ContainsKey(link_instance.nodeB.name)) { output.linkedNodeClones.Add(link_instance.nodeB.name, link_instance.nodeB); } } } return(output); }