Esempio n. 1
0
        /// <summary>
        /// This routine runs through the imagevieweraddons, checks whether they are in the dictionary of overlay objects,
        /// if so checks whether it is time to clear the overlay.
        /// The timer is not part of the UI
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void TimedRefresh(object sender, ElapsedEventArgs e)
        {
            if (_activeImageViewerAddOns.Count > 0)
            {
                try
                {
                    // Copy array to avoid deadlocks
                    ImageViewerAddOn[] tempList;
                    lock (_activeImageViewerAddOns)
                    {
                        tempList = new ImageViewerAddOn[_activeImageViewerAddOns.Count];
                        _activeImageViewerAddOns.CopyTo(tempList, 0);
                    }

                    //Go through all registered AddOns and identify the one we are looking for
                    foreach (ImageViewerAddOn addOn in tempList)
                    {
                        OverlayObject oo;
                        if (_dicAddOnOverlayObjects.TryGetValue(addOn, out oo))
                        {
                            DateTime endTime = oo.StartTime.AddMilliseconds(_keepOverlayPeriod);
                            if (endTime < DateTime.UtcNow)
                            {
                                ClearOverlay(addOn);
                                _dicAddOnOverlayObjects.Remove(addOn);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    EnvironmentManager.Instance.ExceptionDialog("Background Overlay", ex);
                }
            }
        }
        /// <summary>
        /// Draw overlay for live mode ImageViewerControls.
        /// </summary>

        // This function is called when new data has come in, called from the NewEventIndicationMessageHandler
        // and NewAlarmMessageHandler. It iterates all the ImageViewerAddOns and updates the overlay.
        private void RefreshOverlay()
        {
            if (_activeImageViewerAddOns.Count > 0)
            {
                try
                {
                    // Copy array to avoid deadlocks
                    ImageViewerAddOn[] tempList = new ImageViewerAddOn[_activeImageViewerAddOns.Count];
                    lock (_activeImageViewerAddOns)
                    {
                        _activeImageViewerAddOns.CopyTo(tempList, 0);
                    }

                    //Go through all registered AddOns and identify the one we are looking for
                    foreach (ImageViewerAddOn addOn in tempList)
                    {
                        if (addOn.CameraFQID != null && addOn.CameraFQID.ObjectId != Guid.Empty)
                        {
                            //Only draw the ones in Live mode
                            if (addOn.InLiveMode)
                            {
                                DrawOverlay(addOn, DateTime.Now);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    EnvironmentManager.Instance.ExceptionDialog("Background Overlay", ex);
                }
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Unhook all my event handlers
 /// </summary>
 /// <param name="imageViewerAddOn"></param>
 void UnregisterEvents(ImageViewerAddOn imageViewerAddOn)
 {
     imageViewerAddOn.CloseEvent                 -= new EventHandler(ImageViewerAddOn_CloseEvent);
     imageViewerAddOn.StartLiveEvent             -= new PassRequestEventHandler(ImageViewerAddOn_StartLiveEvent);
     imageViewerAddOn.StopLiveEvent              -= new PassRequestEventHandler(ImageViewerAddOn_StopLiveEvent);
     imageViewerAddOn.RecordedImageReceivedEvent -= new RecordedImageReceivedHandler(ImageViewerAddOn_RecordedImageReceivedEvent);
 }
 /// <summary>
 /// Unhook all my event handlers
 /// </summary>
 /// <param name="imageViewerAddOn"></param>
 void UnregisterEvents(ImageViewerAddOn imageViewerAddOn)
 {
     imageViewerAddOn.CloseEvent     -= new EventHandler(ImageViewerAddOn_CloseEvent);
     imageViewerAddOn.StartLiveEvent -= new PassRequestEventHandler(ImageViewerAddOn_StartLiveEvent);
     imageViewerAddOn.StopLiveEvent  -= new PassRequestEventHandler(ImageViewerAddOn_StopLiveEvent);
     imageViewerAddOn.UserControlSizeOrLocationChangedEvent -= ImageViewerAddOn_UserControlSizeOrLocationChangedEvent;
 }
 private bool CameraMatch(ImageViewerAddOn addOn)
 {
     return(addOn.CameraFQID != null &&
            addOn.CameraFQID.ObjectId != Guid.Empty &&
            WatchCameraFQID != null &&
            addOn.CameraFQID.ObjectId == WatchCameraFQID.ObjectId);
 }
        private void DrawOverlay(ImageViewerAddOn addOn, DateTime dateTime)
        {
            // We need to be on the UI thread for setting the overlay
            ClientControl.Instance.CallOnUiThread(() =>
            {
                try
                {
                    // number between 0 and 100 -counting 1/10 of seconds
                    int s = (dateTime.Second % 10) * 10 + dateTime.Millisecond / 100;
                    List <Shape> shapes = new List <Shape>();
                    shapes.Add(CreateBoxShape(addOn.PaintSize, s * 50 / _sampleRateOfOverlay, s * 50 / _sampleRateOfOverlay, 300, 300, Colors.Yellow, 0.7));
                    shapes.Add(CreateTextShape(addOn.PaintSize, s.ToString(), s * 50 / _sampleRateOfOverlay, s * 50 / _sampleRateOfOverlay, 100, Colors.Red));

                    if (!_dictShapes.ContainsKey(addOn))
                    {
                        _dictShapes.Add(addOn, addOn.ShapesOverlayAdd(shapes, new ShapesOverlayRenderParameters()
                        {
                            ZOrder = 100
                        }));
                    }
                    else
                    {
                        addOn.ShapesOverlayUpdate(_dictShapes[addOn], shapes, new ShapesOverlayRenderParameters()
                        {
                            ZOrder = 100
                        });
                    }
                }
                catch (Exception ex)            // Ignore exceptions during close
                {
                    Debug.WriteLine("DrawOverlay:" + ex.Message);
                }
            });
        }
        /// <summary>
        /// One of the ImageViewer has been closed / Removed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_CloseEvent(object sender, EventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                UnregisterEvents(imageViewerAddOn);

                try
                {
                    ClearOverlay(imageViewerAddOn);
                }
                catch (Exception ex)
                {
                    EnvironmentManager.Instance.ExceptionDialog("ImageViewerAddOn_CloseEvent", ex);
                }
                lock (_activeImageViewerAddOns)
                {
                    // Remove from list
                    if (_activeImageViewerAddOns.Contains(imageViewerAddOn))
                    {
                        _activeImageViewerAddOns.Remove(imageViewerAddOn);
                    }
                }
            }
        }
        private void SetupNewIndependentPlaybackEvents(ImageViewerAddOn currentImageViewer)
        {
            _currentImageViewer.IndependentPlaybackModeChangedEvent += IndependentPlaybackModeChangedHandler;

            // When a new ImageViewerAddon is selected and independent playback is enabled, we subscribe to the PlaybackTimeChangedEvent in order to show the current time in the ViewItem
            _currentImageViewer.IndependentPlaybackController.PlaybackTimeChangedEvent += PlaybackTimeChangedEvent;
            _currentImageViewer.IndependentPlaybackController.PlaybackModeChangedEvent += PlaybackModeChangedEvent;
        }
        /// <summary>
        /// The Smart Client is now going into live mode.  We would overtake or reject that this item is going into live.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_StartLiveEvent(object sender, PassRequestEventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
            }
        }
Esempio n. 10
0
 /// <summary>
 /// A new ImageViewer has been created
 /// </summary>
 /// <param name="imageViewerAddOn"></param>
 void NewImageViewerControlEvent(ImageViewerAddOn imageViewerAddOn)
 {
     lock (_activeImageViewerAddOns)
     {
         RegisterEvents(imageViewerAddOn);
         _activeImageViewerAddOns.Add(imageViewerAddOn);
     }
 }
 /// <summary>
 /// Unhook all my event handlers
 /// </summary>
 /// <param name="imageViewerAddOn"></param>
 void UnregisterEvents(ImageViewerAddOn imageViewerAddOn)
 {
     imageViewerAddOn.CloseEvent                 -= new EventHandler(ImageViewerAddOn_CloseEvent);
     imageViewerAddOn.PropertyChangedEvent       -= new EventHandler(imageViewerAddOn_PropertyChangedEvent);
     imageViewerAddOn.RecordedImageReceivedEvent -= new RecordedImageReceivedHandler(ImageViewerAddOn_RecordedImageReceivedEvent);
     imageViewerAddOn.StartLiveEvent             -= new PassRequestEventHandler(ImageViewerAddOn_StartLiveEvent);
     imageViewerAddOn.StopLiveEvent              -= new PassRequestEventHandler(ImageViewerAddOn_StopLiveEvent);
     imageViewerAddOn.ImageDisplayedEvent        -= imageViewerAddOn_ImageDisplayedEvent;
 }
        /// <summary>
        /// The Smart Client is now going into live mode.  We would overtake or reject that this item is going into live.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_StartLiveEvent(object sender, PassRequestEventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                DrawOverlay(imageViewerAddOn, DateTime.Now);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// The Smart Client is now going into live mode.  We would overtake or reject that this item is going into live.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ImageViewerAddOn_StartLiveEvent(object sender, PassRequestEventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;  // todo does this do anything (is the obects always null)?

            if (imageViewerAddOn != null)
            {
                DrawGraphOverlay(imageViewerAddOn);
            }
        }
 private void Instance_NewImageViewerControlEvent(ImageViewerAddOn imageViewerAddOn)
 {
     // Whenever we receive a ImageViewerAddon we subscribe to the "CloseEvent", so we can remove it from our list and thereby make certain to have an updated list
     imageViewerAddOn.CloseEvent += ImageViewerAddOn_CloseEvent;
     lock (_imageViewers)
     {
         _imageViewers.Add(imageViewerAddOn);
     }
 }
Esempio n. 15
0
        /// <summary>
        /// The smart client is now going into setup or playback mode (Or just this one camera is in instant playback mode)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_StopLiveEvent(object sender, PassRequestEventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                ClearOverlay(imageViewerAddOn);
            }
        }
        /// <summary>
        /// One of the ImageViewer has been closed / Removed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_CloseEvent(object sender, EventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                UnregisterEvents(imageViewerAddOn);
                // sequence source is automatically unregistered when image viewer is closed
            }
        }
        private void ImageViewerAddOn_CloseEvent(object sender, System.EventArgs e)
        {
            ImageViewerAddOn closingImageViewer = (ImageViewerAddOn)sender;

            closingImageViewer.CloseEvent -= ImageViewerAddOn_CloseEvent;
            lock (_imageViewers)
            {
                _imageViewers.Remove(closingImageViewer);
            }
        }
 private void RemoveIndependentPlaybackEvents(ImageViewerAddOn currentImageViewer)
 {
     _currentImageViewer.IndependentPlaybackModeChangedEvent -= IndependentPlaybackModeChangedHandler;
     if (_currentImageViewer.IndependentPlaybackController != null)
     {
         // In order to only receive events from one ImageViewerAddon at a time. We unsubscribe to the event, when a new ViewItem is selected
         _currentImageViewer.IndependentPlaybackController.PlaybackTimeChangedEvent -= PlaybackTimeChangedEvent;
         _currentImageViewer.IndependentPlaybackController.PlaybackModeChangedEvent -= PlaybackModeChangedEvent;
     }
 }
        /// <summary>
        /// In Playback mode, an Image has been received.
        /// In our sample we redisplay / draw the image every time
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_RecordedImageReceivedEvent(object sender, RecordedImageReceivedEventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null && WatchCameraFQID != null)
            {
                if (imageViewerAddOn.CameraFQID.ObjectId == WatchCameraFQID.ObjectId)
                {
                    DrawOverlay(imageViewerAddOn, e.DateTime);
                }
            }
        }
