OK In progress...
This commit is contained in:
parent
2e625bf58c
commit
94734a26fc
|
@ -1,22 +1,9 @@
|
||||||
namespace CairoChart {
|
namespace CairoChart {
|
||||||
// If one of axis:title or axis:min/max are different
|
// If one of axis:title or axis:range.min/range.max are different
|
||||||
// then draw separate axis for each/all series
|
// then draw separate axis for each/all series
|
||||||
// or specify series name near the axis
|
// or specify series name near the axis
|
||||||
public class Axis {
|
public class Axis {
|
||||||
Float128 _min = 0;
|
public Range range = new Range();
|
||||||
Float128 _max = 0;
|
|
||||||
public Float128 min {
|
|
||||||
get { return _min; }
|
|
||||||
set { _min = zoom_min = value; }
|
|
||||||
default = 0;
|
|
||||||
}
|
|
||||||
public Float128 max {
|
|
||||||
get { return _max; }
|
|
||||||
set { _max = zoom_max = value; }
|
|
||||||
default = 1;
|
|
||||||
}
|
|
||||||
public Float128 zoom_min = 0;
|
|
||||||
public Float128 zoom_max = 1;
|
|
||||||
public Text title = new Text ("");
|
public Text title = new Text ("");
|
||||||
public enum Type {
|
public enum Type {
|
||||||
NUMBERS = 0,
|
NUMBERS = 0,
|
||||||
|
@ -87,8 +74,8 @@ namespace CairoChart {
|
||||||
axis.font_spacing = this.font_spacing;
|
axis.font_spacing = this.font_spacing;
|
||||||
axis.font_style = this.font_style;
|
axis.font_style = this.font_style;
|
||||||
axis.line_style = this.line_style;
|
axis.line_style = this.line_style;
|
||||||
axis.max = this.max;
|
axis.range.max = this.range.max;
|
||||||
axis.min = this.min;
|
axis.range.min = this.range.min;
|
||||||
axis.position = this.position;
|
axis.position = this.position;
|
||||||
axis.scale_type = this.scale_type;
|
axis.scale_type = this.scale_type;
|
||||||
axis.title = this.title.copy();
|
axis.title = this.title.copy();
|
||||||
|
@ -113,7 +100,7 @@ namespace CairoChart {
|
||||||
public virtual void calc_rec_sizes (Chart chart, out double max_rec_width, out double max_rec_height, bool horizontal = true) {
|
public virtual void calc_rec_sizes (Chart chart, out double max_rec_width, out double max_rec_height, bool horizontal = true) {
|
||||||
max_rec_width = max_rec_height = 0;
|
max_rec_width = max_rec_height = 0;
|
||||||
for (var i = 0; i < nrecords; ++i) {
|
for (var i = 0; i < nrecords; ++i) {
|
||||||
Float128 x = (int64)(zoom_min + (zoom_max - zoom_min) / nrecords * i) + 1.0/3.0;
|
Float128 x = (int64)(range.zmin + (range.zmax - range.zmin) / nrecords * i) + 1.0/3.0;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Axis.Type.NUMBERS:
|
case Axis.Type.NUMBERS:
|
||||||
var text = new Text (format.printf((LongDouble)x) + (horizontal ? "_" : ""), font_style);
|
var text = new Text (format.printf((LongDouble)x) + (horizontal ? "_" : ""), font_style);
|
||||||
|
@ -145,8 +132,7 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void unzoom () {
|
public virtual void unzoom () {
|
||||||
zoom_min = min;
|
range.unzoom();
|
||||||
zoom_max = max;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,34 +196,34 @@ namespace CairoChart {
|
||||||
var real_y1 = s.get_real_y (area.y1);
|
var real_y1 = s.get_real_y (area.y1);
|
||||||
var real_height = real_y0 - real_y1;
|
var real_height = real_y0 - real_y1;
|
||||||
// if selected square does not intersect with the series's square
|
// if selected square does not intersect with the series's square
|
||||||
if ( real_x1 <= s.axis_x.zoom_min || real_x0 >= s.axis_x.zoom_max
|
if ( real_x1 <= s.axis_x.range.zmin || real_x0 >= s.axis_x.range.zmax
|
||||||
|| real_y0 <= s.axis_y.zoom_min || real_y1 >= s.axis_y.zoom_max) {
|
|| real_y0 <= s.axis_y.range.zmin || real_y1 >= s.axis_y.range.zmax) {
|
||||||
s.zoom_show = false;
|
s.zoom_show = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (real_x0 >= s.axis_x.zoom_min) {
|
if (real_x0 >= s.axis_x.range.zmin) {
|
||||||
s.axis_x.zoom_min = real_x0;
|
s.axis_x.range.zmin = real_x0;
|
||||||
s.place.zx0 = 0.0;
|
s.place.zx0 = 0.0;
|
||||||
} else {
|
} else {
|
||||||
s.place.zx0 = (s.axis_x.zoom_min - real_x0) / real_width;
|
s.place.zx0 = (s.axis_x.range.zmin - real_x0) / real_width;
|
||||||
}
|
}
|
||||||
if (real_x1 <= s.axis_x.zoom_max) {
|
if (real_x1 <= s.axis_x.range.zmax) {
|
||||||
s.axis_x.zoom_max = real_x1;
|
s.axis_x.range.zmax = real_x1;
|
||||||
s.place.zx1 = 1.0;
|
s.place.zx1 = 1.0;
|
||||||
} else {
|
} else {
|
||||||
s.place.zx1 = (s.axis_x.zoom_max - real_x0) / real_width;
|
s.place.zx1 = (s.axis_x.range.zmax - real_x0) / real_width;
|
||||||
}
|
}
|
||||||
if (real_y1 >= s.axis_y.zoom_min) {
|
if (real_y1 >= s.axis_y.range.zmin) {
|
||||||
s.axis_y.zoom_min = real_y1;
|
s.axis_y.range.zmin = real_y1;
|
||||||
s.place.zy0 = 0.0;
|
s.place.zy0 = 0.0;
|
||||||
} else {
|
} else {
|
||||||
s.place.zy0 = (s.axis_y.zoom_min - real_y1) / real_height;
|
s.place.zy0 = (s.axis_y.range.zmin - real_y1) / real_height;
|
||||||
}
|
}
|
||||||
if (real_y0 <= s.axis_y.zoom_max) {
|
if (real_y0 <= s.axis_y.range.zmax) {
|
||||||
s.axis_y.zoom_max = real_y0;
|
s.axis_y.range.zmax = real_y0;
|
||||||
s.place.zy1 = 1.0;
|
s.place.zy1 = 1.0;
|
||||||
} else {
|
} else {
|
||||||
s.place.zy1 = (s.axis_y.zoom_max - real_y1) / real_height;
|
s.place.zy1 = (s.axis_y.range.zmax - real_y1) / real_height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,64 +5,64 @@ namespace CairoChart {
|
||||||
*/
|
*/
|
||||||
public class Range {
|
public class Range {
|
||||||
|
|
||||||
double _low = 0;
|
Float128 _min = 0;
|
||||||
double _high = 1;
|
Float128 _max = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zoomed low bound.
|
* Zoomed min bound.
|
||||||
*/
|
*/
|
||||||
double zlow = 0;
|
public Float128 zmin = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zoomed high bound.
|
* Zoomed max bound.
|
||||||
*/
|
*/
|
||||||
double zhigh = 1;
|
public Float128 zmax = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Low bound.
|
* Low bound.
|
||||||
*/
|
*/
|
||||||
public double low {
|
public Float128 min {
|
||||||
get {
|
get {
|
||||||
return _low;
|
return _min;
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
zlow = _low = value;
|
zmin = _min = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* High bound.
|
* High bound.
|
||||||
*/
|
*/
|
||||||
public double high {
|
public Float128 max {
|
||||||
get {
|
get {
|
||||||
return _high;
|
return _max;
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
zhigh = _high = value;
|
zmax = _max = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ``Range`` value.
|
* ``Range`` value.
|
||||||
*/
|
*/
|
||||||
public double range {
|
public Float128 range {
|
||||||
get {
|
get {
|
||||||
return _high - _low;
|
return _max - _min;
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
zhigh = _high = _low + value;
|
zmax = _max = _min + value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ``Range`` zoomed value.
|
* ``Range`` zoomed value.
|
||||||
*/
|
*/
|
||||||
public double zrange {
|
public Float128 zrange {
|
||||||
get {
|
get {
|
||||||
return zhigh - zlow;
|
return zmax - zmin;
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
zhigh = zlow + value;
|
zmax = zmin + value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,23 +75,23 @@ namespace CairoChart {
|
||||||
* Constructs a new ``Range`` with a ``Range`` instance.
|
* Constructs a new ``Range`` with a ``Range`` instance.
|
||||||
*/
|
*/
|
||||||
public Range.with_range (Range range) {
|
public Range.with_range (Range range) {
|
||||||
this.low = range.low;
|
this.min = range.min;
|
||||||
this.high = range.high;
|
this.max = range.max;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new ``Range`` with absolute coordinates.
|
* Constructs a new ``Range`` with absolute coordinates.
|
||||||
*/
|
*/
|
||||||
public Range.with_abs (double low, double high) {
|
public Range.with_abs (Float128 min, Float128 max) {
|
||||||
this.low = low;
|
this.min = min;
|
||||||
this.high = high;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new ``Range`` with relative coordinates.
|
* Constructs a new ``Range`` with relative coordinates.
|
||||||
*/
|
*/
|
||||||
public Range.with_rel (double low, double range) {
|
public Range.with_rel (Float128 min, Float128 range) {
|
||||||
this.low = low;
|
this.min = min;
|
||||||
this.range = range;
|
this.range = range;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,8 +106,8 @@ namespace CairoChart {
|
||||||
* Unzooms ``Range``.
|
* Unzooms ``Range``.
|
||||||
*/
|
*/
|
||||||
public void unzoom () {
|
public void unzoom () {
|
||||||
zlow = low;
|
zmin = min;
|
||||||
zhigh = high;
|
zmax = max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,8 +92,8 @@ namespace CairoChart {
|
||||||
|
|
||||||
public virtual bool equal_x_axis (Series s) {
|
public virtual bool equal_x_axis (Series s) {
|
||||||
if ( axis_x.position != s.axis_x.position
|
if ( axis_x.position != s.axis_x.position
|
||||||
|| axis_x.zoom_min != s.axis_x.zoom_min
|
|| axis_x.range.zmin != s.axis_x.range.zmin
|
||||||
|| axis_x.zoom_max != s.axis_x.zoom_max
|
|| axis_x.range.zmax != s.axis_x.range.zmax
|
||||||
|| place.zx0 != s.place.zx0
|
|| place.zx0 != s.place.zx0
|
||||||
|| place.zx1 != s.place.zx1
|
|| place.zx1 != s.place.zx1
|
||||||
|| axis_x.type != s.axis_x.type
|
|| axis_x.type != s.axis_x.type
|
||||||
|
@ -104,8 +104,8 @@ namespace CairoChart {
|
||||||
|
|
||||||
public virtual bool equal_y_axis (Series s) {
|
public virtual bool equal_y_axis (Series s) {
|
||||||
if ( axis_y.position != s.axis_y.position
|
if ( axis_y.position != s.axis_y.position
|
||||||
|| axis_y.zoom_min != s.axis_y.zoom_min
|
|| axis_y.range.zmin != s.axis_y.range.zmin
|
||||||
|| axis_y.zoom_max != s.axis_y.zoom_max
|
|| axis_y.range.zmax != s.axis_y.range.zmax
|
||||||
|| place.zy0 != s.place.zy0
|
|| place.zy0 != s.place.zy0
|
||||||
|| place.zy1 != s.place.zy1
|
|| place.zy1 != s.place.zy1
|
||||||
|| axis_y.type != s.axis_y.type
|
|| axis_y.type != s.axis_y.type
|
||||||
|
@ -249,7 +249,7 @@ namespace CairoChart {
|
||||||
var ctx = chart.ctx;
|
var ctx = chart.ctx;
|
||||||
var joint_x = chart.joint_x;
|
var joint_x = chart.joint_x;
|
||||||
|
|
||||||
for (Float128 x = x_min, x_max = axis_x.zoom_max; Math.point_belong (x, x_min, x_max); x += step) {
|
for (Float128 x = x_min, x_max = axis_x.range.zmax; Math.point_belong (x, x_min, x_max); x += step) {
|
||||||
if (joint_x) chart.color = chart.joint_color;
|
if (joint_x) chart.color = chart.joint_color;
|
||||||
else chart.color = axis_x.color;
|
else chart.color = axis_x.color;
|
||||||
string text = "", time_text = "";
|
string text = "", time_text = "";
|
||||||
|
@ -334,21 +334,21 @@ namespace CairoChart {
|
||||||
long max_nrecs = (long) (chart.plarea.width * (s.place.zx1 - s.place.zx0) / max_rec_width);
|
long max_nrecs = (long) (chart.plarea.width * (s.place.zx1 - s.place.zx0) / max_rec_width);
|
||||||
|
|
||||||
// 3. Calculate grid step.
|
// 3. Calculate grid step.
|
||||||
Float128 step = Math.calc_round_step ((s.axis_x.zoom_max - s.axis_x.zoom_min) / max_nrecs, s.axis_x.type == Axis.Type.DATE_TIME);
|
Float128 step = Math.calc_round_step ((s.axis_x.range.zmax - s.axis_x.range.zmin) / max_nrecs, s.axis_x.type == Axis.Type.DATE_TIME);
|
||||||
if (step > s.axis_x.zoom_max - s.axis_x.zoom_min)
|
if (step > s.axis_x.range.zmax - s.axis_x.range.zmin)
|
||||||
step = s.axis_x.zoom_max - s.axis_x.zoom_min;
|
step = s.axis_x.range.zmax - s.axis_x.range.zmin;
|
||||||
|
|
||||||
// 4. Calculate x_min (s.axis_x.zoom_min / step, round, multiply on step, add step if < s.axis_x.zoom_min).
|
// 4. Calculate x_min (s.axis_x.range.zmin / step, round, multiply on step, add step if < s.axis_x.range.zmin).
|
||||||
Float128 x_min = 0.0;
|
Float128 x_min = 0.0;
|
||||||
if (step >= 1) {
|
if (step >= 1) {
|
||||||
int64 x_min_nsteps = (int64) (s.axis_x.zoom_min / step);
|
int64 x_min_nsteps = (int64) (s.axis_x.range.zmin / step);
|
||||||
x_min = x_min_nsteps * step;
|
x_min = x_min_nsteps * step;
|
||||||
} else {
|
} else {
|
||||||
int64 round_axis_x_min = (int64)s.axis_x.zoom_min;
|
int64 round_axis_x_min = (int64)s.axis_x.range.zmin;
|
||||||
int64 x_min_nsteps = (int64) ((s.axis_x.zoom_min - round_axis_x_min) / step);
|
int64 x_min_nsteps = (int64) ((s.axis_x.range.zmin - round_axis_x_min) / step);
|
||||||
x_min = round_axis_x_min + x_min_nsteps * step;
|
x_min = round_axis_x_min + x_min_nsteps * step;
|
||||||
}
|
}
|
||||||
if (x_min < s.axis_x.zoom_min) x_min += step;
|
if (x_min < s.axis_x.range.zmin) x_min += step;
|
||||||
|
|
||||||
// 4.2. Cursor values for joint X axis
|
// 4.2. Cursor values for joint X axis
|
||||||
if (chart.joint_x && chart.cursors.cursor_style.orientation == Cursors.Orientation.VERTICAL && chart.cursors.cursors_crossings.length != 0) {
|
if (chart.joint_x && chart.cursors.cursor_style.orientation == Cursors.Orientation.VERTICAL && chart.cursors.cursors_crossings.length != 0) {
|
||||||
|
@ -396,7 +396,7 @@ namespace CairoChart {
|
||||||
var ctx = chart.ctx;
|
var ctx = chart.ctx;
|
||||||
var joint_y = chart.joint_y;
|
var joint_y = chart.joint_y;
|
||||||
|
|
||||||
for (Float128 y = y_min, y_max = axis_y.zoom_max; Math.point_belong (y, y_min, y_max); y += step) {
|
for (Float128 y = y_min, y_max = axis_y.range.zmax; Math.point_belong (y, y_min, y_max); y += step) {
|
||||||
if (joint_y) chart.color = chart.joint_color;
|
if (joint_y) chart.color = chart.joint_color;
|
||||||
else chart.color = axis_y.color;
|
else chart.color = axis_y.color;
|
||||||
var text = axis_y.format.printf((LongDouble)y);
|
var text = axis_y.format.printf((LongDouble)y);
|
||||||
|
@ -454,21 +454,21 @@ namespace CairoChart {
|
||||||
long max_nrecs = (long) (chart.plarea.height * (s.place.zy1 - s.place.zy0) / max_rec_height);
|
long max_nrecs = (long) (chart.plarea.height * (s.place.zy1 - s.place.zy0) / max_rec_height);
|
||||||
|
|
||||||
// 3. Calculate grid step.
|
// 3. Calculate grid step.
|
||||||
Float128 step = Math.calc_round_step ((s.axis_y.zoom_max - s.axis_y.zoom_min) / max_nrecs);
|
Float128 step = Math.calc_round_step ((s.axis_y.range.zmax - s.axis_y.range.zmin) / max_nrecs);
|
||||||
if (step > s.axis_y.zoom_max - s.axis_y.zoom_min)
|
if (step > s.axis_y.range.zmax - s.axis_y.range.zmin)
|
||||||
step = s.axis_y.zoom_max - s.axis_y.zoom_min;
|
step = s.axis_y.range.zmax - s.axis_y.range.zmin;
|
||||||
|
|
||||||
// 4. Calculate y_min (s.axis_y.zoom_min / step, round, multiply on step, add step if < s.axis_y.zoom_min).
|
// 4. Calculate y_min (s.axis_y.range.zmin / step, round, multiply on step, add step if < s.axis_y.range.zmin).
|
||||||
Float128 y_min = 0.0;
|
Float128 y_min = 0.0;
|
||||||
if (step >= 1) {
|
if (step >= 1) {
|
||||||
int64 y_min_nsteps = (int64) (s.axis_y.zoom_min / step);
|
int64 y_min_nsteps = (int64) (s.axis_y.range.zmin / step);
|
||||||
y_min = y_min_nsteps * step;
|
y_min = y_min_nsteps * step;
|
||||||
} else {
|
} else {
|
||||||
int64 round_axis_y_min = (int64)s.axis_y.zoom_min;
|
int64 round_axis_y_min = (int64)s.axis_y.range.zmin;
|
||||||
int64 y_min_nsteps = (int64) ((s.axis_y.zoom_min - round_axis_y_min) / step);
|
int64 y_min_nsteps = (int64) ((s.axis_y.range.zmin - round_axis_y_min) / step);
|
||||||
y_min = round_axis_y_min + y_min_nsteps * step;
|
y_min = round_axis_y_min + y_min_nsteps * step;
|
||||||
}
|
}
|
||||||
if (y_min < s.axis_y.zoom_min) y_min += step;
|
if (y_min < s.axis_y.range.zmin) y_min += step;
|
||||||
|
|
||||||
// 4.2. Cursor values for joint Y axis
|
// 4.2. Cursor values for joint Y axis
|
||||||
if (chart.joint_y && chart.cursors.cursor_style.orientation == Cursors.Orientation.HORIZONTAL && chart.cursors.cursors_crossings.length != 0) {
|
if (chart.joint_y && chart.cursors.cursor_style.orientation == Cursors.Orientation.HORIZONTAL && chart.cursors.cursors_crossings.length != 0) {
|
||||||
|
@ -518,21 +518,21 @@ namespace CairoChart {
|
||||||
public virtual double compact_rec_x_pos (Float128 x, Text text) {
|
public virtual double compact_rec_x_pos (Float128 x, Text text) {
|
||||||
var sz = text.get_size(chart.ctx);
|
var sz = text.get_size(chart.ctx);
|
||||||
return get_scr_x(x) - sz.width / 2.0
|
return get_scr_x(x) - sz.width / 2.0
|
||||||
- sz.width * (x - (axis_x.zoom_min + axis_x.zoom_max) / 2.0) / (axis_x.zoom_max - axis_x.zoom_min);
|
- sz.width * (x - (axis_x.range.zmin + axis_x.range.zmax) / 2.0) / (axis_x.range.zmax - axis_x.range.zmin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual double compact_rec_y_pos (Float128 y, Text text) {
|
public virtual double compact_rec_y_pos (Float128 y, Text text) {
|
||||||
var sz = text.get_size(chart.ctx);
|
var sz = text.get_size(chart.ctx);
|
||||||
return get_scr_y(y) + sz.height / 2.0
|
return get_scr_y(y) + sz.height / 2.0
|
||||||
+ sz.height * (y - (axis_y.zoom_min + axis_y.zoom_max) / 2.0) / (axis_y.zoom_max - axis_y.zoom_min);
|
+ sz.height * (y - (axis_y.range.zmin + axis_y.range.zmax) / 2.0) / (axis_y.range.zmax - axis_y.range.zmin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual double get_scr_x (Float128 x) {
|
public virtual double get_scr_x (Float128 x) {
|
||||||
return chart.plarea.x0 + chart.plarea.width * (place.zx0 + (x - axis_x.zoom_min) / (axis_x.zoom_max - axis_x.zoom_min) * (place.zx1 - place.zx0));
|
return chart.plarea.x0 + chart.plarea.width * (place.zx0 + (x - axis_x.range.zmin) / (axis_x.range.zmax - axis_x.range.zmin) * (place.zx1 - place.zx0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual double get_scr_y (Float128 y) {
|
public virtual double get_scr_y (Float128 y) {
|
||||||
return chart.plarea.y0 + chart.plarea.height * (1.0 - (place.zy0 + (y - axis_y.zoom_min) / (axis_y.zoom_max - axis_y.zoom_min) * (place.zy1 - place.zy0)));
|
return chart.plarea.y0 + chart.plarea.height * (1.0 - (place.zy0 + (y - axis_y.range.zmin) / (axis_y.range.zmax - axis_y.range.zmin) * (place.zy1 - place.zy0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point get_scr_point (Point128 p) {
|
public virtual Point get_scr_point (Point128 p) {
|
||||||
|
@ -540,13 +540,13 @@ namespace CairoChart {
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Float128 get_real_x (double scr_x) {
|
public virtual Float128 get_real_x (double scr_x) {
|
||||||
return axis_x.zoom_min + ((scr_x - chart.plarea.x0) / chart.plarea.width - place.zx0)
|
return axis_x.range.zmin + ((scr_x - chart.plarea.x0) / chart.plarea.width - place.zx0)
|
||||||
* (axis_x.zoom_max - axis_x.zoom_min) / (place.zx1 - place.zx0);
|
* (axis_x.range.zmax - axis_x.range.zmin) / (place.zx1 - place.zx0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Float128 get_real_y (double scr_y) {
|
public virtual Float128 get_real_y (double scr_y) {
|
||||||
return axis_y.zoom_min + ((chart.plarea.y1 - scr_y) / chart.plarea.height - place.zy0)
|
return axis_y.range.zmin + ((chart.plarea.y1 - scr_y) / chart.plarea.height - place.zy0)
|
||||||
* (axis_y.zoom_max - axis_y.zoom_min) / (place.zy1 - place.zy0);
|
* (axis_y.range.zmax - axis_y.range.zmin) / (place.zy1 - place.zy0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Point128 get_real_point (Point p) {
|
public virtual Point128 get_real_point (Point p) {
|
||||||
|
|
|
@ -15,18 +15,18 @@ void plot_chart1 (Chart chart) {
|
||||||
s3.points = {Point128(9, 17), Point128(2, 10), Point128(122, 31)};
|
s3.points = {Point128(9, 17), Point128(2, 10), Point128(122, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
s1.axis_x.range.min = 0; s1.axis_x.range.max = 2;
|
||||||
s1.axis_y.min = 0; s1.axis_y.max = 3;
|
s1.axis_y.range.min = 0; s1.axis_y.range.max = 3;
|
||||||
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
||||||
s1.place.y0 = 0.3; s1.place.y1 = 0.9;
|
s1.place.y0 = 0.3; s1.place.y1 = 0.9;
|
||||||
|
|
||||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
s2.axis_x.range.min = -15; s2.axis_x.range.max = 30;
|
||||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
s2.axis_y.range.min = -20; s2.axis_y.range.max = 200;
|
||||||
s2.place.x0 = 0.5; s2.place.x1 = 1;
|
s2.place.x0 = 0.5; s2.place.x1 = 1;
|
||||||
s2.place.y0 = 0.0; s2.place.y1 = 0.5;
|
s2.place.y0 = 0.0; s2.place.y1 = 0.5;
|
||||||
|
|
||||||
s3.axis_x.min = 0; s3.axis_x.max = 130;
|
s3.axis_x.range.min = 0; s3.axis_x.range.max = 130;
|
||||||
s3.axis_y.min = 15; s3.axis_y.max = 35;
|
s3.axis_y.range.min = 15; s3.axis_y.range.max = 35;
|
||||||
s3.place.x0 = 0; s3.place.x1 = 0.5;
|
s3.place.x0 = 0; s3.place.x1 = 0.5;
|
||||||
s3.place.y0 = 0.5; s3.place.y1 = 1.0;
|
s3.place.y0 = 0.5; s3.place.y1 = 1.0;
|
||||||
|
|
||||||
|
@ -59,18 +59,18 @@ void plot_chart2 (Chart chart) {
|
||||||
s3.points = {Point128(9, 17), Point128(2, 10), Point128(-15, 31)};
|
s3.points = {Point128(9, 17), Point128(2, 10), Point128(-15, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = -15; s1.axis_x.max = 30;
|
s1.axis_x.range.min = -15; s1.axis_x.range.max = 30;
|
||||||
s1.axis_y.min = 0; s1.axis_y.max = 3;
|
s1.axis_y.range.min = 0; s1.axis_y.range.max = 3;
|
||||||
s1.place.x0 = 0.0; s1.place.x1 = 1.0;
|
s1.place.x0 = 0.0; s1.place.x1 = 1.0;
|
||||||
s1.place.y0 = 0.3; s1.place.y1 = 0.9;
|
s1.place.y0 = 0.3; s1.place.y1 = 0.9;
|
||||||
|
|
||||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
s2.axis_x.range.min = -15; s2.axis_x.range.max = 30;
|
||||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
s2.axis_y.range.min = -20; s2.axis_y.range.max = 200;
|
||||||
s2.place.x0 = 0.0; s2.place.x1 = 1.0;
|
s2.place.x0 = 0.0; s2.place.x1 = 1.0;
|
||||||
s2.place.y0 = 0.0; s2.place.y1 = 0.5;
|
s2.place.y0 = 0.0; s2.place.y1 = 0.5;
|
||||||
|
|
||||||
s3.axis_x.min = -15; s3.axis_x.max = 30;
|
s3.axis_x.range.min = -15; s3.axis_x.range.max = 30;
|
||||||
s3.axis_y.min = 15; s3.axis_y.max = 35;
|
s3.axis_y.range.min = 15; s3.axis_y.range.max = 35;
|
||||||
s3.place.x0 = 0.0; s3.place.x1 = 1.0;
|
s3.place.x0 = 0.0; s3.place.x1 = 1.0;
|
||||||
s3.place.y0 = 0.5; s3.place.y1 = 1.0;
|
s3.place.y0 = 0.5; s3.place.y1 = 1.0;
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ void plot_chart2 (Chart chart) {
|
||||||
|
|
||||||
//s1.axis_x.position = s2.axis_x.position = s3.axis_x.position = Axis.Position.HIGH;
|
//s1.axis_x.position = s2.axis_x.position = s3.axis_x.position = Axis.Position.HIGH;
|
||||||
//s1.axis_x.type = s2.axis_x.type = s3.axis_x.type = Axis.Type.DATE_TIME;
|
//s1.axis_x.type = s2.axis_x.type = s3.axis_x.type = Axis.Type.DATE_TIME;
|
||||||
//s1.axis_x.max = s2.axis_x.max = s3.axis_x.max = 5*24*3600;
|
//s1.axis_x.range.max = s2.axis_x.range.max = s3.axis_x.range.max = 5*24*3600;
|
||||||
|
|
||||||
chart.series = { s1, s2, s3 };
|
chart.series = { s1, s2, s3 };
|
||||||
}
|
}
|
||||||
|
@ -109,18 +109,18 @@ void plot_chart3 (Chart chart) {
|
||||||
s3.points = {Point128(9, -17), Point128(2, 10), Point128(122, 31)};
|
s3.points = {Point128(9, -17), Point128(2, 10), Point128(122, 31)};
|
||||||
s3.axis_y.position = Axis.Position.HIGH;
|
s3.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = 0; s1.axis_x.max = 2;
|
s1.axis_x.range.min = 0; s1.axis_x.range.max = 2;
|
||||||
s1.axis_y.min = -20; s1.axis_y.max = 200;
|
s1.axis_y.range.min = -20; s1.axis_y.range.max = 200;
|
||||||
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
||||||
s1.place.y0 = 0.0; s1.place.y1 = 1.0;
|
s1.place.y0 = 0.0; s1.place.y1 = 1.0;
|
||||||
|
|
||||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
s2.axis_x.range.min = -15; s2.axis_x.range.max = 30;
|
||||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
s2.axis_y.range.min = -20; s2.axis_y.range.max = 200;
|
||||||
s2.place.x0 = 0.5; s2.place.x1 = 1;
|
s2.place.x0 = 0.5; s2.place.x1 = 1;
|
||||||
s2.place.y0 = 0.0; s2.place.y1 = 1.0;
|
s2.place.y0 = 0.0; s2.place.y1 = 1.0;
|
||||||
|
|
||||||
s3.axis_x.min = 0; s3.axis_x.max = 130;
|
s3.axis_x.range.min = 0; s3.axis_x.range.max = 130;
|
||||||
s3.axis_y.min = -20; s3.axis_y.max = 200;
|
s3.axis_y.range.min = -20; s3.axis_y.range.max = 200;
|
||||||
s3.place.x0 = 0; s3.place.x1 = 0.5;
|
s3.place.x0 = 0; s3.place.x1 = 0.5;
|
||||||
s3.place.y0 = 0.0; s3.place.y1 = 1.0;
|
s3.place.y0 = 0.0; s3.place.y1 = 1.0;
|
||||||
|
|
||||||
|
@ -168,23 +168,23 @@ void plot_chart4 (Chart chart) {
|
||||||
s4.points = {Point128(high + 0.005, -19.05), Point128(high + 0.0051, 28), Point128(high + 0.0052, 55), Point128(high + 0.0053, 44)};
|
s4.points = {Point128(high + 0.005, -19.05), Point128(high + 0.0051, 28), Point128(high + 0.0052, 55), Point128(high + 0.0053, 44)};
|
||||||
s4.axis_y.position = Axis.Position.HIGH;
|
s4.axis_y.position = Axis.Position.HIGH;
|
||||||
|
|
||||||
s1.axis_x.min = now - 100000; s1.axis_x.max = now + 100000;
|
s1.axis_x.range.min = now - 100000; s1.axis_x.range.max = now + 100000;
|
||||||
s1.axis_y.min = -20; s1.axis_y.max = 200;
|
s1.axis_y.range.min = -20; s1.axis_y.range.max = 200;
|
||||||
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
s1.place.x0 = 0.25; s1.place.x1 = 0.75;
|
||||||
s1.place.y0 = 0.0; s1.place.y1 = 1.0;
|
s1.place.y0 = 0.0; s1.place.y1 = 1.0;
|
||||||
|
|
||||||
s2.axis_x.min = -15; s2.axis_x.max = 30;
|
s2.axis_x.range.min = -15; s2.axis_x.range.max = 30;
|
||||||
s2.axis_y.min = -20; s2.axis_y.max = 200;
|
s2.axis_y.range.min = -20; s2.axis_y.range.max = 200;
|
||||||
s2.place.x0 = 0.2; s2.place.x1 = 1;
|
s2.place.x0 = 0.2; s2.place.x1 = 1;
|
||||||
s2.place.y0 = 0.0; s2.place.y1 = 1.0;
|
s2.place.y0 = 0.0; s2.place.y1 = 1.0;
|
||||||
|
|
||||||
s3.axis_x.min = high - 2; s3.axis_x.max = high + 1;
|
s3.axis_x.range.min = high - 2; s3.axis_x.range.max = high + 1;
|
||||||
s3.axis_y.min = -20; s3.axis_y.max = 200;
|
s3.axis_y.range.min = -20; s3.axis_y.range.max = 200;
|
||||||
s3.place.x0 = 0; s3.place.x1 = 0.8;
|
s3.place.x0 = 0; s3.place.x1 = 0.8;
|
||||||
s3.place.y0 = 0.0; s3.place.y1 = 1.0;
|
s3.place.y0 = 0.0; s3.place.y1 = 1.0;
|
||||||
|
|
||||||
s4.axis_x.min = high + 0.0049; s4.axis_x.max = high + 0.0054;
|
s4.axis_x.range.min = high + 0.0049; s4.axis_x.range.max = high + 0.0054;
|
||||||
s4.axis_y.min = -20; s4.axis_y.max = 200;
|
s4.axis_y.range.min = -20; s4.axis_y.range.max = 200;
|
||||||
s4.place.x0 = 0.2; s4.place.x1 = 1.0;
|
s4.place.x0 = 0.2; s4.place.x1 = 1.0;
|
||||||
s4.place.y0 = 0.0; s4.place.y1 = 1.0;
|
s4.place.y0 = 0.0; s4.place.y1 = 1.0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue