Esempio n. 1
0
 /**
  * draw a ligne with a specific type, and specific start and end for radius
  *
  * @access protected
  * @param  array   $pt
  * @param  float   $color
  * @param  string  $type (dashed, dotted, double, solid)
  * @param  float   $width
  * @param  integer $radius (binary from 0 to 3 with 1=>start with a radius, 2=>end with a radius)
  */
 protected function _drawLine($pt, $color, $type, $width, $radius = 3)
 {
     // set the fill color
     $this->pdf->setFillColorArray($color);
     // if dashed or dotted
     if ($type == 'dashed' || $type == 'dotted') {
         // clean the end of the line, if radius
         if ($radius == 1) {
             $tmp = array();
             $tmp[] = $pt[0];
             $tmp[] = $pt[1];
             $tmp[] = $pt[2];
             $tmp[] = $pt[3];
             $tmp[] = $pt[8];
             $tmp[] = $pt[9];
             $this->pdf->Polygon($tmp, 'F');
             $tmp = array();
             $tmp[] = $pt[2];
             $tmp[] = $pt[3];
             $tmp[] = $pt[4];
             $tmp[] = $pt[5];
             $tmp[] = $pt[6];
             $tmp[] = $pt[7];
             $tmp[] = $pt[8];
             $tmp[] = $pt[9];
             $pt = $tmp;
         } else {
             if ($radius == 2) {
                 $tmp = array();
                 $tmp[] = $pt[2];
                 $tmp[] = $pt[3];
                 $tmp[] = $pt[4];
                 $tmp[] = $pt[5];
                 $tmp[] = $pt[6];
                 $tmp[] = $pt[7];
                 $this->pdf->Polygon($tmp, 'F');
                 $tmp = array();
                 $tmp[] = $pt[0];
                 $tmp[] = $pt[1];
                 $tmp[] = $pt[2];
                 $tmp[] = $pt[3];
                 $tmp[] = $pt[6];
                 $tmp[] = $pt[7];
                 $tmp[] = $pt[8];
                 $tmp[] = $pt[9];
                 $pt = $tmp;
             } else {
                 if ($radius == 3) {
                     $tmp = array();
                     $tmp[] = $pt[0];
                     $tmp[] = $pt[1];
                     $tmp[] = $pt[2];
                     $tmp[] = $pt[3];
                     $tmp[] = $pt[10];
                     $tmp[] = $pt[11];
                     $this->pdf->Polygon($tmp, 'F');
                     $tmp = array();
                     $tmp[] = $pt[4];
                     $tmp[] = $pt[5];
                     $tmp[] = $pt[6];
                     $tmp[] = $pt[7];
                     $tmp[] = $pt[8];
                     $tmp[] = $pt[9];
                     $this->pdf->Polygon($tmp, 'F');
                     $tmp = array();
                     $tmp[] = $pt[2];
                     $tmp[] = $pt[3];
                     $tmp[] = $pt[4];
                     $tmp[] = $pt[5];
                     $tmp[] = $pt[8];
                     $tmp[] = $pt[9];
                     $tmp[] = $pt[10];
                     $tmp[] = $pt[11];
                     $pt = $tmp;
                 }
             }
         }
         // horisontal or vertical line
         if ($pt[2] == $pt[0]) {
             $l = abs(($pt[3] - $pt[1]) * 0.5);
             $px = 0;
             $py = $width;
             $x1 = $pt[0];
             $y1 = ($pt[3] + $pt[1]) * 0.5;
             $x2 = $pt[6];
             $y2 = ($pt[7] + $pt[5]) * 0.5;
         } else {
             $l = abs(($pt[2] - $pt[0]) * 0.5);
             $px = $width;
             $py = 0;
             $x1 = ($pt[2] + $pt[0]) * 0.5;
             $y1 = $pt[1];
             $x2 = ($pt[6] + $pt[4]) * 0.5;
             $y2 = $pt[7];
         }
         // if dashed : 3x bigger than dotted
         if ($type == 'dashed') {
             $px = $px * 3.0;
             $py = $py * 3.0;
         }
         $mode = $l / ($px + $py) < 0.5;
         // display the dotted/dashed line
         for ($i = 0; $l - ($px + $py) * ($i - 0.5) > 0; $i++) {
             if ($i % 2 == $mode) {
                 $j = $i - 0.5;
                 $lx1 = $px * $j;
                 if ($lx1 < -$l) {
                     $lx1 = -$l;
                 }
                 $ly1 = $py * $j;
                 if ($ly1 < -$l) {
                     $ly1 = -$l;
                 }
                 $lx2 = $px * ($j + 1);
                 if ($lx2 > $l) {
                     $lx2 = $l;
                 }
                 $ly2 = $py * ($j + 1);
                 if ($ly2 > $l) {
                     $ly2 = $l;
                 }
                 $tmp = array();
                 $tmp[] = $x1 + $lx1;
                 $tmp[] = $y1 + $ly1;
                 $tmp[] = $x1 + $lx2;
                 $tmp[] = $y1 + $ly2;
                 $tmp[] = $x2 + $lx2;
                 $tmp[] = $y2 + $ly2;
                 $tmp[] = $x2 + $lx1;
                 $tmp[] = $y2 + $ly1;
                 $this->pdf->Polygon($tmp, 'F');
                 if ($j > 0) {
                     $tmp = array();
                     $tmp[] = $x1 - $lx1;
                     $tmp[] = $y1 - $ly1;
                     $tmp[] = $x1 - $lx2;
                     $tmp[] = $y1 - $ly2;
                     $tmp[] = $x2 - $lx2;
                     $tmp[] = $y2 - $ly2;
                     $tmp[] = $x2 - $lx1;
                     $tmp[] = $y2 - $ly1;
                     $this->pdf->Polygon($tmp, 'F');
                 }
             }
         }
     } else {
         if ($type == 'double') {
             // if double, 2 lines : 0=>1/3 and 2/3=>1
             $pt1 = $pt;
             $pt2 = $pt;
             if (count($pt) == 12) {
                 // line 1
                 $pt1[0] = ($pt[0] - $pt[10]) * 0.33 + $pt[10];
                 $pt1[1] = ($pt[1] - $pt[11]) * 0.33 + $pt[11];
                 $pt1[2] = ($pt[2] - $pt[10]) * 0.33 + $pt[10];
                 $pt1[3] = ($pt[3] - $pt[11]) * 0.33 + $pt[11];
                 $pt1[4] = ($pt[4] - $pt[8]) * 0.33 + $pt[8];
                 $pt1[5] = ($pt[5] - $pt[9]) * 0.33 + $pt[9];
                 $pt1[6] = ($pt[6] - $pt[8]) * 0.33 + $pt[8];
                 $pt1[7] = ($pt[7] - $pt[9]) * 0.33 + $pt[9];
                 $pt2[10] = ($pt[10] - $pt[0]) * 0.33 + $pt[0];
                 $pt2[11] = ($pt[11] - $pt[1]) * 0.33 + $pt[1];
                 // line 2
                 $pt2[2] = ($pt[2] - $pt[0]) * 0.33 + $pt[0];
                 $pt2[3] = ($pt[3] - $pt[1]) * 0.33 + $pt[1];
                 $pt2[4] = ($pt[4] - $pt[6]) * 0.33 + $pt[6];
                 $pt2[5] = ($pt[5] - $pt[7]) * 0.33 + $pt[7];
                 $pt2[8] = ($pt[8] - $pt[6]) * 0.33 + $pt[6];
                 $pt2[9] = ($pt[9] - $pt[7]) * 0.33 + $pt[7];
             } else {
                 // line 1
                 $pt1[0] = ($pt[0] - $pt[6]) * 0.33 + $pt[6];
                 $pt1[1] = ($pt[1] - $pt[7]) * 0.33 + $pt[7];
                 $pt1[2] = ($pt[2] - $pt[4]) * 0.33 + $pt[4];
                 $pt1[3] = ($pt[3] - $pt[5]) * 0.33 + $pt[5];
                 // line 2
                 $pt2[6] = ($pt[6] - $pt[0]) * 0.33 + $pt[0];
                 $pt2[7] = ($pt[7] - $pt[1]) * 0.33 + $pt[1];
                 $pt2[4] = ($pt[4] - $pt[2]) * 0.33 + $pt[2];
                 $pt2[5] = ($pt[5] - $pt[3]) * 0.33 + $pt[3];
             }
             $this->pdf->Polygon($pt1, 'F');
             $this->pdf->Polygon($pt2, 'F');
         } else {
             if ($type == 'solid') {
                 // solid line : draw directly the polygon
                 $this->pdf->Polygon($pt, 'F');
             }
         }
     }
 }