/** * Returns the X and Y axis class instances as a list */ protected function GetAxes($ends, &$x_len, &$y_len) { // always assoc, no units $this->units_x = $this->units_before_x = null; // if fixed grid spacing is specified, make the min spacing 1 pixel if (is_numeric($this->grid_division_v)) { $this->minimum_grid_spacing_v = 1; } if (is_numeric($this->grid_division_h)) { $this->minimum_grid_spacing_h = 1; } $max_h = $ends['v_max'][0]; $min_h = $ends['v_min'][0]; $max_v = $ends['k_max'][0]; $min_v = $ends['k_min'][0]; $x_min_unit = $this->ArrayOption($this->minimum_units_y, 0); $x_fit = false; $y_min_unit = 1; $y_fit = true; $x_units_after = (string) $this->ArrayOption($this->units_y, 0); $y_units_after = (string) $this->ArrayOption($this->units_x, 0); $x_units_before = (string) $this->ArrayOption($this->units_before_y, 0); $y_units_before = (string) $this->ArrayOption($this->units_before_x, 0); $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, 0), $this->decimal_digits); $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, 0), $this->decimal_digits); $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, 0), $this->axis_text_callback); $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, 0), $this->axis_text_callback); $this->grid_division_h = $this->ArrayOption($this->grid_division_h, 0); $this->grid_division_v = $this->ArrayOption($this->grid_division_v, 0); // sanitise grid divisions if (is_numeric($this->grid_division_v) && $this->grid_division_v <= 0) { $this->grid_division_v = null; } if (is_numeric($this->grid_division_h) && $this->grid_division_h <= 0) { $this->grid_division_h = null; } if (!is_numeric($max_h) || !is_numeric($min_h) || !is_numeric($max_v) || !is_numeric($min_v)) { throw new Exception('Non-numeric min/max'); } if (!is_numeric($this->grid_division_h)) { $x_axis = new AxisDoubleEnded($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback); } else { $x_axis = new AxisFixedDoubleEnded($x_len, $max_h, $min_h, $this->grid_division_h, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback); } if (!is_numeric($this->grid_division_v)) { $y_axis = new Axis($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback); } else { $y_axis = new AxisFixed($y_len, $max_v, $min_v, $this->grid_division_v, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback); } $y_axis->Reverse(); // because axis starts at bottom return array(array($x_axis), array($y_axis)); }
/** * Returns the X and Y axis class instances as a list */ protected function GetAxes($ends, &$x_len, &$y_len) { // disable units for associative keys if ($this->values->AssociativeKeys()) { $this->units_x = $this->units_before_x = null; } // make sure minimum_grid_spacing options are arrays $mgsv = $this->minimum_grid_spacing_v; if (!is_array($mgsv)) { $this->minimum_grid_spacing_v = array(); } $x_axes = array(); $x_axis_count = $this->XAxisCount(); for ($i = 0; $i < $x_axis_count; ++$i) { $grid_division = $this->ArrayOption($this->grid_division_h, $i); if (is_numeric($grid_division)) { if ($grid_division <= 0) { throw new Exception('Invalid grid division'); } // if fixed grid spacing is specified, make the min spacing 1 pixel $this->minimum_grid_spacing_h = 1; } if ($this->flip_axes) { $max_h = $ends['v_max'][$i]; $min_h = $ends['v_min'][$i]; $x_min_unit = $this->ArrayOption($this->minimum_units_y, $i); $x_fit = false; $x_units_after = (string) $this->ArrayOption($this->units_y, $i); $x_units_before = (string) $this->ArrayOption($this->units_before_y, $i); $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, $i), $this->decimal_digits); $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, $i), $this->axis_text_callback); } else { $max_h = $ends['k_max'][$i]; $min_h = $ends['k_min'][$i]; $x_min_unit = 1; $x_fit = true; $x_units_after = (string) $this->ArrayOption($this->units_x, $i); $x_units_before = (string) $this->ArrayOption($this->units_before_x, $i); $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, $i), $this->decimal_digits); $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, $i), $this->axis_text_callback); } if (!is_numeric($max_h) || !is_numeric($min_h)) { throw new Exception('Non-numeric min/max'); } if ($this->ArrayOption($this->log_axis_y, $i) && $this->flip_axes) { $x_axis = new AxisLog($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $this->ArrayOption($this->log_axis_y_base, $i), $grid_division); } elseif (!is_numeric($grid_division)) { $x_axis = new Axis($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback); } else { $x_axis = new AxisFixed($x_len, $max_h, $min_h, $grid_division, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback); } $x_axes[] = $x_axis; } $y_axes = array(); $y_axis_count = $this->YAxisCount(); for ($i = 0; $i < $y_axis_count; ++$i) { $grid_division = $this->ArrayOption($this->grid_division_v, $i); if (is_numeric($grid_division)) { if ($grid_division <= 0) { throw new Exception('Invalid grid division'); } // if fixed grid spacing is specified, make the min spacing 1 pixel $this->minimum_grid_spacing_v[$i] = 1; } elseif (!isset($this->minimum_grid_spacing_v[$i])) { $this->minimum_grid_spacing_v[$i] = $mgsv; } if ($this->flip_axes) { $max_v = $ends['k_max'][$i]; $min_v = $ends['k_min'][$i]; $y_min_unit = 1; $y_fit = true; $y_units_after = (string) $this->ArrayOption($this->units_x, $i); $y_units_before = (string) $this->ArrayOption($this->units_before_x, $i); $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, $i), $this->decimal_digits); $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, $i), $this->axis_text_callback); } else { $max_v = $ends['v_max'][$i]; $min_v = $ends['v_min'][$i]; $y_min_unit = $this->ArrayOption($this->minimum_units_y, $i); $y_fit = false; $y_units_after = (string) $this->ArrayOption($this->units_y, $i); $y_units_before = (string) $this->ArrayOption($this->units_before_y, $i); $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, $i), $this->decimal_digits); $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, $i), $this->axis_text_callback); } if (!is_numeric($max_v) || !is_numeric($min_v)) { throw new Exception('Non-numeric min/max'); } if ($this->ArrayOption($this->log_axis_y, $i) && !$this->flip_axes) { $y_axis = new AxisLog($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $this->ArrayOption($this->log_axis_y_base, $i), $grid_division); } elseif (!is_numeric($grid_division)) { $y_axis = new Axis($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback); } else { $y_axis = new AxisFixed($y_len, $max_v, $min_v, $grid_division, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback); } $y_axis->Reverse(); // because axis starts at bottom $y_axes[] = $y_axis; } // set the main axis correctly if ($this->axis_right && count($y_axes) == 1) { $this->main_y_axis = 1; array_unshift($y_axes, NULL); } return array($x_axes, $y_axes); }