. */ /** * For more information, please contact */ namespace Goat1000\SVGGraph; /** * Class for SVG transforms */ class Transform { private $transforms = []; /** * Output for SVG values */ public function __toString() { $str = ''; foreach($this->transforms as $xform) { $str .= $xform[0] . '('; $str .= implode(' ', $xform[1]); $str .= ')'; } return $str; } /** * Adds another transform to this one */ public function add($xform) { if(!is_object($xform) || get_class($xform) !== 'Goat1000\\SVGGraph\\Transform') throw new \InvalidArgumentException('Argument is not a Transform'); $this->transforms = array_merge($this->transforms, $xform->transforms); } /** * Translate by $x, $y */ public function translate($x, $y) { $this->transforms[] = ['translate', [new Number($x), new Number($y)]]; } /** * Scale by $x, or by $x and $y */ public function scale($x, $y = null) { $args = [new Number($x)]; if($y !== null) $args[] = new Number($y); $this->transforms[] = ['scale', $args]; } /** * Rotate by $a degrees, around point $x, $y */ public function rotate($a, $x = null, $y = null) { $args = [new Number($a)]; if($x !== null && $y !== null) { $args[] = new Number($x); $args[] = new Number($y); } $this->transforms[] = ['rotate', $args]; } /** * Skew by $a degrees along X-axis */ public function skewX($a) { $this->transforms[] = ['skewX', [new Number($a)]]; } /** * Skew by $a degrees along Y-axis */ public function skewY($a) { $this->transforms[] = ['skewY', [new Number($a)]]; } }