Esempio n. 20
0
        /// <summary>
        /// One of the ImageViewer has been closed / Removed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ImageViewerAddOn_CloseEvent(object sender, EventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                UnregisterEvents(imageViewerAddOn);
                lock (_imageViewerAddOnButtons)
                {
                    _imageViewerAddOnButtons.Remove(imageViewerAddOn);
                }
            }
        }
Esempio n. 21
0
        /// <summary>
        /// Draw the overlay on one specific imagevieweraddon
        /// </summary>
        /// <param name="addOn"></param>
        private void drawGraphOverlay(ImageViewerAddOn addOn)
        {
            try
            {
                AssociatedProperties associatedProperties;
                if (!_cameraAssociatedProperties.TryGetValue(addOn.CameraFQID.ObjectId, out associatedProperties))
                {
                    var cameraItem = Configuration.Instance.GetItem(addOn.CameraFQID);
                    associatedProperties = Configuration.Instance.GetAssociatedProperties(cameraItem, AdminTabPluginDefinition.AdminTabPluginTabPlugin);

                    _cameraAssociatedProperties[addOn.CameraFQID.ObjectId] = associatedProperties;
                }

                string property1 = associatedProperties.Properties.ContainsKey("Property1") ? associatedProperties.Properties["Property1"] : null;
                string property2 = associatedProperties.Properties.ContainsKey("Property2") ? associatedProperties.Properties["Property2"] : null;

                List <Shape> shapes = new List <Shape>();
                Size         size   = new Size(320, 240);
                if (property1 != null)
                {
                    shapes.Add(CreateTextShape(size, "Property1=" + property1, 100, 0, 100, System.Windows.Media.Colors.Red));
                }

                if (property2 != null)
                {
                    shapes.Add(CreateTextShape(size, "Property2=" + property2, 100, 100, 100, System.Windows.Media.Colors.Red));
                }

                if (!_dicShapes.ContainsKey(addOn))
                {
                    _dicShapes.Add(addOn, addOn.ShapesOverlayAdd(shapes, new ShapesOverlayRenderParameters()
                    {
                        ZOrder = 100
                    }));
                }
                else
                {
                    addOn.ShapesOverlayUpdate(_dicShapes[addOn], shapes, new ShapesOverlayRenderParameters()
                    {
                        ZOrder = 100
                    });
                }
            }
            catch (Exception ex)
            {
                EnvironmentManager.Instance.Log(true, "AdminTabBackgrounPlugin", "DrawOverlay(UI):" + ex.Message);
            }
        }
        /// <summary>
        /// Some property has changed on the cameraview item (or hotspot or ...)
        /// Lets check that the camera id is the one we watch for.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void imageViewerAddOn_PropertyChangedEvent(object sender, EventArgs e)
        {
            ImageViewerAddOn imageViewerAddOn = sender as ImageViewerAddOn;

            if (imageViewerAddOn != null)
            {
                if (imageViewerAddOn.CameraFQID.ObjectId == _cameraId)
                {
                    imageViewerAddOn.RegisterTimelineSequenceSource(_timelineSource);
                }
                else
                {
                    imageViewerAddOn.UnregisterTimelineSequenceSource(_timelineSource);
                }
            }
        }
 /// <summary>
 /// A new ImageViewer has been created
 /// </summary>
 /// <param name="imageViewerAddOn"></param>
 void NewImageViewerControlEvent(ImageViewerAddOn imageViewerAddOn)
 {
     if (imageViewerAddOn.PaintSize.Height > 0)
     {
         lock (_activeImageViewerAddOns)
         {
             RegisterEvents(imageViewerAddOn);
             _activeImageViewerAddOns.Add(imageViewerAddOn);
         }
     }
     else
     {
         // paintsize is empty if no images has been displayed yet, subscribe to ImageDisplayedEvent and use it to add the ImageViewerAddOn
         imageViewerAddOn.ImageDisplayedEvent += ImageViewerAddOn_ImageDisplayedEvent;
     }
 }
