OK In progress...

This commit is contained in:
Kolan Sh 2018-01-21 15:18:34 +03:00
parent dd7ee462c8
commit 67a8067bd4
3 changed files with 21 additions and 23 deletions

View File

@ -100,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)(range.zmin + (range.zmax - range.zmin) / nrecords * i) + 1.0/3.0; Float128 x = (int64)(range.zmin + range.zrange / 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);

View File

@ -11,7 +11,12 @@ namespace CairoChart {
public Area area = new Area(); public Area area = new Area();
/** /**
* Current evaluated area. * Plot area bounds.
*/
public Area plarea = new Area.with_abs(0, 0, 1, 1);
/**
* Current evaluated plot area.
*/ */
public Area evarea = new Area.with_abs(0, 0, 1, 1); public Area evarea = new Area.with_abs(0, 0, 1, 1);
@ -20,11 +25,6 @@ namespace CairoChart {
*/ */
public Area zoom = new Area.with_abs(0, 0, 1, 1); public Area zoom = new Area.with_abs(0, 0, 1, 1);
/**
* Plot area bounds.
*/
public Area plarea = new Area.with_abs(0, 0, 1, 1);
/** /**
* Cairo ``Context`` of the Drawing Area. * Cairo ``Context`` of the Drawing Area.
*/ */

View File

@ -331,12 +331,12 @@ namespace CairoChart {
s.axis_x.calc_rec_sizes (chart, out max_rec_width, out max_rec_height, true); s.axis_x.calc_rec_sizes (chart, out max_rec_width, out max_rec_height, true);
// 2. Calculate maximal available number of records, take into account the space width. // 2. Calculate maximal available number of records, take into account the space width.
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.zwidth / max_rec_width);
// 3. Calculate grid step. // 3. Calculate grid step.
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); Float128 step = Math.calc_round_step (s.axis_x.range.zrange / max_nrecs, s.axis_x.type == Axis.Type.DATE_TIME);
if (step > s.axis_x.range.zmax - s.axis_x.range.zmin) if (step > s.axis_x.range.zrange)
step = s.axis_x.range.zmax - s.axis_x.range.zmin; step = s.axis_x.range.zrange;
// 4. Calculate x_min (s.axis_x.range.zmin / step, round, multiply on step, add step if < s.axis_x.range.zmin). // 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;
@ -451,12 +451,12 @@ namespace CairoChart {
s.axis_y.calc_rec_sizes (chart, out max_rec_width, out max_rec_height, false); s.axis_y.calc_rec_sizes (chart, out max_rec_width, out max_rec_height, false);
// 2. Calculate maximal available number of records, take into account the space width. // 2. Calculate maximal available number of records, take into account the space width.
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.zheight / max_rec_height);
// 3. Calculate grid step. // 3. Calculate grid step.
Float128 step = Math.calc_round_step ((s.axis_y.range.zmax - s.axis_y.range.zmin) / max_nrecs); Float128 step = Math.calc_round_step (s.axis_y.range.zrange / max_nrecs);
if (step > s.axis_y.range.zmax - s.axis_y.range.zmin) if (step > s.axis_y.range.zrange)
step = s.axis_y.range.zmax - s.axis_y.range.zmin; step = s.axis_y.range.zrange;
// 4. Calculate y_min (s.axis_y.range.zmin / step, round, multiply on step, add step if < s.axis_y.range.zmin). // 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;
@ -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.range.zmin + axis_x.range.zmax) / 2.0) / (axis_x.range.zmax - axis_x.range.zmin); - sz.width * (x - (axis_x.range.zmin + axis_x.range.zmax) / 2.0) / axis_x.range.zrange;
} }
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.range.zmin + axis_y.range.zmax) / 2.0) / (axis_y.range.zmax - axis_y.range.zmin); + sz.height * (y - (axis_y.range.zmin + axis_y.range.zmax) / 2.0) / axis_y.range.zrange;
} }
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.range.zmin) / (axis_x.range.zmax - axis_x.range.zmin) * (place.zx1 - place.zx0)); return chart.plarea.x0 + chart.plarea.width * (place.zx0 + (x - axis_x.range.zmin) / axis_x.range.zrange * place.zwidth);
} }
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.range.zmin) / (axis_y.range.zmax - axis_y.range.zmin) * (place.zy1 - place.zy0))); return chart.plarea.y0 + chart.plarea.height * (1.0 - (place.zy0 + (y - axis_y.range.zmin) / axis_y.range.zrange * place.zheight));
} }
public virtual Point get_scr_point (Point128 p) { public virtual Point get_scr_point (Point128 p) {
@ -540,13 +540,11 @@ namespace CairoChart {
} }
public virtual Float128 get_real_x (double scr_x) { public virtual Float128 get_real_x (double scr_x) {
return axis_x.range.zmin + ((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.range.zrange / place.zwidth;
* (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.range.zmin + ((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.range.zrange / place.zheight;
* (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) {