1<?php 2 3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ 4 5/** 6 * 3d Library 7 * 8 * PHP versions 5 9 * 10 * LICENSE: 11 * This library is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU Lesser General Public 13 * License as published by the Free Software Foundation; either 14 * version 2.1 of the License, or (at your option) any later version. 15 * 16 * This library is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * Lesser General Public License for more details. 20 * 21 * You should have received a copy of the GNU Lesser General Public 22 * License along with this library; if not, write to the Free Software 23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 * 25 * @category Image 26 * @package Image_3D 27 * @author Kore Nordmann <3d@kore-nordmann.de> 28 * @copyright 1997-2005 Kore Nordmann 29 * @license http://www.gnu.org/licenses/lgpl.txt lgpl 2.1 30 * @version CVS: $Id$ 31 * @link http://pear.php.net/package/PackageName 32 * @since File available since Release 0.1.0 33 */ 34 35require_once('Image/3D/Paintable/Object.php'); 36 37/** 38 * Image_3D_Object_Pie 39 * 40 * @category Image 41 * @package Image_3D 42 * @author Kore Nordmann <3d@kore-nordmann.de> 43 * @copyright 1997-2005 Kore Nordmann 44 * @license http://www.gnu.org/licenses/lgpl.txt lgpl 2.1 45 * @version Release: @package_version@ 46 * @link http://pear.php.net/package/PackageName 47 * @since Class available since Release 0.1.0 48 */ 49class Image_3D_Object_Pie extends Image_3D_Object { 50 51 public function __construct($parameter) 52 { 53 $parameter = $this->_checkParameter($parameter); 54 55 if ($parameter['inside'] == 0) { 56 $this->_createPie($parameter); 57 } else { 58 $this->_createDonutPie($parameter); 59 } 60 } 61 62 protected function _createPie($parameter) 63 { 64 $step = ($parameter['end'] - $parameter['start']) / $parameter['detail']; 65 66 // center 67 $centerTop = new Image_3D_Point(0, 0, .5); 68 $centerBottom = new Image_3D_Point(0, 0, -.5); 69 70 // Add polygones for top and bottom of the pie 71 $x = cos($parameter['start']) * $parameter['outside']; 72 $y = sin($parameter['start']) * $parameter['outside']; 73 $top = new Image_3D_Point($x, $y, .5); 74 $bottom = new Image_3D_Point($x, $y, -.5); 75 76 // Polygones for the opening side 77 $this->_addPolygon(new Image_3D_Polygon($top, $centerTop, $centerBottom)); 78 $this->_addPolygon(new Image_3D_Polygon($bottom, $top, $centerBottom)); 79 80 for ($i = 1; $i <= $parameter['detail']; $i++) { 81 $x = cos($parameter['start'] + $i * $step) * $parameter['outside']; 82 $y = sin($parameter['start'] + $i * $step) * $parameter['outside']; 83 84 $newTop = new Image_3D_Point($x, $y, .5); 85 $newBottom = new Image_3D_Point($x, $y, -.5); 86 87 $this->_addPolygon(new Image_3D_Polygon($centerTop, $top, $newTop)); 88 $this->_addPolygon(new Image_3D_Polygon($centerBottom, $bottom, $newBottom)); 89 90 // Rand 91 $this->_addPolygon(new Image_3D_Polygon($top, $newBottom, $newTop)); 92 $this->_addPolygon(new Image_3D_Polygon($top, $bottom, $newBottom)); 93 94 $top = $newTop; $bottom = $newBottom; 95 } 96 97 // Polygones for the closing side 98 $this->_addPolygon(new Image_3D_Polygon($top, $centerTop, $centerBottom)); 99 $this->_addPolygon(new Image_3D_Polygon($bottom, $top, $centerBottom)); 100 } 101 102 protected function _checkParameter($array) 103 { 104 $array['detail'] = max(1, (int) @$array['detail']); 105 $array['outside'] = max(0, (int) @$array['outside']); 106 $array['inside'] = min(max(0, (int) @$array['inside']), @$array['outside']); 107 $array['start'] = max(0, deg2rad((float) @$array['start'])); 108 $array['end'] = max(0, deg2rad((float) @$array['end'])); 109 110 return ($array); 111 } 112} 113