Esempio n. 24
0
        /// <summary>
        /// Draw the overlay on one specific imagevieweraddon
        /// </summary>
        /// <param name="addOn"></param>
        private void DrawGraphOverlay(ImageViewerAddOn addOn)
        {
            OverlayObject oo;

            if (!_dicAddOnOverlayObjects.TryGetValue(addOn, out oo))
            {
                return;
            }

            ClientControl.Instance.CallOnUiThread(() =>
            {
                List <Shape> shapes = VideoOS.Platform.Util.AnalyticsOverlayBuilder.BuildShapeOverlay(addOn.PaintSize.Width, addOn.PaintSize.Height, (BaseEvent)oo.EventObject);

                UpdateShapeOverlay(addOn, shapes);
            });
        }
Esempio n. 25
0
 private void UpdateShapeOverlay(ImageViewerAddOn addOn, List <Shape> shapes)
 {
     if (!_dicShapes.ContainsKey(addOn))
     {
         _dicShapes.Add(addOn, addOn.ShapesOverlayAdd(shapes, new ShapesOverlayRenderParameters()
         {
             ZOrder = 100
         }));
     }
     else
     {
         addOn.ShapesOverlayUpdate(_dicShapes[addOn], shapes, new ShapesOverlayRenderParameters()
         {
             ZOrder = 100
         });
     }
 }
