function render(SceneState $ss, ActorState $as, Canvas $c) { $font = new TrueTypeFont($this->font, $this->size); $p = $c->getPainter(); $p->drawFilledRect(0, 0, $c->width, $c->height, rgb($this->background), rgb($this->background)); $c->drawText($font, rgb($this->color), 0, 0, $this->text); }
function draw(Canvas $dest, $x = null, $y = null, $width = null, $height = null) { $image = new Canvas($width, $height); $p = $image->getPainter(); if (!$x) { $x = 0; } if (!$y) { $y = 0; } if (!$width) { $width = $dest->width; } if (!$height) { $height = $dest->height; } if ($width && $height) { $grad = $height; // Top down $this->colors['step'] = array((double) ($this->colors['delta'][0] / $grad), (double) ($this->colors['delta'][1] / $grad), (double) ($this->colors['delta'][2] / $grad)); $w = $width; for ($n = 0; $n < $grad; $n++) { $c = new RgbColor(floor($this->colors['first'][0] + $this->colors['step'][0] * $n), floor($this->colors['first'][1] + $this->colors['step'][1] * $n), floor($this->colors['first'][2] + $this->colors['step'][2] * $n)); // Console::debug("Row %d: rgb(%d,%d,%d)", $n, $c->r, $c->g, $c->b); $p->drawLine(0, $n, $w, $n, $c); } imagecopy($dest->getImage(), $image->getImage(), $x, $y, 0, 0, $width, $height); } else { throw new BadArgumentException(); } }
function draw(Canvas $dest, $x = null, $y = null, $width = null, $height = null) { $c = new Canvas($width, $height, rgb($this->props['background'])); $p = $c->getPainter(); $p->drawRect(0, 0, $width - 1, $height - 1, rgb($this->props['bordercolor'])); $labels = $this->dataset->getLabels(); $labelcount = count($labels); // $ls = floor($height / $labelcount) - 4; $ls = 16; for ($i = 0; $i < $labelcount; $i++) { $x1 = 3; $y1 = 3 + ($ls + 2) * $i; $x2 = $x1 + $ls; $y2 = $y1 + $ls; $p->drawFilledRect($x1, $y1, $x2, $y2, rgb(80, 80, 80), rgb(rand(0, 200), rand(0, 200), rand(0, 200))); } imagecopy($dest->getImage(), $c->getImage(), $x, $y, 0, 0, $width, $height); }
/** * @brief Render the chart in 3D * * @return Canvas */ private function render3D() { $c = new Canvas($this->width, $this->height, rgb($this->getProperty('background', '#FFFFFF'))); $radiusx = 180; $radiusy = 90; $cx = $c->getWidth() / 2; $cy = $c->getHeight() / 2; $explode = $this->getProperty('explode', 0); $palette = $this->getProperty('palette'); list($label, $vals) = $this->dataset->getSeries(0); $labels = $this->dataset->getLabels(); $sum = $vals->getSum(); $ci = 0; $sa = 0; for ($n = 0; $n < $vals->getCount(); $n++) { list($val, $key) = $vals->getValue($n); $a = 360 / $sum * $val; // Get angle $ea = $sa + $a; $ch = rgb($palette[$ci]); $cs = hsv($ch); $cs->value = $cs->value - 30; if (arr::hasKey($labels, $n)) { $l = $labels[$n]; } else { $l = $n; } $data[] = array('key' => $key, 'label' => $l, 'c1' => $ch, 'c2' => $cs, 'sa' => $sa, 'ea' => $ea); $sa = $ea; $ci++; } $offs = array(); foreach ($data as $id => $slice) { $avg = ($slice['sa'] + $slice['ea']) / 2; $data[$id]['ox'] = cos(($avg - 90) % 360 * PI / 180) * $explode; $data[$id]['oy'] = sin(($avg - 90) % 360 * PI / 180) * $explode; $data[$id]['dx'] = cos(($avg - 180) % 360 * PI / 180); $data[$id]['dy'] = sin(($avg - 180) % 360 * PI / 180); } $f = new BitmapFont(3); $f->setTextEffect(BitmapFont::EFFECT_OUTLINE, rgb(255, 255, 255)); $p = $c->getPainter(); for ($yp = 20; $yp >= 0; $yp--) { foreach ($data as $slice) { $ox = $slice['ox']; $oy = $slice['oy']; $p->drawFilledArc($cx + $ox, $cy + $oy + $yp, $radiusx * 2, $radiusy * 2, $slice['sa'], $slice['ea'], $yp == 0 ? $slice['c1'] : $slice['c2']); } } for ($yp = 20; $yp >= 0; $yp--) { foreach ($data as $slice) { // TODO: Labels $m = $f->measure($slice['label']); $dx = $slice['dx']; $dy = $slice['dy']; $c->drawText($f, rgb(0, 0, 0), $cx + $dx * $radiusx / 1.5 - $m['width'] / 2, $cx + $dy * $radiusy / 1.5 - $m['height'] / 2, $slice['label']); } } $this->renderObjects($c); // Return the canvas return $c; }