コード例 #1
0
        ///// <summary>
        ///// 打开标定控件
        ///// </summary>
        //public void OpenCalibrationView()
        //{
        //    try
        //    {
        //        if ((Scene?.VisionFrame.IsEnableCamera == true) && (string.IsNullOrEmpty(SelectedCamera?.Info?.SerialNumber)))
        //        {
        //            throw new DriveNotFoundException("没有选定相机");
        //        }

        //        //var view = new CalibrationView();
        //        //var viewModel = (view.DataContext as CalibrationViewModel);
        //        //viewModel.CalibrationConfigurationCompleted -= ViewModel_CalibrationConfigurationCompleted;
        //        //viewModel.CalibrationConfigurationCompleted += ViewModel_CalibrationConfigurationCompleted;

        //    }
        //    catch (Exception ex)
        //    {
        //        OnMessageRaised(MessageLevel.Err, ex.Message, ex);
        //    }
        //}

        //private void ViewModel_CalibrationConfigurationCompleted(object sender, CalibrationConfigurationCompletedEventArgs e)
        //{

        //}

        /// <summary>
        /// 更新标定文件
        /// </summary>
        public void UpdateCalibrationFile()
        {
            //获取相机标定文件
            FileInfo[] calibrationFileInfos = CameraFactory.GetCameraCalibrationFiles(SelectedCamera?.Info.SerialNumber);
            CameraCalibrationFiles = new ObservableCollection <string>(calibrationFileInfos.ToList().ConvertAll(x => x.Name));
            CameraCalibrationFiles.Add("不需标定");
        }
コード例 #2
0
        public I3DCamera CreateCameraAt(String pCameraName, Vector3 pCameraPosition)
        {
            X3DCamera camera = CameraFactory.Create3DCamera(pCameraName);

            this.Place(camera, pCameraPosition);
            return(camera);
        }
コード例 #3
0
        public PlayerController(Data data, InputModel inputModel,
                                PlayerModel playerModel, PauseModel pauseModel)
        {
            _controllerList = new ControllerList();

            var cameraFactory = new CameraFactory(data.CameraData);
            var laserFactory  = new LaserFactory();

            var cameraModel = new CameraModel(cameraFactory);

            var moveController = new MoveController(inputModel.GetInputKeyboard(),
                                                    data.PlayerData, playerModel.Transform);

            var shootController = new ShootController(data.BulletData, playerModel, laserFactory);

            var cameraController = new CameraController(cameraModel, playerModel,
                                                        data.CameraData, pauseModel);

            var explosion = new Explosion(data.ExplosionData, playerModel);

            var abilityController = new AbilityController(inputModel, explosion);

            _controllerList.Add(moveController).Add(shootController).
            Add(cameraController).Add(abilityController).Initialize();
        }
コード例 #4
0
        private static void Main(string[] args)
        {
            try
            {
                CameraFactory.Initialize();
                foreach (var device in CameraFactory.DeviceList)
                {
                    Console.WriteLine("Found device: {0}", device.Description);
                }
                SpotVersionDetails versionInfo;
                SpotCamService.SpotGetVersionInfo2(out versionInfo);
                Console.WriteLine("Connected to driver:\n{0} {1}.{2}.{3} - {4}", versionInfo.ProductName, versionInfo.VerMajor, versionInfo.VerMinor, versionInfo.VerUpdate, versionInfo.BuildDetails);
                Console.WriteLine(versionInfo.Copyright);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Fatal Error: {0}", ex);
            }
            var camera = CameraFactory.DeviceList.Last().Create();

            Console.WriteLine("Camera Details:");
            Console.WriteLine("Model:{0}, SN:{1}, Firmware Rev: {2}, Hardware Rev: {3}", camera.Model, camera.SerialNumber, camera.FirmwareVersion, camera.HardwareVersion);
            Console.WriteLine("Capturing test TIFF image");
            CaptureAndSaveTestImage("SampleImage.tif");
            Console.WriteLine("SpotShutDown returned: {0}", SpotCamService.SpotShutDown());
        }
