Example #1
0
        private void OnPositionChanged(PanTiltPosition position)
        {
            lock (this._syncLock)
            {
                if (this._lastRefresh.AddMilliseconds(200) >= DateTime.Now)
                {
                    return;
                }

                this._lastRefresh = DateTime.Now;

                this.labelPositionPan.Invoke(o => {
                    o.ForeColor = Color.Black;
                    o.Text      = $"Pan: {position.Pan}";
                });
                this.labelPositionTilt.Invoke(o => o.Text = $"Tilt: {position.Tilt}");

                if (this._deviceConfiguration.CameraActive)
                {
                    return;
                }

                if (this._panTiltControl != null)
                {
                    //TODO:Optimize render image does not block position changed event
                    this.Redraw(position);
                }
            }
        }
Example #2
0
        public void DrawText(PanTiltPosition position, string text, Brush brush, bool centerText)
        {
            var point = this.ConvertPanTilt2Point(position);

            using (var graphics = Graphics.FromImage(this._drawImage))
            {
                graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;

                var font = new Font("Verdana", 4 * this._multiplier, FontStyle.Bold);

                float x, y;
                if (centerText)
                {
                    var textSize = graphics.MeasureString(text, font);
                    x = point.X - (textSize.Width / 2);
                    y = point.Y - (textSize.Height / 2);
                }
                else
                {
                    x = point.X;
                    y = point.Y;
                }

                graphics.DrawString(text, font, brush, x, y);
            }
        }
Example #3
0
        private void OnPositionChanged(PanTiltPosition position)
        {
            if (this._lastRefresh.AddMilliseconds(200) >= DateTime.Now)
            {
                return;
            }

            this._lastRefresh = DateTime.Now;

            this.labelPositionPan.Invoke(o => o.Text  = $"Pan: {position.Pan}");
            this.labelPositionTilt.Invoke(o => o.Text = $"Tilt: {position.Tilt}");

            if (this._deviceConfiguration.CameraActive)
            {
                return;
            }

            if (this._panTiltControl != null)
            {
                //TODO:Optimize render image does not block position changed event
                this._cameraDrawEngine.Clear();
                this._cameraDrawEngine.DrawPtHeadLimits(this._panTiltControl.GetLimits());
                this._cameraDrawEngine.DrawCrossHair(position, Brushes.Black);
                this.UpdateCurrentImage();
            }
        }
Example #4
0
        private PointF ConvertPanTilt2Point(PanTiltPosition item)
        {
            var x = (item.Pan + this._originalWidth) * this._multiplier;
            var y = -(item.Tilt - this._originalHeight) * this._multiplier;

            return(new PointF((float)x, (float)y));
        }
Example #5
0
        public static PanTiltPosition AddRelativePosition(this PanTiltPosition currentPanTiltPosition, PanTiltPosition panTiltPosition, int seconds)
        {
            var pan  = currentPanTiltPosition.Pan + panTiltPosition.Pan * seconds;
            var tilt = currentPanTiltPosition.Tilt + panTiltPosition.Tilt * seconds;

            return(new PanTiltPosition(pan, tilt));
        }
 private void OnPositionChanged(PanTiltPosition pt)
 {
     if (this._active && pt.Pan > this._stop)
     {
         this._resetEvent.Set();
     }
 }
Example #7
0
        public void DrawLineWithArrow(PanTiltPosition pt1, PanTiltPosition pt2, Color color, int width)
        {
            var pen = new Pen(color, width);

            var point1 = this.ConvertPanTilt2Point(pt1);
            var point2 = this.ConvertPanTilt2Point(pt2);

            this.DrawLineWithArrow(this._drawImage, point1, point2, pen);
        }
Example #8
0
        protected bool Equals(PanTiltPosition other)
        {
            if (other == null)
            {
                return(false);
            }

            return(this.Pan == other.Pan && this.Tilt == other.Tilt);
        }
Example #9
0
        public void DrawCircle(PanTiltPosition centerPt, float dimension, Brush brush)
        {
            var point = this.ConvertPanTilt2Point(centerPt);

            using (var graphics = Graphics.FromImage(this._drawImage))
            {
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.DrawEllipse(new Pen(brush, 3), point.X - (dimension / 2), point.Y - (dimension / 2), dimension, dimension);
            }
        }
