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")); }
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"); }
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)); }