Changeset 566 for trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs
- Timestamp:
- 09/14/08 10:13:32 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs
r562 r566 52 52 private ResultList results; 53 53 private Dictionary<IPrimitive, Record> primitiveToRecordDictionary; 54 private Dictionary<Record, IPrimitive> recordToPrimitiveDictionary; 54 55 private Random random = new Random(); 55 56 private Group points; … … 59 60 records = new List<Record>(); 60 61 primitiveToRecordDictionary = new Dictionary<IPrimitive, Record>(); 62 recordToPrimitiveDictionary = new Dictionary<Record, IPrimitive>(); 61 63 this.results = results; 64 foreach(Record r in results.Records) { 65 records.Add(r); 66 r.OnSelectionChanged += new EventHandler(Record_OnSelectionChanged); 67 } 62 68 results.OnRecordAdded += new EventHandler<RecordAddedEventArgs>(results_OnRecordAdded); 69 results.Changed += new EventHandler(results_Changed); 70 } 71 72 void results_Changed(object sender, EventArgs e) { 73 Repaint(); 74 EnforceUpdate(); 63 75 } 64 76 … … 76 88 void Record_OnSelectionChanged(object sender, EventArgs e) { 77 89 Record r = (Record)sender; 78 foreach(KeyValuePair<IPrimitive, Record> pair in primitiveToRecordDictionary) { 79 if(pair.Value == r) { 80 IPrimitive primitive = pair.Key; 81 if(r.Selected) { 82 int alpha = primitive.Pen.Color.A; 83 primitive.Pen.Color = Color.FromArgb(alpha, selectionColor); 84 primitive.Brush = primitive.Pen.Brush; 85 primitive.IntoForeground(); 86 } else { 87 int alpha = primitive.Pen.Color.A; 88 primitive.Pen.Color = Color.FromArgb(alpha, defaultColor); 89 primitive.Brush = primitive.Pen.Brush; 90 primitive.IntoBackground(); 91 } 92 primitive.EnforceUpdate(); 93 } 94 } 95 } 96 97 //public void AddDimension(string name) { 98 // dimensions.Add(name); 99 // values.Add(name, new List<double>()); 100 //} 101 //public void RemoveDimension(string name) { 102 // dimensions.Remove(name); 103 // values.Remove(name); 104 //} 105 106 //public void AddDataPoint(string dimension, double value) { 107 // values[dimension].Add(value); 108 //} 90 IPrimitive primitive; 91 recordToPrimitiveDictionary.TryGetValue(r, out primitive); 92 if(primitive != null) { 93 ((FixedSizeCircle)primitive).UpdateEnabled = false; 94 points.UpdateEnabled = false; 95 if(r.Selected) { 96 int alpha = primitive.Pen.Color.A; 97 primitive.Pen.Color = Color.FromArgb(alpha, selectionColor); 98 primitive.Brush = primitive.Pen.Brush; 99 primitive.IntoForeground(); 100 } else { 101 int alpha = primitive.Pen.Color.A; 102 primitive.Pen.Color = Color.FromArgb(alpha, defaultColor); 103 primitive.Brush = primitive.Pen.Brush; 104 primitive.IntoBackground(); 105 } 106 ((FixedSizeCircle)primitive).UpdateEnabled = true; 107 points.UpdateEnabled = true; 108 } 109 } 109 110 110 111 public void SetBubbleSizeDimension(string dimension, bool inverted) { … … 133 134 134 135 private void Repaint() { 136 if(xDimension == null || yDimension == null) return; 135 137 lock(records) { 136 138 double maxSize = 1; … … 144 146 Group.Clear(); 145 147 primitiveToRecordDictionary.Clear(); 148 recordToPrimitiveDictionary.Clear(); 146 149 points = new Group(this); 147 150 Group.Add(new Axis(this, 0, 0, AxisType.Both)); 148 151 UpdateViewSize(0, 0, 5); 149 152 foreach(Record r in records) { 150 double x = r.Get(xDimension) + (random.NextDouble() * 2.0 - 1.0) * xJitterFactor;151 double y = r.Get(yDimension) + (random.NextDouble() * 2.0 - 1.0) * yJitterFactor;153 double x = r.Get(xDimension) + r.Get(Record.X_JITTER) * xJitterFactor; 154 double y = r.Get(yDimension) + r.Get(Record.Y_JITTER) * yJitterFactor; 152 155 int size = CalculateSize(r.Get(sizeDimension), minSize, maxSize); 153 156 … … 157 160 UpdateViewSize(x, y, size); 158 161 int alpha = CalculateAlpha(size); 159 Pen pen = new Pen(Color.FromArgb(alpha, defaultColor));162 Pen pen = new Pen(Color.FromArgb(alpha, r.Selected ? selectionColor: defaultColor)); 160 163 Brush brush = pen.Brush; 161 164 FixedSizeCircle c = new FixedSizeCircle(this, x, y, size, pen, brush); … … 163 166 points.Add(c); 164 167 primitiveToRecordDictionary[c] = r; 168 recordToPrimitiveDictionary[r] = c; 165 169 } 166 170 } … … 223 227 primitiveToRecordDictionary.TryGetValue(p, out r); 224 228 if(r != null) r.ToggleSelected(); 229 results.FireChanged(); 225 230 } 226 231 } else base.MouseClick(point, button); … … 237 242 } else base.MouseDoubleClick(point, button); 238 243 } 244 245 public override void MouseDrag(Point start, Point end, MouseButtons button) { 246 if(button == MouseButtons.Left && Mode == ChartMode.Select) { 247 PointD a = TransformPixelToWorld(start); 248 PointD b = TransformPixelToWorld(end); 249 double minX = Math.Min(a.X, b.X); 250 double minY = Math.Min(a.Y, b.Y); 251 double maxX = Math.Max(a.X, b.X); 252 double maxY = Math.Max(a.Y, b.Y); 253 HeuristicLab.Charting.Rectangle r = new HeuristicLab.Charting.Rectangle(this, minX, minY, maxX, maxY); 254 255 List<IPrimitive> primitives = new List<IPrimitive>(); 256 primitives.AddRange(points.Primitives); 257 258 foreach(FixedSizeCircle p in primitives) { 259 if(r.ContainsPoint(p.Point)) { 260 primitiveToRecordDictionary[p].ToggleSelected(); 261 } 262 } 263 results.FireChanged(); 264 } else { 265 base.MouseDrag(start, end, button); 266 } 267 } 239 268 } 240 269 }
Note: See TracChangeset
for help on using the changeset viewer.