コード例 #5
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (AIThermometerAPP.Instance().AutoStartCam())
            {
                if (CameraFactory.Instance().cl.Count > 0)
                {
                    foreach (var ci in CameraFactory.Instance().cl)
                    {
                        this.vlcWindow.SetCamStream(ci);
                    }
                }
            }

            //mc)

            this.vlcWindow.ChangeLeft();
            // 设置全屏
            this.WindowState = System.Windows.WindowState.Normal;
            this.WindowStyle = System.Windows.WindowStyle.None;
            this.ResizeMode  = System.Windows.ResizeMode.NoResize;
            // this.Topmost = true;

            this.Left = 0.0;
            this.Top  = 0.0;

            this.Width  = System.Windows.SystemParameters.PrimaryScreenWidth;
            this.Height = System.Windows.SystemParameters.PrimaryScreenHeight;
        }
コード例 #6
0
        /// <summary>
        /// 加载配置文件
        /// </summary>
        /// <param name="file">文件路径</param>
        public void LoadFromFile(string file)
        {
            try
            {
                if (string.IsNullOrEmpty(file))
                {
                    throw new ArgumentException("无效路径/文件不存在");
                }

                CameraConfigParam cameraConfigParam = JsonSerialization.DeserializeObjectFromFile <CameraConfigParam>(file);

                if (Camera?.IsOpen == true)
                {
                    CameraFactory.ConfigurateCamera(Camera.Info.SerialNumber, cameraConfigParam);
                }
            }
            catch (Exception ex)
            {
                OnMessageRaised(MessageLevel.Err, ex.Message, ex);
            }
            finally
            {
                if (CameraConfigViewModel?.Camera?.IsOpen == true)
                {
                    Camera.Grab();

                    //刷新控件显示
                    Camera = Camera;
                }
            }
        }
コード例 #7
0
        // 以下为主页面代码
        /// <summary>
        /// VCL相机初始化
        /// </summary>
        private void VclCamInit()
        {
            LogHelper.WriteLog("vcl cam init start");
            foreach (var c in AIThermometerAPP.Instance().cameras_config.Cameras)
            {
                // 如果不是自动启动,所有相机的状态设为离线
                if (!AIThermometerAPP.Instance().AutoStartCam())
                {
                    c.state = CamContectingState.OFFLINE;
                }

                if (c.state == CamContectingState.ONLINE &&
                    AIThermometerAPP.Instance().AutoStartCam())
                {
                    // 如果摄像头Online 开始画面
                    if (CameraFactory.Instance().CreateCameraStream(c.Name, c.IP, c.StreamType) == null)
                    {
                        c.state = CamContectingState.OFFLINE;
                    }

                    // TODO 画面左侧的摄像头列表改变状态 在线 不在线 错误  需要完善
                    // TODO 状态从c。state获取, 名称也在c.name里。
                }
                CameraController cameraController = new CameraController(c);
                cameraController.SetConnectHandler(this.ConnectHandler, this.DisconnectHandler);
                listView.Items.Add(cameraController);
                ViewButtonStateChanged(c.state);
            }
            LogHelper.WriteLog("vcl cam init end : " + CameraFactory.Instance().cl.Count + " cameras ready!");
        }
コード例 #8
0
        static void Main(string[] args)
        {
            List <DiscoveredCamera> result = null;

            using (var discoveryRequest = new DiscoveryRequest())
            {
                discoveryRequest.CameraDiscovered += (s, e) => System.Console.WriteLine("Camera '{0}' found!", e.DiscoveredCamera);

                discoveryRequest.FindCameras(TimeSpan.FromSeconds(2));
                result = discoveryRequest.Wait();

                System.Console.WriteLine("{0} cameras found!", result.Count);
            }

            var camera = CameraFactory.ConnectToCamera(result[0], "admin", "admin");

            var ip   = camera.DeviceService.GetIP();
            var dns  = camera.DeviceService.GetDNS();
            var name = camera.DeviceService.GetHostname();

            var profiles = camera.MediaService.GetProfiles();

            var videoUrl    = camera.MediaService.GetVideoURL();
            var snapshotUrl = camera.MediaService.GetSnapshotURL();

            System.Console.ReadLine();
        }
