private void UpdateTheme() { // If there was no theme attached to the layer yet, generate a default theme if (featureCoverage == null || featureCoverage.Features == null || featureCoverage.Features.Count == 0) { return; } Style.GeometryType = GetFeatureGeometryType(featureCoverage.Features[0] as IFeature); // Values to base the theme on //List<IVariableFilter> filters = new List<IVariableFilter>(); if (Coverage.Time != null) { if (CurrentTime == null && Coverage.Time.Values.Count != 0) { CurrentTime = Coverage.Time.Values[0]; } //filters.Add(new VariableValueFilter(featureCoverage.Time, CurrentTime)); } IMultiDimensionalArray <double> values = featureCoverage.GetValues <double>(); if (null == values) { return; } // NOTE: we're getting all values here! var featureValues = new List <double>(values.Where(v => !double.IsNaN(v))); if (0 == featureValues.Count) { log.Error("Unable to generate default theme; no values available"); return; //throw new ArgumentException(); } featureValues.Sort(); double minValue = featureValues.Min(); double maxValue = featureValues.Max(); if (minValue == maxValue) { // Only a single value, so no gradient theme needed/wanted: create a 'blue' single feature theme Theme = ThemeFactory.CreateSingleFeatureTheme(Style.GeometryType, Color.Blue, 10); } else { // Create 'green to blue' gradient theme Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, Style, new ColorBlend(new Color[] { Color.Green, Color.Blue }, new float[] { 0f, 1f }), (float)minValue, (float)maxValue, 1, 1, false, true); } }
private void UpdateTheme() { // If there was no theme attached to the layer yet, generate a default theme if (featureCoverage == null || featureCoverage.Features == null || featureCoverage.Features.Count == 0) { return; } Style.GeometryType = GetFeatureGeometryType(featureCoverage.Features[0]); // Values to base the theme on if (Coverage.Time != null) { if (CurrentTime == null && Coverage.Time.Values.Count != 0) { CurrentTime = Coverage.Time.Values[0]; } } IMultiDimensionalArray <double> values = featureCoverage.GetValues <double>(); if (null == values) { return; } // NOTE: we're getting all values here! var featureValues = new List <double>(values.Where(v => !double.IsNaN(v) && !double.IsInfinity(v))); if (0 == featureValues.Count) { Log.Error("Unable to generate default theme; no values available"); return; } featureValues.Sort(); double minValue = featureValues.Min(); double maxValue = featureValues.Max(); if (base.Theme == null) { // Create default Theme if (minValue == maxValue) { // Only a single value, so no gradient theme needed/wanted: create a 'blue' single feature theme Theme = ThemeFactory.CreateSingleFeatureTheme(Style.GeometryType, Color.Blue, 10); } else { // Create 'green to blue' gradient theme Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, Style, new ColorBlend(new[] { Color.Green, Color.Blue }, new[] { 0f, 1f }), (float)minValue, (float)maxValue, 1, 1, false, true); } } else { if (AutoUpdateThemeOnDataSourceChanged) { Theme.ScaleTo(minValue, maxValue); } } }