Example #10
0
        public static bool IsEqual(PanTiltPosition position1, PanTiltPosition position2, double panTolerance = 0.5, double tiltTolerance = 0.5)
        {
            var panDifference  = Math.Abs(position1.Pan - position2.Pan);
            var tiltDifference = Math.Abs(position1.Tilt - position2.Tilt);

            if (panDifference <= panTolerance && tiltDifference <= tiltTolerance)
            {
                return(true);
            }

            return(false);
        }
Example #11
0
        private void Redraw(PanTiltPosition position)
        {
            if (this._cameraDrawEngine == null)
            {
                return;
            }

            this._cameraDrawEngine.Clear();
            this._cameraDrawEngine.DrawPtHeadLimits(this._panTiltControl.GetLimits());
            this._cameraDrawEngine.DrawCrossHair(position, Brushes.Black);
            this.UpdateCurrentImage();
        }
Example #12
0
        private void OnPositionChanged(PanTiltPosition pt)
        {
            switch (this._axisType)
            {
            case AxisType.Pan:
                this._lastPosition = pt.Pan;
                break;

            case AxisType.Tilt:
                this._lastPosition = pt.Tilt;
                break;
            }
        }
Example #13
0
        public void DrawPtHeadLimits(PanTiltLimit panTiltLimit)
        {
            var leftUp    = new PanTiltPosition(panTiltLimit.PanMin, panTiltLimit.TiltMin);
            var leftDown  = new PanTiltPosition(panTiltLimit.PanMin, panTiltLimit.TiltMax);
            var rightUp   = new PanTiltPosition(panTiltLimit.PanMax, panTiltLimit.TiltMin);
            var rightDown = new PanTiltPosition(panTiltLimit.PanMax, panTiltLimit.TiltMax);

            var positions = new PanTiltPosition[] { leftUp, rightUp, rightDown, leftDown };

            var textPos = positions.OrderBy(o => this.Distance(o, new PanTiltPosition(-180, 90))).FirstOrDefault();

            this.DrawText(textPos, "PT Unit Limits", Brushes.Crimson, false);
            this.DrawPolygon(positions, Color.Crimson);
        }
Example #14
0
        public ActionResult MoveToPosition([FromQuery] string ipAddress, [FromBody] PanTiltPosition position)
        {
            this._logger.LogDebug($"MoveToPosition {ipAddress} {position}");
            using (ICommunication communication = new UdpNetworkCommunication(IPAddress.Parse(ipAddress), 5555))
                using (IPanTiltControl panTiltControl = new AlturosPanTiltControl(communication))
                {
                    if (panTiltControl.PanTiltAbsolute(position))
                    {
                        return(StatusCode(StatusCodes.Status200OK));
                    }

                    return(StatusCode(StatusCodes.Status400BadRequest));
                }
        }
        private void DrawMovement(PanTiltPosition start, PanTiltPosition end, int number, bool isLast)
        {
            var brush     = Brushes.DarkGreen;
            var dimension = isLast ? 50 : 25;

            lock (this._syncObject)
            {
                this._drawEngine.DrawLineWithArrow(start, end, new Pen(brush).Color, 4);
                this._drawEngine.DrawText(new PanTiltPosition(end.Pan - 10, end.Tilt), number.ToString(), brush, true);
                this._drawEngine.DrawCircle(new PanTiltPosition(end.Pan, end.Tilt), 5, brush);
                this._drawEngine.DrawCircle(new PanTiltPosition(end.Pan - 10, end.Tilt), dimension, brush);
            }

            this.UpdateCurrentImage();
        }
        private async Task RunTest()
        {
            this._movementInfos.Clear();
            this.PrepareDrawing();
            this._lastPosition          = null;
            this._currentPtIndices      = -1;
            this._ptUpdateTimer.Enabled = true;
            this._ptUpdateTimer.Start();

            var timeoutCommands = (int)this.numericUpDownTime.Value;

            foreach (var panTiltPosition in this._panTiltPositions)
            {
                this._currentPtIndices++;

                if (this._currentPtIndices == 0)
                {
                    this.DrawMovement(this._panTiltPositions.First(), this._panTiltPositions.First(), this._currentPtIndices, false);
                }
                else
                {
                    var isLast = this._currentPtIndices == this._panTiltPositions.Count - 1;
                    this.DrawMovement(this._panTiltPositions[_currentPtIndices - 1], this._panTiltPositions[_currentPtIndices], this._currentPtIndices, isLast);
                }

                var info = new FastMovementInfo(DateTime.Now, this._currentPtIndices, "NewPosition", panTiltPosition.Pan, panTiltPosition.Tilt);
                this.AddMovementInfo(info);

                await Task.Run(() =>
                {
                    this._panTiltControl?.PanTiltAbsolute(panTiltPosition.Pan, panTiltPosition.Tilt);
                    this._waitMovementResetEvent.WaitOne(timeoutCommands);
                });
            }

            await Task.Run(() =>
            {
                this._positionChecker?.ComparePosition(this._panTiltPositions.Last());
            });

            this._ptUpdateTimer.Stop();
            this._ptUpdateTimer.Enabled = false;

            this.RefreshGrid();
        }
