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

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

Optimization de la rapidite de geometrize

File size: 6.3 KB
Line 
1<?php
2
3// Generated by Haxe 3.4.7
4class geometrize_shape_QuadraticBezier implements geometrize_shape_Shape {
5        public $cx;
6        public $cy;
7        public $x1;
8        public $y1;
9        public $x2;
10        public $y2;
11        public $xBound;
12        public $yBound;
13        public $color;
14
15        public function __construct($xBound, $yBound){
16                $upper = $xBound-1;
17                if (!(0<=$upper)){
18                        throw new HException("FAIL: lower <= upper");
19                }
20                $this->x1 = mt_rand(0, $upper);
21                $upper1 = $yBound-1;
22                if (!(0<=$upper1)){
23                        throw new HException("FAIL: lower <= upper");
24                }
25                $this->y1 = mt_rand(0, $upper1);
26                $upper2 = $xBound-1;
27                if (!(0<=$upper2)){
28                        throw new HException("FAIL: lower <= upper");
29                }
30                $this->cx = mt_rand(0, $upper2);
31                $upper3 = $yBound-1;
32                if (!(0<=$upper3)){
33                        throw new HException("FAIL: lower <= upper");
34                }
35                $this->cy = mt_rand(0, $upper3);
36                $upper4 = $xBound-1;
37                if (!(0<=$upper4)){
38                        throw new HException("FAIL: lower <= upper");
39                }
40                $this->x2 = mt_rand(0, $upper4);
41                $upper5 = $yBound-1;
42                if (!(0<=$upper5)){
43                        throw new HException("FAIL: lower <= upper");
44                }
45                $this->y2 = mt_rand(0, $upper5);
46                $this->xBound = $xBound;
47                $this->yBound = $yBound;
48        }
49
50        public function rasterize(){
51                $points = [];
52                $pointCount = 20;
53
54                $_g1 = 0;
55                $_g = $pointCount-1;
56                while ($_g1<$_g){
57                        $_g1 = $_g1+1;
58                        $i = $_g1-1;
59                        $t = $i/$pointCount;
60                        $tp = 1-$t;
61                        $x = intval($tp*($tp*$this->x1+$t*$this->cx)+$t*($tp*$this->cx+$t*$this->x2));
62                        $y = intval($tp*($tp*$this->y1+$t*$this->cy)+$t*($tp*$this->cy+$t*$this->y2));
63                        $points[] = ["x" => $x, "y" => $y];
64                }
65
66                return geometrize_rasterizer_Rasterizer::scanlinesForPath($points, $this->xBound, $this->yBound);
67        }
68
69        public function mutate(){
70                if (!true){
71                        throw new HException("FAIL: lower <= upper");
72                }
73                $r = mt_rand(0, 2);
74                switch ($r) {
75                        case 0:
76                                {
77                                        $value = $this->cx;
78                                        if (!true){
79                                                throw new HException("FAIL: lower <= upper");
80                                        }
81                                        $value1 = $value+mt_rand(-8, +8);
82                                        $max = $this->xBound-1;
83                                        if (!(0<=$max)){
84                                                throw new HException("FAIL: min <= max");
85                                        }
86                                        $tmp = null;
87                                        if ($value1<0){
88                                                $tmp = 0;
89                                        } else {
90                                                if ($value1>$max){
91                                                        $tmp = $max;
92                                                } else {
93                                                        $tmp = $value1;
94                                                }
95                                        }
96                                        $this->cx = $tmp;
97                                        $value2 = $this->cy;
98                                        if (!true){
99                                                throw new HException("FAIL: lower <= upper");
100                                        }
101                                        $value3 = $value2+mt_rand(-8, +8);
102                                        $max1 = $this->yBound-1;
103                                        if (!(0<=$max1)){
104                                                throw new HException("FAIL: min <= max");
105                                        }
106                                        $tmp1 = null;
107                                        if ($value3<0){
108                                                $tmp1 = 0;
109                                        } else {
110                                                if ($value3>$max1){
111                                                        $tmp1 = $max1;
112                                                } else {
113                                                        $tmp1 = $value3;
114                                                }
115                                        }
116                                        $this->cy = $tmp1;
117                                }
118                                break;
119                        case 1:
120                                {
121                                        $value4 = $this->x1;
122                                        if (!true){
123                                                throw new HException("FAIL: lower <= upper");
124                                        }
125                                        $value5 = $value4+mt_rand(-8, +8);
126                                        $max2 = $this->xBound-1;
127                                        if (!(1<=$max2)){
128                                                throw new HException("FAIL: min <= max");
129                                        }
130                                        $tmp2 = null;
131                                        if ($value5<1){
132                                                $tmp2 = 1;
133                                        } else {
134                                                if ($value5>$max2){
135                                                        $tmp2 = $max2;
136                                                } else {
137                                                        $tmp2 = $value5;
138                                                }
139                                        }
140                                        $this->x1 = $tmp2;
141                                        $value6 = $this->y1;
142                                        if (!true){
143                                                throw new HException("FAIL: lower <= upper");
144                                        }
145                                        $value7 = $value6+mt_rand(-8, +8);
146                                        $max3 = $this->yBound-1;
147                                        if (!(1<=$max3)){
148                                                throw new HException("FAIL: min <= max");
149                                        }
150                                        $tmp3 = null;
151                                        if ($value7<1){
152                                                $tmp3 = 1;
153                                        } else {
154                                                if ($value7>$max3){
155                                                        $tmp3 = $max3;
156                                                } else {
157                                                        $tmp3 = $value7;
158                                                }
159                                        }
160                                        $this->y1 = $tmp3;
161                                }
162                                break;
163                        case 2:
164                                {
165                                        $value8 = $this->x2;
166                                        if (!true){
167                                                throw new HException("FAIL: lower <= upper");
168                                        }
169                                        $value9 = $value8+mt_rand(-8, +8);
170                                        $max4 = $this->xBound-1;
171                                        if (!(1<=$max4)){
172                                                throw new HException("FAIL: min <= max");
173                                        }
174                                        $tmp4 = null;
175                                        if ($value9<1){
176                                                $tmp4 = 1;
177                                        } else {
178                                                if ($value9>$max4){
179                                                        $tmp4 = $max4;
180                                                } else {
181                                                        $tmp4 = $value9;
182                                                }
183                                        }
184                                        $this->x2 = $tmp4;
185                                        $value10 = $this->y2;
186                                        if (!true){
187                                                throw new HException("FAIL: lower <= upper");
188                                        }
189                                        $value11 = $value10+mt_rand(-8, +8);
190                                        $max5 = $this->yBound-1;
191                                        if (!(1<=$max5)){
192                                                throw new HException("FAIL: min <= max");
193                                        }
194                                        $tmp5 = null;
195                                        if ($value11<1){
196                                                $tmp5 = 1;
197                                        } else {
198                                                if ($value11>$max5){
199                                                        $tmp5 = $max5;
200                                                } else {
201                                                        $tmp5 = $value11;
202                                                }
203                                        }
204                                        $this->y2 = $tmp5;
205                                }
206                                break;
207                }
208        }
209
210        public function rescale($xBound, $yBound){
211                $xScale = ($xBound-1) / ($this->xBound-1);
212                $yScale = ($yBound-1) / ($this->yBound-1);
213                $this->xBound = $xBound;
214                $this->yBound = $yBound;
215                $this->cx = intval(round($this->cx*$xScale));
216                $this->cy = intval(round($this->cy*$yScale));
217                $this->x1 = intval(round($this->x1*$xScale));
218                $this->y1 = intval(round($this->y1*$yScale));
219                $this->x2 = intval(round($this->x2*$xScale));
220                $this->y2 = intval(round($this->y2*$yScale));
221        }
222
223        public function hclone(){
224                $bezier = new geometrize_shape_QuadraticBezier($this->xBound, $this->yBound);
225                $bezier->cx = $this->cx;
226                $bezier->cy = $this->cy;
227                $bezier->x1 = $this->x1;
228                $bezier->y1 = $this->y1;
229                $bezier->x2 = $this->x2;
230                $bezier->y2 = $this->y2;
231                $bezier->color = $this->color;
232
233                return $bezier;
234        }
235
236        public function getType(){
237                return geometrize_shape_ShapeTypes::T_QUADRATIC_BEZIER;
238        }
239
240        /**
241         * @return array
242         */
243        public function getRawShapeData(){
244                return [
245                        $this->x1,
246                        $this->y1,
247                        $this->cx,
248                        $this->cy,
249                        $this->x2,
250                        $this->y2
251                ];
252        }
253
254        /**
255         * @return string
256         */
257        public function getSvgShapeData(){
258                return "<path d=\"M" . $this->x1 . " " . $this->y1 . " Q " . $this->cx . " " . $this->cy . " " . $this->x2 . " " . $this->y2 . "\" " . geometrize_exporter_SvgExporter::$SVG_STYLE_HOOK . " />";
259        }
260
261        public function __call($m, $a){
262                if (isset($this->$m) && is_callable($this->$m)){
263                        return call_user_func_array($this->$m, $a);
264                } else {
265                        if (isset($this->__dynamics[$m]) && is_callable($this->__dynamics[$m])){
266                                return call_user_func_array($this->__dynamics[$m], $a);
267                        } else {
268                                if ('toString'==$m){
269                                        return $this->__toString();
270                                } else {
271                                        throw new HException('Unable to call <' . $m . '>');
272                                }
273                        }
274                }
275        }
276
277        function __toString(){
278                return 'geometrize.shape.QuadraticBezier';
279        }
280}
Note: See TracBrowser for help on using the repository browser.