Beispiel #1
0
 function Create()
 {
     if ($this->ready) {
         return;
     }
     $this->graph = new CanvasGraph($this->width, $this->height, 'auto');
     $this->graph->SetMargin(5, 11, 6, 11);
     /*
         $this->graph->SetShadow();
         $this->graph->SetMarginColor( "teal");
         $this->graph->InitFrame(); 
     */
     $hpos = 15;
     $text = new Text("ADEI", $this->width / 2, $hpos);
     $text->SetFont(FF_ARIAL, FS_BOLD, 24);
     $text->Align('center', 'top');
     $text->Stroke($this->graph->img);
     $hpos += $text->GetTextHeight($this->graph->img) + 10;
     //    $msg = "Welcome to the Advanced Data Extraction Infrastructure! Please";
     $msg = preg_replace(array("/\n([^\n])/"), array(' \\1'), file_get_contents("docs/welcome.txt"));
     $text_width = $this->width - 50;
     if ($text_width < 100) {
         return;
     }
     $text = new Text($msg, $this->width / 2, $hpos);
     $text->SetFont(FF_ARIAL, FS_NORMAL, 18);
     $text->Align('center', 'top');
     $width = $text->GetWidth($this->graph->img);
     if ($width > $text_width) {
         $char_width = ceil($width / strlen($msg));
         $cpl = $text_width / $char_width;
         $wmsg = wordwrap($msg, $cpl, "\n", true);
         $text->Set($wmsg);
         $width = $text->GetWidth($this->graph->img);
         while ($width > $text_width && $cpl > 10) {
             $cpl -= $cpl / 10;
             $wmsg = wordwrap($msg, $cpl, "\n", true);
             $text->Set($wmsg);
             $width = $text->GetWidth($this->graph->img);
         }
     }
     $text->Stroke($this->graph->img);
     //    $text->ParagraphAlign('center');
     //    $text->SetBox( "white", "black","gray");
     /*
     //    $text->Align('left', 'top');
     //    $text->ParagraphAlign('left'); 
     //    $text->SetBox( "white", "black","gray"); 
         $width = $text->GetWidth($this->graph->img);
     */
     //    $text->Stroke( $this->graph->img);
 }
 /**
  * @return Text
  */
 private function addTextToGraph($msg, $padding_left, $padding_top, $font_weight, $font_size, $img_width)
 {
     $text = new Text($msg, $padding_left, $padding_top);
     $text->SetFont($this->getFont(), $font_weight, $font_size);
     $text->SetColor($this->getMainColor());
     //word wrap
     $width = $text->GetWidth($this->jpgraph_instance->img) - $padding_left;
     $text->SetWordWrap(floor(strlen($msg) * ($this->img_width - 3 * $padding_left) / $width));
     $text->Stroke($this->jpgraph_instance->img);
     return $text;
 }
Beispiel #3
0
 function CreateMessage($header, $msg)
 {
     $this->graph = new CanvasGraph($this->width, $this->height, 'auto');
     $this->graph->SetMargin(5, 11, 6, 11);
     $this->graph->SetShadow();
     $this->graph->SetMarginColor("teal");
     $this->graph->InitFrame();
     $text_width = $this->width - 50;
     if ($text_width < 100) {
         return;
     }
     $text = new Text($msg, 25, 25);
     $text->SetFont(FF_ARIAL, FS_NORMAL, 24);
     //    $text->Align('left', 'top');
     //    $text->ParagraphAlign('left');
     //    $text->SetBox( "white", "black","gray");
     $width = $text->GetWidth($this->graph->img);
     if ($width > $text_width) {
         $char_width = ceil($width / strlen($msg));
         $cpl = $text_width / $char_width;
         /*
         	Does not taken into the account by GetWidth function
         	$text->SetWordWrap($cpl);
         */
         $wmsg = wordwrap($msg, $cpl, "\n", true);
         $text->Set($wmsg);
         $width = $text->GetWidth($this->graph->img);
         while ($width > $text_width && $cpl > 10) {
             $cpl -= $cpl / 10;
             $wmsg = wordwrap($msg, $cpl, "\n", true);
             $text->Set($wmsg);
             $width = $text->GetWidth($this->graph->img);
         }
     }
     $text->Stroke($this->graph->img);
 }
