rimelek / columns3d

使用GD扩展创建类似3D的列的库

v2.0.0 2016-10-02 14:40 UTC

This package is auto-updated.

Last update: 2024-08-29 05:06:05 UTC


README

使用此库,您可以创建不同类型的柱状图图像。如果您在柱子的墙上使用线性渐变,您可以绘制类似3D的形状。这主要是为了娱乐和学习库中使用的算法。

查看一些示例: examples.md

安装

php composer.phar require rimelek/columns3d:2.*

需求

  • PHP >= 7.0
  • GD扩展

使用

可绘制的元素

要开始绘制,您需要定义一个画布

use Rimelek\Columns3D\Canvas;
use Rimelek\Columns3D\CanvasConfiguration;
use Rimelek\Columns3D\Color;

$cc = new CanvasConfiguration();
$cc->setHeight(300);
$cc->setWidth(300);
$cc->setType(Canvas::TYPE_JPEG); //Canvas::TYPE_PNG and Canvas::TYPE_GIF are also supported
$cc->setQuality(50); // Only in case of JPEG
$cc->setColor(new Color(255, 0, 0)); //RGB

$canvas = new Canvas($cc);

CanvasConfiguration的所有方法都是可选的。

您可以使用addElement()将元素添加到画布上。

use Rimelek\Columns3D\PositionedElement;

// ...

$canvas->addElement(new Positionedelement($drawable, /*x*/ 200, /*y*/ 200));

$drawable对象必须实现Rimelek\Columns3D\Drawable\DrawableInterface

目前有2个类可用

StripedPattern

这是为了添加条纹背景。目前不支持自定义。

use Rimelek\Columns3D\Drawable\StripedPattern;

// ...

$background = new StripedPattern();
$canvas->addElement(new Positionedelement($background, 150, 150)); // background and the center of the canvas

Column

use Rimelek\Columns3D\Drawable\Column;
use Rimelek\Columns3D\Drawable\ColumnConfiguration;
use Rimelek\Columns3D\LinearGradient;

// ...

$colc = new ColumnConfiguration();
$colc->setRadius(100);
$colc->setVeticalAngle(0.2); //This is for 3D. Define it between 0 and 1. Greater values mean you look at the column from higher.
$colc->setHeigh(300);
$colc->setWallGradient(new LinearGradient(new Color(0, 0, 0), new Color(255, 255, 255))); 
$colc->setColor(new Color(200 200, 200));

$column = new Column($colc);
$canvas->addElement(new PositionedElement($column, 200, 200));

ColumnConfiguration的所有方法都是可选的。

生成器类

也有两个生成器类。

PositionGenerator

这是为了生成椭圆的位置,以便在foreach循环中使用。

$positionGenerator = new PositionGenerator($centerX, $centerY, $step /* Default is 1*/);
foreach ($positionGenerator->call(/* start degree*/ -150, /* end degree */ -30) as list($x, $y)) {
    $this->addElement(new PositionedElement($drawable, 200 + $x, 200 + $y));
}

ColumnCircleGenerator

它使用PositionGenerator生成由柱子组成的圆形。

$columnCircleGenerator = new ColumnCircleGenerator($positionGenerator, $columnConfiguration);
foreach($columnCircleGenerator->call(/*degree*/$from, /*degree*/$to, $centerX, $centerY) as $e) {
    $canvas->addElement($e);
}