コード例 #9
0
        private void SetCamera(TgcD3dInput input)
        {
            this.Camera = CameraFactory.Create(this.initialCameraPosition, input);

            this.baseCameraSpeed = this.Camera.MovementSpeed;

            AquaticPhysics.Instance.Add(this.Camera.RigidBody);
        }
コード例 #10
0
        public void CreateNotConnectedCameraTest()
        {
            var ipAddress     = IPAddress.Parse("192.168.0.1");
            var cameraFactory = new CameraFactory();
            var camera        = cameraFactory.CreateCamera(ipAddress);

            Assert.AreEqual(ipAddress, camera.IPAddress);
            Assert.AreEqual(camera.State, CameraStateEnum.NotConnected);
        }
コード例 #11
0
 /// <summary>
 /// 更新相机配置文件
 /// </summary>
 public void UpdateCameraConfigFiles()
 {
     if (Camera?.IsOpen == true)
     {
         //获取相机配置文件
         FileInfo[] configFileInfos = CameraFactory.GetCameraConfigFiles(Camera?.Info.SerialNumber);
         CameraConfigFiles = new ObservableCollection <string>(configFileInfos.ToList().ConvertAll(x => x.Name));
     }
 }
コード例 #12
0
 /// <summary>
 /// 更新相机
 /// </summary>
 public void UpdateCameras()
 {
     Cameras.Clear();
     if ((CameraFactory.Cameras?.Values != null) && (Scene?.VisionFrame?.IsEnableCamera == true))
     {
         CameraFactory.AddAllCamera();
         Cameras = new ObservableCollection <ICamera>(CameraFactory.Cameras.Values);
     }
 }
コード例 #13
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        /// <summary/>
        public static Camera MakeCamera(Variation v)
        {
            Camera camera = null;

            if (v["Camera"] != null)
            {
                v.AssertAbsenceOf("CameraType", "CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth", "CameraFieldOfView", "CameraViewMatrix", "CameraProjectionMatrix");
                camera = CameraFactory.MakeCamera(v["Camera"]);
            }
            else
            {
                v.AssertExistenceOf("CameraType");
                switch (v["CameraType"])
                {
                case "Orthographic":
                    v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth");
                    camera = new OrthographicCamera();
                    SetProjectionCameraParameters(camera, v);
                    ((OrthographicCamera)camera).Width = StringConverter.ToDouble(v["CameraWidth"]);
                    break;

                case "Perspective":
                    v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraFieldOfView");
                    camera = new PerspectiveCamera();
                    SetProjectionCameraParameters(camera, v);
                    ((PerspectiveCamera)camera).FieldOfView = StringConverter.ToDouble(v["CameraFieldOfView"]);
                    break;

                case "Matrix":
                    v.AssertExistenceOf("CameraViewMatrix", "CameraProjectionMatrix");
                    camera = new MatrixCamera();
                    ((MatrixCamera)camera).ViewMatrix       = StringConverter.ToMatrix3D(v["CameraViewMatrix"]);
                    ((MatrixCamera)camera).ProjectionMatrix = StringConverter.ToMatrix3D(v["CameraProjectionMatrix"]);
                    break;

                case "MatrixOrtho":
                    v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth", "CameraHeight");
                    camera = new MatrixCamera();
                    ((MatrixCamera)camera).ViewMatrix       = MakeViewMatrix(v);
                    ((MatrixCamera)camera).ProjectionMatrix = MakeOrthoMatrix(v);
                    break;

                case "MatrixPersp":
                    v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraFieldOfViewX", "CameraFieldOfViewY");
                    camera = new MatrixCamera();
                    ((MatrixCamera)camera).ViewMatrix       = MakeViewMatrix(v);
                    ((MatrixCamera)camera).ProjectionMatrix = MakePerspMatrix(v);
                    break;

                default:
                    throw new ApplicationException("Invalid camera type: " + v["CameraType"]);
                }
            }

            return(camera);
        }
