| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 | 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{    /// <summary>    /// VceControl.xaml 的交互逻辑    /// </summary>    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<WaferInfo> UnitData2        {            get { return (List<WaferInfo>)GetValue(UnitData2Property); }            set { SetValue(UnitData2Property, value); }        }        public static readonly DependencyProperty UnitData2Property =            DependencyProperty.Register("UnitData2", typeof(List<WaferInfo>), typeof(VceControl), new PropertyMetadata(null,FoupWafer));        public static void FoupWafer(DependencyObject d, DependencyPropertyChangedEventArgs e)        {            if (d is VceControl vceControl)            {                List<WaferInfo> UnitData = ((List<WaferInfo>)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;        }    }}
 |