Example #17
0
        public EneoPanTiltControl(ICommunication communication, bool debug = false)
        {
            this._communication              = communication;
            this._communication.ReceiveData += PackageReceived;

            this._debug = debug;

            this._positionConverter = new PositionConverter();

            this._position = null;
            this._limits   = new PanTiltLimit();
            this._handler  = new FeedbackHandler();

            this._resetEvent    = new ManualResetEvent(false);
            this._stopHeartbeat = true;

            this.InitializeSpeedTranslationTable();
        }
        public FastMovementControl()
        {
            this.InitializeComponent();
            this._drawEngine = new DrawEngine(this._drawEngineMultiplier);

            this.labelError.Text   = string.Empty;
            this._lastPosition     = new PanTiltPosition();
            this._currentPtIndices = 0;
            this._movementInfos    = new List <FastMovementInfo>();

            this._bindingSource.DataSource = this._movementInfos;
            this.dataGridViewFastMovement.AutoGenerateColumns = false;
            this.dataGridViewFastMovement.DataSource          = this._bindingSource;

            this._ptUpdateTimer          = new Timer();
            this._ptUpdateTimer.Elapsed += UpdateTimerElapsed;
            this._ptUpdateTimer.Interval = 250;
        }
Example #19
0
        public void DrawCrossHair(PanTiltPosition position, Brush brush)
        {
            var point  = this.ConvertPanTilt2Point(position);
            var size1  = 7 * this._multiplier;
            var size2  = 4 * this._multiplier;
            var length = 5 * this._multiplier;

            using (var graphics = Graphics.FromImage(this._drawImage))
            {
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.DrawEllipse(new Pen(brush, 3), point.X - (size1 / 2), point.Y - (size1 / 2), size1, size1);
                graphics.DrawEllipse(new Pen(brush, 2), point.X - (size2 / 2), point.Y - (size2 / 2), size2, size2);

                graphics.DrawLine(new Pen(brush, 2), point.X + 5, point.Y, point.X + length, point.Y);
                graphics.DrawLine(new Pen(brush, 2), point.X - 5, point.Y, point.X - length, point.Y);
                graphics.DrawLine(new Pen(brush, 2), point.X, point.Y + 5, point.X, point.Y + length);
                graphics.DrawLine(new Pen(brush, 2), point.X, point.Y - 5, point.X, point.Y - length);
            }
        }
        private void ProveDeriviation(PanTiltPosition absoluteCurrentPt, double allowedDeriviation)
        {
            if (this._stoppedManually)
            {
                return;
            }

            var deviationOk = this._positionChecker.ComparePosition(absoluteCurrentPt, allowedDeriviation);

            this._deviationOverrunDetected = !this._deviationOverrunDetected && !deviationOk;

            if (this._deviationOverrunDetected)
            {
                this.labelError.Invoke(o => o.Text = $"{DateTime.Now.ToShortTimeString()} - Too high deviation detected");
            }
            else
            {
                this.labelError.Invoke(o => o.Text = string.Empty);
            }
        }
Example #21
0
        private void PackageReceived(byte[] data)
        {
            if (this._debug)
            {
                var hex = BitConverter.ToString(data);
                Log.Debug($"{nameof(PackageReceived)} - {hex}");
            }

            Interlocked.Increment(ref this._receiveCount);

            var message = Encoding.ASCII.GetString(data);

            if (message.Length == 14)
            {
                int.TryParse(message.Substring(2, 6), out var tempPan);
                int.TryParse(message.Substring(8, 6), out var tempTilt);

                this._position = new PanTiltPosition(tempPan / 100.0, tempTilt / 100.0);
                this.PositionChanged?.Invoke(this._position);
            }
        }
