source: spip-zone/_plugins_/adaptive_images/trunk/lib/geometrize/geometrize/shape/Line.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: 4.7 KB
Line 
1<?php
2
3// Generated by Haxe 3.4.7
4class geometrize_shape_Line implements geometrize_shape_Shape {
5        public $x1;
6        public $y1;
7        public $x2;
8        public $y2;
9        public $xBound;
10        public $yBound;
11        public $color;
12
13        public function __construct($xBound, $yBound){
14                $this->x1 = mt_rand(0, $xBound-1);
15                $this->y1 = mt_rand(0, $yBound-1);
16                $value = $this->x1;
17                $value1 = $value+mt_rand(1, 32);
18                if (!(0<=$xBound)){
19                        throw new HException("FAIL: min <= max");
20                }
21                $tmp = null;
22                if ($value1<0){
23                        $tmp = 0;
24                } else {
25                        if ($value1>$xBound){
26                                $tmp = $xBound;
27                        } else {
28                                $tmp = $value1;
29                        }
30                }
31                $this->x2 = $tmp;
32                $value2 = $this->y1;
33                $value3 = $value2+mt_rand(1, 32);
34                if (!(0<=$yBound)){
35                        throw new HException("FAIL: min <= max");
36                }
37                $tmp1 = null;
38                if ($value3<0){
39                        $tmp1 = 0;
40                } else {
41                        if ($value3>$yBound){
42                                $tmp1 = $yBound;
43                        } else {
44                                $tmp1 = $value3;
45                        }
46                }
47                $this->y2 = $tmp1;
48                $this->xBound = $xBound;
49                $this->yBound = $yBound;
50        }
51
52        /**
53         * @return array
54         * @throws HException
55         */
56        public function rasterize(){
57                $points = [
58                        ['x' => $this->x1, 'y' => $this->y1],
59                        ['x' => $this->x2, 'y' => $this->y2]
60                ];
61
62                return geometrize_rasterizer_Rasterizer::scanlinesForPath($points, $this->xBound, $this->yBound);
63        }
64
65        public function mutate(){
66                $r = mt_rand(0, 3); // TODO : fixme 0,1
67                switch ($r) {
68                        case 0:
69                                {
70                                        $value = $this->x1;
71                                        if (!true){
72                                                throw new HException("FAIL: lower <= upper");
73                                        }
74                                        $value1 = $value+mt_rand(-16, +16);
75                                        $max = $this->xBound-1;
76                                        if (!(0<=$max)){
77                                                throw new HException("FAIL: min <= max");
78                                        }
79                                        $tmp = null;
80                                        if ($value1<0){
81                                                $tmp = 0;
82                                        } else {
83                                                if ($value1>$max){
84                                                        $tmp = $max;
85                                                } else {
86                                                        $tmp = $value1;
87                                                }
88                                        }
89                                        $this->x1 = $tmp;
90                                        $value2 = $this->y1;
91                                        if (!true){
92                                                throw new HException("FAIL: lower <= upper");
93                                        }
94                                        $value3 = $value2+mt_rand(-16, +16);
95                                        $max1 = $this->yBound-1;
96                                        if (!(0<=$max1)){
97                                                throw new HException("FAIL: min <= max");
98                                        }
99                                        $tmp1 = null;
100                                        if ($value3<0){
101                                                $tmp1 = 0;
102                                        } else {
103                                                if ($value3>$max1){
104                                                        $tmp1 = $max1;
105                                                } else {
106                                                        $tmp1 = $value3;
107                                                }
108                                        }
109                                        $this->y1 = $tmp1;
110                                }
111                                break;
112                        case 1:
113                                {
114                                        $value4 = $this->x2;
115                                        if (!true){
116                                                throw new HException("FAIL: lower <= upper");
117                                        }
118                                        $value5 = $value4+mt_rand(-16, +16);
119                                        $max2 = $this->xBound-1;
120                                        if (!(0<=$max2)){
121                                                throw new HException("FAIL: min <= max");
122                                        }
123                                        $tmp2 = null;
124                                        if ($value5<0){
125                                                $tmp2 = 0;
126                                        } else {
127                                                if ($value5>$max2){
128                                                        $tmp2 = $max2;
129                                                } else {
130                                                        $tmp2 = $value5;
131                                                }
132                                        }
133                                        $this->x2 = $tmp2;
134                                        $value6 = $this->y2;
135                                        if (!true){
136                                                throw new HException("FAIL: lower <= upper");
137                                        }
138                                        $value7 = $value6+mt_rand(-16, +16);
139                                        $max3 = $this->yBound-1;
140                                        if (!(0<=$max3)){
141                                                throw new HException("FAIL: min <= max");
142                                        }
143                                        $tmp3 = null;
144                                        if ($value7<0){
145                                                $tmp3 = 0;
146                                        } else {
147                                                if ($value7>$max3){
148                                                        $tmp3 = $max3;
149                                                } else {
150                                                        $tmp3 = $value7;
151                                                }
152                                        }
153                                        $this->y2 = $tmp3;
154                                }
155                                break;
156                }
157        }
158
159        public function rescale($xBound, $yBound){
160                $xScale = ($xBound-1) / ($this->xBound-1);
161                $yScale = ($yBound-1) / ($this->yBound-1);
162                $this->xBound = $xBound;
163                $this->yBound = $yBound;
164                $this->x1 = intval(round($this->x1*$xScale));
165                $this->y1 = intval(round($this->y1*$yScale));
166                $this->x2 = intval(round($this->x2*$xScale));
167                $this->y2 = intval(round($this->y2*$yScale));
168        }
169
170        public function hclone(){
171                $line = new geometrize_shape_Line($this->xBound, $this->yBound);
172                $line->x1 = $this->x1;
173                $line->y1 = $this->y1;
174                $line->x2 = $this->x2;
175                $line->y2 = $this->y2;
176                $line->color = $this->color;
177
178                return $line;
179        }
180
181        public function getType(){
182                return geometrize_shape_ShapeTypes::T_LINE;
183        }
184
185        /**
186         * @return array
187         */
188        public function getRawShapeData(){
189                return [
190                        $this->x1,
191                        $this->y1,
192                        $this->x2,
193                        $this->y2
194                ];
195        }
196
197        /**
198         * @return string
199         */
200        public function getSvgShapeData(){
201                return "<line x1=\"" . $this->x1 . "\" y1=\"" . $this->y1 . "\" x2=\"" . $this->x2 . "\" y2=\"" . $this->y2 . "\" " . geometrize_exporter_SvgExporter::$SVG_STYLE_HOOK . " />";
202        }
203
204        public function __call($m, $a){
205                if (isset($this->$m) && is_callable($this->$m)){
206                        return call_user_func_array($this->$m, $a);
207                } else {
208                        if (isset($this->__dynamics[$m]) && is_callable($this->__dynamics[$m])){
209                                return call_user_func_array($this->__dynamics[$m], $a);
210                        } else {
211                                if ('toString'==$m){
212                                        return $this->__toString();
213                                } else {
214                                        throw new HException('Unable to call <' . $m . '>');
215                                }
216                        }
217                }
218        }
219
220        function __toString(){
221                return 'geometrize.shape.Line';
222        }
223}
Note: See TracBrowser for help on using the repository browser.