public CalibrationWindow(OptiTrackSystem optiTrack, KUKARobot robot1, KUKARobot robot2) { calibrationTool = new CalibrationTool(optiTrack); InitializeComponent(); Text = title; MinimumSize = new Size(Width, Height); MaximumSize = new Size(Width, Height); BindingList <KUKARobot> robotsList = new BindingList <KUKARobot>(); robotSelect.DropDown += (s, e) => { if (robotsList.Contains(robot1)) { if (!robot1.IsInitialized()) { robotsList.Remove(robot1); } } else { if (robot1.IsInitialized()) { robotsList.Add(robot1); } } if (robotsList.Contains(robot2)) { if (!robot2.IsInitialized()) { robotsList.Remove(robot2); } } else { if (robot2.IsInitialized()) { robotsList.Add(robot2); } } }; robotSelect.TextChanged += (s, e) => { selectedRobot = (KUKARobot)robotSelect.SelectedItem; if (selectedRobot != null) { startBtn.Enabled = true; } else { startBtn.Enabled = false; } }; robotSelect.DataSource = robotsList; robotSelect.Text = "- Select robot -"; FormClosing += (s, e) => calibrationTool.Cancel(); startBtn.Click += (s, e) => { calibrationTool.Calibrate(selectedRobot, (int)intermediatePoints.Value, (int)samplesPerPoint.Value); }; stopBtn.Click += (s, e) => { Text = title; robotSelect.Enabled = true; startBtn.Enabled = true; calibrationTool.Cancel(); }; calibrationTool.Start += () => { UpdateUI(() => { Text = $"{title} (0%)"; robotSelect.Enabled = false; startBtn.Enabled = false; }); }; calibrationTool.ProgressChanged += (progress, transformation) => { selectedRobot.OptiTrackTransformation = transformation; UpdateUI(() => { Text = $"{title} ({progress}%)"; progressBar.Value = progress; m11.Text = transformation[0, 0].ToString("F3"); m12.Text = transformation[0, 1].ToString("F3"); m13.Text = transformation[0, 2].ToString("F3"); m14.Text = transformation[0, 3].ToString("F3"); m21.Text = transformation[1, 0].ToString("F3"); m22.Text = transformation[1, 1].ToString("F3"); m23.Text = transformation[1, 2].ToString("F3"); m24.Text = transformation[1, 3].ToString("F3"); m31.Text = transformation[2, 0].ToString("F3"); m32.Text = transformation[2, 1].ToString("F3"); m33.Text = transformation[2, 2].ToString("F3"); m34.Text = transformation[2, 3].ToString("F3"); m41.Text = transformation[3, 0].ToString("F3"); m42.Text = transformation[3, 1].ToString("F3"); m43.Text = transformation[3, 2].ToString("F3"); m44.Text = transformation[3, 3].ToString("F3"); }); }; calibrationTool.Completed += (transformation) => { selectedRobot.OptiTrackTransformation = transformation; UpdateUI(() => { robotSelect.Enabled = true; startBtn.Enabled = true; }); }; }
public CalibrationWindow(Robot robot, OptiTrackSystem optiTrack) { InitializeComponent(); Transformation currentTransformation = null; calibrationTool = new CalibrationTool(robot, optiTrack); calibrationTool.Start += () => { Dispatcher.Invoke(() => { progressBar.Value = 0; progressBarLabel.Content = "0%"; startBtn.IsEnabled = false; cancelBtn.IsEnabled = true; }); }; calibrationTool.ProgressChanged += (progress, transformation) => { currentTransformation = transformation; Dispatcher.Invoke(() => { progressBar.Value = progress; progressBarLabel.Content = $"{progress}%"; t00.Text = transformation[0, 0].ToString("F3"); t01.Text = transformation[0, 1].ToString("F3"); t02.Text = transformation[0, 2].ToString("F3"); t03.Text = transformation[0, 3].ToString("F3"); t10.Text = transformation[1, 0].ToString("F3"); t11.Text = transformation[1, 1].ToString("F3"); t12.Text = transformation[1, 2].ToString("F3"); t13.Text = transformation[1, 3].ToString("F3"); t20.Text = transformation[2, 0].ToString("F3"); t21.Text = transformation[2, 1].ToString("F3"); t22.Text = transformation[2, 2].ToString("F3"); t23.Text = transformation[2, 3].ToString("F3"); t30.Text = transformation[3, 0].ToString("F3"); t31.Text = transformation[3, 1].ToString("F3"); t32.Text = transformation[3, 2].ToString("F3"); t33.Text = transformation[3, 3].ToString("F3"); }); }; calibrationTool.Completed += () => { Completed?.Invoke(currentTransformation); Close(); }; startBtn.Click += (s, e) => { try { calibrationTool.Calibrate(10, 200); } catch (Exception ex) { MainWindow.ShowErrorDialog("Unable to start calibration.", ex); } }; cancelBtn.Click += (s, e) => { calibrationTool.Cancel(); }; Closing += (s, e) => { calibrationTool.Cancel(); }; robotIpAdress.Content += robot.ToString(); }