Example #22
0
        public async Task <bool> ComparePositionAsync(PanTiltPosition position, double tolerance = 0.5, int retry = 5, int timeout = 500, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (this._debug)
            {
                Log.Debug($"{nameof(ComparePositionAsync)} - Pan:{position.Pan} Tilt:{position.Tilt} Tolerance: {tolerance}");
            }

            while (retry > 0 && !cancellationToken.IsCancellationRequested)
            {
                var ptHeadPosition = this._panTiltControl.GetPosition();

                if (ptHeadPosition == null)
                {
                    await Task.Delay(timeout, cancellationToken);

                    retry--;
                    continue;
                }

                var panDifference  = Math.Abs(position.Pan - ptHeadPosition.Pan);
                var tiltDifference = Math.Abs(position.Tilt - ptHeadPosition.Tilt);

                if (panDifference <= tolerance && tiltDifference <= tolerance)
                {
                    return(true);
                }

                if (this._debug)
                {
                    Log.Debug($"{nameof(ComparePositionAsync)} - Difference, Pan:{panDifference} Tilt:{tiltDifference} Retry:{retry}");
                }

                await Task.Delay(timeout, cancellationToken);

                retry--;
            }

            return(false);
        }
Example #23
0
        public void GoToStartPosition(int position)
        {
            PanTiltPosition panTiltPosition = null;

            switch (this._axisType)
            {
            case AxisType.Pan:
                panTiltPosition = new PanTiltPosition(position, 0);
                this._panTiltControl.PanTiltAbsolute(position, 0);
                break;

            case AxisType.Tilt:
                panTiltPosition = new PanTiltPosition(0, position);
                this._panTiltControl.PanTiltAbsolute(0, position);
                break;
            }

            while (!this._positionChecker.ComparePosition(panTiltPosition, tolerance: 0.2))
            {
                Thread.Sleep(100);
            }
        }
        private void UpdateTimerElapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                if (this._panTiltControl == null || this.buttonStartFast.Enabled)
                {
                    return;
                }

                var currentPosition = this._currentPosition;
                if (currentPosition == null)
                {
                    return;
                }

                var info = new FastMovementInfo(DateTime.Now, this._currentPtIndices, "CurrentPosition", currentPosition.Pan, currentPosition.Tilt);
                this.AddMovementInfo(info);

                if (this._lastPosition != null)
                {
                    lock (this._syncObject)
                    {
                        this._drawEngine.DrawLine(currentPosition, this._lastPosition, new Pen(Brushes.HotPink).Color, 4);
                        this._drawEngine.DrawCircle(new PanTiltPosition(currentPosition.Pan, currentPosition.Tilt), 5, Brushes.HotPink);
                    }
                    this.UpdateCurrentImage();
                }

                this._lastPosition = currentPosition;

                this.RefreshGrid();
            }
            catch (Exception exception)
            {
                MessageBox.Show("Error", exception.Message);
            }
        }
