/// <summary>
        /// Initializes a new instance of the MotionControllerViewModel class.
        /// </summary>
        public MotionControllerViewModel(MotionControllerModel mc, IMotionControllerService mcs)
        {
            if (!IsInDesignMode)
            {
                _motionController = mc;
                _motionControllerService = mcs;
                Palette = Palette.Create(new RGBColorWheel(), System.Windows.Media.Colors.Red, PaletteSchemaType.Analogous, 1);

                MotionControllerService.Initialize(MotionController);
                DoSelectColor(Palette);

                Messenger.Default.Register<AddCameraMessage>(this,
                    message =>
                    {
                        // initialize entries for newly added camera
                        if (!MotionController.Tracking.ContainsKey(message.Camera))
                        {
                            MotionController.TrackerStatus.Add(message.Camera, PSMoveTrackerStatus.NotCalibrated);
                            MotionController.Tracking.Add(message.Camera, false);
                            MotionController.RawPosition.Add(message.Camera, Float3.Zero);
                            MotionController.WorldPosition.Add(message.Camera, Float3.Zero);
                            MotionController.CameraPosition.Add(message.Camera, Float3.Zero);
                            MotionController.FusionPosition.Add(message.Camera, Float3.Zero);
                            MotionController.PositionHistory.Add(message.Camera, new Vector3[5]);
                        }
                    });

                Messenger.Default.Register<RemoveCameraMessage>(this,
                    message =>
                    {
                        // remove entries corresponding to recently removed camera
                        MotionController.TrackerStatus.Remove(message.Camera);
                        MotionController.Tracking.Remove(message.Camera);
                        MotionController.RawPosition.Remove(message.Camera);
                        MotionController.WorldPosition.Remove(message.Camera);
                        MotionController.CameraPosition.Remove(message.Camera);
                        MotionController.FusionPosition.Remove(message.Camera);
                        MotionController.PositionHistory.Remove(message.Camera);
                    });

                if (mc.Serial != null)
                {
                    // register with service locator
                    SimpleIoc.Default.Register(() => this, mc.Serial, true);
                    // notify existing cameras to add this controller
                    Messenger.Default.Send(new AddMotionControllerMessage(MotionController));
                }

                // initialize existing cameras
                foreach (CameraViewModel scvm in SimpleIoc.Default.GetAllCreatedInstances<CameraViewModel>())
                {
                    MotionController.RawPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.FusionPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.CameraPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.WorldPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.Tracking.Add(scvm.Camera, false);
                    MotionController.TrackerStatus.Add(scvm.Camera, PSMoveTrackerStatus.NotCalibrated);
                    MotionController.PositionHistory.Add(scvm.Camera, new Vector3[5]);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the MotionControllerViewModel class.
        /// </summary>
        public MotionControllerViewModel(MotionControllerModel mc, IMotionControllerService mcs)
        {
            if (!IsInDesignMode)
            {
                _motionController = mc;
                _motionControllerService = mcs;
                Palette = Palette.Create(new RGBColorWheel(), System.Windows.Media.Colors.Red, PaletteSchemaType.Analogous, 1);

                MotionControllerService.Initialize(MotionController);
                DoSelectColor(Palette);

                Messenger.Default.Register<AddCameraMessage>(this,
                    message =>
                    {
                        // initialize entries for newly added camera
                        if (!MotionController.Tracking.ContainsKey(message.Camera))
                        {
                            MotionController.TrackerStatus.Add(message.Camera, PSMoveTrackerStatus.NotCalibrated);
                            MotionController.Tracking.Add(message.Camera, false);
                            MotionController.RawPosition.Add(message.Camera, Float3.Zero);
                            MotionController.WorldPosition.Add(message.Camera, Float3.Zero);
                            MotionController.CameraPosition.Add(message.Camera, Float3.Zero);
                            MotionController.FusionPosition.Add(message.Camera, Float3.Zero);
                            MotionController.PositionHistory.Add(message.Camera, new Vector3[5]);
                        }
                    });

                Messenger.Default.Register<RemoveCameraMessage>(this,
                    message =>
                    {
                        // remove entries corresponding to recently removed camera
                        MotionController.TrackerStatus.Remove(message.Camera);
                        MotionController.Tracking.Remove(message.Camera);
                        MotionController.RawPosition.Remove(message.Camera);
                        MotionController.WorldPosition.Remove(message.Camera);
                        MotionController.CameraPosition.Remove(message.Camera);
                        MotionController.FusionPosition.Remove(message.Camera);
                        MotionController.PositionHistory.Remove(message.Camera);
                    });

                if (mc.Serial != null)
                {
                    // register with service locator
                    SimpleIoc.Default.Register(() => this, mc.Serial, true);
                    // notify existing cameras to add this controller
                    Messenger.Default.Send(new AddMotionControllerMessage(MotionController));
                }

                // initialize existing cameras
                foreach (CameraViewModel scvm in SimpleIoc.Default.GetAllCreatedInstances<CameraViewModel>())
                {
                    MotionController.RawPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.FusionPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.CameraPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.WorldPosition.Add(scvm.Camera, Float3.Zero);
                    MotionController.Tracking.Add(scvm.Camera, false);
                    MotionController.TrackerStatus.Add(scvm.Camera, PSMoveTrackerStatus.NotCalibrated);
                    MotionController.PositionHistory.Add(scvm.Camera, new Vector3[5]);
                }
            }
        }