public CalibrationControlViewModel(MainViewModel uiModeModel, IRigidNPR rigidNPR) { _uiModeModel = uiModeModel; _rigidNPR = rigidNPR; _uiModeModel.UiModeChanged += (_, ea) => { _currentMode = ea.NewMode; //Notify(nameof(AddTargetSelected)); }; _uiModeModel.SubscribeOnCanEnterMode(UiMode.TargetOverlay, (_, ea) => CanAddTarget = ea.CanEnter); _uiModeModel.SubscribeOnCanEnterMode(UiMode.FiducialsOverlay, (_, ea) => CanAddFiducial = ea.CanEnter); AvailableRigidNPRTypes = new ObservableCollection <RigidNPRTypesViewModel>(); AvailableRigidNPRTypes.Clear(); AvailableRigidNPRTypes.AddRange(_rigidNPR.GetMenuItems().Select(o => new RigidNPRTypesViewModel(o.NPRRadius, o.Name))); }
public MeasureActionViewModel Build(UiMode uiMode, string subMode = null) { MeasureActionViewModel vm = _measureFactory(); switch (uiMode) { case UiMode.RegionsOverlay: vm.Initialize(CreateActionParam(UiMode.RegionsOverlay, "Region")); break; case UiMode.FiducialsOverlay: vm.Initialize(CreateActionParam(UiMode.FiducialsOverlay, "Fiducials")); break; case UiMode.NPRPolygonsOverlay: vm.Initialize(CreateActionParam(UiMode.NPRPolygonsOverlay, "NPR Polygon")); break; case UiMode.RigidNPROverlay: var nprRegionsParam = CreateActionParam(UiMode.RigidNPROverlay, "No Pass Regions(NPR)", hasSubAction: true); nprRegionsParam.ChildActions = _rigidNPRService.GetMenuItems() .Select(el => { var param = CreateActionParam(UiMode.RigidNPROverlay, el.Name, el.NPRRadius); return(param); }) .Cast <ActionInitializeParams>() .ToList();; vm.Initialize(nprRegionsParam); vm.ChildActions.ForEach(el => el.NodeType = NodeType.ChildExecuteAlways); break; case UiMode.TargetOverlay: vm.Initialize(CreateActionParam(UiMode.TargetOverlay, "Target")); break; case UiMode.MeasurementDistanceOverlay: vm.Initialize(CreateActionParam(UiMode.MeasurementDistanceOverlay, "Distance")); break; case UiMode.MeasurementAreaOverlay: vm.Initialize(CreateActionParam(UiMode.MeasurementAreaOverlay, "Area")); break; case UiMode.MeasurementAngleOverlay: if (!string.IsNullOrWhiteSpace(subMode) && subMode == ACPC90) { vm.Initialize(CreateActionParam(UiMode.MeasurementAngleOverlay, "Angle 90 on AC/PC", ACPC90)); break; } var genericAngleParam = CreateActionParam(UiMode.MeasurementAngleOverlay, "Angle", hasSubAction: true); var angleParam = CreateActionParam(UiMode.MeasurementAngleOverlay, "Angle", "0"); genericAngleParam.ChildActions.Add(angleParam); var angle90Param = CreateActionParam(UiMode.MeasurementAngleOverlay, "Angle 90", "90"); genericAngleParam.ChildActions.Add(angle90Param); vm.Initialize(genericAngleParam); vm.ChildActions.ForEach(el => el.NodeType = NodeType.ChildExecuteAlways); break; case UiMode.ACPCOverlay: var acPcParam = CreateActionParam(UiMode.ACPCOverlay, "AC/PC", hasSubAction: true); var acParam = CreateActionParam(UiMode.ACPCOverlay, "AC", ((int)(UiMode.ACOverlay)).ToString()); acPcParam.ChildActions.Add(acParam); var pcParam = CreateActionParam(UiMode.ACPCOverlay, "PC", ((int)(UiMode.PCOverlay)).ToString()); acPcParam.ChildActions.Add(pcParam); var midLineParam = CreateActionParam(UiMode.ACPCOverlay, "MidLine", ((int)(UiMode.MidLineOverlay)).ToString()); acPcParam.ChildActions.Add(midLineParam); vm.Initialize(acPcParam); vm.ChildActions.ForEach(el => el.NodeType = NodeType.ChildExecuteAlways); break; default: throw new NotSupportedException($"The {uiMode} doesn't belong to Measure type"); } return(vm); }