コード例 #14
0
 public void DisconnectHandler(string ip)
 {
     this.vlcWindow.DelCamStream();
     CameraFactory.Instance().DelCamStream(ip);
     foreach (var c in AIThermometerAPP.Instance().cameras_config.Cameras)
     {
         c.state = CamContectingState.OFFLINE;
         ViewButtonStateChanged(c.state);
     }
 }
コード例 #15
0
        /// <summary>
        /// Registers each concrete camera builder.
        /// </summary>
        /// <returns></returns>
        public static CameraFactory RegisterAllCameraClasses()
        {
            CameraFactory factory = new CameraFactory();

            factory.RegisterBuilder("Vstarcam_C7823WIP", new Vstarcam_C7823WIPCameraBuilder());
            //factory.register_builder("easyN_A110", easyN_A110CameraBuilder());
            //factory.register_builder("HIKVISION_camera", HIKVISION_cameraCameraBuilder());

            return(factory);
        }
コード例 #16
0
ファイル: Camera.cs プロジェクト: zulis/Cubica
        public override void Initialize()
        {
            camera = CameraFactory.GetCamera(0);
            camera.SetPosition(0, 15, -25);
            camera.SetLookAt(0, 0, 0);

            // Register object in Lua.
            ScriptManager.SetGlobal("Camera", this);
            ScriptManager.RegisterCustomFunctions(this);
        }
コード例 #17
0
        public void Camera_OK()
        {
            //Act
            ICamera camera = CameraFactory.Create(new Vector3(1, 1, 1), new Vector3(0, 1, 0), new Vector3(0, 0, 1));

            //Assert
            Assert.AreEqual(new Vector3(1, 1, 1), camera.CameraPosition, "Camera Position");
            Assert.AreEqual(new Vector3(0, 1, 0), camera.CameraLookAt, "camera LookAt");
            Assert.AreEqual(new Vector3(0, 0, 1), camera.UpVector, "Up Vector");
        }
コード例 #18
0
 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     CameraFactory.RemoveAllCameras();
     try
     {
         SrVision.SRV_Dispose();
     }
     catch (Exception ex)
     {
         Logging.Error(ex);
     }
 }
コード例 #19
0
        public RenderSettingsForm(CameraFactory initCF, FileRenderSettings initRenderSettings)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            renderSettings = initRenderSettings;
            cf             = initCF;

            LoadRenderSettings();
        }
コード例 #20
0
        public CameraController(CameraFactory factory, int frameRate = 50, int cameraWidth = 640, int cameraHeight = 480)
        {
            FrameRate = frameRate;
            CameraWidth = cameraWidth;
            CameraHeight = cameraHeight;
            Cameras = new List<AbstractCamera>();

            DsDevice[] devs = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
            for (int i = 0; i < devs.Length; i++)
            {
                AbstractCamera camera = factory(this, i, cameraWidth, cameraHeight, frameRate, devs[i]);
                Cameras.Add(camera);
            }
        }
コード例 #21
0
ファイル: MainWindow.xaml.cs プロジェクト: pvandyk-tmt/ITS
        private void buttonShowVideo_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (usingRemotePath || !File.Exists(mCaseInfo.Image1))
                {
                    mCaseInfo.Image1 = mCaseInfo.RemoteImage1;
                }
                else
                {
                    usingRemotePath = false;
                }

                string filePath = mCaseInfo.Image1;
                //string filePath = @"C:\ENC\LuAnn\Not Showing in Session\Img0178s.enc";

                var camera = CameraFactory.Find();
                if (camera == null)
                {
                    return;
                }

                Configuration configuration = new Configuration();

                string videoPath;
                videoPath = camera.ExtractInfringementVideo(filePath, configuration.GetDLLPath());
                if (videoPath != string.Empty)
                {
                    VideoViewer videoViewer = new VideoViewer();
                    videoViewer.LoadVideo(videoPath);
                    videoViewer.ShowDialog();
                    File.Delete(videoPath);
                }
                else
                {
                    MessageBox.Show("No Video File found.");
                }
            }
            catch (GatewayException gex)
            {
                System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0} - {1}", "OtherWindow", gex.Message));
                throw new Exception(String.Format("Failed to load window from{0} - {1}", "OtherWindow", gex.Message), gex);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message));
                throw new Exception(String.Format("Failed to load window from{0} - {1}", "OtherWindow", ex.Message), ex);
            }
        }
