Esempio n. 1
0
            public SunControl(Control parent)
            {
                sunXY = new PictureBox();
                var sunZ = new TrackBar
                {
                    Orientation = Orientation.Vertical, Minimum = -100, Maximum = 100, Value = 0,
                };

                parent.Controls.Add(sunXY);
                parent.Controls.Add(sunZ);
                parent.Resize += (sender, args) =>
                {
                    var width = Math.Min(parent.ClientSize.Width, parent.ClientSize.Height) - parent.Margin.Vertical - sunZ.Width - 8;
                    if (parent.Width <= 0)
                    {
                        return;
                    }
                    sunXY.Size  = new Size(width, width);
                    sunZ.Height = width;
                    Redraw();
                };
                sunXY.MouseMove += (sender, args) =>
                {
                    if ((args.Button & MouseButtons.Left) == 0)
                    {
                        return;
                    }
                    var delta = new Point {
                        X = args.X - sunXY.Width / 2, Y = args.Y - sunXY.Height / 2
                    };
                    var r = (float)delta.Length();
                    Y = -(float)delta.X / r;
                    X = -(float)delta.Y / r;
                    Redraw();
                    NewPosition?.Invoke(new Point {
                        X = X * xy, Y = Y * xy, Z = Z
                    });
                };
                sunZ.ValueChanged += (sender, args) =>
                {
                    Z = sunZ.Value / 100F;
                    Redraw();
                    NewPosition?.Invoke(new Point {
                        X = X * xy, Y = Y * xy, Z = Z
                    });
                };
            }