Added a graph library
This commit is contained in:
parent
33f3660fcc
commit
c68552a0fb
129 changed files with 31640 additions and 26 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
.idea
|
||||
.vscode
|
||||
.vscode
|
||||
composer.phar
|
|
@ -3,6 +3,7 @@
|
|||
"symfony/polyfill": "1.28.0",
|
||||
"filp/whoops": "2.15.4",
|
||||
"monolog/monolog": "2.9.2",
|
||||
"xpaw/php-source-query-class": "2.1.0"
|
||||
"xpaw/php-source-query-class": "2.1.0",
|
||||
"szymach/c-pchart": "3.0.17"
|
||||
}
|
||||
}
|
73
composer.lock
generated
73
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "567327add4f8b463f2486e21cc511bea",
|
||||
"content-hash": "9fe541d20000bad8bcc7a6f093bd89a1",
|
||||
"packages": [
|
||||
{
|
||||
"name": "filp/whoops",
|
||||
|
@ -343,6 +343,77 @@
|
|||
],
|
||||
"time": "2023-08-25T17:27:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "szymach/c-pchart",
|
||||
"version": "v3.0.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/szymach/c-pchart.git",
|
||||
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/szymach/c-pchart/zipball/c022568da78f73bb7acf7db7a974934a434d47d7",
|
||||
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"php": "^5.4|^7.0|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codeception/codeception": "^4.1.22",
|
||||
"codeception/module-asserts": "^1.3",
|
||||
"codeception/module-filesystem": "^1.0",
|
||||
"phpunit/phpunit": "^5.7|^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.4"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0.x-dev",
|
||||
"2.0": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"constants.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"CpChart\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-3.0-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jean-Damien Pogolotti",
|
||||
"homepage": "http://www.pchart.net",
|
||||
"role": "Creator of the original pChart library"
|
||||
},
|
||||
{
|
||||
"name": "Piotr Szymaszek",
|
||||
"homepage": "https://github.com/szymach",
|
||||
"role": "Developer of the CpChart wrapper package"
|
||||
}
|
||||
],
|
||||
"description": "Port of \"pChart\" library into PHP 5+",
|
||||
"homepage": "https://github.com/szymach/c-pchart",
|
||||
"keywords": [
|
||||
"CpChart",
|
||||
"c-pChart",
|
||||
"charts",
|
||||
"pchart",
|
||||
"statistics"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/szymach/c-pchart/issues",
|
||||
"source": "https://github.com/szymach/c-pchart/tree/v3.0.17"
|
||||
},
|
||||
"time": "2023-05-27T11:12:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "xpaw/php-source-query-class",
|
||||
"version": "2.1.0",
|
||||
|
|
|
@ -14,10 +14,6 @@ if (!$sql->num())
|
|||
|
||||
$graph = $sql->get();
|
||||
|
||||
include(LIB . 'games/graph/pData.php');
|
||||
include(LIB . 'games/graph/pDraw.php');
|
||||
include(LIB . 'games/graph/pImage.php');
|
||||
|
||||
if (isset($url['type'])) {
|
||||
include(DATA . 'graph.php');
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ class threads extends cron
|
|||
return NULL;
|
||||
|
||||
while ($unit = $sql->get())
|
||||
$aUnit[$unit['id']] = '';
|
||||
$aUnit[$unit['id']] = [];
|
||||
|
||||
$sql->query('SELECT `id` FROM `servers` LIMIT 1');
|
||||
|
||||
|
@ -26,14 +26,19 @@ class threads extends cron
|
|||
|
||||
$all = $sql->num();
|
||||
|
||||
while ($server = $sql->get())
|
||||
$aUnit[$server['unit']][$server['game']] = $server['id'] . ' ';
|
||||
while($server = $sql->get()) {
|
||||
$aUnit[$server['unit']][$server['game']] ??= [];
|
||||
$aUnit[$server['unit']][$server['game']][] = $server['id'];
|
||||
}
|
||||
|
||||
if ($argv[3] == 'scan_servers_route')
|
||||
cron::$seping = 50;
|
||||
|
||||
foreach ($aUnit as $unit => $aGame) {
|
||||
foreach ($aGame as $game => $servers) {
|
||||
if(is_array($servers)) {
|
||||
$servers = implode(' ', $servers);
|
||||
}
|
||||
$aData = explode(' ', $servers);
|
||||
|
||||
$num = count($aData) - 1;
|
||||
|
@ -49,9 +54,10 @@ class threads extends cron
|
|||
|
||||
foreach ($threads as $thread) {
|
||||
foreach ($thread as $screen => $servers)
|
||||
$cmd .= 'sudo -u www-data screen -dmS scan_' . (sys::first(explode(' ', $servers))) . '_' . $screen . ' taskset -c ' . $cfg['cron_taskset'] . ' sh -c \"cd /var/enginegp; php cron.php ' . $cfg['cron_key'] . ' ' . $argv[3] . ' ' . $servers . '\"; sleep 1;';
|
||||
$cmd .= 'sudo -u www-data screen -dmS scan_' . (sys::first(explode(' ', $servers))) . '_' . $screen . ' taskset -c ' . $cfg['cron_taskset'] . ' sh -c \"cd /var/www/enginegp; php7.4 cron.php ' . $cfg['cron_key'] . ' ' . $argv[3] . ' ' . $servers . '\"; sleep 1;';
|
||||
}
|
||||
|
||||
$start_point = $_SERVER['REQUEST_TIME'];
|
||||
exec('screen -dmS threads_' . date('His', $start_point) . ' sh -c "' . $cmd . '"');
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
if (!DEFINED('EGP'))
|
||||
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
class graph
|
||||
{
|
||||
public static function full($server, $slots, $key, $time)
|
||||
|
@ -15,7 +18,7 @@ class graph
|
|||
$aRAM = $aData['ram'];
|
||||
$aHDD = $aData['hdd'];
|
||||
|
||||
$MyData = new pData();
|
||||
$MyData = new Data();
|
||||
|
||||
// Онлайн
|
||||
$MyData->addPoints($aOnline, 'ONLINE');
|
||||
|
@ -51,7 +54,7 @@ class graph
|
|||
$MyData->setPalette('RAM', array('R' => 26, 'G' => 150, 'B' => 38));
|
||||
$MyData->setPalette('HDD', array('R' => 205, 'G' => 196, 'B' => 37));
|
||||
|
||||
$myPicture = new pImage(896, 220, $MyData);
|
||||
$myPicture = new Image(896, 220, $MyData);
|
||||
|
||||
$myPicture->drawFilledRectangle(0, 0, 896, 220, array('R' => 255, 'G' => 255, 'B' => 255));
|
||||
|
||||
|
@ -60,17 +63,17 @@ class graph
|
|||
$myPicture->setFontProperties(array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/tahoma.ttf', 'FontSize' => 8));
|
||||
$myPicture->setGraphArea(40, 20, 616, 190);
|
||||
$myPicture->drawFilledRectangle(40, 20, 616, 190, array('R' => 240, 'G' => 242, 'B' => 242, 'Alpha' => 100));
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'GridR' => 76, 'GridG' => 109, 'GridB' => 120, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'Factors' => array(0 => array($slots), 1 => array(25, 50, 75, 100)), 'ManualScale' => array(0 => array('Min' => 0, 'Max' => $slots), 1 => array('Min' => 0, 'Max' => 100))));
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'GridR' => 76, 'GridG' => 109, 'GridB' => 120, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'ManualScale' => array(0 => array('Min' => 0, 'Max' => 32), 1 => array('Min' => 0, 'Max' => 100))));
|
||||
|
||||
$myPicture->drawText(676, 34, 'Средний онлайн: ' . graph::average($aOnline), array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 54, 'Средняя нагрузка (CPU): ' . graph::average($aCPU) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 74, 'Средняя нагрузка (RAM): ' . graph::average($aRAM) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 94, 'Средняя нагрузка (HDD): ' . graph::average($aHDD) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 94, 'Средняя нагрузка (HDD): ' . graph::average($aHDD), array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
|
||||
$myPicture->drawText(676, 129, 'Максимальный онлайн: ' . max($aOnline), array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 153, 'Максимальная нагрузка (CPU): ' . max($aCPU) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 173, 'Максимальная нагрузка (RAM): ' . max($aRAM) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 193, 'Максимальная нагрузка (HDD): ' . max($aHDD) . '%', array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
$myPicture->drawText(676, 193, 'Максимальная нагрузка (HDD): ' . max($aHDD), array('R' => 25, 'G' => 25, 'B' => 25, 'FontName' => LIB . 'games/graph/fonts/arianamu.ttf', 'FontSize' => 10, 'Align' => TEXT_ALIGN_BOTTOMLEFT));
|
||||
|
||||
$myPicture->setFontProperties(array('FontName' => LIB . 'games/graph/fonts/tahoma.ttf', 'FontSize' => 7));
|
||||
$myPicture->drawSplineChart();
|
||||
|
@ -89,7 +92,7 @@ class graph
|
|||
{
|
||||
global $cfg, $aGname;
|
||||
|
||||
$MyData = new pData();
|
||||
$MyData = new Data();
|
||||
|
||||
// Значения
|
||||
$MyData->addPoints($aPoints, 'ONLINE');
|
||||
|
@ -101,7 +104,7 @@ class graph
|
|||
$MyData->setPalette('ONLINE', $aStyle[$style]['line']);
|
||||
|
||||
// Размер баннера
|
||||
$myPicture = new pImage(160, 248, $MyData);
|
||||
$myPicture = new Image(160, 248, $MyData);
|
||||
|
||||
// Цвет фона
|
||||
$myPicture->drawFilledRectangle(0, 0, 160, 248, $aStyle[$style]['fon']);
|
||||
|
@ -119,7 +122,7 @@ class graph
|
|||
$myPicture->drawFilledRectangle(35, 160, 150, 210, $aStyle[$style]['graph']);
|
||||
|
||||
// График
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'CycleBackground' => TRUE, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'Factors' => array(0 => array($server['slots_start'])), 'ManualScale' => array(0 => array('Min' => 0, 'Max' => $server['slots_start']))));
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'CycleBackground' => TRUE, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'Factors' => array($server['slots_start']), 'ManualScale' => array(0 => array('Min' => 0, 'Max' => $server['slots_start']))));
|
||||
|
||||
// Название игрового сервера
|
||||
$myPicture->drawFilledRectangle(0, 0, 18, 248, $aStyle[$style]['leftbox']);
|
||||
|
@ -166,7 +169,7 @@ class graph
|
|||
{
|
||||
global $cfg, $aGname;
|
||||
|
||||
$MyData = new pData();
|
||||
$MyData = new Data();
|
||||
|
||||
// Значения
|
||||
$MyData->addPoints($aPoints, 'ONLINE');
|
||||
|
@ -178,7 +181,7 @@ class graph
|
|||
$MyData->setPalette('ONLINE', $aStyle[$style]['line']);
|
||||
|
||||
// Размер баннера
|
||||
$myPicture = new pImage(560, 95, $MyData);
|
||||
$myPicture = new Image(560, 95, $MyData);
|
||||
|
||||
// Цвет фона
|
||||
$myPicture->drawFilledRectangle(0, 0, 560, 95, $aStyle[$style]['fon']);
|
||||
|
@ -204,7 +207,7 @@ class graph
|
|||
$myPicture->drawFilledRectangle(430, 5, 554, 60, $aStyle[$style]['graph']);
|
||||
|
||||
// График
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'CycleBackground' => TRUE, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'Factors' => array(0 => array($server['slots_start'])), 'ManualScale' => array(0 => array('Min' => 0, 'Max' => $server['slots_start']))));
|
||||
$myPicture->drawScale(array('XMargin' => 5, 'YMargin' => 5, 'CycleBackground' => TRUE, 'LabelSkip' => 0, 'DrawSubTicks' => TRUE, 'Mode' => SCALE_MODE_MANUAL, 'Factors' => array($server['slots_start']), 'ManualScale' => array(0 => array('Min' => 0, 'Max' => $server['slots_start']))));
|
||||
|
||||
// Адрес игрового сервера
|
||||
$myPicture->drawFilledRectangle(5, 36, 210, 49, $aStyle[$style]['box']);
|
||||
|
|
|
@ -19,10 +19,6 @@ if ($go) {
|
|||
exit(file_get_contents(TEMP . (md5($graph['key'] . 'full_' . $time)) . '.png'));
|
||||
}
|
||||
|
||||
include(LIB . 'games/graph/pData.php');
|
||||
include(LIB . 'games/graph/pDraw.php');
|
||||
include(LIB . 'games/graph/pImage.php');
|
||||
|
||||
include(LIB . 'games/graph.php');
|
||||
|
||||
graph::full($id, $server['slots_start'], $graph['key'], $time);
|
||||
|
|
1
vendor/composer/autoload_files.php
vendored
1
vendor/composer/autoload_files.php
vendored
|
@ -17,4 +17,5 @@ return array(
|
|||
'a4e34e0535907b5c234b9abc547237ca' => $vendorDir . '/symfony/polyfill/src/Intl/MessageFormatter/bootstrap.php',
|
||||
'299b3c040b39cb03c6eceb9bb272ad1d' => $vendorDir . '/symfony/polyfill/src/Intl/Normalizer/bootstrap.php',
|
||||
'e59f725579f9974327c76777296d6dcc' => $vendorDir . '/symfony/polyfill/src/Mbstring/bootstrap.php',
|
||||
'7bb4f001eb5212bde073bf47a4bbedad' => $vendorDir . '/szymach/c-pchart/constants.php',
|
||||
);
|
||||
|
|
1
vendor/composer/autoload_psr4.php
vendored
1
vendor/composer/autoload_psr4.php
vendored
|
@ -11,4 +11,5 @@ return array(
|
|||
'Symfony\\Polyfill\\' => array($vendorDir . '/symfony/polyfill/src'),
|
||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
||||
'CpChart\\' => array($vendorDir . '/szymach/c-pchart/src'),
|
||||
);
|
||||
|
|
9
vendor/composer/autoload_static.php
vendored
9
vendor/composer/autoload_static.php
vendored
|
@ -18,6 +18,7 @@ class ComposerStaticInit76468c2eb232fdf4a8e3502b319270a4
|
|||
'a4e34e0535907b5c234b9abc547237ca' => __DIR__ . '/..' . '/symfony/polyfill/src/Intl/MessageFormatter/bootstrap.php',
|
||||
'299b3c040b39cb03c6eceb9bb272ad1d' => __DIR__ . '/..' . '/symfony/polyfill/src/Intl/Normalizer/bootstrap.php',
|
||||
'e59f725579f9974327c76777296d6dcc' => __DIR__ . '/..' . '/symfony/polyfill/src/Mbstring/bootstrap.php',
|
||||
'7bb4f001eb5212bde073bf47a4bbedad' => __DIR__ . '/..' . '/szymach/c-pchart/constants.php',
|
||||
);
|
||||
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
|
@ -41,6 +42,10 @@ class ComposerStaticInit76468c2eb232fdf4a8e3502b319270a4
|
|||
array (
|
||||
'Monolog\\' => 8,
|
||||
),
|
||||
'C' =>
|
||||
array (
|
||||
'CpChart\\' => 8,
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
|
@ -64,6 +69,10 @@ class ComposerStaticInit76468c2eb232fdf4a8e3502b319270a4
|
|||
array (
|
||||
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
|
||||
),
|
||||
'CpChart\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/szymach/c-pchart/src',
|
||||
),
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
|
|
74
vendor/composer/installed.json
vendored
74
vendor/composer/installed.json
vendored
|
@ -349,6 +349,80 @@
|
|||
],
|
||||
"install-path": "../symfony/polyfill"
|
||||
},
|
||||
{
|
||||
"name": "szymach/c-pchart",
|
||||
"version": "v3.0.17",
|
||||
"version_normalized": "3.0.17.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/szymach/c-pchart.git",
|
||||
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/szymach/c-pchart/zipball/c022568da78f73bb7acf7db7a974934a434d47d7",
|
||||
"reference": "c022568da78f73bb7acf7db7a974934a434d47d7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"php": "^5.4|^7.0|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codeception/codeception": "^4.1.22",
|
||||
"codeception/module-asserts": "^1.3",
|
||||
"codeception/module-filesystem": "^1.0",
|
||||
"phpunit/phpunit": "^5.7|^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.4"
|
||||
},
|
||||
"time": "2023-05-27T11:12:02+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0.x-dev",
|
||||
"2.0": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"constants.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"CpChart\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-3.0-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jean-Damien Pogolotti",
|
||||
"homepage": "http://www.pchart.net",
|
||||
"role": "Creator of the original pChart library"
|
||||
},
|
||||
{
|
||||
"name": "Piotr Szymaszek",
|
||||
"homepage": "https://github.com/szymach",
|
||||
"role": "Developer of the CpChart wrapper package"
|
||||
}
|
||||
],
|
||||
"description": "Port of \"pChart\" library into PHP 5+",
|
||||
"homepage": "https://github.com/szymach/c-pchart",
|
||||
"keywords": [
|
||||
"CpChart",
|
||||
"c-pChart",
|
||||
"charts",
|
||||
"pchart",
|
||||
"statistics"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/szymach/c-pchart/issues",
|
||||
"source": "https://github.com/szymach/c-pchart/tree/v3.0.17"
|
||||
},
|
||||
"install-path": "../szymach/c-pchart"
|
||||
},
|
||||
{
|
||||
"name": "xpaw/php-source-query-class",
|
||||
"version": "2.1.0",
|
||||
|
|
9
vendor/composer/installed.php
vendored
9
vendor/composer/installed.php
vendored
|
@ -175,6 +175,15 @@
|
|||
0 => 'v1.28.0',
|
||||
),
|
||||
),
|
||||
'szymach/c-pchart' => array(
|
||||
'pretty_version' => 'v3.0.17',
|
||||
'version' => '3.0.17.0',
|
||||
'reference' => 'c022568da78f73bb7acf7db7a974934a434d47d7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../szymach/c-pchart',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'xpaw/php-source-query-class' => array(
|
||||
'pretty_version' => '2.1.0',
|
||||
'version' => '2.1.0.0',
|
||||
|
|
49
vendor/szymach/c-pchart/.github/workflows/codacy-analysis.yml
vendored
Normal file
49
vendor/szymach/c-pchart/.github/workflows/codacy-analysis.yml
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
# This workflow checks out code, performs a Codacy security scan
|
||||
# and integrates the results with the
|
||||
# GitHub Advanced Security code scanning feature. For more information on
|
||||
# the Codacy security scan action usage and parameters, see
|
||||
# https://github.com/codacy/codacy-analysis-cli-action.
|
||||
# For more information on Codacy Analysis CLI in general, see
|
||||
# https://github.com/codacy/codacy-analysis-cli.
|
||||
|
||||
name: Codacy Security Scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '45 3 * * 0'
|
||||
|
||||
jobs:
|
||||
codacy-security-scan:
|
||||
name: Codacy Security Scan
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Checkout the repository to the GitHub Actions runner
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
||||
- name: Run Codacy Analysis CLI
|
||||
uses: codacy/codacy-analysis-cli-action@1.1.0
|
||||
with:
|
||||
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
|
||||
# You can also omit the token and run the tools that support default configurations
|
||||
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||
verbose: true
|
||||
output: results.sarif
|
||||
format: sarif
|
||||
# Adjust severity of non-security issues
|
||||
gh-code-scanning-compat: true
|
||||
# Force 0 exit code to allow SARIF file generation
|
||||
# This will handover control about PR rejection to the GitHub side
|
||||
max-allowed-issues: 2147483647
|
||||
|
||||
# Upload the SARIF file generated in the previous step
|
||||
- name: Upload SARIF results file
|
||||
uses: github/codeql-action/upload-sarif@v1
|
||||
with:
|
||||
sarif_file: results.sarif
|
6
vendor/szymach/c-pchart/.gitignore
vendored
Normal file
6
vendor/szymach/c-pchart/.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
.phpcs-cache
|
||||
composer.phar
|
||||
composer.lock
|
||||
cache/*
|
||||
!cache/.gitkeep
|
||||
vendor
|
33
vendor/szymach/c-pchart/.travis.yml
vendored
Normal file
33
vendor/szymach/c-pchart/.travis.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
language: php
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- vendor
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 5.6
|
||||
env:
|
||||
- COMPOSER_FLAGS='--prefer-lowest'
|
||||
- php: 7.0
|
||||
- php: 7.1
|
||||
- php: 7.2
|
||||
- php: 7.3
|
||||
- php: 7.4
|
||||
- php: 8.0
|
||||
- php: 8.1
|
||||
env:
|
||||
- COVERAGE='--coverage --coverage-xml'
|
||||
XDEBUG_MODE=coverage
|
||||
|
||||
before_install:
|
||||
- if [[ ! $COVERAGE ]]; then phpenv config-rm xdebug.ini; fi;
|
||||
|
||||
before_script: composer update -n $COMPOSER_FLAGS
|
||||
|
||||
script:
|
||||
- vendor/bin/phpcs
|
||||
- vendor/bin/codecept run unit $COVERAGE
|
||||
|
||||
after_script:
|
||||
- if [[ $COVERAGE ]]; then ./coverage.sh; fi;
|
48
vendor/szymach/c-pchart/CHANGELOG.md
vendored
Normal file
48
vendor/szymach/c-pchart/CHANGELOG.md
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
# Changelog
|
||||
|
||||
## 1.x
|
||||
1.0 Stable version with basic functionality.
|
||||
|
||||
1.1 Added factory service.
|
||||
|
||||
1.1.1 Changed chart loading via factory a bit (see class annotations).
|
||||
|
||||
1.1.2 Updated service class with Exception handling regarding missing / wrong class name.
|
||||
|
||||
1.1.3 The file with classes' constants is now loaded via Composer (thanks to ThaDafinser).
|
||||
|
||||
1.1.4 Fixed code-breaking typ (thanks to subtronic).
|
||||
|
||||
1.1.5 Added an option to hide the X axis or only it's values (thanks to julien-gm).
|
||||
|
||||
1.1.6 Added support for closures in formatting scale (thanks to funkjedi)
|
||||
|
||||
## 2.x
|
||||
2.0 Updated all classes to PSR-2 standard, added typehinting where possible, updated
|
||||
annotations in methods to be as accurate as possible. Added Behat testing and
|
||||
restructed the namespaces into more sensible structure.
|
||||
|
||||
2.0.1 Documentation updates.
|
||||
|
||||
2.0.2 Changed license to GPL-3.0.
|
||||
|
||||
2.0.3 Bubble chart fix (thanks to rage28).
|
||||
|
||||
2.0.4 PHP 7.1 initial support, lowered minimal PHP version to 5.4.
|
||||
|
||||
2.0.5 CS fixes, removed old MIT license file.
|
||||
|
||||
2.0.6 A fix for PHP 7.1 (thanks to dehrk).
|
||||
|
||||
2.0.7 A fix for computing color alpha (thanks to dehrk).
|
||||
|
||||
2.0.8 Covered most basic functionality with tests, added a lot of documentation
|
||||
and a PHP 7.1 fix. Deprecated the `\CpChart\Factory\Factory` class.
|
||||
|
||||
## 3.x
|
||||
|
||||
3.0 Deleted the `\CpChart\Factory\Factory` class and everything related to it.
|
||||
Moved drawing and cache classes outside of `Chart` namespace.
|
||||
Moved barcode to a `Barcode` namespace.
|
||||
Moved `cache` and `resources` directories to library root.
|
||||
Renamed `resources\data` to `resources\barcode`.
|
675
vendor/szymach/c-pchart/LICENSE
vendored
Normal file
675
vendor/szymach/c-pchart/LICENSE
vendored
Normal file
|
@ -0,0 +1,675 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
185
vendor/szymach/c-pchart/README.md
vendored
Normal file
185
vendor/szymach/c-pchart/README.md
vendored
Normal file
|
@ -0,0 +1,185 @@
|
|||
Table of contents:
|
||||
==================
|
||||
* [Support](#support)
|
||||
* [Build status](#build-status)
|
||||
* [Code quality](#code-quality)
|
||||
* [About](#about)
|
||||
* [License](#license)
|
||||
* [Contributing](#contributing)
|
||||
* [Installation](#installation-via-composer)
|
||||
* [Usage](#usage)
|
||||
- [Charts created through Image class](#charts-created-through-image-class)
|
||||
- [Standalone charts](#standalone-charts)
|
||||
- [Barcodes](#barcodes)
|
||||
- [Cache](#cache)
|
||||
- [Fonts and palletes](#fonts-and-palletes)
|
||||
* [Changelog](#changelog)
|
||||
* [References](#references)
|
||||
* [Links](#links)
|
||||
|
||||
Support:
|
||||
========
|
||||
|
||||
This project is supported in a basic manner and no new features will be introduced.
|
||||
Issues and pull requests will be reviewed and resolved if need be, so feel free
|
||||
to post them.
|
||||
|
||||
Build status:
|
||||
=============
|
||||
- [![Build Status](https://app.travis-ci.com/szymach/c-pchart.svg?branch=master)](https://app.travis-ci.com/szymach/c-pchart) master
|
||||
- [![Build Status](https://app.travis-ci.com/szymach/c-pchart.svg?branch=3.0)](https://app.travis-ci.com/szymach/c-pchart) 3.0
|
||||
- [![Build Status](https://app.travis-ci.com/szymach/c-pchart.svg?branch=2.0)](https://app.travis-ci.com/szymach/c-pchart) 2.0
|
||||
|
||||
About:
|
||||
======
|
||||
|
||||
This library is a port of the excellent pChart statistics library created by Jean-Damien Pogolotti,
|
||||
and aims to allow the usage of it in modern applications. This was done through
|
||||
applying PSR standards to code, introducing namespaces and typehints, along with
|
||||
some basic annotations to methods.
|
||||
|
||||
This is the `3.x` version, which removes the factory service and reorganizes the
|
||||
file structure a bit. It does not introduce any new features, but the changes are
|
||||
not compatibile with the `2.x` branch. BC compatibility with the original library
|
||||
is mostly retained, however you can still use the `1.x` version if you cannot risk
|
||||
any of these.
|
||||
|
||||
What was done:
|
||||
|
||||
- Support for PHP versions from 5.4 to 8.1.
|
||||
|
||||
- Made a full port of the library's functionality. I have touched very little of
|
||||
the actual logic, so most code from the original library should work.
|
||||
|
||||
- Defined and added namespaces to all classes.
|
||||
|
||||
- Replaced all `exit()` / `die()` commands with `throw` statements.
|
||||
|
||||
- Refactored the code to meet PSR-2 standard and added annotations (as best as I could figure them out)
|
||||
to methods Also, typehinting was added to methods where possible, so some backwards compatibility breaks
|
||||
may occur if you did some weird things.
|
||||
|
||||
- Moved all constants to a [single file](constants.php). It is loaded automatically
|
||||
through Composer, so no need for manual action.
|
||||
|
||||
License:
|
||||
========
|
||||
|
||||
It was previously stated that this package uses the [MIT](https://opensource.org/licenses/MIT) license,
|
||||
which did not meet the requirements set by the original author. It is now under the
|
||||
[GNU GPL v3](http://www.gnu.org/licenses/gpl-3.0.html) license, so if you wish to
|
||||
use it in a commercial project, you need to pay an [appropriate fee](http://www.pchart.net/license).
|
||||
|
||||
Contributing:
|
||||
=============
|
||||
|
||||
All in all, this is a legacy library ported over from PHP 4, so the code is neither
|
||||
beautiful nor easy to understand. I did my best to modernize and cover it with
|
||||
some basic tests, but there is much more that could be done. If you are willing and
|
||||
have time to fix or improve anything, feel free to post a PR or issue.
|
||||
|
||||
Installation (via Composer):
|
||||
============================
|
||||
|
||||
For composer installation, add:
|
||||
|
||||
```json
|
||||
"require": {
|
||||
"szymach/c-pchart": "^3.0"
|
||||
},
|
||||
```
|
||||
|
||||
to your composer.json file and update your dependencies. Or you can run:
|
||||
|
||||
```sh
|
||||
$ composer require szymach/c-pchart
|
||||
```
|
||||
|
||||
in your project's root directory.
|
||||
|
||||
Usage:
|
||||
======
|
||||
|
||||
Your best source to understanding how to use the library is still the [official wiki](http://wiki.pchart.net/).
|
||||
However, I have ported at least one example for each chart into Markdown files,
|
||||
so you can compare each version and figure out how to use the current implementation.
|
||||
|
||||
Charts created through Image class
|
||||
---------------------------------------
|
||||
|
||||
Most of the basic charts are created through methods of the `CpChart\Image`
|
||||
class. Below you can find a full list of these charts, alongside example code.
|
||||
|
||||
- [area](resources/doc/area.md)
|
||||
- [bar](resources/doc/bar.md)
|
||||
- [best fit](resources/doc/best_fit.md)
|
||||
- [filled spline](resources/doc/filled_spline.md)
|
||||
- [filled step](resources/doc/filled_step.md)
|
||||
- [line](resources/doc/line.md)
|
||||
- [plot](resources/doc/plot.md)
|
||||
- [progress](resources/doc/progress.md)
|
||||
- [spline](resources/doc/spline.md)
|
||||
- [stacked area](resources/doc/stacked_area.md)
|
||||
- [stacked bar](resources/doc/stacked_bar.md)
|
||||
- [step](resources/doc/step.md)
|
||||
- [zone](resources/doc/zone.md)
|
||||
|
||||
Standalone charts:
|
||||
------------------------------------
|
||||
|
||||
The more advanced charts have their own separate class you need to use in order
|
||||
to create them. As before, below is a full list of these, with example code.
|
||||
|
||||
- [2D pie](resources/doc/2d_pie.md)
|
||||
- [3D pie](resources/doc/3d_pie.md)
|
||||
- [2D ring](resources/doc/2d_ring.md)
|
||||
- [3D ring](resources/doc/3d_ring.md)
|
||||
- [bubble](resources/doc/bubble.md)
|
||||
- [contour](resources/doc/contour.md)
|
||||
- [polar](resources/doc/polar.md)
|
||||
- [radar](resources/doc/radar.md)
|
||||
- [scatter best fit](resources/doc/scatter_best_fit.md)
|
||||
- [scatter line](resources/doc/scatter_line.md)
|
||||
- [scatter plot](resources/doc/scatter_plot.md)
|
||||
- [scatter spline](resources/doc/scatter_spline.md)
|
||||
- [scatter threshold](resources/doc/scatter_threshold.md)
|
||||
- [scatter threshold area](resources/doc/scatter_threshold_area.md)
|
||||
- [split path](resources/doc/split_path.md)
|
||||
- [spring](resources/doc/spring.md)
|
||||
- [stock](resources/doc/stock.md)
|
||||
- [surface](resources/doc/surface.md)
|
||||
|
||||
Barcodes
|
||||
--------
|
||||
|
||||
The pChart library also provides a way to render barcodes 39 and 128. Below you
|
||||
can find links to doc on creating them:
|
||||
|
||||
- [barcode39](resources/doc/barcode_39.md)
|
||||
- [barcode128](resources/doc/barcode_128.md)
|
||||
|
||||
Cache
|
||||
-----
|
||||
|
||||
If you find yourself creating charts out of a set of data more than once, you may
|
||||
consider using the cache component of the library. Head on to the [dedicated part](resources/doc/cache.md)
|
||||
of the documentation for information on how to do that.
|
||||
|
||||
Fonts and palletes
|
||||
------------------
|
||||
|
||||
If you want to use any of the fonts or palletes files, provide only
|
||||
the name of the actual file, do not add the `fonts` or `palettes` folder to the
|
||||
string given into the function. If you want to load them from a different directory
|
||||
than the default, you need to add the full path to the file (ex. `__DIR__.'/folder/to/my/palletes`).
|
||||
|
||||
References
|
||||
==========
|
||||
[The original pChart website](http://www.pchart.net/)
|
||||
|
||||
Links
|
||||
=====
|
||||
|
||||
[GitHub](https://github.com/szymach/c-pchart)
|
||||
|
||||
[Packagist](https://packagist.org/packages/szymach/c-pchart)
|
1
vendor/szymach/c-pchart/cache/.gitkeep
vendored
Normal file
1
vendor/szymach/c-pchart/cache/.gitkeep
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
|
21
vendor/szymach/c-pchart/codeception.yml
vendored
Normal file
21
vendor/szymach/c-pchart/codeception.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
namespace: Test\CpChart
|
||||
paths:
|
||||
tests: tests
|
||||
output: tests/_output
|
||||
data: tests/_data
|
||||
support: tests/_support
|
||||
actor_suffix: Tester
|
||||
extensions:
|
||||
enabled:
|
||||
- Codeception\Extension\RunFailed
|
||||
coverage:
|
||||
enabled: true
|
||||
include:
|
||||
- src/*
|
||||
settings:
|
||||
be_strict_about_changes_to_global_state: true
|
||||
convert_deprecations_to_exceptions: true
|
||||
colors: true
|
||||
error_level: E_ALL | E_STRICT | E_DEPRECATED
|
||||
report_useless_tests: true
|
52
vendor/szymach/c-pchart/composer.json
vendored
Normal file
52
vendor/szymach/c-pchart/composer.json
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"name": "szymach/c-pchart",
|
||||
"license": "GPL-3.0-only",
|
||||
"type": "library",
|
||||
"description": "Port of \"pChart\" library into PHP 5+",
|
||||
"keywords": ["pchart", "pChart", "statistics", "charts", "CpChart", "c-pChart"],
|
||||
"homepage": "https://github.com/szymach/c-pchart",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jean-Damien Pogolotti",
|
||||
"homepage": "http://www.pchart.net",
|
||||
"role": "Creator of the original pChart library"
|
||||
},
|
||||
{
|
||||
"name": "Piotr Szymaszek",
|
||||
"homepage": "https://github.com/szymach",
|
||||
"role": "Developer of the CpChart wrapper package"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-4": { "CpChart\\": "src/" },
|
||||
"files": ["constants.php"]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Test\\CpChart\\": [
|
||||
"tests/unit/",
|
||||
"tests/_support/"
|
||||
]
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.4|^7.0|^8.0",
|
||||
"ext-gd": "*"
|
||||
},
|
||||
"require-dev" : {
|
||||
"codeception/codeception": "^4.1.22",
|
||||
"phpunit/phpunit": "^5.7|^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.4",
|
||||
"codeception/module-asserts": "^1.3",
|
||||
"codeception/module-filesystem": "^1.0"
|
||||
},
|
||||
"config": {
|
||||
"bin-dir": "vendor/bin"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0.x-dev",
|
||||
"2.0": "2.0.x-dev"
|
||||
}
|
||||
}
|
||||
}
|
206
vendor/szymach/c-pchart/constants.php
vendored
Normal file
206
vendor/szymach/c-pchart/constants.php
vendored
Normal file
|
@ -0,0 +1,206 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @filesource src/Resources/data/configuration.php
|
||||
*
|
||||
* All the class constants that were previously in class files are moved here into a single file.
|
||||
*/
|
||||
/**
|
||||
* pBubble
|
||||
*/
|
||||
define("BUBBLE_SHAPE_ROUND", 700001);
|
||||
define("BUBBLE_SHAPE_SQUARE", 700002);
|
||||
|
||||
/**
|
||||
* pData
|
||||
*/
|
||||
/* Axis configuration */
|
||||
define("AXIS_FORMAT_DEFAULT", 680001);
|
||||
define("AXIS_FORMAT_TIME", 680002);
|
||||
define("AXIS_FORMAT_DATE", 680003);
|
||||
define("AXIS_FORMAT_METRIC", 680004);
|
||||
define("AXIS_FORMAT_CURRENCY", 680005);
|
||||
define("AXIS_FORMAT_TRAFFIC", 680006);
|
||||
define("AXIS_FORMAT_CUSTOM", 680007);
|
||||
/* Axis position */
|
||||
define("AXIS_POSITION_LEFT", 681001);
|
||||
define("AXIS_POSITION_RIGHT", 681002);
|
||||
define("AXIS_POSITION_TOP", 681001);
|
||||
define("AXIS_POSITION_BOTTOM", 681002);
|
||||
/* Families of data points */
|
||||
define("SERIE_SHAPE_FILLEDCIRCLE", 681011);
|
||||
define("SERIE_SHAPE_FILLEDTRIANGLE", 681012);
|
||||
define("SERIE_SHAPE_FILLEDSQUARE", 681013);
|
||||
define("SERIE_SHAPE_FILLEDDIAMOND", 681017);
|
||||
define("SERIE_SHAPE_CIRCLE", 681014);
|
||||
define("SERIE_SHAPE_TRIANGLE", 681015);
|
||||
define("SERIE_SHAPE_SQUARE", 681016);
|
||||
define("SERIE_SHAPE_DIAMOND", 681018);
|
||||
/* Axis position */
|
||||
define("AXIS_X", 682001);
|
||||
define("AXIS_Y", 682002);
|
||||
/* Define value limits */
|
||||
define("ABSOLUTE_MIN", -10000000000000);
|
||||
define("ABSOLUTE_MAX", 10000000000000);
|
||||
/* Replacement to the PHP null keyword */
|
||||
define("VOID", 0.123456789);
|
||||
/* Euro symbol for GD fonts */
|
||||
define("EURO_SYMBOL", "€");
|
||||
|
||||
/**
|
||||
* pDraw
|
||||
*/
|
||||
define("DIRECTION_VERTICAL", 690001);
|
||||
define("DIRECTION_HORIZONTAL", 690002);
|
||||
define("SCALE_POS_LEFTRIGHT", 690101);
|
||||
define("SCALE_POS_TOPBOTTOM", 690102);
|
||||
define("SCALE_MODE_FLOATING", 690201);
|
||||
define("SCALE_MODE_START0", 690202);
|
||||
define("SCALE_MODE_ADDALL", 690203);
|
||||
define("SCALE_MODE_ADDALL_START0", 690204);
|
||||
define("SCALE_MODE_MANUAL", 690205);
|
||||
define("SCALE_SKIP_NONE", 690301);
|
||||
define("SCALE_SKIP_SAME", 690302);
|
||||
define("SCALE_SKIP_NUMBERS", 690303);
|
||||
define("TEXT_ALIGN_TOPLEFT", 690401);
|
||||
define("TEXT_ALIGN_TOPMIDDLE", 690402);
|
||||
define("TEXT_ALIGN_TOPRIGHT", 690403);
|
||||
define("TEXT_ALIGN_MIDDLELEFT", 690404);
|
||||
define("TEXT_ALIGN_MIDDLEMIDDLE", 690405);
|
||||
define("TEXT_ALIGN_MIDDLERIGHT", 690406);
|
||||
define("TEXT_ALIGN_BOTTOMLEFT", 690407);
|
||||
define("TEXT_ALIGN_BOTTOMMIDDLE", 690408);
|
||||
define("TEXT_ALIGN_BOTTOMRIGHT", 690409);
|
||||
define("POSITION_TOP", 690501);
|
||||
define("POSITION_BOTTOM", 690502);
|
||||
define("LABEL_POS_LEFT", 690601);
|
||||
define("LABEL_POS_CENTER", 690602);
|
||||
define("LABEL_POS_RIGHT", 690603);
|
||||
define("LABEL_POS_TOP", 690604);
|
||||
define("LABEL_POS_BOTTOM", 690605);
|
||||
define("LABEL_POS_INSIDE", 690606);
|
||||
define("LABEL_POS_OUTSIDE", 690607);
|
||||
define("ORIENTATION_HORIZONTAL", 690701);
|
||||
define("ORIENTATION_VERTICAL", 690702);
|
||||
define("ORIENTATION_AUTO", 690703);
|
||||
define("LEGEND_NOBORDER", 690800);
|
||||
define("LEGEND_BOX", 690801);
|
||||
define("LEGEND_ROUND", 690802);
|
||||
define("LEGEND_VERTICAL", 690901);
|
||||
define("LEGEND_HORIZONTAL", 690902);
|
||||
define("LEGEND_FAMILY_BOX", 691051);
|
||||
define("LEGEND_FAMILY_CIRCLE", 691052);
|
||||
define("LEGEND_FAMILY_LINE", 691053);
|
||||
define("DISPLAY_AUTO", 691001);
|
||||
define("DISPLAY_MANUAL", 691002);
|
||||
define("LABELING_ALL", 691011);
|
||||
define("LABELING_DIFFERENT", 691012);
|
||||
define("BOUND_MIN", 691021);
|
||||
define("BOUND_MAX", 691022);
|
||||
define("BOUND_BOTH", 691023);
|
||||
define("BOUND_LABEL_POS_TOP", 691031);
|
||||
define("BOUND_LABEL_POS_BOTTOM", 691032);
|
||||
define("BOUND_LABEL_POS_AUTO", 691033);
|
||||
define("CAPTION_LEFT_TOP", 691041);
|
||||
define("CAPTION_RIGHT_BOTTOM", 691042);
|
||||
define("GRADIENT_SIMPLE", 691051);
|
||||
define("GRADIENT_EFFECT_CAN", 691052);
|
||||
define("LABEL_TITLE_NOBACKGROUND", 691061);
|
||||
define("LABEL_TITLE_BACKGROUND", 691062);
|
||||
define("LABEL_POINT_NONE", 691071);
|
||||
define("LABEL_POINT_CIRCLE", 691072);
|
||||
define("LABEL_POINT_BOX", 691073);
|
||||
define("ZONE_NAME_ANGLE_AUTO", 691081);
|
||||
define("PI", 3.14159265);
|
||||
define("ALL", 69);
|
||||
define("NONE", 31);
|
||||
define("AUTO", 690000);
|
||||
define("OUT_OF_SIGHT", -10000000000000);
|
||||
|
||||
/**
|
||||
* pImage
|
||||
*/
|
||||
/* Image map handling */
|
||||
define("IMAGE_MAP_STORAGE_FILE", 680001);
|
||||
define("IMAGE_MAP_STORAGE_SESSION", 680002);
|
||||
/* Last generated chart layout */
|
||||
define("CHART_LAST_LAYOUT_REGULAR", 680011);
|
||||
define("CHART_LAST_LAYOUT_STACKED", 680012);
|
||||
/* ImageMap string delimiter */
|
||||
define("IMAGE_MAP_DELIMITER", chr(1));
|
||||
|
||||
/**
|
||||
* pIndicator
|
||||
*/
|
||||
define("INDICATOR_CAPTION_DEFAULT", 700001);
|
||||
define("INDICATOR_CAPTION_EXTENDED", 700002);
|
||||
define("INDICATOR_CAPTION_INSIDE", 700011);
|
||||
define("INDICATOR_CAPTION_BOTTOM", 700012);
|
||||
define("INDICATOR_VALUE_BUBBLE", 700021);
|
||||
define("INDICATOR_VALUE_LABEL", 700022);
|
||||
|
||||
/**
|
||||
* pPie
|
||||
*/
|
||||
/* Class return codes */
|
||||
define("PIE_NO_ABSCISSA", 140001);
|
||||
define("PIE_NO_DATASERIE", 140002);
|
||||
define("PIE_SUMISNULL", 140003);
|
||||
define("PIE_RENDERED", 140000);
|
||||
define("PIE_LABEL_COLOR_AUTO", 140010);
|
||||
define("PIE_LABEL_COLOR_MANUAL", 140011);
|
||||
define("PIE_VALUE_NATURAL", 140020);
|
||||
define("PIE_VALUE_PERCENTAGE", 140021);
|
||||
define("PIE_VALUE_INSIDE", 140030);
|
||||
define("PIE_VALUE_OUTSIDE", 140031);
|
||||
|
||||
/**
|
||||
* pRadar
|
||||
*/
|
||||
define("SEGMENT_HEIGHT_AUTO", 690001);
|
||||
define("RADAR_LAYOUT_STAR", 690011);
|
||||
define("RADAR_LAYOUT_CIRCLE", 690012);
|
||||
define("RADAR_LABELS_ROTATED", 690021);
|
||||
define("RADAR_LABELS_HORIZONTAL", 690022);
|
||||
|
||||
/**
|
||||
* pScatter
|
||||
*/
|
||||
define("SCATTER_MISSING_X_SERIE", 190001);
|
||||
define("SCATTER_MISSING_Y_SERIE", 190002);
|
||||
|
||||
/**
|
||||
* pSplit
|
||||
*/
|
||||
define("TEXT_POS_TOP", 690001);
|
||||
define("TEXT_POS_RIGHT", 690002);
|
||||
|
||||
/**
|
||||
* pSpring
|
||||
*/
|
||||
define("NODE_TYPE_FREE", 690001);
|
||||
define("NODE_TYPE_CENTRAL", 690002);
|
||||
define("NODE_SHAPE_CIRCLE", 690011);
|
||||
define("NODE_SHAPE_TRIANGLE", 690012);
|
||||
define("NODE_SHAPE_SQUARE", 690013);
|
||||
define("ALGORITHM_RANDOM", 690021);
|
||||
define("ALGORITHM_WEIGHTED", 690022);
|
||||
define("ALGORITHM_CIRCULAR", 690023);
|
||||
define("ALGORITHM_CENTRAL", 690024);
|
||||
define("LABEL_CLASSIC", 690031);
|
||||
define("LABEL_LIGHT", 690032);
|
||||
|
||||
/**
|
||||
* pStock
|
||||
*/
|
||||
define("STOCK_MISSING_SERIE", 180001);
|
||||
|
||||
/**
|
||||
* pSurface
|
||||
*/
|
||||
define("UNKNOWN", 0.123456789);
|
||||
define("IGNORED", -1);
|
||||
define("LABEL_POSITION_LEFT", 880001);
|
||||
define("LABEL_POSITION_RIGHT", 880002);
|
||||
define("LABEL_POSITION_TOP", 880003);
|
||||
define("LABEL_POSITION_BOTTOM", 880004);
|
7
vendor/szymach/c-pchart/coverage.sh
vendored
Normal file
7
vendor/szymach/c-pchart/coverage.sh
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
set -ev
|
||||
if [ ! -f bin/ocular.phar ]; then
|
||||
wget -O bin/ocular.phar https://scrutinizer-ci.com/ocular.phar
|
||||
fi
|
||||
|
||||
php bin/ocular.phar code-coverage:upload --format=php-clover tests/_output/coverage.xml
|
9
vendor/szymach/c-pchart/docker-compose.yml
vendored
Normal file
9
vendor/szymach/c-pchart/docker-compose.yml
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
version: "3.4"
|
||||
|
||||
services:
|
||||
web:
|
||||
image: fsiopen/docker-php-apache:alpine-8.1
|
||||
container_name: c-pchart-php
|
||||
volumes:
|
||||
- ./:/var/www/application
|
26
vendor/szymach/c-pchart/phpcs.xml
vendored
Normal file
26
vendor/szymach/c-pchart/phpcs.xml
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0"?>
|
||||
<ruleset name="Custom Standard">
|
||||
|
||||
<rule ref="PSR2"/>
|
||||
|
||||
<file>src</file>
|
||||
<file>tests</file>
|
||||
|
||||
<exclude-pattern>vendor/*</exclude-pattern>
|
||||
<exclude-pattern>*.db</exclude-pattern>
|
||||
<exclude-pattern>*.color</exclude-pattern>
|
||||
<exclude-pattern>*.ttf</exclude-pattern>
|
||||
|
||||
<arg name="cache" value=".phpcs-cache"/>
|
||||
<arg name="encoding" value="utf-8"/>
|
||||
<arg name="report" value="full"/>
|
||||
<arg name="report-width" value="120"/>
|
||||
<arg name="colors"/>
|
||||
<arg value="p"/>
|
||||
|
||||
<rule ref="PSR2.Methods.MethodDeclaration">
|
||||
<exclude-pattern>tests/unit/*Test.php</exclude-pattern>
|
||||
<exclude-pattern>tests/_support/Helper/Unit.php</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
</ruleset>
|
107
vendor/szymach/c-pchart/resources/barcode/128B.db
vendored
Normal file
107
vendor/szymach/c-pchart/resources/barcode/128B.db
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
0;32;11011001100
|
||||
1;33;11001101100
|
||||
2;34;11001100110
|
||||
3;35;10010011000
|
||||
4;36;10010001100
|
||||
5;37;10001001100
|
||||
6;38;10011001000
|
||||
7;39;10011000100
|
||||
8;40;10001100100
|
||||
9;41;11001001000
|
||||
10;42;11001000100
|
||||
11;43;11000100100
|
||||
12;44;10110011100
|
||||
13;45;10011011100
|
||||
14;46;10011001110
|
||||
15;47;10111001100
|
||||
16;48;10011101100
|
||||
17;49;10011100110
|
||||
18;50;11001110010
|
||||
19;51;11001011100
|
||||
20;52;11001001110
|
||||
21;53;11011100100
|
||||
22;54;11001110100
|
||||
23;55;11101101110
|
||||
24;56;11101001100
|
||||
25;57;11100101100
|
||||
26;58;11100100110
|
||||
27;59;11101100100
|
||||
28;60;11100110100
|
||||
29;61;11100110010
|
||||
30;62;11011011000
|
||||
31;63;11011000110
|
||||
32;64;11000110110
|
||||
33;65;10100011000
|
||||
34;66;10001011000
|
||||
35;67;10001000110
|
||||
36;68;10110001000
|
||||
37;69;10001101000
|
||||
38;70;10001100010
|
||||
39;71;11010001000
|
||||
40;72;11000101000
|
||||
41;73;11000100010
|
||||
42;74;10110111000
|
||||
43;75;10110001110
|
||||
44;76;10001101110
|
||||
45;77;10111011000
|
||||
46;78;10111000110
|
||||
47;79;10001110110
|
||||
48;80;11101110110
|
||||
49;81;11010001110
|
||||
50;82;11000101110
|
||||
51;83;11011101000
|
||||
52;84;11011100010
|
||||
53;85;11011101110
|
||||
54;86;11101011000
|
||||
55;87;11101000110
|
||||
56;88;11100010110
|
||||
57;89;11101101000
|
||||
58;90;11101100010
|
||||
59;91;11100011010
|
||||
60;92;11101111010
|
||||
61;93;11001000010
|
||||
62;94;11110001010
|
||||
63;95;10100110000
|
||||
64;96;10100001100
|
||||
65;97;10010110000
|
||||
66;98;10010000110
|
||||
67;99;10000101100
|
||||
68;100;10000100110
|
||||
69;101;10110010000
|
||||
70;102;10110000100
|
||||
71;103;10011010000
|
||||
72;104;10011000010
|
||||
73;105;10000110100
|
||||
74;106;10000110010
|
||||
75;107;11000010010
|
||||
76;108;11001010000
|
||||
77;109;11110111010
|
||||
78;110;11000010100
|
||||
79;111;10001111010
|
||||
80;112;10100111100
|
||||
81;113;10010111100
|
||||
82;114;10010011110
|
||||
83;115;10111100100
|
||||
84;116;10011110100
|
||||
85;117;10011110010
|
||||
86;118;11110100100
|
||||
87;119;11110010100
|
||||
88;120;11110010010
|
||||
89;121;11011011110
|
||||
90;122;11011110110
|
||||
91;123;11110110110
|
||||
92;124;10101111000
|
||||
93;125;10100011110
|
||||
94;126;10001011110
|
||||
95;200;10111101000
|
||||
96;201;10111100010
|
||||
97;202;11110101000
|
||||
98;203;11110100010
|
||||
99;204;10111011110
|
||||
100;205;10111101110
|
||||
101;206;11101011110
|
||||
102;207;11110101110
|
||||
103;208;11010000100
|
||||
104;209;11010010000
|
||||
105;210;11010011100
|
||||
106;211;1100011101011
|
44
vendor/szymach/c-pchart/resources/barcode/39.db
vendored
Normal file
44
vendor/szymach/c-pchart/resources/barcode/39.db
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
0;101001101101
|
||||
1;110100101011
|
||||
2;101100101011
|
||||
3;110110010101
|
||||
4;101001101011
|
||||
5;110100110101
|
||||
6;101100110101
|
||||
7;101001011011
|
||||
8;110100101101
|
||||
9;101100101101
|
||||
A;110101001011
|
||||
B;101101001011
|
||||
C;110110100101
|
||||
D;101011001011
|
||||
E;110101100101
|
||||
F;101101100101
|
||||
G;101010011011
|
||||
H;110101001101
|
||||
I;101101001101
|
||||
J;101011001101
|
||||
K;110101010011
|
||||
L;101101010011
|
||||
M;110110101001
|
||||
N;101011010011
|
||||
O;110101101001
|
||||
P;101101101001
|
||||
Q;101010110011
|
||||
R;110101011001
|
||||
S;101101011001
|
||||
T;101011011001
|
||||
U;110010101011
|
||||
V;100110101011
|
||||
W;110011010101
|
||||
X;100101101011
|
||||
Y;110010110101
|
||||
Z;100110110101
|
||||
-;100101011011
|
||||
.;110010101101
|
||||
;100110101101
|
||||
$;100100100101
|
||||
/;100100101001
|
||||
+;100101001001
|
||||
%;101001001001
|
||||
*;100101101101
|
87
vendor/szymach/c-pchart/resources/doc/2d_pie.md
vendored
Normal file
87
vendor/szymach/c-pchart/resources/doc/2d_pie.md
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
# Drawing a 2D pie chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.pie.draw2dpie.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Pie;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
// Create and populate data
|
||||
$data = new Data();
|
||||
$data->addPoints([40, 60, 15, 10, 6, 4], "ScoreA");
|
||||
$data->setSerieDescription("ScoreA", "Application A");
|
||||
|
||||
// Define the absissa serie
|
||||
$data->addPoints(["<10", "10<>20", "20<>40", "40<>60", "60<>80", ">80"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
// Create the image
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
// Draw a solid background
|
||||
$backgroundSettings = [
|
||||
"R" => 173,
|
||||
"G" => 152,
|
||||
"B" => 217,
|
||||
"Dash" => 1,
|
||||
"DashR" => 193,
|
||||
"DashG" => 172,
|
||||
"DashB" => 237
|
||||
];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $backgroundSettings);
|
||||
|
||||
//Draw a gradient overlay
|
||||
$gradientSettings = [
|
||||
"StartR" => 209,
|
||||
"StartG" => 150,
|
||||
"StartB" => 231,
|
||||
"EndR" => 111,
|
||||
"EndG" => 3,
|
||||
"EndB" => 138,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $gradientSettings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
// Add a border to the picture
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
// Write the picture title
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pPie - Draw 2D pie charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
// Set the default font properties
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 10, "R" => 80, "G" => 80, "B" => 80]);
|
||||
|
||||
// Enable shadow computing
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 150, "G" => 150, "B" => 150, "Alpha" => 100]);
|
||||
$image->drawText(140, 200, "Single AA pass", ["R" => 0, "G" => 0, "B" => 0, "Align" => TEXT_ALIGN_TOPMIDDLE]);
|
||||
|
||||
// Create and draw the chart
|
||||
$pieChart = new Pie($image, $data);
|
||||
$pieChart->draw2DPie(140, 125, ["SecondPass" => false]);
|
||||
$pieChart->draw2DPie(340, 125, ["DrawLabels" => true, "Border" => true]);
|
||||
$pieChart->draw2DPie(540, 125, [
|
||||
"DataGapAngle" => 10,
|
||||
"DataGapRadius" => 6,
|
||||
"Border" => true,
|
||||
"BorderR" => 255,
|
||||
"BorderG" => 255,
|
||||
"BorderB" => 255
|
||||
]);
|
||||
$image->drawText(540, 200, "Extended AA pass / Splitted", ["R" => 0, "G" => 0, "B" => 0, "Align" => TEXT_ALIGN_TOPMIDDLE]);
|
||||
|
||||
$pieChart->pChartObject->autoOutput("example.draw2DPie.png");
|
||||
```
|
||||
|
72
vendor/szymach/c-pchart/resources/doc/2d_ring.md
vendored
Normal file
72
vendor/szymach/c-pchart/resources/doc/2d_ring.md
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
# Drawing a 2D ring chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.pie.draw2dring.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Pie;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([50, 2, 3, 4, 7, 10, 25, 48, 41, 10], "ScoreA");
|
||||
$data->setSerieDescription("ScoreA", "Application A");
|
||||
|
||||
/* Define the absissa serie */
|
||||
$data->addPoints(["A0", "B1", "C2", "D3", "E4", "F5", "G6", "H7", "I8", "J9"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(300, 260, $data);
|
||||
|
||||
/* Draw a solid background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 300, 300, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 300, 260, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 300, 20, DIRECTION_VERTICAL, ["StartR" => 0, "StartG" => 0,
|
||||
"StartB" => 0, "EndR" => 50, "EndG" => 50, "EndB" => 50, "Alpha" => 100]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 299, 259, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pPie - Draw 2D ring charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Set the default font properties */
|
||||
$image->setFontProperties([
|
||||
"FontName" => "Forgotte.ttf",
|
||||
"FontSize" => 10,
|
||||
"R" => 80,
|
||||
"G" => 80,
|
||||
"B" => 80
|
||||
]);
|
||||
|
||||
/* Enable shadow computing */
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 50]);
|
||||
|
||||
/* Create the pPie object */
|
||||
$pieChart = new Pie($image, $data);
|
||||
|
||||
/* Draw an AA pie chart */
|
||||
$pieChart->draw2DRing(160, 140, ["DrawLabels" => true, "LabelStacked" => true, "Border" => true]);
|
||||
|
||||
/* Write the legend box */
|
||||
$image->setShadow(false);
|
||||
$pieChart->drawPieLegend(15, 40, ["Alpha" => 20]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.draw2DRing.png");
|
||||
```
|
119
vendor/szymach/c-pchart/resources/doc/3d_pie.md
vendored
Normal file
119
vendor/szymach/c-pchart/resources/doc/3d_pie.md
vendored
Normal file
|
@ -0,0 +1,119 @@
|
|||
# Drawing a 3D pie chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.pie.draw3dpie.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Pie;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([40, 30, 20], "ScoreA");
|
||||
$data->setSerieDescription("ScoreA", "Application A");
|
||||
|
||||
/* Define the absissa serie */
|
||||
$data->addPoints(["A", "B", "C"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data, true);
|
||||
|
||||
/* Draw a solid background */
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, [
|
||||
"R" => 173,
|
||||
"G" => 152,
|
||||
"B" => 217,
|
||||
"Dash" => 1,
|
||||
"DashR" => 193,
|
||||
"DashG" => 172,
|
||||
"DashB" => 237
|
||||
]);
|
||||
|
||||
/* Draw a gradient overlay */
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, [
|
||||
"StartR" => 209,
|
||||
"StartG" => 150,
|
||||
"StartB" => 231,
|
||||
"EndR" => 111,
|
||||
"EndG" => 3,
|
||||
"EndB" => 138,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pPie - Draw 3D pie charts", ["R" => 255, "G" => 255,
|
||||
"B" => 255]);
|
||||
|
||||
/* Set the default font properties */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 10,
|
||||
"R" => 80, "G" => 80, "B" => 80]);
|
||||
|
||||
/* Create the pPie object */
|
||||
$pieChart = new Pie($image, $data);
|
||||
|
||||
/* Define the slice color */
|
||||
$pieChart->setSliceColor(0, ["R" => 143, "G" => 197, "B" => 0]);
|
||||
$pieChart->setSliceColor(1, ["R" => 97, "G" => 77, "B" => 63]);
|
||||
$pieChart->setSliceColor(2, ["R" => 97, "G" => 113, "B" => 63]);
|
||||
|
||||
/* Draw a simple pie chart */
|
||||
$pieChart->draw3DPie(120, 125, ["SecondPass" => false]);
|
||||
|
||||
/* Draw an AA pie chart */
|
||||
$pieChart->draw3DPie(340, 125, ["DrawLabels" => true, "Border" => true]);
|
||||
|
||||
/* Enable shadow computing */
|
||||
$image->setShadow(true, ["X" => 3, "Y" => 3, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw a splitted pie chart */
|
||||
$pieChart->draw3DPie(560, 125, ["WriteValues" => true, "DataGapAngle" => 10, "DataGapRadius" => 6, "Border" => true]);
|
||||
|
||||
/* Write the legend */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 20]);
|
||||
$image->drawText(120, 200, "Single AA pass", [
|
||||
"DrawBox" => true,
|
||||
"BoxRounded" => true,
|
||||
"R" => 0,
|
||||
"G" => 0,
|
||||
"B" => 0,
|
||||
"Align" => TEXT_ALIGN_TOPMIDDLE
|
||||
]);
|
||||
$image->drawText(440, 200, "Extended AA pass / Splitted", [
|
||||
"DrawBox" => true,
|
||||
"BoxRounded" => true,
|
||||
"R" => 0,
|
||||
"G" => 0,
|
||||
"B" => 0,
|
||||
"Align" => TEXT_ALIGN_TOPMIDDLE
|
||||
]);
|
||||
|
||||
/* Write the legend box */
|
||||
$image->setFontProperties([
|
||||
"FontName" => "Silkscreen.ttf",
|
||||
"FontSize" => 6,
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
$pieChart->drawPieLegend(600, 8, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.draw3DPie.png");
|
||||
```
|
78
vendor/szymach/c-pchart/resources/doc/3d_ring.md
vendored
Normal file
78
vendor/szymach/c-pchart/resources/doc/3d_ring.md
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
# Drawing a 3D ring chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.pie.draw3dring.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Pie;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([50, 2, 3, 4, 7, 10, 25, 48, 41, 10], "ScoreA");
|
||||
$data->setSerieDescription("ScoreA", "Application A");
|
||||
|
||||
/* Define the absissa serie */
|
||||
$data->addPoints(["A0", "B1", "C2", "D3", "E4", "F5", "G6", "H7", "I8", "J9"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw a solid background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pPie - Draw 3D ring charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Set the default font properties */
|
||||
$image->setFontProperties([
|
||||
"FontName" => "Forgotte.ttf",
|
||||
"FontSize" => 10,
|
||||
"R" => 80,
|
||||
"G" => 80,
|
||||
"B" => 80
|
||||
]);
|
||||
|
||||
/* Enable shadow computing */
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 50]);
|
||||
|
||||
/* Create the pPie object */
|
||||
$pieChart = new Pie($image, $data);
|
||||
|
||||
/* Draw an AA pie chart */
|
||||
$pieChart->draw3DRing(200, 200, ["DrawLabels" => true, "LabelStacked" => true, "Border" => true]);
|
||||
|
||||
/* Write the legend box */
|
||||
$pieChart->drawPieLegend(80, 360, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER, "Alpha" => 20]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.draw3DRing.png");
|
||||
```
|
72
vendor/szymach/c-pchart/resources/doc/area.md
vendored
Normal file
72
vendor/szymach/c-pchart/resources/doc/area.md
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
# Drawing an area chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawareachart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
$data = new Data();
|
||||
for ($i = 0; $i <= 30; $i++) {
|
||||
$data->addPoints(rand(1, 15), "Probe 1");
|
||||
}
|
||||
$data->setSerieTicks("Probe 2", 4);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
|
||||
// Create the Image object
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Turn off Antialiasing */
|
||||
$image->Antialias = false;
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(150, 35, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Define the chart area */
|
||||
$image->setGraphArea(60, 40, 650, 200);
|
||||
|
||||
/* Draw the scale */
|
||||
$scaleSettings = [
|
||||
"XMargin" => 10,
|
||||
"YMargin" => 10,
|
||||
"Floating" => true,
|
||||
"GridR" => 200,
|
||||
"GridG" => 200,
|
||||
"GridB" => 200,
|
||||
"DrawSubTicks" => true,
|
||||
"CycleBackground" => true
|
||||
];
|
||||
$image->drawScale($scaleSettings);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(600, 20, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Turn on Antialiasing */
|
||||
$image->Antialias = true;
|
||||
|
||||
/* Enable shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the area chart */
|
||||
$Threshold = [];
|
||||
$Threshold[] = ["Min" => 0, "Max" => 5, "R" => 207, "G" => 240, "B" => 20, "Alpha" => 70];
|
||||
$Threshold[] = ["Min" => 5, "Max" => 10, "R" => 240, "G" => 232, "B" => 20, "Alpha" => 70];
|
||||
$Threshold[] = ["Min" => 10, "Max" => 20, "R" => 240, "G" => 191, "B" => 20, "Alpha" => 70];
|
||||
$image->drawAreaChart(["Threshold" => $Threshold]);
|
||||
|
||||
/* Write the thresholds */
|
||||
$image->drawThreshold(5, ["WriteCaption" => true, "Caption" => "Warn Zone", "Alpha" => 70, "Ticks" => 2, "R" => 0, "G" => 0, "B" => 255]);
|
||||
$image->drawThreshold(10, ["WriteCaption" => true, "Caption" => "Error Zone", "Alpha" => 70, "Ticks" => 2, "R" => 0, "G" => 0, "B" => 255]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawAreaChart.threshold.png");
|
||||
```
|
64
vendor/szymach/c-pchart/resources/doc/bar.md
vendored
Normal file
64
vendor/szymach/c-pchart/resources/doc/bar.md
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
# Drawing a bar chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawbarchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([13251, 4118, 3087, 1460, 1248, 156, 26, 9, 8], "Hits");
|
||||
$data->setAxisName(0, "Hits");
|
||||
$data->addPoints(["Firefox", "Chrome", "Internet Explorer", "Opera", "Safari", "Mozilla", "SeaMonkey", "Camino", "Lunascape"], "Browsers");
|
||||
$data->setSerieDescription("Browsers", "Browsers");
|
||||
$data->setAbscissa("Browsers");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(500, 500, $data);
|
||||
$image->drawGradientArea(0, 0, 500, 500, DIRECTION_VERTICAL, [
|
||||
"StartR" => 240,
|
||||
"StartG" => 240,
|
||||
"StartB" => 240,
|
||||
"EndR" => 180,
|
||||
"EndG" => 180,
|
||||
"EndB" => 180,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 500, 500, DIRECTION_HORIZONTAL, [
|
||||
"StartR" => 240,
|
||||
"StartG" => 240,
|
||||
"StartB" => 240,
|
||||
"EndR" => 180,
|
||||
"EndG" => 180,
|
||||
"EndB" => 180,
|
||||
"Alpha" => 20
|
||||
]);
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Draw the chart scale */
|
||||
$image->setGraphArea(100, 30, 480, 480);
|
||||
$image->drawScale([
|
||||
"CycleBackground" => true,
|
||||
"DrawSubTicks" => true,
|
||||
"GridR" => 0,
|
||||
"GridG" => 0,
|
||||
"GridB" => 0,
|
||||
"GridAlpha" => 10,
|
||||
"Pos" => SCALE_POS_TOPBOTTOM
|
||||
]);
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the chart */
|
||||
$image->drawBarChart(["DisplayPos" => LABEL_POS_INSIDE, "DisplayValues" => true, "Rounded" => true, "Surrounding" => 30]);
|
||||
|
||||
/* Write the legend */
|
||||
$image->drawLegend(570, 215, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawBarChart.vertical.png");
|
||||
```
|
89
vendor/szymach/c-pchart/resources/doc/barcode_128.md
vendored
Normal file
89
vendor/szymach/c-pchart/resources/doc/barcode_128.md
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
# Drawing a barcode 128
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.barcode128.pBarcode128.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Barcode\Barcode128;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230);
|
||||
|
||||
/* Draw the background */
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, [
|
||||
"R" => 170,
|
||||
"G" => 183,
|
||||
"B" => 87,
|
||||
"Dash" => 1,
|
||||
"DashR" => 190,
|
||||
"DashG" => 203,
|
||||
"DashB" => 107
|
||||
]);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Draw the top bar */
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "Barcode 128 - Add barcode to your pictures", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Create the barcode 128 object */
|
||||
$barcodeChart = new Barcode128();
|
||||
|
||||
/* Draw a simple barcode */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$barcodeChart->draw($image, "pChart Rocks!", 50, 50, ["ShowLegend" => true, "DrawArea" => true]);
|
||||
|
||||
/* Draw a rotated barcode */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 12]);
|
||||
$barcodeChart->draw($image, "Turn me on", 650, 50, ["ShowLegend" => true, "DrawArea" => true, "Angle" => 90]);
|
||||
|
||||
/* Draw a rotated barcode */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 12]);
|
||||
$barcodeChart->draw($image, "Do what you want !", 290, 140, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"AreaR" => 150,
|
||||
"AreaG" => 30,
|
||||
"AreaB" => 27,
|
||||
"ShowLegend" => true,
|
||||
"DrawArea" => true,
|
||||
"Angle" => 350,
|
||||
"AreaBorderR" => 70,
|
||||
"AreaBorderG" => 20,
|
||||
"AreaBorderB" => 20
|
||||
]);
|
||||
|
||||
/* Render the picture */
|
||||
$image->autoOutput("example.barcode128.png");
|
||||
```
|
82
vendor/szymach/c-pchart/resources/doc/barcode_39.md
vendored
Normal file
82
vendor/szymach/c-pchart/resources/doc/barcode_39.md
vendored
Normal file
|
@ -0,0 +1,82 @@
|
|||
# Drawing a barcode 39
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.barcode39.pBarcode39.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Barcode\Barcode39;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230);
|
||||
|
||||
/* Draw the background */
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, [
|
||||
"R" => 170,
|
||||
"G" => 183,
|
||||
"B" => 87,
|
||||
"Dash" => 1,
|
||||
"DashR" => 190,
|
||||
"DashG" => 203,
|
||||
"DashB" => 107
|
||||
]);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Draw the picture border */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "Barcode 39 - Add barcode to your pictures", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Create the barcode 39 object */
|
||||
$barcodeChart = new Barcode39();
|
||||
|
||||
/* Draw a simple barcode */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$barcodeChart->draw($image, "pChart Rocks!", 50, 50, ["ShowLegend" => true, "DrawArea" => true]);
|
||||
|
||||
/* Draw a rotated barcode */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 12]);
|
||||
$barcodeChart->draw($image, "Turn me on", 650, 50, ["ShowLegend" => true, "DrawArea" => true, "Angle" => 90]);
|
||||
|
||||
/* Draw a rotated barcode */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 12]);
|
||||
$barcodeChart->draw($image, "Do what you want !", 290, 140, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"AreaR" => 150,
|
||||
"AreaG" => 30,
|
||||
"AreaB" => 27,
|
||||
"ShowLegend" => true,
|
||||
"DrawArea" => true,
|
||||
"Angle" => 350,
|
||||
"AreaBorderR" => 70,
|
||||
"AreaBorderG" => 20,
|
||||
"AreaBorderB" => 20
|
||||
]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.barcode39.png");
|
||||
```
|
70
vendor/szymach/c-pchart/resources/doc/best_fit.md
vendored
Normal file
70
vendor/szymach/c-pchart/resources/doc/best_fit.md
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
# Drawing a best fit chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawbestfit.html)
|
||||
|
||||
``` php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
for ($i = 0; $i <= 20; $i++) {
|
||||
$data->addPoints(rand(10, 30) + $i, "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 20; $i++) {
|
||||
$data->addPoints(rand(0, 10) + $i, "Probe 2");
|
||||
}
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Turn off Antialiasing */
|
||||
$image->Antialias = false;
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => ".Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(150, 35, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => ".pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Define the chart area */
|
||||
$image->setGraphArea(60, 40, 650, 200);
|
||||
|
||||
/* Draw the scale */
|
||||
$scaleSettings = [
|
||||
"XMargin" => 10,
|
||||
"YMargin" => 10,
|
||||
"Floating" => true,
|
||||
"GridR" => 200,
|
||||
"GridG" => 200,
|
||||
"GridB" => 200,
|
||||
"DrawSubTicks" => true,
|
||||
"CycleBackground" => true
|
||||
];
|
||||
$image->drawScale($scaleSettings);
|
||||
|
||||
/* Turn on Antialiasing */
|
||||
$image->Antialias = true;
|
||||
|
||||
/* Draw the line of best fit */
|
||||
$image->drawBestFit();
|
||||
|
||||
/* Turn on shadows */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the line chart */
|
||||
$image->drawPlotChart();
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(580, 20, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawBestFit.png");
|
||||
```
|
107
vendor/szymach/c-pchart/resources/doc/bubble.md
vendored
Normal file
107
vendor/szymach/c-pchart/resources/doc/bubble.md
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
# Drawing a linear bubble chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.bubble.drawbubblechart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Bubble;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([34, 55, 15, 62, 38, 42], "Probe1");
|
||||
$data->addPoints([5, 10, 8, 9, 15, 10], "Probe1Weight");
|
||||
$data->addPoints([5, 10, -5, -1, 0, -10], "Probe2");
|
||||
$data->addPoints([6, 10, 14, 10, 14, 6], "Probe2Weight");
|
||||
$data->setSerieDescription("Probe1", "This year");
|
||||
$data->setSerieDescription("Probe2", "Last year");
|
||||
$data->setAxisName(0, "Current stock");
|
||||
$data->addPoints(["Apple", "Banana", "Orange", "Lemon", "Peach", "Strawberry"], "Product");
|
||||
$data->setAbscissa("Product");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawBubbleChart() - draw a linear bubble chart", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Write the title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(40, 55, "Current Stock / Needs chart", ["FontSize" => 14, "Align" => TEXT_ALIGN_BOTTOMLEFT]);
|
||||
|
||||
/* Change the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Create the Bubble chart object and scale up */
|
||||
$bubbleChart = new Bubble($image, $data);
|
||||
|
||||
/* Scale up for the bubble chart */
|
||||
$bubbleDataSeries = ["Probe1", "Probe2"];
|
||||
$bubbleWeightSeries = ["Probe1Weight", "Probe2Weight"];
|
||||
$bubbleChart->bubbleScale($bubbleDataSeries, $bubbleWeightSeries);
|
||||
|
||||
/* Draw the 1st chart */
|
||||
$image->setGraphArea(40, 60, 430, 190);
|
||||
$image->drawFilledRectangle(40, 60, 430, 190, ["R" => 255, "G" => 255, "B" => 255,
|
||||
"Surrounding" => -200, "Alpha" => 10]);
|
||||
$image->drawScale(["DrawSubTicks" => true, "CycleBackground" => true]);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 30]);
|
||||
$bubbleChart->drawBubbleChart($bubbleDataSeries, $bubbleWeightSeries);
|
||||
|
||||
/* Draw the 2nd scale */
|
||||
$image->setShadow(false);
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "DrawSubTicks" => true]);
|
||||
|
||||
/* Draw the 2nd stock chart */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 30]);
|
||||
$bubbleChart->drawbubbleChart($bubbleDataSeries, $bubbleWeightSeries);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(550, 215, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawBubbleChart.png");
|
||||
```
|
83
vendor/szymach/c-pchart/resources/doc/cache.md
vendored
Normal file
83
vendor/szymach/c-pchart/resources/doc/cache.md
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
# Cache operations
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.pcache.pcache.html)
|
||||
|
||||
To speed up the process of creating charts, you can store them in the cache files
|
||||
using the `CpChart\Cache` class. It will create two files - `cache.db` and
|
||||
`index.db` in a dedicated directory (`app\cache` by default, relative to the library's
|
||||
root directory), but you can change these using the `$settings` array passed
|
||||
to the object's constructor.
|
||||
|
||||
Should you decide to use the cache component, the following sections describe
|
||||
how you can do that.
|
||||
|
||||
## Using cache to store and retrieve chart data
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Cache;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
// Standard chart creation
|
||||
$data = new Data();
|
||||
$data->addPoints([1, 3, 4, 3, 5]);
|
||||
|
||||
$image = new Image(700, 230, $data);
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->setGraphArea(60, 40, 670, 190);
|
||||
$image->drawScale();
|
||||
$image->drawSplineChart();
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "Test of the pCache class", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
// Create a cache object and store the chart in it
|
||||
$cache = new Cache([
|
||||
// Optionally change the default directory and file names
|
||||
'CacheFolder' => 'path/to/your/cache/directory',
|
||||
'CacheIndex' => 'name_of_the_index_file.db',
|
||||
'CacheDB' => 'name_of_the_database_file.db'
|
||||
]);
|
||||
$chartHash = $cache->getHash($data); // Chart dentifier in the cache
|
||||
$cache->writeToCache($chartHash, $image);
|
||||
|
||||
// Create an image file from cache
|
||||
$cache->saveFromCache($chartHash, "example.drawCachedSpline.png");
|
||||
|
||||
// Directly stroke the saved data to the browser
|
||||
$cache->strokeFromCache($chartHash)
|
||||
|
||||
// Automatically choose a way to output stored data
|
||||
$cache->autoOutput($chartHash)
|
||||
```
|
||||
|
||||
## Removal operations
|
||||
|
||||
```php
|
||||
// Assuming we have $chartHash and $cache variables from the previous example
|
||||
|
||||
// This will remove the chart by it's hash
|
||||
$cache->remove($chartHash);
|
||||
|
||||
// This will remove every chart in cache older than the amount of seconds passed
|
||||
// into the argument's parameter
|
||||
$cache->removeOlderThan(60 * 60 * 24); // Remove data older than 24 hours
|
||||
|
||||
// This flushes the cache completely and regenerates the .db files
|
||||
$cache->flush();
|
||||
```
|
||||
|
||||
There is also the function called `CpChart\Cache::dbRemoval(array $settings)`,
|
||||
but it only covers two use cases - removing by chart hash and age. Since there
|
||||
are dedicated methods for each of them (`remove` and `removeOlderThan`, respectively),
|
||||
there is no reason to cover it any further.
|
92
vendor/szymach/c-pchart/resources/doc/contour.md
vendored
Normal file
92
vendor/szymach/c-pchart/resources/doc/contour.md
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
# Drawing a contour chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.surface.drawcontour.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Surface;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400);
|
||||
|
||||
/* Create a solid background */
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, [
|
||||
"R" => 179,
|
||||
"G" => 217,
|
||||
"B" => 91,
|
||||
"Dash" => 1,
|
||||
"DashR" => 199,
|
||||
"DashG" => 237,
|
||||
"DashB" => 111
|
||||
]);
|
||||
|
||||
/* Do a gradient overlay */
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 194,
|
||||
"StartG" => 231,
|
||||
"StartB" => 44,
|
||||
"EndR" => 43,
|
||||
"EndG" => 107,
|
||||
"EndB" => 58,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pSurface() :: 2D surface charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Define the charting area */
|
||||
$image->setGraphArea(20, 40, 380, 380);
|
||||
$image->drawFilledRectangle(20, 40, 380, 380, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 20
|
||||
]);
|
||||
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1]);
|
||||
|
||||
/* Create the surface object */
|
||||
$surfaceChart = new Surface($image);
|
||||
|
||||
/* Set the grid size */
|
||||
$surfaceChart->setGrid(20, 20);
|
||||
|
||||
/* Write the axis labels */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$surfaceChart->writeXLabels(["Position" => LABEL_POSITION_BOTTOM]);
|
||||
$surfaceChart->writeYLabels();
|
||||
|
||||
/* Add random values */
|
||||
for ($i = 0; $i <= 50; $i++) {
|
||||
$surfaceChart->addPoint(rand(0, 20), rand(0, 20), rand(0, 100));
|
||||
}
|
||||
|
||||
/* Compute the missing points */
|
||||
$surfaceChart->computeMissing();
|
||||
|
||||
/* Draw the surface chart */
|
||||
$surfaceChart->drawSurface(["Border" => true, "Surrounding" => 40]);
|
||||
|
||||
/* Draw the contour with a threshold of 50 */
|
||||
$surfaceChart->drawContour(50, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.surface.png");
|
||||
```
|
125
vendor/szymach/c-pchart/resources/doc/filled_spline.md
vendored
Normal file
125
vendor/szymach/c-pchart/resources/doc/filled_spline.md
vendored
Normal file
|
@ -0,0 +1,125 @@
|
|||
# Drawing a filled spline chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawFilledSplineChart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->setAxisName(0, "Strength");
|
||||
for ($i = 0; $i <= 720; $i = $i + 20) {
|
||||
$data->addPoints(cos(deg2rad($i)) * 100, "Probe 1");
|
||||
$data->addPoints(cos(deg2rad($i + 90)) * 60, "Probe 2");
|
||||
}
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(847, 304, $data);
|
||||
$image->drawGradientArea(0, 0, 847, 304, DIRECTION_VERTICAL, [
|
||||
"StartR" => 47,
|
||||
"StartG" => 47,
|
||||
"StartB" => 47,
|
||||
"EndR" => 17,
|
||||
"EndG" => 17,
|
||||
"EndB" => 17,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawGradientArea(0, 250, 847, 304, DIRECTION_VERTICAL, [
|
||||
"StartR" => 47,
|
||||
"StartG" => 47,
|
||||
"StartB" => 47,
|
||||
"EndR" => 27,
|
||||
"EndG" => 27,
|
||||
"EndB" => 27,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawLine(0, 249, 847, 249, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
$image->drawLine(0, 250, 847, 250, ["R" => 70, "G" => 70, "B" => 70]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 846, 303, ["R" => 204, "G" => 204, "B" => 204]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawText(423, 14, "Cyclic magnetic field strength", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Align" => TEXT_ALIGN_MIDDLEMIDDLE
|
||||
]);
|
||||
|
||||
/* Define the chart area */
|
||||
$image->setGraphArea(58, 27, 816, 228);
|
||||
|
||||
/* Draw a rectangle */
|
||||
$image->drawFilledRectangle(58, 27, 816, 228, [
|
||||
"R" => 0,
|
||||
"G" => 0,
|
||||
"B" => 0,
|
||||
"Dash" => true,
|
||||
"DashR" => 0,
|
||||
"DashG" => 51,
|
||||
"DashB" => 51,
|
||||
"BorderR" => 0,
|
||||
"BorderG" => 0,
|
||||
"BorderB" => 0
|
||||
]);
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 20]);
|
||||
|
||||
/* Draw the scale */
|
||||
$image->setFontProperties(["R" => 255, "G" => 255, "B" => 255]);
|
||||
$ScaleSettings = [
|
||||
"XMargin" => 4,
|
||||
"DrawSubTicks" => true,
|
||||
"GridR" => 255,
|
||||
"GridG" => 255,
|
||||
"GridB" => 255,
|
||||
"AxisR" => 255,
|
||||
"AxisG" => 255,
|
||||
"AxisB" => 255,
|
||||
"GridAlpha" => 30,
|
||||
"CycleBackground" => true
|
||||
];
|
||||
$image->drawScale($ScaleSettings);
|
||||
|
||||
/* Draw the spline chart */
|
||||
$image->drawFilledSplineChart();
|
||||
|
||||
/* Write the chart boundaries */
|
||||
$BoundsSettings = [
|
||||
"MaxDisplayR" => 237,
|
||||
"MaxDisplayG" => 23,
|
||||
"MaxDisplayB" => 48,
|
||||
"MinDisplayR" => 23,
|
||||
"MinDisplayG" => 144,
|
||||
"MinDisplayB" => 237
|
||||
];
|
||||
$image->writeBounds(BOUND_BOTH, $BoundsSettings);
|
||||
|
||||
/* Write the 0 line */
|
||||
$image->drawThreshold(0, ["WriteCaption" => true]);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->setFontProperties(["R" => 255, "G" => 255, "B" => 255]);
|
||||
$image->drawLegend(560, 266, ["Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Write the 1st data series statistics */
|
||||
$settings = ["R" => 188, "G" => 224, "B" => 46, "Align" => TEXT_ALIGN_BOTTOMLEFT];
|
||||
$image->drawText(620, 270, "Max : " . ceil($data->getMax("Probe 1")), $settings);
|
||||
$image->drawText(680, 270, "Min : " . ceil($data->getMin("Probe 1")), $settings);
|
||||
$image->drawText(740, 270, "Avg : " . ceil($data->getSerieAverage("Probe 1")), $settings);
|
||||
|
||||
/* Write the 2nd data series statistics */
|
||||
$settings = ["R" => 224, "G" => 100, "B" => 46, "Align" => TEXT_ALIGN_BOTTOMLEFT];
|
||||
$image->drawText(620, 283, "Max : " . ceil($data->getMax("Probe 2")), $settings);
|
||||
$image->drawText(680, 283, "Min : " . ceil($data->getMin("Probe 2")), $settings);
|
||||
$image->drawText(740, 283, "Avg : " . ceil($data->getSerieAverage("Probe 2")), $settings);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawFilledSplineChart.png");
|
||||
```
|
75
vendor/szymach/c-pchart/resources/doc/filled_step.md
vendored
Normal file
75
vendor/szymach/c-pchart/resources/doc/filled_step.md
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
# Drawing a filled step chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawfilledstepchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([-4, 2, VOID, 12, 8, 3], "Probe 1");
|
||||
$data->addPoints([3, 12, 15, 8, 5, -5], "Probe 2");
|
||||
$data->addPoints([2, 7, 5, 18, 19, 22], "Probe 3");
|
||||
$data->setSerieTicks("Probe 2", 4);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
$data->addPoints(["Jan", "Feb", "Mar", "Apr", "May", "Jun"], "Labels");
|
||||
$data->setSerieDescription("Labels", "Months");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = ["StartR" => 219, "StartG" => 231, "StartB" => 139, "EndR" => 1, "EndG" => 138, "EndB" => 68, "Alpha" => 50];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawFilledStepChart() - draw a filled step chart", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(250, 55, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Draw the scale and the 1st chart */
|
||||
$image->setGraphArea(60, 60, 450, 190);
|
||||
$image->drawFilledRectangle(60, 60, 450, 190, ["R" => 255, "G" => 255, "B" => 255, "Surrounding" => -200, "Alpha" => 10]);
|
||||
$image->drawScale(["DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawFilledStepChart(["ForceTransparency" => 40, "DisplayValues" => true, "DisplayColor" => DISPLAY_AUTO]);
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Draw the scale and the 2nd chart */
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, ["R" => 255, "G" => 255, "B" => 255, "Surrounding" => -200, "Alpha" => 10]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => -1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->drawFilledStepChart(["ForceTransparency" => 40]);
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(510, 205, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawFilledStepChart.png");
|
||||
```
|
50
vendor/szymach/c-pchart/resources/doc/line.md
vendored
Normal file
50
vendor/szymach/c-pchart/resources/doc/line.md
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Drawing a line chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawlinechart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Build a dataset */
|
||||
$data = new Data();
|
||||
$data->addPoints([-4, VOID, VOID, 12, 8, 3], "Probe 1");
|
||||
$data->addPoints([3, 12, 15, 8, 5, -5], "Probe 2");
|
||||
$data->addPoints([2, 7, 5, 18, 19, 22], "Probe 3");
|
||||
$data->setSerieTicks("Probe 2", 4);
|
||||
$data->setSerieWeight("Probe 3", 2);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
$data->addPoints(["Jan", "Feb", "Mar", "Apr", "May", "Jun"], "Labels");
|
||||
$data->setSerieDescription("Labels", "Months");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the 1st chart */
|
||||
$image = new Image(700, 230, $data);
|
||||
$image->setGraphArea(60, 60, 450, 190);
|
||||
$image->drawFilledRectangle(60, 60, 450, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->setFontProperties(["FontName" => "fonts/pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawLineChart(["DisplayValues" => true, "DisplayColor" => DISPLAY_AUTO]);
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Create the 2nd chart */
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, ["R" => 255, "G" => 255, "B" => 255, "Surrounding" => -200, "Alpha" => 10]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => -1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->drawLineChart();
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Write the legend */
|
||||
$image->drawLegend(510, 205, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
$image->autoOutput("example.drawLineChart.png");
|
||||
```
|
67
vendor/szymach/c-pchart/resources/doc/plot.md
vendored
Normal file
67
vendor/szymach/c-pchart/resources/doc/plot.md
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
# Drawing a plot chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawplotchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
for ($i = 0; $i <= 20; $i++) {
|
||||
$data->addPoints(rand(0, 20), "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 20; $i++) {
|
||||
$data->addPoints(rand(0, 20), "Probe 2");
|
||||
}
|
||||
$data->setSerieShape("Probe 1", SERIE_SHAPE_FILLEDTRIANGLE);
|
||||
$data->setSerieShape("Probe 2", SERIE_SHAPE_FILLEDSQUARE);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Turn off Antialiasing */
|
||||
$image->Antialias = false;
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(150, 35, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Define the chart area */
|
||||
$image->setGraphArea(60, 40, 650, 200);
|
||||
|
||||
/* Draw the scale */
|
||||
$scaleSettings = [
|
||||
"XMargin" => 10,
|
||||
"YMargin" => 10,
|
||||
"Floating" => true,
|
||||
"GridR" => 200,
|
||||
"GridG" => 200,
|
||||
"GridB" => 200,
|
||||
"DrawSubTicks" => true,
|
||||
"CycleBackground" => true
|
||||
];
|
||||
$image->drawScale($scaleSettings);
|
||||
|
||||
/* Turn on Antialiasing */
|
||||
$image->Antialias = true;
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the line chart */
|
||||
$image->drawPlotChart();
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(580, 20, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawPlotChart.simple.png");
|
||||
```
|
96
vendor/szymach/c-pchart/resources/doc/polar.md
vendored
Normal file
96
vendor/szymach/c-pchart/resources/doc/polar.md
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
# Drawing a polar chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.draw.polar.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Radar;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([10, 20, 30, 40, 50, 60, 70, 80, 90], "ScoreA");
|
||||
$data->addPoints([20, 40, 50, 12, 10, 30, 40, 50, 60], "ScoreB");
|
||||
$data->setSerieDescription("ScoreA", "Coverage A");
|
||||
$data->setSerieDescription("ScoreB", "Coverage B");
|
||||
|
||||
/* Define the absissa serie */
|
||||
$data->addPoints([40, 80, 120, 160, 200, 240, 280, 320, 360], "Coord");
|
||||
$data->setAbscissa("Coord");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw a solid background */
|
||||
$settings = ["R" => 179, "G" => 217, "B" => 91, "Dash" => 1, "DashR" => 199, "DashG" => 237, "DashB" => 111];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay some gradient areas */
|
||||
$settings = ["StartR" => 194, "StartG" => 231, "StartB" => 44, "EndR" => 43, "EndG" => 107, "EndB" => 58, "Alpha" => 50];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pRadar - Draw polar charts", ["R" => 255, "G" => 255,
|
||||
"B" => 255]);
|
||||
|
||||
/* Set the default font properties */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 10,
|
||||
"R" => 80, "G" => 80, "B" => 80]);
|
||||
|
||||
/* Enable shadow computing */
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0,
|
||||
"Alpha" => 10]);
|
||||
|
||||
/* Create the pRadar object */
|
||||
$radarChart = new Radar();
|
||||
|
||||
/* Draw a polar chart */
|
||||
$image->setGraphArea(10, 25, 340, 225);
|
||||
$options = ["BackgroundGradient" => [
|
||||
"StartR" => 255,
|
||||
"StartG" => 255,
|
||||
"StartB" => 255,
|
||||
"StartAlpha" => 100,
|
||||
"EndR" => 207,
|
||||
"EndG" => 227,
|
||||
"EndB" => 125,
|
||||
"EndAlpha" => 50
|
||||
]];
|
||||
$radarChart->drawPolar($image, $data, $options);
|
||||
|
||||
/* Draw a polar chart */
|
||||
$image->setGraphArea(350, 25, 690, 225);
|
||||
$options = [
|
||||
"LabelPos" => RADAR_LABELS_HORIZONTAL,
|
||||
"BackgroundGradient" => [
|
||||
"StartR" => 255, "StartG" => 255, "StartB" => 255, "StartAlpha" => 50, "EndR" => 32,
|
||||
"EndG" => 109, "EndB" => 174, "EndAlpha" => 30
|
||||
],
|
||||
"AxisRotation" => 0,
|
||||
"DrawPoly" => true,
|
||||
"PolyAlpha" => 50
|
||||
];
|
||||
$radarChart->drawPolar($image, $data, $options);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawLegend(270, 205, ["Style" => LEGEND_BOX, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.polar.png");
|
||||
```
|
71
vendor/szymach/c-pchart/resources/doc/progress.md
vendored
Normal file
71
vendor/szymach/c-pchart/resources/doc/progress.md
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
# Drawing a progress chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawprogress.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
$image = new Image(700, 250);
|
||||
|
||||
/* Enable shadow support */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 20]);
|
||||
|
||||
/* Left Red bar */
|
||||
$progressOptions = ["R" => 209, "G" => 31, "B" => 27, "Surrounding" => 20, "BoxBorderR" => 0,
|
||||
"BoxBorderG" => 0, "BoxBorderB" => 0, "BoxBackR" => 255, "BoxBackG" => 255, "BoxBackB" => 255,
|
||||
"RFade" => 206, "GFade" => 133, "BFade" => 30, "ShowLabel" => true];
|
||||
$image->drawProgress(40, 60, 77, $progressOptions);
|
||||
|
||||
/* Left Orange bar */
|
||||
$progressOptions = ["Width" => 165, "R" => 209, "G" => 125, "B" => 27, "Surrounding" => 20,
|
||||
"BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0, "BoxBackR" => 255, "BoxBackG" => 255,
|
||||
"BoxBackB" => 255, "NoAngle" => true, "ShowLabel" => true, "LabelPos" => LABEL_POS_RIGHT];
|
||||
$image->drawProgress(40, 100, 50, $progressOptions);
|
||||
|
||||
/* Left Yellow bar */
|
||||
$progressOptions = ["Width" => 165, "R" => 209, "G" => 198, "B" => 27, "Surrounding" => 20,
|
||||
"BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0, "BoxBackR" => 255, "BoxBackG" => 255,
|
||||
"BoxBackB" => 255, "ShowLabel" => true, "LabelPos" => LABEL_POS_LEFT];
|
||||
$image->drawProgress(75, 140, 25, $progressOptions);
|
||||
|
||||
/* Left Green bar */
|
||||
$progressOptions = ["Width" => 400, "R" => 134, "G" => 209, "B" => 27, "Surrounding" => 20,
|
||||
"BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0, "BoxBackR" => 255, "BoxBackG" => 255,
|
||||
"BoxBackB" => 255, "RFade" => 206, "GFade" => 133, "BFade" => 30, "ShowLabel" => true,
|
||||
"LabelPos" => LABEL_POS_CENTER];
|
||||
$image->drawProgress(40, 180, 80, $progressOptions);
|
||||
|
||||
/* Right vertical Red bar */
|
||||
$progressOptions = ["Width" => 20, "Height" => 150, "R" => 209, "G" => 31, "B" => 27,
|
||||
"Surrounding" => 20, "BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0,
|
||||
"BoxBackR" => 255, "BoxBackG" => 255, "BoxBackB" => 255, "RFade" => 206, "GFade" => 133,
|
||||
"BFade" => 30, "ShowLabel" => true, "Orientation" => ORIENTATION_VERTICAL, "LabelPos" => LABEL_POS_BOTTOM];
|
||||
$image->drawProgress(500, 200, 77, $progressOptions);
|
||||
|
||||
/* Right vertical Orange bar */
|
||||
$progressOptions = ["Width" => 20, "Height" => 150, "R" => 209, "G" => 125,
|
||||
"B" => 27, "Surrounding" => 20, "BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0,
|
||||
"BoxBackR" => 255, "BoxBackG" => 255, "BoxBackB" => 255, "NoAngle" => true, "ShowLabel" => true,
|
||||
"Orientation" => ORIENTATION_VERTICAL, "LabelPos" => LABEL_POS_TOP];
|
||||
$image->drawProgress(540, 200, 50, $progressOptions);
|
||||
|
||||
/* Right vertical Yellow bar */
|
||||
$progressOptions = ["Width" => 20, "Height" => 150, "R" => 209, "G" => 198,
|
||||
"B" => 27, "Surrounding" => 20, "BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0,
|
||||
"BoxBackR" => 255, "BoxBackG" => 255, "BoxBackB" => 255, "ShowLabel" => true,
|
||||
"Orientation" => ORIENTATION_VERTICAL, "LabelPos" => LABEL_POS_INSIDE];
|
||||
$image->drawProgress(580, 200, 25, $progressOptions);
|
||||
|
||||
/* Right vertical Green bar */
|
||||
$progressOptions = ["Width" => 20, "Height" => 150, "R" => 134, "G" => 209,
|
||||
"B" => 27, "Surrounding" => 20, "BoxBorderR" => 0, "BoxBorderG" => 0, "BoxBorderB" => 0,
|
||||
"BoxBackR" => 255, "BoxBackG" => 255, "BoxBackB" => 255, "RFade" => 206, "GFade" => 133,
|
||||
"BFade" => 30, "ShowLabel" => true, "Orientation" => ORIENTATION_VERTICAL, "LabelPos" => LABEL_POS_CENTER];
|
||||
$image->drawProgress(620, 200, 80, $progressOptions);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawProgressChart.png");
|
||||
```
|
98
vendor/szymach/c-pchart/resources/doc/radar.md
vendored
Normal file
98
vendor/szymach/c-pchart/resources/doc/radar.md
vendored
Normal file
|
@ -0,0 +1,98 @@
|
|||
# Drawing a radar chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.draw.radar.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Radar;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Prepare some nice data & axis config */
|
||||
$data = new Data();
|
||||
$data->addPoints([40, 20, 15, 10, 8, 4], "ScoreA");
|
||||
$data->addPoints([8, 10, 12, 20, 30, 15], "ScoreB");
|
||||
$data->setSerieDescription("ScoreA", "Application A");
|
||||
$data->setSerieDescription("ScoreB", "Application B");
|
||||
|
||||
/* Create the X serie */
|
||||
$data->addPoints(["Size", "Speed", "Reliability", "Functionalities", "Ease of use", "Weight"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw a solid background */
|
||||
$settings = ["R" => 179, "G" => 217, "B" => 91, "Dash" => 1, "DashR" => 199, "DashG" => 237, "DashB" => 111];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay some gradient areas */
|
||||
$settings = ["StartR" => 194, "StartG" => 231, "StartB" => 44, "EndR" => 43, "EndG" => 107, "EndB" => 58, "Alpha" => 50];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Draw the border */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pRadar - Draw radar charts", ["R" => 255, "G" => 255,
|
||||
"B" => 255]);
|
||||
|
||||
/* Define general drawing parameters */
|
||||
$image->setFontProperties([
|
||||
"FontName" => "Forgotte.ttf",
|
||||
"FontSize" => 10,
|
||||
"R" => 80,
|
||||
"G" => 80,
|
||||
"B" => 80
|
||||
]);
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Create the radar object */
|
||||
$radarChart = new Radar();
|
||||
|
||||
/* Draw the 1st radar chart */
|
||||
$image->setGraphArea(10, 25, 340, 225);
|
||||
$Options = ["Layout" => RADAR_LAYOUT_STAR, "BackgroundGradient" => [
|
||||
"StartR" => 255,
|
||||
"StartG" => 255,
|
||||
"StartB" => 255,
|
||||
"StartAlpha" => 100,
|
||||
"EndR" => 207,
|
||||
"EndG" => 227,
|
||||
"EndB" => 125,
|
||||
"EndAlpha" => 50
|
||||
]];
|
||||
$radarChart->drawRadar($image, $data, $Options);
|
||||
|
||||
/* Draw the 2nd radar chart */
|
||||
$image->setGraphArea(350, 25, 690, 225);
|
||||
$Options = ["Layout" => RADAR_LAYOUT_CIRCLE, "LabelPos" => RADAR_LABELS_HORIZONTAL, "BackgroundGradient" => [
|
||||
"StartR" => 255,
|
||||
"StartG" => 255,
|
||||
"StartB" => 255,
|
||||
"StartAlpha" => 50,
|
||||
"EndR" => 32,
|
||||
"EndG" => 109,
|
||||
"EndB" => 174,
|
||||
"EndAlpha" => 30
|
||||
]];
|
||||
$radarChart->drawRadar($image, $data, $Options);
|
||||
|
||||
/* Write down the legend */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawLegend(270, 205, ["Style" => LEGEND_BOX, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture */
|
||||
$image->render("drawRadar.png");
|
||||
```
|
108
vendor/szymach/c-pchart/resources/doc/scatter_best_fit.md
vendored
Normal file
108
vendor/szymach/c-pchart/resources/doc/scatter_best_fit.md
vendored
Normal file
|
@ -0,0 +1,108 @@
|
|||
# Drawing a scatter best fit chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscatterbestfit.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(rand(1, 20) * 10 + rand(0, $i), "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(rand(1, 2) * 10 + rand(0, $i), "Probe 2");
|
||||
}
|
||||
$data->setAxisName(0, "X-Index");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_TOP);
|
||||
|
||||
/* Create the Y axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints($i, "Probe 3");
|
||||
}
|
||||
$data->setSerieOnAxis("Probe 3", 1);
|
||||
$data->setAxisName(1, "Y-Index");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisPosition(1, AXIS_POSITION_LEFT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("Probe 1", "Probe 3", 0);
|
||||
$data->setScatterSerieDescription(0, "This year");
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("Probe 2", "Probe 3", 1);
|
||||
$data->setScatterSerieDescription(1, "Last Year");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawScatterBestFit() - Linear regression", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 60, 350, 360);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale();
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterPlotChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(280, 380, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Draw the line of best fit */
|
||||
$myScatter->drawScatterBestFit();
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawScatterBestFit.png");
|
||||
```
|
100
vendor/szymach/c-pchart/resources/doc/scatter_line.md
vendored
Normal file
100
vendor/szymach/c-pchart/resources/doc/scatter_line.md
vendored
Normal file
|
@ -0,0 +1,100 @@
|
|||
# Drawing a scatter line chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscatterlineChart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(cos(deg2rad($i)) * 20, "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(sin(deg2rad($i)) * 20, "Probe 2");
|
||||
}
|
||||
$data->setAxisName(0, "Index");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_BOTTOM);
|
||||
|
||||
/* Create the Y axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints($i, "Probe 3");
|
||||
}
|
||||
$data->setSerieOnAxis("Probe 3", 1);
|
||||
$data->setAxisName(1, "Degree");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisUnit(1, "°");
|
||||
$data->setAxisPosition(1, AXIS_POSITION_RIGHT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("Probe 1", "Probe 3", 0);
|
||||
$data->setScatterSerieDescription(0, "This year");
|
||||
$data->setScatterSerieTicks(0, 4);
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("Probe 2", "Probe 3", 1);
|
||||
$data->setScatterSerieDescription(1, "Last Year");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = ["StartR" => 219, "StartG" => 231, "StartB" => 139, "EndR" => 1, "EndG" => 138, "EndB" => 68, "Alpha" => 50];
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawScatterLineChart() - Draw a scatter line chart", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 50, 350, 350);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale();
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterLineChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(280, 380, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawScatterLineChart.png");
|
||||
```
|
107
vendor/szymach/c-pchart/resources/doc/scatter_plot.md
vendored
Normal file
107
vendor/szymach/c-pchart/resources/doc/scatter_plot.md
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
# Drawing a scatter plot chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscatterplotChart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(cos(deg2rad($i)) * 20, "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints(sin(deg2rad($i)) * 20, "Probe 2");
|
||||
}
|
||||
$data->setAxisName(0, "Index");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_BOTTOM);
|
||||
|
||||
/* Create the Y axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 10) {
|
||||
$data->addPoints($i, "Probe 3");
|
||||
}
|
||||
$data->setSerieOnAxis("Probe 3", 1);
|
||||
$data->setAxisName(1, "Degree");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisUnit(1, "°");
|
||||
$data->setAxisPosition(1, AXIS_POSITION_RIGHT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("Probe 1", "Probe 3", 0);
|
||||
$data->setScatterSerieDescription(0, "This year");
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("Probe 2", "Probe 3", 1);
|
||||
$data->setScatterSerieDescription(1, "Last Year");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawScatterPlotChart() - Draw a scatter plot chart", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 50, 350, 350);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale();
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterPlotChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(260, 375, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawScatterPlotChart.png");
|
||||
```
|
108
vendor/szymach/c-pchart/resources/doc/scatter_spline.md
vendored
Normal file
108
vendor/szymach/c-pchart/resources/doc/scatter_spline.md
vendored
Normal file
|
@ -0,0 +1,108 @@
|
|||
# Drawing a scatter spline chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscattersplineChart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 90) {
|
||||
$data->addPoints(rand(1, 30), "Probe 1");
|
||||
}
|
||||
for ($i = 0; $i <= 360; $i = $i + 90) {
|
||||
$data->addPoints(rand(1, 30), "Probe 2");
|
||||
}
|
||||
$data->setAxisName(0, "Index");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_BOTTOM);
|
||||
|
||||
/* Create the Y axis and the binded series */
|
||||
for ($i = 0; $i <= 360; $i = $i + 90) {
|
||||
$data->addPoints($i, "Probe 3");
|
||||
}
|
||||
$data->setSerieOnAxis("Probe 3", 1);
|
||||
$data->setAxisName(1, "Degree");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisUnit(1, "°");
|
||||
$data->setAxisPosition(1, AXIS_POSITION_RIGHT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("Probe 1", "Probe 3", 0);
|
||||
$data->setScatterSerieDescription(0, "This year");
|
||||
$data->setScatterSerieTicks(0, 4);
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("Probe 2", "Probe 3", 1);
|
||||
$data->setScatterSerieDescription(1, "Last Year");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawScatterSplineChart() - Draw a scatter spline chart", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 50, 350, 350);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale();
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterSplineChart();
|
||||
$myScatter->drawScatterPlotChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(280, 380, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawScatterSplineChart.png");
|
||||
```
|
116
vendor/szymach/c-pchart/resources/doc/scatter_threshold.md
vendored
Normal file
116
vendor/szymach/c-pchart/resources/doc/scatter_threshold.md
vendored
Normal file
|
@ -0,0 +1,116 @@
|
|||
# Drawing a scatter threshold chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscatterthreshold.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
$data->createFunctionSerie("X", "1/z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setAxisName(0, "x = 1/z");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_BOTTOM);
|
||||
|
||||
/* Create the Y axis */
|
||||
$data->createFunctionSerie("Y", "z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setSerieOnAxis("Y", 1);
|
||||
$data->setAxisName(1, "y = z");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisPosition(1, AXIS_POSITION_RIGHT);
|
||||
|
||||
/* Create the Y axis */
|
||||
$data->createFunctionSerie("Y2", "z*z*z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setSerieOnAxis("Y2", 2);
|
||||
$data->setAxisName(2, "y = z*z*z");
|
||||
$data->setAxisXY(2, AXIS_Y);
|
||||
$data->setAxisPosition(2, AXIS_POSITION_LEFT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("X", "Y", 0);
|
||||
$data->setScatterSerieDescription(0, "Pass A");
|
||||
$data->setScatterSerieTicks(0, 4);
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("X", "Y2", 1);
|
||||
$data->setScatterSerieDescription(1, "Pass B");
|
||||
$data->setScatterSerieTicks(1, 4);
|
||||
$data->setScatterSerieColor(1, ["R" => 120, "G" => 0, "B" => 255]);
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "createFunctionSerie() - Functions computing", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 50, 350, 350);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale(["XMargin" => 10, "YMargin" => 10, "Floating" => true]);
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the 0/0 lines */
|
||||
$myScatter->drawScatterThreshold(0, ["AxisID" => 0, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 10]);
|
||||
$myScatter->drawScatterThreshold(0, ["AxisID" => 1, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 10]);
|
||||
|
||||
/* Draw a treshold area */
|
||||
$myScatter->drawScatterThresholdArea(-0.1, 0.1, ["AreaName" => "Error zone"]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterLineChart();
|
||||
$myScatter->drawScatterPlotChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(300, 380, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.createFunctionSerie.scatter.png");
|
||||
```
|
116
vendor/szymach/c-pchart/resources/doc/scatter_threshold_area.md
vendored
Normal file
116
vendor/szymach/c-pchart/resources/doc/scatter_threshold_area.md
vendored
Normal file
|
@ -0,0 +1,116 @@
|
|||
# Drawing a scatter threshold area chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.scatter.drawscatterthresholdarea.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Scatter;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Data object */
|
||||
$data = new Data();
|
||||
|
||||
/* Create the X axis and the binded series */
|
||||
$data->createFunctionSerie("X", "1/z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setAxisName(0, "x = 1/z");
|
||||
$data->setAxisXY(0, AXIS_X);
|
||||
$data->setAxisPosition(0, AXIS_POSITION_BOTTOM);
|
||||
|
||||
/* Create the Y axis */
|
||||
$data->createFunctionSerie("Y", "z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setSerieOnAxis("Y", 1);
|
||||
$data->setAxisName(1, "y = z");
|
||||
$data->setAxisXY(1, AXIS_Y);
|
||||
$data->setAxisPosition(1, AXIS_POSITION_RIGHT);
|
||||
|
||||
/* Create the Y axis */
|
||||
$data->createFunctionSerie("Y2", "z*z*z", ["MinX" => -10, "MaxX" => 10, "XStep" => 1]);
|
||||
$data->setSerieOnAxis("Y2", 2);
|
||||
$data->setAxisName(2, "y = z*z*z");
|
||||
$data->setAxisXY(2, AXIS_Y);
|
||||
$data->setAxisPosition(2, AXIS_POSITION_LEFT);
|
||||
|
||||
/* Create the 1st scatter chart binding */
|
||||
$data->setScatterSerie("X", "Y", 0);
|
||||
$data->setScatterSerieDescription(0, "Pass A");
|
||||
$data->setScatterSerieTicks(0, 4);
|
||||
$data->setScatterSerieColor(0, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Create the 2nd scatter chart binding */
|
||||
$data->setScatterSerie("X", "Y2", 1);
|
||||
$data->setScatterSerieDescription(1, "Pass B");
|
||||
$data->setScatterSerieTicks(1, 4);
|
||||
$data->setScatterSerieColor(1, ["R" => 120, "G" => 0, "B" => 255]);
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "createFunctionSerie() - Functions computing", [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Set the graph area */
|
||||
$image->setGraphArea(50, 50, 350, 350);
|
||||
|
||||
/* Create the Scatter chart object */
|
||||
$myScatter = new Scatter($image, $data);
|
||||
|
||||
/* Draw the scale */
|
||||
$myScatter->drawScatterScale(["XMargin" => 10, "YMargin" => 10, "Floating" => true]);
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw the 0/0 lines */
|
||||
$myScatter->drawScatterThreshold(0, ["AxisID" => 0, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 10]);
|
||||
$myScatter->drawScatterThreshold(0, ["AxisID" => 1, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 10]);
|
||||
|
||||
/* Draw a treshold area */
|
||||
$myScatter->drawScatterThresholdArea(-0.1, 0.1, ["AreaName" => "Error zone"]);
|
||||
|
||||
/* Draw a scatter plot chart */
|
||||
$myScatter->drawScatterLineChart();
|
||||
$myScatter->drawScatterPlotChart();
|
||||
|
||||
/* Draw the legend */
|
||||
$myScatter->drawScatterLegend(300, 380, ["Mode" => LEGEND_HORIZONTAL, "Style" => LEGEND_NOBORDER]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.createFunctionSerie.scatter.png");
|
||||
|
||||
```
|
37
vendor/szymach/c-pchart/resources/doc/spline.md
vendored
Normal file
37
vendor/szymach/c-pchart/resources/doc/spline.md
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
# Drawing a spline chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawsplinechart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
// Create and populate data
|
||||
$data = new Data();
|
||||
$data->addPoints([], "Serie1");
|
||||
|
||||
// Create the image and set the data
|
||||
$image = new Image(700, 230, $data);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 20]);
|
||||
|
||||
// 1st spline drawn in white with control points visible
|
||||
$firstCoordinates = [[40, 80], [280, 60], [340, 166], [590, 120]];
|
||||
$fistSplineSettings = ["R" => 255, "G" => 255, "B" => 255, "ShowControl" => true];
|
||||
$image->drawSpline($firstCoordinates, $fistSplineSettings);
|
||||
|
||||
// 2nd spline dashed drawn in white with control points visible
|
||||
$secondCoordinates = [[250, 50], [250, 180], [350, 180], [350, 50]];
|
||||
$secondSplineSettings = [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B"=> 255,
|
||||
"ShowControl" => true,
|
||||
"Ticks" => 4
|
||||
];
|
||||
$image->drawSpline($secondCoordinates, $secondSplineSettings);
|
||||
|
||||
// Render the picture (choose the best way)
|
||||
$image->autoOutput("example.drawSpline.png");
|
||||
```
|
74
vendor/szymach/c-pchart/resources/doc/split_path.md
vendored
Normal file
74
vendor/szymach/c-pchart/resources/doc/split_path.md
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
# Drawing a split path chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawsplitpath.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
use CpChart\Chart\Split;
|
||||
|
||||
/* Create the Image object */
|
||||
$data = new Image(700, 230);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = [
|
||||
"R" => 170,
|
||||
"G" => 183,
|
||||
"B" => 87,
|
||||
"Dash" => 1,
|
||||
"DashR" => 190,
|
||||
"DashG" => 203,
|
||||
"DashB" => 107
|
||||
];
|
||||
$data->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = ["StartR" => 219, "StartG" => 231, "StartB" => 139, "EndR" => 1,
|
||||
"EndG" => 138, "EndB" => 68, "Alpha" => 50];
|
||||
$data->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$data->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, ["StartR" => 0, "StartG" => 0,
|
||||
"StartB" => 0, "EndR" => 50, "EndG" => 50, "EndB" => 50, "Alpha" => 80]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$data->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$data->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$data->drawText(10, 13, "pSplit - Draw splitted path charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Set the default font properties */
|
||||
$data->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 10, "R" => 80, "G" => 80, "B" => 80]);
|
||||
|
||||
/* Enable shadow computing */
|
||||
$data->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([30, 20, 15, 10, 8, 4], "Score");
|
||||
$data->addPoints(["End of visit", "Home Page", "Product Page", "Sales", "Statistics", "Prints"], "Labels");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the pSplit object */
|
||||
$splitChart = new Split();
|
||||
|
||||
/* Draw the split chart */
|
||||
$settings = ["TextPos" => TEXT_POS_RIGHT, "TextPadding" => 10, "Spacing" => 20, "Surrounding" => 40];
|
||||
$data->setGraphArea(10, 20, 340, 230);
|
||||
$splitChart->drawSplitPath($data, $data, $settings);
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data2 = new Data();
|
||||
$data2->addPoints([30, 20, 15], "Score");
|
||||
$data2->addPoints(["UK", "FR", "ES"], "Labels");
|
||||
$data2->setAbscissa("Labels");
|
||||
|
||||
/* Draw the split chart */
|
||||
$settings = ["TextPadding" => 4, "Spacing" => 30, "Surrounding" => 20];
|
||||
$data->setGraphArea(350, 50, 690, 200);
|
||||
$splitChart->drawSplitPath($data, $data2, $settings);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$data->autoOutput("example.split.png");
|
||||
```
|
62
vendor/szymach/c-pchart/resources/doc/spring.md
vendored
Normal file
62
vendor/szymach/c-pchart/resources/doc/spring.md
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
# Drawing a spring chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.spring.drawspring.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Spring;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(300, 300);
|
||||
|
||||
/* Background customization */
|
||||
$image->drawGradientArea(0, 0, 300, 300, DIRECTION_HORIZONTAL, [
|
||||
"StartR" => 217,
|
||||
"StartG" => 250,
|
||||
"StartB" => 116,
|
||||
"EndR" => 181,
|
||||
"EndG" => 209,
|
||||
"EndB" => 27,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 300, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
$image->drawRectangle(0, 0, 299, 299, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pSpring - Draw spring charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Prepare the graph area */
|
||||
$image->setGraphArea(20, 20, 280, 280);
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 9, "R" => 80, "G" => 80, "B" => 80]);
|
||||
$image->setShadow(true, ["X" => 2, "Y" => 2, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Create the pSpring object */
|
||||
$springChart = new Spring();
|
||||
|
||||
/* Set the nodes default settings */
|
||||
$springChart->setNodeDefaults(["FreeZone" => 50]);
|
||||
|
||||
/* Build random nodes & connections */
|
||||
for ($i = 0; $i <= 10; $i++) {
|
||||
$connections = [];
|
||||
for ($j = 0; $j <= rand(0, 1); $j++) {
|
||||
$connections[] = rand(0, 10);
|
||||
}
|
||||
$springChart->addNode($i, ["Name" => "Node " . $i, "Connections" => $connections]);
|
||||
}
|
||||
|
||||
/* Compute and draw the Spring Graph */
|
||||
$springChart->drawSpring($image, ["DrawQuietZone" => true]);
|
||||
|
||||
/* Render the picture */
|
||||
$image->render("drawSpring3.png");
|
||||
```
|
88
vendor/szymach/c-pchart/resources/doc/stacked_area.md
vendored
Normal file
88
vendor/szymach/c-pchart/resources/doc/stacked_area.md
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
# Drawing a stacked area chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawstackedareachart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([1, -2, -1, 2, 1, 0], "Probe 1");
|
||||
$data->addPoints([1, -2, -3, 2, 1, 8], "Probe 2");
|
||||
$data->addPoints([2, 4, 2, 0, 4, 2], "Probe 3");
|
||||
$data->setSerieTicks("Probe 2", 4);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
$data->addPoints(["Jan", "Feb", "Mar", "Apr", "May", "Jun"], "Labels");
|
||||
$data->setSerieDescription("Labels", "Months");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawStackedAreaChart() - draw a stacked area chart", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(250, 55, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Draw the scale and the 1st chart */
|
||||
$image->setGraphArea(60, 60, 450, 190);
|
||||
$image->drawFilledRectangle(60, 60, 450, 190, ["R" => 255, "G" => 255, "B" => 255,
|
||||
"Surrounding" => -200, "Alpha" => 10]);
|
||||
$image->drawScale(["DrawSubTicks" => true, "Mode" => SCALE_MODE_ADDALL]);
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->setShadow(false);
|
||||
$image->drawStackedAreaChart(["DisplayValues" => true, "DisplayColor" => DISPLAY_AUTO, "Surrounding" => 20]);
|
||||
|
||||
/* Draw the scale and the 2nd chart */
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "Mode" => SCALE_MODE_ADDALL, "DrawSubTicks" => true]);
|
||||
$image->setShadow(false);
|
||||
$image->drawStackedAreaChart(["Surrounding" => 10]);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(510, 205, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawStackedAreaChart.png");
|
||||
```
|
87
vendor/szymach/c-pchart/resources/doc/stacked_bar.md
vendored
Normal file
87
vendor/szymach/c-pchart/resources/doc/stacked_bar.md
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
# Drawing a stacked bar chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawstackedbarchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([-7, -8, -15, -20, -18, -12, 8, -19, 9, 16, -20, 8, 10, -10, -14, -20, 8, -9, -19], "Probe 3");
|
||||
$data->addPoints([19, 0, -8, 8, -8, 12, -19, -10, 5, 12, -20, -8, 10, -11, -12, 8, -17, -14, 0], "Probe 4");
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
$data->addPoints([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "Time");
|
||||
$data->setSerieDescription("Time", "Hour of the day");
|
||||
$data->setAbscissa("Time");
|
||||
$data->setXAxisUnit("h");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = [
|
||||
"R" => 170,
|
||||
"G" => 183,
|
||||
"B" => 87,
|
||||
"Dash" => 1,
|
||||
"DashR" => 190,
|
||||
"DashG" => 203,
|
||||
"DashB" => 107
|
||||
];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138,
|
||||
"EndB" => 68,
|
||||
"Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
|
||||
/* Set the default font properties */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Draw the scale */
|
||||
$image->setGraphArea(60, 30, 650, 190);
|
||||
$image->drawScale([
|
||||
"CycleBackground" => true,
|
||||
"DrawSubTicks" => true,
|
||||
"GridR" => 0,
|
||||
"GridG" => 0,
|
||||
"GridB" => 0,
|
||||
"GridAlpha" => 10,
|
||||
"Mode" => SCALE_MODE_ADDALL
|
||||
]);
|
||||
|
||||
/* Turn on shadow computing */
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
|
||||
/* Draw some thresholds */
|
||||
$image->setShadow(false);
|
||||
$image->drawThreshold(-40, ["WriteCaption" => true, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 4]);
|
||||
$image->drawThreshold(28, ["WriteCaption" => true, "R" => 0, "G" => 0, "B" => 0, "Ticks" => 4]);
|
||||
|
||||
/* Draw the chart */
|
||||
$image->drawStackedBarChart([
|
||||
"Rounded" => true,
|
||||
"DisplayValues" => true,
|
||||
"DisplayColor" => DISPLAY_AUTO,
|
||||
"DisplaySize" => 6,
|
||||
"BorderR" => 255,
|
||||
"BorderG" => 255,
|
||||
"BorderB" => 255
|
||||
]);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(570, 212, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawStackedBarChart.rounded.png");
|
||||
```
|
93
vendor/szymach/c-pchart/resources/doc/step.md
vendored
Normal file
93
vendor/szymach/c-pchart/resources/doc/step.md
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
# Drawing a step chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawstepchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([-4, VOID, VOID, 12, 8, 3], "Probe 1");
|
||||
$data->addPoints([3, 12, 15, 8, 5, -5], "Probe 2");
|
||||
$data->addPoints([2, 7, 5, 18, 19, 22], "Probe 3");
|
||||
$data->setSerieTicks("Probe 2", 4);
|
||||
$data->setAxisName(0, "Temperatures");
|
||||
$data->addPoints(["Jan", "Feb", "Mar", "Apr", "May", "Jun"], "Labels");
|
||||
$data->setSerieDescription("Labels", "Months");
|
||||
$data->setAbscissa("Labels");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = [
|
||||
"StartR" => 219,
|
||||
"StartG" => 231,
|
||||
"StartB" => 139,
|
||||
"EndR" => 1,
|
||||
"EndG" => 138, "EndB" => 68, "Alpha" => 50
|
||||
];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
$image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 80
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "drawStepChart() - draw a step chart", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(250, 55, "Average temperature", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Draw the scale and the 1st chart */
|
||||
$image->setGraphArea(60, 60, 450, 190);
|
||||
$image->drawFilledRectangle(60, 60, 450, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$image->drawStepChart(["DisplayValues" => true, "DisplayColor" => DISPLAY_AUTO]);
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Draw the scale and the 2nd chart */
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "DrawSubTicks" => true]);
|
||||
$image->setShadow(true, ["X" => -1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10]);
|
||||
$image->drawStepChart();
|
||||
$image->setShadow(false);
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(510, 205, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawStepChart.png");
|
||||
```
|
78
vendor/szymach/c-pchart/resources/doc/stock.md
vendored
Normal file
78
vendor/szymach/c-pchart/resources/doc/stock.md
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
# Drawing a stock chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.stocks.drawstockchart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Stock;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
$data->addPoints([34, 55, 15, 62, 38, 42], "Open");
|
||||
$data->addPoints([42, 25, 40, 38, 49, 36], "Close");
|
||||
$data->addPoints([27, 14, 12, 25, 32, 32], "Min");
|
||||
$data->addPoints([45, 59, 47, 65, 64, 48], "Max");
|
||||
$data->setAxisDisplay(0, AXIS_FORMAT_CURRENCY, "$");
|
||||
$data->addPoints(["8h", "10h", "12h", "14h", "16h", "18h"], "Time");
|
||||
$data->setAbscissa("Time");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Draw the background */
|
||||
$settings = ["R" => 170, "G" => 183, "B" => 87, "Dash" => 1, "DashR" => 190, "DashG" => 203, "DashB" => 107];
|
||||
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
|
||||
|
||||
/* Overlay with a gradient */
|
||||
$settings = ["StartR" => 219, "StartG" => 231, "StartB" => 139, "EndR" => 1, "EndG" => 138, "EndB" => 68, "Alpha" => 50];
|
||||
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
|
||||
|
||||
/* Draw the border */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(60, 45, "Stock price", ["FontSize" => 28, "Align" => TEXT_ALIGN_BOTTOMLEFT]);
|
||||
|
||||
/* Draw the 1st scale */
|
||||
$image->setGraphArea(60, 60, 450, 190);
|
||||
$image->drawFilledRectangle(60, 60, 450, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["DrawSubTicks" => true, "CycleBackground" => true]);
|
||||
|
||||
/* Draw the 1st stock chart */
|
||||
$mystockChart = new Stock($image, $data);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 30]);
|
||||
$mystockChart->drawStockChart();
|
||||
|
||||
/* Reset the display mode because of the graph small size */
|
||||
$data->setAxisDisplay(0, AXIS_FORMAT_DEFAULT);
|
||||
|
||||
/* Draw the 2nd scale */
|
||||
$image->setShadow(false);
|
||||
$image->setGraphArea(500, 60, 670, 190);
|
||||
$image->drawFilledRectangle(500, 60, 670, 190, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 10
|
||||
]);
|
||||
$image->drawScale(["Pos" => SCALE_POS_TOPBOTTOM, "DrawSubTicks" => true]);
|
||||
|
||||
/* Draw the 2nd stock chart */
|
||||
$mystockChart = new Stock($image, $data);
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 30]);
|
||||
$mystockChart->drawStockChart();
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawStockChart.png");
|
||||
```
|
81
vendor/szymach/c-pchart/resources/doc/surface.md
vendored
Normal file
81
vendor/szymach/c-pchart/resources/doc/surface.md
vendored
Normal file
|
@ -0,0 +1,81 @@
|
|||
# Drawing a surface chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.surface.drawsurface.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Chart\Surface;
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(400, 400);
|
||||
|
||||
/* Create a solid background */
|
||||
$settings = ["R" => 179, "G" => 217, "B" => 91, "Dash" => 1, "DashR" => 199, "DashG" => 237, "DashB" => 111];
|
||||
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
|
||||
|
||||
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, [
|
||||
"StartR" => 194,
|
||||
"StartG" => 231,
|
||||
"StartB" => 44,
|
||||
"EndR" => 43,
|
||||
"EndG" => 107,
|
||||
"EndB" => 58,
|
||||
"Alpha" => 50
|
||||
]);
|
||||
$image->drawGradientArea(0, 0, 400, 20, DIRECTION_VERTICAL, [
|
||||
"StartR" => 0,
|
||||
"StartG" => 0,
|
||||
"StartB" => 0,
|
||||
"EndR" => 50,
|
||||
"EndG" => 50,
|
||||
"EndB" => 50,
|
||||
"Alpha" => 100
|
||||
]);
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 399, 399, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the picture title */
|
||||
$image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
|
||||
$image->drawText(10, 13, "pSurface() :: 2D surface charts", ["R" => 255, "G" => 255, "B" => 255]);
|
||||
|
||||
/* Define the charting area */
|
||||
$image->setGraphArea(20, 40, 380, 380);
|
||||
$image->drawFilledRectangle(20, 40, 380, 380, [
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"Surrounding" => -200,
|
||||
"Alpha" => 20
|
||||
]);
|
||||
|
||||
$image->setShadow(true, ["X" => 1, "Y" => 1]);
|
||||
|
||||
/* Create the surface object */
|
||||
$surfaceChart = new Surface($image);
|
||||
|
||||
/* Set the grid size */
|
||||
$surfaceChart->setGrid(20, 20);
|
||||
|
||||
/* Write the axis labels */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
$surfaceChart->writeXLabels();
|
||||
$surfaceChart->writeYLabels();
|
||||
|
||||
/* Add random values */
|
||||
for ($i = 0; $i <= 50; $i++) {
|
||||
$surfaceChart->addPoint(rand(0, 20), rand(0, 20), rand(0, 100));
|
||||
}
|
||||
|
||||
/* Compute the missing points */
|
||||
$surfaceChart->computeMissing();
|
||||
|
||||
/* Draw the surface chart */
|
||||
$surfaceChart->drawSurface(["Border" => true, "Surrounding" => 40]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.surface.png");
|
||||
```
|
71
vendor/szymach/c-pchart/resources/doc/zone.md
vendored
Normal file
71
vendor/szymach/c-pchart/resources/doc/zone.md
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
# Drawing a zone chart
|
||||
|
||||
[Reference](http://wiki.pchart.net/doc.chart.drawzonechart.html)
|
||||
|
||||
```php
|
||||
require '/path/to/your/vendor/autoload.php';
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/* Create and populate the Data object */
|
||||
$data = new Data();
|
||||
for ($i = 0; $i <= 10; $i = $i + .2) {
|
||||
$data->addPoints(log($i + 1) * 10, "Bounds 1");
|
||||
$data->addPoints(log($i + 3) * 10 + rand(0, 2) - 1, "Probe");
|
||||
$data->addPoints(log($i + 6) * 10, "Bounds 2");
|
||||
$data->addPoints($i * 10, "Labels");
|
||||
}
|
||||
$data->setAxisName(0, "Size (cm)");
|
||||
$data->setSerieDescription("Labels", "Months");
|
||||
$data->setAbscissa("Labels");
|
||||
$data->setAbscissaName("Time (years)");
|
||||
|
||||
/* Create the Image object */
|
||||
$image = new Image(700, 230, $data);
|
||||
|
||||
/* Turn off Antialiasing */
|
||||
$image->Antialias = false;
|
||||
|
||||
/* Add a border to the picture */
|
||||
$image->drawRectangle(0, 0, 699, 229, ["R" => 0, "G" => 0, "B" => 0]);
|
||||
|
||||
/* Write the chart title */
|
||||
$image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
|
||||
$image->drawText(150, 35, "Size by time generations", ["FontSize" => 20, "Align" => TEXT_ALIGN_BOTTOMMIDDLE]);
|
||||
|
||||
/* Set the default font */
|
||||
$image->setFontProperties(["FontName" => "pf_arma_five.ttf", "FontSize" => 6]);
|
||||
|
||||
/* Define the chart area */
|
||||
$image->setGraphArea(40, 40, 680, 200);
|
||||
|
||||
/* Draw the scale */
|
||||
$image->drawScale([
|
||||
"LabelSkip" => 4,
|
||||
"XMargin" => 10,
|
||||
"YMargin" => 10,
|
||||
"Floating" => true,
|
||||
"GridR" => 200,
|
||||
"GridG" => 200,
|
||||
"GridB" => 200,
|
||||
"DrawSubTicks" => true,
|
||||
"CycleBackground" => true
|
||||
]);
|
||||
|
||||
/* Turn on Antialiasing */
|
||||
$image->Antialias = true;
|
||||
|
||||
/* Draw the line chart */
|
||||
$image->drawZoneChart("Bounds 1", "Bounds 2");
|
||||
$data->setSerieDrawable(["Bounds 1", "Bounds 2"], false);
|
||||
|
||||
/* Draw the line chart */
|
||||
$image->drawStepChart();
|
||||
|
||||
/* Write the chart legend */
|
||||
$image->drawLegend(640, 20, ["Style" => LEGEND_NOBORDER, "Mode" => LEGEND_HORIZONTAL]);
|
||||
|
||||
/* Render the picture (choose the best way) */
|
||||
$image->autoOutput("example.drawZoneChart.png");
|
||||
```
|
BIN
vendor/szymach/c-pchart/resources/fonts/Bedizen.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/Bedizen.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/Forgotte.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/Forgotte.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/GeosansLight.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/GeosansLight.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/MankSans.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/MankSans.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/Silkscreen.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/Silkscreen.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/advent_light.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/advent_light.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/calibri.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/calibri.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/pf_arma_five.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/pf_arma_five.ttf
vendored
Normal file
Binary file not shown.
BIN
vendor/szymach/c-pchart/resources/fonts/verdana.ttf
vendored
Normal file
BIN
vendor/szymach/c-pchart/resources/fonts/verdana.ttf
vendored
Normal file
Binary file not shown.
6
vendor/szymach/c-pchart/resources/palettes/autumn.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/autumn.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
185,106,154,100
|
||||
216,137,184,100
|
||||
156,192,137,100
|
||||
216,243,201,100
|
||||
253,232,215,100
|
||||
255,255,255,100
|
6
vendor/szymach/c-pchart/resources/palettes/blind.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/blind.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
109,152,171,100
|
||||
0,39,94,100
|
||||
254,183,41,100
|
||||
168,177,184,100
|
||||
255,255,255,100
|
||||
0,0,0,100
|
6
vendor/szymach/c-pchart/resources/palettes/evening.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/evening.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
242,245,237,100
|
||||
255,194,0,100
|
||||
255,91,0,100
|
||||
184,0,40,100
|
||||
132,0,46,100
|
||||
74,192,242,100
|
6
vendor/szymach/c-pchart/resources/palettes/kitchen.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/kitchen.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
155,225,251,100
|
||||
197,239,253,100
|
||||
189,32,49,100
|
||||
35,31,32,100
|
||||
255,255,255,100
|
||||
0,98,149,100
|
7
vendor/szymach/c-pchart/resources/palettes/light.color
vendored
Normal file
7
vendor/szymach/c-pchart/resources/palettes/light.color
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
239,210,121,100
|
||||
149,203,233,100
|
||||
2,71,105,100
|
||||
175,215,117,100
|
||||
44,87,0,100
|
||||
222,157,127,100
|
||||
|
6
vendor/szymach/c-pchart/resources/palettes/navy.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/navy.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
25,78,132,100
|
||||
59,107,156,100
|
||||
31,36,42,100
|
||||
55,65,74,100
|
||||
96,187,34,100
|
||||
242,186,187,100
|
6
vendor/szymach/c-pchart/resources/palettes/shade.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/shade.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
117,113,22,100
|
||||
174,188,33,100
|
||||
217,219,86,100
|
||||
0,71,127,100
|
||||
76,136,190,100
|
||||
141,195,233,100
|
6
vendor/szymach/c-pchart/resources/palettes/spring.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/spring.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
146,123,81,100
|
||||
168,145,102,100
|
||||
128,195,28,100
|
||||
188,221,90,100
|
||||
255,121,0,100
|
||||
251,179,107,100
|
6
vendor/szymach/c-pchart/resources/palettes/summer.color
vendored
Normal file
6
vendor/szymach/c-pchart/resources/palettes/summer.color
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
253,184,19,100
|
||||
246,139,31,100
|
||||
241,112,34,100
|
||||
98,194,204,100
|
||||
228,246,248,100
|
||||
238,246,108,100
|
274
vendor/szymach/c-pchart/src/Barcode/Barcode128.php
vendored
Normal file
274
vendor/szymach/c-pchart/src/Barcode/Barcode128.php
vendored
Normal file
|
@ -0,0 +1,274 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Barcode;
|
||||
|
||||
use CpChart\Image;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* pBarcode128 - class to create barcodes (128B)
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Barcode128
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $Codes;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $Reverse;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $Result;
|
||||
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @var integer
|
||||
*/
|
||||
public $CRC;
|
||||
|
||||
/**
|
||||
* @param string $filePath
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct($filePath = '')
|
||||
{
|
||||
$this->Codes = [];
|
||||
$this->Reverse = [];
|
||||
if (!file_exists($filePath)) {
|
||||
$filePath = sprintf('%s/../../resources/barcode/128B.db', __DIR__);
|
||||
}
|
||||
|
||||
$FileHandle = @fopen($filePath, "r");
|
||||
if (!$FileHandle) {
|
||||
throw new Exception(
|
||||
sprintf("Cannot find barcode database (%s).", $filePath)
|
||||
);
|
||||
}
|
||||
|
||||
while (!feof($FileHandle)) {
|
||||
$Buffer = fgets($FileHandle, 4096);
|
||||
$Buffer = str_replace(chr(10), "", $Buffer);
|
||||
$Buffer = str_replace(chr(13), "", $Buffer);
|
||||
$Values = preg_split("/;/", $Buffer);
|
||||
|
||||
$this->Codes[$Values[1]]["ID"] = $Values[0];
|
||||
$this->Codes[$Values[1]]["Code"] = $Values[2];
|
||||
$this->Reverse[$Values[0]]["Code"] = $Values[2];
|
||||
$this->Reverse[$Values[0]]["Asc"] = $Values[1];
|
||||
}
|
||||
fclose($FileHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the projected size of a barcode
|
||||
*
|
||||
* @param string $TextString
|
||||
* @param string $Format
|
||||
* @return array
|
||||
*/
|
||||
public function getSize($TextString, $Format = "")
|
||||
{
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : false;
|
||||
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
||||
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : false;
|
||||
$FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
|
||||
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
||||
|
||||
$TextString = $this->encode128($TextString);
|
||||
$BarcodeLength = strlen($this->Result);
|
||||
|
||||
$WOffset = $DrawArea ? 20 : 0;
|
||||
$HOffset = $ShowLegend ? $FontSize + $LegendOffset + $WOffset : 0;
|
||||
|
||||
$X1 = cos($Angle * PI / 180) * ($WOffset + $BarcodeLength);
|
||||
$Y1 = sin($Angle * PI / 180) * ($WOffset + $BarcodeLength);
|
||||
|
||||
$X2 = $X1 + cos(($Angle + 90) * PI / 180) * ($HOffset + $Height);
|
||||
$Y2 = $Y1 + sin(($Angle + 90) * PI / 180) * ($HOffset + $Height);
|
||||
|
||||
|
||||
$AreaWidth = max(abs($X1), abs($X2));
|
||||
$AreaHeight = max(abs($Y1), abs($Y2));
|
||||
|
||||
return ["Width" => $AreaWidth, "Height" => $AreaHeight];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $Value
|
||||
* @param string $Format
|
||||
* @return string
|
||||
*/
|
||||
public function encode128($Value, $Format = "")
|
||||
{
|
||||
$this->Result = "11010010000";
|
||||
$this->CRC = 104;
|
||||
$TextString = "";
|
||||
|
||||
for ($i = 1; $i <= strlen($Value); $i++) {
|
||||
$CharCode = ord($this->mid($Value, $i, 1));
|
||||
if (isset($this->Codes[$CharCode])) {
|
||||
$this->Result = $this->Result . $this->Codes[$CharCode]["Code"];
|
||||
$this->CRC = $this->CRC + $i * $this->Codes[$CharCode]["ID"];
|
||||
$TextString = $TextString . chr($CharCode);
|
||||
}
|
||||
}
|
||||
$this->CRC = $this->CRC - floor($this->CRC / 103) * 103;
|
||||
|
||||
$this->Result = $this->Result . $this->Reverse[$this->CRC]["Code"];
|
||||
$this->Result = $this->Result . "1100011101011";
|
||||
|
||||
return $TextString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the encoded string
|
||||
* @param Image $Object
|
||||
* @param string $Value
|
||||
* @param int $X
|
||||
* @param int $Y
|
||||
* @param array $Format
|
||||
*/
|
||||
public function draw(Image $Object, $Value, $X, $Y, $Format = [])
|
||||
{
|
||||
$this->pChartObject = $Object;
|
||||
|
||||
$R = isset($Format["R"]) ? $Format["R"] : 0;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : 0;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : 0;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
|
||||
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : false;
|
||||
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
||||
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : false;
|
||||
$AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
|
||||
$AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
|
||||
$AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
|
||||
$AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
|
||||
$AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
|
||||
$AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
|
||||
|
||||
$TextString = $this->encode128($Value);
|
||||
|
||||
if ($DrawArea) {
|
||||
$X1 = $X + cos(($Angle - 135) * PI / 180) * 10;
|
||||
$Y1 = $Y + sin(($Angle - 135) * PI / 180) * 10;
|
||||
|
||||
$X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result) + 20);
|
||||
$Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result) + 20);
|
||||
|
||||
if ($ShowLegend) {
|
||||
$X3 = $X2
|
||||
+ cos(($Angle + 90) * PI / 180)
|
||||
* ($Height + $LegendOffset + $this->pChartObject->FontSize + 10)
|
||||
;
|
||||
$Y3 = $Y2
|
||||
+ sin(($Angle + 90) * PI / 180)
|
||||
* ($Height + $LegendOffset + $this->pChartObject->FontSize + 10)
|
||||
;
|
||||
} else {
|
||||
$X3 = $X2 + cos(($Angle + 90) * PI / 180) * ($Height + 20);
|
||||
$Y3 = $Y2 + sin(($Angle + 90) * PI / 180) * ($Height + 20);
|
||||
}
|
||||
|
||||
$X4 = $X3 + cos(($Angle + 180) * PI / 180) * (strlen($this->Result) + 20);
|
||||
$Y4 = $Y3 + sin(($Angle + 180) * PI / 180) * (strlen($this->Result) + 20);
|
||||
|
||||
$Polygon = [$X1, $Y1, $X2, $Y2, $X3, $Y3, $X4, $Y4];
|
||||
$Settings = [
|
||||
"R" => $AreaR,
|
||||
"G" => $AreaG,
|
||||
"B" => $AreaB,
|
||||
"BorderR" => $AreaBorderR,
|
||||
"BorderG" => $AreaBorderG,
|
||||
"BorderB" => $AreaBorderB
|
||||
];
|
||||
$this->pChartObject->drawPolygon($Polygon, $Settings);
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= strlen($this->Result); $i++) {
|
||||
if ($this->mid($this->Result, $i, 1) == 1) {
|
||||
$X1 = $X + cos($Angle * PI / 180) * $i;
|
||||
$Y1 = $Y + sin($Angle * PI / 180) * $i;
|
||||
$X2 = $X1 + cos(($Angle + 90) * PI / 180) * $Height;
|
||||
$Y2 = $Y1 + sin(($Angle + 90) * PI / 180) * $Height;
|
||||
|
||||
$Settings = ["R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha];
|
||||
$this->pChartObject->drawLine($X1, $Y1, $X2, $Y2, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
if ($ShowLegend) {
|
||||
$X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result) / 2);
|
||||
$Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result) / 2);
|
||||
|
||||
$LegendX = $X1 + cos(($Angle + 90) * PI / 180) * ($Height + $LegendOffset);
|
||||
$LegendY = $Y1 + sin(($Angle + 90) * PI / 180) * ($Height + $LegendOffset);
|
||||
|
||||
$Settings = [
|
||||
"R" => $R,
|
||||
"G" => $G,
|
||||
"B" => $B,
|
||||
"Alpha" => $Alpha,
|
||||
"Angle" => -$Angle,
|
||||
"Align" => TEXT_ALIGN_TOPMIDDLE
|
||||
];
|
||||
$this->pChartObject->drawText($LegendX, $LegendY, $TextString, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $value
|
||||
* @param int $NbChar
|
||||
* @return string
|
||||
*/
|
||||
public function left($value, $NbChar)
|
||||
{
|
||||
return substr($value, 0, $NbChar);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $value
|
||||
* @param int $NbChar
|
||||
* @return string
|
||||
*/
|
||||
public function right($value, $NbChar)
|
||||
{
|
||||
return substr($value, strlen($value) - $NbChar, $NbChar);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $value
|
||||
* @param int $Depart
|
||||
* @param int $NbChar
|
||||
* @return string
|
||||
*/
|
||||
public function mid($value, $Depart, $NbChar)
|
||||
{
|
||||
return substr($value, $Depart - 1, $NbChar);
|
||||
}
|
||||
}
|
296
vendor/szymach/c-pchart/src/Barcode/Barcode39.php
vendored
Normal file
296
vendor/szymach/c-pchart/src/Barcode/Barcode39.php
vendored
Normal file
|
@ -0,0 +1,296 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Barcode;
|
||||
|
||||
use CpChart\Image;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* pBarcode39 - class to create barcodes (39B)
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Barcode39
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $Codes;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $Reverse;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $Result;
|
||||
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @var integer
|
||||
*/
|
||||
public $CRC;
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*/
|
||||
public $MOD43;
|
||||
|
||||
/**
|
||||
* @param string $filePath
|
||||
* @param boolean $EnableMOD43
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct($filePath = "", $EnableMOD43 = false)
|
||||
{
|
||||
$this->MOD43 = (boolean) $EnableMOD43;
|
||||
$this->Codes = [];
|
||||
$this->Reverse = [];
|
||||
if (!file_exists($filePath)) {
|
||||
$filePath = sprintf('%s/../../resources/barcode/39.db', __DIR__);
|
||||
}
|
||||
|
||||
$FileHandle = @fopen($filePath, "r");
|
||||
if (!$FileHandle) {
|
||||
throw new Exception(
|
||||
"Cannot find barcode database (" . $filePath . ")."
|
||||
);
|
||||
}
|
||||
|
||||
while (!feof($FileHandle)) {
|
||||
$Buffer = fgets($FileHandle, 4096);
|
||||
$Buffer = str_replace(chr(10), "", $Buffer);
|
||||
$Buffer = str_replace(chr(13), "", $Buffer);
|
||||
$Values = preg_split("/;/", $Buffer);
|
||||
|
||||
$this->Codes[$Values[0]] = $Values[1];
|
||||
}
|
||||
fclose($FileHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the projected size of a barcode
|
||||
*
|
||||
* @param string $TextString
|
||||
* @param string $Format
|
||||
* @return array
|
||||
*/
|
||||
public function getSize($TextString, $Format = "")
|
||||
{
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : false;
|
||||
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
||||
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : false;
|
||||
$FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
|
||||
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
||||
|
||||
$TextString = $this->encode39($TextString);
|
||||
$BarcodeLength = strlen($this->Result);
|
||||
|
||||
$WOffset = $DrawArea ? 20 : 0;
|
||||
$HOffset = $ShowLegend ? $FontSize + $LegendOffset + $WOffset : 0;
|
||||
|
||||
$X1 = cos($Angle * PI / 180) * ($WOffset + $BarcodeLength);
|
||||
$Y1 = sin($Angle * PI / 180) * ($WOffset + $BarcodeLength);
|
||||
|
||||
$X2 = $X1 + cos(($Angle + 90) * PI / 180) * ($HOffset + $Height);
|
||||
$Y2 = $Y1 + sin(($Angle + 90) * PI / 180) * ($HOffset + $Height);
|
||||
|
||||
|
||||
$AreaWidth = max(abs($X1), abs($X2));
|
||||
$AreaHeight = max(abs($Y1), abs($Y2));
|
||||
|
||||
return ["Width" => $AreaWidth, "Height" => $AreaHeight];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the encoded string
|
||||
*
|
||||
* @param string $Value
|
||||
* @return string
|
||||
*/
|
||||
public function encode39($Value)
|
||||
{
|
||||
$this->Result = "100101101101" . "0";
|
||||
$TextString = "";
|
||||
for ($i = 1; $i <= strlen($Value); $i++) {
|
||||
$CharCode = ord($this->mid($Value, $i, 1));
|
||||
if ($CharCode >= 97 && $CharCode <= 122) {
|
||||
$CharCode = $CharCode - 32;
|
||||
}
|
||||
|
||||
if (isset($this->Codes[chr($CharCode)])) {
|
||||
$this->Result = $this->Result . $this->Codes[chr($CharCode)] . "0";
|
||||
$TextString = $TextString . chr($CharCode);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->MOD43) {
|
||||
$Checksum = $this->checksum($TextString);
|
||||
$this->Result = $this->Result . $this->Codes[$Checksum] . "0";
|
||||
}
|
||||
|
||||
$this->Result = $this->Result . "100101101101";
|
||||
$TextString = "*" . $TextString . "*";
|
||||
|
||||
return $TextString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the encoded string
|
||||
* @param Image $Object
|
||||
* @param type $Value
|
||||
* @param type $X
|
||||
* @param type $Y
|
||||
* @param array $Format
|
||||
*/
|
||||
public function draw(Image $Object, $Value, $X, $Y, $Format = [])
|
||||
{
|
||||
$this->pChartObject = $Object;
|
||||
|
||||
$R = isset($Format["R"]) ? $Format["R"] : 0;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : 0;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : 0;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
|
||||
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : false;
|
||||
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
||||
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : false;
|
||||
$AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
|
||||
$AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
|
||||
$AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
|
||||
$AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
|
||||
$AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
|
||||
$AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
|
||||
|
||||
$TextString = $this->encode39($Value);
|
||||
|
||||
if ($DrawArea) {
|
||||
$X1 = $X + cos(($Angle - 135) * PI / 180) * 10;
|
||||
$Y1 = $Y + sin(($Angle - 135) * PI / 180) * 10;
|
||||
|
||||
$X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result) + 20);
|
||||
$Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result) + 20);
|
||||
|
||||
if ($ShowLegend) {
|
||||
$X3 = $X2
|
||||
+ cos(($Angle + 90) * PI / 180)
|
||||
* ($Height + $LegendOffset + $this->pChartObject->FontSize + 10)
|
||||
;
|
||||
$Y3 = $Y2
|
||||
+ sin(($Angle + 90) * PI / 180)
|
||||
* ($Height + $LegendOffset + $this->pChartObject->FontSize + 10)
|
||||
;
|
||||
} else {
|
||||
$X3 = $X2 + cos(($Angle + 90) * PI / 180) * ($Height + 20);
|
||||
$Y3 = $Y2 + sin(($Angle + 90) * PI / 180) * ($Height + 20);
|
||||
}
|
||||
|
||||
$X4 = $X3 + cos(($Angle + 180) * PI / 180) * (strlen($this->Result) + 20);
|
||||
$Y4 = $Y3 + sin(($Angle + 180) * PI / 180) * (strlen($this->Result) + 20);
|
||||
|
||||
$Polygon = [$X1, $Y1, $X2, $Y2, $X3, $Y3, $X4, $Y4];
|
||||
$Settings = [
|
||||
"R" => $AreaR,
|
||||
"G" => $AreaG,
|
||||
"B" => $AreaB,
|
||||
"BorderR" => $AreaBorderR,
|
||||
"BorderG" => $AreaBorderG,
|
||||
"BorderB" => $AreaBorderB
|
||||
];
|
||||
$this->pChartObject->drawPolygon($Polygon, $Settings);
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= strlen($this->Result); $i++) {
|
||||
if ($this->mid($this->Result, $i, 1) == 1) {
|
||||
$X1 = $X + cos($Angle * PI / 180) * $i;
|
||||
$Y1 = $Y + sin($Angle * PI / 180) * $i;
|
||||
$X2 = $X1 + cos(($Angle + 90) * PI / 180) * $Height;
|
||||
$Y2 = $Y1 + sin(($Angle + 90) * PI / 180) * $Height;
|
||||
|
||||
$Settings = ["R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha];
|
||||
$this->pChartObject->drawLine($X1, $Y1, $X2, $Y2, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
if ($ShowLegend) {
|
||||
$X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result) / 2);
|
||||
$Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result) / 2);
|
||||
|
||||
$LegendX = $X1 + cos(($Angle + 90) * PI / 180) * ($Height + $LegendOffset);
|
||||
$LegendY = $Y1 + sin(($Angle + 90) * PI / 180) * ($Height + $LegendOffset);
|
||||
|
||||
$Settings = [
|
||||
"R" => $R,
|
||||
"G" => $G,
|
||||
"B" => $B,
|
||||
"Alpha" => $Alpha,
|
||||
"Angle" => -$Angle,
|
||||
"Align" => TEXT_ALIGN_TOPMIDDLE
|
||||
];
|
||||
$this->pChartObject->drawText($LegendX, $LegendY, $TextString, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string
|
||||
*/
|
||||
public function checksum($string)
|
||||
{
|
||||
$checksum = 0;
|
||||
$length = strlen($string);
|
||||
$charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
|
||||
|
||||
for ($i = 0; $i < $length; ++$i) {
|
||||
$checksum += strpos($charset, $string[$i]);
|
||||
}
|
||||
return substr($charset, ($checksum % 43), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
* @param int $NbChar
|
||||
* @return string
|
||||
*/
|
||||
public function left($value, $NbChar)
|
||||
{
|
||||
return substr($value, 0, $NbChar);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
* @param int $NbChar
|
||||
* @return string|false
|
||||
*/
|
||||
public function right($value, $NbChar)
|
||||
{
|
||||
return substr($value, strlen($value) - $NbChar, $NbChar);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
* @param int $Depart
|
||||
* @param int $NbChar
|
||||
* @return string
|
||||
*/
|
||||
public function mid($value, $Depart, $NbChar)
|
||||
{
|
||||
return substr($value, $Depart - 1, $NbChar);
|
||||
}
|
||||
}
|
1728
vendor/szymach/c-pchart/src/BaseDraw.php
vendored
Normal file
1728
vendor/szymach/c-pchart/src/BaseDraw.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
392
vendor/szymach/c-pchart/src/Cache.php
vendored
Normal file
392
vendor/szymach/c-pchart/src/Cache.php
vendored
Normal file
|
@ -0,0 +1,392 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart;
|
||||
|
||||
/**
|
||||
* Cache - speed up the rendering by caching up the pictures
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Cache
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $CacheFolder;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $CacheIndex;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $CacheDB;
|
||||
|
||||
/**
|
||||
* @param array $Settings
|
||||
*/
|
||||
public function __construct(array $Settings = [])
|
||||
{
|
||||
$CacheFolder = isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : __DIR__ . "/../cache";
|
||||
$CacheIndex = isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db";
|
||||
$CacheDB = isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db";
|
||||
|
||||
$this->CacheFolder = $CacheFolder;
|
||||
$this->CacheIndex = $CacheIndex;
|
||||
$this->CacheDB = $CacheDB;
|
||||
if (!file_exists($this->CacheFolder . "/" . $this->CacheIndex)) {
|
||||
touch($this->CacheFolder . "/" . $this->CacheIndex);
|
||||
}
|
||||
if (!file_exists($this->CacheFolder . "/" . $this->CacheDB)) {
|
||||
touch($this->CacheFolder . "/" . $this->CacheDB);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush the cache contents
|
||||
*/
|
||||
public function flush()
|
||||
{
|
||||
if (file_exists($this->CacheFolder . "/" . $this->CacheIndex)) {
|
||||
unlink($this->CacheFolder . "/" . $this->CacheIndex);
|
||||
touch($this->CacheFolder . "/" . $this->CacheIndex);
|
||||
}
|
||||
if (file_exists($this->CacheFolder . "/" . $this->CacheDB)) {
|
||||
unlink($this->CacheFolder . "/" . $this->CacheDB);
|
||||
touch($this->CacheFolder . "/" . $this->CacheDB);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the MD5 of the data array to clearly identify the chart
|
||||
*
|
||||
* @param Data $Data
|
||||
* @param string $Marker
|
||||
* @return string
|
||||
*/
|
||||
public function getHash(Data $Data, $Marker = "")
|
||||
{
|
||||
return md5($Marker . serialize($Data->Data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the generated picture to the cache
|
||||
*
|
||||
* @param string $ID
|
||||
* @param Image $pChartObject
|
||||
*/
|
||||
public function writeToCache($ID, Image $pChartObject)
|
||||
{
|
||||
/* Compute the paths */
|
||||
$TemporaryFile = tempnam($this->CacheFolder, "tmp_");
|
||||
$Database = $this->CacheFolder . "/" . $this->CacheDB;
|
||||
$Index = $this->CacheFolder . "/" . $this->CacheIndex;
|
||||
/* Flush the picture to a temporary file */
|
||||
imagepng($pChartObject->Picture, $TemporaryFile);
|
||||
|
||||
/* Retrieve the files size */
|
||||
$PictureSize = filesize($TemporaryFile);
|
||||
$DBSize = filesize($Database);
|
||||
|
||||
/* Save the index */
|
||||
$Handle = fopen($Index, "a");
|
||||
fwrite($Handle, $ID . "," . $DBSize . "," . $PictureSize . "," . time() . ",0\r\n");
|
||||
fclose($Handle);
|
||||
|
||||
/* Get the picture raw contents */
|
||||
$Handle = fopen($TemporaryFile, "r");
|
||||
$Raw = fread($Handle, $PictureSize);
|
||||
fclose($Handle);
|
||||
|
||||
/* Save the picture in the solid database file */
|
||||
$Handle = fopen($Database, "a");
|
||||
fwrite($Handle, $Raw);
|
||||
fclose($Handle);
|
||||
|
||||
/* Remove temporary file */
|
||||
unlink($TemporaryFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove object older than the specified TS
|
||||
* @param int $Expiry
|
||||
*/
|
||||
public function removeOlderThan($Expiry)
|
||||
{
|
||||
$this->dbRemoval(["Expiry" => $Expiry]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an object from the cache
|
||||
* @param string $ID
|
||||
*/
|
||||
public function remove($ID)
|
||||
{
|
||||
$this->dbRemoval(["Name" => $ID]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove with specified criterias.
|
||||
*
|
||||
* @param array $Settings
|
||||
* @return int
|
||||
*/
|
||||
public function dbRemoval(array $Settings)
|
||||
{
|
||||
$ID = isset($Settings["Name"]) ? $Settings["Name"] : null;
|
||||
$Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24 * 60 * 60);
|
||||
$TS = time() - $Expiry;
|
||||
|
||||
/* Compute the paths */
|
||||
$Database = $this->CacheFolder . "/" . $this->CacheDB;
|
||||
$Index = $this->CacheFolder . "/" . $this->CacheIndex;
|
||||
$DatabaseTemp = $this->CacheFolder . "/" . $this->CacheDB . ".tmp";
|
||||
$IndexTemp = $this->CacheFolder . "/" . $this->CacheIndex . ".tmp";
|
||||
|
||||
/* Single file removal */
|
||||
if ($ID != null) {
|
||||
/* Retrieve object informations */
|
||||
$Object = $this->isInCache($ID, true);
|
||||
|
||||
/* If it's not in the cache DB, go away */
|
||||
if (!$Object) {
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Create the temporary files */
|
||||
if (!file_exists($DatabaseTemp)) {
|
||||
touch($DatabaseTemp);
|
||||
}
|
||||
if (!file_exists($IndexTemp)) {
|
||||
touch($IndexTemp);
|
||||
}
|
||||
|
||||
/* Open the file handles */
|
||||
$IndexHandle = @fopen($Index, "r");
|
||||
$IndexTempHandle = @fopen($IndexTemp, "w");
|
||||
$DBHandle = @fopen($Database, "r");
|
||||
$DBTempHandle = @fopen($DatabaseTemp, "w");
|
||||
|
||||
/* Remove the selected ID from the database */
|
||||
while (!feof($IndexHandle)) {
|
||||
$Entry = fgets($IndexHandle, 4096);
|
||||
$Entry = str_replace("\r", "", $Entry);
|
||||
$Entry = str_replace("\n", "", $Entry);
|
||||
$Settings = preg_split("/,/", $Entry);
|
||||
|
||||
if ($Entry != "") {
|
||||
$PicID = $Settings[0];
|
||||
$DBPos = $Settings[1];
|
||||
$PicSize = $Settings[2];
|
||||
$GeneratedTS = $Settings[3];
|
||||
$Hits = $Settings[4];
|
||||
|
||||
if ($Settings[0] != $ID && $GeneratedTS > $TS) {
|
||||
$CurrentPos = ftell($DBTempHandle);
|
||||
fwrite(
|
||||
$IndexTempHandle,
|
||||
sprintf(
|
||||
"%s,%s,%s,%s,%s\r\n",
|
||||
$PicID,
|
||||
$CurrentPos,
|
||||
$PicSize,
|
||||
$GeneratedTS,
|
||||
$Hits
|
||||
)
|
||||
);
|
||||
|
||||
fseek($DBHandle, $DBPos);
|
||||
$Picture = fread($DBHandle, $PicSize);
|
||||
fwrite($DBTempHandle, $Picture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Close the handles */
|
||||
fclose($IndexHandle);
|
||||
fclose($IndexTempHandle);
|
||||
fclose($DBHandle);
|
||||
fclose($DBTempHandle);
|
||||
|
||||
/* Remove the prod files */
|
||||
unlink($Database);
|
||||
unlink($Index);
|
||||
|
||||
/* Swap the temp & prod DB */
|
||||
rename($DatabaseTemp, $Database);
|
||||
rename($IndexTemp, $Index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the file in cache?
|
||||
*
|
||||
* @param string $ID
|
||||
* @param boolean $Verbose
|
||||
* @param boolean $UpdateHitsCount
|
||||
* @return boolean
|
||||
*/
|
||||
public function isInCache($ID, $Verbose = false, $UpdateHitsCount = false)
|
||||
{
|
||||
/* Compute the paths */
|
||||
$Index = $this->CacheFolder . "/" . $this->CacheIndex;
|
||||
|
||||
/* Search the picture in the index file */
|
||||
$Handle = @fopen($Index, "r");
|
||||
while (!feof($Handle)) {
|
||||
$IndexPos = ftell($Handle);
|
||||
$Entry = fgets($Handle, 4096);
|
||||
if ($Entry != "") {
|
||||
$Settings = preg_split("/,/", $Entry);
|
||||
$PicID = $Settings[0];
|
||||
if ($PicID == $ID) {
|
||||
fclose($Handle);
|
||||
|
||||
$DBPos = $Settings[1];
|
||||
$PicSize = $Settings[2];
|
||||
$GeneratedTS = $Settings[3];
|
||||
$Hits = intval($Settings[4]);
|
||||
|
||||
if ($UpdateHitsCount) {
|
||||
$Hits++;
|
||||
if (strlen($Hits) < 7) {
|
||||
$Hits = $Hits . str_repeat(" ", 7 - strlen($Hits));
|
||||
}
|
||||
|
||||
$Handle = @fopen($Index, "r+");
|
||||
fseek($Handle, $IndexPos);
|
||||
fwrite(
|
||||
$Handle,
|
||||
sprintf(
|
||||
"%s,%s,%s,%s,%s\r\n",
|
||||
$PicID,
|
||||
$DBPos,
|
||||
$PicSize,
|
||||
$GeneratedTS,
|
||||
$Hits
|
||||
)
|
||||
);
|
||||
fclose($Handle);
|
||||
}
|
||||
|
||||
if ($Verbose) {
|
||||
return [
|
||||
"DBPos" => $DBPos,
|
||||
"PicSize" => $PicSize,
|
||||
"GeneratedTS" => $GeneratedTS,
|
||||
"Hits" => $Hits
|
||||
];
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose($Handle);
|
||||
|
||||
/* Picture isn't in the cache */
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatic output method based on the calling interface
|
||||
* @param string $ID
|
||||
* @param string $Destination
|
||||
*/
|
||||
public function autoOutput($ID, $Destination = "output.png")
|
||||
{
|
||||
if (php_sapi_name() == "cli") {
|
||||
$this->saveFromCache($ID, $Destination);
|
||||
} else {
|
||||
$this->strokeFromCache($ID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show image from cache
|
||||
* @param string $ID
|
||||
* @return boolean
|
||||
*/
|
||||
public function strokeFromCache($ID)
|
||||
{
|
||||
/* Get the raw picture from the cache */
|
||||
$Picture = $this->getFromCache($ID);
|
||||
|
||||
/* Do we have a hit? */
|
||||
if ($Picture == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
header('Content-type: image/png');
|
||||
echo $Picture;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save file from cache.
|
||||
* @param string $ID
|
||||
* @param string $Destination
|
||||
* @return boolean
|
||||
*/
|
||||
public function saveFromCache($ID, $Destination)
|
||||
{
|
||||
/* Get the raw picture from the cache */
|
||||
$Picture = $this->getFromCache($ID);
|
||||
|
||||
/* Do we have a hit? */
|
||||
if ($Picture == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Flush the picture to a file */
|
||||
$Handle = fopen($Destination, "w");
|
||||
fwrite($Handle, $Picture);
|
||||
fclose($Handle);
|
||||
|
||||
/* All went fine */
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file from cache
|
||||
* @param string $ID
|
||||
* @return string|null
|
||||
*/
|
||||
public function getFromCache($ID)
|
||||
{
|
||||
/* Compute the path */
|
||||
$Database = $this->CacheFolder . "/" . $this->CacheDB;
|
||||
|
||||
/* Lookup for the picture in the cache */
|
||||
$CacheInfo = $this->isInCache($ID, true, true);
|
||||
|
||||
/* Not in the cache */
|
||||
if (!$CacheInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* Get the database extended information */
|
||||
$DBPos = $CacheInfo["DBPos"];
|
||||
$PicSize = $CacheInfo["PicSize"];
|
||||
|
||||
/* Extract the picture from the solid cache file */
|
||||
$Handle = @fopen($Database, "r");
|
||||
fseek($Handle, $DBPos);
|
||||
$Picture = fread($Handle, $PicSize);
|
||||
fclose($Handle);
|
||||
|
||||
/* Return back the raw picture data */
|
||||
return $Picture;
|
||||
}
|
||||
}
|
532
vendor/szymach/c-pchart/src/Chart/Bubble.php
vendored
Normal file
532
vendor/szymach/c-pchart/src/Chart/Bubble.php
vendored
Normal file
|
@ -0,0 +1,532 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Chart;
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/**
|
||||
* Bubble - class to draw bubble charts
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Bubble
|
||||
{
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @var Data
|
||||
*/
|
||||
public $pDataObject;
|
||||
|
||||
/**
|
||||
* @param Image $pChartObject
|
||||
* @param Data $pDataObject
|
||||
*/
|
||||
public function __construct(Image $pChartObject, Data $pDataObject)
|
||||
{
|
||||
$this->pChartObject = $pChartObject;
|
||||
$this->pDataObject = $pDataObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the scale
|
||||
*
|
||||
* @param mixed $DataSeries
|
||||
* @param mixed $WeightSeries
|
||||
*/
|
||||
public function bubbleScale($DataSeries, $WeightSeries)
|
||||
{
|
||||
if (!is_array($DataSeries)) {
|
||||
$DataSeries = [$DataSeries];
|
||||
}
|
||||
if (!is_array($WeightSeries)) {
|
||||
$WeightSeries = [$WeightSeries];
|
||||
}
|
||||
|
||||
/* Parse each data series to find the new min & max boundaries to scale */
|
||||
$NewPositiveSerie = [];
|
||||
$NewNegativeSerie = [];
|
||||
$MaxValues = 0;
|
||||
$LastPositive = 0;
|
||||
$LastNegative = 0;
|
||||
|
||||
foreach ($DataSeries as $Key => $SerieName) {
|
||||
$SerieWeightName = $WeightSeries[$Key];
|
||||
|
||||
$this->pDataObject->setSerieDrawable($SerieWeightName, false);
|
||||
$serieData = $this->pDataObject->Data["Series"][$SerieName]["Data"];
|
||||
if (count($serieData) > $MaxValues) {
|
||||
$MaxValues = count($serieData);
|
||||
}
|
||||
|
||||
foreach ($serieData as $Key => $Value) {
|
||||
if ($Value >= 0) {
|
||||
$BubbleBounds = $Value + $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
|
||||
|
||||
if (!isset($NewPositiveSerie[$Key])) {
|
||||
$NewPositiveSerie[$Key] = $BubbleBounds;
|
||||
} elseif ($NewPositiveSerie[$Key] < $BubbleBounds) {
|
||||
$NewPositiveSerie[$Key] = $BubbleBounds;
|
||||
}
|
||||
$LastPositive = $BubbleBounds;
|
||||
} else {
|
||||
$BubbleBounds = $Value - $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
|
||||
|
||||
if (!isset($NewNegativeSerie[$Key])) {
|
||||
$NewNegativeSerie[$Key] = $BubbleBounds;
|
||||
} elseif ($NewNegativeSerie[$Key] > $BubbleBounds) {
|
||||
$NewNegativeSerie[$Key] = $BubbleBounds;
|
||||
}
|
||||
$LastNegative = $BubbleBounds;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for missing values and all the fake positive serie */
|
||||
if (count($NewPositiveSerie)) {
|
||||
for ($i = 0; $i < $MaxValues; $i++) {
|
||||
if (!isset($NewPositiveSerie[$i])) {
|
||||
$NewPositiveSerie[$i] = $LastPositive;
|
||||
}
|
||||
}
|
||||
$this->pDataObject->addPoints($NewPositiveSerie, "BubbleFakePositiveSerie");
|
||||
}
|
||||
|
||||
/* Check for missing values and all the fake negative serie */
|
||||
if (count($NewNegativeSerie)) {
|
||||
for ($i = 0; $i < $MaxValues; $i++) {
|
||||
if (!isset($NewNegativeSerie[$i])) {
|
||||
$NewNegativeSerie[$i] = $LastNegative;
|
||||
}
|
||||
}
|
||||
|
||||
$this->pDataObject->addPoints($NewNegativeSerie, "BubbleFakeNegativeSerie");
|
||||
}
|
||||
}
|
||||
|
||||
public function resetSeriesColors()
|
||||
{
|
||||
$Data = $this->pDataObject->getData();
|
||||
$Palette = $this->pDataObject->getPalette();
|
||||
|
||||
$ID = 0;
|
||||
foreach ($Data["Series"] as $SerieName => $SeriesParameters) {
|
||||
if ($SeriesParameters["isDrawable"]) {
|
||||
$this->pDataObject->Data["Series"][$SerieName]["Color"]["R"] = $Palette[$ID]["R"];
|
||||
$this->pDataObject->Data["Series"][$SerieName]["Color"]["G"] = $Palette[$ID]["G"];
|
||||
$this->pDataObject->Data["Series"][$SerieName]["Color"]["B"] = $Palette[$ID]["B"];
|
||||
$this->pDataObject->Data["Series"][$SerieName]["Color"]["Alpha"] = $Palette[$ID]["Alpha"];
|
||||
$ID++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Prepare the scale */
|
||||
|
||||
public function drawBubbleChart($DataSeries, $WeightSeries, $Format = "")
|
||||
{
|
||||
$ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : VOID;
|
||||
$DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : true;
|
||||
$BorderWidth = isset($Format["BorderWidth"]) ? $Format["BorderWidth"] : 1;
|
||||
$Shape = isset($Format["Shape"]) ? $Format["Shape"] : BUBBLE_SHAPE_ROUND;
|
||||
$Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : null;
|
||||
$BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
|
||||
$BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
|
||||
$BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
|
||||
$BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
|
||||
$RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : false;
|
||||
|
||||
if (!is_array($DataSeries)) {
|
||||
$DataSeries = [$DataSeries];
|
||||
}
|
||||
if (!is_array($WeightSeries)) {
|
||||
$WeightSeries = [$WeightSeries];
|
||||
}
|
||||
|
||||
$Data = $this->pDataObject->getData();
|
||||
$Palette = $this->pDataObject->getPalette();
|
||||
|
||||
if (isset($Data["Series"]["BubbleFakePositiveSerie"])) {
|
||||
$this->pDataObject->setSerieDrawable("BubbleFakePositiveSerie", false);
|
||||
}
|
||||
if (isset($Data["Series"]["BubbleFakeNegativeSerie"])) {
|
||||
$this->pDataObject->setSerieDrawable("BubbleFakeNegativeSerie", false);
|
||||
}
|
||||
|
||||
$this->resetSeriesColors();
|
||||
|
||||
list($XMargin, $XDivs) = $this->pChartObject->scaleGetXSettings();
|
||||
|
||||
foreach ($DataSeries as $Key => $SerieName) {
|
||||
$AxisID = $Data["Series"][$SerieName]["Axis"];
|
||||
$Mode = $Data["Axis"][$AxisID]["Display"];
|
||||
$Format = $Data["Axis"][$AxisID]["Format"];
|
||||
$Unit = $Data["Axis"][$AxisID]["Unit"];
|
||||
|
||||
if (isset($Data["Series"][$SerieName]["Description"])) {
|
||||
$SerieDescription = $Data["Series"][$SerieName]["Description"];
|
||||
} else {
|
||||
$SerieDescription = $SerieName;
|
||||
}
|
||||
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2) / $XDivs;
|
||||
|
||||
$X = $this->pChartObject->GraphAreaX1 + $XMargin;
|
||||
$Y = $this->pChartObject->GraphAreaY1 + $XMargin;
|
||||
|
||||
$Color = [
|
||||
"R" => $Palette[$Key]["R"],
|
||||
"G" => $Palette[$Key]["G"],
|
||||
"B" => $Palette[$Key]["B"],
|
||||
"Alpha" => $Palette[$Key]["Alpha"]
|
||||
];
|
||||
|
||||
if ($ForceAlpha != VOID) {
|
||||
$Color["Alpha"] = $ForceAlpha;
|
||||
}
|
||||
|
||||
if ($DrawBorder) {
|
||||
if ($BorderWidth != 1) {
|
||||
if ($Surrounding != null) {
|
||||
$BorderR = $Palette[$Key]["R"] + $Surrounding;
|
||||
$BorderG = $Palette[$Key]["G"] + $Surrounding;
|
||||
$BorderB = $Palette[$Key]["B"] + $Surrounding;
|
||||
}
|
||||
if ($ForceAlpha != VOID) {
|
||||
$BorderAlpha = $ForceAlpha / 2;
|
||||
}
|
||||
$BorderColor = [
|
||||
"R" => $BorderR,
|
||||
"G" => $BorderG,
|
||||
"B" => $BorderB,
|
||||
"Alpha" => $BorderAlpha
|
||||
];
|
||||
} else {
|
||||
$Color["BorderAlpha"] = $BorderAlpha;
|
||||
|
||||
if ($Surrounding != null) {
|
||||
$Color["BorderR"] = $Palette[$Key]["R"] + $Surrounding;
|
||||
$Color["BorderG"] = $Palette[$Key]["G"] + $Surrounding;
|
||||
$Color["BorderB"] = $Palette[$Key]["B"] + $Surrounding;
|
||||
} else {
|
||||
$Color["BorderR"] = $BorderR;
|
||||
$Color["BorderG"] = $BorderG;
|
||||
$Color["BorderB"] = $BorderB;
|
||||
}
|
||||
if ($ForceAlpha != VOID) {
|
||||
$Color["BorderAlpha"] = $ForceAlpha / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($Data["Series"][$SerieName]["Data"] as $iKey => $Point) {
|
||||
$Weight = $Point + $Data["Series"][$WeightSeries[$Key]]["Data"][$iKey];
|
||||
|
||||
$PosArray = $this->pChartObject->scaleComputeY(
|
||||
$Point,
|
||||
["AxisID" => $AxisID]
|
||||
);
|
||||
$WeightArray = $this->pChartObject->scaleComputeY(
|
||||
$Weight,
|
||||
["AxisID" => $AxisID]
|
||||
);
|
||||
|
||||
if ($Data["Orientation"] == SCALE_POS_LEFTRIGHT) {
|
||||
if ($XDivs == 0) {
|
||||
$XStep = 0;
|
||||
} else {
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
$Y = floor($PosArray);
|
||||
$CircleRadius = floor(abs($PosArray - $WeightArray) / 2);
|
||||
|
||||
if ($Shape == BUBBLE_SHAPE_SQUARE) {
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
(
|
||||
floor($X - $CircleRadius)
|
||||
. "," . floor($Y - $CircleRadius)
|
||||
. "," . floor($X + $CircleRadius)
|
||||
. "," . floor($Y + $CircleRadius)
|
||||
),
|
||||
$this->pChartObject->toHTMLColor(
|
||||
$Palette[$Key]["R"],
|
||||
$Palette[$Key]["G"],
|
||||
$Palette[$Key]["B"]
|
||||
),
|
||||
$SerieDescription,
|
||||
$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]
|
||||
);
|
||||
}
|
||||
|
||||
if ($BorderWidth != 1) {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius - $BorderWidth,
|
||||
$Y - $CircleRadius - $BorderWidth,
|
||||
$X + $CircleRadius + $BorderWidth,
|
||||
$Y + $CircleRadius + $BorderWidth,
|
||||
$BorderColor
|
||||
);
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius,
|
||||
$Y - $CircleRadius,
|
||||
$X + $CircleRadius,
|
||||
$Y + $CircleRadius,
|
||||
$Color
|
||||
);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius,
|
||||
$Y - $CircleRadius,
|
||||
$X + $CircleRadius,
|
||||
$Y + $CircleRadius,
|
||||
$Color
|
||||
);
|
||||
}
|
||||
} elseif ($Shape == BUBBLE_SHAPE_ROUND) {
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"CIRCLE",
|
||||
floor($X) . "," . floor($Y) . "," . floor($CircleRadius),
|
||||
$this->pChartObject->toHTMLColor(
|
||||
$Palette[$Key]["R"],
|
||||
$Palette[$Key]["G"],
|
||||
$Palette[$Key]["B"]
|
||||
),
|
||||
$SerieDescription,
|
||||
$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]
|
||||
);
|
||||
}
|
||||
|
||||
if ($BorderWidth != 1) {
|
||||
$this->pChartObject->drawFilledCircle(
|
||||
$X,
|
||||
$Y,
|
||||
$CircleRadius + $BorderWidth,
|
||||
$BorderColor
|
||||
);
|
||||
$this->pChartObject->drawFilledCircle($X, $Y, $CircleRadius, $Color);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledCircle($X, $Y, $CircleRadius, $Color);
|
||||
}
|
||||
}
|
||||
|
||||
$X = $X + $XStep;
|
||||
} elseif ($Data["Orientation"] == SCALE_POS_TOPBOTTOM) {
|
||||
if ($XDivs == 0) {
|
||||
$XStep = 0;
|
||||
} else {
|
||||
$XStep = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
$X = floor($PosArray);
|
||||
$CircleRadius = floor(abs($PosArray - $WeightArray) / 2);
|
||||
|
||||
if ($Shape == BUBBLE_SHAPE_SQUARE) {
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
(
|
||||
floor($X - $CircleRadius) . ","
|
||||
. floor($Y - $CircleRadius) . ","
|
||||
. floor($X + $CircleRadius) . ","
|
||||
. floor($Y + $CircleRadius)
|
||||
),
|
||||
$this->pChartObject->toHTMLColor(
|
||||
$Palette[$Key]["R"],
|
||||
$Palette[$Key]["G"],
|
||||
$Palette[$Key]["B"]
|
||||
),
|
||||
$SerieDescription,
|
||||
$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]
|
||||
);
|
||||
}
|
||||
|
||||
if ($BorderWidth != 1) {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius - $BorderWidth,
|
||||
$Y - $CircleRadius - $BorderWidth,
|
||||
$X + $CircleRadius + $BorderWidth,
|
||||
$Y + $CircleRadius + $BorderWidth,
|
||||
$BorderColor
|
||||
);
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius,
|
||||
$Y - $CircleRadius,
|
||||
$X + $CircleRadius,
|
||||
$Y + $CircleRadius,
|
||||
$Color
|
||||
);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $CircleRadius,
|
||||
$Y - $CircleRadius,
|
||||
$X + $CircleRadius,
|
||||
$Y + $CircleRadius,
|
||||
$Color
|
||||
);
|
||||
}
|
||||
} elseif ($Shape == BUBBLE_SHAPE_ROUND) {
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"CIRCLE",
|
||||
floor($X) . "," . floor($Y) . "," . floor($CircleRadius),
|
||||
$this->pChartObject->toHTMLColor(
|
||||
$Palette[$Key]["R"],
|
||||
$Palette[$Key]["G"],
|
||||
$Palette[$Key]["B"]
|
||||
),
|
||||
$SerieDescription,
|
||||
$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]
|
||||
);
|
||||
}
|
||||
|
||||
if ($BorderWidth != 1) {
|
||||
$this->pChartObject->drawFilledCircle(
|
||||
$X,
|
||||
$Y,
|
||||
$CircleRadius + $BorderWidth,
|
||||
$BorderColor
|
||||
);
|
||||
$this->pChartObject->drawFilledCircle($X, $Y, $CircleRadius, $Color);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledCircle($X, $Y, $CircleRadius, $Color);
|
||||
}
|
||||
}
|
||||
|
||||
$Y = $Y + $XStep;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function writeBubbleLabel($SerieName, $SerieWeightName, $Points, $Format = "")
|
||||
{
|
||||
$DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
|
||||
|
||||
if (!is_array($Points)) {
|
||||
$Point = $Points;
|
||||
$Points = [];
|
||||
$Points[] = $Point;
|
||||
}
|
||||
|
||||
$Data = $this->pDataObject->getData();
|
||||
|
||||
if (!isset($Data["Series"][$SerieName])
|
||||
|| !isset($Data["Series"][$SerieWeightName])
|
||||
) {
|
||||
return(0);
|
||||
}
|
||||
list($XMargin, $XDivs) = $this->pChartObject->scaleGetXSettings();
|
||||
|
||||
$AxisID = $Data["Series"][$SerieName]["Axis"];
|
||||
$AxisMode = $Data["Axis"][$AxisID]["Display"];
|
||||
$AxisFormat = $Data["Axis"][$AxisID]["Format"];
|
||||
$AxisUnit = $Data["Axis"][$AxisID]["Unit"];
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2) / $XDivs;
|
||||
|
||||
$X = $InitialX = $this->pChartObject->GraphAreaX1 + $XMargin;
|
||||
$Y = $InitialY = $this->pChartObject->GraphAreaY1 + $XMargin;
|
||||
|
||||
$Color = [
|
||||
"R" => $Data["Series"][$SerieName]["Color"]["R"],
|
||||
"G" => $Data["Series"][$SerieName]["Color"]["G"],
|
||||
"B" => $Data["Series"][$SerieName]["Color"]["B"],
|
||||
"Alpha" => $Data["Series"][$SerieName]["Color"]["Alpha"]
|
||||
];
|
||||
|
||||
foreach ($Points as $Key => $Point) {
|
||||
$Value = $Data["Series"][$SerieName]["Data"][$Point];
|
||||
$PosArray = $this->pChartObject->scaleComputeY($Value, ["AxisID" => $AxisID]);
|
||||
|
||||
if (isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Point])) {
|
||||
$Abscissa = $Data["Series"][$Data["Abscissa"]]["Data"][$Point] . " : ";
|
||||
} else {
|
||||
$Abscissa = "";
|
||||
}
|
||||
$Value = $this->pChartObject->scaleFormat($Value, $AxisMode, $AxisFormat, $AxisUnit);
|
||||
$Weight = $Data["Series"][$SerieWeightName]["Data"][$Point];
|
||||
$Caption = $Abscissa . $Value . " / " . $Weight;
|
||||
|
||||
if (isset($Data["Series"][$SerieName]["Description"])) {
|
||||
$Description = $Data["Series"][$SerieName]["Description"];
|
||||
} else {
|
||||
$Description = "No description";
|
||||
}
|
||||
$Series = [["Format" => $Color, "Caption" => $Caption]];
|
||||
|
||||
if ($Data["Orientation"] == SCALE_POS_LEFTRIGHT) {
|
||||
if ($XDivs == 0) {
|
||||
$XStep = 0;
|
||||
} else {
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
|
||||
$X = floor($InitialX + $Point * $XStep);
|
||||
$Y = floor($PosArray);
|
||||
} else {
|
||||
if ($XDivs == 0) {
|
||||
$YStep = 0;
|
||||
} else {
|
||||
$YStep = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
|
||||
$X = floor($PosArray);
|
||||
$Y = floor($InitialY + $Point * $YStep);
|
||||
}
|
||||
|
||||
if ($DrawPoint == LABEL_POINT_CIRCLE) {
|
||||
$this->pChartObject->drawFilledCircle(
|
||||
$X,
|
||||
$Y,
|
||||
3,
|
||||
[
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"BorderR" => 0,
|
||||
"BorderG" => 0,
|
||||
"BorderB" => 0
|
||||
]
|
||||
);
|
||||
} elseif ($DrawPoint == LABEL_POINT_BOX) {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - 2,
|
||||
$Y - 2,
|
||||
$X + 2,
|
||||
$Y + 2,
|
||||
[
|
||||
"R" => 255,
|
||||
"G" => 255,
|
||||
"B" => 255,
|
||||
"BorderR" => 0,
|
||||
"BorderG" => 0,
|
||||
"BorderB" => 0
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$this->pChartObject->drawLabelBox($X, $Y - 3, $Description, $Series, $Format);
|
||||
}
|
||||
}
|
||||
}
|
377
vendor/szymach/c-pchart/src/Chart/Indicator.php
vendored
Normal file
377
vendor/szymach/c-pchart/src/Chart/Indicator.php
vendored
Normal file
|
@ -0,0 +1,377 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Chart;
|
||||
|
||||
use CpChart\Image;
|
||||
|
||||
/**
|
||||
* Indicator - class to draw indicators
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Indicator
|
||||
{
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @param Image $pChartObject
|
||||
*/
|
||||
public function __construct(Image $pChartObject)
|
||||
{
|
||||
$this->pChartObject = $pChartObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw an indicator
|
||||
*
|
||||
* @param int $X
|
||||
* @param int $Y
|
||||
* @param int $Width
|
||||
* @param int $Height
|
||||
* @param array $Format
|
||||
* @return null|int
|
||||
*/
|
||||
public function draw($X, $Y, $Width, $Height, array $Format = [])
|
||||
{
|
||||
$Values = isset($Format["Values"]) ? $Format["Values"] : VOID;
|
||||
$IndicatorSections = isset($Format["IndicatorSections"]) ? $Format["IndicatorSections"] : null;
|
||||
$ValueDisplay = isset($Format["ValueDisplay"]) ? $Format["ValueDisplay"] : INDICATOR_VALUE_BUBBLE;
|
||||
$SectionsMargin = isset($Format["SectionsMargin"]) ? $Format["SectionsMargin"] : 4;
|
||||
$DrawLeftHead = isset($Format["DrawLeftHead"]) ? $Format["DrawLeftHead"] : true;
|
||||
$DrawRightHead = isset($Format["DrawRightHead"]) ? $Format["DrawRightHead"] : true;
|
||||
$HeadSize = isset($Format["HeadSize"]) ? $Format["HeadSize"] : floor($Height / 4);
|
||||
$TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 4;
|
||||
$CaptionLayout = isset($Format["CaptionLayout"]) ? $Format["CaptionLayout"] : INDICATOR_CAPTION_EXTENDED;
|
||||
$CaptionPosition = isset($Format["CaptionPosition"]) ? $Format["CaptionPosition"] : INDICATOR_CAPTION_INSIDE;
|
||||
$CaptionColorFactor = isset($Format["CaptionColorFactor"]) ? $Format["CaptionColorFactor"] : null;
|
||||
$CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
|
||||
$CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
|
||||
$CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
|
||||
$CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
|
||||
$SubCaptionColorFactor = isset($Format["SubCaptionColorFactor"]) ? $Format["SubCaptionColorFactor"] : null;
|
||||
$SubCaptionR = isset($Format["SubCaptionR"]) ? $Format["SubCaptionR"] : 50;
|
||||
$SubCaptionG = isset($Format["SubCaptionG"]) ? $Format["SubCaptionG"] : 50;
|
||||
$SubCaptionB = isset($Format["SubCaptionB"]) ? $Format["SubCaptionB"] : 50;
|
||||
$SubCaptionAlpha = isset($Format["SubCaptionAlpha"]) ? $Format["SubCaptionAlpha"] : 100;
|
||||
$ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
|
||||
$ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
|
||||
$CaptionFontName = isset($Format["CaptionFontName"])
|
||||
? $Format["CaptionFontName"] : $this->pChartObject->FontName
|
||||
;
|
||||
$CaptionFontSize = isset($Format["CaptionFontSize"])
|
||||
? $Format["CaptionFontSize"] : $this->pChartObject->FontSize
|
||||
;
|
||||
$Unit = isset($Format["Unit"]) ? $Format["Unit"] : "";
|
||||
|
||||
/* Convert the Values to display to an array if needed */
|
||||
if (!is_array($Values)) {
|
||||
$Values = [$Values];
|
||||
}
|
||||
|
||||
/* No section, let's die */
|
||||
if ($IndicatorSections == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Determine indicator visual configuration */
|
||||
$OverallMin = $IndicatorSections[0]["End"];
|
||||
$OverallMax = $IndicatorSections[0]["Start"];
|
||||
foreach ($IndicatorSections as $Key => $Settings) {
|
||||
if ($Settings["End"] > $OverallMax) {
|
||||
$OverallMax = $Settings["End"];
|
||||
}
|
||||
if ($Settings["Start"] < $OverallMin) {
|
||||
$OverallMin = $Settings["Start"];
|
||||
}
|
||||
}
|
||||
$RealWidth = $Width - (count($IndicatorSections) - 1) * $SectionsMargin;
|
||||
$XScale = $RealWidth / ($OverallMax - $OverallMin);
|
||||
|
||||
$X1 = $X;
|
||||
$ValuesPos = [];
|
||||
foreach ($IndicatorSections as $Key => $Settings) {
|
||||
$Color = ["R" => $Settings["R"], "G" => $Settings["G"], "B" => $Settings["B"]];
|
||||
$Caption = $Settings["Caption"];
|
||||
$SubCaption = $Settings["Start"] . " - " . $Settings["End"];
|
||||
|
||||
$X2 = $X1 + ($Settings["End"] - $Settings["Start"]) * $XScale;
|
||||
|
||||
if ($Key == 0 && $DrawLeftHead) {
|
||||
$Poly = [];
|
||||
$Poly[] = $X1 - 1;
|
||||
$Poly[] = $Y;
|
||||
$Poly[] = $X1 - 1;
|
||||
$Poly[] = $Y + $Height;
|
||||
$Poly[] = $X1 - 1 - $HeadSize;
|
||||
$Poly[] = $Y + ($Height / 2);
|
||||
$this->pChartObject->drawPolygon($Poly, $Color);
|
||||
$this->pChartObject->drawLine($X1 - 2, $Y, $X1 - 2 - $HeadSize, $Y + ($Height / 2), $Color);
|
||||
$this->pChartObject->drawLine(
|
||||
$X1 - 2,
|
||||
$Y + $Height,
|
||||
$X1 - 2 - $HeadSize,
|
||||
$Y + ($Height / 2),
|
||||
$Color
|
||||
);
|
||||
}
|
||||
|
||||
/* Determine the position of the breaks */
|
||||
$Break = [];
|
||||
foreach ($Values as $iKey => $Value) {
|
||||
if ($Value >= $Settings["Start"] && $Value <= $Settings["End"]) {
|
||||
$XBreak = $X1 + ($Value - $Settings["Start"]) * $XScale;
|
||||
$ValuesPos[$Value] = $XBreak;
|
||||
$Break[] = floor($XBreak);
|
||||
}
|
||||
}
|
||||
|
||||
if ($ValueDisplay == INDICATOR_VALUE_LABEL) {
|
||||
if (!count($Break)) {
|
||||
$this->pChartObject->drawFilledRectangle($X1, $Y, $X2, $Y + $Height, $Color);
|
||||
} else {
|
||||
sort($Break);
|
||||
$Poly = [];
|
||||
$Poly[] = $X1;
|
||||
$Poly[] = $Y;
|
||||
$LastPointWritten = false;
|
||||
foreach ($Break as $iKey => $Value) {
|
||||
if ($Value - 5 >= $X1) {
|
||||
$Poly[] = $Value - 5;
|
||||
$Poly[] = $Y;
|
||||
} elseif ($X1 - ($Value - 5) > 0) {
|
||||
$Offset = $X1 - ($Value - 5);
|
||||
$Poly = [$X1, $Y + $Offset];
|
||||
}
|
||||
|
||||
$Poly[] = $Value;
|
||||
$Poly[] = $Y + 5;
|
||||
|
||||
if ($Value + 5 <= $X2) {
|
||||
$Poly[] = $Value + 5;
|
||||
$Poly[] = $Y;
|
||||
} elseif (($Value + 5) > $X2) {
|
||||
$Offset = ($Value + 5) - $X2;
|
||||
$Poly[] = $X2;
|
||||
$Poly[] = $Y + $Offset;
|
||||
$LastPointWritten = true;
|
||||
}
|
||||
}
|
||||
if (!$LastPointWritten) {
|
||||
$Poly[] = $X2;
|
||||
$Poly[] = $Y;
|
||||
}
|
||||
$Poly[] = $X2;
|
||||
$Poly[] = $Y + $Height;
|
||||
$Poly[] = $X1;
|
||||
$Poly[] = $Y + $Height;
|
||||
|
||||
$this->pChartObject->drawPolygon($Poly, $Color);
|
||||
}
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle($X1, $Y, $X2, $Y + $Height, $Color);
|
||||
}
|
||||
|
||||
if ($Key == count($IndicatorSections) - 1 && $DrawRightHead) {
|
||||
$Poly = [];
|
||||
$Poly[] = $X2 + 1;
|
||||
$Poly[] = $Y;
|
||||
$Poly[] = $X2 + 1;
|
||||
$Poly[] = $Y + $Height;
|
||||
$Poly[] = $X2 + 1 + $HeadSize;
|
||||
$Poly[] = $Y + ($Height / 2);
|
||||
$this->pChartObject->drawPolygon($Poly, $Color);
|
||||
$this->pChartObject->drawLine($X2 + 1, $Y, $X2 + 1 + $HeadSize, $Y + ($Height / 2), $Color);
|
||||
$this->pChartObject->drawLine(
|
||||
$X2 + 1,
|
||||
$Y + $Height,
|
||||
$X2 + 1 + $HeadSize,
|
||||
$Y + ($Height / 2),
|
||||
$Color
|
||||
);
|
||||
}
|
||||
|
||||
$YOffset = 0;
|
||||
$XOffset = 0;
|
||||
if ($CaptionPosition == INDICATOR_CAPTION_INSIDE) {
|
||||
$TxtPos = $this->pChartObject->getTextBox(
|
||||
$X1,
|
||||
$Y + $Height + $TextPadding,
|
||||
$CaptionFontName,
|
||||
$CaptionFontSize,
|
||||
0,
|
||||
$Caption
|
||||
);
|
||||
$YOffset = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding;
|
||||
|
||||
if ($CaptionLayout == INDICATOR_CAPTION_EXTENDED) {
|
||||
$TxtPos = $this->pChartObject->getTextBox(
|
||||
$X1,
|
||||
$Y + $Height + $TextPadding,
|
||||
$CaptionFontName,
|
||||
$CaptionFontSize,
|
||||
0,
|
||||
$SubCaption
|
||||
);
|
||||
$YOffset = $YOffset + ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding * 2;
|
||||
}
|
||||
$XOffset = $TextPadding;
|
||||
}
|
||||
|
||||
if ($CaptionColorFactor == null) {
|
||||
$CaptionColor = [
|
||||
"Align" => TEXT_ALIGN_TOPLEFT,
|
||||
"FontName" => $CaptionFontName,
|
||||
"FontSize" => $CaptionFontSize,
|
||||
"R" => $CaptionR,
|
||||
"G" => $CaptionG,
|
||||
"B" => $CaptionB,
|
||||
"Alpha" => $CaptionAlpha
|
||||
];
|
||||
} else {
|
||||
$CaptionColor = [
|
||||
"Align" => TEXT_ALIGN_TOPLEFT,
|
||||
"FontName" => $CaptionFontName,
|
||||
"FontSize" => $CaptionFontSize,
|
||||
"R" => $Settings["R"] + $CaptionColorFactor,
|
||||
"G" => $Settings["G"] + $CaptionColorFactor,
|
||||
"B" => $Settings["B"] + $CaptionColorFactor
|
||||
];
|
||||
}
|
||||
|
||||
if ($SubCaptionColorFactor == null) {
|
||||
$SubCaptionColor = [
|
||||
"Align" => TEXT_ALIGN_TOPLEFT,
|
||||
"FontName" => $CaptionFontName,
|
||||
"FontSize" => $CaptionFontSize,
|
||||
"R" => $SubCaptionR,
|
||||
"G" => $SubCaptionG,
|
||||
"B" => $SubCaptionB,
|
||||
"Alpha" => $SubCaptionAlpha
|
||||
];
|
||||
} else {
|
||||
$SubCaptionColor = [
|
||||
"Align" => TEXT_ALIGN_TOPLEFT,
|
||||
"FontName" => $CaptionFontName,
|
||||
"FontSize" => $CaptionFontSize,
|
||||
"R" => $Settings["R"] + $SubCaptionColorFactor,
|
||||
"G" => $Settings["G"] + $SubCaptionColorFactor,
|
||||
"B" => $Settings["B"] + $SubCaptionColorFactor
|
||||
];
|
||||
}
|
||||
|
||||
$RestoreShadow = $this->pChartObject->Shadow;
|
||||
$this->pChartObject->Shadow = false;
|
||||
|
||||
if ($CaptionLayout == INDICATOR_CAPTION_DEFAULT) {
|
||||
$this->pChartObject->drawText($X1, $Y + $Height + $TextPadding, $Caption, $CaptionColor);
|
||||
} elseif ($CaptionLayout == INDICATOR_CAPTION_EXTENDED) {
|
||||
$TxtPos = $this->pChartObject->getTextBox(
|
||||
$X1,
|
||||
$Y + $Height + $TextPadding,
|
||||
$CaptionFontName,
|
||||
$CaptionFontSize,
|
||||
0,
|
||||
$Caption
|
||||
);
|
||||
$CaptionHeight = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
|
||||
|
||||
$this->pChartObject->drawText(
|
||||
$X1 + $XOffset,
|
||||
$Y + $Height - $YOffset + $TextPadding,
|
||||
$Caption,
|
||||
$CaptionColor
|
||||
);
|
||||
$this->pChartObject->drawText(
|
||||
$X1 + $XOffset,
|
||||
$Y + $Height - $YOffset + $CaptionHeight + $TextPadding * 2,
|
||||
$SubCaption,
|
||||
$SubCaptionColor
|
||||
);
|
||||
}
|
||||
|
||||
$this->pChartObject->Shadow = $RestoreShadow;
|
||||
|
||||
$X1 = $X2 + $SectionsMargin;
|
||||
}
|
||||
|
||||
$RestoreShadow = $this->pChartObject->Shadow;
|
||||
$this->pChartObject->Shadow = false;
|
||||
|
||||
foreach ($Values as $Key => $Value) {
|
||||
if ($Value >= $OverallMin && $Value <= $OverallMax) {
|
||||
foreach ($IndicatorSections as $Key => $Settings) {
|
||||
if ($Value >= $Settings["Start"] && $Value <= $Settings["End"]) {
|
||||
$X1 = $ValuesPos[$Value]; //$X + $Key*$SectionsMargin + ($Value - $OverallMin) * $XScale;
|
||||
|
||||
if ($ValueDisplay == INDICATOR_VALUE_BUBBLE) {
|
||||
$TxtPos = $this->pChartObject->getTextBox(
|
||||
$X1,
|
||||
$Y,
|
||||
$ValueFontName,
|
||||
$ValueFontSize,
|
||||
0,
|
||||
$Value . $Unit
|
||||
);
|
||||
$Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $TextPadding * 4) / 2);
|
||||
|
||||
$this->pChartObject->drawFilledCircle(
|
||||
$X1,
|
||||
$Y,
|
||||
$Radius + 4,
|
||||
[
|
||||
"R" => $Settings["R"] + 20,
|
||||
"G" => $Settings["G"] + 20,
|
||||
"B" => $Settings["B"] + 20
|
||||
]
|
||||
);
|
||||
$this->pChartObject->drawFilledCircle(
|
||||
$X1,
|
||||
$Y,
|
||||
$Radius,
|
||||
["R" => 255, "G" => 255, "B" => 255]
|
||||
);
|
||||
|
||||
$TextSettings = [
|
||||
"Align" => TEXT_ALIGN_MIDDLEMIDDLE,
|
||||
"FontName" => $ValueFontName,
|
||||
"FontSize" => $ValueFontSize
|
||||
];
|
||||
$this->pChartObject->drawText($X1 - 1, $Y - 1, $Value . $Unit, $TextSettings);
|
||||
} elseif ($ValueDisplay == INDICATOR_VALUE_LABEL) {
|
||||
$Caption = [
|
||||
[
|
||||
"Format" => [
|
||||
"R" => $Settings["R"],
|
||||
"G" => $Settings["G"],
|
||||
"B" => $Settings["B"],
|
||||
"Alpha" => 100
|
||||
],
|
||||
"Caption" => $Value . $Unit
|
||||
]
|
||||
];
|
||||
$this->pChartObject->drawLabelBox(
|
||||
floor($X1),
|
||||
floor($Y) + 2,
|
||||
"Value - " . $Settings["Caption"],
|
||||
$Caption
|
||||
);
|
||||
}
|
||||
}
|
||||
$X1 = $X2 + $SectionsMargin;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->pChartObject->Shadow = $RestoreShadow;
|
||||
}
|
||||
}
|
2320
vendor/szymach/c-pchart/src/Chart/Pie.php
vendored
Normal file
2320
vendor/szymach/c-pchart/src/Chart/Pie.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
1074
vendor/szymach/c-pchart/src/Chart/Radar.php
vendored
Normal file
1074
vendor/szymach/c-pchart/src/Chart/Radar.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
2255
vendor/szymach/c-pchart/src/Chart/Scatter.php
vendored
Normal file
2255
vendor/szymach/c-pchart/src/Chart/Scatter.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
180
vendor/szymach/c-pchart/src/Chart/Split.php
vendored
Normal file
180
vendor/szymach/c-pchart/src/Chart/Split.php
vendored
Normal file
|
@ -0,0 +1,180 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Chart;
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/**
|
||||
* Split - class to draw spline splitted charts
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Split
|
||||
{
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* Create the encoded string
|
||||
* @param Image $Object
|
||||
* @param Data $Values
|
||||
* @param array $Format
|
||||
*/
|
||||
public function drawSplitPath(Image $Object, Data $Values, array $Format = [])
|
||||
{
|
||||
$this->pChartObject = $Object;
|
||||
|
||||
$Spacing = isset($Format["Spacing"]) ? $Format["Spacing"] : 20;
|
||||
$TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 2;
|
||||
$TextPos = isset($Format["TextPos"]) ? $Format["TextPos"] : TEXT_POS_TOP;
|
||||
$Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : null;
|
||||
$Force = isset($Format["Force"]) ? $Format["Force"] : 70;
|
||||
$Segments = isset($Format["Segments"]) ? $Format["Segments"] : 15;
|
||||
$X1 = $Object->GraphAreaX1;
|
||||
$Y1 = $Object->GraphAreaY1;
|
||||
$X2 = $Object->GraphAreaX2;
|
||||
$Y2 = $Object->GraphAreaY2;
|
||||
|
||||
/* Data Processing */
|
||||
$Data = $Values->getData();
|
||||
$Palette = $Values->getPalette();
|
||||
|
||||
$LabelSerie = $Data["Abscissa"];
|
||||
$DataSerie = [];
|
||||
|
||||
foreach ($Data["Series"] as $SerieName => $Value) {
|
||||
if ($SerieName != $LabelSerie && empty($DataSerie)) {
|
||||
$DataSerie = $SerieName;
|
||||
}
|
||||
}
|
||||
|
||||
$DataSerieSum = array_sum($Data["Series"][$DataSerie]["Data"]);
|
||||
$DataSerieCount = count($Data["Series"][$DataSerie]["Data"]);
|
||||
|
||||
/* Scale Processing */
|
||||
if ($TextPos == TEXT_POS_RIGHT) {
|
||||
$YScale = (($Y2 - $Y1) - (($DataSerieCount + 1) * $Spacing)) / $DataSerieSum;
|
||||
} else {
|
||||
$YScale = (($Y2 - $Y1) - ($DataSerieCount * $Spacing)) / $DataSerieSum;
|
||||
}
|
||||
$LeftHeight = $DataSerieSum * $YScale;
|
||||
|
||||
/* Re-compute graph width depending of the text mode choosen */
|
||||
if ($TextPos == TEXT_POS_RIGHT) {
|
||||
$MaxWidth = 0;
|
||||
foreach ($Data["Series"][$LabelSerie]["Data"] as $Key => $Label) {
|
||||
$Boundardies = $Object->getTextBox(0, 0, $Object->FontName, $Object->FontSize, 0, $Label);
|
||||
if ($Boundardies[1]["X"] > $MaxWidth) {
|
||||
$MaxWidth = $Boundardies[1]["X"] + $TextPadding * 2;
|
||||
}
|
||||
}
|
||||
$X2 = $X2 - $MaxWidth;
|
||||
}
|
||||
|
||||
/* Drawing */
|
||||
$LeftY = ((($Y2 - $Y1) / 2) + $Y1) - ($LeftHeight / 2);
|
||||
$RightY = $Y1;
|
||||
|
||||
foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value) {
|
||||
if (isset($Data["Series"][$LabelSerie]["Data"][$Key])) {
|
||||
$Label = $Data["Series"][$LabelSerie]["Data"][$Key];
|
||||
} else {
|
||||
$Label = "-";
|
||||
}
|
||||
$LeftY1 = $LeftY;
|
||||
$LeftY2 = $LeftY + $Value * $YScale;
|
||||
|
||||
$RightY1 = $RightY + $Spacing;
|
||||
$RightY2 = $RightY + $Spacing + $Value * $YScale;
|
||||
|
||||
$Settings = [
|
||||
"R" => $Palette[$Key]["R"],
|
||||
"G" => $Palette[$Key]["G"],
|
||||
"B" => $Palette[$Key]["B"],
|
||||
"Alpha" => $Palette[$Key]["Alpha"],
|
||||
"NoDraw" => true,
|
||||
"Segments" => $Segments,
|
||||
"Surrounding" => $Surrounding
|
||||
];
|
||||
|
||||
|
||||
$Angle = $Object->getAngle($X2, $RightY1, $X1, $LeftY1);
|
||||
$VectorX1 = cos(deg2rad($Angle + 90)) * $Force + ($X2 - $X1) / 2 + $X1;
|
||||
$VectorY1 = sin(deg2rad($Angle + 90)) * $Force + ($RightY1 - $LeftY1) / 2 + $LeftY1;
|
||||
$VectorX2 = cos(deg2rad($Angle - 90)) * $Force + ($X2 - $X1) / 2 + $X1;
|
||||
$VectorY2 = sin(deg2rad($Angle - 90)) * $Force + ($RightY1 - $LeftY1) / 2 + $LeftY1;
|
||||
|
||||
$Points = $Object->drawBezier(
|
||||
$X1,
|
||||
$LeftY1,
|
||||
$X2,
|
||||
$RightY1,
|
||||
$VectorX1,
|
||||
$VectorY1,
|
||||
$VectorX2,
|
||||
$VectorY2,
|
||||
$Settings
|
||||
);
|
||||
|
||||
$PolyGon = [];
|
||||
foreach ($Points as $Key => $Pos) {
|
||||
$PolyGon[] = $Pos["X"];
|
||||
$PolyGon[] = $Pos["Y"];
|
||||
}
|
||||
|
||||
$Angle = $Object->getAngle($X2, $RightY2, $X1, $LeftY2);
|
||||
$VectorX1 = cos(deg2rad($Angle + 90)) * $Force + ($X2 - $X1) / 2 + $X1;
|
||||
$VectorY1 = sin(deg2rad($Angle + 90)) * $Force + ($RightY2 - $LeftY2) / 2 + $LeftY2;
|
||||
$VectorX2 = cos(deg2rad($Angle - 90)) * $Force + ($X2 - $X1) / 2 + $X1;
|
||||
$VectorY2 = sin(deg2rad($Angle - 90)) * $Force + ($RightY2 - $LeftY2) / 2 + $LeftY2;
|
||||
|
||||
$Points = $Object->drawBezier(
|
||||
$X1,
|
||||
$LeftY2,
|
||||
$X2,
|
||||
$RightY2,
|
||||
$VectorX1,
|
||||
$VectorY1,
|
||||
$VectorX2,
|
||||
$VectorY2,
|
||||
$Settings
|
||||
);
|
||||
$Points = array_reverse($Points);
|
||||
foreach ($Points as $Key => $Pos) {
|
||||
$PolyGon[] = $Pos["X"];
|
||||
$PolyGon[] = $Pos["Y"];
|
||||
}
|
||||
|
||||
$Object->drawPolygon($PolyGon, $Settings);
|
||||
|
||||
if ($TextPos == TEXT_POS_RIGHT) {
|
||||
$Object->drawText(
|
||||
$X2 + $TextPadding,
|
||||
($RightY2 - $RightY1) / 2 + $RightY1,
|
||||
$Label,
|
||||
["Align" => TEXT_ALIGN_MIDDLELEFT]
|
||||
);
|
||||
} else {
|
||||
$Object->drawText(
|
||||
$X2,
|
||||
$RightY1 - $TextPadding,
|
||||
$Label,
|
||||
["Align" => TEXT_ALIGN_BOTTOMRIGHT]
|
||||
);
|
||||
}
|
||||
$LeftY = $LeftY2;
|
||||
$RightY = $RightY2;
|
||||
}
|
||||
}
|
||||
}
|
1190
vendor/szymach/c-pchart/src/Chart/Spring.php
vendored
Normal file
1190
vendor/szymach/c-pchart/src/Chart/Spring.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
453
vendor/szymach/c-pchart/src/Chart/Stock.php
vendored
Normal file
453
vendor/szymach/c-pchart/src/Chart/Stock.php
vendored
Normal file
|
@ -0,0 +1,453 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Chart;
|
||||
|
||||
use CpChart\Data;
|
||||
use CpChart\Image;
|
||||
|
||||
/**
|
||||
* Stock - class to draw stock charts
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Stock
|
||||
{
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @var Data
|
||||
*/
|
||||
public $pDataObject;
|
||||
|
||||
/**
|
||||
* @param Image $pChartObject
|
||||
* @param Data $pDataObject
|
||||
*/
|
||||
public function __construct(Image $pChartObject, Data $pDataObject)
|
||||
{
|
||||
$this->pChartObject = $pChartObject;
|
||||
$this->pDataObject = $pDataObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a stock chart
|
||||
* @param array $Format
|
||||
* @return integer|null
|
||||
*/
|
||||
public function drawStockChart(array $Format = [])
|
||||
{
|
||||
$SerieOpen = isset($Format["SerieOpen"]) ? $Format["SerieOpen"] : "Open";
|
||||
$SerieClose = isset($Format["SerieClose"]) ? $Format["SerieClose"] : "Close";
|
||||
$SerieMin = isset($Format["SerieMin"]) ? $Format["SerieMin"] : "Min";
|
||||
$SerieMax = isset($Format["SerieMax"]) ? $Format["SerieMax"] : "Max";
|
||||
$SerieMedian = isset($Format["SerieMedian"]) ? $Format["SerieMedian"] : null;
|
||||
$LineWidth = isset($Format["LineWidth"]) ? $Format["LineWidth"] : 1;
|
||||
$LineR = isset($Format["LineR"]) ? $Format["LineR"] : 0;
|
||||
$LineG = isset($Format["LineG"]) ? $Format["LineG"] : 0;
|
||||
$LineB = isset($Format["LineB"]) ? $Format["LineB"] : 0;
|
||||
$LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
|
||||
$ExtremityWidth = isset($Format["ExtremityWidth"]) ? $Format["ExtremityWidth"] : 1;
|
||||
$ExtremityLength = isset($Format["ExtremityLength"]) ? $Format["ExtremityLength"] : 3;
|
||||
$ExtremityR = isset($Format["ExtremityR"]) ? $Format["ExtremityR"] : 0;
|
||||
$ExtremityG = isset($Format["ExtremityG"]) ? $Format["ExtremityG"] : 0;
|
||||
$ExtremityB = isset($Format["ExtremityB"]) ? $Format["ExtremityB"] : 0;
|
||||
$ExtremityAlpha = isset($Format["ExtremityAlpha"]) ? $Format["ExtremityAlpha"] : 100;
|
||||
$BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 8;
|
||||
$BoxUpR = isset($Format["BoxUpR"]) ? $Format["BoxUpR"] : 188;
|
||||
$BoxUpG = isset($Format["BoxUpG"]) ? $Format["BoxUpG"] : 224;
|
||||
$BoxUpB = isset($Format["BoxUpB"]) ? $Format["BoxUpB"] : 46;
|
||||
$BoxUpAlpha = isset($Format["BoxUpAlpha"]) ? $Format["BoxUpAlpha"] : 100;
|
||||
$BoxUpSurrounding = isset($Format["BoxUpSurrounding"]) ? $Format["BoxUpSurrounding"] : null;
|
||||
$BoxUpBorderR = isset($Format["BoxUpBorderR"]) ? $Format["BoxUpBorderR"] : $BoxUpR - 20;
|
||||
$BoxUpBorderG = isset($Format["BoxUpBorderG"]) ? $Format["BoxUpBorderG"] : $BoxUpG - 20;
|
||||
$BoxUpBorderB = isset($Format["BoxUpBorderB"]) ? $Format["BoxUpBorderB"] : $BoxUpB - 20;
|
||||
$BoxUpBorderAlpha = isset($Format["BoxUpBorderAlpha"]) ? $Format["BoxUpBorderAlpha"] : 100;
|
||||
$BoxDownR = isset($Format["BoxDownR"]) ? $Format["BoxDownR"] : 224;
|
||||
$BoxDownG = isset($Format["BoxDownG"]) ? $Format["BoxDownG"] : 100;
|
||||
$BoxDownB = isset($Format["BoxDownB"]) ? $Format["BoxDownB"] : 46;
|
||||
$BoxDownAlpha = isset($Format["BoxDownAlpha"]) ? $Format["BoxDownAlpha"] : 100;
|
||||
$BoxDownSurrounding = isset($Format["BoxDownSurrounding"]) ? $Format["BoxDownSurrounding"] : null;
|
||||
$BoxDownBorderR = isset($Format["BoxDownBorderR"]) ? $Format["BoxDownBorderR"] : $BoxDownR - 20;
|
||||
$BoxDownBorderG = isset($Format["BoxDownBorderG"]) ? $Format["BoxDownBorderG"] : $BoxDownG - 20;
|
||||
$BoxDownBorderB = isset($Format["BoxDownBorderB"]) ? $Format["BoxDownBorderB"] : $BoxDownB - 20;
|
||||
$BoxDownBorderAlpha = isset($Format["BoxDownBorderAlpha"]) ? $Format["BoxDownBorderAlpha"] : 100;
|
||||
$ShadowOnBoxesOnly = isset($Format["ShadowOnBoxesOnly"]) ? $Format["ShadowOnBoxesOnly"] : true;
|
||||
$MedianR = isset($Format["MedianR"]) ? $Format["MedianR"] : 255;
|
||||
$MedianG = isset($Format["MedianG"]) ? $Format["MedianG"] : 0;
|
||||
$MedianB = isset($Format["MedianB"]) ? $Format["MedianB"] : 0;
|
||||
$MedianAlpha = isset($Format["MedianAlpha"]) ? $Format["MedianAlpha"] : 100;
|
||||
$RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : false;
|
||||
$ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : "Stock Chart";
|
||||
|
||||
/* Data Processing */
|
||||
if ($BoxUpSurrounding != null) {
|
||||
$BoxUpBorderR = $BoxUpR + $BoxUpSurrounding;
|
||||
$BoxUpBorderG = $BoxUpG + $BoxUpSurrounding;
|
||||
$BoxUpBorderB = $BoxUpB + $BoxUpSurrounding;
|
||||
}
|
||||
if ($BoxDownSurrounding != null) {
|
||||
$BoxDownBorderR = $BoxDownR + $BoxDownSurrounding;
|
||||
$BoxDownBorderG = $BoxDownG + $BoxDownSurrounding;
|
||||
$BoxDownBorderB = $BoxDownB + $BoxDownSurrounding;
|
||||
}
|
||||
|
||||
if ($LineWidth != 1) {
|
||||
$LineOffset = $LineWidth / 2;
|
||||
}
|
||||
$BoxOffset = $BoxWidth / 2;
|
||||
|
||||
$Data = $this->pChartObject->DataSet->getData();
|
||||
list($XMargin, $XDivs) = $this->pChartObject->scaleGetXSettings();
|
||||
|
||||
if (!isset($Data["Series"][$SerieOpen])
|
||||
|| !isset($Data["Series"][$SerieClose])
|
||||
|| !isset($Data["Series"][$SerieMin])
|
||||
|| !isset($Data["Series"][$SerieMax])
|
||||
) {
|
||||
return STOCK_MISSING_SERIE;
|
||||
}
|
||||
$Plots = [];
|
||||
foreach ($Data["Series"][$SerieOpen]["Data"] as $Key => $Value) {
|
||||
$Point = [];
|
||||
if (isset($Data["Series"][$SerieClose]["Data"][$Key])
|
||||
|| isset($Data["Series"][$SerieMin]["Data"][$Key])
|
||||
|| isset($Data["Series"][$SerieMax]["Data"][$Key])
|
||||
) {
|
||||
$Point = [
|
||||
$Value,
|
||||
$Data["Series"][$SerieClose]["Data"][$Key],
|
||||
$Data["Series"][$SerieMin]["Data"][$Key],
|
||||
$Data["Series"][$SerieMax]["Data"][$Key]
|
||||
];
|
||||
}
|
||||
if ($SerieMedian != null && isset($Data["Series"][$SerieMedian]["Data"][$Key])) {
|
||||
$Point[] = $Data["Series"][$SerieMedian]["Data"][$Key];
|
||||
}
|
||||
$Plots[] = $Point;
|
||||
}
|
||||
|
||||
$AxisID = $Data["Series"][$SerieOpen]["Axis"];
|
||||
$Format = $Data["Axis"][$AxisID]["Format"];
|
||||
|
||||
$YZero = $this->pChartObject->scaleComputeY(0, ["AxisID" => $AxisID]);
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2) / $XDivs;
|
||||
|
||||
$X = $this->pChartObject->GraphAreaX1 + $XMargin;
|
||||
$Y = $this->pChartObject->GraphAreaY1 + $XMargin;
|
||||
|
||||
$LineSettings = ["R" => $LineR, "G" => $LineG, "B" => $LineB, "Alpha" => $LineAlpha];
|
||||
$ExtremitySettings = [
|
||||
"R" => $ExtremityR,
|
||||
"G" => $ExtremityG,
|
||||
"B" => $ExtremityB,
|
||||
"Alpha" => $ExtremityAlpha
|
||||
];
|
||||
$BoxUpSettings = [
|
||||
"R" => $BoxUpR,
|
||||
"G" => $BoxUpG,
|
||||
"B" => $BoxUpB,
|
||||
"Alpha" => $BoxUpAlpha,
|
||||
"BorderR" => $BoxUpBorderR,
|
||||
"BorderG" => $BoxUpBorderG,
|
||||
"BorderB" => $BoxUpBorderB,
|
||||
"BorderAlpha" => $BoxUpBorderAlpha
|
||||
];
|
||||
$BoxDownSettings = [
|
||||
"R" => $BoxDownR,
|
||||
"G" => $BoxDownG,
|
||||
"B" => $BoxDownB,
|
||||
"Alpha" => $BoxDownAlpha,
|
||||
"BorderR" => $BoxDownBorderR,
|
||||
"BorderG" => $BoxDownBorderG,
|
||||
"BorderB" => $BoxDownBorderB,
|
||||
"BorderAlpha" => $BoxDownBorderAlpha
|
||||
];
|
||||
$MedianSettings = ["R" => $MedianR, "G" => $MedianG, "B" => $MedianB, "Alpha" => $MedianAlpha];
|
||||
|
||||
foreach ($Plots as $Key => $Points) {
|
||||
$PosArray = $this->pChartObject->scaleComputeY($Points, ["AxisID" => $AxisID]);
|
||||
|
||||
$Values = "Open :" . $Data["Series"][$SerieOpen]["Data"][$Key]
|
||||
. "<BR>Close : " . $Data["Series"][$SerieClose]["Data"][$Key]
|
||||
. "<BR>Min : " . $Data["Series"][$SerieMin]["Data"][$Key]
|
||||
. "<BR>Max : " . $Data["Series"][$SerieMax]["Data"][$Key] . "<BR>";
|
||||
if ($SerieMedian != null) {
|
||||
$Values = $Values . "Median : " . $Data["Series"][$SerieMedian]["Data"][$Key] . "<BR>";
|
||||
}
|
||||
if ($PosArray[0] > $PosArray[1]) {
|
||||
$ImageMapColor = $this->pChartObject->toHTMLColor($BoxUpR, $BoxUpG, $BoxUpB);
|
||||
} else {
|
||||
$ImageMapColor = $this->pChartObject->toHTMLColor($BoxDownR, $BoxDownG, $BoxDownB);
|
||||
}
|
||||
|
||||
if ($Data["Orientation"] == SCALE_POS_LEFTRIGHT) {
|
||||
if ($YZero > $this->pChartObject->GraphAreaY2 - 1) {
|
||||
$YZero = $this->pChartObject->GraphAreaY2 - 1;
|
||||
}
|
||||
if ($YZero < $this->pChartObject->GraphAreaY1 + 1) {
|
||||
$YZero = $this->pChartObject->GraphAreaY1 + 1;
|
||||
}
|
||||
|
||||
if ($XDivs == 0) {
|
||||
$XStep = 0;
|
||||
} else {
|
||||
$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
|
||||
if ($ShadowOnBoxesOnly) {
|
||||
$RestoreShadow = $this->pChartObject->Shadow;
|
||||
$this->pChartObject->Shadow = false;
|
||||
}
|
||||
|
||||
if ($LineWidth == 1) {
|
||||
$this->pChartObject->drawLine($X, $PosArray[2], $X, $PosArray[3], $LineSettings);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $LineOffset,
|
||||
$PosArray[2],
|
||||
$X + $LineOffset,
|
||||
$PosArray[3],
|
||||
$LineSettings
|
||||
);
|
||||
}
|
||||
|
||||
if ($ExtremityWidth == 1) {
|
||||
$this->pChartObject->drawLine(
|
||||
$X - $ExtremityLength,
|
||||
$PosArray[2],
|
||||
$X + $ExtremityLength,
|
||||
$PosArray[2],
|
||||
$ExtremitySettings
|
||||
);
|
||||
$this->pChartObject->drawLine(
|
||||
$X - $ExtremityLength,
|
||||
$PosArray[3],
|
||||
$X + $ExtremityLength,
|
||||
$PosArray[3],
|
||||
$ExtremitySettings
|
||||
);
|
||||
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
sprintf(
|
||||
"%s,%s,%s,%s",
|
||||
floor($X - $ExtremityLength),
|
||||
floor($PosArray[2]),
|
||||
floor($X + $ExtremityLength),
|
||||
floor($PosArray[3])
|
||||
),
|
||||
$ImageMapColor,
|
||||
$ImageMapTitle,
|
||||
$Values
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $ExtremityLength,
|
||||
$PosArray[2],
|
||||
$X + $ExtremityLength,
|
||||
$PosArray[2] - $ExtremityWidth,
|
||||
$ExtremitySettings
|
||||
);
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $ExtremityLength,
|
||||
$PosArray[3],
|
||||
$X + $ExtremityLength,
|
||||
$PosArray[3] + $ExtremityWidth,
|
||||
$ExtremitySettings
|
||||
);
|
||||
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
sprintf(
|
||||
"%s,%s,%s,%s",
|
||||
floor($X - $ExtremityLength),
|
||||
floor($PosArray[2] - $ExtremityWidth),
|
||||
floor($X + $ExtremityLength),
|
||||
floor($PosArray[3] + $ExtremityWidth)
|
||||
),
|
||||
$ImageMapColor,
|
||||
$ImageMapTitle,
|
||||
$Values
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($ShadowOnBoxesOnly) {
|
||||
$this->pChartObject->Shadow = $RestoreShadow;
|
||||
}
|
||||
|
||||
if ($PosArray[0] > $PosArray[1]) {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $BoxOffset,
|
||||
$PosArray[0],
|
||||
$X + $BoxOffset,
|
||||
$PosArray[1],
|
||||
$BoxUpSettings
|
||||
);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$X - $BoxOffset,
|
||||
$PosArray[0],
|
||||
$X + $BoxOffset,
|
||||
$PosArray[1],
|
||||
$BoxDownSettings
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($PosArray[4])) {
|
||||
$this->pChartObject->drawLine(
|
||||
$X - $ExtremityLength,
|
||||
$PosArray[4],
|
||||
$X + $ExtremityLength,
|
||||
$PosArray[4],
|
||||
$MedianSettings
|
||||
);
|
||||
}
|
||||
$X = $X + $XStep;
|
||||
} elseif ($Data["Orientation"] == SCALE_POS_TOPBOTTOM) {
|
||||
if ($YZero > $this->pChartObject->GraphAreaX2 - 1) {
|
||||
$YZero = $this->pChartObject->GraphAreaX2 - 1;
|
||||
}
|
||||
if ($YZero < $this->pChartObject->GraphAreaX1 + 1) {
|
||||
$YZero = $this->pChartObject->GraphAreaX1 + 1;
|
||||
}
|
||||
|
||||
if ($XDivs == 0) {
|
||||
$XStep = 0;
|
||||
} else {
|
||||
$XStep = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $XMargin * 2)
|
||||
/ $XDivs
|
||||
;
|
||||
}
|
||||
|
||||
if ($LineWidth == 1) {
|
||||
$this->pChartObject->drawLine($PosArray[2], $Y, $PosArray[3], $Y, $LineSettings);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$PosArray[2],
|
||||
$Y - $LineOffset,
|
||||
$PosArray[3],
|
||||
$Y + $LineOffset,
|
||||
$LineSettings
|
||||
);
|
||||
}
|
||||
if ($ShadowOnBoxesOnly) {
|
||||
$RestoreShadow = $this->pChartObject->Shadow;
|
||||
$this->pChartObject->Shadow = false;
|
||||
}
|
||||
|
||||
if ($ExtremityWidth == 1) {
|
||||
$this->pChartObject->drawLine(
|
||||
$PosArray[2],
|
||||
$Y - $ExtremityLength,
|
||||
$PosArray[2],
|
||||
$Y + $ExtremityLength,
|
||||
$ExtremitySettings
|
||||
);
|
||||
$this->pChartObject->drawLine(
|
||||
$PosArray[3],
|
||||
$Y - $ExtremityLength,
|
||||
$PosArray[3],
|
||||
$Y + $ExtremityLength,
|
||||
$ExtremitySettings
|
||||
);
|
||||
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
sprintf(
|
||||
"%s,%s,%s,%s",
|
||||
floor($PosArray[2]),
|
||||
floor($Y - $ExtremityLength),
|
||||
floor($PosArray[3]),
|
||||
floor($Y + $ExtremityLength)
|
||||
),
|
||||
$ImageMapColor,
|
||||
$ImageMapTitle,
|
||||
$Values
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$PosArray[2],
|
||||
$Y - $ExtremityLength,
|
||||
$PosArray[2] - $ExtremityWidth,
|
||||
$Y + $ExtremityLength,
|
||||
$ExtremitySettings
|
||||
);
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$PosArray[3],
|
||||
$Y - $ExtremityLength,
|
||||
$PosArray[3] + $ExtremityWidth,
|
||||
$Y + $ExtremityLength,
|
||||
$ExtremitySettings
|
||||
);
|
||||
|
||||
if ($RecordImageMap) {
|
||||
$this->pChartObject->addToImageMap(
|
||||
"RECT",
|
||||
sprintf(
|
||||
"%s,%s,%s,%s",
|
||||
floor($PosArray[2] - $ExtremityWidth),
|
||||
floor($Y - $ExtremityLength),
|
||||
floor($PosArray[3] + $ExtremityWidth),
|
||||
floor($Y + $ExtremityLength)
|
||||
),
|
||||
$ImageMapColor,
|
||||
$ImageMapTitle,
|
||||
$Values
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($ShadowOnBoxesOnly) {
|
||||
$this->pChartObject->Shadow = $RestoreShadow;
|
||||
}
|
||||
|
||||
if ($PosArray[0] < $PosArray[1]) {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$PosArray[0],
|
||||
$Y - $BoxOffset,
|
||||
$PosArray[1],
|
||||
$Y + $BoxOffset,
|
||||
$BoxUpSettings
|
||||
);
|
||||
} else {
|
||||
$this->pChartObject->drawFilledRectangle(
|
||||
$PosArray[0],
|
||||
$Y - $BoxOffset,
|
||||
$PosArray[1],
|
||||
$Y + $BoxOffset,
|
||||
$BoxDownSettings
|
||||
);
|
||||
}
|
||||
if (isset($PosArray[4])) {
|
||||
$this->pChartObject->drawLine(
|
||||
$PosArray[4],
|
||||
$Y - $ExtremityLength,
|
||||
$PosArray[4],
|
||||
$Y + $ExtremityLength,
|
||||
$MedianSettings
|
||||
);
|
||||
}
|
||||
$Y = $Y + $XStep;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
414
vendor/szymach/c-pchart/src/Chart/Surface.php
vendored
Normal file
414
vendor/szymach/c-pchart/src/Chart/Surface.php
vendored
Normal file
|
@ -0,0 +1,414 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart\Chart;
|
||||
|
||||
use CpChart\Image;
|
||||
|
||||
/**
|
||||
* Surface - class to draw surface charts
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Surface
|
||||
{
|
||||
/**
|
||||
* @var Image
|
||||
*/
|
||||
public $pChartObject;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $GridSizeX;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $GridSizeY;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public $Points = [];
|
||||
|
||||
/**
|
||||
* @param Image $pChartObject
|
||||
*/
|
||||
public function __construct(Image $pChartObject)
|
||||
{
|
||||
$this->pChartObject = $pChartObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the grid size and initialise the 2D matrix
|
||||
* @param int $XSize
|
||||
* @param int $YSize
|
||||
*/
|
||||
public function setGrid($XSize = 10, $YSize = 10)
|
||||
{
|
||||
for ($X = 0; $X <= $XSize; $X++) {
|
||||
for ($Y = 0; $Y <= $YSize; $Y++) {
|
||||
$this->Points[$X][$Y] = UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
$this->GridSizeX = $XSize;
|
||||
$this->GridSizeY = $YSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a point on the grid
|
||||
* @param int $X
|
||||
* @param int $Y
|
||||
* @param int|float $Value
|
||||
* @param boolean $Force
|
||||
* @return null
|
||||
*/
|
||||
public function addPoint($X, $Y, $Value, $Force = true)
|
||||
{
|
||||
if ($X < 0 || $X > $this->GridSizeX) {
|
||||
return 0;
|
||||
}
|
||||
if ($Y < 0 || $Y > $this->GridSizeY) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($this->Points[$X][$Y] == UNKNOWN || $Force) {
|
||||
$this->Points[$X][$Y] = $Value;
|
||||
} elseif ($this->Points[$X][$Y] == UNKNOWN) {
|
||||
$this->Points[$X][$Y] = $Value;
|
||||
} else {
|
||||
$this->Points[$X][$Y] = ($this->Points[$X][$Y] + $Value) / 2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the X labels
|
||||
* @param array $Format
|
||||
* @return null|int
|
||||
*/
|
||||
public function writeXLabels(array $Format = [])
|
||||
{
|
||||
$R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
|
||||
$Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_TOP;
|
||||
$Labels = isset($Format["Labels"]) ? $Format["Labels"] : null;
|
||||
$CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
|
||||
|
||||
if ($Labels != null && !is_array($Labels)) {
|
||||
$Label = $Labels;
|
||||
$Labels = [$Label];
|
||||
}
|
||||
|
||||
$X0 = $this->pChartObject->GraphAreaX1;
|
||||
$XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX + 1);
|
||||
|
||||
$Settings = ["Angle" => $Angle, "R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha];
|
||||
if ($Position == LABEL_POSITION_TOP) {
|
||||
$YPos = $this->pChartObject->GraphAreaY1 - $Padding;
|
||||
if ($Angle == 0) {
|
||||
$Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE;
|
||||
}
|
||||
if ($Angle != 0) {
|
||||
$Settings["Align"] = TEXT_ALIGN_MIDDLELEFT;
|
||||
}
|
||||
} elseif ($Position == LABEL_POSITION_BOTTOM) {
|
||||
$YPos = $this->pChartObject->GraphAreaY2 + $Padding;
|
||||
if ($Angle == 0) {
|
||||
$Settings["Align"] = TEXT_ALIGN_TOPMIDDLE;
|
||||
}
|
||||
if ($Angle != 0) {
|
||||
$Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
for ($X = 0; $X <= $this->GridSizeX; $X++) {
|
||||
$XPos = floor($X0 + $X * $XSize + $XSize / 2);
|
||||
|
||||
if ($Labels == null || !isset($Labels[$X])) {
|
||||
$Value = $X + $CountOffset;
|
||||
} else {
|
||||
$Value = $Labels[$X];
|
||||
}
|
||||
$this->pChartObject->drawText($XPos, $YPos, $Value, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the Y labels
|
||||
* @param array $Format
|
||||
* @return type
|
||||
*/
|
||||
public function writeYLabels(array $Format = [])
|
||||
{
|
||||
$R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
|
||||
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
||||
$Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
|
||||
$Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_LEFT;
|
||||
$Labels = isset($Format["Labels"]) ? $Format["Labels"] : null;
|
||||
$CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
|
||||
|
||||
if ($Labels != null && !is_array($Labels)) {
|
||||
$Label = $Labels;
|
||||
$Labels = [$Label];
|
||||
}
|
||||
|
||||
$Y0 = $this->pChartObject->GraphAreaY1;
|
||||
$YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY + 1);
|
||||
|
||||
$Settings = ["Angle" => $Angle, "R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha];
|
||||
if ($Position == LABEL_POSITION_LEFT) {
|
||||
$XPos = $this->pChartObject->GraphAreaX1 - $Padding;
|
||||
$Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT;
|
||||
} elseif ($Position == LABEL_POSITION_RIGHT) {
|
||||
$XPos = $this->pChartObject->GraphAreaX2 + $Padding;
|
||||
$Settings["Align"] = TEXT_ALIGN_MIDDLELEFT;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
for ($Y = 0; $Y <= $this->GridSizeY; $Y++) {
|
||||
$YPos = floor($Y0 + $Y * $YSize + $YSize / 2);
|
||||
|
||||
if ($Labels == null || !isset($Labels[$Y])) {
|
||||
$Value = $Y + $CountOffset;
|
||||
} else {
|
||||
$Value = $Labels[$Y];
|
||||
}
|
||||
$this->pChartObject->drawText($XPos, $YPos, $Value, $Settings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the area arround the specified Threshold
|
||||
* @param int|float $Threshold
|
||||
* @param array $Format
|
||||
*/
|
||||
public function drawContour($Threshold, array $Format = [])
|
||||
{
|
||||
$R = isset($Format["R"]) ? $Format["R"] : 0;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : 0;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : 0;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
|
||||
$Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 3;
|
||||
$Padding = isset($Format["Padding"]) ? $Format["Padding"] : 0;
|
||||
|
||||
$X0 = $this->pChartObject->GraphAreaX1;
|
||||
$Y0 = $this->pChartObject->GraphAreaY1;
|
||||
$XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX + 1);
|
||||
$YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY + 1);
|
||||
|
||||
$Color = ["R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha, "Ticks" => $Ticks];
|
||||
|
||||
for ($X = 0; $X <= $this->GridSizeX; $X++) {
|
||||
for ($Y = 0; $Y <= $this->GridSizeY; $Y++) {
|
||||
$Value = $this->Points[$X][$Y];
|
||||
|
||||
if ($Value != UNKNOWN && $Value != IGNORED && $Value >= $Threshold) {
|
||||
$X1 = floor($X0 + $X * $XSize) + $Padding;
|
||||
$Y1 = floor($Y0 + $Y * $YSize) + $Padding;
|
||||
$X2 = floor($X0 + $X * $XSize + $XSize);
|
||||
$Y2 = floor($Y0 + $Y * $YSize + $YSize);
|
||||
|
||||
if ($X > 0 && $this->Points[$X - 1][$Y] != UNKNOWN
|
||||
&& $this->Points[$X - 1][$Y] != IGNORED
|
||||
&& $this->Points[$X - 1][$Y] < $Threshold
|
||||
) {
|
||||
$this->pChartObject->drawLine($X1, $Y1, $X1, $Y2, $Color);
|
||||
}
|
||||
if ($Y > 0 && $this->Points[$X][$Y - 1] != UNKNOWN
|
||||
&& $this->Points[$X][$Y - 1] != IGNORED
|
||||
&& $this->Points[$X][$Y - 1] < $Threshold
|
||||
) {
|
||||
$this->pChartObject->drawLine($X1, $Y1, $X2, $Y1, $Color);
|
||||
}
|
||||
if ($X < $this->GridSizeX
|
||||
&& $this->Points[$X + 1][$Y] != UNKNOWN
|
||||
&& $this->Points[$X + 1][$Y] != IGNORED
|
||||
&& $this->Points[$X + 1][$Y] < $Threshold
|
||||
) {
|
||||
$this->pChartObject->drawLine($X2, $Y1, $X2, $Y2, $Color);
|
||||
}
|
||||
if ($Y < $this->GridSizeY
|
||||
&& $this->Points[$X][$Y + 1] != UNKNOWN
|
||||
&& $this->Points[$X][$Y + 1] != IGNORED
|
||||
&& $this->Points[$X][$Y + 1] < $Threshold
|
||||
) {
|
||||
$this->pChartObject->drawLine($X1, $Y2, $X2, $Y2, $Color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the surface chart
|
||||
* @param array $Format
|
||||
*/
|
||||
public function drawSurface(array $Format = [])
|
||||
{
|
||||
$Palette = isset($Format["Palette"]) ? $Format["Palette"] : null;
|
||||
$ShadeR1 = isset($Format["ShadeR1"]) ? $Format["ShadeR1"] : 77;
|
||||
$ShadeG1 = isset($Format["ShadeG1"]) ? $Format["ShadeG1"] : 205;
|
||||
$ShadeB1 = isset($Format["ShadeB1"]) ? $Format["ShadeB1"] : 21;
|
||||
$ShadeA1 = isset($Format["ShadeA1"]) ? $Format["ShadeA1"] : 40;
|
||||
$ShadeR2 = isset($Format["ShadeR2"]) ? $Format["ShadeR2"] : 227;
|
||||
$ShadeG2 = isset($Format["ShadeG2"]) ? $Format["ShadeG2"] : 135;
|
||||
$ShadeB2 = isset($Format["ShadeB2"]) ? $Format["ShadeB2"] : 61;
|
||||
$ShadeA2 = isset($Format["ShadeA2"]) ? $Format["ShadeA2"] : 100;
|
||||
$Border = isset($Format["Border"]) ? $Format["Border"] : false;
|
||||
$BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
|
||||
$BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
|
||||
$BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
|
||||
$Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : -1;
|
||||
$Padding = isset($Format["Padding"]) ? $Format["Padding"] : 1;
|
||||
|
||||
$X0 = $this->pChartObject->GraphAreaX1;
|
||||
$Y0 = $this->pChartObject->GraphAreaY1;
|
||||
$XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX + 1);
|
||||
$YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY + 1);
|
||||
|
||||
for ($X = 0; $X <= $this->GridSizeX; $X++) {
|
||||
for ($Y = 0; $Y <= $this->GridSizeY; $Y++) {
|
||||
$Value = $this->Points[$X][$Y];
|
||||
|
||||
if ($Value != UNKNOWN && $Value != IGNORED) {
|
||||
$X1 = floor($X0 + $X * $XSize) + $Padding;
|
||||
$Y1 = floor($Y0 + $Y * $YSize) + $Padding;
|
||||
$X2 = floor($X0 + $X * $XSize + $XSize);
|
||||
$Y2 = floor($Y0 + $Y * $YSize + $YSize);
|
||||
|
||||
if ($Palette != null) {
|
||||
if (isset($Palette[$Value]) && isset($Palette[$Value]["R"])) {
|
||||
$R = $Palette[$Value]["R"];
|
||||
} else {
|
||||
$R = 0;
|
||||
}
|
||||
|
||||
if (isset($Palette[$Value]) && isset($Palette[$Value]["G"])) {
|
||||
$G = $Palette[$Value]["G"];
|
||||
} else {
|
||||
$G = 0;
|
||||
}
|
||||
|
||||
if (isset($Palette[$Value]) && isset($Palette[$Value]["B"])) {
|
||||
$B = $Palette[$Value]["B"];
|
||||
} else {
|
||||
$B = 0;
|
||||
}
|
||||
if (isset($Palette[$Value]) && isset($Palette[$Value]["Alpha"])) {
|
||||
$Alpha = $Palette[$Value]["Alpha"];
|
||||
} else {
|
||||
$Alpha = 1000;
|
||||
}
|
||||
} else {
|
||||
$R = (($ShadeR2 - $ShadeR1) / 100) * $Value + $ShadeR1;
|
||||
$G = (($ShadeG2 - $ShadeG1) / 100) * $Value + $ShadeG1;
|
||||
$B = (($ShadeB2 - $ShadeB1) / 100) * $Value + $ShadeB1;
|
||||
$Alpha = (($ShadeA2 - $ShadeA1) / 100) * $Value + $ShadeA1;
|
||||
}
|
||||
|
||||
$Settings = ["R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha];
|
||||
if ($Border) {
|
||||
$Settings["BorderR"] = $BorderR;
|
||||
$Settings["BorderG"] = $BorderG;
|
||||
$Settings["BorderB"] = $BorderB;
|
||||
}
|
||||
if ($Surrounding != -1) {
|
||||
$Settings["BorderR"] = $R + $Surrounding;
|
||||
$Settings["BorderG"] = $G + $Surrounding;
|
||||
$Settings["BorderB"] = $B + $Surrounding;
|
||||
}
|
||||
|
||||
$this->pChartObject->drawFilledRectangle($X1, $Y1, $X2 - 1, $Y2 - 1, $Settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the missing points
|
||||
*/
|
||||
public function computeMissing()
|
||||
{
|
||||
$Missing = [];
|
||||
for ($X = 0; $X <= $this->GridSizeX; $X++) {
|
||||
for ($Y = 0; $Y <= $this->GridSizeY; $Y++) {
|
||||
if ($this->Points[$X][$Y] == UNKNOWN) {
|
||||
$Missing[] = $X . "," . $Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
shuffle($Missing);
|
||||
|
||||
foreach ($Missing as $Pos) {
|
||||
$Pos = preg_split("/,/", $Pos);
|
||||
$X = $Pos[0];
|
||||
$Y = $Pos[1];
|
||||
|
||||
if ($this->Points[$X][$Y] == UNKNOWN) {
|
||||
$NearestNeighbor = $this->getNearestNeighbor($X, $Y);
|
||||
|
||||
$Value = 0;
|
||||
$Points = 0;
|
||||
for ($Xi = $X - $NearestNeighbor; $Xi <= $X + $NearestNeighbor; $Xi++) {
|
||||
for ($Yi = $Y - $NearestNeighbor; $Yi <= $Y + $NearestNeighbor; $Yi++) {
|
||||
if ($Xi >= 0
|
||||
&& $Yi >= 0
|
||||
&& $Xi <= $this->GridSizeX
|
||||
&& $Yi <= $this->GridSizeY
|
||||
&& $this->Points[$Xi][$Yi] != UNKNOWN
|
||||
&& $this->Points[$Xi][$Yi] != IGNORED
|
||||
) {
|
||||
$Value = $Value + $this->Points[$Xi][$Yi];
|
||||
$Points++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($Points != 0) {
|
||||
$this->Points[$X][$Y] = $Value / $Points;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the nearest Neighbor distance of a point
|
||||
* @param int $Xp
|
||||
* @param int $Yp
|
||||
* @return int
|
||||
*/
|
||||
public function getNearestNeighbor($Xp, $Yp)
|
||||
{
|
||||
$Nearest = UNKNOWN;
|
||||
for ($X = 0; $X <= $this->GridSizeX; $X++) {
|
||||
for ($Y = 0; $Y <= $this->GridSizeY; $Y++) {
|
||||
if ($this->Points[$X][$Y] != UNKNOWN && $this->Points[$X][$Y] != IGNORED) {
|
||||
$DistanceX = max($Xp, $X) - min($Xp, $X);
|
||||
$DistanceY = max($Yp, $Y) - min($Yp, $Y);
|
||||
$Distance = max($DistanceX, $DistanceY);
|
||||
if ($Distance < $Nearest || $Nearest == UNKNOWN) {
|
||||
$Nearest = $Distance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $Nearest;
|
||||
}
|
||||
}
|
1318
vendor/szymach/c-pchart/src/Data.php
vendored
Normal file
1318
vendor/szymach/c-pchart/src/Data.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
10363
vendor/szymach/c-pchart/src/Draw.php
vendored
Normal file
10363
vendor/szymach/c-pchart/src/Draw.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
748
vendor/szymach/c-pchart/src/Image.php
vendored
Normal file
748
vendor/szymach/c-pchart/src/Image.php
vendored
Normal file
|
@ -0,0 +1,748 @@
|
|||
<?php
|
||||
|
||||
namespace CpChart;
|
||||
|
||||
/**
|
||||
* Image - The actual class to do most of the drawing. Extends the Draw class
|
||||
* with the bulk of drawing methods.
|
||||
*
|
||||
* Version : 2.1.4
|
||||
* Made by : Jean-Damien POGOLOTTI
|
||||
* Last Update : 19/01/2014
|
||||
*
|
||||
* This file can be distributed under the license you can find at :
|
||||
*
|
||||
* http://www.pchart.net/license
|
||||
*
|
||||
* You can find the whole class documentation on the pChart web site.
|
||||
*/
|
||||
class Image extends Draw
|
||||
{
|
||||
/**
|
||||
* @param int $XSize
|
||||
* @param int $YSize
|
||||
* @param Data $DataSet
|
||||
* @param boolean $TransparentBackground
|
||||
*/
|
||||
public function __construct(
|
||||
$XSize,
|
||||
$YSize,
|
||||
Data $DataSet = null,
|
||||
$TransparentBackground = false
|
||||
) {
|
||||
parent::__construct();
|
||||
|
||||
$this->TransparentBackground = $TransparentBackground;
|
||||
|
||||
$this->DataSet = null !== $DataSet ? $DataSet : new Data();
|
||||
$this->XSize = $XSize;
|
||||
$this->YSize = $YSize;
|
||||
$this->Picture = imagecreatetruecolor($XSize, $YSize);
|
||||
|
||||
if ($this->TransparentBackground) {
|
||||
imagealphablending($this->Picture, false);
|
||||
imagefilledrectangle(
|
||||
$this->Picture,
|
||||
0,
|
||||
0,
|
||||
$XSize,
|
||||
$YSize,
|
||||
imagecolorallocatealpha($this->Picture, 255, 255, 255, 127)
|
||||
);
|
||||
imagealphablending($this->Picture, true);
|
||||
imagesavealpha($this->Picture, true);
|
||||
} else {
|
||||
$C_White = $this->AllocateColor($this->Picture, 255, 255, 255);
|
||||
imagefilledrectangle($this->Picture, 0, 0, $XSize, $YSize, $C_White);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable / Disable and set shadow properties
|
||||
* @param boolean $Enabled
|
||||
* @param array $Format
|
||||
*/
|
||||
public function setShadow($Enabled = true, array $Format = [])
|
||||
{
|
||||
$X = isset($Format["X"]) ? $Format["X"] : 2;
|
||||
$Y = isset($Format["Y"]) ? $Format["Y"] : 2;
|
||||
$R = isset($Format["R"]) ? $Format["R"] : 0;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : 0;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : 0;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10;
|
||||
|
||||
$this->Shadow = $Enabled;
|
||||
$this->ShadowX = $X;
|
||||
$this->ShadowY = $Y;
|
||||
$this->ShadowR = $R;
|
||||
$this->ShadowG = $G;
|
||||
$this->ShadowB = $B;
|
||||
$this->Shadowa = $Alpha;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the graph area position
|
||||
* @param int $X1
|
||||
* @param int $Y1
|
||||
* @param int $X2
|
||||
* @param int $Y2
|
||||
* @return int|null
|
||||
*/
|
||||
public function setGraphArea($X1, $Y1, $X2, $Y2)
|
||||
{
|
||||
if ($X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
$this->GraphAreaX1 = $X1;
|
||||
$this->DataSet->Data["GraphArea"]["X1"] = $X1;
|
||||
$this->GraphAreaY1 = $Y1;
|
||||
$this->DataSet->Data["GraphArea"]["Y1"] = $Y1;
|
||||
$this->GraphAreaX2 = $X2;
|
||||
$this->DataSet->Data["GraphArea"]["X2"] = $X2;
|
||||
$this->GraphAreaY2 = $Y2;
|
||||
$this->DataSet->Data["GraphArea"]["Y2"] = $Y2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the width of the picture
|
||||
* @return int
|
||||
*/
|
||||
public function getWidth()
|
||||
{
|
||||
return $this->XSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the heigth of the picture
|
||||
* @return int
|
||||
*/
|
||||
public function getHeight()
|
||||
{
|
||||
return $this->YSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the picture to a file
|
||||
* @param string $FileName
|
||||
*/
|
||||
public function render($FileName)
|
||||
{
|
||||
if ($this->TransparentBackground) {
|
||||
imagealphablending($this->Picture, false);
|
||||
imagesavealpha($this->Picture, true);
|
||||
}
|
||||
imagepng($this->Picture, $FileName);
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->TransparentBackground) {
|
||||
imagealphablending($this->Picture, false);
|
||||
imagesavealpha($this->Picture, true);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
imagepng($this->Picture);
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
public function toDataURI()
|
||||
{
|
||||
return 'data:image/png;base64,' . base64_encode($this->__toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the picture to a web browser stream
|
||||
* @param boolean $BrowserExpire
|
||||
*/
|
||||
public function stroke($BrowserExpire = false)
|
||||
{
|
||||
if ($this->TransparentBackground) {
|
||||
imagealphablending($this->Picture, false);
|
||||
imagesavealpha($this->Picture, true);
|
||||
}
|
||||
|
||||
if ($BrowserExpire) {
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Cache-Control: no-cache");
|
||||
header("Pragma: no-cache");
|
||||
}
|
||||
|
||||
header('Content-type: image/png');
|
||||
imagepng($this->Picture);
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatic output method based on the calling interface
|
||||
* @param string $FileName
|
||||
*/
|
||||
public function autoOutput($FileName = "output.png")
|
||||
{
|
||||
if (php_sapi_name() == "cli") {
|
||||
$this->Render($FileName);
|
||||
} else {
|
||||
$this->Stroke();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the length between two points
|
||||
* @param int $X1
|
||||
* @param int $Y1
|
||||
* @param int $X2
|
||||
* @param int $Y2
|
||||
* @return float
|
||||
*/
|
||||
public function getLength($X1, $Y1, $X2, $Y2)
|
||||
{
|
||||
return sqrt(
|
||||
pow(max($X1, $X2) - min($X1, $X2), 2) + pow(max($Y1, $Y2) - min($Y1, $Y2), 2)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the orientation of a line
|
||||
* @param int $X1
|
||||
* @param int $Y1
|
||||
* @param int $X2
|
||||
* @param int $Y2
|
||||
* @return int
|
||||
*/
|
||||
public function getAngle($X1, $Y1, $X2, $Y2)
|
||||
{
|
||||
$Opposite = $Y2 - $Y1;
|
||||
$Adjacent = $X2 - $X1;
|
||||
$Angle = rad2deg(atan2($Opposite, $Adjacent));
|
||||
if ($Angle > 0) {
|
||||
return $Angle;
|
||||
} else {
|
||||
return 360 - abs($Angle);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the surrounding box of text area
|
||||
* @param int $X
|
||||
* @param int $Y
|
||||
* @param string $FontName
|
||||
* @param int $FontSize
|
||||
* @param int $Angle
|
||||
* @param int $Text
|
||||
* @return array
|
||||
*/
|
||||
public function getTextBox($X, $Y, $FontName, $FontSize, $Angle, $Text)
|
||||
{
|
||||
$coords = imagettfbbox($FontSize, 0, $this->loadFont($FontName, 'fonts'), $Text);
|
||||
|
||||
$a = deg2rad($Angle);
|
||||
$ca = cos($a);
|
||||
$sa = sin($a);
|
||||
$RealPos = [];
|
||||
for ($i = 0; $i < 7; $i += 2) {
|
||||
$RealPos[$i / 2]["X"] = $X + round($coords[$i] * $ca + $coords[$i + 1] * $sa);
|
||||
$RealPos[$i / 2]["Y"] = $Y + round($coords[$i + 1] * $ca - $coords[$i] * $sa);
|
||||
}
|
||||
|
||||
$RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"];
|
||||
$RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
|
||||
$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"];
|
||||
$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
|
||||
$RealPos[TEXT_ALIGN_TOPLEFT]["X"] = $RealPos[3]["X"];
|
||||
$RealPos[TEXT_ALIGN_TOPLEFT]["Y"] = $RealPos[3]["Y"];
|
||||
$RealPos[TEXT_ALIGN_TOPRIGHT]["X"] = $RealPos[2]["X"];
|
||||
$RealPos[TEXT_ALIGN_TOPRIGHT]["Y"] = $RealPos[2]["Y"];
|
||||
$RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"] = ($RealPos[1]["X"] - $RealPos[0]["X"]) / 2 + $RealPos[0]["X"];
|
||||
$RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"] = ($RealPos[0]["Y"] - $RealPos[1]["Y"]) / 2 + $RealPos[1]["Y"];
|
||||
$RealPos[TEXT_ALIGN_TOPMIDDLE]["X"] = ($RealPos[2]["X"] - $RealPos[3]["X"]) / 2 + $RealPos[3]["X"];
|
||||
$RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"] = ($RealPos[3]["Y"] - $RealPos[2]["Y"]) / 2 + $RealPos[2]["Y"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLELEFT]["X"] = ($RealPos[0]["X"] - $RealPos[3]["X"]) / 2 + $RealPos[3]["X"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"] = ($RealPos[0]["Y"] - $RealPos[3]["Y"]) / 2 + $RealPos[3]["Y"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"] = ($RealPos[1]["X"] - $RealPos[2]["X"]) / 2 + $RealPos[2]["X"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"] = ($RealPos[1]["Y"] - $RealPos[2]["Y"]) / 2 + $RealPos[2]["Y"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"] = ($RealPos[1]["X"] - $RealPos[3]["X"]) / 2 + $RealPos[3]["X"];
|
||||
$RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"] = ($RealPos[0]["Y"] - $RealPos[2]["Y"]) / 2 + $RealPos[2]["Y"];
|
||||
|
||||
return $RealPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set current font properties
|
||||
* @param array $Format
|
||||
*/
|
||||
public function setFontProperties($Format = [])
|
||||
{
|
||||
$R = isset($Format["R"]) ? $Format["R"] : -1;
|
||||
$G = isset($Format["G"]) ? $Format["G"] : -1;
|
||||
$B = isset($Format["B"]) ? $Format["B"] : -1;
|
||||
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
|
||||
$FontName = isset($Format["FontName"]) ? $Format["FontName"] : null;
|
||||
$FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : null;
|
||||
|
||||
if ($R != -1) {
|
||||
$this->FontColorR = $R;
|
||||
}
|
||||
if ($G != -1) {
|
||||
$this->FontColorG = $G;
|
||||
}
|
||||
if ($B != -1) {
|
||||
$this->FontColorB = $B;
|
||||
}
|
||||
if ($Alpha != null) {
|
||||
$this->FontColorA = $Alpha;
|
||||
}
|
||||
|
||||
if ($FontName != null) {
|
||||
$this->FontName = $this->loadFont($FontName, 'fonts');
|
||||
}
|
||||
if ($FontSize != null) {
|
||||
$this->FontSize = $FontSize;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the 1st decimal values (used to correct AA bugs)
|
||||
* @param mixed $Value
|
||||
* @return mixed
|
||||
*/
|
||||
public function getFirstDecimal($Value)
|
||||
{
|
||||
$Values = preg_split("/\./", $Value);
|
||||
if (isset($Values[1])) {
|
||||
return substr($Values[1], 0, 1);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach a dataset to your pChart Object
|
||||
* @param Data $DataSet
|
||||
*/
|
||||
public function setDataSet(Data $DataSet)
|
||||
{
|
||||
$this->DataSet = $DataSet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print attached dataset contents to STDOUT
|
||||
*/
|
||||
public function printDataSet()
|
||||
{
|
||||
print_r($this->DataSet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the image map methods
|
||||
* @param string $Name
|
||||
* @param int $StorageMode
|
||||
* @param string $UniqueID
|
||||
* @param string $StorageFolder
|
||||
*/
|
||||
public function initialiseImageMap(
|
||||
$Name = "pChart",
|
||||
$StorageMode = IMAGE_MAP_STORAGE_SESSION,
|
||||
$UniqueID = "imageMap",
|
||||
$StorageFolder = "tmp"
|
||||
) {
|
||||
$this->ImageMapIndex = $Name;
|
||||
$this->ImageMapStorageMode = $StorageMode;
|
||||
|
||||
if ($StorageMode == IMAGE_MAP_STORAGE_SESSION) {
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
$_SESSION[$this->ImageMapIndex] = null;
|
||||
} elseif ($StorageMode == IMAGE_MAP_STORAGE_FILE) {
|
||||
$this->ImageMapFileName = $UniqueID;
|
||||
$this->ImageMapStorageFolder = $StorageFolder;
|
||||
|
||||
$path = sprintf("%s/%s.map", $StorageFolder, $UniqueID);
|
||||
if (file_exists($path)) {
|
||||
unlink($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a zone to the image map
|
||||
*
|
||||
* @param string $Type
|
||||
* @param string $Plots
|
||||
* @param string|null $Color
|
||||
* @param string $Title
|
||||
* @param string $Message
|
||||
* @param boolean $HTMLEncode
|
||||
*/
|
||||
public function addToImageMap(
|
||||
$Type,
|
||||
$Plots,
|
||||
$Color = null,
|
||||
$Title = null,
|
||||
$Message = null,
|
||||
$HTMLEncode = false
|
||||
) {
|
||||
if ($this->ImageMapStorageMode == null) {
|
||||
$this->initialiseImageMap();
|
||||
}
|
||||
|
||||
/* Encode the characters in the imagemap in HTML standards */
|
||||
$Title = htmlentities(
|
||||
str_replace("€", "\u20AC", $Title),
|
||||
ENT_QUOTES,
|
||||
"ISO-8859-15"
|
||||
);
|
||||
if ($HTMLEncode) {
|
||||
$Message = str_replace(
|
||||
">",
|
||||
">",
|
||||
str_replace(
|
||||
"<",
|
||||
"<",
|
||||
htmlentities($Message, ENT_QUOTES, "ISO-8859-15")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION) {
|
||||
if (!isset($_SESSION)) {
|
||||
$this->initialiseImageMap();
|
||||
}
|
||||
$_SESSION[$this->ImageMapIndex][] = [$Type, $Plots, $Color, $Title, $Message];
|
||||
} elseif ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE) {
|
||||
$Handle = fopen(
|
||||
sprintf("%s/%s.map", $this->ImageMapStorageFolder, $this->ImageMapFileName),
|
||||
'a'
|
||||
);
|
||||
fwrite(
|
||||
$Handle,
|
||||
sprintf(
|
||||
"%s%s%s%s%s%s%s%s%s\r\n",
|
||||
$Type,
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Plots,
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Color,
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Title,
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Message
|
||||
)
|
||||
);
|
||||
fclose($Handle);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove VOID values from an imagemap custom values array
|
||||
* @param string $SerieName
|
||||
* @param array $Values
|
||||
* @return array
|
||||
*/
|
||||
public function removeVOIDFromArray($SerieName, array $Values)
|
||||
{
|
||||
if (!isset($this->DataSet->Data["Series"][$SerieName])) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
$Result = [];
|
||||
foreach ($this->DataSet->Data["Series"][$SerieName]["Data"] as $Key => $Value) {
|
||||
if ($Value != VOID && isset($Values[$Key])) {
|
||||
$Result[] = $Values[$Key];
|
||||
}
|
||||
}
|
||||
return $Result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the title of one image map serie
|
||||
* @param string $OldTitle
|
||||
* @param string|array $NewTitle
|
||||
* @return null|int
|
||||
*/
|
||||
public function replaceImageMapTitle($OldTitle, $NewTitle)
|
||||
{
|
||||
if ($this->ImageMapStorageMode == null) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (is_array($NewTitle)) {
|
||||
$NewTitle = $this->removeVOIDFromArray($OldTitle, $NewTitle);
|
||||
}
|
||||
|
||||
if ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION) {
|
||||
if (!isset($_SESSION)) {
|
||||
return -1;
|
||||
}
|
||||
if (is_array($NewTitle)) {
|
||||
$ID = 0;
|
||||
foreach ($_SESSION[$this->ImageMapIndex] as $Key => $Settings) {
|
||||
if ($Settings[3] == $OldTitle && isset($NewTitle[$ID])) {
|
||||
$_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle[$ID];
|
||||
$ID++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($_SESSION[$this->ImageMapIndex] as $Key => $Settings) {
|
||||
if ($Settings[3] == $OldTitle) {
|
||||
$_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle;
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE) {
|
||||
$TempArray = [];
|
||||
$Handle = $this->openFileHandle();
|
||||
if ($Handle) {
|
||||
while (($Buffer = fgets($Handle, 4096)) !== false) {
|
||||
$Fields = preg_split(
|
||||
sprintf("/%s/", IMAGE_MAP_DELIMITER),
|
||||
str_replace([chr(10), chr(13)], "", $Buffer)
|
||||
);
|
||||
$TempArray[] = [$Fields[0], $Fields[1], $Fields[2], $Fields[3], $Fields[4]];
|
||||
}
|
||||
fclose($Handle);
|
||||
|
||||
if (is_array($NewTitle)) {
|
||||
$ID = 0;
|
||||
foreach ($TempArray as $Key => $Settings) {
|
||||
if ($Settings[3] == $OldTitle && isset($NewTitle[$ID])) {
|
||||
$TempArray[$Key][3] = $NewTitle[$ID];
|
||||
$ID++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($TempArray as $Key => $Settings) {
|
||||
if ($Settings[3] == $OldTitle) {
|
||||
$TempArray[$Key][3] = $NewTitle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$Handle = $this->openFileHandle("w");
|
||||
foreach ($TempArray as $Key => $Settings) {
|
||||
fwrite(
|
||||
$Handle,
|
||||
sprintf(
|
||||
"%s%s%s%s%s%s%s%s%s\r\n",
|
||||
$Settings[0],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[1],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[2],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[3],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[4]
|
||||
)
|
||||
);
|
||||
}
|
||||
fclose($Handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the values of the image map contents
|
||||
* @param string $Title
|
||||
* @param array $Values
|
||||
* @return null|int
|
||||
*/
|
||||
public function replaceImageMapValues($Title, array $Values)
|
||||
{
|
||||
if ($this->ImageMapStorageMode == null) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
$Values = $this->removeVOIDFromArray($Title, $Values);
|
||||
$ID = 0;
|
||||
if ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION) {
|
||||
if (!isset($_SESSION)) {
|
||||
return -1;
|
||||
}
|
||||
foreach ($_SESSION[$this->ImageMapIndex] as $Key => $Settings) {
|
||||
if ($Settings[3] == $Title) {
|
||||
if (isset($Values[$ID])) {
|
||||
$_SESSION[$this->ImageMapIndex][$Key][4] = $Values[$ID];
|
||||
}
|
||||
$ID++;
|
||||
}
|
||||
}
|
||||
} elseif ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE) {
|
||||
$TempArray = [];
|
||||
$Handle = $this->openFileHandle();
|
||||
if ($Handle) {
|
||||
while (($Buffer = fgets($Handle, 4096)) !== false) {
|
||||
$Fields = preg_split(
|
||||
"/" . IMAGE_MAP_DELIMITER . "/",
|
||||
str_replace([chr(10), chr(13)], "", $Buffer)
|
||||
);
|
||||
$TempArray[] = [$Fields[0], $Fields[1], $Fields[2], $Fields[3], $Fields[4]];
|
||||
}
|
||||
fclose($Handle);
|
||||
|
||||
foreach ($TempArray as $Key => $Settings) {
|
||||
if ($Settings[3] == $Title) {
|
||||
if (isset($Values[$ID])) {
|
||||
$TempArray[$Key][4] = $Values[$ID];
|
||||
}
|
||||
$ID++;
|
||||
}
|
||||
}
|
||||
|
||||
$Handle = $this->openFileHandle("w");
|
||||
foreach ($TempArray as $Key => $Settings) {
|
||||
fwrite(
|
||||
$Handle,
|
||||
sprintf(
|
||||
"%s%s%s%s%s%s%s%s%s\r\n",
|
||||
$Settings[0],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[1],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[2],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[3],
|
||||
IMAGE_MAP_DELIMITER,
|
||||
$Settings[4]
|
||||
)
|
||||
);
|
||||
}
|
||||
fclose($Handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump the image map
|
||||
* @param string $Name
|
||||
* @param int $StorageMode
|
||||
* @param string $UniqueID
|
||||
* @param string $StorageFolder
|
||||
*/
|
||||
public function dumpImageMap(
|
||||
$Name = "pChart",
|
||||
$StorageMode = IMAGE_MAP_STORAGE_SESSION,
|
||||
$UniqueID = "imageMap",
|
||||
$StorageFolder = "tmp"
|
||||
) {
|
||||
$this->ImageMapIndex = $Name;
|
||||
$this->ImageMapStorageMode = $StorageMode;
|
||||
|
||||
if ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION) {
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
if ($_SESSION[$Name] != null) {
|
||||
foreach ($_SESSION[$Name] as $Key => $Params) {
|
||||
echo $Params[0] . IMAGE_MAP_DELIMITER . $Params[1]
|
||||
. IMAGE_MAP_DELIMITER . $Params[2] . IMAGE_MAP_DELIMITER
|
||||
. $Params[3] . IMAGE_MAP_DELIMITER . $Params[4] . "\r\n";
|
||||
}
|
||||
}
|
||||
} elseif ($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE) {
|
||||
if (file_exists($StorageFolder . "/" . $UniqueID . ".map")) {
|
||||
$Handle = @fopen($StorageFolder . "/" . $UniqueID . ".map", "r");
|
||||
if ($Handle) {
|
||||
while (($Buffer = fgets($Handle, 4096)) !== false) {
|
||||
echo $Buffer;
|
||||
}
|
||||
}
|
||||
fclose($Handle);
|
||||
|
||||
if ($this->ImageMapAutoDelete) {
|
||||
unlink($StorageFolder . "/" . $UniqueID . ".map");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* When the image map is returned to the client, the script ends */
|
||||
exit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the HTML converted color from the RGB composite values
|
||||
* @param int $R
|
||||
* @param int $G
|
||||
* @param int $B
|
||||
* @return string
|
||||
*/
|
||||
public function toHTMLColor($R, $G, $B)
|
||||
{
|
||||
$R = intval($R);
|
||||
$G = intval($G);
|
||||
$B = intval($B);
|
||||
$R = dechex($R < 0 ? 0 : ($R > 255 ? 255 : $R));
|
||||
$G = dechex($G < 0 ? 0 : ($G > 255 ? 255 : $G));
|
||||
$B = dechex($B < 0 ? 0 : ($B > 255 ? 255 : $B));
|
||||
$Color = "#" . (strlen($R) < 2 ? '0' : '') . $R;
|
||||
$Color .= (strlen($G) < 2 ? '0' : '') . $G;
|
||||
$Color .= (strlen($B) < 2 ? '0' : '') . $B;
|
||||
|
||||
return $Color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse an array of points
|
||||
* @param array $Plots
|
||||
* @return array
|
||||
*/
|
||||
public function reversePlots(array $Plots)
|
||||
{
|
||||
$Result = [];
|
||||
for ($i = count($Plots) - 2; $i >= 0; $i = $i - 2) {
|
||||
$Result[] = $Plots[$i];
|
||||
$Result[] = $Plots[$i + 1];
|
||||
}
|
||||
return $Result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mirror Effect
|
||||
* @param int $X
|
||||
* @param int $Y
|
||||
* @param int $Width
|
||||
* @param int $Height
|
||||
* @param array $Format
|
||||
*/
|
||||
public function drawAreaMirror($X, $Y, $Width, $Height, array $Format = [])
|
||||
{
|
||||
$StartAlpha = isset($Format["StartAlpha"]) ? $Format["StartAlpha"] : 80;
|
||||
$EndAlpha = isset($Format["EndAlpha"]) ? $Format["EndAlpha"] : 0;
|
||||
|
||||
$AlphaStep = ($StartAlpha - $EndAlpha) / $Height;
|
||||
|
||||
$Picture = imagecreatetruecolor($this->XSize, $this->YSize);
|
||||
imagecopy($Picture, $this->Picture, 0, 0, 0, 0, $this->XSize, $this->YSize);
|
||||
|
||||
for ($i = 1; $i <= $Height; $i++) {
|
||||
if ($Y + ($i - 1) < $this->YSize && $Y - $i > 0) {
|
||||
imagecopymerge(
|
||||
$Picture,
|
||||
$this->Picture,
|
||||
$X,
|
||||
$Y + ($i - 1),
|
||||
$X,
|
||||
$Y - $i,
|
||||
$Width,
|
||||
1,
|
||||
$StartAlpha - $AlphaStep * $i
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
imagecopy($this->Picture, $Picture, 0, 0, 0, 0, $this->XSize, $this->YSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a handle to image storage file.
|
||||
* @param string $mode
|
||||
* @return resource
|
||||
*/
|
||||
private function openFileHandle($mode = "r")
|
||||
{
|
||||
return @fopen(
|
||||
sprintf("%s/%s.map", $this->ImageMapStorageFolder, $this->ImageMapFileName),
|
||||
$mode
|
||||
);
|
||||
}
|
||||
}
|
0
vendor/szymach/c-pchart/tests/_data/.gitkeep
vendored
Normal file
0
vendor/szymach/c-pchart/tests/_data/.gitkeep
vendored
Normal file
BIN
vendor/szymach/c-pchart/tests/_data/accept.png
vendored
Normal file
BIN
vendor/szymach/c-pchart/tests/_data/accept.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 781 B |
11
vendor/szymach/c-pchart/tests/_data/test_palette.txt
vendored
Normal file
11
vendor/szymach/c-pchart/tests/_data/test_palette.txt
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
244, 91, 91, 100
|
||||
128, 133, 233, 100
|
||||
141, 70, 84, 100
|
||||
119, 152, 191, 100
|
||||
170, 238, 238, 100
|
||||
255, 0, 102, 100
|
||||
238, 170, 238, 100
|
||||
85, 191, 59, 100
|
||||
223, 83, 83, 100
|
||||
119, 152, 191, 100
|
||||
170, 238, 238, 100
|
2
vendor/szymach/c-pchart/tests/_output/.gitignore
vendored
Normal file
2
vendor/szymach/c-pchart/tests/_output/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
42
vendor/szymach/c-pchart/tests/_support/Helper/Unit.php
vendored
Normal file
42
vendor/szymach/c-pchart/tests/_support/Helper/Unit.php
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace Test\CpChart\Helper;
|
||||
|
||||
use Codeception\Module;
|
||||
use Codeception\Module\Filesystem;
|
||||
|
||||
class Unit extends Module
|
||||
{
|
||||
public function _beforeSuite($settings = [])
|
||||
{
|
||||
$chartDir = $this->getChartDirectoryPath();
|
||||
if (!is_dir($chartDir)) {
|
||||
mkdir($chartDir);
|
||||
}
|
||||
|
||||
$this->clearOutputDirectory();
|
||||
}
|
||||
|
||||
public function _afterSuite($settings = [])
|
||||
{
|
||||
$this->clearOutputDirectory();
|
||||
}
|
||||
|
||||
private function clearOutputDirectory()
|
||||
{
|
||||
$this->getFileSystem()->cleanDir($this->getChartDirectoryPath());
|
||||
}
|
||||
|
||||
private function getChartDirectoryPath()
|
||||
{
|
||||
return sprintf(__DIR__."/../../_output/charts");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Filesystem
|
||||
*/
|
||||
private function getFileSystem()
|
||||
{
|
||||
return $this->getModule('Filesystem');
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue