示例#1
0
        //Расчет координат для узлов карты
        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();
        }
示例#2
0
        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;
            }
        }