Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs @ 10302

Last change on this file since 10302 was 10302, checked in by bburlacu, 10 years ago

#1772: - Added a ViewHost in the right side of the GenealogyGraphView which displays the encoding-specific content when a GenealogyGraphNode is clicked.

  • Migrated new SymbolicExpressionTreeChart (drawing the tree using the ReingoldTilfordLayoutEngine) to the new branch
  • Copied SymbolicDataAnalysisExpressionTreeMatching.cs and SymbolicDataAnalysisExpressionTreeSimilarityCalculator.cs to the new branch
File size: 2.3 KB
Line 
1using System.Collections.Generic;
2using System.Linq;
3using System.Text;
4using HeuristicLab.Common;
5using HeuristicLab.Core;
6
7namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
8  [Item("LaTeX/PDF Formatter", "Formatter for symbolic expression trees for use with latex.")]
9  public class SymbolicExpressionTreeLatexFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
10    private readonly static Dictionary<string, string> symbolNameMap = new Dictionary<string, string>
11    {
12      {"ProgramRootSymbol", "Prog"},
13      {"StartSymbol","RPB"}
14    };
15    private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> layoutEngine;
16    private readonly SymbolicExpressionTreeLayoutAdapter layoutAdapter;
17
18
19    public SymbolicExpressionTreeLatexFormatter() {
20      layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
21    }
22
23    protected SymbolicExpressionTreeLatexFormatter(SymbolicExpressionTreeLatexFormatter original, Cloner cloner)
24      : base(original, cloner) {
25      layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
26      layoutAdapter = new SymbolicExpressionTreeLayoutAdapter();
27    }
28
29    public override IDeepCloneable Clone(Cloner cloner) {
30      return new SymbolicExpressionTreeLatexFormatter(this, cloner);
31    }
32
33    public string Format(ISymbolicExpressionTree symbolicExpressionTree) {
34      var layoutNodes = layoutAdapter.Convert(symbolicExpressionTree).ToList();
35      layoutEngine.Reset();
36      layoutEngine.Root = layoutNodes[0];
37      foreach (var ln in layoutNodes)
38        layoutEngine.AddNode(ln.Content, ln);
39      var nodeCoordinates = layoutEngine.GetNodeCoordinates();
40      var sb = new StringBuilder();
41      sb.AppendLine("\\begin{figure}");
42      sb.AppendLine("\\begin{tikzpicture}");
43
44      foreach (var node in symbolicExpressionTree.IterateNodesBreadth()) {
45        var symbolName = node.Symbol.Name;
46        var nodeName = symbolNameMap.ContainsKey(symbolName) ? symbolNameMap[symbolName] : symbolName;
47        var coord = nodeCoordinates[node];
48
49        sb.AppendLine(string.Format("\\draw node ({0},{1}) {{{2}}};", coord.X, coord.Y, nodeName));
50      }
51
52      sb.AppendLine("\\end{figure}");
53      sb.AppendLine("\\end{tikzpicture}");
54
55      return sb.ToString();
56    }
57  }
58}
Note: See TracBrowser for help on using the repository browser.