Example #1
0
        private IElement ActivateNextElement(IMeasurementMethod measurementMethod)
        {
            _measurementManager.GatherData = false;
            measurementMethod.Subscriptions.Clear();

            return(measurementMethod.ActivateNextElement());
        }
Example #2
0
        // invoked every time even initially
        private async Task SetNextElement(IMeasurementMethod measurementMethod)
        {
            var element = ActivateNextElement(measurementMethod);

            ElementsViewModels.ForEach(evm => evm.Update());

            ActiveElementViewModel = ElementsViewModels.FirstOrDefault(x => x.Element == element);

            if (element == null)
            {
                return;
            }

            if (element.Plane == null)
            {
                await ShowPlaneSelectionDialog();
            }

            // Check if should show blocking dialog
            if (MeasurementMethod.SetupInitialPosition(null))
            {
                await ShowAxisBlockDialog();
            }

            Subscribe(measurementMethod, element);

            _measurementManager.GatherData = true;
        }
        /// <summary>
        /// Sets up
        /// </summary>
        /// <param name="selectedMeasurementMethod"></param>
        /// <returns></returns>
        public bool SetupMeasurementMethod(MeasurementMethodEnum selectedMeasurementMethod)
        {
            PositionBuffer.Clear();

            _selectedMeasurementMethod?.Subscriptions.Clear();
            SelectedMeasurementMethod  = selectedMeasurementMethod;
            _selectedMeasurementMethod = _measurementMethodFactory.GetMeasurementMethod(selectedMeasurementMethod);
            _measurementSource.OnNext(_selectedMeasurementMethod);

            return(true);
        }
        /// <summary>
        /// Wipe all measurement data.
        /// </summary>
        public bool ResetMeasurementData()
        {
            GatherData = false;

            PositionBuffer.Clear();

            SelectedMeasurementMethod = null;
            _selectedMeasurementMethod?.Subscriptions.Clear();
            _selectedMeasurementMethod = null;

            return(true);
        }
Example #5
0
        private void InitializeMeasurement(IMeasurementMethod measurementMethod)
        {
            lock (_lock)
            {
                // Wrapping in VM
                ElementsViewModels = measurementMethod.Elements
                                     .Select((el, i) => new ElementViewModel(el))
                                     .ToArray();

                ElementsViewModels
                .Select(evm => evm.Element)
                .ForEach(e =>
                {
                    e.SelectedPositions.OnAdd.ObserveOn(SynchronizationContext.Current).Subscribe(_ => RaisePropertyChanged(() => Calculate));
                    e.SelectedPositions.OnRemove.ObserveOn(SynchronizationContext.Current).Subscribe(_ => RaisePropertyChanged(() => Calculate));
                });

                // Expose measurement method
                MeasurementMethod = measurementMethod;
            }
        }
Example #6
0
        private void Subscribe(IMeasurementMethod measurementMethod, IElement element)
        {
            // Positions to register
            measurementMethod.Subscriptions.Add(
                _measurementManager.PositionSource
                .Where(_ => _measurementManager.GatherData)
                .Where(element.AxisMovementValidation)
                .Where(position => position.FirstContact)
                .ObserveOn(SynchronizationContext.Current)
                .Subscribe(position => element.Positions.Add(position))
                );

            // Axis moved prompt
            measurementMethod.Subscriptions.Add(
                _measurementManager.PositionSource
                .Where(_ => _measurementManager.GatherData)
                .Where(pos => !element.AxisMovementValidation(pos))
                .ObserveOn(SynchronizationContext.Current)
                .Where(_ => !_isAxisLocked)
                .SelectMany(async _ => await ShowAxisMovementDialog())
                .Subscribe()
                );
        }