|
|
|
@ -32,10 +32,7 @@ namespace Rs.Controls
|
|
|
|
|
|
|
|
|
|
public partial class RsTray : UserControl
|
|
|
|
|
{
|
|
|
|
|
public string RecipeName { get; set; } = "default";
|
|
|
|
|
private int CurrentSlot { get; set; } = 1;
|
|
|
|
|
|
|
|
|
|
private TrayInfo trayInfo;
|
|
|
|
|
public string ItemName { get; set; }
|
|
|
|
|
public ESortDir SortDir { get; set; } = ESortDir.Horizontal;
|
|
|
|
|
public event Action<TraySlot, MouseEventArgs> SlotClickEvent;
|
|
|
|
@ -73,11 +70,6 @@ namespace Rs.Controls
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void NextSlot()
|
|
|
|
|
{
|
|
|
|
|
CurrentSlot++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ResetTray()
|
|
|
|
|
{
|
|
|
|
|
CurrentSlot = 1;
|
|
|
|
@ -267,8 +259,6 @@ namespace Rs.Controls
|
|
|
|
|
slot.Row = r;
|
|
|
|
|
slot.Column = c;
|
|
|
|
|
slot.SlotStatus = status;
|
|
|
|
|
//slot.Bound = new RectangleF((LeftSpaceWidth + widthPer * c), (TopSpaceHeight + heightPer * r), (int)widthPer - 5, (int)heightPer - 5);
|
|
|
|
|
//slot.Draw(g2);
|
|
|
|
|
traySlots.Add(slot);
|
|
|
|
|
traySlotsDic.Add(index, slot);
|
|
|
|
|
}
|
|
|
|
@ -286,8 +276,6 @@ namespace Rs.Controls
|
|
|
|
|
slot.Row = r;
|
|
|
|
|
slot.Column = c;
|
|
|
|
|
slot.SlotStatus = status;
|
|
|
|
|
//slot.Bound = new RectangleF((LeftSpaceWidth + widthPer * c), (TopSpaceHeight + heightPer * r), (int)widthPer - 5, (int)heightPer - 5);
|
|
|
|
|
//slot.Draw(g2);
|
|
|
|
|
traySlots.Add(slot);
|
|
|
|
|
traySlotsDic.Add(index, slot);
|
|
|
|
|
}
|
|
|
|
@ -297,63 +285,6 @@ namespace Rs.Controls
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Init()
|
|
|
|
|
{
|
|
|
|
|
trayInfo = new TrayInfo(SortDir, RowNum, ColumnNum, ItemName);
|
|
|
|
|
trayInfo = trayInfo.Init(RecipeName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool Save()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.Save(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetLeftTop(PointF point)
|
|
|
|
|
{
|
|
|
|
|
trayInfo.LeftTop = point;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetLeftBottom(PointF point)
|
|
|
|
|
{
|
|
|
|
|
trayInfo.LeftBottom = point;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetRightBottom(PointF point)
|
|
|
|
|
{
|
|
|
|
|
trayInfo.RightBottom = point;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PointF GetLeftTop()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.LeftTop;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PointF GetLeftBottom()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.LeftBottom;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PointF GetRightBottom()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.RightBottom;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<TraySlot> GetAllSlot()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.SlotPoints;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TraySlot GetSlot(int index)
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.GetSlot(index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TraySlot GetCurrentSlot()
|
|
|
|
|
{
|
|
|
|
|
return trayInfo.GetSlot(CurrentSlot);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Fill()
|
|
|
|
|
{
|
|
|
|
|
foreach (TraySlot item in traySlots)
|
|
|
|
@ -377,8 +308,6 @@ namespace Rs.Controls
|
|
|
|
|
traySlotsDic[index].SlotStatus = status;
|
|
|
|
|
traySlotsDic[index].Refresh(this.panel2.CreateGraphics(), ShowText);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//panel2_Paint(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateSlotPos()
|
|
|
|
@ -445,13 +374,6 @@ namespace Rs.Controls
|
|
|
|
|
//画料盘的行号
|
|
|
|
|
g2.DrawString((r + 1).ToString(), new Font("宋体", 7.0F), new SolidBrush(Color.White), new PointF(5, TopSpaceHeight + (heightPer * r)));
|
|
|
|
|
}
|
|
|
|
|
//Rectangle rect = new Rectangle((int)(LeftSpaceWidth + widthPer * c), (int)(TopSpaceHeight + heightPer * r), (int)widthPer - 5, (int)heightPer - 5);
|
|
|
|
|
//g2.DrawRectangle(Pens.Red, (LeftSpaceWidth + widthPer * c), (TopSpaceHeight + heightPer * r), (int)widthPer - 5, (int)heightPer - 5);
|
|
|
|
|
//TraySlot slot = new TraySlot();
|
|
|
|
|
//slot.Row = r;
|
|
|
|
|
//slot.Column = c;
|
|
|
|
|
//slot.Bound = new RectangleF((LeftSpaceWidth + widthPer * c), (TopSpaceHeight + heightPer * r), (int)widthPer - 5, (int)heightPer - 5);
|
|
|
|
|
//slot.Draw(g2);
|
|
|
|
|
if (traySlotsDic.ContainsKey(index))
|
|
|
|
|
{
|
|
|
|
|
traySlotsDic[index].Draw(g2, ShowText);
|
|
|
|
@ -462,9 +384,6 @@ namespace Rs.Controls
|
|
|
|
|
g.DrawImage(drawImage, 0, 0, drawImage.Width, drawImage.Height);
|
|
|
|
|
if (drawRegion)
|
|
|
|
|
{
|
|
|
|
|
//drawRect.Width = 20;
|
|
|
|
|
//drawRect.Height = 20;
|
|
|
|
|
//g.DrawRectangle(Pens.Green, drawRect);
|
|
|
|
|
g.FillRectangle(new SolidBrush(Color.FromArgb(200, Color.Pink)), drawRect);
|
|
|
|
|
}
|
|
|
|
|
g.Flush();
|
|
|
|
@ -640,16 +559,6 @@ namespace Rs.Controls
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//if(Status==1)
|
|
|
|
|
//{
|
|
|
|
|
// g.FillRectangle(new SolidBrush(Color.Red), Bound.X, Bound.Y, Bound.Width - 1, Bound.Height - 1);
|
|
|
|
|
//}
|
|
|
|
|
//else if(Status==0)
|
|
|
|
|
//{
|
|
|
|
|
// g.FillRectangle(new SolidBrush(Color.FromArgb(11, 16, 36)), Bound.X, Bound.Y, Bound.Width-1, Bound.Height-1);
|
|
|
|
|
// // g.FillRectangle(new SolidBrush(Color.Red), Bound.X, Bound.Y, Bound.Width , Bound.Height );
|
|
|
|
|
//}
|
|
|
|
|
g.DrawRectangle(Pens.White, Bound.X, Bound.Y, Bound.Width, Bound.Height);
|
|
|
|
|
if (isShowText)
|
|
|
|
|
{
|
|
|
|
@ -659,150 +568,4 @@ namespace Rs.Controls
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class TrayInfo
|
|
|
|
|
{
|
|
|
|
|
public TrayInfo() { }
|
|
|
|
|
public TrayInfo(ESortDir sortDir,int rowNum,int colNum,string itemName) {
|
|
|
|
|
RowNum=rowNum;
|
|
|
|
|
ColumnNum=colNum;
|
|
|
|
|
ItemName=itemName;
|
|
|
|
|
SortDir=sortDir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ESortDir SortDir { get; set; } = ESortDir.Horizontal;
|
|
|
|
|
public string ItemName { get; set; }
|
|
|
|
|
|
|
|
|
|
private int _RowNum = 26;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 行数
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int RowNum
|
|
|
|
|
{
|
|
|
|
|
get { return _RowNum; }
|
|
|
|
|
set { _RowNum = value; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int _ColumnNum = 10;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 列数量
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int ColumnNum
|
|
|
|
|
{
|
|
|
|
|
get { return _ColumnNum; }
|
|
|
|
|
set { _ColumnNum = value; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PointF LeftTop { get; set; } = new PointF(0, 0);
|
|
|
|
|
public PointF LeftBottom { get; set; } = new PointF(0, 0);
|
|
|
|
|
public PointF RightBottom { get; set; } = new PointF(0, 0);
|
|
|
|
|
|
|
|
|
|
public List<TraySlot> SlotPoints { get; set; } = new List<TraySlot>();
|
|
|
|
|
|
|
|
|
|
public bool Save(RsTray rsTray)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
float offsetX = -12.8f;
|
|
|
|
|
float offsetY = 11.8f;
|
|
|
|
|
int index = 0;
|
|
|
|
|
int rowNum = 0;
|
|
|
|
|
SlotPoints.Clear();
|
|
|
|
|
HTuple rows = new HTuple();
|
|
|
|
|
HTuple columns = new HTuple();
|
|
|
|
|
|
|
|
|
|
if (SortDir == ESortDir.Horizontal)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < RowNum; i++)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < ColumnNum; j++)
|
|
|
|
|
{
|
|
|
|
|
index++;
|
|
|
|
|
TraySlot ts = new TraySlot();
|
|
|
|
|
ts.Index = index;
|
|
|
|
|
ts.Row = i + 1;
|
|
|
|
|
ts.Column = j + 1;
|
|
|
|
|
ts.Position = new PointF(LeftTop.X + (j * rsTray.OffsetX), LeftTop.Y + (i * rsTray.OffsetY));
|
|
|
|
|
//1 2 3 4
|
|
|
|
|
//ts.Position = new PointF(LeftTop.X + (j * rsTray.OffsetX), LeftTop.Y + ((i-(i/2)) * rsTray.OffsetY) +(i/2)*rsTray.OffsetYEven);
|
|
|
|
|
rows.Append(ts.Position.Y);
|
|
|
|
|
columns.Append(ts.Position.X);
|
|
|
|
|
SlotPoints.Add(ts);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!rsTray.SinglePoint)
|
|
|
|
|
{
|
|
|
|
|
//求斜率
|
|
|
|
|
HOperatorSet.AngleLx(LeftTop.Y, LeftTop.X, LeftBottom.Y, LeftBottom.X, out HTuple angle);
|
|
|
|
|
double deg = AngleTool.Rad2Deg(angle) + 90;
|
|
|
|
|
|
|
|
|
|
HOperatorSet.HomMat2dIdentity(out HTuple homMat2dIdentity);
|
|
|
|
|
HOperatorSet.HomMat2dRotate(homMat2dIdentity, AngleTool.Deg2Rad(deg), LeftTop.Y, LeftTop.X, out HTuple homMat2dRotate);
|
|
|
|
|
HOperatorSet.AffineTransPoint2d(homMat2dRotate, rows, columns, out HTuple qx, out HTuple qy);
|
|
|
|
|
for (int i = 0; i < qx.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
GetSlot(i + 1).Position = new PointF((float)qy.DArr[i], (float)qx.DArr[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < ColumnNum; i++)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < RowNum; j++)
|
|
|
|
|
{
|
|
|
|
|
index++;
|
|
|
|
|
TraySlot ts = new TraySlot();
|
|
|
|
|
ts.Index = index;
|
|
|
|
|
ts.Row = i + 1;
|
|
|
|
|
ts.Column = j + 1;
|
|
|
|
|
ts.Position = new PointF(LeftTop.X + (i * offsetX), LeftTop.Y + (j * offsetY));
|
|
|
|
|
SlotPoints.Add(ts);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
string dirPath = Path.Combine("recipe",rsTray.RecipeName, ItemName);
|
|
|
|
|
if (!Directory.Exists(dirPath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(dirPath);
|
|
|
|
|
}
|
|
|
|
|
XmlSerializerHelper.Instance.Serialize($"{dirPath}/tray.xml", this);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TrayInfo Init(string recipeName)
|
|
|
|
|
{
|
|
|
|
|
string dirPath = Path.Combine("recipe",recipeName, ItemName);
|
|
|
|
|
if (!Directory.Exists(dirPath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(dirPath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XmlSerializerHelper.Instance.Deserialize($"{dirPath}/tray.xml", out TrayInfo tray);
|
|
|
|
|
if (tray == null)
|
|
|
|
|
return new TrayInfo(SortDir,RowNum,ColumnNum,ItemName);
|
|
|
|
|
tray.RowNum = RowNum;
|
|
|
|
|
tray.ColumnNum = ColumnNum;
|
|
|
|
|
return tray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TraySlot GetSlot(int index)
|
|
|
|
|
{
|
|
|
|
|
if (SlotPoints != null && SlotPoints.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
TraySlot ts = SlotPoints.Where(s => s.Index == index).First();
|
|
|
|
|
if (ts != null)
|
|
|
|
|
return ts;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|