Dans ce chapitre je vous montre comment dessiner des segments et des polygones ouverts ou fermés.
Extrait de la feuille de style interne de cette page web :
On a dessiné deux croix. La première est verte et chaque ligne a une largeur de 10px.
La balise canvas définit un repère de 320 par 200, est identifiée "canevas1" et bénéficie de la classe 'toile'.
La propriété lineCap permet de définir le style des extrémités de chaque segment.
La balise canvas définit un repère de 400 par 300, est identifiée "canevas2" et est stylée par la classe "toile".
On utilise les méthodes moveTo(x,y) et lineTo(x,y) pour dessiner des polygones.
Remarquez que pour dessiner un triangle fermé il n'y a que deux instructions lineTo() et une instruction closePath().
La méthode closePath() ferme le chemin.
Donc si vous souhaitez une forme ouverte il ne faut surtout pas d'instruction closePath().
La propriété lineJoin permet de définir le style des sommets du polygone.
Vous devez vous dire que c'est beaucoup de code pour dessiner de simples polygones.
Si vous avez déjà des notions sur l'API Canvas mais que la méthode path2D() vous est encore inconnue, vous pouvez
aller directement au chapitre en lien : le constructeur path2D()
Le premier polygone est fermé mais surtout il est borduré de lignes pointillées.
Cette méthode définit le modèle à utiliser pour les pointillés lors du dessin de la ligne,
en utilisant un tableau de valeurs qui spécifie les longueurs des alternances entre pleins et creux.
La balise canvas définit un repère de 600 par 400, est identifiée "canevas3" et est stylée par la classe 'toile'.
ctx.setLineDash([10,10]) : tirets et espaces ont la même longueur.
Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Canvas : dessiner des droites et des polygones
Remarque préalable
.toile{width : 60% ; height : auto; }
Dessiner des segments
Exemple
La deuxième est rouge et chaque ligne a une largeur de 16px ;
Dans la deuxième croix les extrémités de chaque ligne sont arrondies.
Le code correspondant
La fonction JS
function fcanevas1()
{
var canevas = document.getElementById('canevas1');
var contexte = canevas.getContext('2d');
// première croix
contexte.lineWidth = 10 ;
contexte.strokeStyle ='green';
contexte.moveTo(30, 30);
contexte.lineTo(170, 170);
contexte.moveTo(170,30);
contexte.lineTo(30,170);
contexte.stroke() ;
// deuxième croix
contexte.beginPath();
contexte.lineWidth = 16 ;
contexte.strokeStyle ='red';
contexte.lineCap ='round' ;
contexte.moveTo(230, 30);
contexte.lineTo(300, 170);
contexte.moveTo(300,30);
contexte.lineTo(230,170);
contexte.stroke() ;
}
fcanevas1();
On utilise les méthodes moveTo(x,y) et lineTo(x,y) pour définir une ligne :
Les différentes valeurs de cette propriété sont :
Canvas : dessiner des polygones
Exemple
Dans le canevas ci-dessus il y a deux polygones:
Le code correspondant
La fonction JS
function fcanevas2()
{
var canevas = document.getElementById('canevas2');
var contexte = canevas2.getContext('2d');
var X = canevas.width ;
var Y = canevas.height;
contexte.lineWidth = 14 ;
// triangle fermé
contexte.moveTo(20, Y-20);
contexte.lineTo(X/2, 20);
contexte.lineTo(X-20,Y-20);
contexte.closePath() ; // fermer la forme
contexte.strokeStyle ='red';
contexte.lineJoin = 'bevel';
contexte.stroke();
// quadrilatère ouvert
contexte.beginPath();
contexte.moveTo(100,50);
contexte.lineTo(250,50);
contexte.lineTo(200, 250);
contexte.lineTo(50,250);
contexte.strokeStyle ='green';
contexte.lineJoin = 'round';
contexte.stroke() ;
}
fcanevas2();
Pour dessiner un quadrilatère fermé il ne faut donc que trois instructions lineTo() et une instruction closePath().
Les différentes valeurs de cette propriété sont :
Il n'y a pas plus simple ???
Rassurez vous. L'API Canvas s'améliore ; il est possible désormais de dessiner une forme complexe en une seule instruction !
Mais je n'en dis pas plus pour l'instant ...
Lignes pointillées
Exemple
Le deuxième polygone est ouvert et borduré de lignes continues.
La méthode setLineDash()
Le script
Donc le script qui en découle :
var canevas = document.getElementById('canevas');
var ctx = canevas.getContext('2d');
ctx.lineWidth =3;
ctx.strokeStyle ="red";
// lignes pointillées
ctx.setLineDash([10,10]);
ctx.beginPath();
ctx.moveTo(0, 50);
ctx.lineTo(100, 50);
ctx.lineTo(200,150);
ctx.closePath();
ctx.stroke();
// lignes continues
ctx.setLineDash([]);
ctx.beginPath();
ctx.moveTo(200, 200);
ctx.lineTo(300, 300);
ctx.lineTo(200,400);
ctx.stroke();
Syntaxe
ctx.setLineDash([]) : annulation de lignes pointillées ; retour aux lignes continues