public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

            if (context != null && editorService != null)
            {
                using (var visualizerDialog = new TypeVisualizerDialog())
                {
                    var imageControl = new ImageRoiPicker();
                    imageControl.LabelRegions = LabelRegions;
                    var regions            = default(OpenCV.Net.Point[][]);
                    var propertyDescriptor = context.PropertyDescriptor;
                    if (propertyDescriptor.PropertyType == typeof(OpenCV.Net.Point[]))
                    {
                        if (value != null)
                        {
                            regions = new[] { (OpenCV.Net.Point[])value }
                        }
                        ;
                        imageControl.MaxRegions = 1;
                    }
                    else
                    {
                        regions = (OpenCV.Net.Point[][])value;
                    }

                    imageControl.Dock     = DockStyle.Fill;
                    visualizerDialog.Text = propertyDescriptor.Name;
                    if (regions != null)
                    {
                        foreach (var region in regions)
                        {
                            imageControl.Regions.Add(region);
                        }
                    }

                    imageControl.RegionsChanged += (sender, e) => propertyDescriptor.SetValue(context.Instance, imageControl.Regions.ToArray());
                    visualizerDialog.AddControl(imageControl);
                    imageControl.Canvas.MouseDoubleClick += (sender, e) =>
                    {
                        if (e.Button == MouseButtons.Left && imageControl.Image != null && !imageControl.SelectedRegion.HasValue)
                        {
                            visualizerDialog.ClientSize = new System.Drawing.Size(
                                imageControl.Image.Width,
                                imageControl.Image.Height);
                        }
                    };

                    IDisposable subscription = null;
                    var         source       = GetDataSource(context, provider);
                    var         imageSource  = GetImageSource(source.Output);
                    imageControl.Load            += delegate { subscription = imageSource.Subscribe(image => imageControl.Image = image); };
                    imageControl.HandleDestroyed += delegate { subscription.Dispose(); };
                    editorService.ShowDialog(visualizerDialog);

                    var result = imageControl.Regions.ToArray();
                    if (result.Length == 0)
                    {
                        return(null);
                    }
                    else if (propertyDescriptor.PropertyType == typeof(OpenCV.Net.Point[]))
                    {
                        return(result[0]);
                    }
                    else
                    {
                        return(result);
                    }
                }
            }

            return(base.EditValue(context, provider, value));
        }
    }
Beispiel #2
0
        public uEyeCamera(int ID, string parPath, bool stack, bool disp, int X)
        {
            this.stack   = stack;
            this.display = disp;

            //check all the available IDS cameras
            m_Camera = new uEye.Camera();
            uEye.Types.CameraInformation[] cameraList;
            uEye.Info.Camera.GetCameraList(out cameraList);

            //if there are no cameras available then return with a false state
            if (cameraList.Length == 0)
            {
                m_IsLive = false;
            }
            else
            {
                //initialize the camera with the appropriate ID
                uEye.Defines.Status statusRet;
                statusRet = CameraInit(Convert.ToInt32(cameraList[ID].CameraID));

                //if initialization is successful
                if (statusRet == uEye.Defines.Status.SUCCESS)
                {
                    //try to capture a frame
                    statusRet = m_Camera.Acquisition.Capture();
                    if (statusRet != uEye.Defines.Status.SUCCESS)
                    {
                        m_IsLive = false;
                        MessageBox.Show("Starting Live Video Failed");
                    }
                    else
                    {
                        m_IsLive = true;

                        //load camera parameters from external file
                        LoadParametersFromFile(parPath);
                        m_Camera.Video.ResetCount();

                        //if frames are to save then initialize frame queue
                        if (stack)
                        {
                            queue = new ConcurrentStack <Frame>();
                        }

                        //if frames are to display initialize display window
                        if (display)
                        {
                            provider = new ServiceProvider();
                            vis      = new TypeVisualizerDialog();
                            provider.services.Add(vis);
                            imVis = new ImageVisualizer();
                            imVis.Load(provider);
                            vis.Show();
                            vis.Location = new System.Drawing.Point(X, 0);
                        }
                    }
                }
                //if initialization was unsuccessful then exit
                if (statusRet != uEye.Defines.Status.SUCCESS && m_Camera.IsOpened)
                {
                    m_Camera.Exit();
                }
            }
        }
Beispiel #3
0
        public override bool EditComponent(ITypeDescriptorContext context, object component, IServiceProvider provider, IWin32Window owner)
        {
            if (provider != null)
            {
                var workflow    = (ExpressionBuilderGraph)provider.GetService(typeof(ExpressionBuilderGraph));
                var editorState = (IWorkflowEditorState)provider.GetService(typeof(IWorkflowEditorState));
                if (workflow != null && editorState != null && editorState.WorkflowRunning)
                {
                    var editorForm = editorForms.FirstOrDefault(form => form.Tag == component);
                    if (editorForm == null)
                    {
                        editorForm = new TypeVisualizerDialog();
                        var videoPlayer = new VideoPlayer {
                            Dock = DockStyle.Fill
                        };
                        editorForm.AddControl(videoPlayer);

                        var captureNode      = workflow.FirstOrDefault(node => ExpressionBuilder.GetWorkflowElement(node.Value) == component);
                        var captureInspector = captureNode != null ? captureNode.Value as InspectBuilder : null;
                        if (captureInspector == null)
                        {
                            return(false);
                        }

                        var captureOutput = captureInspector.Output.Merge();
                        var capture       = (FileCapture)component;
                        var captureFrame  = captureOutput
                                            .Select(image => Tuple.Create((IplImage)image, (int)capture.Capture.GetProperty(CaptureProperty.PosFrames)))
                                            .Do(frame => videoPlayer.Update(frame.Item1, frame.Item2 - 1));

                        var          frameRate              = 0.0;
                        IDisposable  captureFrameHandle     = null;
                        EventHandler workflowStoppedHandler = (sender, e) => editorForm.Close();
                        editorState.WorkflowStopped += workflowStoppedHandler;
                        editorForm.HandleCreated    += (sender, e) =>
                        {
                            videoPlayer.Loop         = capture.Loop;
                            videoPlayer.Playing      = capture.Playing;
                            frameRate                = capture.Capture.GetProperty(CaptureProperty.Fps);
                            videoPlayer.PlaybackRate = capture.PlaybackRate == 0 ? frameRate : capture.PlaybackRate;
                            videoPlayer.FrameCount   = (int)capture.Capture.GetProperty(CaptureProperty.FrameCount);
                            captureFrameHandle       = captureFrame.Subscribe();
                        };

                        editorForm.FormClosed += (sender, e) =>
                        {
                            captureFrameHandle.Dispose();
                            editorState.WorkflowStopped -= workflowStoppedHandler;
                            editorForms.Remove(editorForm);
                        };

                        videoPlayer.LoopChanged         += (sender, e) => capture.Loop = videoPlayer.Loop;
                        videoPlayer.PlayingChanged      += (sender, e) => capture.Playing = videoPlayer.Playing;
                        videoPlayer.PlaybackRateChanged += (sender, e) => capture.PlaybackRate = videoPlayer.PlaybackRate == frameRate ? 0 : Math.Max(1, videoPlayer.PlaybackRate);
                        videoPlayer.Seek += (sender, e) => capture.Seek(e.FrameNumber);
                        editorForm.Tag    = capture;
                        editorForm.Text   = capture.FileName;
                        editorForm.Show(owner);
                        editorForms.Add(editorForm);
                    }

                    editorForm.Activate();
                    return(true);
                }
            }

            return(false);
        }