Example #1
1
        private void SetGraph()
        {
            var graph = new Graph();
            graph.AddEdge("a", "b");
            graph.AddEdge("e", "b");
            graph.AddEdge("d", "b");
            graph.AddEdge("b", "c");

            graph.AddEdge("a22", "b22");
            graph.AddEdge("e22", "b22");
            graph.AddEdge("d22", "b22");
            graph.AddEdge("b22", "c22");

            graph.AddEdge("a0", "b0");
            graph.AddEdge("b0", "c0");

            graph.AddEdge("a33", "b33");
            graph.AddEdge("e33", "b33");
            graph.AddEdge("d33", "b33");
            graph.AddEdge("b33", "c33");

            graph.AddEdge("a11", "b11");
            graph.AddEdge("b11", "c11").LabelText = "Test labels!";

            graph.CreateGeometryGraph();
            foreach (Node node in graph.Nodes)
                node.GeometryNode.BoundaryCurve = CreateLabelAndBoundary(node);

            foreach (var edge in graph.Edges) {
                if (edge.Label != null) {
                    var geomEdge = edge.GeometryEdge;
                    double width;
                    double height;
                    StringMeasure.MeasureWithFont(edge.LabelText,
                                                  new Font(edge.Label.FontName, (float)edge.Label.FontSize), out width, out height);
                    edge.Label.GeometryLabel=geomEdge.Label = new Label(width, height, geomEdge);
                }

            }

            var geomGraph=graph.GeometryGraph;

            var geomGraphComponents = GraphConnectedComponents.CreateComponents(geomGraph.Nodes, geomGraph.Edges);
            var settings = new SugiyamaLayoutSettings();
            foreach (var subgraph in geomGraphComponents) {

                var layout=new LayeredLayout(subgraph, settings);
                subgraph.Margins = settings.NodeSeparation/2;
                layout.Run();

            }

               Microsoft.Msagl.Layout.MDS.MdsGraphLayout.PackGraphs(geomGraphComponents, settings);

            geomGraph.UpdateBoundingBox();

            gViewer1.NeedToCalculateLayout = false;
            gViewer1.Graph = graph;
        }
Example #2
0
        static Graph CtreateDrawingGraph(out FastIncrementalLayoutSettings settings)
        {
            settings = new FastIncrementalLayoutSettings { RouteEdges = true, NodeSeparation = 30};
            var drawingGraph = new Graph();
            const string id0 = "0";
            const string id1 = "1";
            AddEdge(drawingGraph, id0, id1);
            AddEdge(drawingGraph, "0", "2");
            AddEdge(drawingGraph, "1", "3");
            AddEdge(drawingGraph, "2", "4");
            AddEdge(drawingGraph, "2", "5");
            AddEdge(drawingGraph, "2", "6");
            AddEdge(drawingGraph, "5", "7");
            AddEdge(drawingGraph, "5", "6");
            AddEdge(drawingGraph, "7", "8");
            AddEdge(drawingGraph, "8", "6");

            drawingGraph.CreateGeometryGraph();
            foreach (Microsoft.Msagl.Drawing.Node node in drawingGraph.Nodes) {
                double w, h;
                var label = node.Label;
                var font = new Font(label.FontName, (float)label.FontSize);
                StringMeasure.MeasureWithFont(label.Text, font, out w, out h);
                node.Label.Width = w;
                node.Label.Height = h;
                node.Attr.Shape = Shape.DrawFromGeometry;
                node.GeometryNode.BoundaryCurve=CurveFactory.CreateRectangleWithRoundedCorners(1.2*w,1.2*h,3,3,new Point());
            }

            return drawingGraph;
        }
