|
|
@@ -0,0 +1,277 @@ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.ComponentModel; |
|
|
|
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; |
|
|
|
|
|
|
|
namespace BPASmartClient.SCADAControl |
|
|
|
{ |
|
|
|
/// <summary> |
|
|
|
/// NewConveyorBelt.xaml 的交互逻辑 |
|
|
|
/// </summary> |
|
|
|
public partial class NewConveyorBelt : UserControl, IExecutable |
|
|
|
{ |
|
|
|
Path Path_mp = null; |
|
|
|
Path Path_cb = null; |
|
|
|
Storyboard storyboard = new Storyboard(); |
|
|
|
Storyboard storyboard1 = new Storyboard(); |
|
|
|
public NewConveyorBelt() |
|
|
|
{ |
|
|
|
InitializeComponent(); |
|
|
|
Width = 1200; |
|
|
|
Height = 400; |
|
|
|
this.SizeChanged += ConveyorBelt_SizeChanged; |
|
|
|
ConveyorBeltWidth = 70; |
|
|
|
Direction = 0; |
|
|
|
StrokeBrush = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00BEFA")); |
|
|
|
StrokeDashArray = new DoubleCollection { 1.5, 1.5 }; |
|
|
|
StrokeFillBrush = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#00BEFA")); |
|
|
|
StrokeThickness = 2; |
|
|
|
} |
|
|
|
|
|
|
|
public string ControlType => "滚动线"; |
|
|
|
|
|
|
|
private bool isExecuteState; |
|
|
|
public bool IsExecuteState |
|
|
|
{ |
|
|
|
get { return isExecuteState; } |
|
|
|
set |
|
|
|
{ |
|
|
|
isExecuteState = value; |
|
|
|
if (IsExecuteState) |
|
|
|
{ |
|
|
|
IsEnabled = true; |
|
|
|
Register(); |
|
|
|
Style = null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void Register() |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
public void VisualStateManagerData() |
|
|
|
{ |
|
|
|
storyboard.RepeatBehavior = RepeatBehavior.Forever; |
|
|
|
DoubleAnimation dbAscending = new DoubleAnimation |
|
|
|
{ |
|
|
|
From = 0, |
|
|
|
To = 100, |
|
|
|
Duration = new Duration(new TimeSpan(0, 0, 20)), |
|
|
|
|
|
|
|
}; |
|
|
|
storyboard.Children.Add(dbAscending); |
|
|
|
Storyboard.SetTarget(dbAscending, Path_mp); |
|
|
|
Storyboard.SetTargetProperty(dbAscending, new PropertyPath("StrokeDashOffset")); |
|
|
|
|
|
|
|
storyboard1.RepeatBehavior = RepeatBehavior.Forever; |
|
|
|
DoubleAnimation dbAscending1 = new DoubleAnimation |
|
|
|
{ |
|
|
|
From = 0, |
|
|
|
To = -100, |
|
|
|
Duration = new Duration(new TimeSpan(0, 0, 20)), |
|
|
|
}; |
|
|
|
storyboard1.Children.Add(dbAscending1); |
|
|
|
Storyboard.SetTarget(dbAscending1, Path_mp); |
|
|
|
Storyboard.SetTargetProperty(dbAscending1, new PropertyPath("StrokeDashOffset")); |
|
|
|
Refursh(); |
|
|
|
} |
|
|
|
|
|
|
|
private void ConveyorBelt_SizeChanged(object sender, SizeChangedEventArgs e) |
|
|
|
{ |
|
|
|
//查找 |
|
|
|
if (!(Path_cb != null && Path_mp != null)) |
|
|
|
{ |
|
|
|
foreach (Path tb in FindVisualChildren<Path>(this)) |
|
|
|
{ |
|
|
|
// do something with tb here |
|
|
|
if (tb.Tag != null) |
|
|
|
{ |
|
|
|
if (tb.Tag.ToString() == "cb") |
|
|
|
{ |
|
|
|
Path_cb = tb; |
|
|
|
} |
|
|
|
else if (tb.Tag.ToString() == "mp") |
|
|
|
{ |
|
|
|
Path_mp = tb; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
VisualStateManagerData(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//传送带外边框绘制 |
|
|
|
PathGeometry geometry = new PathGeometry(); |
|
|
|
PathFigure pathFigure = new PathFigure(); |
|
|
|
pathFigure.StartPoint = new Point(this.Height / 2, 0); |
|
|
|
pathFigure.Segments.Add(new ArcSegment(new Point(this.Height / 2, this.Height), new Size(this.Height / 2, this.Height / 2), 0, false, SweepDirection.Counterclockwise, true)); |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(this.Width, this.Height), true)); |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(this.Width, this.Height - ConveyorBeltWidth), true)); |
|
|
|
double innerCircle = (this.Height - (ConveyorBeltWidth * 2)) / 2;//内圆半径 |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(ConveyorBeltWidth + innerCircle, this.Height - ConveyorBeltWidth), true)); |
|
|
|
pathFigure.Segments.Add(new ArcSegment(new Point(ConveyorBeltWidth + innerCircle, ConveyorBeltWidth), new Size(innerCircle, innerCircle), 0, false, SweepDirection.Clockwise, true)); |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(this.Width, ConveyorBeltWidth), true)); |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(this.Width, 0), true)); |
|
|
|
pathFigure.Segments.Add(new LineSegment(new Point(this.Height / 2, 0), true)); |
|
|
|
geometry.Figures.Add(pathFigure); |
|
|
|
Path_cb.Data = geometry; |
|
|
|
|
|
|
|
//传送带内部皮带绘制 |
|
|
|
PathGeometry geometry1 = new PathGeometry(); |
|
|
|
PathFigure pathFigure1 = new PathFigure(); |
|
|
|
pathFigure1.StartPoint = new Point(this.Width, ConveyorBeltWidth / 2); |
|
|
|
double innerCircle1 = (this.Height - ConveyorBeltWidth) / 2;//内圆半径 |
|
|
|
pathFigure1.Segments.Add(new LineSegment(new Point(innerCircle1 + ConveyorBeltWidth / 2, ConveyorBeltWidth / 2), true)); |
|
|
|
pathFigure1.Segments.Add(new ArcSegment(new Point(innerCircle1 + ConveyorBeltWidth / 2, this.Height - ConveyorBeltWidth / 2), new Size(innerCircle1, innerCircle1), 0, false, SweepDirection.Counterclockwise, true)); |
|
|
|
pathFigure1.Segments.Add(new LineSegment(new Point(this.Width, this.Height - ConveyorBeltWidth / 2), true)); |
|
|
|
geometry1.Figures.Add(pathFigure1); |
|
|
|
Path_mp.Data = geometry1; |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 搜索指定名称的子元素 |
|
|
|
/// </summary> |
|
|
|
/// <typeparam name="T"></typeparam> |
|
|
|
/// <param name="obj"></param> |
|
|
|
/// <param name="name"></param> |
|
|
|
/// <returns></returns> |
|
|
|
public static T FindChild<T>(DependencyObject obj, string name) where T : FrameworkElement |
|
|
|
{ |
|
|
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) |
|
|
|
{ |
|
|
|
DependencyObject child = VisualTreeHelper.GetChild(obj, i); |
|
|
|
if (child != null && child is T && (child as T).Name.Equals(name)) |
|
|
|
return (T)child; |
|
|
|
else |
|
|
|
{ |
|
|
|
T childOfChild = FindChild<T>(child, name); |
|
|
|
if (childOfChild != null) |
|
|
|
return childOfChild; |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject |
|
|
|
{ |
|
|
|
if (depObj != null) |
|
|
|
{ |
|
|
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) |
|
|
|
{ |
|
|
|
DependencyObject child = VisualTreeHelper.GetChild(depObj, i); |
|
|
|
if (child != null && child is T) |
|
|
|
{ |
|
|
|
yield return (T)child; |
|
|
|
} |
|
|
|
|
|
|
|
foreach (T childOfChild in FindVisualChildren<T>(child)) |
|
|
|
{ |
|
|
|
yield return childOfChild; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) |
|
|
|
{ |
|
|
|
(d as NewConveyorBelt)?.Refursh(); |
|
|
|
} |
|
|
|
|
|
|
|
private void Refursh() |
|
|
|
{ |
|
|
|
if (Direction == 1) |
|
|
|
{ |
|
|
|
storyboard.Begin(); |
|
|
|
storyboard1.Stop(); |
|
|
|
// VisualStateManager.GoToState(this, "Left", false); |
|
|
|
} |
|
|
|
else if (Direction == 2) |
|
|
|
{ |
|
|
|
storyboard.Stop(); |
|
|
|
storyboard1.Begin(); |
|
|
|
//VisualStateManager.GoToState(this, "Right", false); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
storyboard.Stop(); |
|
|
|
storyboard1.Stop(); |
|
|
|
//VisualStateManager.GoToState(this, "Stop", false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public DoubleCollection StrokeDashArray |
|
|
|
{ |
|
|
|
get { return (DoubleCollection)GetValue(StrokeDashArrayProperty); } |
|
|
|
set { SetValue(StrokeDashArrayProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty StrokeDashArrayProperty = |
|
|
|
DependencyProperty.Register("StrokeDashArray", typeof(DoubleCollection), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(default, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
|
|
|
|
public double ConveyorBeltWidth |
|
|
|
{ |
|
|
|
get { return (double)GetValue(ConveyorBeltWidthProperty); } |
|
|
|
set { SetValue(ConveyorBeltWidthProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty ConveyorBeltWidthProperty = |
|
|
|
DependencyProperty.Register("ConveyorBeltWidth", typeof(double), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(50.0, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
|
|
|
|
public Brush StrokeFillBrush |
|
|
|
{ |
|
|
|
get { return (Brush)GetValue(StrokeFillBrushProperty); } |
|
|
|
set { SetValue(StrokeFillBrushProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty StrokeFillBrushProperty = |
|
|
|
DependencyProperty.Register("StrokeFillBrush", typeof(Brush), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(Brushes.LightBlue, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Brush StrokeBrush |
|
|
|
{ |
|
|
|
get { return (Brush)GetValue(StrokeBrushProperty); } |
|
|
|
set { SetValue(StrokeBrushProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty StrokeBrushProperty = |
|
|
|
DependencyProperty.Register("StrokeBrush", typeof(Brush), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(Brushes.LightBlue, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
|
|
|
|
public double StrokeThickness |
|
|
|
{ |
|
|
|
get { return (double)GetValue(StrokeThicknessProperty); } |
|
|
|
set { SetValue(StrokeThicknessProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty StrokeThicknessProperty = |
|
|
|
DependencyProperty.Register("StrokeThickness", typeof(double), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(1.0, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
[Category("值设定")] |
|
|
|
public int Direction |
|
|
|
{ |
|
|
|
get { return (int)GetValue(DirectionProperty); } |
|
|
|
set { SetValue(DirectionProperty, value); } |
|
|
|
} |
|
|
|
public static readonly DependencyProperty DirectionProperty = |
|
|
|
DependencyProperty.Register("Direction", typeof(int), typeof(NewConveyorBelt), |
|
|
|
new PropertyMetadata(0, new PropertyChangedCallback(OnPropertyChanged))); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |