Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
                }
            }
        }