Example #3
0
        void ShowGraph(bool showMes)
        {
            this.groupBoxResult.Controls.Clear();
            Microsoft.Msagl.GraphViewerGdi.GViewer viewer = new Microsoft.Msagl.GraphViewerGdi.GViewer();
            Microsoft.Msagl.Drawing.Graph          graph  = new Microsoft.Msagl.Drawing.Graph("graph");
            graph.CreateGeometryGraph();
            int i = 1;

            foreach (var item in lstPoint)
            {
                Node node = new Node(i.ToString());
                node.Attr.Shape = Shape.Circle;
                graph.AddNode(node);
                i++;
            }

            graph.FindNode((this.start + 1).ToString()).Attr.FillColor = Color.Blue;
            graph.FindNode((this.end + 1).ToString()).Attr.FillColor   = Color.Red;
            viewer.Pan(5, 2);
            for (int j = 0; j < this.soDinh; j++)
            {
                for (int k = 0; k < this.soDinh; k++)
                {
                    if (this.distance[j, k] != this.VOCUNG && this.distance[j, k] != 0)
                    {
                        String tmp = "," + (j + 1).ToString() + "," + (k + 1).ToString() + ",";
                        double dis = Math.Round(this.distance[j, k], 2);
                        if (this.path.Contains(tmp))
                        {
                            if (this.checkBox.Checked)
                            {
                                graph.AddEdge((j + 1).ToString(), dis.ToString(), (k + 1).ToString()).Attr.Color = Color.Green;
                            }
                            else
                            {
                                graph.AddEdge((j + 1).ToString(), (k + 1).ToString()).Attr.Color = Color.Green;
                            }
                            // Microsoft.Msagl.Core.Layout.Node node = new Microsoft.Msagl.Core.Layout.Node(1, 2);
                        }
                        else
                        {
                            if (this.checkBox.Checked)
                            {
                                graph.AddEdge((j + 1).ToString(), dis.ToString(), (k + 1).ToString());
                            }
                            else
                            {
                                graph.AddEdge((j + 1).ToString(), (k + 1).ToString());
                            }
                        }
                    }
                }
            }

            /*graph.AddEdge("A", "C").Attr.Color = Microsoft.Msagl.Drawing.Color.Green;
             * Edge edge = new Edge("14","sonnx","15");
             *
             * graph.AddEdge("14", "sonnx", "15");
             * graph.FindNode("A").Attr.FillColor = Microsoft.Msagl.Drawing.Color.Magenta;
             * graph.FindNode("B").Attr.FillColor = Microsoft.Msagl.Drawing.Color.MistyRose;
             * Microsoft.Msagl.Drawing.Node c = graph.FindNode("C");
             * c.Attr.FillColor = Microsoft.Msagl.Drawing.Color.PaleGreen;
             * c.Attr.Shape = Microsoft.Msagl.Drawing.Shape.Circle;*/


/*
 *
 *          Microsoft.Msagl.Core.Geometry.Point p1 = new Microsoft.Msagl.Core.Geometry.Point(-497.12352212078628, 1689.84931190121);
 *          Microsoft.Msagl.Core.Geometry.Point p2 = new Microsoft.Msagl.Core.Geometry.Point(198.64235142705752, 2139.4677380013277);
 *          Microsoft.Msagl.Core.Geometry.Point bl = new Microsoft.Msagl.Core.Geometry.Point(-5191.0147700187063, -4395.7850131819132);
 *          double gridSize = 553.23948409846571;
 *
 *          GridTraversal grid = new GridTraversal(new Rectangle(bl, bl + new Microsoft.Msagl.Core.Geometry.Point(gridSize, gridSize)), 20);
 *          var tiles = grid.GetTilesIntersectedByLineSeg(p1, p2);
 */


            //bind the graph to the viewer
            viewer.Graph = graph;
            // viewer.Click += new EventHandler(Group_Click);
            //  viewer.MouseClick += new MouseEventHandler(Group_Click);
            this.groupBoxResult.SuspendLayout();
            viewer.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBoxResult.Controls.Add(viewer);
            this.groupBoxResult.ResumeLayout();

            if (showMes)
            {
                if (this.daxet[this.end])
                {
                    MessageBox.Show("Độ dài đường đi ngắn nhất " + (Math.Round(d[this.end], 2)).ToString(), "Thành công");
                    this.txtLoTrinh.Text = this.path;
                    this.txtDoDai.Text   = (Math.Round(d[this.end], 2)).ToString();
                }
                else
                {
                    MessageBox.Show("Không tìm được đường đi ngắn nhất", "Có lỗi xảy ra");
                    this.txtLoTrinh.Text = "";
                    this.txtDoDai.Text   = "";
                }
            }
        }
        static Graph CreateGraphFromParsedStuff(Dictionary<string, Tuple<int, int, int, int>> labelsToGeom, List<Tuple<string, string>> edges) {
            var graph = new Graph();
            foreach (var label in labelsToGeom.Keys)
                graph.AddNode(label);
            foreach (var tuple in edges) {
                var e=graph.AddEdge(tuple.Item1, tuple.Item2);
                e.Attr.ArrowheadAtTarget = ArrowStyle.None;

            }

            graph.CreateGeometryGraph();
            foreach (var node in graph.Nodes) {
                var tuple = labelsToGeom[node.Id];
                int centerX = tuple.Item1;
                int centerY = tuple.Item2;
                int w=tuple.Item3;
                int h = tuple.Item4;

                node.GeometryNode.BoundaryCurve = new RoundedRect(
                    new Rectangle(centerX-(double)w/2, centerY-(double)h/2, new Microsoft.Msagl.Core.Geometry.Point(tuple.Item3, tuple.Item4)), 3, 3);
            }

            var router = new SplineRouter(graph.GeometryGraph, 1, 1, Math.PI / 6, null);
            router.Run();
            graph.GeometryGraph.UpdateBoundingBox();
            //LayoutAlgorithmSettings.ShowGraph(graph.GeometryGraph);

            return graph;
        }