Skip to content

Commit

Permalink
fix zoom bug when axis has a transform (#2)
Browse files Browse the repository at this point in the history
* fix zoom bug when axis has a transform

* ExtendedNumberAxis: setLowerBound error message bug fix. Added @OverRide tags
  • Loading branch information
illumon-public authored Nov 28, 2017
1 parent 196f78f commit e0adda0
Showing 1 changed file with 40 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void setTickLabelAngle(final double angle) {

@Override
public void setLowerBound(final double min) {
if(maxRange < min) { throw new IllegalArgumentException("Upper bound=" + maxRange + " can't be smaller than lower bound=" + minRange); }
if(maxRange <= min) { throw new IllegalArgumentException("Lower bound=" + min + " can't be greater than upper bound=" + maxRange); }
this.minRange = min;
if(!Double.isNaN(minRange) && !Double.isNaN(maxRange)) {
this.setRange(new Range(minRange, maxRange));
Expand All @@ -61,7 +61,7 @@ public void setLowerBound(final double min) {

@Override
public void setUpperBound(final double max) {
if(minRange > max) { throw new IllegalArgumentException("Upper bound=" + maxRange + " can't be smaller than lower bound=" + minRange); }
if(minRange >= max) { throw new IllegalArgumentException("Upper bound=" + max + " can't be smaller than lower bound=" + minRange); }
this.maxRange = max;
if(!Double.isNaN(minRange) && !Double.isNaN(maxRange)) {
this.setRange(new Range(minRange, maxRange));
Expand Down Expand Up @@ -336,13 +336,13 @@ private boolean contains(Range range, double currentTickValue) {


//transform specific redrawing
@Override
protected void autoAdjustRange() {
final Plot plot = this.getPlot();
if(plot != null) {
if(plot instanceof ValueAxisPlot) {
final ValueAxisPlot vap = (ValueAxisPlot)plot;
Range r = vap.getDataRange(this);
boolean applyMargin = false;
if(r == null) {
r = this.getDefaultAutoRange();
}
Expand Down Expand Up @@ -406,41 +406,36 @@ protected void autoAdjustRange() {
}
}

if(this.getAutoRangeStickyZero()) {
if(upper <= 0.0D) {
if (this.getAutoRangeStickyZero()) {
if (upper <= 0.0D) {
upper = Math.min(0.0D, upper + this.getUpperMargin() * range);
} else {
upper += this.getUpperMargin() * range;
}

if(lower >= 0.0D) {
if (lower >= 0.0D) {
lower = Math.max(0.0D, lower - this.getLowerMargin() * range);
} else {
lower -= this.getLowerMargin() * range;
}
} else {
applyMargin = true;
upper += Double.isNaN(this.maxRange) ? this.getUpperMargin() * range : 0.0D;
lower -= Double.isNaN(this.minRange) ? this.getLowerMargin() * range : 0.0D;
}
}
}

upper = this.transform.inverseTransform(upper);
lower = this.transform.inverseTransform(lower);
r = new Range(lower, upper);
if(applyMargin) {
double range2 = r.getUpperBound() - r.getLowerBound();

//if the range hasn't been manually set, apply a small margin
upper += Double.isNaN(this.maxRange)?this.getUpperMargin() * range2:0.0D;
lower -= Double.isNaN(this.minRange)?this.getLowerMargin() * range2:0.0D;
upper = this.transform.inverseTransform(upper);
lower = this.transform.inverseTransform(lower);

if (!Double.isNaN(upper) && !Double.isNaN(lower)) {
this.setRange(new Range(lower, upper), false, false);
}
}

this.setRange(new Range(lower, upper), false, false);
}

}
}

@Override
public double valueToJava2D(final double value, final Rectangle2D area, final RectangleEdge edge) {
final Range range = this.getRange();
final double tvalue = transform.isVisible(value) ? transform.transform(value) : value;
Expand All @@ -459,6 +454,7 @@ public double valueToJava2D(final double value, final Rectangle2D area, final Re
return this.isInverted()?max - (tvalue - axisMin) / (axisMax - axisMin) * (max - min):min + (tvalue - axisMin) / (axisMax - axisMin) * (max - min);
}

@Override
public double java2DToValue(final double java2DValue, final Rectangle2D area, final RectangleEdge edge) {
final Range range = this.getRange();
final double axisMin = transform.transform(range.getLowerBound());
Expand All @@ -482,4 +478,28 @@ public double java2DToValue(final double java2DValue, final Rectangle2D area, fi

return transform.inverseTransform(result);
}

@Override
public void zoomRange(double lowerPercent, double upperPercent) {
double lower = transform.transform(this.getRange().getLowerBound());
double upper = transform.transform(this.getRange().getUpperBound());
double length = upper - lower;
double r0;
double r1;
if(this.isInverted()) {
r0 = lower + length * (1.0D - upperPercent);
r1 = lower + length * (1.0D - lowerPercent);
} else {
r0 = lower + length * lowerPercent;
r1 = lower + length * upperPercent;
}

r0 = transform.inverseTransform(r0);
r1 = transform.inverseTransform(r1);

if(r1 > r0 && !java.lang.Double.isInfinite(r1 - r0)) {
this.setRange(new Range(r0, r1));
}

}
}

0 comments on commit e0adda0

Please sign in to comment.