コード例 #1
0
 internal ReferencePoint(ISensor detectedBy, PointF position, ILog logger = null)
 {
     DetectedBy = detectedBy;
     UniqueId   = Guid.NewGuid();
     TimeStamp  = DateTime.UtcNow;
     Position   = position;
     if (logger == null)
     {
         Logger = LogManager.GetLogger("ReferencePoint");
     }
     else
     {
         Logger = Logger;
     }
     ReferencePointChanged?.Invoke(this, new ReferencePointChangedEventArgs(null, UpdateEventTypes.New, "Ctor"));
 }
コード例 #2
0
        protected override void DefaultProcessing()
        {
            //int modProcess = 20;

            var previousPositions = new SortedList <long, PointF>();

            while (_processThreadRunning)
            {
                if (Speed > 0)
                {
                    // Plot new position based on course
                    // We know that 10 seconds have passed so we have to calculate the new position and plot it
                    // Get the duration since the last update and set the LastUpdate
                    var timeSinceLastUpdate = DateTime.UtcNow - LastUpdate;
                    LastUpdate = DateTime.UtcNow;
                    // Now calculate the contacts movement in that timespan
                    var distance = timeSinceLastUpdate.TotalSeconds * (Speed / SECONDS_PER_HOUR);
                    // Get the new position based on course and distance traveled
                    var newPos    = CoordinateConverter.CalculatePointFromDegrees(RelativePosition, new PolarCoordinate(Heading, distance), CoordinateConverter.ROUND_DIGITS);
                    var newAbsPos = newPos.GetAbsolutePosition(DetectedBy.ViewPortExtent);
                    // Create Region and add the previous window to it
                    var oldRectPos = DetectionWindow;
                    // Set the new Position
                    Position = newAbsPos;
                    // Add the new position to the Region
                    var newRectPos    = DetectionWindow;
                    var rectangleList = new List <RectangleF>();
                    rectangleList.AddRange(new List <RectangleF>()
                    {
                        oldRectPos, newRectPos
                    });
                    // Notify the ISensor to repaint
                    ReferencePointChanged?.Invoke(this, new ReferencePointChangedEventArgs(rectangleList, UpdateEventTypes.PositionChange, nameof(Position)));
                    Thread.Sleep(CustomUpdateDuration ?? DEFAULT_UPDATE_MILISECONDS);
                }
            }

            Logger.Info($"{this} has stopped processing");
        }
コード例 #3
0
        private void OnPropertyChanged(string propertyName)
        {
            var eventType = UpdateEventTypes.Unknown;

            switch (propertyName)
            {
            case nameof(Speed):
                eventType = UpdateEventTypes.SpeedChange;
                break;

            case nameof(Altitude):
                eventType = UpdateEventTypes.AltitudeChange;
                break;

            case nameof(Heading):
                eventType = UpdateEventTypes.HeadingChange;
                break;

            case nameof(ShowText):
                eventType = UpdateEventTypes.ShowTextChange;
                break;

            case nameof(Selected):
                eventType = UpdateEventTypes.SelectedChange;
                break;

            case "New":
                Initialized = true;
                break;

            case "Remove":
                Initialized = false;
                break;
            }

            ReferencePointChanged?.Invoke(this, new ReferencePointChangedEventArgs(new List <RectangleF>(), eventType, propertyName));
        }