//Расчет координат для узлов карты public void CalcCoordinates() { //:todo: убрать индексацию по i ProcessingCoordsMode eMode = (ProcessingCoordsMode)graph.Settings.ProcessingCoordsMode; var gl = new OGDF.GraphLayout(); for (var i = 0; i < graph.Nodes.Length; i++) { gl.AddVertex(i.ToString()); } foreach (var l in graph.Links) { gl.AddVertexLink(l.source.ToString(), l.target.ToString()); } //выполнить расчет gl.ProcessingCoords(eMode); //запомнить результат for (var i = 0; i < graph.Nodes.Length; i++) { PointF pt = gl.GetVertexCoords(i.ToString()); var n = graph.Nodes[i]; n.X = pt.X; n.Y = pt.Y; } gl.ClearAll(); }
public void ProcessRequest(HttpContext context) { try { if (context.Request["v"] == "2") { DoSizedLayout(context); return; } var mode = (ProcessingCoordsMode)int.Parse(context.Request["type"]); var nodes = int.Parse(context.Request["nodes"]); var list = new ArrayList(); var gl = new OGDF.GraphLayout(); for (var i = 0; i < nodes; i++) { gl.AddVertex(i.ToString()); } var links = context.Request.Form.GetValues("l[]"); if (links != null) { foreach (var s in links) { var ar = s.Split('t'); gl.AddVertexLink(ar[0], ar[1]); } } //выполнить расчет gl.ProcessingCoords(mode); //запомнить результат for (var i = 0; i < nodes; i++) { var pt = gl.GetVertexCoords(i.ToString()); list.Add(new { X = pt.X, Y = pt.Y }); } gl.ClearAll(); GzipResponseContent(context); context.Response.ContentType = "application/json"; var bytes = System.Text.Encoding.UTF8.GetBytes(SerializeJson(list)); //---context.Response.AppendHeader("Content-Length", bytes.Length.ToString()); context.Response.OutputStream.Write(bytes, 0, bytes.Length); //context.Response.Flush(); } catch (Exception ex) { //log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType ).Error( "Layout general error", ex ); throw ex; } }