CassetteViewV2.xaml.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using MECF.Framework.Common.OperationCenter;
  2. using MECF.Framework.Common.SubstrateTrackings;
  3. using MECF.Framework.UI.Client.Annotations;
  4. using System;
  5. using System.ComponentModel;
  6. using System.Runtime.CompilerServices;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. namespace FurnaceUI.Controls.Parts
  12. {
  13. /// <summary>
  14. /// CassetteView.xaml 的交互逻辑
  15. /// </summary>
  16. public partial class CassetteViewV2 : UserControl, INotifyPropertyChanged
  17. {
  18. public bool DiSensorValue
  19. {
  20. get { return (bool)GetValue(DiSensorValueProperty); }
  21. set { SetValue(DiSensorValueProperty, value); }
  22. }
  23. public static readonly DependencyProperty DiSensorValueProperty =
  24. DependencyProperty.Register("DiSensorValue", typeof(bool), typeof(CassetteViewV2), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));
  25. public string CarrierModule
  26. {
  27. get { return (string)GetValue(CarrierModuleProperty); }
  28. set
  29. {
  30. SetValue(CarrierModuleProperty, value);
  31. }
  32. }
  33. public static readonly DependencyProperty CarrierModuleProperty =
  34. DependencyProperty.Register("CarrierModule", typeof(string), typeof(CassetteViewV2), new PropertyMetadata("System"));
  35. public int CarrierSlot
  36. {
  37. get { return (int)GetValue(CarrierSlotProperty); }
  38. set
  39. {
  40. SetValue(CarrierSlotProperty, value);
  41. }
  42. }
  43. public static readonly DependencyProperty CarrierSlotProperty =
  44. DependencyProperty.Register("CarrierSlot", typeof(int), typeof(CassetteViewV2), new PropertyMetadata(0));
  45. public CarrierInfo CarrierData
  46. {
  47. get { return (CarrierInfo)GetValue(CarrierDataProperty); }
  48. set
  49. {
  50. SetValue(CarrierDataProperty, value);
  51. }
  52. }
  53. public static readonly DependencyProperty CarrierDataProperty =
  54. DependencyProperty.Register("CarrierData", typeof(CarrierInfo), typeof(CassetteViewV2), new PropertyMetadata(new CarrierInfo(1), CarrierDataChangedCallback));
  55. public string CassetteType
  56. {
  57. get { return (string)GetValue(CassetteTypeProperty); }
  58. set
  59. {
  60. SetValue(CassetteTypeProperty, value);
  61. }
  62. }
  63. // Using a DependencyProperty as the backing store for CassetteType. This enables animation, styling, binding, etc...
  64. public static readonly DependencyProperty CassetteTypeProperty =
  65. DependencyProperty.Register("CassetteType", typeof(string), typeof(CassetteViewV2), new PropertyMetadata(""));
  66. public int WaferCount
  67. {
  68. get { return (int)GetValue(WaferCountProperty); }
  69. set
  70. {
  71. SetValue(WaferCountProperty, value);
  72. }
  73. }
  74. // Using a DependencyProperty as the backing store for WaferCount. This enables animation, styling, binding, etc...
  75. public static readonly DependencyProperty WaferCountProperty =
  76. DependencyProperty.Register("WaferCount", typeof(int), typeof(CassetteViewV2), new PropertyMetadata(0));
  77. public bool IsEnableOperating
  78. {
  79. get { return (bool )GetValue(IsEnableOperatingProperty); }
  80. set { SetValue(IsEnableOperatingProperty, value); }
  81. }
  82. // Using a DependencyProperty as the backing store for IsEnableOperating. This enables animation, styling, binding, etc...
  83. public static readonly DependencyProperty IsEnableOperatingProperty =
  84. DependencyProperty.Register("IsEnableOperating", typeof(bool ), typeof(CassetteViewV2), new PropertyMetadata(true));
  85. private string _cassetteStatus;
  86. /// <summary>
  87. /// Foup的状态,如果在Processing中会显示绿色
  88. /// 其他状态根据waferType定义显示颜色
  89. /// </summary>
  90. public string CassetteStatus
  91. {
  92. get { return _cassetteStatus; }
  93. set
  94. {
  95. if (_cassetteStatus != value)
  96. {
  97. _cassetteStatus = value;
  98. OnPropertyChanged();
  99. }
  100. }
  101. }
  102. //P(P1,P2),M1(M,M1),M2,SD,ED,V,R(R1,R2),Process
  103. public double oldScale = 0;
  104. public static void CarrierDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
  105. {
  106. var selfView = (CassetteViewV2)d;
  107. var carrierInfo = (CarrierInfo)e.NewValue;
  108. var moduleName = selfView.CarrierModule;
  109. }
  110. public CassetteViewV2()
  111. {
  112. InitializeComponent();
  113. }
  114. public event PropertyChangedEventHandler PropertyChanged;
  115. [NotifyPropertyChangedInvocator]
  116. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
  117. {
  118. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  119. }
  120. public void Filp(int filp, int angle, bool absolute = true, int ms = 0, double accelerationRatio = 0, double decelerationRatio = 0, Action onComplete = null)
  121. {
  122. var storyboard = new Storyboard();
  123. storyboard.Completed += (s, e) => onComplete?.Invoke();
  124. if (Filp(storyboard, filp, angle, absolute, ms, accelerationRatio, decelerationRatio, onComplete))
  125. {
  126. storyboard.Begin();
  127. }
  128. else
  129. {
  130. onComplete?.Invoke();
  131. }
  132. }
  133. public bool Filp(Storyboard storyboard, int filp, int angle, bool absolute = true, int ms = 0, double accelerationRatio = 0, double decelerationRatio = 0, Action onComplete = null)
  134. {
  135. var newScale = 0.5;
  136. if (newScale == oldScale)
  137. {
  138. return false;
  139. }
  140. ScaleTransform scaleTransform = new ScaleTransform();
  141. if (filp == 180)
  142. {
  143. scaleTransform.ScaleX = -1;
  144. }
  145. else
  146. {
  147. scaleTransform.ScaleX = 1;
  148. }
  149. TransformGroup Group = new TransformGroup();
  150. Group.Children.Add(scaleTransform);
  151. tbWaferCount.RenderTransform = Group;
  152. tbWaferCount.RenderTransformOrigin = new Point(0.5, 0.5);
  153. var animation = new DoubleAnimation(oldScale, angle, TimeSpan.FromMilliseconds(ms));
  154. animation.AccelerationRatio = accelerationRatio;
  155. animation.DecelerationRatio = decelerationRatio;
  156. storyboard.Children.Add(animation);
  157. Storyboard.SetTarget(animation, tbWaferCount);
  158. Storyboard.SetTargetProperty(animation, new PropertyPath("RenderTransform.(TransformGroup.Children)[0].(TranslateTransform.X)"));
  159. oldScale = angle;
  160. return true;
  161. }
  162. private void CreateCassette(object sender, RoutedEventArgs e)
  163. {
  164. InvokeClient.Instance.Service.DoOperation("System.CreateCarrier", CarrierModule, 0);
  165. }
  166. private void DeleteCassette(object sender, RoutedEventArgs e)
  167. {
  168. InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", CarrierModule, 0);
  169. }
  170. }
  171. }