Non resta che implementare una classe concreta per aAreaDiDisegno che chiameremo cAreaDiDisegnoHTML. Tale classe non deve fare altro che implementare il metodo output lasciato astratto dalla genitrice.
A tal fine, volendo implementare il sistema che faccia uso di un * per rappresentare un punto e il tag PRE per popolare l'area di disegno, potremo scrivere:
<?php
require_once './aAreaDiDisegno.php';
class cAreaDiDisegnoHTML extends aAreaDiDisegno {
public function output() {
$output = '<pre style="font-size:12px;line-height:7px;">';
for ($y = 1; $y <= $this->getAltezza(); $y++) {
for ($x = 1; $x <= $this->getLarghezza(); $x++)
$output.=(isset($this->puntiDisegnati[$x][$y])) ? "<span style=\"color:rgb({$this->puntiDisegnati[$x][$y]->getR()},{$this->puntiDisegnati[$x][$y]->getG()},{$this->puntiDisegnati[$x][$y]->getB()})\">*</span>" : ' ';
$output.="\n";
}
return $output . "</pre>";
}
}
?>
E' ora possibile scriver e il primo script di test che disegni testualmente facendo uso delle classi fin qui definite.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Forme Geometriche</title>
</head>
<body>
<?php
require_once './cAreaDiDisegnoHTML.php';
require_once './cPoligono.php';
require_once './cColore.php';
require_once './cCoordinate.php';
require_once './cPunto.php';
$tavolozza = [
'rosso' => new cColore(255, 0, 0),
'verde' => new cColore(0, 255, 0),
'blu' => new cColore(0, 0, 255),
'grigio' => new cColore(127, 127, 127),
'nero' => new cColore(0,0,0)
];
$ad = new cAreaDiDisegnoHTML(100, 100);
$puntoA=new cPunto(new cCoordinate(1, 1), $tavolozza['verde']);
$puntoB=new cPunto(new cCoordinate(1, 50), $tavolozza['verde']);
$puntoC=new cPunto(new cCoordinate(50, 50), $tavolozza['verde']);
$puntoD=new cPunto(new cCoordinate(50, 1), $tavolozza['verde']);
$poligono = new cPoligono($tavolozza['grigio']);
$poligono->setVertice($puntoA);
$poligono->setVertice($puntoB);
$poligono->setVertice($puntoC);
$poligono->setVertice($puntoD);
$poligono->disegna($ad);
$ad->tracciaSegmento($puntoA, $puntoC, $puntoA);
$ad->tracciaSegmento($puntoB, $puntoD, $tavolozza['rosso']);
$ad->tracciaPunto($puntoA, $tavolozza['blu']);
$ad->tracciaPunto($puntoB, $tavolozza['blu']);
$ad->tracciaPunto($puntoC, $tavolozza['blu']);
$ad->tracciaPunto($puntoD, $tavolozza['blu']);
echo $ad->output();
?>
</body>
</html>
La pagina di test non fa altro che definire una array $tavolozza con alcuni oggetto colori pronti all'uso, creare una nuova istanza di un'area di disegno HTML, definire 4 punti e un poligono grigio (un quadrato tenendo conto che i caratteri hanno una altezza doppia rispetto alla propria larghezza). I vertici del poligono sono popolati con i punti creati precedentemente, quindi si disegna il poligono sull'area di disegno, poi sono tracciati direttamente sull'area di disegno i 4 punti e due segmenti che congiungono i punti opposti. Il risultato dello script è quello in figura.
L'output prodotto dallo script di test |