Skip to content

Commit 03c2055

Browse files
authored
Merge pull request #1 from phisi/stepmode2
Stepmode2
2 parents 5eed634 + 370fbdb commit 03c2055

4 files changed

Lines changed: 70 additions & 60 deletions

File tree

androidplot-core/src/main/java/com/androidplot/xy/StepModel.java

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,10 @@ public class StepModel {
2424
public StepModel(StepMode mode, double value) {
2525
setMode(mode);
2626
setValue(value);
27-
setSteps(null);
28-
}
29-
30-
public StepModel(double[] increments, double numLines) {
31-
setMode(StepMode.INCREMENT_BY_FIT);
32-
setValue(numLines);
33-
setSteps(increments);
3427
}
3528

3629
private StepMode mode;
37-
private double value; // increment by x value, pixels or number of sub division
38-
private double[] steps; // for fit mode: possible increments (by value) to choose from
39-
40-
public double[] getSteps() {
41-
return steps;
42-
}
43-
44-
public void setSteps(double[] steps) {
45-
this.steps = steps;
46-
}
30+
private double value;
4731

4832
public StepMode getMode() {
4933
return mode;
@@ -60,33 +44,4 @@ public double getValue() {
6044
public void setValue(double value) {
6145
this.value = value;
6246
}
63-
64-
/*
65-
depending on the currently displayed range (by value) choose increment so that
66-
the number of lines is closest to value
67-
*/
68-
public double getFitValue(double range) {
69-
70-
// no possible increments where supplied (e.g. switched into this mode without calling setSteps(...)
71-
// TODO: throw exception this should not be done
72-
if (steps == null)
73-
return getValue();
74-
75-
double curStep = steps[0];
76-
77-
double oldDistance = Math.abs((range / curStep)-value );
78-
79-
// determine which step size comes closest to the desired number of steps
80-
for (double step : steps) {
81-
82-
double newDistance = Math.abs((range / step)-value );
83-
84-
// closer than previos stepping?
85-
if (newDistance < oldDistance){
86-
curStep = step;
87-
oldDistance = newDistance;
88-
}
89-
}
90-
return curStep;
91-
}
9247
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.androidplot.xy;
2+
3+
import com.androidplot.Region;
4+
5+
/**
6+
* Created by psi on 23.02.2017.
7+
*
8+
* Subclass of StepModel that chooses from predefined step values
9+
*
10+
* Depending on the currently displayed range (by value) choose increment so that
11+
* the number of lines is closest to StepModel.value
12+
*/
13+
14+
public class StepModelFit extends StepModel {
15+
16+
private double[] steps; // list of steps to choose from
17+
private Region scale; // axis region on display
18+
19+
public StepModelFit(Region axisRegion, double[] increments, double numLines) {
20+
super(StepMode.INCREMENT_BY_FIT, numLines);
21+
22+
setSteps(increments);
23+
setScale(axisRegion);
24+
}
25+
26+
public double[] getSteps() {
27+
return steps;
28+
}
29+
30+
public void setSteps(double[] steps) {
31+
this.steps = steps;
32+
}
33+
34+
public Region getScale() {
35+
return scale;
36+
}
37+
38+
public void setScale(Region scale) {
39+
this.scale = scale;
40+
}
41+
42+
// does not return StepModel.value instead calculates best fit
43+
@Override
44+
public double getValue() {
45+
46+
// no possible increments where supplied (e.g. switched into this mode without calling setSteps(...)
47+
if (steps == null)
48+
return super.getValue();
49+
50+
double curStep = steps[0];
51+
52+
double oldDistance = Math.abs((scale.length().doubleValue() / curStep)-super.getValue() );
53+
54+
// determine which step size comes closest to the desired number of steps
55+
for (double step : steps) {
56+
57+
double newDistance = Math.abs((scale.length().doubleValue() / step)-super.getValue() );
58+
59+
// closer than previous stepping?
60+
if (newDistance < oldDistance){
61+
curStep = step;
62+
oldDistance = newDistance;
63+
}
64+
}
65+
return curStep;
66+
}
67+
}

androidplot-core/src/main/java/com/androidplot/xy/XYPlot.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -806,12 +806,6 @@ public void setDomainStepMode(StepMode domainStepMode) {
806806
}
807807

808808
public double getDomainStepValue() {
809-
810-
// increment by fit needs to know the current range
811-
if (domainStepModel.getMode() == StepMode.INCREMENT_BY_FIT) {
812-
return domainStepModel.getFitValue(getBounds().getxRegion().length().doubleValue());
813-
}
814-
815809
return domainStepModel.getValue();
816810
}
817811

@@ -833,12 +827,6 @@ public void setRangeStepMode(StepMode rangeStepMode) {
833827
}
834828

835829
public double getRangeStepValue() {
836-
837-
// increment by fit needs to know the current range
838-
if (rangeStepModel.getMode() == StepMode.INCREMENT_BY_FIT) {
839-
return rangeStepModel.getFitValue(getBounds().getyRegion().length().doubleValue());
840-
}
841-
842830
return rangeStepModel.getValue();
843831
}
844832

demoapp/src/main/java/com/androidplot/demos/TouchZoomExampleActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public void onClick(View view) {
5858
// increment will be chosen from list to best fit 5 grid lines
5959
double[] inc_domain = new double[]{10,50,100,500};
6060
double[] inc_range = new double[]{1,5,10,20,50,100};
61-
plot.setDomainStepModel(new StepModel(inc_domain,5));
62-
plot.setRangeStepModel( new StepModel(inc_range,5));
61+
plot.setDomainStepModel(new StepModelFit(plot.getBounds().getxRegion(),inc_domain,5));
62+
plot.setRangeStepModel( new StepModelFit(plot.getBounds().getyRegion(),inc_range,5));
6363

6464

6565
panSpinner = (Spinner) findViewById(R.id.pan_spinner);

0 commit comments

Comments
 (0)