ProjectorControl.cs 12.1 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TSA_V.Common;
using TSA_V.DeviceLibrary;

namespace UserFromControl
{
    public partial class ProjectorControl : UserControl
    {
        public int MaxX = 1920;
        public int MaxY = 1280;
        public delegate bool  ShowPointDelegate(ProjectorPInfo p);
        public event ShowPointDelegate ShowPointEvent;
        public ProjectorControl()
        {
            InitializeComponent();
            cmbStep.SelectedIndex = TSAVBean.LastStepIndex;
            if (cmbType.SelectedIndex < 0)
            {
                cmbType.SelectedIndex = 0;
            }
            PointSizeX = TSAVBean.DefaultPSize;
            PointSizeY = TSAVBean.DefaultPSize;
            PointType = TSAVBean.DefaultPType;

            typeList = new List<string>();
            this.cmbType.Items.Clear();
            typeList.AddRange(new string[] {
            "1=●",
            "2=✚",
            "3=┃",
            "4=━━",
            "5=□",
            "6=○",
            "7=极性_上方",
            "8=极性_下方",
            "9=极性_左方",
            "10=极性_右方"

            });
            foreach (string str in typeList)
            {
                cmbType.Items.Add(str);
            }
        }
        public   void loadTypeList(string[] list)
        {
            typeList = new List<string>();
            this.cmbType.Items.Clear();
            //typeList.AddRange(new string[] {
            //"1=●",
            //"2=✚",
            //"3=┃",
            //"4=━━",
            //"5=□",
            //"6=○",
            //"7=极性_上方",
            //"8=极性_下方",
            //"9=极性_左方",
            //"10=极性_右方"

            //});
            typeList.AddRange(list);
            foreach (string str in typeList)
            {
                cmbType.Items.Add(str);
            }
        }
        public string GroupName
        {
            get { return group.Text; }
            set
            {
                group.Text = value;
            }
        }

        private void btnShowPoint_Click(object sender, EventArgs e)
        {
            ShowCurrPoint();
        }
        public ProjectorPInfo GetPInfo()
        {
            int px = FormUtil.GetIntValue(numX);
            int py = FormUtil.GetIntValue(numY);
            int pointType = cmbType.SelectedIndex + 1;
            int sizeX = FormUtil.GetIntValue(numSizeX);
            int sizeY = FormUtil.GetIntValue(numSizeY);
            int penWidth = (int)numPenWidth.Value;
            string name = FormUtil.getValue(txtname);
          
            ////如果亮度和大小超过范围,直接用默认值
            //if (sizeX < 1 || sizeX > 255)
            //{
            //    sizeX = TSAVBean.DefaultPSize;
            //    numSizeX.Text = sizeX.ToString();
            //}
            //if (sizeY < 1 || sizeY > 255)
            //{
            //    sizeY = TSAVBean.DefaultPSize;
            //    numSizeY.Text = sizeY.ToString();
            //}
            ProjectorPInfo p = new ProjectorPInfo(px, py, pointType, sizeX, sizeY, penWidth,name);
            return p;
        }
        public void ShowCurrPoint()
        {
            this.Cursor = Cursors.WaitCursor; 
           
           
            ShowPointEvent?.Invoke(GetPInfo());
            this.Cursor = Cursors.Default;
        }
        private void btnUp_Click(object sender, EventArgs e)
        {

            int stepValue = (int)(GetStepValue() * TSAVBean.Y_ChangeValue);
            int targetValue = FormUtil.GetIntValue(numY) - stepValue;
            if (targetValue >= 0 )
            {
                numY.Text = targetValue.ToString();
                ShowCurrPoint();
            }
        }

        private void btnLeft_Click(object sender, EventArgs e)
        {
            int stepValue = (int)(GetStepValue() * TSAVBean.X_ChangeValue); 
            int targetValue = FormUtil.GetIntValue(numX) - stepValue;
            if (targetValue >= 0  )
            {
                numX.Text = targetValue.ToString();
                ShowCurrPoint();
            }
        }

        private void btnRight_Click(object sender, EventArgs e)
        { 
            int stepValue = (int)(GetStepValue() * TSAVBean.X_ChangeValue);
           
            int targetValue = FormUtil.GetIntValue(numX) + stepValue;
            if (  targetValue <= MaxX)
            {
                numX.Text = targetValue .ToString();
                ShowCurrPoint();
            }
        }

        private void btnDown_Click(object sender, EventArgs e)
        { 
            int stepValue = (int)(GetStepValue() * TSAVBean.Y_ChangeValue);
            int targetValue = FormUtil.GetIntValue(numY) + stepValue; 
            if (  targetValue <= MaxY)
            {
                numY.Text = targetValue .ToString();
                ShowCurrPoint();
            }
        }


