ucPointCode.cs 6.6 KB
using ConveyorLine.EditPointCode;
using CtuDeviceLib;
using System;
using System.Windows.Forms;

namespace ConveyorLine.useControl
{
    public partial class ucPointCode : UserControl
    {
        public delegate void PointCodeChangedEventHandler();
        public event PointCodeChangedEventHandler PointCodeChanged;
        public ucPointCode()
        {
            InitializeComponent();
            cmbType.Items.AddRange(Enum.GetNames(typeof(LandmarkType)));
        }
        PointCode curPointCode;
        public PointCode CurPointCode
        {
            get { return curPointCode; }
            set
            {
                curPointCode = value;
                UpdateInfo(false);
            }
        }


        public void UpdateInfo(bool trig = true)
        {
            if (CurPointCode == null) return;
            lblCurPointCode.Text = CurPointCode.Id.ToString();
            lblUpPointCode.Text = CurPointCode.Above?.Id.ToString() ?? "";
            lblRightPointCode.Text = CurPointCode.Right?.Id.ToString() ?? "";
            lblDownPointCode.Text = CurPointCode.Below?.Id.ToString() ?? "";
            lblLeftPointCode.Text = CurPointCode.Left?.Id.ToString() ?? "";
            txtPointCodeAlias.Text = CurPointCode.Name;
            lblCoordinate.Text = $"({CurPointCode.X},{CurPointCode.Y})";
            chkCanTuring.Checked = CurPointCode.CanTurning;
            cmbType.SelectedIndex = (int)CurPointCode.Type;
            if (trig)
                PointCodeChanged?.Invoke();
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            if(curPointCode == null) return;
            var landmarkNeighboor = CurPointCode.Above;

            FrmNeighboor frmNeighboor = new FrmNeighboor(0);
            frmNeighboor.LandmarkNeighboor = landmarkNeighboor;
            frmNeighboor.ShowDialog();
            CurPointCode.Above = frmNeighboor.LandmarkNeighboor;
            if (CurPointCode.Above != null)
            {
                var find = EditPointCodeHelper.pointCodes.Find(s => s.Id == CurPointCode.Above.Id);
                if (find != null)
                {
                }
                else
                {
                    find = new PointCode() { Id = CurPointCode.Above.Id };
                    EditPointCodeHelper.pointCodes.Add(find);
                }
                find.Below = new LandmarkNeighboor()
                {
                    Id = CurPointCode.Id,
                    Andle = (short)((CurPointCode.Above.Andle + 180) % 360),
                    Distance = CurPointCode.Above.Distance
                };
            }
            UpdateInfo();
        }

        private void btnDown_Click(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            var landmarkNeighboor = CurPointCode.Below;
            FrmNeighboor frmNeighboor = new FrmNeighboor(180);
            frmNeighboor.LandmarkNeighboor = landmarkNeighboor;
            frmNeighboor.ShowDialog();
            CurPointCode.Below = frmNeighboor.LandmarkNeighboor;
            if (CurPointCode.Below != null)
            {
                var find = EditPointCodeHelper.pointCodes.Find(s => s.Id == CurPointCode.Below.Id);
                if (find != null)
                {

                }
                else
                {
                    find = new PointCode() { Id = CurPointCode.Below.Id};
                    EditPointCodeHelper.pointCodes.Add(find) ;
                }
                find.Above = new LandmarkNeighboor()
                {
                    Id = CurPointCode.Id,
                    Andle = (short)((CurPointCode.Below.Andle + 180) % 360),
                    Distance = CurPointCode.Below.Distance
                };
            }
            UpdateInfo();
        }

        private void btnLeft_Click(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            var landmarkNeighboor = CurPointCode.Left;

            FrmNeighboor frmNeighboor = new FrmNeighboor(270);
            frmNeighboor.LandmarkNeighboor = landmarkNeighboor;
            frmNeighboor.ShowDialog();
            CurPointCode.Left = frmNeighboor.LandmarkNeighboor;
            if (CurPointCode.Left != null)
            {
                var find = EditPointCodeHelper.pointCodes.Find(s => s.Id == CurPointCode.Left.Id);
                if (find != null)
                {
                }
                else
                {
                    find = new PointCode() { Id = CurPointCode.Left.Id };
                    EditPointCodeHelper.pointCodes.Add(find);
                }
                find.Right = new LandmarkNeighboor()
                {
                    Id = CurPointCode.Id,
                    Andle = (short)((CurPointCode.Left.Andle + 180) % 360),
                    Distance = CurPointCode.Left.Distance
                };
            }
            UpdateInfo();
        }

        private void btnRight_Click(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            var landmarkNeighboor = CurPointCode.Right;

            FrmNeighboor frmNeighboor = new FrmNeighboor(90);
            frmNeighboor.LandmarkNeighboor = landmarkNeighboor;

            frmNeighboor.ShowDialog();
            CurPointCode.Right = frmNeighboor.LandmarkNeighboor;
            if (CurPointCode.Right != null)
            {
                var find = EditPointCodeHelper.pointCodes.Find(s => s.Id == CurPointCode.Right.Id);
                if (find != null)
                {
                }
                else
                {
                    find = new PointCode() { Id = CurPointCode.Right.Id };
                    EditPointCodeHelper.pointCodes.Add(find);
                }
                find.Left = new LandmarkNeighboor()
                {
                    Id = CurPointCode.Id,
                    Andle = (short)((CurPointCode.Right.Andle + 180) % 360),
                    Distance = CurPointCode.Right.Distance
                };
            }
            UpdateInfo();
        }

        private void txtPointCodeAlias_TextChanged(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            CurPointCode.Name = txtPointCodeAlias.Text;
        }

        private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            CurPointCode.Type = (LandmarkType)cmbType.SelectedIndex;
        }

        private void chkCanTuring_CheckedChanged(object sender, EventArgs e)
        {
            if (curPointCode == null) return;
            CurPointCode.CanTurning = chkCanTuring.Checked;
        }
    }
}