Esempio n. 26
0
 private void ClearOverlay(ImageViewerAddOn imageViewerAddOn)
 {
     try
     {
         // Clear the overlay
         Guid shapeID;
         if (_dicShapes.TryGetValue(imageViewerAddOn, out shapeID))
         {
             ClientControl.Instance.CallOnUiThread(() => imageViewerAddOn.ShapesOverlayRemove(shapeID));
             _dicShapes.Remove(imageViewerAddOn);
         }
     }
     catch (Exception ex)
     {
         EnvironmentManager.Instance.ExceptionDialog("ImageViewerAddOn_ClearOverlay", ex);
     }
 }
        private void ImageViewerAddOn_ImageDisplayedEvent(object sender, ImageDisplayedEventArgs e)
        {
            ImageViewerAddOn addOn = sender as ImageViewerAddOn;

            if (addOn != null)
            {
                if (addOn.PaintSize.Height > 0)
                {
                    lock (_activeImageViewerAddOns)
                    {
                        RegisterEvents(addOn);
                        _activeImageViewerAddOns.Add(addOn);
                        addOn.ImageDisplayedEvent -= ImageViewerAddOn_ImageDisplayedEvent; // unsubscribe, only needed ince
                    }
                }
            }
        }
Esempio n. 28
0
        /// <summary>
        /// A new ImageViewer has been created.
        /// For simplicity this sample adds the same UIElements to all ImageViewers. In real life it should in most cases be dependent on the camera. Look at the AnalyticsOverlay sample for an example on how to do this.
        /// </summary>
        /// <param name="imageViewerAddOn"></param>
        void NewImageViewerControlEvent(ImageViewerAddOn imageViewerAddOn)
        {
            imageViewerAddOn.ShowMetadataOverlay = false;

            Guid borderId = AddBorder(imageViewerAddOn);

            var button = new Button()
            {
                Content             = "Toggle bounding box",
                Width               = 150,
                Height              = 30,
                Background          = Brushes.Transparent,
                Tag                 = borderId, // storing the ID for the border active element so that we can use it for toggling
                HorizontalAlignment = HorizontalAlignment.Right,
                VerticalAlignment   = VerticalAlignment.Top,
                Margin              = new Thickness(0, 10, 10, 0)
            };

            button.Click += Button_Click;

            var textBlock = new TextBlock()
            {
                Text             = "This is an element" + System.Environment.NewLine + "that doesn't capture any mouse events",
                IsHitTestVisible = false // this will ensure that the text will not capture any mouse events
            };

            // position is set relative to the top of the video being shown - not the entire view item
            Canvas.SetLeft(textBlock, 250);
            Canvas.SetTop(textBlock, 250);

            imageViewerAddOn.ActiveElementsOverlayAdd(new List <FrameworkElement> {
                button, textBlock
            }, new ActiveElementsOverlayRenderParameters()
            {
                FollowDigitalZoom = false, ShowAlways = false, ZOrder = 1
            });

            RegisterEvents(imageViewerAddOn);
            lock (_imageViewerAddOnButtons)
            {
                _imageViewerAddOnButtons[imageViewerAddOn] = button;
            }
        }
        private void ChangeCurrentImageViewer(ImageViewerAddOn selectedImageViewAddon)
        {
            if (_currentImageViewer == null && selectedImageViewAddon != null)
            {
                _currentImageViewer = selectedImageViewAddon;
                _currentImageViewer.IndependentPlaybackModeChangedEvent += IndependentPlaybackModeChangedHandler;
            }

            if (_currentImageViewer != null && selectedImageViewAddon != _currentImageViewer)
            {
                RemoveIndependentPlaybackEvents(_currentImageViewer);
                _currentImageViewer = selectedImageViewAddon;
            }

            if (_currentImageViewer != null)
            {
                SetupNewIndependentPlaybackEvents(_currentImageViewer);
            }
        }