Initial Commit
This commit is contained in:
		
							
								
								
									
										183
									
								
								svgparser/parser/objects/Element.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								svgparser/parser/objects/Element.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,183 @@ | ||||
| <?php | ||||
| /* | ||||
| SVG to dojox.gfx Parser | ||||
| Copyright (C) 2009  Aaron Lindsay <aclindsay@aclindsay.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or | ||||
| modify it under the terms of the GNU General Public License | ||||
| as published by the Free Software Foundation; either version 2 | ||||
| of the License, or (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU General Public License for more details. | ||||
|  | ||||
| You should have received a copy of the GNU General Public License | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | ||||
| */ | ||||
|  | ||||
| class Element { | ||||
| 	private $id; | ||||
| 	private $styles; | ||||
| 	private $transforms; | ||||
| 	private $transform; | ||||
| 	 | ||||
| 	public function __construct() { | ||||
| 		$this->id = ""; | ||||
| 		$this->styles = array(); | ||||
| 		$this->transforms = array(); | ||||
| 		$this->transform = new Transform(); | ||||
| 	} | ||||
| 	 | ||||
| 	public function setId($newId) { | ||||
| 		$this->id = $newId; | ||||
| 	} | ||||
| 	public function getId() { | ||||
| 		return $this->id; | ||||
| 	} | ||||
| 	 | ||||
| 	public function setStyles($newStyles) { | ||||
| 		$this->styles = array(); | ||||
| 		$smallerStyles = split(";", $newStyles); | ||||
| 		foreach($smallerStyles as $small) { | ||||
| 			$parts = split(":", $small); | ||||
| 			$this->styles[$parts[0]] = $parts[1]; | ||||
| 		} | ||||
| 	} | ||||
| 	public function setStyle($key, $style) { | ||||
| 		$this->styles[$key] = $style; | ||||
| 	} | ||||
| 	public function getStyles() { | ||||
| 		return $this->styles; | ||||
| 	} | ||||
| 	public function getStyle($key) { | ||||
| 		if ($this->styles && array_key_exists($key, $this->styles)) | ||||
| 			return $this->styles[$key]; | ||||
| 		else | ||||
| 			return null; | ||||
| 	} | ||||
| 	public function setStroke($stroke) { | ||||
| 		$this->styles["stroke"] = $stroke; | ||||
| 	} | ||||
| 	public function setStrokeWidth($width) { | ||||
| 		$this->styles["stroke-width"] = $width; | ||||
| 	} | ||||
| 	public function setStrokeLinecap($linecap) { | ||||
| 		$this->styles["stroke-linecap"] = $linecap; | ||||
| 	} | ||||
|  | ||||
| 	public function setFill($fill) { | ||||
| 		$this->styles["fill"] = $fill; | ||||
| 	} | ||||
|  | ||||
| 	//$transform is a string of transformations | ||||
| 	public function setTransforms($transform) { | ||||
| 		$this->transforms = array(); | ||||
| 		$this->addTransforms($transform); | ||||
| 		$this->combineTransforms(); | ||||
| 	} | ||||
| 	 | ||||
| 	//$transform is a string of transformations | ||||
| 	public function addTransforms($transform) { | ||||
| 		$parts = split("\\)", $transform); | ||||
| 		foreach ($parts as $part) { | ||||
| 			//because ')' is the last character, we'll get an empty string here if we don't watch out | ||||
| 			if ($part == "") | ||||
| 				break; | ||||
| 				 | ||||
| 			$transform = split("\\(", trim($part)); | ||||
| 			switch (trim($transform[0])) { | ||||
| 				case "matrix": | ||||
| 					//get all the matrix elements, create a new transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					$transformObject = new Transform(); | ||||
| 					$transformObject->setFullMatrix($elements[0], $elements[1], $elements[2], $elements[3], $elements[4], $elements[5]); | ||||
| 					$this->transforms[] = $transformObject; | ||||
| 					break; | ||||
| 				case "translate": | ||||
| 					//get all the matrix elements, create a new translate transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					$transformObject = new Transform(); | ||||
| 					$transformObject->setTranslate($elements[0], $elements[1]); | ||||
| 					$this->transforms[] = $transformObject; | ||||
| 					break; | ||||
| 				case "scale": | ||||
| 					//get all the matrix elements, create a new scale transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					$transformObject = new Transform(); | ||||
| 					if (count($elements) > 1) | ||||
| 						$transformObject->setScale($elements[0], $elements[1]); | ||||
| 					else | ||||
| 						$transformObject->setScale($elements[0]); | ||||
| 					$this->transforms[] = $transformObject; | ||||
| 					break; | ||||
| 				case "rotate": | ||||
| 					//get all the matrix elements, create a new rotate transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					//if there are 3 arguments, they are angle, and (x,y) coordinates of the point to rotate about | ||||
| 					//to handle this, we translate, rotate, and translate back | ||||
| 					if (count($elements) >= 3) { | ||||
| 						$transformObject1 = new Transform(); | ||||
| 						$transformObject1->setTranslate(-$elements[1], -$elements[2]); | ||||
| 						$this->transforms[] = $transformObject1; | ||||
| 						 | ||||
| 						$transformObject2 = new Transform(); | ||||
| 						$transformObject2->setRotate($elements[0]); | ||||
| 						$this->transforms[] = $transformObject2; | ||||
| 						 | ||||
| 						$transformObject3 = new Transform(); | ||||
| 						$transformObject3->setTranslate($elements[1], $elements[2]); | ||||
| 						$this->transforms[] = $transformObject3; | ||||
| 					} else { | ||||
| 						$transformObject = new Transform(); | ||||
| 						$transformObject->setRotate($elements[0]); | ||||
| 						$this->transforms[] = $transformObject; | ||||
| 					} | ||||
| 					break; | ||||
| 				case "skewX": | ||||
| 					//get all the matrix elements, create a new skew transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					$transformObject = new Transform(); | ||||
| 					$transformObject->setSkewX($elements[0]); | ||||
| 					$this->transforms[] = $transformObject; | ||||
| 					break; | ||||
| 				case "skewY": | ||||
| 					//get all the matrix elements, create a new skew transform and set them | ||||
| 					$elements = split("[[:blank:],]+", trim($transform[1])); | ||||
| 					$transformObject = new Transform(); | ||||
| 					$transformObject->setSkewY($elements[0]); | ||||
| 					$this->transforms[] = $transformObject; | ||||
| 					break; | ||||
| 			}  | ||||
| 		} | ||||
| 		//combine all these into one transform | ||||
| 		$this->combineTransforms(); | ||||
| 	} | ||||
| 	 | ||||
|  | ||||
| 	//combine all transforms into one transform and store in $this->transform | ||||
| 	private function combineTransforms() { | ||||
| 		$one = new Transform(); | ||||
| 		foreach ($this->transforms as $transform) | ||||
| 			$one->multiplyBy($transform); | ||||
| 		$this->transform = $one; | ||||
| 	} | ||||
|  | ||||
| 	public function setTransform($transform) { | ||||
| 		$this->transform = $transform; | ||||
| 		$this->transforms = array(); | ||||
| 		$this->transforms[] = $transform; | ||||
| 	} | ||||
|  | ||||
| 	public function getTransform() { | ||||
| 		return $this->transform; | ||||
| 	} | ||||
|  | ||||
| 	//an ARRAY of Transform objects is returned | ||||
| 	public function getTransforms() { | ||||
| 		return $this->transforms; | ||||
| 	} | ||||
| } | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user