Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (warning)
50.00%
4 / 8
CRAP
37.86% covered (danger)
37.86%
39 / 103
Image
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (warning)
50.00%
4 / 8
261.54
37.86% covered (danger)
37.86%
39 / 103
 __construct($medium, $height, $width)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 drawToFit($object, $parameters = NULL)
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 29
 _getExtremePoints($object)
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
20 / 20
 _getMax($point, $currentMax)
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
 _getMin($point, $currentMin)
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
 draw($object, $parameters = NULL)
0.00% covered (danger)
0.00%
0 / 1
110
0.00% covered (danger)
0.00%
0 / 32
 strokeColor($r=NULL, $g=0, $b=0)
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 __toString()
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
<?php
/**
 *
 */
namespace aae\std {
    /**
     * @author Axel Ancona Esselmann
     * @package aae\std
     */
    class Image {
        private $_min, $_max;
        public $medium = null;
        public function __construct($medium, $height, $width) {
            $this->medium = $medium;
            $this->medium->setDimensions($width, $height);
            $this->_min = NULL;
            $this->_max = NULL;
        }
        public function drawToFit($object, $parameters = NULL) {
            $extremePoints = $this->_getExtremePoints($object);
            $max = $extremePoints[0];
            $min = $extremePoints[1];
            if (is_null($this->_max)) {
                $this->_max = $max;
            }
            if (is_null($this->_min)) {
                $this->_min = $min;
            }
            if ($min->x < $this->_min->x) {
                $this->_min->x = $min->x;
            }
            if ($min->y < $this->_min->y) {
                $this->_min->y = $min->y;
            }
            if ($max->x > $this->_max->x) {
                $this->_max->x = $max->x;
            }
            if ($max->y > $this->_max->y) {
                $this->_max->y = $max->y;
            }
            $this->medium->setViewBox(
                floor($this->_min->y),
                floor($this->_min->x),
                $this->_max->y - $this->_min->y,
                $this->_max->x - $this->_min->x
            );
            $this->draw($object, $parameters);
        }
        public function _getExtremePoints($object) {
            $max = null;
            $min = null;
            foreach ($object as $item) {
                if (get_class($item) == "aae\math\cartesian\Point") {
                    if (is_null($max)) {
                        $max = clone $item;
                        $min = clone $item;
                    }
                    $max = $this->_getMax($item, $max);
                    $min = $this->_getMin($item, $min);
                } else {
                    $extremePoints = $this->_getExtremePoints($item);
                    if (is_null($max)) {
                        $max = clone $extremePoints[0];
                        $min = clone $extremePoints[1];
                    }
                    $max = $this->_getMax($extremePoints[0], $max);
                    $min = $this->_getMin($extremePoints[1], $min);
                }
            }
            return array($max, $min);
        }
        protected function _getMax($point, $currentMax) {
            if ($point->x > $currentMax->x) {
                $currentMax->x = $point->x;
            }
            if ($point->y > $currentMax->y) {
                $currentMax->y = $point->y;
            }
            return $currentMax;
        }
        protected function _getMin($point, $currentMin) {
            if ($point->x < $currentMin->x) {
                $currentMin->x = $point->x;
            }
            if ($point->y < $currentMin->y) {
                $currentMin->y = $point->y;
            }
            return $currentMin;
        }
        public function draw($object, $parameters = NULL) {
            foreach ($object as $item) {
                switch (get_class($item)) {
                    case 'aae\math\cartesian\Point':
                        $this->medium->drawPoint($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Line':
                        $this->medium->drawLine($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Sequence':
                        $this->medium->drawSequence($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Rect':
                        $this->medium->drawRect($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Pol':
                        $this->medium->drawPol($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Circle':
                        $this->medium->drawCircle($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Elypse':
                        $this->medium->drawElypse($item, $parameters);
                        break;
                    case 'aae\math\cartesian\Curve':
                        $this->medium->drawCurve($item, $parameters);
                        break;
                    default:
                        $this->draw($item, $parameters);
                        break;
                }
            }
        }
        public function strokeColor($r=NULL, $g=0, $b=0) {
            $this->medium->strokeColor($r, $g, $b);
        }
        public function __toString() {
            return (string)$this->medium;
        }
    }
}