* @license BSD */ namespace Domframework; /** * The graph Axis Horizontal class */ class GraphAxisHorizontal extends GraphAxisGeneral { /** * Calculate the position in pixels for a value * If the value is out of range, return null to not draw the point * @param string|float|integer $value The value to position */ public function position($value) { if ($value === null) { return null; } if (! is_numeric($value) && ! is_string($value)) { throw new \Exception(dgettext( "domframework", "Invalid value provided to graph Axis for position" ) . " " . get_class($this), 406); } if ($this->numerical === null) { throw new \Exception(dgettext( "domframework", "No numerical type defined for Axis" ) . " " . get_class($this), 406); } if ($this->numerical) { // Numerical axis, use a standard scale if ($value < $this->min || $value > $this->max) { return null; } if (($this->max - $this->min) == 0) { $dividor = 1; } else { $dividor = ($this->max - $this->min); } $scale = ($value - $this->min) / $dividor; return intval($this->left + $scale * ($this->right - $this->left)); } else { // Label axis, count them if (! is_array($this->data)) { throw new \Exception(dgettext( "domframework", "No data defined for Axis" ) . " " . get_class($this), 406); } $pos = array_search($value, $this->data, true); if ($pos === false) { return null; } $width = ($this->right - $this->left) / count($this->data); return intval($this->left + $width * $pos + $width / 2); } } /** * Calculate the positionMin, used for labeled axies * If the value is out of range, return null to not draw the point * @param string|float|integer $value The value to position */ public function positionMin($value) { $posCenter = $this->position($value); if ($this->numerical) { return $posCenter; } if (! is_array($this->data)) { throw new \Exception(dgettext( "domframework", "No data defined for Axis" ) . " " . get_class($this), 406); } $pos = array_search($value, $this->data, true); if ($pos === false) { return null; } $width = ($this->right - $this->left) / count($this->data); return intval($this->left + $width * $pos); } /** * Calculate the positionMax, used for labeled axies * If the value is out of range, return null to not draw the point * @param string|float|integer $value The value to position */ public function positionMax($value) { $posCenter = $this->position($value); if ($this->numerical) { return $posCenter; } if (! is_array($this->data)) { throw new \Exception(dgettext( "domframework", "No data defined for Axis" ) . " " . get_class($this), 406); } $pos = array_search($value, $this->data, true); if ($pos === false) { return null; } $width = ($this->right - $this->left) / count($this->data); return intval($this->left + $width * $pos + $width); } }