Пример #1
0
 /**
  * @param Path $path
  */
 private function initTable(Path $path)
 {
     $curX = 0.0;
     $curY = 0.0;
     foreach ($path->getElements() as $path) {
         $destX = $path->getDestX();
         $destY = $path->getDestY();
         if ($path instanceof LineTo || $path instanceof Close) {
             if ($curX === $destX && $curY === $destY) {
                 // skip empty lines
                 continue;
             }
             $this->addSection(new LinearSection($curX, $curY, $destX, $destY));
         } elseif ($path instanceof CurveTo) {
             $c1x = $path->getControl1X();
             $c1y = $path->getControl1Y();
             $c2x = $path->getControl2X();
             $c2y = $path->getControl2Y();
             if ($curX === $destX && $curY === $destY && $curX === $c1x && $curY === $c1y && $curX === $c2x && $curY === $c2y) {
                 // skip empty curve
                 continue;
             }
             $this->addSection(new CurvedSection($curX, $curY, $c1x, $c1y, $c2x, $c2y, $destX, $destY));
         }
         $curX = $destX;
         $curY = $destY;
     }
 }
Пример #2
0
 /**
  */
 public function testCloseLastMoveTo()
 {
     $path = new Path(1, 2);
     $path->moveTo(2, 3);
     $path->moveTo(3, 4);
     $path->close();
     $elements = $path->getElements();
     $this->assertCount(4, $elements);
     $this->assertEquals(3, $elements[3]->getDestX());
     $this->assertEquals(4, $elements[3]->getDestY());
 }
Пример #3
0
 /**
  * @param ZendPage $page
  * @param Path $path
  * @param int $fillType
  *
  * @return ZendPage
  * @throws \Exception
  */
 private function drawRawPath(ZendPage $page, Path $path, $fillType)
 {
     $content = '';
     foreach ($path->getElements() as $element) {
         if ($element instanceof MoveTo) {
             $xObj = new ZendNumericObject($element->getDestX());
             $yObj = new ZendNumericObject($element->getDestY());
             $content .= $xObj->toString() . ' ' . $yObj->toString() . ' ' . " m\n";
         } elseif ($element instanceof LineTo) {
             $xObj = new ZendNumericObject($element->getDestX());
             $yObj = new ZendNumericObject($element->getDestY());
             $content .= $xObj->toString() . ' ' . $yObj->toString() . ' ' . " l\n";
         } elseif ($element instanceof CurveTo) {
             $x1Obj = new ZendNumericObject($element->getControl1X());
             $y1Obj = new ZendNumericObject($element->getControl1Y());
             $x2Obj = new ZendNumericObject($element->getControl2X());
             $y2Obj = new ZendNumericObject($element->getControl2Y());
             $x3Obj = new ZendNumericObject($element->getDestX());
             $y3Obj = new ZendNumericObject($element->getDestY());
             $content .= $x1Obj->toString() . ' ' . $y1Obj->toString() . ' ' . $x2Obj->toString() . ' ' . $y2Obj->toString() . ' ' . $x3Obj->toString() . ' ' . $y3Obj->toString() . ' ' . " c\n";
         } elseif ($element instanceof Close) {
             $content .= "h\n";
         } else {
             throw new InvalidArgumentException('unsupported path element: ' . get_class($element));
         }
     }
     switch ($fillType) {
         case ZendPage::SHAPE_DRAW_FILL_AND_STROKE:
             $content .= " B*\n";
             break;
         case ZendPage::SHAPE_DRAW_FILL:
             $content .= " f*\n";
             break;
         case ZendPage::SHAPE_DRAW_STROKE:
             $content .= " S\n";
             break;
     }
     return $page->rawWrite($content, 'PDF');
 }
Пример #4
0
 /**
  * @param SimpleXMLElement $svg
  * @param Path $path
  * @param $yBase
  *
  * @return SimpleXMLElement
  * @throws \Exception
  */
 private function addPath(SimpleXMLElement $svg, Path $path, $yBase)
 {
     $d = '';
     foreach ($path->getElements() as $element) {
         if ($element instanceof MoveTo) {
             $d .= 'M ' . $element->getDestX() . ',' . ($yBase - $element->getDestY()) . ' ';
         } elseif ($element instanceof LineTo) {
             $d .= 'L ' . $element->getDestX() . ',' . ($yBase - $element->getDestY()) . ' ';
         } elseif ($element instanceof CurveTo) {
             $d .= 'C ' . $element->getControl1X() . ',' . ($yBase - $element->getControl1Y()) . ' ' . $element->getControl2X() . ',' . ($yBase - $element->getControl2Y()) . ' ' . $element->getDestX() . ',' . ($yBase - $element->getDestY()) . ' ';
         } elseif ($element instanceof Close) {
             $d .= "Z ";
         } else {
             throw new InvalidArgumentException('unsupported path element: ' . get_class($element));
         }
     }
     $child = $svg->addChild("path");
     $child->addAttribute("d", $d);
     return $child;
 }