source: spip-zone/_plugins_/adaptive_images/trunk/lib/geometrize/geometrize/shape/Triangle.class.php @ 115933

Last change on this file since 115933 was 115933, checked in by cedric@…, 7 weeks ago

Passage en production des methodes alternatives de generation de vignette apercu (gradients, potrace, geometrize) activable dans la page de config du plugin
+ mise a jour de la lib geometrize, en partie refactoree et optimisee
+ un mode debug activable par la config pour voir les apercus au survol des images (permet de tester sur un echantillon d'image et de choisir la methode la plus adaptee au site)

File size: 3.9 KB
Line 
1<?php
2
3// Generated by Haxe 3.4.7
4class geometrize_shape_Triangle implements geometrize_shape_Shape {
5
6        /**
7         * @var int
8         */
9        protected $x1;
10
11        /**
12         * @var int
13         */
14        protected $y1;
15
16        /**
17         * @var int
18         */
19        protected $x2;
20
21        /**
22         * @var int
23         */
24        protected $y2;
25
26        /**
27         * @var int
28         */
29        protected $x3;
30
31        /**
32         * @var int
33         */
34        protected $y3;
35
36        /**
37         * @var int
38         */
39        protected $xBound;
40
41        /**
42         * @var int
43         */
44        protected $yBound;
45
46        /**
47         * @var int
48         */
49        public $color;
50
51        /**
52         * Rasterized lines
53         * @var null|array
54         */
55        protected $lines = null;
56
57        public function __construct($xBound, $yBound){
58                $this->x1 = mt_rand(0, $xBound-1);
59                $this->y1 = mt_rand(0, $yBound-1);
60                $this->x2 = $this->x1 + mt_rand(-16, +16);
61                $this->y2 = $this->y1 + mt_rand(-16, +16);
62                $this->x3 = $this->x1 + mt_rand(-16, +16);
63                $this->y3 = $this->y1 + mt_rand(-16, +16);
64
65                $this->xBound = $xBound;
66                $this->yBound = $yBound;
67        }
68
69        /**
70         * Rasterize the shape
71         * @return array
72         * @throws HException
73         */
74        public function rasterize(){
75                if (!$this->lines) {
76                        $points = [
77                                ["x" => $this->x1, "y" => $this->y1],
78                                ["x" => $this->x2, "y" => $this->y2],
79                                ["x" => $this->x3, "y" => $this->y3],
80                        ];
81                        $this->lines = geometrize_rasterizer_Rasterizer::scanlinesForPolygon($points, $this->xBound, $this->yBound);
82                }
83
84                return $this->lines;
85        }
86
87        /**
88         * Mutate the shape
89         * @throws HException
90         */
91        public function mutate(){
92                $r = mt_rand(0, 2);
93
94                switch ($r) {
95                        case 0:
96                                $this->x1 += mt_rand(-16, +16);
97                                #$this->x1 = max(min($this->x1, $this->xBound-1),0);
98                                $this->y1 += mt_rand(-16, +16);
99                                #$this->y1 = max(min($this->y1, $this->yBound-1),0);
100                                break;
101
102                        case 1:
103                                $this->x2 += mt_rand(-16, +16);
104                                #$this->x2 = max(min($this->x2, $this->xBound-1),0);
105                                $this->y2 +=  mt_rand(-16, +16);
106                                #$this->y2 = max(min($this->y2, $this->yBound-1),0);
107                                break;
108
109                        case 2:
110                                $this->x3 +=  mt_rand(-16, +16);
111                                #$this->x3 = max(min($this->x3, $this->xBound-1),0);
112                                $this->y3 += mt_rand(-16, +16);
113                                #$this->y3 = max(min($this->y3, $this->yBound-1),0);
114                                break;
115                }
116
117                // force to rasterize the new shape
118                $this->lines = null;
119        }
120
121        /**
122         * rescale the shape to new bound dimensions
123         * @param $xBound
124         * @param $yBound
125         */
126        public function rescale($xBound, $yBound){
127                $xScale = ($xBound-1) / ($this->xBound-1);
128                $yScale = ($yBound-1) / ($this->yBound-1);
129                $this->xBound = $xBound;
130                $this->yBound = $yBound;
131                $this->x1 = intval(round($this->x1*$xScale));
132                $this->y1 = intval(round($this->y1*$yScale));
133                $this->x2 = intval(round($this->x2*$xScale));
134                $this->y2 = intval(round($this->y2*$yScale));
135                $this->x3 = intval(round($this->x3*$xScale));
136                $this->y3 = intval(round($this->y3*$yScale));
137
138                if ($this->lines) {
139                        foreach ($this->lines as &$line) {
140                                $line->rescale($xScale, $yScale);
141                        }
142                }
143        }
144
145        public function hclone(){
146                return clone $this;
147        }
148
149        public function __clone() {
150                if ($this->lines) {
151                        foreach ($this->lines as $k=>&$line) {
152                                $this->lines[$k] = clone $line;
153                        }
154                }
155  }
156
157        public function getType(){
158                return geometrize_shape_ShapeTypes::T_TRIANGLE;
159        }
160
161        /**
162         * @return array
163         */
164        public function getRawShapeData(){
165                return [
166                        $this->x1,
167                        $this->y1,
168                        $this->x2,
169                        $this->y2,
170                        $this->x3,
171                        $this->y3
172                ];
173        }
174
175        public function getSvgShapeData(){
176                $points = [
177                        ["x" => $this->x1, "y" => $this->y1],
178                        ["x" => $this->x2, "y" => $this->y2],
179                        ["x" => $this->x3, "y" => $this->y3],
180                ];
181                return geometrize_exporter_SvgExporter::exportPolygon($points);
182        }
183
184        public function __call($m, $a){
185                if (isset($this->$m) && is_callable($this->$m)){
186                        return call_user_func_array($this->$m, $a);
187                } else {
188                        if (isset($this->__dynamics[$m]) && is_callable($this->__dynamics[$m])){
189                                return call_user_func_array($this->__dynamics[$m], $a);
190                        } else {
191                                if ('toString'==$m){
192                                        return $this->__toString();
193                                } else {
194                                        throw new HException('Unable to call <' . $m . '>');
195                                }
196                        }
197                }
198        }
199
200        function __toString(){
201                return 'geometrize.shape.Triangle';
202        }
203}
Note: See TracBrowser for help on using the repository browser.