/// <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]); } } }