public PlotViewModel(int plotViewId = 0) { _plotViewId = plotViewId; _minYValue = MinY = 1E-9; _maxYValue = MaxY = 1.0; _minXValue = MinX = 1E-9; _maxXValue = MaxX = 1.0; _manualScaleX = false; _manualScaleY = false; RealLabels = new List <string>(); ImagLabels = new List <string>(); PhaseLabels = new List <string>(); AmplitudeLabels = new List <string>(); Labels = new List <string>(); PlotTitles = new List <string>(); DataSeriesCollection = new List <DataPointCollection>(); PlotSeriesCollection = new PlotPointCollection(); _IsComplexPlot = false; PlotModel = new ViewResolvingPlotModel { Title = "", LegendPlacement = LegendPlacement.Outside, DefaultColors = new List <OxyColor> { OxyColor.FromRgb(0x00, 0x80, 0x00), // Green OxyColor.FromRgb(0xD6, 0x89, 0x10), // Dark Orange OxyColor.FromRgb(0xDC, 0x14, 0x3C), // Crimson Red OxyColor.FromRgb(0x00, 0x00, 0xFF), // Blue OxyColor.FromRgb(0xC4, 0x15, 0xC4), // Dark Magenta OxyColor.FromRgb(0x00, 0xBF, 0xBF), // Turquoise OxyColor.FromRgb(0x4F, 0x4F, 0x4F), // Dark Grey OxyColor.FromRgb(0x33, 0x99, 0xFF), // Light Blue OxyColor.FromRgb(0x80, 0x00, 0x00), // Maroon OxyColor.FromRgb(0x00, 0x80, 0x80), // Teal OxyColor.FromRgb(0x00, 0x00, 0x80), // Navy Blue OxyColor.FromRgb(0x99, 0x99, 0x00), // Olive Green } }; PlotType = ReflectancePlotType.ForwardSolver; _HoldOn = true; _HideKey = false; _ShowInPlotView = true; _ShowAxes = false; _showComplexPlotToggle = false; _xAxisLog10 = false; _yAxisLog10 = false; PlotToggleTypeOptionVM = new OptionViewModel <PlotToggleType>("ToggleType_" + _plotViewId, false); PlotToggleTypeOptionVM.PropertyChanged += (sender, args) => UpdatePlotSeries(); PlotNormalizationTypeOptionVM = new OptionViewModel <PlotNormalizationType>("NormalizationType_" + _plotViewId, false); PlotNormalizationTypeOptionVM.PropertyChanged += (sender, args) => UpdatePlotSeries(); //Commands.Plot_PlotValues.Executed += Plot_Executed; //Commands.Plot_SetAxesLabels.Executed += Plot_SetAxesLabels_Executed; //PlotValues = new RelayCommand<Array>(Plot_Executed); PlotValuesCommand = new Command <Array>(async(x) => await ExecutePlotCommand(x)); //SetAxesLabels = new RelayCommand<object>(Plot_SetAxesLabels_Executed); //ClearPlotCommand = new RelayCommand(() => Plot_Cleared(null, null)); ClearPlotCommand = new Command(async() => await Plot_Cleared()); ClearPlotSingleCommand = new Command(async() => await Plot_ClearedSingle()); //ClearPlotSingleCommand = new RelayCommand(() => Plot_ClearedSingle(null, null)); //ExportDataToTextCommand = new RelayCommand(() => Plot_ExportDataToText_Executed(null, null)); //DuplicateWindowCommand = new RelayCommand(() => Plot_DuplicateWindow_Executed(null, null)); }
public SpectralMappingViewModel() { #if WHITELIST ScatteringTypeVM = new OptionViewModel <ScatteringType>(StringLookup.GetLocalizedString("Heading_ScattererType"), true, WhiteList.ScatteringTypes); #else ScatteringTypeVM = new OptionViewModel <ScatteringType>(StringLookup.GetLocalizedString("Heading_ScattererType"), true); #endif ScatteringTypeVM.PropertyChanged += (sender, args) => { if (args.PropertyName == "SelectedValue" && SelectedTissue != null) // this runs based on Tissue changes { //SelectedTissue.Scatterer = SolverFactory.GetScattererType(ScatteringTypeVM.SelectedValue); var bindableScatterer = SelectedTissue.Scatterer as INotifyPropertyChanged; if (bindableScatterer != null) { bindableScatterer.PropertyChanged += (s, a) => UpdateOpticalProperties(); } //LM - Temporary Fix to reset the tissue type after a new scatterer is created //if (SelectedTissue.ScattererType == ScatteringType.PowerLaw) //{ // var myScatterer = (PowerLawScatterer)SelectedTissue.Scatterer; // myScatterer.SetTissueType(SelectedTissue.TissueType); //} //ScatteringTypeName = SelectedTissue.Scatterer.GetType().FullName; DisplayIntralipidScatterer = ScatteringTypeVM.SelectedValue == ScatteringType.Intralipid; DisplayPowerLawScatterer = ScatteringTypeVM.SelectedValue == ScatteringType.PowerLaw; DisplayMieScatterer = ScatteringTypeVM.SelectedValue == ScatteringType.Mie; } OnPropertyChanged("Scatterer"); UpdateOpticalProperties(); }; WavelengthRangeVM = new RangeViewModel(new DoubleRange(650.0, 1000.0, 36), StringLookup.GetLocalizedString("Measurement_nm"), IndependentVariableAxis.Wavelength, StringLookup.GetLocalizedString("Heading_WavelengthRange")); Tissues = new List <Tissue>() { new Tissue(TissueType.Skin), new Tissue(TissueType.BrainWhiteMatter), new Tissue(TissueType.BrainGrayMatter), new Tissue(TissueType.BreastPreMenopause), new Tissue(TissueType.BreastPostMenopause), new Tissue(TissueType.Liver), new Tissue(TissueType.IntralipidPhantom), //new Tissue(TissueType.PolystyreneSpherePhantom), new Tissue(TissueType.Custom) }; BloodConcentrationVM = new BloodConcentrationViewModel(); // #region DC notes 1 // // DC NOTES on how to propagate the correct hemoglobin instances into BloodConcentrationVM: // // Upon setting SelectedTissue (below), we internally update the BloodConcentrationVM hemoglobin references // // This is the simplest solution, but maybe violates SOC...(see SelectedTissue property for details) // // A second alternative way would be to override AfterPropertyChanged (see AfterPropertyChanged method below) // #endregion BloodConcentrationVM.PropertyChanged += (sender, args) => UpdateOpticalProperties(); SelectedTissue = Tissues.First(); ScatteringTypeVM.SelectedValue = SelectedTissue.ScattererType; // forces update to all bindings established in hanlder for ScatteringTypeVM.PropertyChanged above //ScatteringTypeName = SelectedTissue.GetType().FullName; OpticalProperties = new OpticalProperties(0.01, 1, 0.8, 1.4); Wavelength = 650; CustomPlotLabel = ""; ResetConcentrationsCommand = new Command <object>(OnResetConcentrationsCommand); //UpdateWavelengthCommand = new Command(OnUpdateWavelengthCommand); PlotMuaSpectrumCommand = new Command(async() => await OnPlotMuaSpectrumCommand()); PlotMuspSpectrumCommand = new Command(async() => await OnPlotMuspSpectrumCommand()); }