public ScatterPlotControl(ScatterPlotNodeModel model) { InitializeComponent(); model.PropertyChanged += NodeModel_PropertyChanged; BuildUI(model); DataContext = this; }
private void BuildUI(ScatterPlotNodeModel model) { // Load sample data if any ports are not connected if (!model.InPorts[0].IsConnected && !model.InPorts[1].IsConnected && !model.InPorts[2].IsConnected && !model.InPorts[3].IsConnected) { var ValuesA = new ChartValues <ObservablePoint>(); var ValuesB = new ChartValues <ObservablePoint>(); var ValuesC = new ChartValues <ObservablePoint>(); for (var i = 0; i < 20; i++) { ValuesA.Add(new ObservablePoint(rnd.NextDouble() * 10, rnd.NextDouble() * 10)); ValuesB.Add(new ObservablePoint(rnd.NextDouble() * 10, rnd.NextDouble() * 10)); ValuesC.Add(new ObservablePoint(rnd.NextDouble() * 10, rnd.NextDouble() * 10)); } var plot1 = new ScatterSeries { Title = "Plot 1", Values = ValuesA }; var plot2 = new ScatterSeries { Title = "Plot 2", Values = ValuesB }; var plot3 = new ScatterSeries { Title = "Plot 3", Values = ValuesC }; var plots = new ScatterSeries[] { plot1, plot2, plot3 }; ScatterPlot.Series.AddRange(plots); } // Else load input data else if (model.InPorts[0].IsConnected && model.InPorts[1].IsConnected && model.InPorts[2].IsConnected && model.InPorts[3].IsConnected) { if (model.Labels.Count == model.XValues.Count && model.XValues.Count == model.YValues.Count && model.Labels.Count > 0) { var plots = new List <ScatterSeries>(); // For each set of points for (var i = 0; i < model.Labels.Count; i++) { ChartValues <ObservablePoint> points = new ChartValues <ObservablePoint>(); // For each x-value list for (int j = 0; j < model.XValues[i].Count; j++) { points.Add(new ObservablePoint { X = model.XValues[i][j], Y = model.YValues[i][j] }); } plots.Add(new ScatterSeries { Title = model.Labels[i], Values = points, Fill = model.Colors[i] }); } ScatterPlot.Series.AddRange(plots); } } }