Beispiel #4
0
 function Stroke($aImg, $ax = -1, $ay = -1)
 {
     // To position the super script correctly we need different
     // cases to handle the alignmewnt specified since that will
     // determine how we can interpret the x,y coordinates
     $w = parent::GetWidth($aImg);
     $h = parent::GetTextHeight($aImg);
     switch ($this->valign) {
         case 'top':
             $sy = $this->y;
             break;
         case 'center':
             $sy = $this->y - $h / 2;
             break;
         case 'bottom':
             $sy = $this->y - $h;
             break;
         default:
             JpGraphError::Raise('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text');
             exit;
     }
     switch ($this->halign) {
         case 'left':
             $sx = $this->x + $w;
             break;
         case 'center':
             $sx = $this->x + $w / 2;
             break;
         case 'right':
             $sx = $this->x;
             break;
         default:
             JpGraphError::Raise('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text');
             exit;
     }
     $sx += $this->iSuperMargin;
     $sy += $this->iVertOverlap;
     // Should we automatically determine the font or
     // has the user specified it explicetly?
     if ($this->sfont_family == "") {
         if ($this->font_family <= FF_FONT2) {
             if ($this->font_family == FF_FONT0) {
                 $sff = FF_FONT0;
             } elseif ($this->font_family == FF_FONT1) {
                 if ($this->font_style == FS_NORMAL) {
                     $sff = FF_FONT0;
                 } else {
                     $sff = FF_FONT1;
                 }
             } else {
                 $sff = FF_FONT1;
             }
             $sfs = $this->font_style;
             $sfz = $this->font_size;
         } else {
             // TTF fonts
             $sff = $this->font_family;
             $sfs = $this->font_style;
             $sfz = floor($this->font_size * $this->iSuperScale);
             if ($sfz < 8) {
                 $sfz = 8;
             }
         }
         $this->sfont_family = $sff;
         $this->sfont_style = $sfs;
         $this->sfont_size = $sfz;
     } else {
         $sff = $this->sfont_family;
         $sfs = $this->sfont_style;
         $sfz = $this->sfont_size;
     }
     parent::Stroke($aImg, $ax, $ay);
     // For the builtin fonts we need to reduce the margins
     // since the bounding bx reported for the builtin fonts
     // are much larger than for the TTF fonts.
     if ($sff <= FF_FONT2) {
         $sx -= 2;
         $sy += 3;
     }
     $aImg->SetTextAlign('left', 'bottom');
     $aImg->SetFont($sff, $sfs, $sfz);
     $aImg->PushColor($this->color);
     $aImg->StrokeText($sx, $sy, $this->iSuper, $this->iSDir, 'left');
     $aImg->PopColor();
 }
