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"); }