- Timestamp:
- 12/29/17 16:43:29 (7 years ago)
- Location:
- branches/HeuristicLab.EvolutionTracking
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
r13877 r15561 32 32 public partial class GenealogyGraphChart : ChartControl { 33 33 private IGenealogyGraph genealogyGraph; 34 private const double XIncrement = 30;35 private const double YIncrement = 30;34 private const double XIncrement = 25; 35 private const double YIncrement = 25; 36 36 private const double Diameter = 20; 37 37 private readonly Brush defaultBrush; … … 44 44 public bool SimpleLineages { get; set; } 45 45 public bool LockGenealogy { get; set; } 46 public bool TraceFragments{ get; set; }46 public Func<IGenealogyGraphNode, Color> ColorSelector { get; set; } 47 47 #endregion 48 48 … … 98 98 } 99 99 100 public GenealogyGraphChart() : base(new Chart(0, 0, 800, 600)) {100 public GenealogyGraphChart() : base(new GridlessChart(0, 0, 800, 600)) { 101 101 InitializeComponent(); 102 102 AddChartModes(new PanChartMode(this), new ZoomInChartMode(this), new ZoomOutChartMode(this), new SelectChartMode(this)); 103 103 defaultBrush = new SolidBrush(Color.Transparent); 104 104 defaultPen = new Pen(Color.DarkGray); 105 106 ColorSelector = node => ColorGradient.Colors[(int)Math.Round(node.Quality * 255)]; 105 107 } 106 108 … … 114 116 115 117 foreach (var rank in ranks) { 118 var rect = new Visualization.Rectangle(Chart, new PointD(x, y), new PointD(x + diameter, y + diameter)); 119 var font = new Font(FontFamily.GenericSansSerif, 12); 120 var genLabel = new LabeledPrimitive(rect, rank.Rank.ToString(), font); 121 Chart.Group.Add(genLabel); 122 123 x += xIncrement; 124 116 125 var nodes = rank.Nodes.ToList(); 117 126 nodes.Sort((a, b) => b.CompareTo(a)); // sort descending by quality … … 119 128 120 129 foreach (var node in nodes) { 121 var brush = new SolidBrush( node.GetColor());130 var brush = new SolidBrush(ColorSelector(node)); 122 131 var visualNode = new VisualGenealogyGraphNode(Chart, x, y, x + diameter, y + diameter, defaultPen, brush) { 123 132 Data = node, … … 199 208 var visualNode = GetMappedNode(graphNode); 200 209 201 DrawLineage(visualNode, n => SimpleLineages ? n.IncomingArcs.Take(1) : n.IncomingArcs, a => a.Source );210 DrawLineage(visualNode, n => SimpleLineages ? n.IncomingArcs.Take(1) : n.IncomingArcs, a => a.Source, ColorSelector); 202 211 ((SolidBrush)visualNode.Brush).Color = Color.Transparent; 203 DrawLineage(visualNode, n => n.OutgoingArcs, a => a.Target );212 DrawLineage(visualNode, n => n.OutgoingArcs, a => a.Target, ColorSelector); 204 213 } 205 214 … … 212 221 213 222 #region drawing routines 214 private static void DrawLineage(VisualGenealogyGraphNode node, Func<VisualGenealogyGraphNode, IEnumerable<VisualGenealogyGraphArc>> arcSelector, Func<VisualGenealogyGraphArc, VisualGenealogyGraphNode> nodeSelector ) {223 private static void DrawLineage(VisualGenealogyGraphNode node, Func<VisualGenealogyGraphNode, IEnumerable<VisualGenealogyGraphArc>> arcSelector, Func<VisualGenealogyGraphArc, VisualGenealogyGraphNode> nodeSelector, Func<IGenealogyGraphNode, Color> getNodeColor) { 215 224 var brush = (SolidBrush)node.Brush; 216 225 if (brush.Color != Color.Transparent) return; // this lineage was already drawn (avoid redrawing common ancestors) 217 brush.Color = node.Data.GetColor();226 brush.Color = getNodeColor(node.Data); 218 227 var arcs = arcSelector(node); 219 228 var pen = new Pen(Color.Transparent); … … 224 233 var end = new Point((int)arc.End.X, (int)arc.End.Y); 225 234 arc.Pen = pen; 226 arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());227 DrawLineage(nodeSelector(arc), arcSelector, nodeSelector );235 arc.Pen.Brush = new LinearGradientBrush(start, end, getNodeColor(source), getNodeColor(target)); 236 DrawLineage(nodeSelector(arc), arcSelector, nodeSelector, getNodeColor); 228 237 } 229 238 } … … 287 296 foreach (var node in nodes) { 288 297 var graphNode = GetMappedNode(node); 289 graphNode.Brush = new SolidBrush( node.GetColor());298 graphNode.Brush = new SolidBrush(ColorSelector(node)); 290 299 } 291 300 } … … 302 311 public void HighlightAll() { 303 312 foreach (var visualNode in nodeMap.Values) { 304 visualNode.Brush = new SolidBrush(visualNode.Data.GetColor()); 305 } 313 visualNode.Brush = new SolidBrush(ColorSelector(visualNode.Data)); 314 Chart.IntoForeground(visualNode); 315 } 316 // draw arcs first and then nodes 306 317 foreach (var arc in arcMap.Values) { 307 318 var source = arc.Source.Data; … … 309 320 var start = new Point((int)arc.Start.X, (int)arc.Start.Y); 310 321 var end = new Point((int)arc.End.X, (int)arc.End.Y); 311 arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor()); 322 arc.Pen = new Pen(new LinearGradientBrush(start, end, ColorSelector(source), ColorSelector(target))); 323 Chart.IntoBackground(arc); 312 324 } 313 325 } … … 319 331 var end = new Point((int)arc.End.X, (int)arc.End.Y); 320 332 arc.Pen = new Pen(Color.Transparent); 321 arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor()); 333 arc.Pen = new Pen(new LinearGradientBrush(start, end, ColorSelector(source), ColorSelector(target))); 334 Chart.IntoBackground(arc); 322 335 } 323 336 #endregion 324 } 325 326 internal static class Util { 327 public static Color GetColor(this IGenealogyGraphNode node) { 328 if (double.IsNaN(node.Quality)) 329 return ColorGradient.Colors[0]; 330 var colorIndex = (int)Math.Round(node.Quality * ColorGradient.Colors.Count); 331 if (colorIndex >= ColorGradient.Colors.Count) return ColorGradient.Colors.Last(); 332 return ColorGradient.Colors[colorIndex]; 337 338 // workaround to disable the chart grid 339 private class GridlessChart : Chart { 340 public GridlessChart(PointD lowerLeft, PointD upperRight) : base(lowerLeft, upperRight) { 341 Grid = null; 342 } 343 344 public GridlessChart(double x1, double y1, double x2, double y2) : this(new PointD(x1, y1), new PointD(x2, y2)) { } 333 345 } 334 346 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs
r13061 r15561 26 26 private void InitializeComponent() { 27 27 this.splitContainer = new System.Windows.Forms.SplitContainer(); 28 this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart(); 28 29 this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 29 this.groupBox = new System.Windows.Forms.GroupBox();30 this.openNew_CheckBox = new System.Windows.Forms.CheckBox();31 this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();32 this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();33 this.trace_checkBox = new System.Windows.Forms.CheckBox();34 this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();35 30 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); 36 31 this.splitContainer.Panel1.SuspendLayout(); 37 32 this.splitContainer.Panel2.SuspendLayout(); 38 33 this.splitContainer.SuspendLayout(); 39 this.groupBox.SuspendLayout();40 34 this.SuspendLayout(); 41 35 // … … 45 39 | System.Windows.Forms.AnchorStyles.Left) 46 40 | System.Windows.Forms.AnchorStyles.Right))); 47 this.splitContainer.Location = new System.Drawing.Point(3, 55);41 this.splitContainer.Location = new System.Drawing.Point(3, 3); 48 42 this.splitContainer.Name = "splitContainer"; 49 43 // … … 55 49 // 56 50 this.splitContainer.Panel2.Controls.Add(this.viewHost); 57 this.splitContainer.Size = new System.Drawing.Size(1 394, 742);58 this.splitContainer.SplitterDistance = 69 4;51 this.splitContainer.Size = new System.Drawing.Size(1404, 794); 52 this.splitContainer.SplitterDistance = 698; 59 53 this.splitContainer.TabIndex = 0; 54 // 55 // genealogyGraphChart 56 // 57 this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 58 | System.Windows.Forms.AnchorStyles.Left) 59 | System.Windows.Forms.AnchorStyles.Right))); 60 this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control; 61 this.genealogyGraphChart.GenealogyGraph = null; 62 this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0); 63 this.genealogyGraphChart.LockGenealogy = false; 64 this.genealogyGraphChart.Mode = null; 65 this.genealogyGraphChart.Name = "genealogyGraphChart"; 66 this.genealogyGraphChart.ScaleOnResize = true; 67 this.genealogyGraphChart.SelectedGraphNode = null; 68 this.genealogyGraphChart.ShowToolBar = true; 69 this.genealogyGraphChart.SimpleLineages = false; 70 this.genealogyGraphChart.Size = new System.Drawing.Size(693, 790); 71 this.genealogyGraphChart.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; 72 this.genealogyGraphChart.TabIndex = 0; 60 73 // 61 74 // viewHost … … 71 84 this.viewHost.Name = "viewHost"; 72 85 this.viewHost.ReadOnly = false; 73 this.viewHost.Size = new System.Drawing.Size( 697, 743);86 this.viewHost.Size = new System.Drawing.Size(703, 795); 74 87 this.viewHost.TabIndex = 0; 75 88 this.viewHost.ViewsLabelVisible = true; 76 89 this.viewHost.ViewType = null; 77 //78 // groupBox79 //80 this.groupBox.Controls.Add(this.openNew_CheckBox);81 this.groupBox.Controls.Add(this.lockGraph_checkBox);82 this.groupBox.Controls.Add(this.simpleLineages_checkBox);83 this.groupBox.Controls.Add(this.trace_checkBox);84 this.groupBox.Location = new System.Drawing.Point(3, 4);85 this.groupBox.Name = "groupBox";86 this.groupBox.Size = new System.Drawing.Size(602, 44);87 this.groupBox.TabIndex = 1;88 this.groupBox.TabStop = false;89 this.groupBox.Text = "Genealogy Options";90 //91 // openNew_CheckBox92 //93 this.openNew_CheckBox.AutoSize = true;94 this.openNew_CheckBox.Location = new System.Drawing.Point(485, 19);95 this.openNew_CheckBox.Name = "openNew_CheckBox";96 this.openNew_CheckBox.Size = new System.Drawing.Size(111, 17);97 this.openNew_CheckBox.TabIndex = 1;98 this.openNew_CheckBox.Text = "Open in new view";99 this.openNew_CheckBox.UseVisualStyleBackColor = true;100 //101 // lockGraph_checkBox102 //103 this.lockGraph_checkBox.Appearance = System.Windows.Forms.Appearance.Button;104 this.lockGraph_checkBox.AutoSize = true;105 this.lockGraph_checkBox.Location = new System.Drawing.Point(157, 15);106 this.lockGraph_checkBox.Name = "lockGraph_checkBox";107 this.lockGraph_checkBox.Size = new System.Drawing.Size(73, 23);108 this.lockGraph_checkBox.TabIndex = 0;109 this.lockGraph_checkBox.Text = "Lock Graph";110 this.lockGraph_checkBox.UseVisualStyleBackColor = true;111 this.lockGraph_checkBox.CheckedChanged += new System.EventHandler(this.lockGraph_checkBox_CheckedChanged);112 //113 // simpleLineages_checkBox114 //115 this.simpleLineages_checkBox.Appearance = System.Windows.Forms.Appearance.Button;116 this.simpleLineages_checkBox.AutoSize = true;117 this.simpleLineages_checkBox.Location = new System.Drawing.Point(57, 15);118 this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";119 this.simpleLineages_checkBox.Size = new System.Drawing.Size(94, 23);120 this.simpleLineages_checkBox.TabIndex = 0;121 this.simpleLineages_checkBox.Text = "Simple Lineages";122 this.simpleLineages_checkBox.UseVisualStyleBackColor = true;123 this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);124 //125 // trace_checkBox126 //127 this.trace_checkBox.Appearance = System.Windows.Forms.Appearance.Button;128 this.trace_checkBox.AutoSize = true;129 this.trace_checkBox.Location = new System.Drawing.Point(6, 15);130 this.trace_checkBox.Name = "trace_checkBox";131 this.trace_checkBox.Size = new System.Drawing.Size(45, 23);132 this.trace_checkBox.TabIndex = 0;133 this.trace_checkBox.Text = "Trace";134 this.trace_checkBox.UseVisualStyleBackColor = true;135 this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);136 //137 // genealogyGraphChart138 //139 this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)140 | System.Windows.Forms.AnchorStyles.Left)141 | System.Windows.Forms.AnchorStyles.Right)));142 this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;143 this.genealogyGraphChart.GenealogyGraph = null;144 this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);145 this.genealogyGraphChart.LockGenealogy = false;146 this.genealogyGraphChart.Name = "genealogyGraphChart";147 this.genealogyGraphChart.ScaleOnResize = true;148 this.genealogyGraphChart.SelectedGraphNode = null;149 this.genealogyGraphChart.SimpleLineages = false;150 this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);151 this.genealogyGraphChart.TabIndex = 0;152 this.genealogyGraphChart.TraceFragments = false;153 90 // 154 91 // GenealogyGraphView … … 156 93 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 157 94 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 158 this.Controls.Add(this.groupBox);159 95 this.Controls.Add(this.splitContainer); 160 96 this.Name = "GenealogyGraphView"; 161 this.Size = new System.Drawing.Size(14 00, 800);97 this.Size = new System.Drawing.Size(1410, 800); 162 98 this.splitContainer.Panel1.ResumeLayout(false); 163 99 this.splitContainer.Panel2.ResumeLayout(false); 164 100 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); 165 101 this.splitContainer.ResumeLayout(false); 166 this.groupBox.ResumeLayout(false);167 this.groupBox.PerformLayout();168 102 this.ResumeLayout(false); 169 103 … … 175 109 protected MainForm.WindowsForms.ViewHost viewHost; 176 110 protected GenealogyGraphChart genealogyGraphChart; 177 private System.Windows.Forms.GroupBox groupBox;178 protected System.Windows.Forms.CheckBox trace_checkBox;179 protected System.Windows.Forms.CheckBox simpleLineages_checkBox;180 protected System.Windows.Forms.CheckBox lockGraph_checkBox;181 protected System.Windows.Forms.CheckBox openNew_CheckBox;182 111 183 112 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs
r12225 r15561 7 7 [View("GenealogyGraphView")] 8 8 [Content(typeof(IGenealogyGraph<>), IsDefaultView = false)] 9 public partial class GenealogyGraphView<T> : ItemView where T : class, IItem {9 public partial class GenealogyGraphView<T> : ItemView where T : class, IItem { 10 10 public new IGenealogyGraph<T> Content { 11 11 get { return (IGenealogyGraph<T>)base.Content; } … … 49 49 var visualNode = (VisualGenealogyGraphNode)sender; 50 50 var graphNode = (IGenealogyGraphNode<T>)visualNode.Data; 51 if (graphNode == null) return; 52 var content = graphNode.Data; 53 if (content == null) return; 54 viewHost.Content = content; 51 if (graphNode == null || graphNode.Data == null) return; 52 viewHost.Content = graphNode.Data; 55 53 } 56 54 public virtual void graphChart_GenealogyGraphNodeDoubleClicked(object sender, MouseEventArgs arcs) { … … 60 58 #region events for configuring the behavior of the genealogy chart (trace/match, simple lineages, etc) 61 59 private void trace_checkBox_CheckedChanged(object sender, System.EventArgs e) { 62 genealogyGraphChart.TraceFragments = trace_checkBox.Checked;60 //genealogyGraphChart.TraceFragments = trace_checkBox.Checked; 63 61 } 64 62 65 63 private void simpleLineages_checkBox_CheckedChanged(object sender, System.EventArgs e) { 66 genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;64 //genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked; 67 65 } 68 66 69 67 private void lockGraph_checkBox_CheckedChanged(object sender, System.EventArgs e) { 70 genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;68 //genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked; 71 69 } 72 70 #endregion -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj
r15351 r15561 97 97 </ItemGroup> 98 98 <ItemGroup> 99 <Compile Include="GenealogyGraphChart.cs" /> 99 <Compile Include="GenealogyGraphChart.cs"> 100 <SubType>UserControl</SubType> 101 </Compile> 100 102 <Compile Include="GenealogyGraphChart.Designer.cs"> 101 103 <DependentUpon>GenealogyGraphChart.cs</DependentUpon> -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed (with no actual effect on merging)
-
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.