| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | using Aitex.Core.Common;using Aitex.Core.UI.MVVM;using MECF.Framework.Common.Equipment;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.ComponentModel;using System.Linq;using System.Text;using System.Threading;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.Navigation;using System.Windows.Shapes;namespace Aitex.Core.UI.Control{    /// <summary>    /// ATMDualArmRobot.xaml 的交互逻辑    /// </summary>    public partial class BoatElevatorMap : UserControl, INotifyPropertyChanged    {        protected readonly int MoveTime = 300;        private const int AnimationTimeout = 3000; // seconds        private SolidColorBrush SDBrush = new SolidColorBrush(Color.FromArgb(255, 251, 147, 85));        private SolidColorBrush FDBrush = new SolidColorBrush(Color.FromArgb(255, 170, 147, 255));        private SolidColorBrush PDBrush = new SolidColorBrush(Color.FromArgb(255, 2, 255, 255));        private SolidColorBrush M1Brush = new SolidColorBrush(Color.FromArgb(255, 3, 149, 255));        private SolidColorBrush M2Brush = new SolidColorBrush(Color.FromArgb(255, 255, 111, 171));        private SolidColorBrush NoneBrush = new SolidColorBrush(Color.FromArgb(255, 213, 210, 200));        public WaferInfo[] RobotWafers        {            get { return (WaferInfo[])GetValue(RobotWafersProperty); }            set { SetValue(RobotWafersProperty, value); }        }        // Using a DependencyProperty as the backing store for RobotWafers.  This enables animation, styling, binding, etc...        public static readonly DependencyProperty RobotWafersProperty =            DependencyProperty.Register("RobotWafers", typeof(WaferInfo[]), typeof(BoatElevatorMap), new PropertyMetadata(null, PropertyChangedCallback));        public List<string> BoatWafers        {            get { return (List<string>)GetValue(BoatWafersProperty); }            set { SetValue(BoatWafersProperty, value); }        }        // Using a DependencyProperty as the backing store for RobotWafers.  This enables animation, styling, binding, etc...        public static readonly DependencyProperty BoatWafersProperty =            DependencyProperty.Register("BoatWafers", typeof(List<string>), typeof(BoatElevatorMap), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, BoatWafersPropertyChangedCallback));        public event PropertyChangedEventHandler PropertyChanged;        static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)        {            var self = (BoatElevatorMap)d;        }        static void BoatWafersPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)        {            var self = (BoatElevatorMap)d;        }        public BoatElevatorMap()        {#if DEBUG            System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = System.Diagnostics.SourceLevels.Critical;#endif            InitializeComponent();            rootCanvas.DataContext = this;            bgImage = new System.Windows.Media.Imaging.BitmapImage(new Uri(@"pack://application:,,,/FurnaceUI;component/Resources/Images/Controls3/Boat.png"));        }        private System.Windows.Media.Imaging.BitmapImage bgImage;        protected override void OnRender(DrawingContext drawingContext)        {            if (DesignerProperties.GetIsInDesignMode(this)|| BoatWafers==null)            {                return;            }            int indexWafer = 0;            if (bgImage != null)            {                drawingContext.DrawImage(bgImage, new Rect(13, 50, 150, 600));            }            int fristY = 610;            foreach (var item in BoatWafers)            {                if (item == "----" || string.IsNullOrEmpty(item))                {                    // drawingContext.DrawEllipse(NoneBrush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                }                else                {                    switch (item)                    {                        case "PD":                            drawingContext.DrawEllipse(PDBrush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                            break;                        case "SD":                            drawingContext.DrawEllipse(SDBrush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                            break;                        case "FD":                            drawingContext.DrawEllipse(FDBrush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                            break;                        case "M1":                            drawingContext.DrawEllipse(M1Brush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                            break;                        case "M2":                            drawingContext.DrawEllipse(M2Brush, new Pen(NoneBrush, 1), new Point(85, fristY - indexWafer * 3), 60, 30);                            break;                        default:                            break;                    }                }                indexWafer += 1;            }            base.OnRender(drawingContext);        }        private int oldCurrentValue = 0;        int oldX = 0;        private void Invoke(Action action)        {            Dispatcher.Invoke(action);        }        private void LogMsg(string msg)        {            var source = "ATMRobot";            Console.WriteLine("{0} {1}", source, msg);        }    }}
 |