Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/23/13 11:42:24 (10 years ago)
Author:
bburlacu
Message:

#1772: Added HeuristicLab.Problems.DataAnalysis.Symbolic and HeuristicLab.Problems.DataAnalysis.Symbolic.Views and integrated some modifications from the old branch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs

    r10264 r10269  
    2121
    2222using System;
    23 using System.Collections.Generic;
    24 using System.Drawing;
    2523using System.Linq;
    2624using System.Windows.Forms;
    2725using HeuristicLab.Core.Views;
    28 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
    3026using HeuristicLab.MainForm;
    31 using HeuristicLab.Problems.DataAnalysis.Symbolic;
    3227
    3328namespace HeuristicLab.EvolutionaryTracking.Views {
    34   [View("SymbolicExpressionTreeGenealogyGraph")]
    35   [Content(typeof(SymbolicExpressionTreeGenealogyGraph), IsDefaultView = true)]
     29  [View("GenealogyGraph")]
     30  [Content(typeof(GenealogyGraph), IsDefaultView = true)]
    3631  public sealed partial class GenealogyGraphView : ItemView {
    37     private VisualSymbolicExpressionTreeNode selectedVisualSymbExprTreeNode;
    38     private SymbolicExpressionTreeNodeSimilarityComparer comparer;
    39     private Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> clonedNodes;
    40 
    41     public new SymbolicExpressionTreeGenealogyGraph Content {
    42       get { return (SymbolicExpressionTreeGenealogyGraph)base.Content; }
     32    public new GenealogyGraph Content {
     33      get { return (GenealogyGraph)base.Content; }
    4334      set { base.Content = value; }
    4435    }
     
    5142      this.simpleLineagesCheckBox.Image = Common.Resources.VSImageLibrary.ArrowDown;
    5243      this.lockGenealogyCheckBox.Image = Common.Resources.VSImageLibrary.ProtectForm;
    53 
    54       comparer = new SymbolicExpressionTreeNodeSimilarityComparer {
    55         MatchConstantValues = true,
    56         MatchVariableWeights = true,
    57         MatchVariableNames = true
    58       };
    5944    }
    6045
    6146    protected override void DeregisterContentEvents() {
    6247      // TODO: Deregister your event handlers here
    63       genealogyGraphChart.GenealogyGraphNodeClicked -= graphChart_GenealogyGraphNodeClicked;
    64       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked -= treeChart_SymbolicExpressionTreeNodeClicked;
    65       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeDoubleClicked -= treeChart_SymbolicExpressionTreeNodeDoubleClicked;
    66       Content.GraphUpdated -= genealogyGraphUpdated;
     48      Content.GraphUpdated -= GenealogyGraphUpdated;
    6749      base.DeregisterContentEvents();
    6850    }
     
    7153      base.RegisterContentEvents();
    7254      // TODO: Register your event handlers here
    73       genealogyGraphChart.GenealogyGraphNodeClicked += graphChart_GenealogyGraphNodeClicked;
    74       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked += treeChart_SymbolicExpressionTreeNodeClicked;
    75       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeDoubleClicked += treeChart_SymbolicExpressionTreeNodeDoubleClicked;
    76       Content.GraphUpdated += genealogyGraphUpdated;
     55      Content.GraphUpdated += GenealogyGraphUpdated;
    7756    }
    7857
     
    8160    protected override void OnContentChanged() {
    8261      base.OnContentChanged();
    83       if (Content == null)
    84         genealogyGraphChart.Graph = null;
    85       else {
    86         genealogyGraphChart.Graph = Content;
    87         //        var best = Content.Nodes.OrderByDescending(x => x.Quality).First();
    88         //        symbolicExpressionTreeChart.Tree = best.SymbolicExpressionTree;
    89       }
     62      genealogyGraphChart.GenealogyGraph = Content ?? null;
    9063    }
    91 
    9264    private void Content_GraphChanged(object sender, EventArgs e) {
    9365    }
    94 
    9566    protected override void SetEnabledStateOfControls() {
    9667      base.SetEnabledStateOfControls();
     
    10071
    10172    #region Event Handlers (child controls)
    102 
    103     // TODO: Put event handlers of child controls here.
    104     private void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs e) {
    105       // the type hierarchy goes like this: VisualGenealogyGraphNode --> GenealogyGraphNode --> SymbolicExpressionTree
    106       var visualGenealogyGraphNode = (VisualGenealogyGraphNode)sender;
    107       var genealogyGraphNode = visualGenealogyGraphNode.Data;
    108       symbolicExpressionTreeChart.Tree = genealogyGraphNode.SymbolicExpressionTree;
    109 
    110       if (genealogyGraphNode.InEdges == null) return;
    111       var arc = genealogyGraphNode.InEdges.Last(x => x.Source != x.Target);
    112       if (arc == null || arc.Data == null) return;
    113       var fragment = (IFragment)arc.Data;
    114       if (fragment.Root == null) return;
    115       foreach (var node in fragment.Root.IterateNodesBreadth()) {
    116         var visualSymbExprTreeNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
    117         visualSymbExprTreeNode.LineColor = Color.OrangeRed;
    118       }
    119       symbolicExpressionTreeChart.Repaint();
     73    private void GenealogyGraphUpdated(object sender, EventArgs args) {
     74      genealogyGraphChart.GenealogyGraph = Content;
    12075    }
    121 
    122     private void genealogyGraphUpdated(object sender, EventArgs args) {
    123       genealogyGraphChart.Graph = Content;
    124     }
    125 
    126     private void treeChart_SymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) {
    127       genealogyGraphChart.Chart.UpdateEnabled = false;
    128       switch (e.Button) {
    129         case MouseButtons.Left: {
    130             selectedVisualSymbExprTreeNode = (VisualSymbolicExpressionTreeNode)sender;
    131             if (selectedVisualSymbExprTreeNode == null) return;
    132             ISymbolicExpressionTreeNode selectedSubtree = selectedVisualSymbExprTreeNode.SymbolicExpressionTreeNode;
    133             var clonedSubtree = (ISymbolicExpressionTreeNode)selectedSubtree.Clone();
    134             // map original nodes to cloned nodes
    135             clonedNodes = selectedSubtree.IterateNodesPrefix()
    136                                          .Zip(clonedSubtree.IterateNodesPrefix(), (original, clone) => new { original, clone })
    137                                          .ToDictionary(p => p.original, p => p.clone);
    138 
    139             foreach (var node in symbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
    140               symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node).FillColor = Color.Transparent;
    141             }
    142             foreach (var node in selectedSubtree.IterateNodesPrefix()) {
    143               symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node).FillColor = Color.LightBlue;
    144             }
    145             break;
    146           }
    147         case MouseButtons.Middle: {
    148             var visualNode = (VisualSymbolicExpressionTreeNode)sender;
    149             if (selectedVisualSymbExprTreeNode == null || selectedVisualSymbExprTreeNode == visualNode) return;
    150             var selectedNode = visualNode.SymbolicExpressionTreeNode;
    151             if (clonedNodes.ContainsKey(selectedNode)) {
    152               var selectedClone = clonedNodes[selectedNode];
    153               var parent = selectedClone.Parent;
    154               if (parent == null) break;
    155               int index = parent.IndexOfSubtree(selectedClone);
    156               if (index == -1) break;
    157               parent.RemoveSubtree(parent.IndexOfSubtree(selectedClone));
    158               foreach (var node in selectedNode.IterateNodesPrefix()) {
    159                 symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node).FillColor = Color.Transparent;
    160               }
    161             }
    162             break;
    163           }
    164       }
    165       if (selectedVisualSymbExprTreeNode == null || clonedNodes == null) return;
    166       // update visual graph nodes that contain matching trees
    167       MatchNodesAndRepaint();
    168       // refresh the tree chart
    169       symbolicExpressionTreeChart.Repaint();
    170     }
    171 
    17276    void MatchNodesAndRepaint() {
    17377      genealogyGraphChart.Chart.UpdateEnabled = false;
    174       genealogyGraphChart.ClearAllNodes(); // clear node colors
    175       var fragment = new Fragment { Root = clonedNodes[selectedVisualSymbExprTreeNode.SymbolicExpressionTreeNode] };
    176       var fragmentLength = fragment.Length;
    177       // highlight nodes
    178       genealogyGraphChart.HighlightNodes(from node in genealogyGraphChart.Graph.Nodes
    179                                          let tree = node.SymbolicExpressionTree
    180                                          where tree.Length >= fragmentLength
    181                                          where tree.Root.ContainsFragment(fragment, comparer)
    182                                          select tree);
    183       // highlight edges that contain a matching fragment
    184       var fragmentSimilarityComparer = new SymbolicExpressionTreeFragmentSimilarityComparer {
    185         SimilarityComparer = comparer
    186       };
    187       var matchingEdges = genealogyGraphChart.Graph.Nodes.Where(n => n.InEdges != null)
    188                            .SelectMany(n => n.InEdges).Where(edge => edge.Data != null && ((IFragment)edge.Data).Root != null)
    189                            .Where(edge => fragmentSimilarityComparer.Equals(fragment, (IFragment)edge.Data));
    190       genealogyGraphChart.HighlightArcs(matchingEdges, Color.DodgerBlue);
    191 
     78      genealogyGraphChart.ClearPrimitives(); // clear node colors
    19279
    19380      genealogyGraphChart.Chart.UpdateEnabled = true;
     
    19885    }
    19986    #endregion
    200 
    201     private void matchConstantsCheckBox_CheckedChanged(object sender, EventArgs e) {
    202       comparer.MatchConstantValues = matchConstantsCheckBox.Checked;
    203       if (selectedVisualSymbExprTreeNode != null)
    204         MatchNodesAndRepaint();
    205     }
    206 
    207     private void matchVariableWeightsCheckBox_CheckedChanged(object sender, EventArgs e) {
    208       comparer.MatchVariableWeights = matchVariableWeightsCheckBox.Checked;
    209       if (selectedVisualSymbExprTreeNode != null)
    210         MatchNodesAndRepaint();
    211     }
    212 
    213     private void matchVariableNamesCheckBox_CheckedChanged(object sender, EventArgs e) {
    214       comparer.MatchVariableNames = matchVariableNamesCheckBox.Checked;
    215       if (selectedVisualSymbExprTreeNode != null)
    216         MatchNodesAndRepaint();
    217     }
    218 
    21987    private void simpleLineagesCheckBox_CheckedChanged(object sender, EventArgs e) {
    22088      genealogyGraphChart.SimpleLineages = simpleLineagesCheckBox.Checked;
     
    22290
    22391    private void highlightAllButton_Click(object sender, EventArgs e) {
    224       symbolicExpressionTreeChart.Repaint();
    225       genealogyGraphChart.HighlightAll();
    22692    }
    22793
     
    23197
    23298    private void highlightRootParentsButton_Click(object sender, EventArgs e) {
    233       var nodes = genealogyGraphChart.Graph.Nodes.Where(n => n.InEdges != null && n.InEdges.Count == 2).Select(n => (SymbolicExpressionTreeGenealogyGraphNode)n.InEdges[0].Source).ToList();
     99      var nodes = genealogyGraphChart.GenealogyGraph.Nodes.Where(n => n.InArcs != null && n.InArcs.Count == 2).Select(n => (GenealogyGraphNode)n.InArcs[0].Source).ToList();
    234100      genealogyGraphChart.HighlightNodes(nodes);
    235101    }
    236102
    237103    private void highlightSecondaryParentsButton_Click(object sender, EventArgs e) {
    238       var nodes = genealogyGraphChart.Graph.Nodes.Where(n => n.InEdges != null && n.InEdges.Count == 2).Select(n => (SymbolicExpressionTreeGenealogyGraphNode)n.InEdges[1].Source).ToList();
     104      var nodes = genealogyGraphChart.GenealogyGraph.Nodes.Where(n => n.InArcs != null && n.InArcs.Count == 2).Select(n => (GenealogyGraphNode)n.InArcs[1].Source).ToList();
    239105      genealogyGraphChart.HighlightNodes(nodes);
    240106    }
Note: See TracChangeset for help on using the changeset viewer.