Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
require_once(HTML2PS_DIR.'path.point.php');
4
require_once(HTML2PS_DIR.'path.rectangle.php');
5
 
6
class Path {
7
  var $_points;
8
 
9
  function Path() {
10
    $this->clear();
11
  }
12
 
13
  /**
14
   * Returns a bounding box rectangle object
15
   *
16
   * Pre-conditions:
17
   * - there's at least one point in the path
18
   */
19
  function getBbox() {
20
    if (count($this->_points) < 1) {
21
      die("Path::getBbox() called for path without points");
22
    }
23
 
24
    $rect = new Rectangle($this->_points[0]->_clone(),
25
                          $this->_points[0]->_clone());
26
 
27
    foreach ($this->_points as $point) {
28
      $rect->ur->x = max($rect->ur->x, $point->x);
29
      $rect->ur->y = max($rect->ur->y, $point->y);
30
      $rect->ll->x = min($rect->ll->x, $point->x);
31
      $rect->ll->y = min($rect->ll->y, $point->y);
32
    };
33
 
34
    return $rect;
35
  }
36
 
37
  function clear() {
38
    $this->_points = array();
39
  }
40
 
41
  function addPoint($point) {
42
    $this->_points[] = $point;
43
  }
44
 
45
  function getPoint($index) {
46
    return $this->_points[$index];
47
  }
48
 
49
  function getPoints() {
50
    return $this->_points;
51
  }
52
 
53
  function getPointArray() {
54
    $result = array();
55
    foreach ($this->_points as $point) {
56
      $result[] = $point->x;
57
      $result[] = $point->y;
58
    };
59
    return $result;
60
  }
61
 
62
  function close() {
63
    $this->addPoint($this->getPoint(0));
64
  }
65
 
66
  function get_point_count() {
67
    return count($this->_points);
68
  }
69
 
70
  /**
71
   * @deprecated
72
   */
73
  function getPointCount() {
74
    return $this->get_point_count();
75
  }
76
 
77
  function is_empty() {
78
    return ($this->get_point_count() == 0);
79
  }
80
 
81
  function fill($transform, $image, $color) {
82
    $coords = $this->getPointArray();
83
    $size   = $this->getPointCount();
84
 
85
    for ($i=0; $i<$size; $i++) {
86
      $transform->apply($coords[$i*2], $coords[$i*2+1]);
87
    };
88
 
89
    imagefilledpolygon($image, $coords, $size, $color);
90
  }
91
 
92
  function stroke($transform, $image, $color) {
93
    $coords = $this->getPointArray();
94
    $size   = $this->getPointCount();
95
 
96
    for ($i=0; $i<$size; $i++) {
97
      $transform->apply($coords[$i*2], $coords[$i*2+1]);
98
    };
99
 
100
    imagepolygon($image, $coords, $size, $color);
101
  }
102
}
103
 
104
class PathCircle extends Path {
105
  var $_x;
106
  var $_y;
107
  var $_r;
108
 
109
  function PathCircle() {
110
    $this->Path();
111
 
112
    $this->set_x(0);
113
    $this->set_y(0);
114
    $this->set_r(0);
115
  }
116
 
117
  function fill($transform, $image, $color) {
118
    $x = $this->get_x();
119
    $y = $this->get_y();
120
 
121
    $transform->apply($x, $y);
122
 
123
    $dummy = 0;
124
    $transform->apply($r, $dummy);
125
 
126
    imagefilledellipse($image,
127
                       $x,
128
                       $y,
129
                       $r*2,  // width = diameter
130
                       $r*2,  // height = diameter
131
                       $color);
132
  }
133
 
134
  function get_r() {
135
    return $this->_r;
136
  }
137
 
138
  function get_x() {
139
    return $this->_x;
140
  }
141
 
142
  function get_y() {
143
    return $this->_y;
144
  }
145
 
146
  function set_r($r) {
147
    $this->_r = $r;
148
  }
149
 
150
  function set_x($x) {
151
    $this->_x = $x;
152
  }
153
 
154
  function set_y($y) {
155
    $this->_y = $y;
156
  }
157
 
158
  function stroke($transform, $image, $color) {
159
    $x = $this->get_x();
160
    $y = $this->get_y();
161
 
162
    $transform->apply($x, $y);
163
 
164
    $dummy = 0;
165
    $transform->apply($r, $dummy);
166
 
167
    imageellipse($image,
168
                 $x,
169
                 $y,
170
                 $r*2,  // width = diameter
171
                 $r*2,  // height = diameter
172
                 $color);
173
  }
174
}
175
 
176
?>