| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using System.Windows.Controls;
- using System.Windows.Input;
- using TeamAAS_VP.Models;
- using System.Text;
- using System.Windows;
- using System.Collections;
- using System.Collections.ObjectModel;
- using System.Globalization;
- using System.Collections.Generic;
- namespace TeamAAS_VP.Views.Product
- {
- /// <summary>
- /// Interaction logic for RobotPointParams
- /// </summary>
- public partial class RobotPointParams : UserControl
- {
- public RobotPointParams()
- {
- InitializeComponent();
- }
- private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
- {
- }
- private void dgPoints_PreviewKeyDown(object sender, KeyEventArgs e)
- {
- var dg = sender as DataGrid;
- if (dg == null) return;
- // handle Ctrl+C
- if (e.Key == Key.C && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
- {
- var item = dg.SelectedItem as RPoint;
- if (item != null)
- {
- var sb = new StringBuilder();
- sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}", item.Number, item.Label, item.X, item.Y, item.Z, item.U, item.V, item.W, item.Hand, item.Tool);
- Clipboard.SetText(sb.ToString());
- e.Handled = true;
- }
- }
- // handle Ctrl+V - paste as new row
- if (e.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
- {
- var text = Clipboard.ContainsText() ? Clipboard.GetText() : string.Empty;
- if (!string.IsNullOrWhiteSpace(text))
- {
- // split by tabs or newlines
- var tokens = text.Split(new[] { '\t', '\r', '\n' });
- if (tokens.Length >= 3)
- {
- // attempt to parse fields in expected order: Number, Label, X, Y, Z, U, V, W, Hand, Tool
- int number = 0;
- int.TryParse(tokens[0], out number);
- string label = tokens.Length > 1 ? tokens[1] : string.Empty;
- float ParseFloat(string s)
- {
- if (float.TryParse(s, NumberStyles.Float, CultureInfo.CurrentCulture, out float v)) return v;
- if (float.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out v)) return v;
- return 0f;
- }
- float x = tokens.Length > 2 ? ParseFloat(tokens[2]) : 0f;
- float y = tokens.Length > 3 ? ParseFloat(tokens[3]) : 0f;
- float z = tokens.Length > 4 ? ParseFloat(tokens[4]) : 0f;
- float u = tokens.Length > 5 ? ParseFloat(tokens[5]) : 0f;
- float v2 = tokens.Length > 6 ? ParseFloat(tokens[6]) : 0f;
- float w = tokens.Length > 7 ? ParseFloat(tokens[7]) : 0f;
- // Hand may be enum or number
- TeamAAS_VP.Enums.RobotHand hand = TeamAAS_VP.Enums.RobotHand.Left;
- if (tokens.Length > 8)
- {
- var hstr = tokens[8];
- if (!string.IsNullOrWhiteSpace(hstr))
- {
- if (int.TryParse(hstr, out int ih))
- {
- if (System.Enum.IsDefined(typeof(TeamAAS_VP.Enums.RobotHand), ih)) hand = (TeamAAS_VP.Enums.RobotHand)ih;
- }
- else
- {
- TeamAAS_VP.Enums.RobotHand eh;
- if (System.Enum.TryParse<TeamAAS_VP.Enums.RobotHand>(hstr, true, out eh)) hand = eh;
- }
- }
- }
- int tool = 0;
- if (tokens.Length > 9) int.TryParse(tokens[9], out tool);
- // create new RPoint and insert into underlying collection
- var newPoint = new RPoint()
- {
- Number = number,
- Label = label,
- X = x,
- Y = y,
- Z = z,
- U = u,
- V = v2,
- W = w,
- Hand = hand,
- Tool = tool
- };
- // try to insert into ItemsSource if it is IList
- var items = dg.ItemsSource as IList;
- if (items != null)
- {
- // if there's a selected item, overwrite it
- var selectedExisting = dg.SelectedItem as RPoint;
- if (selectedExisting != null)
- {
- //selectedExisting.Number = newPoint.Number;
- selectedExisting.Label = newPoint.Label;
- selectedExisting.X = newPoint.X;
- selectedExisting.Y = newPoint.Y;
- selectedExisting.Z = newPoint.Z;
- selectedExisting.U = newPoint.U;
- selectedExisting.V = newPoint.V;
- selectedExisting.W = newPoint.W;
- selectedExisting.Hand = newPoint.Hand;
- selectedExisting.Tool = newPoint.Tool;
- // keep selection
- dg.SelectedItem = selectedExisting;
- }
- else
- {
- int insertIndex = dg.SelectedIndex >= 0 ? dg.SelectedIndex + 1 : items.Count;
- // append/insert when no selection
- if (items is IList<RPoint> typed)
- {
- // append to end for paste
- typed.Add(newPoint);
- dg.SelectedIndex = typed.Count - 1;
- }
- else if (items is IList genericList)
- {
- genericList.Add(newPoint);
- dg.SelectedIndex = genericList.Count - 1;
- }
- else
- {
- // fallback: try to add via DataContext.SelectedRobot.Points
- var vm = this.DataContext as TeamAAS_VP.ViewModels.Product.RobotPointParamsViewModel;
- if (vm != null && vm.SelectedRobot != null && vm.SelectedRobot.Points != null)
- {
- vm.SelectedRobot.Points.Add(newPoint);
- dg.SelectedIndex = vm.SelectedRobot.Points.Count - 1;
- }
- }
- }
- e.Handled = true;
- }
- }
- }
- }
- // handle Delete - clear coordinates to default (0)
- if (e.Key == Key.Delete)
- {
- var item = dg.SelectedItem as RPoint;
- if (item != null)
- {
- item.X = 0;
- item.Y = 0;
- item.Z = 0;
- item.U = 0;
- item.V = 0;
- item.W = 0;
- // optional: clear other fields
- item.Description = string.Empty;
- MessageBox.Show("已清除所选点的坐标数据。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
- e.Handled = true;
- }
- }
- }
- }
- }
|