private IElement ActivateNextElement(IMeasurementMethod measurementMethod) { _measurementManager.GatherData = false; measurementMethod.Subscriptions.Clear(); return(measurementMethod.ActivateNextElement()); }
// 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); }
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; } }
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() ); }