public void Evaluate(int SpreadMax) { bool userchanged = false; #region Build Links if (this.FPinInUsers.PinIsChanged) { this.FUsers.Clear(); this.FLinks.Clear(); try { for (int i = 0; i < this.FPinInUsers.SliceCount; i++) { string user; this.FPinInUsers.GetString(i, out user); this.FUsers.Add(user); } #region Execute FQl and parse result string fql = this.GetFQL(this.FUsers); string result = api.DirectFQLQuery(fql); XmlDocument doc = new XmlDocument(); doc.LoadXml(result); XmlElement element = doc.DocumentElement; foreach (XmlNode noderoot in doc.ChildNodes) { if (noderoot.Name == "fql_query_response") { foreach (XmlNode node in noderoot.ChildNodes) { if (node.Name == "friend_info") { string uid1 = ""; string uid2 = ""; foreach (XmlNode nodeuid in node.ChildNodes) { if (nodeuid.Name == "uid1") { uid1 = nodeuid.InnerText; } if (nodeuid.Name == "uid2") { uid2 = nodeuid.InnerText; } } if (uid1 != "" && uid2 != "") { UserLink link = new UserLink(); link.User1 = uid1; link.User2 = uid2; link.Index1 = this.FUsers.IndexOf(uid1); link.Index2 = this.FUsers.IndexOf(uid2); this.FLinks.Add(link); } } } } } #endregion } catch (Exception ex) { Console.WriteLine("Error"); } userchanged = true; } #endregion if (userchanged || this.FPinInX.PinIsChanged || this.FPinInY.PinIsChanged) { List <double> lstx = new List <double>(); List <double> lsty = new List <double>(); int idx = 0; int idy = 0; #region Build Points for (int i = 0; i < this.FPinInUsers.SliceCount; i++) { double d; this.FPinInX.GetValue(idx, out d); lstx.Add(d); this.FPinInY.GetValue(idy, out d); lsty.Add(d); idx++; idy++; if (idx >= this.FPinInX.SliceCount) { idx = 0; } if (idy >= this.FPinInY.SliceCount) { idy = 0; } } #endregion this.FPinOutX1.SliceCount = this.FLinks.Count; this.FPinOutX2.SliceCount = this.FLinks.Count; this.FPinOutY1.SliceCount = this.FLinks.Count; this.FPinOutY2.SliceCount = this.FLinks.Count; for (int i = 0; i < this.FLinks.Count; i++) { this.FPinOutX1.SetValue(i, lstx[this.FLinks[i].Index1]); this.FPinOutX2.SetValue(i, lstx[this.FLinks[i].Index2]); this.FPinOutY1.SetValue(i, lsty[this.FLinks[i].Index1]); this.FPinOutY2.SetValue(i, lsty[this.FLinks[i].Index2]); } } }