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;
}
}
}