예제 #1
0
        /// <summary>
        /// GraphViz library használata layout generálásra
        /// </summary>
        /// <param name="layoutType">SFDP a legjobb</param>
        public void GenerateLayout(GraphVizWrapper.Enums.RenderingEngine layoutType)
        {
            List <Node> Nodes = GetNodeList();

            if (Nodes.Count < 1)
            {
                return;
            }
            //Cursor = Cursors.WaitCursor;
            double NodeR = XFVM.BaseSize / 2 / Math.Sqrt(Nodes.Count);

            //put all connections into digraph, read by graphviz
            string digraph = "digraph{";

            foreach (Node n in Nodes)
            {
                foreach (ConnVM To in n.GetXF().GetConns())
                {
                    digraph += Nodes.IndexOf(n) + " -> " + Nodes.IndexOf(GetNodeFromXF(To.ConnTo)) + ";";
                }
            }
            digraph += "}";

            //graphviz library to generate layout
            var getStartProcessQuery        = new GraphVizWrapper.Queries.GetStartProcessQuery();
            var getProcessStartInfoQuery    = new GraphVizWrapper.Queries.GetProcessStartInfoQuery();
            var registerLayoutPluginCommand = new GraphVizWrapper.Commands.RegisterLayoutPluginCommand(getProcessStartInfoQuery, getStartProcessQuery);
            var wrapper = new GraphVizWrapper.GraphGeneration(getStartProcessQuery, getProcessStartInfoQuery, registerLayoutPluginCommand);

            wrapper.RenderingEngine = layoutType;//twopi vagy sfdp nez ki legjobban
            string[] output = System.Text.Encoding.Default.GetString(wrapper.GenerateGraph(digraph, GraphVizWrapper.Enums.GraphReturnType.Plain)).Replace('.', ',').Split('\n');

            int rowNr = 0;

            string[] firstRow  = output[rowNr].Split(' ');
            double   outWidth  = Double.Parse(firstRow[2]);
            double   outHeight = Double.Parse(firstRow[3]);

            while (++rowNr < output.Length)
            {
                string[] row = output[rowNr].Split(' ');
                if (row[0] == "node")
                {
                    Node n = Nodes[int.Parse(row[1])];
                    n.PosX = NodeR + (Double.Parse(row[2]) / outWidth) * (Width - 2 * NodeR);
                    n.PosY = NodeR + (Double.Parse(row[3]) / outHeight) * (Height - 2 * NodeR);
                }
                else
                {
                    break;
                }
            }

            updateConnections();
            //Cursor = Cursors.Default;
        }
예제 #2
0
        public GraphGenerator()
        {
            var getStartProcessQuery = new GetStartProcessQuery();
            var getProcessStartInfoQuery = new GetProcessStartInfoQuery();
            var registerLayoutPluginCommand = new RegisterLayoutPluginCommand(getProcessStartInfoQuery, getStartProcessQuery);

            _wrapper = new GraphGeneration(getStartProcessQuery,
                                              getProcessStartInfoQuery,
                                              registerLayoutPluginCommand);
        }
예제 #3
0
 void InitialiseDotWrapper()
 {
     var getStartProcessQuery = new GetStartProcessQuery();
     var getProcessStartInfoQuery = new GetProcessStartInfoQuery();
     var registerLayoutPluginCommand = new RegisterLayoutPluginCommand(getProcessStartInfoQuery, getStartProcessQuery);
     wrapper = new GraphGeneration(getStartProcessQuery, getProcessStartInfoQuery, registerLayoutPluginCommand);
 }
        public async Task<List<byte[]>> DrawGraph(List<int>[][] orginalAutomaton, List<int>[][] foundAutomaton)
        {
            List<byte[]> graphs = new List<byte[]>();
            await Task.Run(() => 
                {
                    var getStartProcessQuery = new GetStartProcessQuery();
            var getProcessStartInfoQuery = new GetProcessStartInfoQuery();
            var registerLayoutPluginCommand = new RegisterLayoutPluginCommand(getProcessStartInfoQuery, getStartProcessQuery);

            // GraphGeneration can be injected via the IGraphGeneration interface

            var wrapper = new GraphGeneration(getStartProcessQuery,
                                              getProcessStartInfoQuery,
                                              registerLayoutPluginCommand);



            byte[] orginal = wrapper.GenerateGraph(GenerateDotString(orginalAutomaton), Enums.GraphReturnType.Png);
            byte[] found = wrapper.GenerateGraph(GenerateDotString(foundAutomaton), Enums.GraphReturnType.Png);

            graphs.Add(orginal);
            graphs.Add(found);
                }
            );
            return graphs;
            
        }