| @ -0,0 +1,135 @@ | |||||
| <?php | |||||
| function DrawBlock($the_block, $vImage, $parametres) | |||||
| { | |||||
| // valeurs par défaut | |||||
| $type = 1; | |||||
| // Ces variables vont permettre de caler les lignes | |||||
| // dans la zone de dessin en se laissant des marges | |||||
| // en haut et en bas | |||||
| $somme = 0; | |||||
| $min =-1; | |||||
| $max = 0; | |||||
| $marge_x = 10; | |||||
| $marge_y = 10; | |||||
| $facteur_max = 2.5; | |||||
| $alpha = 0; | |||||
| // Détermine si on dessine les tx, les fees ou la récompense | |||||
| if (isset($parametres['type'])) $type = $parametres['type']; | |||||
| // Paramètres de dessin | |||||
| if (isset($parametres['x'])) $x = $parametres['x']; | |||||
| if (isset($parametres['y'])) $y = $parametres['y']; | |||||
| if (isset($parametres['width'])) $width = $parametres['width']; | |||||
| if (isset($parametres['height'])) $height = $parametres['height']; | |||||
| if (isset($parametres['font_color'])) $vFgColor = $parametres['font_color']; | |||||
| if (isset($parametres['background_color'])) $vBgColor = $parametres['background_color']; | |||||
| if (isset($parametres['font_RGB'])) $vFgRGB = $parametres['font_RGB']; | |||||
| if (isset($parametres['background_RGB'])) $vBgRGB = $parametres['background_RGB']; | |||||
| // Je reprends les couleurs de Tyler Hobbs | |||||
| $couleursRGB=[ | |||||
| [234,220,207], | |||||
| [197,46,39], | |||||
| [183,230,214], | |||||
| [248,200,40], | |||||
| [51,41,32], | |||||
| [250,142,41], | |||||
| [5,37,32], | |||||
| [233,201,58], | |||||
| [183,230,214] | |||||
| ]; | |||||
| $couleurs = []; | |||||
| $nb_couleurs = count($couleursRGB); | |||||
| for($i=0;$i<$nb_couleurs;$i++) | |||||
| $couleurs[$i] = imagecolorallocate($vImage,$couleursRGB[$i][0],$couleursRGB[$i][1],$couleursRGB[$i][2]); | |||||
| // Prendre une des couleurs au hasard comme couleur de fond | |||||
| shuffle($couleurs); | |||||
| $fond = $couleurs[0]; | |||||
| shuffle($couleurs); | |||||
| // Remplir le fond | |||||
| imagefilledrectangle($vImage, $x+($marge_x/2), $y+($marge_y/2), $x+$width-+($marge_x/2), $y+$height-+($marge_y/2), $fond); | |||||
| // Récup des données | |||||
| $data = blockchain::getTransactionData($the_block, $type); | |||||
| $n_data = count($data); | |||||
| // Calcul des min max | |||||
| foreach($data as $v) | |||||
| { | |||||
| if ($v['value'] > $max) $max = $v['value']; | |||||
| if (($v['value'] < $min)||($min == -1)) $min = $v['value']; | |||||
| $somme += $v['value']; | |||||
| } | |||||
| if ($min == $max) $max = $min + 1; | |||||
| if ($somme == 0) return; | |||||
| // On commence au centre de l'image | |||||
| $xc = $x + ($width / 2); | |||||
| $yc = $y + ($height / 2); | |||||
| $r = $width / 3; | |||||
| $cur = 0; | |||||
| $n = 0; | |||||
| $x1 = $xc; | |||||
| $y1 = $yc; | |||||
| $x2 = $xc; | |||||
| $y2 = $yc; | |||||
| // Trouver le max | |||||
| $max=0; | |||||
| while(true){ | |||||
| $r1 = 0.05 * $max; | |||||
| $x2 = $xc + $r1*cos($r1); | |||||
| $y2 = $yc + $r1*sin($r1); | |||||
| if (($x2 > $width) || ($x2 < 0)) break; | |||||
| if (($y2 > $height) || ($y2 < 0)) break; | |||||
| imageline($vImage, $x1, $y1, $x2, $y2, $couleurs[0]); | |||||
| $x1 = $x2; | |||||
| $y1 = $y2; | |||||
| $max++; | |||||
| } | |||||
| $coef = floatval($max) / floatval($somme); | |||||
| $cur = 0; | |||||
| $n = 0; | |||||
| $x1 = $xc; | |||||
| $y1 = $yc; | |||||
| $x2 = $xc; | |||||
| $y2 = $yc; | |||||
| foreach($data as $transaction) | |||||
| { | |||||
| // chaque fois que toutes les couleurs ont été utilisées | |||||
| // on mélange leur ordre | |||||
| if (!($n%$nb_couleurs)) shuffle($couleurs); | |||||
| // S'il n'y a qu'une transaction | |||||
| // Ou Si la transaction courante représente plus du 5eme de la somme des tx | |||||
| // On s'interdit la couleur de fond | |||||
| if (($n_data == 1)||($transaction['value'] > ($somme/5))) | |||||
| while ($couleurs[$n%$nb_couleurs] == $fond) $n++; | |||||
| $couleur = $couleurs[$n%$nb_couleurs]; | |||||
| // le segment de couleur est de longueur proportionnelle | |||||
| // à la valeur de sa transaction | |||||
| $next = $cur + ($coef*$transaction['value']); | |||||
| if ($next > $max) $next = $max; | |||||
| while($cur<$next) | |||||
| { | |||||
| $r1 = 0.05 * $cur; | |||||
| $x2 = $xc + $r1*cos($r1); | |||||
| $y2 = $yc + $r1*sin($r1); | |||||
| imageline($vImage, $x1, $y1, $x2, $y2, $couleur); | |||||
| $x1 = $x2; | |||||
| $y1 = $y2; | |||||
| $cur++; | |||||
| } | |||||
| $n++; | |||||
| } | |||||
| } | |||||
| ?> | |||||