<?php
use nstdio\svg\container\G;
use nstdio\svg\container\SVG;
use nstdio\svg\shape\Circle;
use nstdio\svg\shape\Path;
use nstdio\svg\shape\Rect;
use nstdio\svg\text\Text;
use nstdio\svg\util\Bezier;
require_once __DIR__ . '/../vendor/autoload.php';
for ($i = 0; $i < 100; $i++) {
drawQuad(mt_rand(0, 980), mt_rand(0, 480), mt_rand(0, 980), mt_rand(0, 480), mt_rand(0, 980), mt_rand(0, 480));
}
drawQuad(10, 5, 10, 150, 50, 80);
function drawQuad($mx, $my, $x1, $y1, $x, $y)
{
$ptRadius = 6;
$svg = new SVG('10cm', '6cm');
$svg->getElement()->setAttribute('viewBox', '0 0 1000 600');
$lineStyle = ['fill' => 'none', 'stroke' => '#888888', 'stroke-width' => 2];
Rect::create($svg, 498, 998, 1, 1)->apply(['fill' => 'none', 'stroke' => 'blue', 'stroke-width' => '1']);
Path::quadraticCurve($svg, $mx, $my, $x1, $y1, $x, $y)
->apply(['fill' => 'none', 'stroke' => 'red', 'stroke-width' => 1]);
$controlsGroup = G::create($svg)->apply(['fill' => 'black']);
Circle::create($controlsGroup, $mx, $my, $ptRadius);
Circle::create($controlsGroup, $x, $y, $ptRadius);
$g = G::create($svg)->apply(['fill' => '#888888']);
Circle::create($g, $x1, $y1, $ptRadius);
Path::line($svg, $mx, $my, $x1, $y1)
->lineTo($x, $y)
->apply($lineStyle)
->apply(['stroke-opacity' => 0.5]);
$box = Bezier::quadraticBBox($mx, $my, $x1, $y1, $x, $y);
$boxRect = Rect::createFromPointsArray($svg, $box)
->apply($lineStyle)
->apply(['stroke-dasharray' => '8 8', 'stroke-linecap' => 'round', 'fill' => 'blue', 'fill-opacity' => 0.1]);
$coordinates = sprintf("P0(%d, %d), P1(%d, %d), P2(%d, %d). BBox(width: %.2f, height: %.2f, x: %.2f, y: %.2f)", $mx, $my, $x1, $y1, $x, $y, $boxRect->width, $boxRect->height, $boxRect->x, $boxRect->y);
Text::create($svg, $coordinates)
->apply(['x' => 5, 'y' => 530, 'font-size' => '24px']);
echo $svg;
}
|