コード例 #22
0
        public void CreateNotConnectedCameraExceptionTest()
        {
            var ipAddress     = IPAddress.Parse("192.168.0.1");
            var cameraFactory = new CameraFactory();

            try
            {
                var camera = cameraFactory.CreateCamera("admin", "admin", ipAddress);
                Assert.Fail();
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(CameraConnectionException), e.GetType());
            }
        }
コード例 #23
0
        private Camera MakeCheckedCamera()
        {
            if (string.IsNullOrEmpty(CameraName))
            {
                Messenger.Default.Send(new ViewModelMessageBoxMessage(
                                           this, LanguageString.Find("DeviceConfiguration_CameraCreationView_CameraNameNull"), ViewModelMessageBoxType.Error));
                return(null);
            }

            Camera camera = CameraFactory.CreateCamera();

            camera.Name = CameraName;

            return(camera);
        }
コード例 #24
0
 internal void InjectDependencies(FearResourceManager resMan,
                                  Input fearInput,
                                  GameObjectFactory gameObjFactory,
                                  UpdateableFactory updateableFac,
                                  SceneFactory sceneFac,
                                  LightFactory lightFac,
                                  CameraFactory cameraFac)
 {
     resourceManager   = resMan;
     input             = fearInput;
     gameObjectFactory = gameObjFactory;
     updateableFactory = updateableFac;
     sceneFactory      = sceneFac;
     lightFactory      = lightFac;
     cameraFactory     = cameraFac;
 }
コード例 #25
0
 public void ConnectHandler(string ip)
 {
     foreach (var c in AIThermometerAPP.Instance().cameras_config.Cameras)
     {
         if (c.IP == ip)
         {
             var mc = CameraFactory.Instance().CreateCameraStream(c.Name, c.IP, c.StreamType);
             if (mc != null)
             {
                 c.state = CamContectingState.ONLINE;
                 this.vlcWindow.SetCamStream(mc);
                 LogHelper.WriteLog("Connect handler cl count :" + CameraFactory.Instance().cl.Count);
             }
         }
         ViewButtonStateChanged(c.state);
     }
     this.vlcWindow.ChangeLeft();
 }
コード例 #26
0
 /* Method that converts a Camera Service to a Camera Factory */
 public void CameraServiceToCameraFactory(WorldObject wObji, WorldObject wObjf)
 {
     if (wObji.ContainService(typeof(CameraService)))
     {
         CameraService cam     = (CameraService)wObji.GetService(typeof(CameraService));
         CameraFactory camFact = new CameraFactory();
         camFact.aspectRatio   = cam.aspectRatio;
         camFact.bottom        = cam.bottom;
         camFact.farPlane      = cam.farPlane;
         camFact.fieldOfView   = cam.fieldOfView;
         camFact.IsPerspective = cam.IsPerspective;
         camFact.left          = cam.left;
         camFact.nearPlane     = cam.nearPlane;
         camFact.right         = cam.right;
         camFact.top           = cam.top;
         /* Save the factory in the object builder list */
         wObjf.objectBuilder.Add(camFact);
     }
 }
