Ignore:
Timestamp:
08/19/15 13:27:06 (7 years ago)
Author:
pfleck
Message:

#2379
Fixed zooming issues.
Added "no data available" label.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs

    r12881 r12882  
    197197      chart.ChartAreas[0].AxisY.IsMarginVisible = !(YAxisValue != null && YAxisValue.Contains(AxisDimension.Index.ToString()));
    198198
    199       if (Content == null || string.IsNullOrEmpty(XAxisValue) || string.IsNullOrEmpty(YAxisValue)) return;
    200 
    201       var xss = GetValues(XAxisValue);
    202       var yss = GetValues(YAxisValue);
    203 
    204       if (xss.Count == yss.Count) {
    205         for (int i = 0; i < xss.Count; i++)
    206           AddPoints(xss[i], yss[i], series);
    207       } else if (xss.Count == 1 || yss.Count == 1) {
    208         for (int i = 0; i < xss.Count; i++)
    209           for (int j = 0; j < yss.Count; j++)
    210             AddPoints(xss[i], yss[j], series);
     199      if (Content != null && !string.IsNullOrEmpty(XAxisValue) && !string.IsNullOrEmpty(YAxisValue)) {
     200        var xss = GetValues(XAxisValue);
     201        var yss = GetValues(YAxisValue);
     202
     203        if (xss.Count == yss.Count) {
     204          for (int i = 0; i < xss.Count; i++)
     205            AddPoints(xss[i], yss[i], series);
     206        } else if (xss.Count == 1 || yss.Count == 1) {
     207          for (int i = 0; i < xss.Count; i++)
     208            for (int j = 0; j < yss.Count; j++)
     209              AddPoints(xss[i], yss[j], series);
     210        }
     211      }
     212
     213      if (chart.Series[0].Points.Count == 0) {
     214        noDataLabel.Visible = true;
     215      } else {
     216        noDataLabel.Visible = false;
     217        UpdateMarkerSizes();
     218        UpdateCursorInterval();
    211219      }
    212220
     
    520528      }
    521529    }
     530    private void UpdateCursorInterval() {
     531      double xMin = double.MaxValue;
     532      double xMax = double.MinValue;
     533      double yMin = double.MaxValue;
     534      double yMax = double.MinValue;
     535
     536      foreach (var point in chart.Series[0].Points) {
     537        if (point.IsEmpty) continue;
     538        if (point.XValue < xMin) xMin = point.XValue;
     539        if (point.XValue > xMax) xMax = point.XValue;
     540        if (point.YValues[0] < yMin) yMin = point.YValues[0];
     541        if (point.YValues[0] > yMax) yMax = point.YValues[0];
     542      }
     543
     544      double xRange = 0.0;
     545      double yRange = 0.0;
     546      if (xMin != double.MaxValue && xMax != double.MinValue) xRange = xMax - xMin;
     547      if (yMin != double.MaxValue && yMax != double.MinValue) yRange = yMax - yMin;
     548
     549      if (xRange.IsAlmost(0.0)) xRange = 1.0;
     550      if (yRange.IsAlmost(0.0)) yRange = 1.0;
     551      double xDigits = (int)Math.Log10(xRange) - 3;
     552      double yDigits = (int)Math.Log10(yRange) - 3;
     553      double xZoomInterval = Math.Pow(10, xDigits);
     554      double yZoomInterval = Math.Pow(10, yDigits);
     555      this.chart.ChartAreas[0].CursorX.Interval = xZoomInterval;
     556      this.chart.ChartAreas[0].CursorY.Interval = yZoomInterval;
     557
     558      // TODO
     559      //code to handle TimeSpanValues correct
     560      //int axisDimensionCount = Enum.GetNames(typeof(AxisDimension)).Count();
     561      //int columnIndex = xAxisComboBox.SelectedIndex - axisDimensionCount;
     562      //if (columnIndex >= 0 && Content.GetValue(0, columnIndex) is TimeSpanValue)
     563      //  this.chart.ChartAreas[0].CursorX.Interval = 1;
     564      //columnIndex = yAxisComboBox.SelectedIndex - axisDimensionCount;
     565      //if (columnIndex >= 0 && Content.GetValue(0, columnIndex) is TimeSpanValue)
     566      //  this.chart.ChartAreas[0].CursorY.Interval = 1;
     567    }
     568
    522569    #endregion
    523570
Note: See TracChangeset for help on using the changeset viewer.