using OpenSEMI.ClientBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Venus_Core; using OpenSEMI.Ctrlib.Controls; using System.Diagnostics; using System.IO; namespace Venus_Themes.UserControls { /// /// VceControl.xaml 的交互逻辑 /// public partial class VceControl : UserControl { public VceControl() { InitializeComponent(); } //Wafer信息 public double TransformData { get { return (double)GetValue(TransformDataProperty); } set { SetValue(TransformDataProperty, value); } } public static readonly DependencyProperty TransformDataProperty = DependencyProperty.Register("TransformData", typeof(double), typeof(VceControl), new UIPropertyMetadata(null)); public List UnitData2 { get { return (List)GetValue(UnitData2Property); } set { SetValue(UnitData2Property, value); } } public static readonly DependencyProperty UnitData2Property = DependencyProperty.Register("UnitData2", typeof(List), typeof(VceControl), new PropertyMetadata(null,FoupWafer)); public static void FoupWafer(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is VceControl vceControl) { List UnitData = ((List)e.NewValue); foreach (WaferInfo item in UnitData) { if (item.WaferStatus == 1) { vceControl.vceFoupAndWafer.Children.Add(VceWaferNames[item.SlotID]); } else { vceControl.vceFoupAndWafer.Children.Remove(VceWaferNames[item.SlotID]); } } } } public bool ShowTitle1 { get { return (bool)GetValue(ShowTitle1Property); } set { SetValue(ShowTitle1Property, value); } } public static readonly DependencyProperty ShowTitle1Property = DependencyProperty.Register("ShowTitle1", typeof(bool), typeof(VceControl), new UIPropertyMetadata(true)); private void Slot_SlotMouseButtonDown(object sender, MouseButtonEventArgs e) { VenusGlobalEvents.OnSlotRightClickChanged(sender as Slot); } private void Slot_WaferTransferStarted(object sender, DragDropEventArgs e) { try { VenusGlobalEvents.OnSlotWaferTransfer(e); } catch (Exception ex) { Trace.WriteLine(ex); } } //画Foup private void foup_Loaded(object sender, RoutedEventArgs e) { if (UnitData2 != null) { DrawFoup(); } } //支撑底柱高度 public static readonly DependencyProperty PositionZProperty = DependencyProperty.Register( "PositionZ", typeof(double), typeof(VceControl)); public double PositionZ { get { return (double)GetValue(PositionZProperty); } set { SetValue(PositionZProperty, value); } } //是否开门 public static readonly DependencyProperty VceDoorIsOpenProperty = DependencyProperty.Register( "VceDoorIsOpen", typeof(bool), typeof(VceControl)); public bool VceDoorIsOpen { get { return (bool)this.GetValue(VceDoorIsOpenProperty); } set { SetValue(VceDoorIsOpenProperty, value); } } //槽口位置 public int CurrentSlot { get { return (int)GetValue(CurrentSlotProperty); } set { SetValue(CurrentSlotProperty, value); } } public static readonly DependencyProperty CurrentSlotProperty = DependencyProperty.Register("CurrentSlot", typeof(int), typeof(VceControl), new PropertyMetadata(SelectWafer)); //通过监听Slot值的变化改变wafer样式与Foup移动 private static Image[] VceWaferNames = new Image[25]; public static void SelectWafer(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is VceControl vceControl) { //if (Convert.ToInt32(e.NewValue) >= 0 && Convert.ToInt32(e.OldValue) >= 0) //{ // VceWaferNames[(int)e.NewValue].Source = new BitmapImage(new Uri(@"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/WaferSelected.png", UriKind.RelativeOrAbsolute)); // VceWaferNames[(int)e.OldValue].Source = new BitmapImage(new Uri(@"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/Wafer.png", UriKind.RelativeOrAbsolute)); // DoubleAnimation floatY = new DoubleAnimation( // 430 - 7 * (25 - (int)e.NewValue), // TimeSpan.FromSeconds(3) // ); // vceControl.Foup.BeginAnimation(Canvas.TopProperty, floatY); //} //else if (Convert.ToInt32(e.NewValue) >= 0 && Convert.ToInt32(e.OldValue) < 0) //{ // VceWaferNames[(int)e.NewValue].Source = new BitmapImage(new Uri(@"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/WaferSelected.png", UriKind.RelativeOrAbsolute)); // DoubleAnimation floatY = new DoubleAnimation( // 430 - 7 * (25 - (int)e.NewValue), // TimeSpan.FromSeconds(3) // ); // vceControl.Foup.BeginAnimation(Canvas.TopProperty, floatY); //} //else if (Convert.ToInt32(e.NewValue) < 0 && Convert.ToInt32(e.OldValue) > 0) //{ // VceWaferNames[(int)e.OldValue].Source = new BitmapImage(new Uri(@"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/Wafer.png", UriKind.RelativeOrAbsolute)); // DoubleAnimation floatY = new DoubleAnimation( // 430, // TimeSpan.FromSeconds(3) // ); // vceControl.Foup.BeginAnimation(Canvas.TopProperty, floatY); //} } } private Image CreateImage(string ImagePath, int ImageHeight) { Image VceImage = new Image(); VceImage.Height = ImageHeight; //BitmapImage myBitmapImage = new BitmapImage(); //myBitmapImage.BeginInit(); //myBitmapImage.BaseUri = new Uri(ImagePath); //myBitmapImage.DecodePixelHeight = ImageHeight; //myBitmapImage.EndInit(); //set image source VceImage.Source = new BitmapImage(new Uri(ImagePath)); ; return VceImage; } private void DrawFoup() { double CanvasTop1 = -7; double CanvasTop2 = 0; double CanvasTop3 = -2; int ZIndex = 98; foreach (WaferInfo item in UnitData2) { //Console.WriteLine(item); //text TextBlock SlotIndex = new TextBlock() { Background = new SolidColorBrush(Colors.Black), FontSize = 10, Width = 10, Foreground = new SolidColorBrush(Colors.White), TextWrapping = TextWrapping.Wrap, HorizontalAlignment = HorizontalAlignment.Center, TextAlignment = TextAlignment.Center, Padding = new Thickness(5), LineHeight = 5 }; SlotIndex.Text = item.SlotIndex + ""; Canvas.SetLeft(SlotIndex, -50); Canvas.SetTop(SlotIndex, CanvasTop3); CanvasTop3 = CanvasTop3 + 5; Canvas.SetZIndex(SlotIndex, 98);//显示层级 //Fuop pack://application:,,,/ string ImagePath1 = "pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/Foup1.png"; Image VceControl = CreateImage(ImagePath1, 49); Canvas canvas1 = new Canvas(); CanvasTop1 = CanvasTop1 + 7; canvas1.Children.Add(VceControl); Canvas.SetZIndex(canvas1, ZIndex--);//显示层级 Canvas.SetLeft(canvas1, -25); Canvas.SetTop(canvas1, CanvasTop1); canvas1.Opacity = 0.7; vceFoupAndWafer.Children.Add(canvas1); //Boder Border border = new Border() { Width = 7.5, Height = 7.5, BorderThickness = new Thickness(1), BorderBrush = new SolidColorBrush(Colors.Blue), Background = new SolidColorBrush(Colors.White), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }; Canvas.SetZIndex(border, ZIndex--);//显示层级 Canvas.SetLeft(border, -25); Canvas.SetTop(border, CanvasTop3); CanvasTop3 = CanvasTop3 + 7.5; //Wafer string ImagePath2 = @"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/Wafer.png"; VceWaferNames[item.SlotID] = (CreateImage(ImagePath2, 40)); Canvas.SetTop(VceWaferNames[item.SlotID], CanvasTop2); CanvasTop2 = CanvasTop1+5; Canvas.SetZIndex(VceWaferNames[item.SlotID], ZIndex + 2);//显示层级 Canvas.SetLeft(VceWaferNames[item.SlotID], -7); if (item.WaferStatus > 0 ) { vceFoupAndWafer.Children.Add(VceWaferNames[item.SlotID]); } else { vceFoupAndWafer.Children.Remove(VceWaferNames[item.SlotID]); } } //FoupCover string ImagePath3 = @"pack://application:,,,/Venus_Themes;component/Themes/Images/parts/vce/Foup2.png"; System.Windows.Controls.Image FoupCover = CreateImage(ImagePath3, 49); Canvas canvas2 = new Canvas(); canvas2.Children.Add(FoupCover); Canvas.SetZIndex(canvas2, 99);//显示层级 Canvas.SetLeft(canvas2, -25); Canvas.SetTop(canvas2, -17); canvas2.Opacity = .5; vceFoupAndWafer.Children.Add(canvas2); } private string getimageURI(string directoryPath) { var startupPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; string dir = System.IO.Path.GetDirectoryName(startupPath); var ret = System.IO.Path.Combine(dir, directoryPath); if (!ret.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString())) ret = ret + System.IO.Path.DirectorySeparatorChar; if (!Directory.Exists(ret)) Directory.CreateDirectory(ret); return ret; } } }