コード例 #27
0
ファイル: Shaders.cs プロジェクト: sp-alex-osou/Shaders
        public Shaders()
        {
            Content.RootDirectory = "Content";

            // Komponenten erstellen
            camera       = CameraFactory.CreateCamera(this, CameraType.FreeLookCamera);
            shape        = new Shape(this);
            room         = new Shape(this);
            lightService = new LightService(this);
            crosshair    = new Crosshair(this)
            {
                Visible = false
            };
            effectService      = new EffectService();
            collisionDetection = new CollisionDetection(this);

            // Komponenten zur Engine hinzufügen
            Components.Add(new CameraHandler(this)
            {
                Camera = camera
            });
            Components.Add(camera);
            Components.Add(lightService);
            Components.Add(shape);
            Components.Add(room);
            Components.Add(crosshair);
            Components.Add(collisionDetection);

            // Services hinzufügen
            Services.AddService(typeof(ICameraService), camera);
            Services.AddService(typeof(ILightService), lightService);
            Services.AddService(typeof(IEffectService), effectService);

            // Grafik-Einstellungen
            graphics = new GraphicsDeviceManager(this);
            graphics.SynchronizeWithVerticalRetrace = true;
            graphics.PreferMultiSampling            = true;
            graphics.IsFullScreen              = true;
            graphics.PreferredBackBufferWidth  = 1366;
            graphics.PreferredBackBufferHeight = 768;

            IsFixedTimeStep = true;
        }
コード例 #28
0
        private void ConfigFrameButton_Click(object sender, RoutedEventArgs e)
        {
            //移除所有的场景和相机
            CameraFactory.RemoveAllCameras();
            SceneManager.ResetScenes();

            //切换环境
            CameraFactory.DefaultCameraSdkType        = (ECameraSdkType)CameraSDKComboBox.SelectedItem;
            VisionFrameFactory.DefaultVisionFrameType = (EVisionFrameType)VisionFrameComboBox.SelectedItem;

            CameraFactory.AddAllCamera();
            SceneManager.RecoverScenes();

            //更新场景
            ScenesListView.Items.Clear();
            foreach (var item in SceneManager.Scenes.Values)
            {
                ScenesListView.Items.Add(item);
            }
        }
コード例 #29
0
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            foreach (var a in CameraFactory.Instance().cl)
            {
                foreach (var b in a)
                {
                    b.Value.Stop();
                    //(b.Value as VlcCamera).vlcPlayer.Dispose();
                }
            }
            CameraFactory.Instance().cl.Clear();
            this.vlcWindow.Shutdown();

            ServerHelper.Instance().Dispose();
            //TempWarning.Instance().addedWarningInfo = null;
            //;aTimer.Close();
            LogHelper.WriteLog("Closing APP");
            Environment.Exit(0);
            //base.OnClosing();
        }
コード例 #30
0
        /// <summary>
        /// 更新相机标定文件
        /// </summary>
        public void UpdateCameraCalibrationFiles()
        {
            try
            {
                if (IsSceneValid && Scene.VisionFrame.IsEnableCamera)
                {
                    FileInfo[] files = CameraFactory.GetCameraCalibrationFiles(Scene.Camera.Info.SerialNumber);
                    CalibrationConfigFiles = new ObservableCollection <string>(files.ToList().ConvertAll(x => x.Name));

                    if ((CalibrationConfigFiles.Count > 0) && (string.IsNullOrEmpty(CalibrationConfigFile)))
                    {
                        CalibrationConfigFile = CalibrationConfigFiles[0];
                    }
                }
            }
            catch (Exception ex)
            {
                OnMessageRaised(MessageLevel.Err, ex.Message, ex);
            }
        }
コード例 #31
0
        public ICamera BuildMenu(int choice)
        {
            CameraFactory factory = new CameraFactory();
            bool          done    = false;
            ICamera       camera  = null;

            while (!done)
            {
                switch (choice)
                {
                case 1:
                    Console.Write(SubMenu());
                    choice = int.Parse(Console.ReadLine());
                    camera = factory.CreateCamera(choice);

                    done = true;
                    break;

                case 2:
                    GetCameraList();
                    done = true;
                    break;

                case 3:
                    RemoveCamera();
                    done = true;
                    break;

                case 9:
                    Console.WriteLine("Exiting...");
                    Environment.Exit(0);
                    break;

                default:
                    Console.Write("Please pick a valid number: ");
                    choice = int.Parse(Console.ReadLine());
                    break;
                }
            }
            return(camera);
        }