Example #25
0
        public bool ComparePosition(PanTiltPosition position, double tolerance = 0.5, int retry = 5, int timeout = 500)
        {
            if (this._debug)
            {
                Log.Debug($"{nameof(ComparePosition)} - Pan:{position.Pan} Tilt:{position.Tilt} Tolerance: {tolerance}");
            }

            while (retry > 0)
            {
                var ptHeadPosition = this._panTiltControl.GetPosition();

                if (ptHeadPosition == null)
                {
                    Thread.Sleep(timeout);
                    retry--;
                    continue;
                }

                var panDifference  = Math.Abs(position.Pan - ptHeadPosition.Pan);
                var tiltDifference = Math.Abs(position.Tilt - ptHeadPosition.Tilt);

                if (panDifference <= tolerance && tiltDifference <= tolerance)
                {
                    return(true);
                }

                if (this._debug)
                {
                    Log.Debug($"{nameof(ComparePosition)} - Difference, Pan:{panDifference} Tilt:{tiltDifference} Retry:{retry}");
                }

                Thread.Sleep(timeout);
                retry--;
            }

            return(false);
        }
        private async Task MoveRectangleRelative(double degreePerSeconds, int seconds)
        {
            if (this._stoppedManually)
            {
                return;
            }

            this.PrepareDrawing();

            await Task.Run(() =>
            {
                this._panTiltControl.PanTiltAbsolute(0, 0);
                this._waitMovementResetEvent.WaitOne(1000);
                this._positionChecker.ComparePosition(new PanTiltPosition(0, 0), 0.1, 20, 40);
            });

            this._currentPosition          = _panTiltControl.GetPosition();
            this._deviationOverrunDetected = false;

            var items = new List <PanTiltPosition>();

            items.Add(new PanTiltPosition(0, 0));
            items.Add(new PanTiltPosition(0, degreePerSeconds / 2));
            items.Add(new PanTiltPosition(degreePerSeconds / 2, 0));
            items.Add(new PanTiltPosition(0, -degreePerSeconds));
            items.Add(new PanTiltPosition(-degreePerSeconds, 0));
            items.Add(new PanTiltPosition(0, degreePerSeconds));
            items.Add(new PanTiltPosition(degreePerSeconds / 2, 0));

            var absoluteCurrentPt  = this._currentPosition;
            var absolutePreviousPt = this._currentPosition;
            var allowedDeriviation = 0.5 * degreePerSeconds;

            this._lastPosition = null;
            int i = 1;

            while (!_stoppedManually && i < items.Count)
            {
                var relativePreviousPt = items[i - 1];
                var relativeCurrentPt  = items[i];

                absolutePreviousPt = absolutePreviousPt.AddRelativePosition(relativePreviousPt, seconds);
                absoluteCurrentPt  = absoluteCurrentPt.AddRelativePosition(relativeCurrentPt, seconds);
                this._drawEngine.DrawLine(absolutePreviousPt, absoluteCurrentPt, Color.DarkGreen, 4);

                this.labelPanTiltPosition.Text = $"Pan:{this._currentPosition.Pan:0.00} Tilt:{this._currentPosition.Tilt:0.00}";

                if (this._lastPosition != null)
                {
                    this._drawEngine.DrawLine(this._lastPosition, this._currentPosition, Color.HotPink, 3);
                }
                this.UpdateCurrentImage();

                this._lastPosition = this._currentPosition;

                await Task.Run(() =>
                {
                    this._panTiltControl.PanTiltRelative(relativeCurrentPt.Pan, relativeCurrentPt.Tilt);
                    this._waitMovementResetEvent.WaitOne(seconds * 1000);
                    this._panTiltControl.StopMoving();
                    this.ProveDeriviation(absoluteCurrentPt, allowedDeriviation);
                });

                i++;
            }

            if (this._lastPosition != null)
            {
                this._drawEngine.DrawLine(this._lastPosition, this._currentPosition, Color.HotPink, 3);
            }
            this.UpdateCurrentImage();
            this.SaveRectangleTestImageToFile(degreePerSeconds, seconds);
        }
        private async Task MoveRectangleRelative(double degreePerSeconds, double seconds)
        {
            if (this._stoppedManually)
            {
                return;
            }

            this.PrepareDrawing();

            await Task.Run(() =>
            {
                this._panTiltControl.PanTiltAbsolute(0, 0);
                this._positionChecker.ComparePosition(new PanTiltPosition(0, 0), 0.1, 100, 100);
            });

            this._currentPosition = this._panTiltControl.GetPosition();
            this._lastPosition    = new PanTiltPosition(this._currentPosition.Pan, this._currentPosition.Tilt);

            this._deviationOverrunDetected = false;

            var items = new List <PanTiltPosition>
            {
                new PanTiltPosition(0, 0),
                new PanTiltPosition(0, degreePerSeconds / 2),
                new PanTiltPosition(degreePerSeconds / 2, 0),
                new PanTiltPosition(0, -degreePerSeconds),
                new PanTiltPosition(-degreePerSeconds, 0),
                new PanTiltPosition(0, degreePerSeconds),
                new PanTiltPosition(degreePerSeconds / 2, 0)
            };

            var absoluteCurrentPt  = this._currentPosition;
            var absolutePreviousPt = this._currentPosition;
            var allowedDeriviation = 0.5 * degreePerSeconds;

            this._lastPosition = null;
            int i = 1;

            while (!this._stoppedManually && i < items.Count)
            {
                var relativePreviousPt = items[i - 1];
                var relativeCurrentPt  = items[i];

                //Draw expected route
                absolutePreviousPt = absolutePreviousPt.AddRelativePosition(relativePreviousPt, seconds);
                absoluteCurrentPt  = absoluteCurrentPt.AddRelativePosition(relativeCurrentPt, seconds);
                this._drawEngine.DrawLine(absolutePreviousPt, absoluteCurrentPt, Color.DarkGreen, 4);

                //Draw actual route
                if (this._lastPosition != null)
                {
                    this._drawEngine.DrawLine(this._lastPosition, this._currentPosition, Color.HotPink, 3);
                }

                this.UpdateCurrentImage();

                this.labelPanTiltPosition.Text = $"Pan:{this._currentPosition.Pan:0.00} Tilt:{this._currentPosition.Tilt:0.00}";
                this._lastPosition             = new PanTiltPosition(this._currentPosition.Pan, this._currentPosition.Tilt);

                this._panTiltControl.PanTiltRelative(relativeCurrentPt.Pan, relativeCurrentPt.Tilt);

                var delay = seconds * 1000.0;
                await Task.Delay((int)delay, this._cancellationTokenSource.Token).ContinueWith(tsk => { /* TaskCanceledException */ });

                this._panTiltControl.StopMoving();
                await Task.Delay((int)Math.Abs((this._currentPosition.Pan + this._currentPosition.Tilt) * 35));


                this.ProveDeriviation(absoluteCurrentPt, allowedDeriviation);

                i++;
            }

            if (this._lastPosition != null)
            {
                this._drawEngine.DrawLine(this._lastPosition, this._currentPosition, Color.HotPink, 3);
            }

            this.UpdateCurrentImage();
            this.SaveRectangleTestImageToFile(degreePerSeconds, seconds);
        }
 private void PanTiltPositionChanged(PanTiltPosition position)
 {
     this._currentPosition = position;
 }
        private async Task MoveCircle(int radius, int detailLevel = 8, bool reverse = false)
        {
            if (this._stoppedManually)
            {
                return;
            }

            this.PrepareDrawing();

            await Task.Run(() =>
            {
                this._panTiltControl.PanTiltAbsolute(0, 0);
                this._waitMovementResetEvent.WaitOne(1000);
                this._positionChecker.ComparePosition(new PanTiltPosition(0, 0), 0.2, 20, 40);
            });

            var circleLogic = new CircleLogic();

            this._currentPosition          = new PanTiltPosition(0, 0);
            this._deviationOverrunDetected = false;

            var items = new List <PanTiltPosition>();

            for (var r = radius; r <= 180; r += radius)
            {
                var positions = circleLogic.CalculatePtPositions(r, detailLevel);

                if (reverse)
                {
                    positions.Reverse();
                }

                items.AddRange(positions);
            }

            this._lastPosition = null;

            for (var i = 1; i < items.Count; i++)
            {
                if (this._stoppedManually)
                {
                    return;
                }

                var previousPt = items[i - 1];
                var currentPt  = items[i];

                this._drawEngine.DrawLine(previousPt, currentPt, Color.DarkGreen, 4);

                if (this._lastPosition != null)
                {
                    this._drawEngine.DrawLine(this._lastPosition, this._currentPosition, Color.HotPink, 2);
                }

                this._lastPosition = new PanTiltPosition(this._currentPosition.Pan, this._currentPosition.Tilt);

                this.labelPanTiltPosition.Text = $"Pan:{currentPt.Pan:0.00} Tilt:{currentPt.Tilt:0.00}";
                this.UpdateCurrentImage();

                await Task.Run(() =>
                {
                    this._panTiltControl.PanTiltAbsolute(currentPt.Pan, currentPt.Tilt);
                    this._positionChecker.ComparePosition(new PanTiltPosition(currentPt.Pan, currentPt.Tilt), 0.1, 50, 40);
                });
            }

            this.UpdateCurrentImage();
            this.SaveCircleTestImageToFile(radius, detailLevel);
        }
Example #30
0
 private double Distance(PanTiltPosition position1, PanTiltPosition position2)
 {
     return(Math.Pow(position1.Pan - position2.Pan, 2) + Math.Pow(position1.Tilt - position2.Tilt, 2));
 }