Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/27/12 11:02:09 (11 years ago)
Author:
mkommend
Message:

#1763: Merged remaining changes from the TreeSimplifier branch in the trunk and refactored impact values calculators.

Location:
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views
Files:
1 deleted
6 edited
5 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4

    • Property svn:ignore
      •  

        old new  
         1*.user
         2Plugin.cs
        13bin
        24obj
        3 *.user
        4 HeuristicLabProblemsDataAnalysisSymbolicViewsPlugin.cs
        5 *.vs10x
        6 Plugin.cs
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj

    r8600 r8946  
    114114  </ItemGroup>
    115115  <ItemGroup>
     116    <Compile Include="InteractiveSymbolicExpressionTreeChart.cs">
     117      <SubType>UserControl</SubType>
     118    </Compile>
     119    <Compile Include="InteractiveSymbolicExpressionTreeChart.Designer.cs">
     120      <DependentUpon>InteractiveSymbolicExpressionTreeChart.cs</DependentUpon>
     121    </Compile>
    116122    <Compile Include="MathSymbolicDataAnalysisModelView.cs">
    117123      <SubType>UserControl</SubType>
     
    121127    </Compile>
    122128    <Compile Include="Plugin.cs" />
     129    <Compile Include="SymbolicExpressionTreeNodeChangeValueDialog.cs">
     130      <SubType>Form</SubType>
     131    </Compile>
     132    <Compile Include="SymbolicExpressionTreeNodeChangeValueDialog.Designer.cs">
     133      <DependentUpon>SymbolicExpressionTreeNodeChangeValueDialog.cs</DependentUpon>
     134    </Compile>
    123135    <Compile Include="TextualSymbolicDataAnalysisModelView.cs">
    124136      <SubType>UserControl</SubType>
     
    168180    <Compile Include="Symbols\VariableView.Designer.cs">
    169181      <DependentUpon>VariableView.cs</DependentUpon>
     182    </Compile>
     183    <Compile Include="TreeEditDialogs\SymbolicExpressionTreeNodeChangeValueDialog.cs">
     184      <SubType>Form</SubType>
     185    </Compile>
     186    <Compile Include="TreeEditDialogs\SymbolicExpressionTreeNodeChangeValueDialog.Designer.cs">
     187      <DependentUpon>SymbolicExpressionTreeNodeChangeValueDialog.cs</DependentUpon>
     188    </Compile>
     189    <Compile Include="TreeEditDialogs\SymbolicExpressionTreeNodeInsertDialog.cs">
     190      <SubType>Form</SubType>
     191    </Compile>
     192    <Compile Include="TreeEditDialogs\SymbolicExpressionTreeNodeInsertDialog.Designer.cs">
     193      <DependentUpon>SymbolicExpressionTreeNodeInsertDialog.cs</DependentUpon>
    170194    </Compile>
    171195    <None Include="HeuristicLab.snk" />
     
    313337  -->
    314338  <PropertyGroup>
    315    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
     339    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
    316340set ProjectDir=$(ProjectDir)
    317341set SolutionDir=$(SolutionDir)
     
    320344call PreBuildEvent.cmd
    321345</PreBuildEvent>
    322 <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
     346    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
    323347export ProjectDir=$(ProjectDir)
    324348export SolutionDir=$(SolutionDir)
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.Designer.cs

    r8053 r8946  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    4545    /// </summary>
    4646    private void InitializeComponent() {
    47       this.treeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart();
     47      this.components = new System.ComponentModel.Container();
    4848      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
    4949      this.splitContainer = new System.Windows.Forms.SplitContainer();
     
    5252      this.btnSimplify = new System.Windows.Forms.Button();
    5353      this.btnOptimizeConstants = new System.Windows.Forms.Button();
     54      this.treeChart = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.InteractiveSymbolicExpressionTreeChart();
    5455      this.grpViewHost = new System.Windows.Forms.GroupBox();
    5556      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
     
    6162      this.grpViewHost.SuspendLayout();
    6263      this.SuspendLayout();
    63       //
    64       // treeChart
    65       //
    66       this.treeChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    67             | System.Windows.Forms.AnchorStyles.Left)
    68             | System.Windows.Forms.AnchorStyles.Right)));
    69       this.treeChart.BackgroundColor = System.Drawing.Color.White;
    70       this.treeChart.LineColor = System.Drawing.Color.Black;
    71       this.treeChart.Location = new System.Drawing.Point(6, 16);
    72       this.treeChart.Name = "treeChart";
    73       this.treeChart.Size = new System.Drawing.Size(201, 291);
    74       this.treeChart.Spacing = 5;
    75       this.treeChart.TabIndex = 0;
    76       this.treeChart.TextFont = new System.Drawing.Font("Times New Roman", 8F);
    77       this.treeChart.Tree = null;
    78       this.treeChart.SymbolicExpressionTreeNodeDoubleClicked += new System.Windows.Forms.MouseEventHandler(this.treeChart_SymbolicExpressionTreeNodeDoubleClicked);
    7964      //
    8065      // viewHost
     
    11398      // grpSimplify
    11499      //
     100      this.grpSimplify.AutoSize = true;
    115101      this.grpSimplify.Controls.Add(this.flowLayoutPanel);
    116102      this.grpSimplify.Controls.Add(this.treeChart);
     
    157143      this.btnOptimizeConstants.Click += new System.EventHandler(this.btnOptimizeConstants_Click);
    158144      //
     145      // treeChart
     146      //
     147      this.treeChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     148            | System.Windows.Forms.AnchorStyles.Left)
     149            | System.Windows.Forms.AnchorStyles.Right)));
     150      this.treeChart.BackgroundColor = System.Drawing.Color.White;
     151      this.treeChart.LineColor = System.Drawing.Color.Black;
     152      this.treeChart.Location = new System.Drawing.Point(6, 16);
     153      this.treeChart.Name = "treeChart";
     154      this.treeChart.Size = new System.Drawing.Size(201, 291);
     155      this.treeChart.Spacing = 5;
     156      this.treeChart.SuspendRepaint = false;
     157      this.treeChart.TabIndex = 0;
     158      this.treeChart.TextFont = new System.Drawing.Font("Times New Roman", 8F);
     159      this.treeChart.Tree = null;
     160      this.treeChart.SymbolicExpressionTreeChanged += new System.EventHandler(this.treeChart_SymbolicExpressionTreeChanged);
     161      this.treeChart.SymbolicExpressionTreeNodeChanged += new System.EventHandler(this.treeChart_SymbolicExpressionTreeNodeChanged);
     162      this.treeChart.SymbolicExpressionTreeNodeDoubleClicked += new System.Windows.Forms.MouseEventHandler(this.treeChart_SymbolicExpressionTreeNodeDoubleClicked);
     163      //
    159164      // grpViewHost
    160165      //
     
    171176      //
    172177      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    173       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
     178      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    174179      this.Controls.Add(this.splitContainer);
     180      this.DoubleBuffered = true;
    175181      this.Name = "InteractiveSymbolicDataAnalysisSolutionSimplifierView";
    176182      this.Size = new System.Drawing.Size(564, 348);
    177183      this.splitContainer.Panel1.ResumeLayout(false);
     184      this.splitContainer.Panel1.PerformLayout();
    178185      this.splitContainer.Panel2.ResumeLayout(false);
    179186      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
     
    188195    #endregion
    189196
    190     private HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart treeChart;
     197    private InteractiveSymbolicExpressionTreeChart treeChart;
    191198    private System.Windows.Forms.SplitContainer splitContainer;
    192199    private HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs

    r7259 r8946  
    3434    private Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> replacementNodes;
    3535    private Dictionary<ISymbolicExpressionTreeNode, double> nodeImpacts;
    36     private bool updateInProgress = false;
     36    private Dictionary<ISymbolicExpressionTreeNode, double> originalValues;
     37    private Dictionary<ISymbolicExpressionTreeNode, string> originalVariableNames;
    3738
    3839    public InteractiveSymbolicDataAnalysisSolutionSimplifierView() {
    3940      InitializeComponent();
    40       this.replacementNodes = new Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>();
    41       this.nodeImpacts = new Dictionary<ISymbolicExpressionTreeNode, double>();
     41      replacementNodes = new Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>();
     42      nodeImpacts = new Dictionary<ISymbolicExpressionTreeNode, double>();
     43      originalValues = new Dictionary<ISymbolicExpressionTreeNode, double>();
     44      originalVariableNames = new Dictionary<ISymbolicExpressionTreeNode, string>();
     45
    4246      this.Caption = "Interactive Solution Simplifier";
    4347    }
     
    5054    protected override void RegisterContentEvents() {
    5155      base.RegisterContentEvents();
    52       Content.ModelChanged += new EventHandler(Content_ModelChanged);
    53       Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
     56      Content.ModelChanged += Content_Changed;
     57      Content.ProblemDataChanged += Content_Changed;
    5458    }
    5559    protected override void DeregisterContentEvents() {
    5660      base.DeregisterContentEvents();
    57       Content.ModelChanged -= new EventHandler(Content_ModelChanged);
    58       Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
    59     }
    60 
    61     private void Content_ModelChanged(object sender, EventArgs e) {
    62       OnModelChanged();
    63     }
    64     private void Content_ProblemDataChanged(object sender, EventArgs e) {
    65       OnProblemDataChanged();
    66     }
    67 
    68     protected virtual void OnModelChanged() {
    69       this.CalculateReplacementNodesAndNodeImpacts();
    70     }
    71 
    72     protected virtual void OnProblemDataChanged() {
    73       this.CalculateReplacementNodesAndNodeImpacts();
     61      Content.ModelChanged -= Content_Changed;
     62      Content.ProblemDataChanged -= Content_Changed;
     63    }
     64
     65    private void Content_Changed(object sender, EventArgs e) {
     66      UpdateView();
    7467    }
    7568
    7669    protected override void OnContentChanged() {
    7770      base.OnContentChanged();
    78       this.CalculateReplacementNodesAndNodeImpacts();
    79       this.viewHost.Content = this.Content;
    80     }
    81 
    82     private void CalculateReplacementNodesAndNodeImpacts() {
    83       if (Content != null && Content.Model != null && Content.ProblemData != null) {
    84         var tree = Content.Model.SymbolicExpressionTree;
    85         var replacementValues = CalculateReplacementValues(tree);
    86         foreach (var pair in replacementValues) {
    87           if (!(pair.Key is ConstantTreeNode)) {
    88             replacementNodes[pair.Key] = MakeConstantTreeNode(pair.Value);
    89           }
    90         }
    91         nodeImpacts = CalculateImpactValues(Content.Model.SymbolicExpressionTree);
    92 
    93         if (!updateInProgress) {
    94           // automatically fold all branches with impact = 1
    95           List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubtree(0).IterateNodesPrefix().ToList();
    96           foreach (var parent in nodeList) {
    97             for (int subTreeIndex = 0; subTreeIndex < parent.SubtreeCount; subTreeIndex++) {
    98               var child = parent.GetSubtree(subTreeIndex);
    99               if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) {
    100                 SwitchNodeWithReplacementNode(parent, subTreeIndex);
    101               }
    102             }
    103           }
    104         }
    105 
    106         // show only interesting part of solution
    107         if (tree.Root.SubtreeCount > 1)
    108           this.treeChart.Tree = new SymbolicExpressionTree(tree.Root); // RPB + ADFs
    109         else
    110           this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0)); // 1st child of RPB
    111         this.PaintNodeImpacts();
    112       }
     71      UpdateView();
     72      viewHost.Content = this.Content;
     73    }
     74
     75    private void UpdateView() {
     76      if (Content == null || Content.Model == null || Content.ProblemData == null) return;
     77      var tree = Content.Model.SymbolicExpressionTree;
     78
     79      var replacementValues = CalculateReplacementValues(tree);
     80      foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) {
     81        replacementNodes[pair.Key] = MakeConstantTreeNode(pair.Value);
     82      }
     83
     84      nodeImpacts = CalculateImpactValues(tree);
     85
     86      var model = Content.Model.SymbolicExpressionTree;
     87      treeChart.Tree = model.Root.SubtreeCount > 1 ? new SymbolicExpressionTree(model.Root) : new SymbolicExpressionTree(model.Root.GetSubtree(0).GetSubtree(0));
     88      PaintNodeImpacts();
    11389    }
    11490
     
    11793    protected abstract void UpdateModel(ISymbolicExpressionTree tree);
    11894
    119     private ConstantTreeNode MakeConstantTreeNode(double value) {
    120       Constant constant = new Constant();
    121       constant.MinValue = value - 1;
    122       constant.MaxValue = value + 1;
    123       ConstantTreeNode constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode();
     95    private static ConstantTreeNode MakeConstantTreeNode(double value) {
     96      var constant = new Constant { MinValue = value - 1, MaxValue = value + 1 };
     97      var constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode();
    12498      constantTreeNode.Value = value;
    12599      return constantTreeNode;
     
    127101
    128102    private void treeChart_SymbolicExpressionTreeNodeDoubleClicked(object sender, MouseEventArgs e) {
    129       VisualSymbolicExpressionTreeNode visualTreeNode = (VisualSymbolicExpressionTreeNode)sender;
     103      if (!treeChart.TreeValid) return;
     104      var visualNode = (VisualSymbolicExpressionTreeNode)sender;
     105      var symbExprTreeNode = (SymbolicExpressionTreeNode)visualNode.SymbolicExpressionTreeNode;
     106      if (symbExprTreeNode == null) return;
    130107      var tree = Content.Model.SymbolicExpressionTree;
    131       foreach (SymbolicExpressionTreeNode treeNode in tree.IterateNodesPostfix()) {
    132         for (int i = 0; i < treeNode.SubtreeCount; i++) {
    133           ISymbolicExpressionTreeNode subTree = treeNode.GetSubtree(i);
    134           // only allow to replace nodes for which a replacement value is known (replacement value for ADF nodes are not available)
    135           if (subTree == visualTreeNode.SymbolicExpressionTreeNode && replacementNodes.ContainsKey(subTree)) {
    136             SwitchNodeWithReplacementNode(treeNode, i);
    137 
    138             // show only interesting part of solution
    139             if (tree.Root.SubtreeCount > 1)
    140               this.treeChart.Tree = new SymbolicExpressionTree(tree.Root); // RPB + ADFs
    141             else
    142               this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0)); // 1st child of RPB
    143 
    144             updateInProgress = true;
    145             UpdateModel(tree);
    146             updateInProgress = false;
    147             return; // break all loops
     108
     109      bool update = false;
     110      // check if the node value/weight has been altered
     111      // if so, the first double click will return the node to its original value/weight/variable name
     112      // the next double click will replace the ConstantNode with the original SymbolicExpressionTreeNode
     113      if (originalVariableNames.ContainsKey(symbExprTreeNode)) {
     114        var variable = (VariableTreeNode)symbExprTreeNode;
     115        variable.VariableName = originalVariableNames[symbExprTreeNode];
     116        originalVariableNames.Remove(variable);
     117        update = true;
     118      } else if (originalValues.ContainsKey(symbExprTreeNode)) {
     119        double value = originalValues[symbExprTreeNode];
     120        if (symbExprTreeNode.Symbol is Constant) {
     121          var constantTreeNode = (ConstantTreeNode)symbExprTreeNode;
     122          constantTreeNode.Value = value;
     123        } else if (symbExprTreeNode.Symbol is Variable) {
     124          var variable = (VariableTreeNode)symbExprTreeNode;
     125          variable.Weight = value;
     126        }
     127        originalValues.Remove(symbExprTreeNode);
     128        update = true;
     129      } else if (replacementNodes.ContainsKey(symbExprTreeNode)) {
     130        foreach (var treeNode in tree.IterateNodesPostfix()) {
     131          for (int i = 0; i < treeNode.SubtreeCount; i++) {
     132            var subtree = treeNode.GetSubtree(i);
     133            if (subtree == symbExprTreeNode) {
     134              SwitchNodeWithReplacementNode(treeNode, i);
     135              // show only interesting part of solution
     136              treeChart.Tree = tree.Root.SubtreeCount > 1
     137                                 ? new SymbolicExpressionTree(tree.Root)
     138                                 : new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0));
     139              update = true;
     140            }
    148141          }
    149         }
     142          if (update) break;
     143        }
     144      }
     145      if (update) UpdateModel(tree);
     146    }
     147
     148    private void treeChart_SymbolicExpressionTreeChanged(object sender, EventArgs e) {
     149      UpdateModel(Content.Model.SymbolicExpressionTree);
     150      UpdateView();
     151    }
     152
     153    private void treeChart_SymbolicExpressionTreeNodeChanged(object sender, EventArgs e) {
     154      var dialog = (ValueChangeDialog)sender;
     155      bool flag1 = false, flag2 = false;
     156      var node = dialog.Content;
     157
     158      if (node is VariableTreeNode) {
     159        var variable = (VariableTreeNode)node;
     160        var weight = double.Parse(dialog.newValueTextBox.Text);
     161        var name = (string)dialog.variableNamesCombo.SelectedItem;
     162        if (!variable.Weight.Equals(weight)) {
     163          flag1 = true;
     164          originalValues[variable] = variable.Weight;
     165          variable.Weight = weight;
     166        }
     167        if (!variable.VariableName.Equals(name)) {
     168          flag2 = true;
     169          originalVariableNames[variable] = variable.VariableName;
     170          variable.VariableName = name;
     171        }
     172      } else if (node is ConstantTreeNode) {
     173        var constant = (ConstantTreeNode)node;
     174        var value = double.Parse(dialog.newValueTextBox.Text);
     175        if (!constant.Value.Equals(value)) {
     176          flag1 = true;
     177          originalValues[constant] = constant.Value;
     178          constant.Value = value;
     179        }
     180      }
     181      if (flag1 || flag2) {
     182        UpdateView();
    150183      }
    151184    }
     
    168201      double min = impacts.Min();
    169202      foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) {
     203        VisualSymbolicExpressionTreeNode visualTree = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode);
     204        bool flag1 = replacementNodes.ContainsKey(treeNode);
     205        bool flag2 = originalValues.ContainsKey(treeNode);
     206        bool flag3 = treeNode is ConstantTreeNode;
     207
     208        if (flag2) // constant or variable node was changed
     209          visualTree.ToolTip += Environment.NewLine + "Original value: " + originalValues[treeNode];
     210        else if (flag1 && flag3) // symbol node was folded to a constant
     211          visualTree.ToolTip += Environment.NewLine + "Original node: " + replacementNodes[treeNode];
     212
    170213        if (!(treeNode is ConstantTreeNode) && nodeImpacts.ContainsKey(treeNode)) {
    171214          double impact = nodeImpacts[treeNode];
    172           VisualSymbolicExpressionTreeNode visualTree = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode);
    173215
    174216          // impact = 0 if no change
     
    197239    private void PaintCollapsedNodes() {
    198240      foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) {
    199         if (treeNode is ConstantTreeNode && replacementNodes.ContainsKey(treeNode))
    200           this.treeChart.GetVisualSymbolicExpressionTreeNode(treeNode).LineColor = Color.DarkOrange;
    201         else {
    202           VisualSymbolicExpressionTreeNode visNode = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode);
    203           if (visNode != null)
    204             visNode.LineColor = Color.Black;
     241        bool flag1 = replacementNodes.ContainsKey(treeNode);
     242        bool flag2 = originalValues.ContainsKey(treeNode);
     243        if (flag1 && treeNode is ConstantTreeNode) {
     244          this.treeChart.GetVisualSymbolicExpressionTreeNode(treeNode).LineColor = flag2 ? Color.DarkViolet : Color.DarkOrange;
     245        } else if (flag2) {
     246          this.treeChart.GetVisualSymbolicExpressionTreeNode(treeNode).LineColor = Color.DodgerBlue;
    205247        }
    206248      }
     
    208250
    209251    private void btnSimplify_Click(object sender, EventArgs e) {
    210       SymbolicDataAnalysisExpressionTreeSimplifier simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier();
     252      var simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier();
    211253      var simplifiedExpressionTree = simplifier.Simplify(Content.Model.SymbolicExpressionTree);
    212254      UpdateModel(simplifiedExpressionTree);
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs

    r8942 r8946  
    2828
    2929namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
    30   public partial class InteractiveSymbolicExpressionTreeChart : SymbolicExpressionTreeChart {
     30  public sealed partial class InteractiveSymbolicExpressionTreeChart : SymbolicExpressionTreeChart {
    3131    private ISymbolicExpressionTreeNode tempNode;
    3232    private VisualSymbolicExpressionTreeNode lastSelected; // previously selected node
     
    163163      lastOp = EditOp.CutNode;
    164164      tempNode = currSelected.SymbolicExpressionTreeNode;
    165       var visualNode = visualTreeNodes[tempNode];
     165      var visualNode = GetVisualSymbolicExpressionTreeNode(tempNode);
    166166      visualNode.LineColor = Color.LightGray;
    167167      visualNode.TextColor = Color.LightGray;
     
    173173      tempNode = currSelected.SymbolicExpressionTreeNode; // should never be null
    174174      foreach (var node in tempNode.IterateNodesPostfix()) {
    175         var visualNode = visualTreeNodes[node];
     175        var visualNode = GetVisualSymbolicExpressionTreeNode(node);
    176176        visualNode.LineColor = Color.LightGray;
    177177        visualNode.TextColor = Color.LightGray;
    178178        if (node.SubtreeCount > 0) {
    179179          foreach (var subtree in node.Subtrees) {
    180             var visualLine = visualLines[new Tuple<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>(node, subtree)];
     180            var visualLine = GetVisualSymbolicExpressionTreeNodeConnection(node, subtree);
    181181            visualLine.LineColor = Color.LightGray;
    182182          }
     
    198198      tempNode = currSelected.SymbolicExpressionTreeNode;
    199199      foreach (var node in tempNode.IterateNodesPostfix()) {
    200         var visualNode = visualTreeNodes[node];
     200        var visualNode = GetVisualSymbolicExpressionTreeNode(node);
    201201        visualNode.LineColor = Color.LightGray;
    202202        visualNode.TextColor = Color.LightGray;
    203203        if (node.SubtreeCount <= 0) continue;
    204204        foreach (var subtree in node.Subtrees) {
    205           var visualLine = visualLines[new Tuple<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>(node, subtree)];
     205          var visualLine = GetVisualSymbolicExpressionTreeNodeConnection(node, subtree);
    206206          visualLine.LineColor = Color.LightGray;
    207207        }
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Properties

    • Property svn:ignore
      --- 
      +++ 
      
Note: See TracChangeset for help on using the changeset viewer.