Beispiel #5
0
 function getWidth($aImg)
 {
     $scaling = 1;
     //$this->iAntiAlias ? 2 : 1 ;
     if ($this->iSize > 0 && $this->iSize < 1) {
         $this->iSize *= min($aImg->width, $aImg->height);
     }
     $value = new Text();
     $value->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize * $scaling);
     $value->SetColor($this->iFontColor);
     // Setup extra size around the graph needed so that the labels
     // doesn't get cut. For this we need to find the largest label.
     // The code below gives a possible a little to large margin. The
     // really, really proper way would be to account for what angle
     // the label are at
     $n = count($this->iLabels);
     if ($n > 0) {
         $maxh = 0;
         $maxw = 0;
         foreach ($this->iLabels as $key => $lbl) {
             $value->Set($lbl);
             $maxw = max($maxw, $value->GetWidth($aImg));
         }
     } else {
         $value->Set('888.888');
         // Dummy value to get width/height
         $maxw = $value->GetWidth($aImg);
     }
     // Add an extra margin of 50% the font size
     $maxw += round($this->iFontSize * $scaling * 0.4);
     $valxmarg = 1.5 * $maxw + 2 * $this->iLabelMargin * $scaling;
     $w = round($this->iSize * $scaling + $valxmarg);
     // Make sure that the width of the legend fits
     $legendwidth = $this->_StrokeLegend($aImg, 0, 0, $scaling, true) + 10 * $scaling;
     $w = max($w, $legendwidth);
     return $w;
 }
 function Stroke(&$aImg)
 {
     $scaling = $this->iAntiAlias ? 2 : 1;
     $value = new Text();
     $value->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize * $scaling);
     $value->SetColor($this->iFontColor);
     $n = count($this->iLabels);
     if ($n > 0) {
         $maxh = 0;
         $maxw = 0;
         foreach ($this->iLabels as $key => $lbl) {
             $value->Set($lbl);
             $maxh = max($maxh, $value->GetHeight($aImg));
             $maxw = max($maxw, $value->GetWidth($aImg) / 2);
         }
     } else {
         $value->Set("180.8");
         $maxh = $value->GetHeight($aImg);
         $maxw = $value->GetWidth($aImg);
     }
     $maxh += round($this->iFontSize * $scaling * 0.5);
     $maxw += round($this->iFontSize * $scaling * 0.5);
     $valxmarg = 2 * $maxw + 2 * $this->iLabelMargin * $scaling;
     $valymarg = 2 * $maxh + 2 * $this->iLabelMargin * $scaling;
     $w = round($this->iSize * $scaling + $valxmarg);
     $legendwidth = $this->_StrokeLegend($aImg, 0, 0, $scaling, true) + 10 * $scaling;
     $w = max($w, $legendwidth);
     $legendheight = round($this->legend->iShow ? 1 : 0);
     $legendheight *= max($this->legend->iCircleRadius * 2, $this->legend->iTxtFontSize * 2) + $this->legend->iMargin + $this->legend->iBottomMargin + 2;
     $legendheight *= $scaling;
     $h = round($this->iSize * $scaling + $valymarg) + $legendheight;
     if ($this->iAntiAlias) {
         $dblImg = new Image($w, $h);
         $dblImg->SetColor($this->iColor);
         $dblImg->FilledRectangle(0, 0, $w, $h);
     } else {
         $dblImg =& $aImg;
         $dblImg->SetTranslation($this->iX - $w / 2, $this->iY - $h / 2);
     }
     if (__DEBUG) {
         $dblImg->SetColor('red');
         $dblImg->Rectangle(0, 0, $w - 1, $h - 1);
     }
     $dblImg->SetColor('black');
     if ($this->iShowBox) {
         $dblImg->SetColor($this->iBoxColor);
         $dblImg->SetLineWeight($this->iBoxWeight);
         $dblImg->Rectangle(0, 0, $w - 1, $h - 1);
         $dblImg->SetLineWeight(1);
     }
     $xc = round($w / 2);
     $yc = round(($h - $legendheight) / 2);
     $this->iSize *= $scaling;
     $ri = $this->iCenterSize / 2;
     $r = round($this->iSize / 2);
     $n = $this->scale->GetNumCirc();
     $ri *= $scaling;
     $rr = round(($r - $ri) / $n);
     for ($i = 1; $i <= $n; ++$i) {
         $this->_ThickCircle($dblImg, $xc, $yc, $rr * $i + $ri, $this->iCircGridWeight, $this->iGridColor1);
     }
     $num = 0;
     if ($this->iType == WINDROSE_TYPEFREE) {
         $this->_StrokeFreeRose($dblImg, $value, $scaling, $xc, $yc, $r, $ri);
     } else {
         if ($this->iOrdinalEncoding == KEYENCODING_CLOCKWISE) {
             if ($this->iType == WINDROSE_TYPE16) {
                 $const1 = 19;
                 $const2 = 16;
             } elseif ($this->iType == WINDROSE_TYPE8) {
                 $const1 = 9;
                 $const2 = 8;
             } else {
                 $const1 = 4;
                 $const2 = 4;
             }
             $tmp = array();
             $n = count($this->iData);
             foreach ($this->iData as $key => $val) {
                 if (is_numeric($key)) {
                     $key = ($const1 - $key) % $const2;
                 }
                 $tmp[$key] = $val;
             }
             $this->iData = $tmp;
         }
         $this->_StrokeRegularRose($dblImg, $value, $scaling, $xc, $yc, $r, $ri);
     }
     $this->scale->iFontSize *= $scaling;
     $this->scale->iZFontSize *= $scaling;
     $this->scale->StrokeLabels($dblImg, $xc, $yc, $ri, $rr);
     $this->_ThickCircle($dblImg, $xc, $yc, $ri, $this->iCircGridWeight, $this->iGridColor1);
     $ww = $w / $scaling;
     $hh = $h / $scaling;
     if ($ww > $aImg->width) {
         JpgraphError::RaiseL(22020);
     }
     $x = $xc;
     $y = $h;
     $this->_StrokeLegend($dblImg, $x, $y, $scaling);
     if ($this->iAntiAlias) {
         $aImg->Copy($dblImg->img, $this->iX - $ww / 2, $this->iY - $hh / 2, 0, 0, $ww, $hh, $w, $h);
     }
     $aImg->SetTranslation(0, 0);
 }
 /**
  * @param Image $aImg
  * @return unknown_type
  */
 function getWidth(Image $aImg)
 {
     if (!$this->ishow) {
         return 0;
     }
     $this->InitSize($aImg);
     $t = new Text();
     $t->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize);
     if ($this->ilayout == 0 || $this->ilayout == 2) {
         $t->Set(sprintf($this->iLabelFormatString, $this->iMin));
         $minw = $t->GetWidth($aImg);
         $t->Set(sprintf($this->iLabelFormatString, $this->iMax));
         $maxw = $t->GetWidth($aImg);
         return $this->imodwidth + $this->ilabelmargin + max($minw, $maxw) + 1;
     }
 }
