Beispiel #1
0
        public DirectedGraph ConvertToDMGL(freeGraph input)
        {
            DirectedGraph output = new DirectedGraph();

            output.Title = input.Id;

            // input.InverseWeights(false, true);

            nodeStyler = new NodeWeightStylerCategories(setup.NodeGradient, setup);
            linkStyler = new NodeWeightStylerCategories(setup.LinkGradient, setup);

            foreach (freeGraphNodeBase node in input.nodes)
            {
                try
                {
                    if (node != null)
                    {
                        var c = Categories.AddOrGetCategory(node.type.ToString(), "", "");
                        output.Categories.AddUnique(c);
                        nodeStyler.learn(node.type, node.weight);
                    }
                }
                catch (Exception ex)
                {
                    output.ConversionErrors.Add("Node learning-conversion: " + ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

            foreach (var link in input.links)
            {
                try
                {
                    if (link != null)
                    {
                        var c = Categories.AddOrGetCategory(link.type.ToString(), "", "");
                        output.Categories.AddUnique(c);
                        linkStyler.learn(link.type, link.weight);
                    }
                }
                catch (Exception ex)
                {
                    output.ConversionErrors.Add("link learning-conversion: " + ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

            foreach (freeGraphNodeBase node in input.nodes)
            {
                try
                {
                    if (node != null)
                    {
                        var nd = output.Nodes.AddNode(node.name);

                        nd.Category        = output.Categories[node.type].Id;
                        nd.Background      = nodeStyler.GetHexColor(node.weight, node.type);
                        nd.StrokeThinkness = nodeStyler.GetBorderThickness(node.weight, node.type);
                        nd.Stroke          = nodeStyler.GetHexColor(1, node.type);
                        nd.Label           = nd.Label + " (" + node.weight.ToString(setup.NodeWeightFormat) + ")";
                        if (setup.doAddNodeTypeToLabel)
                        {
                            nd.Label = nd.Label + " [" + node.type + "]";
                        }
                    }
                }
                catch (Exception ex)
                {
                    output.ConversionErrors.Add("Node conversion: " + ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

            foreach (var link in input.links)
            {
                try
                {
                    if (link != null)
                    {
                        var nodeA = input.GetNode(link.nodeNameA);
                        var nodeB = input.GetNode(link.nodeNameB);

                        var lnk = new Link(link.nodeNameA, link.nodeNameB, false);

                        if (setup.doLinkDirectionFromLowerTypeToHigher)
                        {
                            if (nodeB.type < nodeA.type)
                            {
                                lnk = new Link(link.nodeNameB, link.nodeNameA, false);
                            }
                        }

                        if (setup.doAddLinkWeightInTheLabel)
                        {
                            lnk.Label = lnk.Label.add(link.weight.ToString(setup.LinkWeightFormat));
                        }
                        else
                        {
                            lnk.Label = link.linkLabel;
                        }

                        lnk.Category        = output.Categories[link.type].Id;
                        lnk.Stroke          = linkStyler.GetHexColor(link.weight, link.type);
                        lnk.StrokeThinkness = linkStyler.GetBorderThickness(link.weight, link.type);
                        output.Links.Add(lnk);
                    }
                }
                catch (Exception ex)
                {
                    output.ConversionErrors.Add("Link conversion: " + ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

            output.Layout         = DGML.enums.GraphLayoutEnum.ForceDirected;
            output.GraphDirection = DGML.enums.GraphDirectionEnum.Sugiyama;

            return(output);
        }