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)));
        }
Exemplo n.º 2
0
        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);
        }