public MarkerRegistrationViewModel(
            IMarkerRegistrationService registrationService,
            IMarkerRegistrationField registrationField,
            ScaleAdapter scaleAdapter
            )
        {
            IdSelectionPanel = new IdSelectionViewModel(registrationService);

            FieldPosition = Observable.Return(registrationField.FieldPosition)
                            .ScaleToScreen(scaleAdapter)
                            .ToReactiveProperty();

            FieldSize = Observable.Return(registrationField.FieldSize)
                        .ScaleToScreen(scaleAdapter)
                        .ToReactiveProperty();

            IsCandidatePlaced = Observable.FromEvent <MarkerCandidateState>(
                h => registrationService.OnMarkerCandidateUpdated += h,
                h => registrationService.OnMarkerCandidateUpdated -= h
                )
                                .Do(value => Debug.WriteLine($"-> Candidate update = {value}"))
                                .Select(state => state == MarkerCandidateState.Detected)
                                .ToReactiveProperty();

            IsSelectingId = IsCandidatePlaced
                            .SelectMany(async isSelecting =>
            {
                if (isSelecting)
                {
                    await IdSelectionPanel.UpdateRegisteredIdsAsync();
                    return(IsCandidatePlaced.Value);
                }
                return(false);
            })
                            .ToReactiveProperty();

            _disposable = IdSelectionPanel.SelectedId
                          .Subscribe(id =>
            {
                registrationService.RegisterCandidate(id);
                IsSelectingId.Value = false;
                IsCandidatePlaced.ForceNotify();
            });
        }
Ejemplo n.º 2
0
        public RegistrationService(IMarkerRegistrationField registrationField)
        {
            _registrationField = registrationField;

            _registrationField.OnPointersCountChanged += UpdateCandidateState;
        }
Ejemplo n.º 3
0
 public ModelRoot()
 {
     RegistrationField   = new RegistrationField(_trackingService);
     RegistrationService = new RegistrationService(RegistrationField);
 }