using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices.ComTypes;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace XHandler.Controls
{
public class GapLabware : Grid
{
public const int WN = 1;
public const int WS = 2;
public const int EN = 4;
public const int ES = 8;
private int nBaseWidth = 16;
private int nBaseHeight = 9;
///
/// 耗材的长, 长宽比=3:2, 根据width可以算出height
///
public double GapWidth
{
get { return (double)GetValue(GapWidthProperty); }
set { SetValue(GapWidthProperty, value); }
}
public static readonly DependencyProperty GapWidthProperty =
DependencyProperty.Register("GapWidth", typeof(double), typeof(GapLabware), new PropertyMetadata(Double.NaN));
///
/// 缺角方向
///
public int LabwareGap
{
get { return (int)GetValue(LabwareGapProperty); }
set { SetValue(LabwareGapProperty, value); }
}
public static readonly DependencyProperty LabwareGapProperty =
DependencyProperty.Register("LabwareGap", typeof(int), typeof(GapLabware), new PropertyMetadata(0));
public GapLabware()
{
this.SnapsToDevicePixels = true;
InitializeComponent();
}
void InitializeComponent()
{
this.SizeChanged += ControlLabware_SizeChanged;
}
private void ControlLabware_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.ActualWidth == double.NaN || this.ActualWidth <= 0)
return;
this.Children.Clear();
DrawContent();
}
private void DrawContent()
{
Path path = new Path()
{
Stroke = FindResource("blueBrush") as SolidColorBrush,
StrokeThickness = 1,
Fill = FindResource("lightBlueBrush") as SolidColorBrush,
};
string strData = GetPathData(LabwareGap);
path.Data = Geometry.Parse(strData);
this.Children.Add(path);
}
private string GetPathData(int gap)
{
string ret = "";
double W = this.ActualWidth - 0.5;
double H = W * nBaseHeight / nBaseWidth;
if (gap == 0)
{
ret = string.Format("M0,0 L{0},0 L{1},{2} L0,{3}Z", W, W, H, H);
}
else
{
if ((gap & WN) == WN)
ret = string.Format("M{0},0 L{1},0 L0,{2} L0,{3} ", W/2, GapWidth, GapWidth, H/2);
else
ret = string.Format("M{0},0 L0,0 L0,{1} ", W/2, H/2);
if ((gap & WS) == WS)
ret += string.Format("L0,{0} L0,{1} L{2},{3} L{4},{5} ", H / 2, H - GapWidth, GapWidth, H, W/2, H);
else
ret += string.Format("L0,{0} L0,{1} L{2},{3} ", H / 2, H, W/2, H);
if ((gap & ES) == ES)
ret += string.Format("L{0},{1} L{2},{3} L{4},{5} L{6},{7} ", W/2,H,W-GapWidth,H,W,H-GapWidth,W, H/2);
else
ret += string.Format("L{0},{1} L{2},{3} L{4},{5} ", W/2,H,W,H,W,H/2);
if ((gap & EN) == EN)
ret += string.Format("L{0},{1} L{2},{3} L{4},0 L{5},0 Z", W,H/2,W,GapWidth,W-GapWidth,W/2);
else
ret += string.Format("L{0},{1} L{2},0 L{3},0 Z", W,H/2,W, W/2);
}
return ret;
}
}
}