本文整理汇总了PHP中Gradient::FilledRectangle方法的典型用法代码示例。如果您正苦于以下问题:PHP Gradient::FilledRectangle方法的具体用法?PHP Gradient::FilledRectangle怎么用?PHP Gradient::FilledRectangle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Gradient
的用法示例。
在下文中一共展示了Gradient::FilledRectangle方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: StrokeBackgroundGrad
function StrokeBackgroundGrad()
{
if ($this->bkg_gradtype < 0) {
return;
}
$grad = new Gradient($this->img);
if ($this->bkg_gradstyle == BGRAD_PLOT) {
$xl = $this->img->left_margin;
$yt = $this->img->top_margin;
$xr = $xl + $this->img->plotwidth + 1;
$yb = $yt + $this->img->plotheight;
$grad->FilledRectangle($xl, $yt, $xr, $yb, $this->bkg_gradfrom, $this->bkg_gradto, $this->bkg_gradtype);
} else {
$xl = 0;
$yt = 0;
$xr = $xl + $this->img->width - 1;
$yb = $yt + $this->img->height - 1;
if ($this->doshadow) {
$xr -= $this->shadow_width;
$yb -= $this->shadow_width;
}
if ($this->doframe) {
$yt += $this->frame_weight;
$yb -= $this->frame_weight;
$xl += $this->frame_weight;
$xr -= $this->frame_weight;
}
$aa = $this->img->SetAngle(0);
$grad->FilledRectangle($xl, $yt, $xr, $yb, $this->bkg_gradfrom, $this->bkg_gradto, $this->bkg_gradtype);
$aa = $this->img->SetAngle($aa);
}
}
示例2: Stroke
function Stroke(&$aImg)
{
if ($this->hide) {
return;
}
$aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
if ($this->reverse) {
$this->txtcol = array_reverse($this->txtcol);
}
$n = count($this->txtcol);
if ($n == 0) {
return;
}
// Find out the max width and height of each column to be able
// to size the legend box.
$numcolumns = $n > $this->layout_n ? $this->layout_n : $n;
for ($i = 0; $i < $numcolumns; ++$i) {
$colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_size;
$colheight[$i] = 0;
}
// Find our maximum height in each row
$rows = -1;
for ($i = 0; $i < $n; ++$i) {
$h = max($this->mark_abs_size, $aImg->GetTextHeight($this->txtcol[$i][0])) + $this->ymargin;
if ($i % $numcolumns == 0) {
$rows++;
$rowheight[$rows] = 0;
}
$rowheight[$rows] = max($rowheight[$rows], $h);
}
$abs_height = 0;
for ($i = 0; $i <= $rows; ++$i) {
$abs_height += $rowheight[$i];
}
// Make sure that the height is at least as high as mark size + ymargin
$abs_height = max($abs_height, $this->mark_abs_size + $this->ymargin);
$abs_height += 2 * $this->ymargin + $this->mark_abs_size / 2;
// Find out the maximum width in each column
for ($i = $numcolumns; $i < $n; ++$i) {
$colwidth[$i % $numcolumns] = max($aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_size, $colwidth[$i % $numcolumns]);
}
// Get the total width
$mtw = 0;
for ($i = 0; $i < $numcolumns; ++$i) {
$mtw += $colwidth[$i];
}
// Find out maximum width we need for legend box
$abs_width = $mtw + $this->xlmargin;
if ($this->xabspos === -1 && $this->yabspos === -1) {
$this->xabspos = $this->xpos * $aImg->width;
$this->yabspos = $this->ypos * $aImg->height;
}
// Positioning of the legend box
if ($this->halign == "left") {
$xp = $this->xabspos;
} elseif ($this->halign == "center") {
$xp = $this->xabspos - $abs_width / 2;
} else {
$xp = $aImg->width - $this->xabspos - $abs_width;
}
$yp = $this->yabspos;
if ($this->valign == "center") {
$yp -= $abs_height / 2;
} elseif ($this->valign == "bottom") {
$yp -= $abs_height;
}
// Stroke legend box
$aImg->SetColor($this->color);
$aImg->SetLineWeight($this->frameweight);
$aImg->SetLineStyle('solid');
if ($this->shadow) {
$aImg->ShadowRectangle($xp, $yp, $xp + $abs_width + $this->shadow_width, $yp + $abs_height + $this->shadow_width, $this->fill_color, $this->shadow_width, $this->shadow_color);
} else {
$aImg->SetColor($this->fill_color);
$aImg->FilledRectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
$aImg->SetColor($this->color);
$aImg->Rectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
}
// x1,y1 is the position for the legend mark
$aImg->SetLineWeight($this->weight);
$x1 = $xp + $this->mark_abs_size + $this->xlmargin;
$y1 = $yp + $this->mark_abs_size / 2 + $this->ymargin / 3;
$f2 = round($aImg->GetTextHeight('X') / 2);
$grad = new Gradient($aImg);
// Now stroke each legend in turn
// Each plot has added the following information to the legend
// p[0] = Legend text
// p[1] = Color,
// p[2] = For markers a reference to the PlotMark object
// p[3] = For lines the line style, for gradient the negative gradient style
// p[4] = CSIM target
// p[5] = CSIM Alt text
$i = 1;
$row = 0;
foreach ($this->txtcol as $p) {
$x1 = round($x1);
$y1 = round($y1);
if ($p[2] != "" && $p[2]->GetType() > -1) {
// Make a plot mark legend
$aImg->SetColor($p[1]);
//.........这里部分代码省略.........
示例3: Stroke
function Stroke(&$aImg)
{
// Constant
$fillBoxFrameWeight = 1;
if ($this->hide) {
return;
}
$aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
if ($this->reverse) {
$this->txtcol = array_reverse($this->txtcol);
}
$n = count($this->txtcol);
if ($n == 0) {
return;
}
// Find out the max width and height of each column to be able
// to size the legend box.
$numcolumns = $n > $this->layout_n ? $this->layout_n : $n;
for ($i = 0; $i < $numcolumns; ++$i) {
$colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize;
$colheight[$i] = 0;
}
// Find our maximum height in each row
$rows = 0;
$rowheight[0] = 0;
for ($i = 0; $i < $n; ++$i) {
$h = max($this->mark_abs_vsize, $aImg->GetTextHeight($this->txtcol[$i][0])) + $this->ymargin;
if ($i % $numcolumns == 0) {
$rows++;
$rowheight[$rows - 1] = 0;
}
$rowheight[$rows - 1] = max($rowheight[$rows - 1], $h);
}
$abs_height = 0;
for ($i = 0; $i < $rows; ++$i) {
$abs_height += $rowheight[$i];
}
// Make sure that the height is at least as high as mark size + ymargin
$abs_height = max($abs_height, $this->mark_abs_vsize);
// We add 3 extra pixels height to compensate for the difficult in
// calculating font height
$abs_height += $this->ymargin + 3;
// Find out the maximum width in each column
for ($i = $numcolumns; $i < $n; ++$i) {
$colwidth[$i % $numcolumns] = max($aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize, $colwidth[$i % $numcolumns]);
}
// Get the total width
$mtw = 0;
for ($i = 0; $i < $numcolumns; ++$i) {
$mtw += $colwidth[$i];
}
// Find out maximum width we need for legend box
$abs_width = $mtw + $this->xlmargin;
if ($this->xabspos === -1 && $this->yabspos === -1) {
$this->xabspos = $this->xpos * $aImg->width;
$this->yabspos = $this->ypos * $aImg->height;
}
// Positioning of the legend box
if ($this->halign == 'left') {
$xp = $this->xabspos;
} elseif ($this->halign == 'center') {
$xp = $this->xabspos - $abs_width / 2;
} else {
$xp = $aImg->width - $this->xabspos - $abs_width;
}
$yp = $this->yabspos;
if ($this->valign == 'center') {
$yp -= $abs_height / 2;
} elseif ($this->valign == 'bottom') {
$yp -= $abs_height;
}
// Stroke legend box
$aImg->SetColor($this->color);
$aImg->SetLineWeight($this->frameweight);
$aImg->SetLineStyle('solid');
if ($this->shadow) {
$aImg->ShadowRectangle($xp, $yp, $xp + $abs_width + $this->shadow_width, $yp + $abs_height + $this->shadow_width, $this->fill_color, $this->shadow_width, $this->shadow_color);
} else {
$aImg->SetColor($this->fill_color);
$aImg->FilledRectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
$aImg->SetColor($this->color);
$aImg->Rectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
}
// x1,y1 is the position for the legend mark
$x1 = $xp + $this->mark_abs_hsize + $this->xlmargin;
$y1 = $yp + $this->ymargin;
$f2 = round($aImg->GetTextHeight('X') / 2);
$grad = new Gradient($aImg);
$patternFactory = null;
// Now stroke each legend in turn
// Each plot has added the following information to the legend
// p[0] = Legend text
// p[1] = Color,
// p[2] = For markers a reference to the PlotMark object
// p[3] = For lines the line style, for gradient the negative gradient style
// p[4] = CSIM target
// p[5] = CSIM Alt text
$i = 1;
$row = 0;
foreach ($this->txtcol as $p) {
//.........这里部分代码省略.........
示例4: Stroke
function Stroke(&$img, &$xscale, &$yscale)
{
$img->SetLineWeight($this->weight);
for ($i = 0; $i < $this->numpoints - 1; $i++) {
$accy = 0;
$accy_neg = 0;
for ($j = 0; $j < $this->nbrplots; ++$j) {
$img->SetColor($this->plots[$j]->color);
if ($this->plots[$j]->coords[0][$i] > 0) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy);
$accyt = $yscale->Translate($accy);
$accy += $this->plots[$j]->coords[0][$i];
} else {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg);
$accyt = $yscale->Translate($accy_neg);
$accy_neg += $this->plots[$j]->coords[0][$i];
}
$xt = $xscale->Translate($i);
//echo "$i => $xt<br>";
if ($this->abswidth > -1) {
$abswidth = $this->abswidth;
} else {
$abswidth = round($this->width * $xscale->scale_factor, 0);
}
$pts = array($xt, $accyt, $xt, $yt, $xt + $abswidth, $yt, $xt + $abswidth, $accyt);
if ($this->plots[$j]->grad) {
$grad = new Gradient($img);
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style);
} elseif ($this->plots[$j]->fill_color) {
$img->SetColor($this->plots[$j]->fill_color);
$img->FilledPolygon($pts);
$img->SetColor($this->plots[$j]->color);
}
if ($this->bar_shadow) {
$ssh = $this->bar_shadow_hsize;
$ssv = $this->bar_shadow_vsize;
// Create points to create a "upper-right" shadow
$sp[0] = $pts[6];
$sp[1] = $pts[7];
$sp[2] = $pts[4];
$sp[3] = $pts[5];
$sp[4] = $pts[2];
$sp[5] = $pts[3];
$sp[6] = $pts[2] + $ssh;
$sp[7] = $pts[3] - $ssv;
$sp[8] = $pts[4] + $ssh;
$sp[9] = $pts[5] - $ssv;
$sp[10] = $pts[6] + $ssh;
$sp[11] = $pts[7] - $ssv;
$img->SetColor($this->bar_shadow_color);
$img->FilledPolygon($sp, 4);
}
if ($i < count($this->plots[$j]->csimtargets)) {
// Create the client side image map
$rpts = $img->ArrRotate($pts);
$csimcoord = round($rpts[0]) . ", " . round($rpts[1]);
for ($k = 1; $k < 4; ++$k) {
$csimcoord .= ", " . round($rpts[2 * $k]) . ", " . round($rpts[2 * $k + 1]);
}
$this->csimareas .= '<area shape="poly" coords="' . $csimcoord . '" ';
$this->csimareas .= " href=\"" . $this->plots[$j]->csimtargets[$i] . "\"";
if (!empty($this->plots[$j]->csimalts[$i])) {
$sval = sprintf($this->plots[$j]->csimalts[$i], $this->plots[$j]->coords[0][$i]);
$this->csimareas .= " alt=\"{$sval}\" title=\"{$sval}\" ";
}
$this->csimareas .= ">\n";
}
$pts[] = $pts[0];
$pts[] = $pts[1];
$img->Polygon($pts);
}
$x = $pts[2] + ($pts[4] - $pts[2]) / 2;
$y = $yscale->Translate($accy);
if ($this->bar_shadow) {
$x += $ssh;
}
$this->value->Stroke($img, $accy, $x, $y);
$accy = 0;
$accy_neg = 0;
for ($j = 0; $j < $this->nbrplots; ++$j) {
if ($this->plots[$j]->coords[0][$i] > 0) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy);
$accyt = $yscale->Translate($accy);
$y = $accyt - ($accyt - $yt) / 2;
$accy += $this->plots[$j]->coords[0][$i];
} else {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg);
$accyt = $yscale->Translate($accy_neg);
$y = 0;
$accy_neg += $this->plots[$j]->coords[0][$i];
}
$this->plots[$j]->value->SetAlign("center", "center");
$this->plots[$j]->value->SetMargin(0);
$this->plots[$j]->value->Stroke($img, $this->plots[$j]->coords[0][$i], $x, $y);
}
}
return true;
}
示例5: Stroke
function Stroke(&$img, &$xscale, &$yscale)
{
$pattern = NULL;
$img->SetLineWeight($this->weight);
for ($i = 0; $i < $this->numpoints - 1; $i++) {
$accy = 0;
$accy_neg = 0;
for ($j = 0; $j < $this->nbrplots; ++$j) {
$img->SetColor($this->plots[$j]->color);
if ($this->plots[$j]->coords[0][$i] >= 0) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy);
$accyt = $yscale->Translate($accy);
$accy += $this->plots[$j]->coords[0][$i];
} else {
//if ( $this->plots[$j]->coords[0][$i] < 0 || $accy_neg < 0 ) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg);
$accyt = $yscale->Translate($accy_neg);
$accy_neg += $this->plots[$j]->coords[0][$i];
}
$xt = $xscale->Translate($i);
if ($this->abswidth > -1) {
$abswidth = $this->abswidth;
} else {
$abswidth = round($this->width * $xscale->scale_factor, 0);
}
$pts = array($xt, $accyt, $xt, $yt, $xt + $abswidth, $yt, $xt + $abswidth, $accyt);
if ($this->bar_shadow) {
$ssh = $this->bar_shadow_hsize;
$ssv = $this->bar_shadow_vsize;
// We must also differ if we are a positive or negative bar.
if ($j === 0) {
// This gets extra complicated since we have to
// see all plots to see if we are negative. It could
// for example be that all plots are 0 until the very
// last one. We therefore need to save the initial setup
// for both the negative and positive case
// In case the final bar is positive
$sp[0] = $pts[6] + 1;
$sp[1] = $pts[7];
$sp[2] = $pts[6] + $ssh;
$sp[3] = $pts[7] - $ssv;
// In case the final bar is negative
$nsp[0] = $pts[0];
$nsp[1] = $pts[1];
$nsp[2] = $pts[0] + $ssh;
$nsp[3] = $pts[1] - $ssv;
$nsp[4] = $pts[6] + $ssh;
$nsp[5] = $pts[7] - $ssv;
$nsp[10] = $pts[6] + 1;
$nsp[11] = $pts[7];
}
if ($j === $this->nbrplots - 1) {
// If this is the last plot of the bar and
// the total value is larger than 0 then we
// add the shadow.
if (is_array($this->bar_shadow_color)) {
$numcolors = count($this->bar_shadow_color);
if ($numcolors == 0) {
JpGraphError::Raise('You have specified an empty array for shadow colors in the bar plot.');
}
$img->PushColor($this->bar_shadow_color[$i % $numcolors]);
} else {
$img->PushColor($this->bar_shadow_color);
}
if ($accy > 0) {
$sp[4] = $pts[4] + $ssh;
$sp[5] = $pts[5] - $ssv;
$sp[6] = $pts[2] + $ssh;
$sp[7] = $pts[3] - $ssv;
$sp[8] = $pts[2];
$sp[9] = $pts[3] - 1;
$sp[10] = $pts[4] + 1;
$sp[11] = $pts[5];
$img->FilledPolygon($sp, 4);
} elseif ($accy_neg < 0) {
$nsp[6] = $pts[4] + $ssh;
$nsp[7] = $pts[5] - $ssv;
$nsp[8] = $pts[4] + 1;
$nsp[9] = $pts[5];
$img->FilledPolygon($nsp, 4);
}
$img->PopColor();
}
}
// If value is NULL or 0, then don't draw a bar at all
if ($this->plots[$j]->coords[0][$i] == 0) {
continue;
}
if ($this->plots[$j]->grad) {
$grad = new Gradient($img);
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style);
} else {
if (is_array($this->plots[$j]->fill_color)) {
$numcolors = count($this->plots[$j]->fill_color);
$img->SetColor($this->plots[$j]->fill_color[$i % $numcolors]);
} else {
$img->SetColor($this->plots[$j]->fill_color);
}
$img->FilledPolygon($pts);
$img->SetColor($this->plots[$j]->color);
//.........这里部分代码省略.........
示例6: Stroke
//.........这里部分代码省略.........
}
}
// If value is NULL or 0, then don't draw a bar at all
if ($this->plots[$j]->coords[0][$i] == 0) {
continue;
}
if ($this->plots[$j]->grad) {
if ($grad === null) {
$grad = new Gradient($img);
}
if (is_array($this->plots[$j]->grad_fromcolor)) {
// The first argument (grad_fromcolor) can be either an array or a single color. If it is an array
// then we have two choices. It can either a) be a single color specified as an RGB triple or it can be
// an array to specify both (from, to style) for each individual bar. The way to know the difference is
// to investgate the first element. If this element is an integer [0,255] then we assume it is an RGB
// triple.
$ng = count($this->plots[$j]->grad_fromcolor);
if ($ng === 3) {
if (is_numeric($this->plots[$j]->grad_fromcolor[0]) && $this->plots[$j]->grad_fromcolor[0] > 0 && $this->plots[$j]->grad_fromcolor[0] < 256) {
// RGB Triple
$fromcolor = $this->plots[$j]->grad_fromcolor;
$tocolor = $this->plots[$j]->grad_tocolor;
$style = $this->plots[$j]->grad_style;
} else {
$fromcolor = $this->plots[$j]->grad_fromcolor[$i % $ng][0];
$tocolor = $this->plots[$j]->grad_fromcolor[$i % $ng][1];
$style = $this->plots[$j]->grad_fromcolor[$i % $ng][2];
}
} else {
$fromcolor = $this->plots[$j]->grad_fromcolor[$i % $ng][0];
$tocolor = $this->plots[$j]->grad_fromcolor[$i % $ng][1];
$style = $this->plots[$j]->grad_fromcolor[$i % $ng][2];
}
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $fromcolor, $tocolor, $style);
} else {
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style);
}
} else {
if (is_array($this->plots[$j]->fill_color)) {
$numcolors = count($this->plots[$j]->fill_color);
$fillcolor = $this->plots[$j]->fill_color[$i % $numcolors];
// If the bar is specified to be non filled then the fill color is false
if ($fillcolor !== false) {
$img->SetColor($this->plots[$j]->fill_color[$i % $numcolors]);
}
} else {
$fillcolor = $this->plots[$j]->fill_color;
if ($fillcolor !== false) {
$img->SetColor($this->plots[$j]->fill_color);
}
}
if ($fillcolor !== false) {
$img->FilledPolygon($pts);
}
}
$img->SetColor($this->plots[$j]->color);
// Stroke the pattern
if ($this->plots[$j]->iPattern > -1) {
if ($pattern === NULL) {
$pattern = new RectPatternFactory();
}
$prect = $pattern->Create($this->plots[$j]->iPattern, $this->plots[$j]->iPatternColor, 1);
$prect->SetDensity($this->plots[$j]->iPatternDensity);
if ($this->plots[$j]->coords[0][$i] < 0) {
$rx = $pts[0];
$ry = $pts[1];
示例7: Stroke
function Stroke(&$img, &$xscale, &$yscale)
{
$img->SetColor($this->color);
$img->SetLineWeight($this->weight);
$numbars = count($this->coords[0]);
if ($yscale->scale[0] >= 0) {
$zp = $yscale->scale_abs[0];
} else {
$zp = $yscale->Translate(0.0);
}
$abswidth = round($this->width * $xscale->scale_factor, 0);
for ($i = 0; $i < $numbars; $i++) {
$x = $xscale->Translate($i + 1);
$pts = array($x, $zp, $x, $yscale->Translate($this->coords[0][$i]), $x + $abswidth, $yscale->Translate($this->coords[0][$i]), $x + $abswidth, $zp);
if ($this->grad) {
$grad = new Gradient($img);
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->grad_fromcolor, $this->grad_tocolor, $this->grad_style);
} elseif ($this->fill_color) {
$img->SetColor($this->fill_color);
$img->FilledPolygon($pts, 4);
$img->SetColor($this->color);
}
$img->Polygon($pts, 4);
}
return true;
}
示例8: Stroke
function Stroke($aImg)
{
// Constant
$fillBoxFrameWeight = 1;
if ($this->hide) {
return;
}
$aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
if ($this->reverse) {
$this->txtcol = array_reverse($this->txtcol);
}
$n = count($this->txtcol);
if ($n == 0) {
return;
}
// Find out the max width and height of each column to be able
// to size the legend box.
$numcolumns = $n > $this->layout_n ? $this->layout_n : $n;
for ($i = 0; $i < $numcolumns; ++$i) {
$colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize;
$colheight[$i] = 0;
}
// Find our maximum height in each row
$rows = 0;
$rowheight[0] = 0;
for ($i = 0; $i < $n; ++$i) {
$h = max($this->mark_abs_vsize, $aImg->GetTextHeight($this->txtcol[$i][0])) + $this->ylinespacing;
// Makes sure we always have a minimum of 1/4 (1/2 on each side) of the mark as space
// between two vertical legend entries
//$h = round(max($h,$this->mark_abs_vsize+$this->ymargin));
//echo "Textheight #$i: tetxheight=".$aImg->GetTextHeight($this->txtcol[$i][0]).', ';
//echo "h=$h ({$this->mark_abs_vsize},{$this->ymargin})<br>";
if ($i % $numcolumns == 0) {
$rows++;
$rowheight[$rows - 1] = 0;
}
$rowheight[$rows - 1] = max($rowheight[$rows - 1], $h) + 1;
}
$abs_height = 0;
for ($i = 0; $i < $rows; ++$i) {
$abs_height += $rowheight[$i];
}
// Make sure that the height is at least as high as mark size + ymargin
$abs_height = max($abs_height, $this->mark_abs_vsize);
$abs_height += $this->ybottom_margin;
// Find out the maximum width in each column
for ($i = $numcolumns; $i < $n; ++$i) {
$colwidth[$i % $numcolumns] = max($aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize, $colwidth[$i % $numcolumns]);
}
// Get the total width
$mtw = 0;
for ($i = 0; $i < $numcolumns; ++$i) {
$mtw += $colwidth[$i];
}
// remove the last rows interpace margin (since there is no next row)
$abs_height -= $this->ylinespacing;
// Find out maximum width we need for legend box
$abs_width = $mtw + $this->xlmargin + ($numcolumns - 1) * $this->mark_abs_hsize;
if ($this->xabspos === -1 && $this->yabspos === -1) {
$this->xabspos = $this->xpos * $aImg->width;
$this->yabspos = $this->ypos * $aImg->height;
}
// Positioning of the legend box
if ($this->halign == 'left') {
$xp = $this->xabspos;
} elseif ($this->halign == 'center') {
$xp = $this->xabspos - $abs_width / 2;
} else {
$xp = $aImg->width - $this->xabspos - $abs_width;
}
$yp = $this->yabspos;
if ($this->valign == 'center') {
$yp -= $abs_height / 2;
} elseif ($this->valign == 'bottom') {
$yp -= $abs_height;
}
// Stroke legend box
$aImg->SetColor($this->color);
$aImg->SetLineWeight($this->frameweight);
$aImg->SetLineStyle('solid');
if ($this->shadow) {
$aImg->ShadowRectangle($xp, $yp, $xp + $abs_width + $this->shadow_width + 2, $yp + $abs_height + $this->shadow_width + 2, $this->fill_color, $this->shadow_width + 2, $this->shadow_color);
} else {
$aImg->SetColor($this->fill_color);
$aImg->FilledRectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
$aImg->SetColor($this->color);
$aImg->Rectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
}
if ($this->bkg_gradtype >= 0) {
$grad = new Gradient($aImg);
$grad->FilledRectangle($xp + 1, $yp + 1, $xp + $abs_width - 3, $yp + $abs_height - 3, $this->bkg_gradfrom, $this->bkg_gradto, $this->bkg_gradtype);
}
// x1,y1 is the position for the legend marker + text
// The vertical position is the baseline position for the text
// and every marker is adjusted acording to that.
// For multiline texts this get more complicated.
$x1 = $xp + $this->xlmargin;
$y1 = $yp + $rowheight[0] - $this->ylinespacing + 2;
// The ymargin is included in rowheight
// Now, y1 is the bottom vertical position of the first legend, i.e if
//.........这里部分代码省略.........
示例9: Stroke
function Stroke(&$img, &$xscale, &$yscale)
{
$img->SetLineWeight($this->weight);
for ($i = 0; $i < $this->numpoints - 1; $i++) {
$accy = 0;
$accy_neg = 0;
for ($j = 0; $j < $this->nbrplots; ++$j) {
$img->SetColor($this->plots[$j]->color);
if ($this->plots[$j]->coords[0][$i] > 0) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy);
$accyt = $yscale->Translate($accy);
$accy += $this->plots[$j]->coords[0][$i];
} else {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg);
$accyt = $yscale->Translate($accy_neg);
$accy_neg += $this->plots[$j]->coords[0][$i];
}
$xt = $xscale->Translate($i);
$abswidth = round($this->width * $xscale->scale_factor, 0);
$pts = array($xt, $accyt, $xt, $yt, $xt + $abswidth, $yt, $xt + $abswidth, $accyt);
if ($this->plots[$j]->grad) {
$grad = new Gradient($img);
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style);
} elseif ($this->plots[$j]->fill_color) {
$img->SetColor($this->plots[$j]->fill_color);
$img->FilledPolygon($pts, 4);
$img->SetColor($this->plots[$j]->color);
}
if ($this->bar_shadow) {
$ssh = $this->bar_shadow_hsize;
$ssv = $this->bar_shadow_vsize;
// Create points to create a "upper-right" shadow
$sp[0] = $pts[6];
$sp[1] = $pts[7];
$sp[2] = $pts[4];
$sp[3] = $pts[5];
$sp[4] = $pts[2];
$sp[5] = $pts[3];
$sp[6] = $pts[2] + $ssh;
$sp[7] = $pts[3] - $ssv;
$sp[8] = $pts[4] + $ssh;
$sp[9] = $pts[5] - $ssv;
$sp[10] = $pts[6] + $ssh;
$sp[11] = $pts[7] - $ssv;
$img->SetColor($this->bar_shadow_color);
$img->FilledPolygon($sp, 4);
}
if ($i < count($this->plots[$j]->csimtargets)) {
$this->csimareas .= "<area shape=\"rect\" coords=\"";
// Hmmm, this is fishy. Fixes a bug in Opera whereby if Y2<Y1 or X2<X1 the csim doesn't work
// This means that the area MUST specify top left and bottom right corners
if ($pts[3] < $pts[7]) {
if ($pts[2] < $pts[6]) {
$this->csimareas .= "{$pts['2']}, {$pts['3']}, {$pts['6']}, {$pts['7']}\"";
} else {
$this->csimareas .= "{$pts['6']}, {$pts['3']}, {$pts['2']}, {$pts['7']}\"";
}
} else {
if ($pts[2] < $pts[6]) {
$this->csimareas .= "{$pts['2']}, {$pts['7']}, {$pts['6']}, {$pts['3']}\"";
} else {
$this->csimareas .= "{$pts['6']}, {$pts['7']}, {$pts['2']}, {$pts['3']}\"";
}
}
$this->csimareas .= " href=\"" . $this->plots[$j]->csimtargets[$i] . "\"";
if (!empty($this->plots[$j]->csimalts[$i])) {
$sval = sprintf($this->plots[$j]->csimalts[$i], $this->plots[$j]->coords[0][$i]);
$this->csimareas .= " alt=\"{$sval}\"";
}
$this->csimareas .= ">\r\n";
}
$img->Polygon($pts, 4);
}
$yt = $yscale->Translate($accy);
if ($this->show_value) {
$sval = sprintf($this->show_value_format, $accy);
$txt = new Text($sval);
$txt->SetFont($this->show_value_ff, $this->show_value_fs, $this->show_value_fsize);
$txt->SetColor($this->show_value_color);
$x = $pts[2] + ($pts[4] - $pts[2]) / 2;
if ($this->bar_shadow) {
$x += $ssh;
}
$txt->Pos($x, $yt - $this->show_value_margin);
$txt->Align("center", "bottom");
$txt->SetOrientation($this->show_value_angle);
$txt->Stroke($img);
}
}
return true;
}
示例10: Stroke
function Stroke(&$img, &$xscale, &$yscale)
{
$pattern = NULL;
$img->SetLineWeight($this->weight);
for ($i = 0; $i < $this->numpoints - 1; $i++) {
$accy = 0;
$accy_neg = 0;
for ($j = 0; $j < $this->nbrplots; ++$j) {
$img->SetColor($this->plots[$j]->color);
if ($this->plots[$j]->coords[0][$i] >= 0) {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy);
$accyt = $yscale->Translate($accy);
$accy += $this->plots[$j]->coords[0][$i];
} else {
$yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg);
$accyt = $yscale->Translate($accy_neg);
$accy_neg += $this->plots[$j]->coords[0][$i];
}
$xt = $xscale->Translate($i);
if ($this->abswidth > -1) {
$abswidth = $this->abswidth;
} else {
$abswidth = round($this->width * $xscale->scale_factor, 0);
}
$pts = array($xt, $accyt, $xt, $yt, $xt + $abswidth, $yt, $xt + $abswidth, $accyt);
if ($this->bar_shadow) {
$ssh = $this->bar_shadow_hsize;
$ssv = $this->bar_shadow_vsize;
if ($j === 0) {
$sp[0] = $pts[6] + 1;
$sp[1] = $pts[7];
$sp[2] = $pts[6] + $ssh;
$sp[3] = $pts[7] - $ssv;
$nsp[0] = $pts[0];
$nsp[1] = $pts[1];
$nsp[2] = $pts[0] + $ssh;
$nsp[3] = $pts[1] - $ssv;
$nsp[4] = $pts[6] + $ssh;
$nsp[5] = $pts[7] - $ssv;
$nsp[10] = $pts[6] + 1;
$nsp[11] = $pts[7];
}
if ($j === $this->nbrplots - 1) {
if (is_array($this->bar_shadow_color)) {
$numcolors = count($this->bar_shadow_color);
if ($numcolors == 0) {
JpGraphError::RaiseL(2013);
}
$img->PushColor($this->bar_shadow_color[$i % $numcolors]);
} else {
$img->PushColor($this->bar_shadow_color);
}
if ($accy > 0) {
$sp[4] = $pts[4] + $ssh;
$sp[5] = $pts[5] - $ssv;
$sp[6] = $pts[2] + $ssh;
$sp[7] = $pts[3] - $ssv;
$sp[8] = $pts[2];
$sp[9] = $pts[3] - 1;
$sp[10] = $pts[4] + 1;
$sp[11] = $pts[5];
$img->FilledPolygon($sp, 4);
} elseif ($accy_neg < 0) {
$nsp[6] = $pts[4] + $ssh;
$nsp[7] = $pts[5] - $ssv;
$nsp[8] = $pts[4] + 1;
$nsp[9] = $pts[5];
$img->FilledPolygon($nsp, 4);
}
$img->PopColor();
}
}
if ($this->plots[$j]->coords[0][$i] == 0) {
continue;
}
if ($this->plots[$j]->grad) {
$grad = new Gradient($img);
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style);
} else {
if (is_array($this->plots[$j]->fill_color)) {
$numcolors = count($this->plots[$j]->fill_color);
$fillcolor = $this->plots[$j]->fill_color[$i % $numcolors];
if ($fillcolor !== false) {
$img->SetColor($this->plots[$j]->fill_color[$i % $numcolors]);
}
} else {
$fillcolor = $this->plots[$j]->fill_color;
if ($fillcolor !== false) {
$img->SetColor($this->plots[$j]->fill_color);
}
}
if ($fillcolor !== false) {
$img->FilledPolygon($pts);
}
$img->SetColor($this->plots[$j]->color);
}
if ($this->plots[$j]->iPattern > -1) {
if ($pattern === NULL) {
$pattern = new RectPatternFactory();
}
//.........这里部分代码省略.........
示例11: Stroke
function Stroke(&$aImg)
{
$fillBoxFrameWeight = 1;
if ($this->hide) {
return;
}
$aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
if ($this->reverse) {
$this->txtcol = array_reverse($this->txtcol);
}
$n = count($this->txtcol);
if ($n == 0) {
return;
}
$numcolumns = $n > $this->layout_n ? $this->layout_n : $n;
for ($i = 0; $i < $numcolumns; ++$i) {
$colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize;
$colheight[$i] = 0;
}
$rows = 0;
$rowheight[0] = 0;
for ($i = 0; $i < $n; ++$i) {
$h = max($this->mark_abs_vsize, $aImg->GetTextHeight($this->txtcol[$i][0])) + $this->ymargin;
if ($i % $numcolumns == 0) {
$rows++;
$rowheight[$rows - 1] = 0;
}
$rowheight[$rows - 1] = max($rowheight[$rows - 1], $h);
}
$abs_height = 0;
for ($i = 0; $i < $rows; ++$i) {
$abs_height += $rowheight[$i];
}
$abs_height = max($abs_height, $this->mark_abs_vsize);
$abs_height += $this->ymargin + 3;
for ($i = $numcolumns; $i < $n; ++$i) {
$colwidth[$i % $numcolumns] = max($aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_hsize, $colwidth[$i % $numcolumns]);
}
$mtw = 0;
for ($i = 0; $i < $numcolumns; ++$i) {
$mtw += $colwidth[$i];
}
$abs_width = $mtw + $this->xlmargin;
if ($this->xabspos === -1 && $this->yabspos === -1) {
$this->xabspos = $this->xpos * $aImg->width;
$this->yabspos = $this->ypos * $aImg->height;
}
if ($this->halign == "left") {
$xp = $this->xabspos;
} elseif ($this->halign == "center") {
$xp = $this->xabspos - $abs_width / 2;
} else {
$xp = $aImg->width - $this->xabspos - $abs_width;
}
$yp = $this->yabspos;
if ($this->valign == "center") {
$yp -= $abs_height / 2;
} elseif ($this->valign == "bottom") {
$yp -= $abs_height;
}
$aImg->SetColor($this->color);
$aImg->SetLineWeight($this->frameweight);
$aImg->SetLineStyle('solid');
if ($this->shadow) {
$aImg->ShadowRectangle($xp, $yp, $xp + $abs_width + $this->shadow_width, $yp + $abs_height + $this->shadow_width, $this->fill_color, $this->shadow_width, $this->shadow_color);
} else {
$aImg->SetColor($this->fill_color);
$aImg->FilledRectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
$aImg->SetColor($this->color);
$aImg->Rectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
}
$x1 = $xp + $this->mark_abs_hsize + $this->xlmargin;
$y1 = $yp + $this->ymargin;
$f2 = round($aImg->GetTextHeight('X') / 2);
$grad = new Gradient($aImg);
$patternFactory = null;
$i = 1;
$row = 0;
foreach ($this->txtcol as $p) {
if (_JPG_DEBUG) {
$aImg->SetLineWeight(1);
$aImg->SetColor('red');
$aImg->SetLineStyle('solid');
$aImg->Rectangle($xp, $y1, $xp + $abs_width, $y1 + $rowheight[$row]);
}
$aImg->SetLineWeight($this->weight);
$x1 = round($x1);
$y1 = round($y1);
if ($p[2] && $p[2]->GetType() > -1) {
$aImg->SetColor($p[1]);
if (is_string($p[3]) || $p[3] > 0) {
$aImg->SetLineStyle($p[3]);
$aImg->StyleLine($x1 - $this->mark_abs_hsize, $y1 + $f2, $x1 + $this->mark_abs_hsize, $y1 + $f2);
}
if ($p[2]->GetType() != MARK_IMG) {
$p[2]->iFormatCallback = '';
$p[2]->iFormatCallback2 = '';
if ($p[2]->GetType() == MARK_FILLEDCIRCLE || $p[2]->GetType() == MARK_CIRCLE) {
$p[2]->SetSize(min($this->mark_abs_vsize, $this->mark_abs_hsize) / 2);
$p[2]->Stroke($aImg, $x1, $y1 + $f2);
//.........这里部分代码省略.........
示例12: Stroke
function Stroke($img, $xscale, $yscale)
{
$numpoints = count($this->coords[0]);
if (isset($this->coords[1])) {
if (count($this->coords[1]) != $numpoints) {
JpGraphError::RaiseL(2003, count($this->coords[1]), $numpoints);
//"Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])."Number of Y-points:$numpoints");
} else {
$exist_x = true;
}
} else {
$exist_x = false;
}
$numbars = count($this->coords[0]);
// Use GetMinVal() instead of scale[0] directly since in the case
// of log scale we get a correct value. Log scales will have negative
// values for values < 1 while still not representing negative numbers.
if ($yscale->GetMinVal() >= 0) {
$zp = $yscale->scale_abs[0];
} else {
$zp = $yscale->Translate(0);
}
if ($this->abswidth > -1) {
$abswidth = $this->abswidth;
} else {
$abswidth = round($this->width * $xscale->scale_factor, 0);
}
// Count pontetial pattern array to avoid doing the count for each iteration
if (is_array($this->iPattern)) {
$np = count($this->iPattern);
}
$grad = null;
for ($i = 0; $i < $numbars; ++$i) {
// If value is NULL, or 0 then don't draw a bar at all
if ($this->coords[0][$i] === null || $this->coords[0][$i] === '') {
continue;
}
if ($exist_x) {
$x = $this->coords[1][$i];
} else {
$x = $i;
}
$x = $xscale->Translate($x);
// Comment Note: This confuses the positioning when using acc together with
// grouped bars. Workaround for fixing #191
/*
if( !$xscale->textscale ) {
if($this->align=="center")
$x -= $abswidth/2;
elseif($this->align=="right")
$x -= $abswidth;
}
*/
// Stroke fill color and fill gradient
$pts = array($x, $zp, $x, $yscale->Translate($this->coords[0][$i]), $x + $abswidth, $yscale->Translate($this->coords[0][$i]), $x + $abswidth, $zp);
if ($this->grad) {
if ($grad === null) {
$grad = new Gradient($img);
}
if (is_array($this->grad_fromcolor)) {
// The first argument (grad_fromcolor) can be either an array or a single color. If it is an array
// then we have two choices. It can either a) be a single color specified as an RGB triple or it can be
// an array to specify both (from, to style) for each individual bar. The way to know the difference is
// to investgate the first element. If this element is an integer [0,255] then we assume it is an RGB
// triple.
$ng = count($this->grad_fromcolor);
if ($ng === 3) {
if (is_numeric($this->grad_fromcolor[0]) && $this->grad_fromcolor[0] > 0 && $this->grad_fromcolor[0] < 256) {
// RGB Triple
$fromcolor = $this->grad_fromcolor;
$tocolor = $this->grad_tocolor;
$style = $this->grad_style;
} else {
$fromcolor = $this->grad_fromcolor[$i % $ng][0];
$tocolor = $this->grad_fromcolor[$i % $ng][1];
$style = $this->grad_fromcolor[$i % $ng][2];
}
} else {
$fromcolor = $this->grad_fromcolor[$i % $ng][0];
$tocolor = $this->grad_fromcolor[$i % $ng][1];
$style = $this->grad_fromcolor[$i % $ng][2];
}
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $fromcolor, $tocolor, $style);
} else {
$grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->grad_fromcolor, $this->grad_tocolor, $this->grad_style);
}
} elseif (!empty($this->fill_color)) {
if (is_array($this->fill_color)) {
$img->PushColor($this->fill_color[$i % count($this->fill_color)]);
} else {
$img->PushColor($this->fill_color);
}
$img->FilledPolygon($pts);
$img->PopColor();
}
/////////////////////////kokorahen rectangle polygon//////////////////////
// Remember value of this bar
$val = $this->coords[0][$i];
if (!empty($val) && !is_numeric($val)) {
JpGraphError::RaiseL(2004, $i, $val);
//.........这里部分代码省略.........
示例13: Stroke
function Stroke(&$aImg)
{
if ($this->hide) {
return;
}
$aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
$n = count($this->txtcol);
if ($n == 0) {
return;
}
// Find out the max width and height of each column to be able
// to size the legend box.
$numcolumns = $n > $this->layout_n ? $this->layout_n : $n;
for ($i = 0; $i < $numcolumns; ++$i) {
$colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_size;
$colheight[$i] = 0;
}
// Find our maximum height in each row
$rows = -1;
for ($i = 0; $i < $n; ++$i) {
$h = max($this->mark_abs_size, $aImg->GetTextHeight($this->txtcol[$i][0])) + $this->ymargin;
if ($i % $numcolumns == 0) {
$rows++;
$rowheight[$rows] = 0;
}
$rowheight[$rows] = max($rowheight[$rows], $h);
}
$abs_height = 0;
for ($i = 0; $i <= $rows; ++$i) {
$abs_height += $rowheight[$i];
}
// Make damn sure that the height is at least as high as mark size + ymargin
$abs_height = max($abs_height, $this->mark_abs_size + $this->ymargin);
$abs_height += 2 * $this->ymargin;
// Find out the maximum width in each column
for ($i = $numcolumns; $i < $n; ++$i) {
$colwidth[$i % $numcolumns] = max($aImg->GetTextWidth($this->txtcol[$i][0]) + 2 * $this->xmargin + 2 * $this->mark_abs_size, $colwidth[$i % $numcolumns]);
}
// Get the total width
$mtw = 0;
for ($i = 0; $i < $numcolumns; ++$i) {
$mtw += $colwidth[$i];
}
// Find out maximum width we need for legend box
$abs_width = $mtw + $this->xmargin;
if ($this->xabspos === -1 && $this->yabspos === -1) {
$this->xabspos = $this->xpos * $aImg->width;
$this->yabspos = $this->ypos * $aImg->height;
}
// Positioning of the legend box
if ($this->halign == "left") {
$xp = $this->xabspos;
} elseif ($this->halign == "center") {
$xp = $this->xabspos - $abs_width / 2;
} else {
$xp = $aImg->width - $this->xabspos - $abs_width;
}
$yp = $this->yabspos;
if ($this->valign == "center") {
$yp -= $abs_height / 2;
} elseif ($this->valign == "bottom") {
$yp -= $abs_height;
}
// Stroke legend box
$aImg->SetColor($this->color);
$aImg->SetLineWeight($this->frameweight);
if ($this->shadow) {
$aImg->ShadowRectangle($xp, $yp, $xp + $abs_width + $this->shadow_width, $yp + $abs_height + $this->shadow_width, $this->fill_color, $this->shadow_width, $this->shadow_color);
} else {
$aImg->SetColor($this->fill_color);
$aImg->FilledRectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
$aImg->SetColor($this->color);
$aImg->Rectangle($xp, $yp, $xp + $abs_width, $yp + $abs_height);
}
// x1,y1 is the position for the legend mark
$aImg->SetLineWeight($this->weight);
$x1 = $xp + $this->mark_abs_size / 2 + 3;
$y1 = $yp + $this->mark_abs_size / 2 + $this->ymargin / 2;
$f2 = round($aImg->GetTextHeight('X') / 2);
$grad = new Gradient($aImg);
// Now stroke each legend in turn
$i = 1;
$row = 0;
foreach ($this->txtcol as $p) {
$x1 = round($x1);
$y1 = round($y1);
if ($p[2] != "" && $p[2]->GetType() > -1) {
// Make a plot mark legend
$aImg->SetColor($p[1]);
if ($p[3] > 0) {
$aImg->SetLineStyle($p[3]);
$aImg->StyleLine($x1 - 3, $y1 + $f2, $x1 + $this->mark_abs_size + 3, $y1 + $f2);
}
// Stroke a mark with the standard size
// (As long as it is not an image mark )
if ($p[2]->GetType() != MARK_IMG) {
$p[2]->iFormatCallback = '';
if ($this->mark_abs_size === _DEFAULT_LPM_SIZE) {
$p[2]->SetDefaultWidth();
} else {
//.........这里部分代码省略.........