HuasoFoundries/jpgraph

View on GitHub
src/plot/FieldPlot.php

Summary

Maintainability
A
3 hrs
Test Coverage
<?php

/**
 * JPGraph v4.0.3
 */

namespace Amenadiel\JpGraph\Plot;

use Amenadiel\JpGraph\Image;
use Amenadiel\JpGraph\Util;

/**
 * @class FieldPlot
 * // Description: Render a field plot
 */
class FieldPlot extends Plot
{
    public $arrow      = '';
    private $iAngles   = [];
    private $iCallback = '';

    public function __construct($datay, $datax, $angles)
    {
        if ((safe_count($datax) != safe_count($datay))) {
            Util\JpGraphError::RaiseL(20001);
        }
        //("Fieldplots must have equal number of X and Y points.");
        if ((safe_count($datax) != safe_count($angles))) {
            Util\JpGraphError::RaiseL(20002);
        }
        //("Fieldplots must have an angle specified for each X and Y points.");

        $this->iAngles = $angles;

        parent::__construct($datay, $datax);
        $this->value->SetAlign('center', 'center');
        $this->value->SetMargin(15);

        $this->arrow = new Image\FieldArrow();
    }

    public function SetCallback($aFunc)
    {
        $this->iCallback = $aFunc;
    }

    public function Stroke($img, $xscale, $yscale)
    {
        // Remeber base color and size
        $bc  = $this->arrow->iColor;
        $bs  = $this->arrow->iSize;
        $bas = $this->arrow->iArrowSize;

        for ($i = 0; $i < $this->numpoints; ++$i) {
            // Skip null values
            if ($this->coords[0][$i] === '') {
                continue;
            }

            $f = $this->iCallback;
            if ($f != '') {
                list($cc, $cs, $cas) = call_user_func($f, $this->coords[1][$i], $this->coords[0][$i], $this->iAngles[$i]);
                // Fall back on global data if the callback isn't set
                if ($cc == '') {
                    $cc = $bc;
                }

                if ($cs == '') {
                    $cs = $bs;
                }

                if ($cas == '') {
                    $cas = $bas;
                }

                $this->arrow->SetColor($cc);
                $this->arrow->SetSize($cs, $cas);
            }

            $xt = $xscale->Translate($this->coords[1][$i]);
            $yt = $yscale->Translate($this->coords[0][$i]);

            $this->arrow->Stroke($img, $xt, $yt, $this->iAngles[$i]);
            $this->value->Stroke($img, $this->coords[0][$i], $xt, $yt);
        }
    }

    // Framework function
    public function Legend($aGraph)
    {
        if ($this->legend != '') {
            $aGraph->legend->Add(
                $this->legend,
                $this->mark->fill_color,
                $this->mark,
                0,
                $this->legendcsimtarget,
                $this->legendcsimalt,
                $this->legendcsimwintarget
            );
        }
    }
}