Beispiel #8
0
 function Stroke(&$aImg, $ax = -1, $ay = -1)
 {
     $w = parent::GetWidth($aImg);
     $h = parent::GetTextHeight($aImg);
     switch ($this->valign) {
         case 'top':
             $sy = $this->y;
             break;
         case 'center':
             $sy = $this->y - $h / 2;
             break;
         case 'bottom':
             $sy = $this->y - $h;
             break;
         default:
             JpGraphError::RaiseL(25052);
             break;
     }
     switch ($this->halign) {
         case 'left':
             $sx = $this->x + $w;
             break;
         case 'center':
             $sx = $this->x + $w / 2;
             break;
         case 'right':
             $sx = $this->x;
             break;
         default:
             JpGraphError::RaiseL(25053);
             break;
     }
     $sx += $this->iSuperMargin;
     $sy += $this->iVertOverlap;
     if ($this->sfont_family == "") {
         if ($this->font_family <= FF_FONT2) {
             if ($this->font_family == FF_FONT0) {
                 $sff = FF_FONT0;
             } elseif ($this->font_family == FF_FONT1) {
                 if ($this->font_style == FS_NORMAL) {
                     $sff = FF_FONT0;
                 } else {
                     $sff = FF_FONT1;
                 }
             } else {
                 $sff = FF_FONT1;
             }
             $sfs = $this->font_style;
             $sfz = $this->font_size;
         } else {
             $sff = $this->font_family;
             $sfs = $this->font_style;
             $sfz = floor($this->font_size * $this->iSuperScale);
             if ($sfz < 8) {
                 $sfz = 8;
             }
         }
         $this->sfont_family = $sff;
         $this->sfont_style = $sfs;
         $this->sfont_size = $sfz;
     } else {
         $sff = $this->sfont_family;
         $sfs = $this->sfont_style;
         $sfz = $this->sfont_size;
     }
     parent::Stroke($aImg, $ax, $ay);
     if ($sff <= FF_FONT2) {
         $sx -= 2;
         $sy += 3;
     }
     $aImg->SetTextAlign('left', 'bottom');
     $aImg->SetFont($sff, $sfs, $sfz);
     $aImg->PushColor($this->color);
     $aImg->StrokeText($sx, $sy, $this->iSuper, $this->iSDir, 'left');
     $aImg->PopColor();
 }
 private function barVPlot($question, $datax, $datay, $width, $height)
 {
     include_once BASE . "jpgraph.php";
     include_once BASE . "jpgraph_bar.php";
     $tFontSize = 11;
     $xFontSize = 6 + $height / $this->amountOfVariants / 30;
     $maxX = 0;
     foreach ($datax as $x) {
         if (($t = strlen($x)) > $maxX) {
             $maxX = $t;
         }
     }
     for ($i = 0; $i < $this->amountOfVariants; $i++) {
         $x =& $datax[$i];
         if (($t = strlen($x)) >= MAXCHARSPERLINE) {
             $index = strrpos(substr($x, 0, MAXCHARSPERLINE - 1), ' ');
             if ($index === false) {
                 $index = MAXCHARSPERLINE - 3;
             }
             $x[$index] = "\n";
             if ($t > $index + MAXCHARSPERLINE) {
                 $x = substr($x, 0, $index + MAXCHARSPERLINE - 3) . "...";
             }
         }
     }
     unset($x);
     // Set the basic parame graph
     $graph = new Graph($width, $height, 'auto');
     $graph->SetScale("textlin", 0, 100);
     //if (amountOfVariants>5) $xFontSize--;
     $lm = 0;
     foreach ($datax as $x) {
         $linia = strtok($x, "\n");
         while ($linia != '') {
             $t = new Text($linia);
             $t->SetFont(FF_COMIC, FS_NORMAL, $xFontSize);
             $lineWidth = $t->GetWidth($graph->img);
             if ($lineWidth > $lm) {
                 $lm = $lineWidth;
             }
             //echo $linia.$lineWidth."<BR>";
             $linia = strtok("\n");
         }
     }
     // Rotate graph 90 degrees and set margin
     $graph->SetMargin(35, 20, 40, $lm + 15);
     // Set white margin color
     $graph->SetMarginColor('gray@0.95');
     // Setup title
     //$graph->title->Set($question);
     //$graph->title->SetMargin(10);
     //$graph->title->SetFont(FF_VERDANA, FS_BOLD, $tFontSize);
     $graph->tabtitle->Set($question);
     $graph->tabtitle->SetFont(FF_ARIAL, FS_BOLD, $tFontSize);
     $tWidth = $graph->tabtitle->GetWidth($graph->img);
     //if ($graph->title->GetWidth($graph->img)>$width) $graph->title->SetFont(FF_VERDANA, FS_BOLD, $tFontSize-2);
     if ($tWidth > $width) {
         $index = strrpos(substr($question, 0, ($len = strlen($question)) / 2 + 5), ' ');
         //echo $index;
         if ($index === false) {
             $index = $len / 2 - 3;
         }
         $question[$index] = "\n";
         $graph->tabtitle->Set($question);
         $graph->tabtitle->SetFont(FF_ARIAL, FS_BOLD, $tFontSize -= 2);
     }
     // Setup X-axis
     $graph->xaxis->SetFont(FF_COMIC, FS_NORMAL, $xFontSize);
     $graph->xaxis->SetTickLabels($datax);
     $graph->xaxis->SetColor('black');
     $graph->xaxis->SetLabelAngle(80);
     // Some extra margin looks nicer
     $graph->xaxis->SetLabelMargin(10);
     // Label align for X-axis
     $graph->xaxis->SetLabelAlign('center', 'top');
     // Add some grace to y-axis so the bars doesn't go
     // all the way to the end of the plot area
     $graph->yaxis->scale->SetGrace(10);
     //$graph->yaxis->SetPos('max');
     //$graph->yaxis->SetLabelAlign('center', 'top');
     //$graph->yaxis->SetLabelSide('SIDE_RIGHT');
     $graph->yaxis->SetLabelFormat('%2d%%');
     // Now create a bar pot
     $bplot = new BarPlot($datay);
     $bplot->SetWidth(0.4);
     // We want to display the value of each bar at the top
     $bplot->value->Show();
     $bplot->value->SetFont(FF_VERDANA, FS_NORMAL, $xFontSize);
     //$bplot->SetShadow("black@0.1",2,2);
     //$bplot->value->SetAlign('left','center');
     $bplot->value->SetColor("black");
     $bplot->value->SetFormat('%d%%');
     //$bplot->SetValuePos('max');
     //$graph->SetMarginColor('green');
     // Box around plotarea
     $graph->SetBox();
     $graph->SetFrame(false);
     //	$graph->SetShadow();
     // Setup the X and Y grid
     $graph->ygrid->SetFill(true, '#DDDDDD@0.5', '#BBBBBB@0.5');
     $graph->ygrid->SetLineStyle('dashed');
     $graph->ygrid->SetColor('gray');
     $graph->xgrid->Show();
     $graph->xgrid->SetLineStyle('dashed');
     $graph->xgrid->SetColor('gray');
     $fcol = '#440000';
     $tcol = '#FF9090';
     $bplot->SetFillGradient($fcol, $tcol, GRAD_LEFT_REFLECTION);
     // Set line weigth to 0 so that there are no border
     // around each bar
     $bplot->SetWeight(0);
     $graph->Add($bplot);
     // .. and stroke the graph
     return $graph->Stroke("images/raporty/{$this->id_pytanie}V.png");
     //header("Content-type: image/png");
     //ImagePng($im);
 }