PointCode.cs 3.5 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CtuDeviceLib
{
    /// <summary>
    /// 地面点位编码
    /// </summary>
    public class PointCode
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 编号
        /// </summary>
        public uint Id {  get; set; }
        /// <summary>
        /// 类型
        /// </summary>
        public LandmarkType Type { get; set; }
        /// <summary>
        /// 是否可转弯
        /// </summary>
        public bool CanTurning {  get; set; }
        /// <summary>
        /// 上方路标
        /// </summary>
        public LandmarkNeighboor Above { get; set; }
        /// <summary>
        /// 右侧路标
        /// </summary>
        public LandmarkNeighboor Right { get; set; } 
        /// <summary>
        /// 下方路标
        /// </summary>
        public LandmarkNeighboor Below { get; set; } 
        /// <summary>
        /// 左侧路标
        /// </summary>
        public LandmarkNeighboor Left { get; set; }


        public short GetDis(uint id)
        {
            if(Above!=null && Above.Id ==id)
            {
                return Above.Distance;
            }
            else if(Right!=null && Right.Id ==id)
            {
                return Right.Distance;
            }
            else if(Below!=null&& Below.Id==id)
            {
                return Below.Distance;
            }
            else if(Left!=null && Left.Id ==id) { return Left.Distance; }
            else 
            {
                return 0;
            }
        }

        public short GetAngle(uint id)
        {
            if (Above != null && Above.Id == id)
            {
                return Above.Andle;
            }
            else if (Right != null && Right.Id == id)
            {
                return Right.Andle;
            }
            else if (Below != null && Below.Id == id)
            {
                return Below.Andle;
            }
            else if (Left != null && Left.Id == id) { return Left.Andle; }
            else
            {
                return 0;
            }
        }
        public int X { get; set; } = -1;
        public int Y { get; set; } = -1;
        /// <summary>
        /// 预留
        /// </summary>
        public string Reserved {  get; set; }
    }
    /// <summary>
    /// 邻接地标
    /// </summary>
    public class LandmarkNeighboor
    {
        /// <summary>
        /// 编号
        /// </summary>
        public uint Id { get; set; }
        /// <summary>
        /// 距离
        /// </summary>
        public short Distance {  get; set; }
        /// <summary>
        /// 角度
        /// </summary>
        public short Andle {  get; set; }
    }
    public enum LandmarkType
    {
        /// <summary>
        /// 普通点
        /// </summary>
        None,
        /// <summary>
        /// 转弯点
        /// </summary>
        Turning,
        /// <summary>
        /// 货架点/巷道点
        /// </summary>
        Shelves,
        /// <summary>
        /// 设备对接点-默认车头0
        /// </summary>
        Docking_0,
        /// <summary>
        /// 设备对接点-默认车头90
        /// </summary>
        Docking_90,
        /// <summary>
        /// 设备对接点-默认车头180
        /// </summary>
        Docking_180,
        /// <summary>
        /// 设备对接点-默认车头270
        /// </summary>
        Docking_270,

    }
}