        private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbType.SelectedIndex >= 1 && cmbType.SelectedIndex <= 3)
            {
                numSizeY.Text = numSizeX.Text;
            }
            if (!(cmbType.SelectedIndex + 1).Equals(lastType))
            {
                lastType = cmbType.SelectedIndex + 1;
                DrawPoint(lastType);
            }
        }
        private int  lastType=1;
        public double XValue
        {
            set
            {
                numX.Text = ((int)value).ToString();
            }
            get
            {
                return FormUtil.GetIntValue(numX);
            }
        }
         
        public double YValue
        {
            set
            {
                numY.Text = ((int)value).ToString();
            }
            get
            {
                return FormUtil.GetIntValue(numY);
            }
        }
        public int PointType
        {
            set
            {
                if ((int) value >= 1)
                {
                    cmbType.SelectedIndex = ((int)value) - 1;
                }
                else
                {
                    cmbType.SelectedIndex = 0;
                }
            }
            get
            {
                return cmbType.SelectedIndex+1;
            }
        }
        public int PointSizeX
        {
            set
            {
                numSizeX.Text = ((int)value).ToString();
            }
            get
            {
                return FormUtil.GetIntValue(numSizeX);
            }
        }
        public int PointSizeY
        {
            set
            {
                numSizeY.Text = ((int)value).ToString();
            }
            get
            {
                return FormUtil.GetIntValue(numSizeY);
            }
        }
        public int PenWidth
        {
            set
            {
                numPenWidth.Text = ((int)value).ToString();
            }
            get
            {
                return FormUtil.GetIntValue(numPenWidth);
            }
        }
        public string ShowText
        {
            set
            {
                txtname.Text = (value).ToString();
            }
            get
            {
                return FormUtil.getValue(txtname);
            }
        }
        public void UpdateStatus()
        {
            //numX.Text = GalvanometerManager.GetLastPoint().X.ToString();
            //numY.Text = GalvanometerManager.GetLastPoint().Y.ToString();
        }
        private List<double> vallue = new List<double>() { 1, 2, 5, 10, 20, 50,100 };

        private double GetStepValue()
        {
            int index = cmbStep.SelectedIndex;
            TSAVBean.LastStepIndex = index;
            if (vallue.Count > index)
            {
                return vallue[index];
            }
            return 10;
        }
        private List<string> typeList = new List<string>();
        private void GalvanometerControl_Load(object sender, EventArgs e)
        { 
            if (cmbType.SelectedIndex < 0)
            {
                cmbType.SelectedIndex = 0;
            }
        }
        private void DrawPoint(int type  , int x=0, int y=0,  int sizeX = 2, int sizeY = 2 ,int lineLength=2  )
        {
            Graphics g = panImg.CreateGraphics();
            if (sizeX < 2)
            {
                sizeX = 2;
            }
            if (sizeY < 2)
            {
                sizeY = 2;
            }
            x = panImg.Width / 2;
            y = panImg.Height / 2;
            sizeX = x > y ? (x / 4) : (y / 4);
            sizeY = sizeX;
            

            g.Clear(panImg.BackColor);

            Pen pen = new Pen(panImg.ForeColor, lineLength);

            System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(panImg.ForeColor);
            //点类型,1 = 点,2 = +,3 =|,4 = -,5 = 方形,6 = 圆圈
            if (type.Equals(2))
            {
                g.DrawLine(pen, new Point(x - sizeX, y), new Point(x + sizeX, y));
                g.DrawLine(pen, new Point(x, y - sizeY), new Point(x, y + sizeY));
            }
            else if (type.Equals(3))
            {
                g.DrawLine(pen, new Point(x, y - sizeY), new Point(x, y + sizeY));
            }
            else if (type.Equals(4))
            {
                g.DrawLine(pen, new Point(x - sizeX, y), new Point(x + sizeX, y));
            }
            else if (type.Equals(5))
            {
                g.DrawRectangle(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);
            }
            else if (type.Equals(6))
            {
                g.DrawEllipse(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);
            }
            else if (type.Equals(7))
            {
                sizeX = 12;
                sizeY = 36;
                int plusSize = sizeX / 2;
                int pX = x;
                int pY = y - sizeY / 2 - lineLength - plusSize;
                g.DrawLine(pen, new Point(pX - plusSize, pY), new Point(pX + plusSize, pY));
                g.DrawLine(pen, new Point(pX, pY - plusSize), new Point(pX, pY + plusSize));

                g.DrawRectangle(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);
            }
            else if (type.Equals(8))
            {
                sizeX = 12;
                sizeY = 36;
                g.DrawRectangle(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);

                int plusSize = sizeX / 2;
                int pX = x;
                int pY = y + sizeY / 2 + lineLength + plusSize;
                g.DrawLine(pen, new Point(pX - plusSize, pY), new Point(pX + plusSize, pY));
                g.DrawLine(pen, new Point(pX, pY - plusSize), new Point(pX, pY + plusSize));
            }
            else if (type.Equals(9))
            {
                sizeX = 36;
                sizeY = 12;
                g.DrawRectangle(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);

                int plusSize = sizeY / 2;
                int pX = x - sizeX / 2 - lineLength - plusSize;
                int pY = y;
                g.DrawLine(pen, new Point(pX - plusSize, pY), new Point(pX + plusSize, pY));
                g.DrawLine(pen, new Point(pX, pY - plusSize), new Point(pX, pY + plusSize));
            }
            else if (type.Equals(10))
            {
                sizeX = 36;
                sizeY = 12;
                g.DrawRectangle(pen, x - sizeX / 2, y - sizeY / 2, sizeX, sizeY);

                int plusSize = sizeY / 2;
                int pX = x + sizeX / 2 + lineLength + plusSize;
                int pY = y;
                g.DrawLine(pen, new Point(pX - plusSize, pY), new Point(pX + plusSize, pY));
                g.DrawLine(pen, new Point(pX, pY - plusSize), new Point(pX, pY + plusSize));
            }
            else
            {
                g.FillEllipse(myBrush, new Rectangle(x - sizeX / 2, y - sizeY / 2, sizeX, sizeY));//画实心椭圆          
            } 
        }

        private void group_Paint(object sender, PaintEventArgs e)
        { 
            DrawPoint(lastType);
        }
    }
}