Example #1
0
        private string GenerateSvg()
        {
            var g = new Graph();

            g.ColorScheme = "svg";
            g.RankDir     = RankDirType.LR;
            foreach (var cls in Model.Classes.Values)
            {
                if (cls.TargetClass.Compiled.Attr("nosvg").ToBool())
                {
                    continue;
                }
                var n = new Node {
                    Code = cls.Name, Label = cls.Name, Tooltip = cls.Comment, Shape = NodeShapeType.Box3d
                };
                var dotcolor = cls.TargetClass.Compiled.Attr("dot-color");
                if (!string.IsNullOrWhiteSpace(dotcolor))
                {
                    n.Style     = NodeStyleType.Filled;
                    n.FillColor = ColorAttribute.Single(Color.Create(dotcolor));
                }
                g.AddNode(n);
                foreach (var r in cls.GetReferences())
                {
                    if (r.NoSql)
                    {
                        continue;
                    }
                    if (null == r.ReferenceClass.TargetClass)
                    {
                        continue;
                    }
                    if (r.ReferenceClass.TargetClass.Compiled.Attr("nosvg").ToBool())
                    {
                        continue;
                    }
                    var e = new Edge {
                        From = cls.Name, To = r.ReferenceClass.Name, ArrowHead = new Arrow {
                            MainType = ArrowType.Normal
                        }
                    };
                    if (r.IsReverese)
                    {
                        e.ArrowTail = new Arrow {
                            MainType = ArrowType.Diamond
                        };
                    }
                    g.AddEdge(e);
                }
            }
            var provider = new DotGraphProvider();
            var render   = GraphRender.Create(g);
            var script   = render.GenerateGraphScript();

            var svg = provider.Generate(script, new GraphOptions {
                Format = "svg"
            });

            return(svg.ToString());
        }
        /// <summary>
        /// Выполнение цели
        /// </summary>
        /// <param name="context"></param>
        public override void Execute(IBSharpContext context)
        {
            Project.Log.Info("Start GenerateClassGraphTask");
            var graph   = BuildGraph(context);
            var dot     = GraphRender.Create(graph).GenerateGraphScript();
            var dotfile = Path.Combine(Project.GetOutputDirectory(), "project.dot");

            File.WriteAllText(dotfile, dot);
            var dotr    = new DotGraphProvider();
            var svg     = dotr.Generate(dot, new GraphOptions());
            var svgfile = Path.Combine(Project.GetOutputDirectory(), "project.svg");

            File.WriteAllText(svgfile, (string)svg);
            Project.Log.Info("Finish GenerateClassGraphTask");
        }