Changeset 15561 for branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking
- Timestamp:
- 12/29/17 16:43:29 (7 years ago)
- Location:
- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs
r12406 r15561 45 45 /// </summary> 46 46 private void InitializeComponent() { 47 this.groupBox1 = new System.Windows.Forms.GroupBox(); 48 this.nodeWeightLabel = new System.Windows.Forms.Label(); 49 this.nodeWeightLabelLabel = new System.Windows.Forms.Label(); 47 this.selectedNodeStatusStrip = new System.Windows.Forms.StatusStrip(); 48 this.colorModeLabel = new System.Windows.Forms.Label(); 49 this.nodeColorsComboBox = new System.Windows.Forms.ComboBox(); 50 this.traceCheckBox = new System.Windows.Forms.CheckBox(); 51 this.createNewViewCheckBox = new System.Windows.Forms.CheckBox(); 50 52 this.navigateRightButton = new System.Windows.Forms.Button(); 51 53 this.navigateLeftButton = new System.Windows.Forms.Button(); 52 this.nodeDegreeLabel = new System.Windows.Forms.Label(); 53 this.nodeDegreeLabelLabel = new System.Windows.Forms.Label(); 54 this.nodeRankLabel = new System.Windows.Forms.Label(); 55 this.nodeRankLabelLabel = new System.Windows.Forms.Label(); 56 this.nodeQualityLabel = new System.Windows.Forms.Label(); 57 this.nodeQualityLabelLabel = new System.Windows.Forms.Label(); 58 this.matchingModeButton = new System.Windows.Forms.CheckBox(); 54 this.lockCheckBox = new System.Windows.Forms.CheckBox(); 59 55 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); 60 56 this.splitContainer.Panel1.SuspendLayout(); 61 57 this.splitContainer.Panel2.SuspendLayout(); 62 58 this.splitContainer.SuspendLayout(); 63 this.groupBox1.SuspendLayout();64 59 this.SuspendLayout(); 65 60 // 66 61 // splitContainer 67 62 // 68 this.splitContainer.Size = new System.Drawing.Size(1241, 700); 63 this.splitContainer.Location = new System.Drawing.Point(3, 31); 64 // 65 // splitContainer.Panel1 66 // 67 this.splitContainer.Panel1.Controls.Add(this.selectedNodeStatusStrip); 68 this.splitContainer.Size = new System.Drawing.Size(1241, 721); 69 69 this.splitContainer.SplitterDistance = 617; 70 70 // 71 71 // viewHost 72 72 // 73 this.viewHost.Size = new System.Drawing.Size(617, 697);73 this.viewHost.Size = new System.Drawing.Size(617, 770); 74 74 // 75 75 // genealogyGraphChart 76 76 // 77 this.genealogyGraphChart.Size = new System.Drawing.Size(614, 697); 78 // 79 // groupBox1 80 // 81 this.groupBox1.Controls.Add(this.matchingModeButton); 82 this.groupBox1.Controls.Add(this.nodeWeightLabel); 83 this.groupBox1.Controls.Add(this.nodeWeightLabelLabel); 84 this.groupBox1.Controls.Add(this.navigateRightButton); 85 this.groupBox1.Controls.Add(this.navigateLeftButton); 86 this.groupBox1.Controls.Add(this.nodeDegreeLabel); 87 this.groupBox1.Controls.Add(this.nodeDegreeLabelLabel); 88 this.groupBox1.Controls.Add(this.nodeRankLabel); 89 this.groupBox1.Controls.Add(this.nodeRankLabelLabel); 90 this.groupBox1.Controls.Add(this.nodeQualityLabel); 91 this.groupBox1.Controls.Add(this.nodeQualityLabelLabel); 92 this.groupBox1.Location = new System.Drawing.Point(624, 4); 93 this.groupBox1.Name = "groupBox1"; 94 this.groupBox1.Size = new System.Drawing.Size(617, 44); 95 this.groupBox1.TabIndex = 2; 96 this.groupBox1.TabStop = false; 97 this.groupBox1.Text = "Current Node"; 98 // 99 // nodeWeightLabel 100 // 101 this.nodeWeightLabel.AutoSize = true; 102 this.nodeWeightLabel.Location = new System.Drawing.Point(285, 20); 103 this.nodeWeightLabel.Name = "nodeWeightLabel"; 104 this.nodeWeightLabel.Size = new System.Drawing.Size(0, 13); 105 this.nodeWeightLabel.TabIndex = 8; 106 // 107 // nodeWeightLabelLabel 108 // 109 this.nodeWeightLabelLabel.AutoSize = true; 110 this.nodeWeightLabelLabel.Location = new System.Drawing.Point(241, 20); 111 this.nodeWeightLabelLabel.Name = "nodeWeightLabelLabel"; 112 this.nodeWeightLabelLabel.Size = new System.Drawing.Size(44, 13); 113 this.nodeWeightLabelLabel.TabIndex = 7; 114 this.nodeWeightLabelLabel.Text = "Weight:"; 77 this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left))); 78 this.genealogyGraphChart.Dock = System.Windows.Forms.DockStyle.Fill; 79 this.genealogyGraphChart.Size = new System.Drawing.Size(617, 699); 80 // 81 // selectedNodeStatusStrip 82 // 83 this.selectedNodeStatusStrip.Location = new System.Drawing.Point(0, 699); 84 this.selectedNodeStatusStrip.Name = "selectedNodeStatusStrip"; 85 this.selectedNodeStatusStrip.Size = new System.Drawing.Size(617, 22); 86 this.selectedNodeStatusStrip.TabIndex = 1; 87 this.selectedNodeStatusStrip.Text = "statusStrip1"; 88 // 89 // colorModeLabel 90 // 91 this.colorModeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 92 this.colorModeLabel.AutoSize = true; 93 this.colorModeLabel.Location = new System.Drawing.Point(453, 9); 94 this.colorModeLabel.Name = "colorModeLabel"; 95 this.colorModeLabel.Size = new System.Drawing.Size(39, 13); 96 this.colorModeLabel.TabIndex = 1; 97 this.colorModeLabel.Text = "Colors:"; 98 // 99 // nodeColorsComboBox 100 // 101 this.nodeColorsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 102 this.nodeColorsComboBox.FormattingEnabled = true; 103 this.nodeColorsComboBox.Items.AddRange(new object[] { 104 "Quality", 105 "Weight"}); 106 this.nodeColorsComboBox.Location = new System.Drawing.Point(498, 6); 107 this.nodeColorsComboBox.Name = "nodeColorsComboBox"; 108 this.nodeColorsComboBox.Size = new System.Drawing.Size(62, 21); 109 this.nodeColorsComboBox.TabIndex = 2; 110 this.nodeColorsComboBox.Text = "Quality"; 111 this.nodeColorsComboBox.SelectedIndexChanged += new System.EventHandler(this.nodeColorsComboBox_SelectedIndexChanged); 112 // 113 // traceCheckBox 114 // 115 this.traceCheckBox.AutoSize = true; 116 this.traceCheckBox.Location = new System.Drawing.Point(3, 8); 117 this.traceCheckBox.Name = "traceCheckBox"; 118 this.traceCheckBox.Size = new System.Drawing.Size(54, 17); 119 this.traceCheckBox.TabIndex = 3; 120 this.traceCheckBox.Text = "Trace"; 121 this.traceCheckBox.UseVisualStyleBackColor = true; 122 // 123 // createNewViewCheckBox 124 // 125 this.createNewViewCheckBox.AutoSize = true; 126 this.createNewViewCheckBox.Location = new System.Drawing.Point(63, 8); 127 this.createNewViewCheckBox.Name = "createNewViewCheckBox"; 128 this.createNewViewCheckBox.Size = new System.Drawing.Size(105, 17); 129 this.createNewViewCheckBox.TabIndex = 4; 130 this.createNewViewCheckBox.Text = "Create new view"; 131 this.createNewViewCheckBox.UseVisualStyleBackColor = true; 115 132 // 116 133 // navigateRightButton 117 134 // 135 this.navigateRightButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 118 136 this.navigateRightButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeLeftDiagonal_235; 119 this.navigateRightButton.Location = new System.Drawing.Point(5 89, 14);137 this.navigateRightButton.Location = new System.Drawing.Point(595, 4); 120 138 this.navigateRightButton.Name = "navigateRightButton"; 121 this.navigateRightButton.Size = new System.Drawing.Size(2 2, 22);122 this.navigateRightButton.TabIndex = 6;139 this.navigateRightButton.Size = new System.Drawing.Size(23, 23); 140 this.navigateRightButton.TabIndex = 5; 123 141 this.navigateRightButton.UseVisualStyleBackColor = true; 124 142 this.navigateRightButton.Click += new System.EventHandler(this.navigateRightButton_Click); … … 126 144 // navigateLeftButton 127 145 // 146 this.navigateLeftButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 128 147 this.navigateLeftButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeRightDiagonal_238; 129 this.navigateLeftButton.Location = new System.Drawing.Point(56 1, 14);148 this.navigateLeftButton.Location = new System.Drawing.Point(566, 4); 130 149 this.navigateLeftButton.Name = "navigateLeftButton"; 131 this.navigateLeftButton.Size = new System.Drawing.Size(2 2, 22);150 this.navigateLeftButton.Size = new System.Drawing.Size(23, 23); 132 151 this.navigateLeftButton.TabIndex = 6; 133 152 this.navigateLeftButton.UseVisualStyleBackColor = true; 134 153 this.navigateLeftButton.Click += new System.EventHandler(this.navigateLeftButton_Click); 135 154 // 136 // nodeDegreeLabel 137 // 138 this.nodeDegreeLabel.AutoSize = true; 139 this.nodeDegreeLabel.Location = new System.Drawing.Point(205, 20); 140 this.nodeDegreeLabel.Name = "nodeDegreeLabel"; 141 this.nodeDegreeLabel.Size = new System.Drawing.Size(0, 13); 142 this.nodeDegreeLabel.TabIndex = 5; 143 // 144 // nodeDegreeLabelLabel 145 // 146 this.nodeDegreeLabelLabel.AutoSize = true; 147 this.nodeDegreeLabelLabel.Location = new System.Drawing.Point(154, 20); 148 this.nodeDegreeLabelLabel.Name = "nodeDegreeLabelLabel"; 149 this.nodeDegreeLabelLabel.Size = new System.Drawing.Size(45, 13); 150 this.nodeDegreeLabelLabel.TabIndex = 4; 151 this.nodeDegreeLabelLabel.Text = "Degree:"; 152 // 153 // nodeRankLabel 154 // 155 this.nodeRankLabel.AutoSize = true; 156 this.nodeRankLabel.Location = new System.Drawing.Point(123, 20); 157 this.nodeRankLabel.Name = "nodeRankLabel"; 158 this.nodeRankLabel.Size = new System.Drawing.Size(0, 13); 159 this.nodeRankLabel.TabIndex = 3; 160 // 161 // nodeRankLabelLabel 162 // 163 this.nodeRankLabelLabel.AutoSize = true; 164 this.nodeRankLabelLabel.Location = new System.Drawing.Point(81, 20); 165 this.nodeRankLabelLabel.Name = "nodeRankLabelLabel"; 166 this.nodeRankLabelLabel.Size = new System.Drawing.Size(36, 13); 167 this.nodeRankLabelLabel.TabIndex = 2; 168 this.nodeRankLabelLabel.Text = "Rank:"; 169 // 170 // nodeQualityLabel 171 // 172 this.nodeQualityLabel.AutoSize = true; 173 this.nodeQualityLabel.Location = new System.Drawing.Point(54, 20); 174 this.nodeQualityLabel.Name = "nodeQualityLabel"; 175 this.nodeQualityLabel.Size = new System.Drawing.Size(0, 13); 176 this.nodeQualityLabel.TabIndex = 1; 177 // 178 // nodeQualityLabelLabel 179 // 180 this.nodeQualityLabelLabel.AutoSize = true; 181 this.nodeQualityLabelLabel.Location = new System.Drawing.Point(6, 20); 182 this.nodeQualityLabelLabel.Name = "nodeQualityLabelLabel"; 183 this.nodeQualityLabelLabel.Size = new System.Drawing.Size(42, 13); 184 this.nodeQualityLabelLabel.TabIndex = 0; 185 this.nodeQualityLabelLabel.Text = "Quality:"; 186 // 187 // matchingModeButton 188 // 189 this.matchingModeButton.AutoSize = true; 190 this.matchingModeButton.Checked = true; 191 this.matchingModeButton.CheckState = System.Windows.Forms.CheckState.Checked; 192 this.matchingModeButton.Location = new System.Drawing.Point(455, 18); 193 this.matchingModeButton.Name = "matchingModeButton"; 194 this.matchingModeButton.Size = new System.Drawing.Size(100, 17); 195 this.matchingModeButton.TabIndex = 9; 196 this.matchingModeButton.Text = "Exact Matching"; 197 this.matchingModeButton.UseVisualStyleBackColor = true; 155 // lockCheckBox 156 // 157 this.lockCheckBox.AutoSize = true; 158 this.lockCheckBox.Location = new System.Drawing.Point(174, 8); 159 this.lockCheckBox.Name = "lockCheckBox"; 160 this.lockCheckBox.Size = new System.Drawing.Size(50, 17); 161 this.lockCheckBox.TabIndex = 7; 162 this.lockCheckBox.Text = "Lock"; 163 this.lockCheckBox.UseVisualStyleBackColor = true; 164 this.lockCheckBox.CheckedChanged += new System.EventHandler(this.lockCheckBox_CheckedChanged); 198 165 // 199 166 // SymbolicDataAnalysisGenealogyGraphView … … 201 168 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 202 169 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 203 this.Controls.Add(this.groupBox1); 170 this.Controls.Add(this.lockCheckBox); 171 this.Controls.Add(this.navigateLeftButton); 172 this.Controls.Add(this.navigateRightButton); 173 this.Controls.Add(this.createNewViewCheckBox); 174 this.Controls.Add(this.traceCheckBox); 175 this.Controls.Add(this.nodeColorsComboBox); 176 this.Controls.Add(this.colorModeLabel); 204 177 this.Name = "SymbolicDataAnalysisGenealogyGraphView"; 205 178 this.Size = new System.Drawing.Size(1247, 755); 206 179 this.Controls.SetChildIndex(this.splitContainer, 0); 207 this.Controls.SetChildIndex(this.groupBox1, 0); 180 this.Controls.SetChildIndex(this.colorModeLabel, 0); 181 this.Controls.SetChildIndex(this.nodeColorsComboBox, 0); 182 this.Controls.SetChildIndex(this.traceCheckBox, 0); 183 this.Controls.SetChildIndex(this.createNewViewCheckBox, 0); 184 this.Controls.SetChildIndex(this.navigateRightButton, 0); 185 this.Controls.SetChildIndex(this.navigateLeftButton, 0); 186 this.Controls.SetChildIndex(this.lockCheckBox, 0); 208 187 this.splitContainer.Panel1.ResumeLayout(false); 188 this.splitContainer.Panel1.PerformLayout(); 209 189 this.splitContainer.Panel2.ResumeLayout(false); 210 190 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); 211 191 this.splitContainer.ResumeLayout(false); 212 this.groupBox1.ResumeLayout(false);213 this.groupBox1.PerformLayout();214 192 this.ResumeLayout(false); 193 this.PerformLayout(); 215 194 216 195 } 217 196 218 197 #endregion 219 220 private System.Windows.Forms.GroupBox groupBox1; 221 private System.Windows.Forms.Label nodeQualityLabelLabel; 222 private System.Windows.Forms.Label nodeQualityLabel; 223 private System.Windows.Forms.Label nodeRankLabelLabel; 224 private System.Windows.Forms.Label nodeRankLabel; 225 private System.Windows.Forms.Label nodeDegreeLabel; 226 private System.Windows.Forms.Label nodeDegreeLabelLabel; 198 private System.Windows.Forms.StatusStrip selectedNodeStatusStrip; 199 private System.Windows.Forms.Label colorModeLabel; 200 private System.Windows.Forms.ComboBox nodeColorsComboBox; 201 private System.Windows.Forms.CheckBox traceCheckBox; 202 private System.Windows.Forms.CheckBox createNewViewCheckBox; 227 203 private System.Windows.Forms.Button navigateRightButton; 228 204 private System.Windows.Forms.Button navigateLeftButton; 229 private System.Windows.Forms.Label nodeWeightLabelLabel; 230 private System.Windows.Forms.Label nodeWeightLabel; 231 private System.Windows.Forms.CheckBox matchingModeButton; 205 private System.Windows.Forms.CheckBox lockCheckBox; 232 206 } 233 207 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs
r13892 r15561 103 103 lastTd = null; 104 104 105 nodeQualityLabel.Text = string.Format("{0:0.000}", graphNode.Quality); 106 nodeRankLabel.Text = string.Format("{0:0.0}", graphNode.Rank); 107 nodeDegreeLabel.Text = string.Format("{0} / {1}", graphNode.InDegree, graphNode.OutDegree); 108 nodeWeightLabel.Text = string.Format("{0:0.00}", graphNode.Weight); 105 selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}", 106 graphNode.Quality, graphNode.Rank, graphNode.InDegree, graphNode.OutDegree, graphNode.Weight); 109 107 110 108 // update the righthand side tree view when another genealogy graph node is selected … … 113 111 if (!graphNode.InArcs.Any()) return; // node has no ancestors, nothing to do 114 112 115 if ( openNew_CheckBox.Checked) {113 if (createNewViewCheckBox.Checked) { 116 114 // get the ancestors into a new view 117 115 var cloner = new Cloner(); … … 169 167 private void OnTreeNodeLeftClicked(ISymbolicExpressionTreeNode node) { 170 168 SelectedSubtree = node; 171 bool trace = genealogyGraphChart.TraceFragments;169 bool trace = traceCheckBox.Checked; 172 170 173 171 // check whether we are in 'trace' or 'match' mode … … 183 181 genealogyGraphChart.SuspendRendering(); 184 182 genealogyGraphChart.ClearPrimitives(); // clear everything 185 var rankMaximums = new Dictionary<double, double>(); 186 187 if (openNew_CheckBox.Checked) { 183 bool newView = createNewViewCheckBox.Checked; 184 if (newView) { 188 185 MainFormManager.MainForm.ShowContent(traceGraph); 189 186 } else { 190 } 191 // fill each vertex in the graph with a grayscale color according to average subtree weight 192 193 /* 194 var colorGradient = ColorGradient.GrayscaledColors; 195 var colorCount = colorGradient.Count - 1; 196 foreach (var r in Content.Ranks) { 197 var vertices = r.Value.Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>().ToList(); 198 var averages = vertices.Select(x => x.Data.IterateNodesPrefix().Average(n => n.NodeWeight)).ToList(); 199 var max = averages.Max(); 200 rankMaximums.Add(r.Key, max); 201 if (max.IsAlmost(0.0)) continue; 202 for (int i = 0; i < vertices.Count; ++i) { 203 var color = colorGradient[(int)Math.Round(averages[i] / max * colorCount)]; 204 var vNode = genealogyGraphChart.GetMappedNode(vertices[i]); 205 vNode.Brush = new SolidBrush(color); 206 } 207 } 208 // fill vertices that are part of the trace with a rgb color according to average subtree weight 209 if (traceGraph.Vertices.Any()) { 210 var ranks = traceGraph.Vertices.Select(x => Content.GetByContent(x.Data)).GroupBy(x => x.Rank); 211 foreach (var g in ranks) { 212 var vertices = g.ToList(); 213 var averages = vertices.Select(x => x.Data.IterateNodesPrefix().Average(n => n.NodeWeight)).ToList(); 214 double max = rankMaximums[g.Key]; 215 if (max.IsAlmost(0.0)) continue; 216 for (int i = 0; i < vertices.Count; ++i) { 217 var vNode = genealogyGraphChart.GetMappedNode(vertices[i]); 218 // use a grayscale gradient 219 var color = colorGradient[(int)Math.Round(averages[i] / max * colorCount)]; 220 vNode.Brush = new SolidBrush(color); 221 } 222 } 223 */ 224 225 // if (openNew_CheckBox.Checked) { 226 // MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen 227 // } 228 // } 229 genealogyGraphChart.ResumeRendering(); 187 genealogyGraphChart.SuspendRendering(); 188 genealogyGraphChart.HighlightNodes(traceGraph.Vertices); 189 genealogyGraphChart.ResumeRendering(); 190 } 230 191 } else { 231 192 // perform matching like it was done before 232 193 // currently there is no possibility to specify the subtree matching criteria 233 194 var trees = Content.Vertices.Select(x => x.Data); 234 comparer.MatchVariableWeights = matchingModeButton.Checked;235 comparer.MatchConstantValues = matchingModeButton.Checked;195 //comparer.MatchVariableWeights = matchingModeButton.Checked; 196 //comparer.MatchConstantValues = matchingModeButton.Checked; 236 197 var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(node, comparer)); 237 198 … … 251 212 252 213 var trees = Content.Vertices.Select(x => x.Data); 253 comparer.MatchVariableWeights = comparer.MatchConstantValues = matchingModeButton.Checked;214 //comparer.MatchVariableWeights = comparer.MatchConstantValues = matchingModeButton.Checked; 254 215 var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(clonedSubtree, comparer)); 255 216 … … 281 242 #endregion 282 243 283 284 285 244 private void graphChart_HighlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) { 286 245 genealogyGraphChart.SuspendRendering(); … … 290 249 } 291 250 251 #region treechart methods 292 252 private void treeChart_ClearColors() { 293 253 foreach (var node in SymbolicExpressionTreeChart.Tree.IterateNodesPrefix()) { … … 319 279 SymbolicExpressionTreeChart.RepaintNodes(); 320 280 } 281 #endregion 321 282 322 283 #region navigate the genealogy / trace graph … … 372 333 }); 373 334 } 374 375 376 335 } 377 336 if (arc == null) return; 378 337 lastTd = arc.Data as TraceData; 379 338 genealogyGraphChart.SelectedGraphNode = arc.Source; 380 UpdateTreeChart((IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source); 339 graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source; 340 UpdateTreeChart(graphNode); 341 342 var inDegreeDistinct = graphNode.InArcs.Select(x => x.Source).Distinct().Count(); 343 var outDegreeDistinct = graphNode.OutArcs.Select(x => x.Target).Distinct().Count(); 344 345 selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}", 346 graphNode.Quality, graphNode.Rank, inDegreeDistinct, outDegreeDistinct, graphNode.Weight); 381 347 } 382 348 … … 412 378 lastTd = arc.Data as TraceData; 413 379 genealogyGraphChart.SelectedGraphNode = arc.Source; 414 UpdateTreeChart((IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source); 380 graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source; 381 UpdateTreeChart(graphNode); 382 383 var inDegreeDistinct = graphNode.InArcs.Select(x => x.Source).Distinct().Count(); 384 var outDegreeDistinct = graphNode.OutArcs.Select(x => x.Target).Distinct().Count(); 385 386 selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}", 387 graphNode.Quality, graphNode.Rank, inDegreeDistinct, outDegreeDistinct, graphNode.Weight); 388 } 389 390 private void nodeColorsComboBox_SelectedIndexChanged(object sender, EventArgs e) { 391 switch (nodeColorsComboBox.SelectedIndex) { 392 case 0: // color by quality 393 genealogyGraphChart.ColorSelector = node => ColorGradient.Colors[(int)Math.Round(node.Quality * 255)]; 394 genealogyGraphChart.SuspendRendering(); 395 genealogyGraphChart.HighlightAll(); 396 genealogyGraphChart.ResumeRendering(); 397 break; 398 case 1: // color by weight 399 var weights = Content.Vertices.ToDictionary(v => (IGenealogyGraphNode)v, v => v.Data.IterateNodesPrefix().Average(x => x.NodeWeight)); 400 var max = weights.Values.Max(); 401 genealogyGraphChart.ColorSelector = node => ColorGradient.GrayscaledColors[(int)Math.Round(weights[node] / max * 255)]; 402 genealogyGraphChart.SuspendRendering(); 403 genealogyGraphChart.HighlightAll(); 404 genealogyGraphChart.ResumeRendering(); 405 break; 406 default: 407 break; 408 } 409 } 410 411 private void lockCheckBox_CheckedChanged(object sender, EventArgs e) { 412 genealogyGraphChart.LockGenealogy = lockCheckBox.Checked; 415 413 } 416 414 }
Note: See TracChangeset
for help on using the changeset viewer.