root/dev/common/class.map.php @ 91

Revision 91, 12.2 KB (checked in by exi, 16 years ago)

Made contracts to be able to be targeted on systems.
Added Mapoptions to make you graphics guys scream.
Added adjustable posting permissions for killmail authorization.
Aded killmail exporter, it can export multiple pilots, corporation and alliances at once.

Line 
1<?php
2require_once('db.php');
3require_once('globals.php');
4
5class MapView
6{
7    function MapView($mode, $size = 200)
8    {
9        $this->mode_ = $mode;
10        $this->imgwidth_ = $size;
11        $this->imgheight_ = $size;
12        $this->ly_ = 0.4 / 1000000000000000;
13        $this->offset_ = 10;
14        // colors
15        /* unused, must have been some kind of painting by security
16        $this->sys_colors_[0] = array(200, 20, 48);
17        $this->sys_colors_[1] = array(200, 20, 48);
18        $this->sys_colors_[2] = array(200, 20, 48);
19        $this->sys_colors_[3] = array(241, 176, 48);
20        $this->sys_colors_[4] = array(200, 200, 48);
21        $this->sys_colors_[5] = array(219, 241, 48);
22        $this->sys_colors_[6] = array(103, 241, 62);
23        $this->sys_colors_[7] = array(83, 241, 114);
24        $this->sys_colors_[8] = array(26, 241, 183);
25        $this->sys_colors_[9] = array(99, 241, 255);
26        $this->sys_colors_[10] = array(99, 241, 255);
27        */
28
29        $this->linecolor_ = array(75, 75, 75);
30        $this->captioncolor_ = array(110, 110, 110);
31        $this->bgcolor_ = array(30, 30, 30);
32        $this->normalcolor_ = array(81, 103, 146);
33        $this->hlcolor_ = array(200, 200, 200);
34    }
35
36    function setbgcolor($r, $g, $b)
37    {
38        $this->bgcolor_ = array($r, $g, $b);
39    }
40
41    function setlinecolor($r, $g, $b)
42    {
43        $this->linecolor_ = array($r, $g, $b);
44    }
45
46    function setcaptcolor($r, $g, $b)
47    {
48        $this->captioncolor_ = array($r, $g, $b);
49    }
50
51    function setnormalcolor($r, $g, $b)
52    {
53        $this->normalcolor_ = array($r, $g, $b);
54    }
55
56    function sethlcolor($r, $g, $b)
57    {
58        $this->hlcolor_ = array($r, $g, $b);
59    }
60
61    function setOffset($offset)
62    {
63        $this->offset_ = $offset;
64    }
65
66    function showLines($enable)
67    {
68        $this->showlines_ = $enable;
69    }
70
71    function showSysNames($enable)
72    {
73        $this->showsysnames_ = $enable;
74    }
75
76    function colorSystems($enable)
77    {
78        $this->colorsystems_ = $enable;
79    }
80
81    function setRegionID($regionid)
82    {
83        $this->regionid_ = $regionid;
84    }
85
86    function setSystemID($systemid)
87    {
88        $this->systemid_ = $systemid;
89
90        $sql = 'select reg.reg_id, reg.reg_name, con.con_id, con.con_name, sys.sys_name, sys.sys_sec
91                from kb3_regions reg, kb3_constellations con, kb3_systems sys
92               where reg.reg_id = con.con_reg_id
93                 and con.con_id = sys.sys_con_id
94                 and sys.sys_id = '.$this->systemid_;
95
96        $qry = new DBQuery();
97        $qry->execute($sql);
98        $row = $qry->getRow();
99
100        $this->conid_ = $row['con_id'];
101        $this->regionid_ = $row['reg_id'];
102        $this->conname_ = $row['con_name'];
103        $this->regname_ = $row['reg_name'];
104        $this->sysname_ = $row['sys_name'];
105        $this->syssec_ = $row['sys_sec'];
106    }
107
108    function setTitle($title)
109    {
110        $this->title_ = $title;
111    }
112
113    function generate()
114    {
115        $sql = 'select sys.sys_x, sys.sys_y, sys.sys_z, sys.sys_sec,
116                   sys.sys_id, sys.sys_name, sys.sys_eve_id, sjp.sjp_to, con.con_id,
117                       con.con_name, reg.reg_id, reg.reg_name,
118                       reg.reg_x, reg.reg_z
119                   from kb3_systems sys, kb3_system_jumps sjp,
120                       kb3_constellations con, kb3_regions reg
121                   where con.con_id = sys.sys_con_id
122                   and reg.reg_id = con.con_reg_id
123                   and sjp.sjp_from = sys.sys_eve_id';
124
125        $regioncache = "cache/map/" . $this->regionid_ . "_" . $this->imgwidth_ . ".png";
126        $cached = false;
127
128        if ($this->mode_ == "map")
129        {
130            if (file_exists($regioncache))
131            {
132                header("Content-type: image/png");
133                readfile($regioncache);
134                $cached = true;
135            }
136            $caption = $this->regname_;
137        }
138
139        if ($this->mode_ == "region")
140        {
141            $sql .= " and reg.reg_id = " . $this->regionid_;
142            $caption = $this->conname_;
143        }
144
145        if ($this->mode_ == "cons")
146        {
147            $sql .= " and con.con_id = " . $this->conid_;
148            $caption = $this->sysname_ . " (" . roundsec($this->syssec_) . ")";
149        }
150
151        if (!$cached)
152        {
153            $qry = new DBQuery();
154            $qry->execute($sql) or die($qry->getErrorMsg());
155
156            if (!$img) $img = imagecreatetruecolor($this->imgwidth_, $this->imgheight_);
157            $white = imagecolorallocate($img, 255, 255, 255);
158            $red = imagecolorallocate($img, 255, 0, 0);
159            $bgcolor = imagecolorallocate($img, $this->bgcolor_[0], $this->bgcolor_[1], $this->bgcolor_[2]);
160            imagefilledrectangle($img, 0, 0, $this->imgwidth_, $this->imgheight_, $bgcolor);
161
162            $color = $white;
163
164            $fov = 0;
165
166            $i = 0;
167            $minx = 0;
168            $minz = 0;
169            $maxx = 0;
170            $maxz = 0;
171            $mini = 0;
172            $maxi = 0;
173            $pi = 0;
174            $sc = 0;
175            while ($row = $qry->getRow())
176            {
177                $i = $row['sys_eve_id'];
178                if ($i < $mini || $mini == 0)
179                    $mini = $i;
180                if ($i > $maxi || $maxi == 0)
181                    $maxi = $i;
182                $x = $row['sys_x'] * $this->ly_;
183                $z = $row['sys_z'] * $this->ly_;
184
185                if ($x < $minx || $minx == 0)
186                    $minx = $x;
187                if ($x > $maxx || $maxx == 0)
188                    $maxx = $x;
189                if ($z < $minz || $minz == 0)
190                    $minz = $z;
191                if ($z > $maxz || $maxz == 0)
192                    $maxz = $z;
193
194                $sys[$i][0] = $x;
195                $sys[$i][1] = $z;
196                if ($i == $pi || $pi == 0)
197                {
198                    $sys[$i][2][$sc] = $row['sjp_to'];
199                    $sys[$i][3] = $sc++;
200                }
201                else
202                {
203                    $sc = 0;
204                }
205                $sys[$i][4] = $row['sys_id'];
206                $sys[$i][5] = $row['sys_name'];
207                $sys[$i][6] = $row['sys_sec'];
208                $sys[$i][7] = $row['con_id'];
209                $sys[$i][8] = $row['con_name'];
210                $sys[$i][9] = $row['reg_id'];
211                $sys[$i][10] = $row['reg_name'];
212                $pi = $i;
213            }
214            $dx = abs($maxx - $minx);
215            $dz = abs($maxz - $minz);
216            $xscale = 1 / ($dx / ($this->imgwidth_ - ($this->offset_ * 2)));
217            $yscale = 1 / ($dz / ($this->imgheight_ - ($this->offset_ * 2)));
218            // echo "dx:".$dx." dz:".$dz." xscale:".$scale." ".$yscale."<br>";
219            // echo "minx:".$minx." maxx:".$maxx." ";
220            // echo "minz:".$minz." maxz:".$maxz." ";
221            // exit;
222            // exit;
223            // draw lines
224            if ($this->showlines_)
225            {
226                $n = $mini;
227                while ($n <= $maxi)
228                {
229                    $px = $this->offset_ + ($sys[$n][0] - $minx) * $xscale;
230                    $py = $this->offset_ + ($sys[$n][1] - $minz) * $yscale;
231
232                    $line_col = imagecolorallocate($img, $this->linecolor_[0], $this->linecolor_[1], $this->linecolor_[2]);
233
234                    for ($m = 0; $m <= $sys[$n][3]; $m++)
235                    {
236                        $sys_to = $sys[$n][2][$m];
237
238                        if ($sys[$sys_to][4] != "")
239                        {
240                            $px_to = $this->offset_ + ($sys[$sys_to][0] - $minx) * $xscale;
241                            $py_to = $this->offset_ + ($sys[$sys_to][1] - $minz) * $yscale;
242
243                            imageline($img, $px, $py, $px_to, $py_to, $line_col);
244                        }
245                    }
246
247                    $n++;
248                }
249            }
250            // draw systems
251            $n = $mini;
252            while ($n <= $maxi)
253            {
254                $px = round($this->offset_ + ($sys[$n][0] - $minx) * $xscale);
255                $py = round($this->offset_ + ($sys[$n][1] - $minz) * $yscale);
256
257                if ($this->mode_ == "map")
258                {
259                    if ($sys[$n][9] == $this->regionid_)
260                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
261                    else
262                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
263                }
264                if ($this->mode_ == "region")
265                {
266                    if ($sys[$n][7] == $this->conid_)
267                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
268                    else
269                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
270                }
271                if ($this->mode_ == "cons")
272                {
273                    if ($sys[$n][4] == $this->systemid_)
274                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
275                    else
276                        $color = imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
277                }
278                // if ( $sys[$n][3] > 0 )
279                // $sec_status = round( $sys[$n][3] * 10 );
280                // else
281                // $sec_status = 0;
282                // $color = imagecolorallocate( $img, $this->sys_colors_[$sec_status][0],
283                // $this->sys_colors_[$sec_status][1],
284                // $this->sys_colors_[$sec_status][2] );
285                if ($this->showsysnames_)
286                {
287                    $tlen = 5 * strlen($sys[$n][5]);
288                    if (($px + $tlen > ($this->imgwidth_ - 20)))
289                        $sx = $px - $tlen;
290                    else
291                        $sx = $px + 5;
292                    if (($py + 5 > ($this->imgheight_ - 20)))
293                        $sy = $py - 5;
294                    else
295                        $sy = $py + 5;
296
297                    imagestring($img, 1, $sx, $sy, $sys[$n][5], $color);
298                    // imagettftext ( $img, 6, 0,
299                    // $sx,
300                    // $sy,
301                    // $color,
302                    // "../fonts/04B_03__.TTF",
303                    // $sys[$n][5] );
304                }
305
306                $ed = $xscale * 0.75;
307                if ($ed > 5)
308                {
309                    $ed = 5;
310                }
311                // bug compat: imagefilledellipse doesnt draw ellipses with 1px size
312                // on some installations
313                if ($ed < 1)
314                {
315                    imagesetpixel($img, $px, $py, $color);
316                }
317                elseif ($ed < 3)
318                {
319                    imagesetpixel($img, $px, $py, $color);
320                    imagesetpixel($img, $px+1, $py, $color);
321                    imagesetpixel($img, $px-1, $py, $color);
322                    imagesetpixel($img, $px, $py-1, $color);
323                    imagesetpixel($img, $px, $py+1, $color);
324                }
325                else
326                {
327                    imagefilledellipse($img, $px, $py, $ed, $ed, $color);
328                }
329
330                $n++;
331            }
332        }
333
334        $captioncolor = imagecolorallocate($img, $this->captioncolor_[0], $this->captioncolor_[1], $this->captioncolor_[2]);
335        if (strlen($this->title_) > 0)
336        {
337            $title = $this->title_ . " " . $caption;
338        }
339        else
340        {
341            $title = $caption;
342        }
343
344        imagestring($img, 1, 2, 2, $title, $captioncolor);
345        // imagettftext ( $img, 6, 0,
346        // 5,
347        // 10,
348        // $captioncolor,
349        // "../fonts/04B_03__.TTF",
350        // $title );
351        if ($this->mode_ == "map" && !$cached)
352        {
353            imagepng($img, $regioncache);
354        }
355        header("Content-type: image/png");
356        imagepng($img);
357    }
358}
359?>
Note: See TracBrowser for help on using the browser.