Accueil

Traduction

Dessiner avec SVG - sommaire

Dessiner avec SVG - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

SVG : la balise path

Nous allons maintenant introduire la balise path (chemin).

Grâce à cette balise on peut réaliser des formes complexes : courbes de Bézier, arcs elliptiques,etc.

Mais la balise path peut aussi remplacer avantageusement les balises polygon, polyline pour dessiner des lignes brisées et des polygones.

Exemple de forme complexe produite par la balise path

L'instruction path est la suivante :

Une seule instruction pour dessiner une forme complexe !

style1 est une classe définie dans la feuille de style interne de la page.
Définition de cette classe : .style1 {stroke : olive ; stroke-width:4px; fill:none; }

La notation en absolu du chemin

Exemple de notation en absolu de chemins

La balise path path non fermé : pas de commande Z path fermé : commande Z à la fin Ligne produite avec la balise path

Le code correspondant

Nous avons trois formes : deux triangles et une ligne
Le premier triangle est ouvert (manque un segment) et le deuxième est fermé;

Un chemin peut comprendre plusieurs commandes L mais toujours une seule commande M.
La virgule séparant l'abscisse de l'ordonnée est facultative. Donc vous pouvez parfaitement écrire les chemins de la façon suivante , par exemple : "M 240 40 L 350 100 L 300 280 Z"

Chemin avec des verticales et horizontales

SVG - balise path - Tracer des lignes horizontales et verticales avec les commandes H et V path fermé composé de droites horizontales et verticales path ouvert composé de droites horizontales et verticales

Le code SVG correspondant

Lorsque un chemin consiste en une succession de segments horizontaux ou verticaux utilisez les commandes H et V à la place de L.
Il y a en effet la commande H (comme Horizontal) et la commande V (comme Vertical) qui remplacent avantageusement la commande L (comme Lineto).
Les commandes H et V doivent être suivies d’un seul nombre : l'abscisse (pour la commande H) ou l'ordonnée (pour la commande V) du point d’arrivée du segment.

Les commentaires dans le code SVG

Observez attentivement le code SVG ci-dessous !
J'ai utilisé la balise double title pour un commentaire général de l'image vectorielle, son titre.
J'ai utilisé la balise double desc pour commenter chaque instruction basée sur la balie path, sa description.
Ces deux balises ne peuvent contenir que du texte. Elles n'ont aucune incidence sur le dessin vectoriel.

Notation en relatif de chemins

Définir dans un path les coordonnées x et y en absolu de chaque point (c'est à dire par rapport à l'arête supérieure gauche de la zone de dessin) est une opération délicate et qui exige de réaliser au préalable un croquis sur papier à petits carreaux.
Mais, bonne nouvelle, il est possible d'exprimer les coordonnées d'un point de façon relative c'est à dire d'exprimer ses coordonnées par rapport au précédent point. Ce qui, vous en conviendrez, beaucoup plus simple pour l'esprit humain.
Il est aussi possible de mélanger dans un path les coordonnées relatives et absolues mais je vous le déconseille.
Pour préciser que les coordonnées d'un point sont exprimées en relatif il faut écrire les commandes en minuscule (l,h,v).

Attention les coordonnées x et y du point de départ du chemin c'est à dire les coordonnées qui suivent la commande M doivent toujours être exprimées en absolu !

Exemple de notation en relatif du chemin

SVG - balise path - notation en relatif des coordonnées du chemin dessiner un escalier : notation en relatif dessiner un zigzag : notation en relatif

Le code SVG correspondant

Chaque balise path a deux attributs : d et class !
Dans l'attribut d les commandes h,v, l sont écrites en minuscules !

Dans le premier path on une alternance : h 20 v 20
Dans le deuxième path on a une alternance : l 20, -20 l 20,20
Le premier chemin est fermé (commande z) ; ce qui n'est pas le cas du deuxième chemin (absence de commande z).

La virgule séparant l'abscisse de l'ordonnée est facultative. Donc vous pouvez parfaitement écrire les chemins de la façon suivante, par exemple : "M 10 280 l 20 -20 l 20 20 l 20 -20 ... "

Utilisez Inkscape pour produire le code correspondant aux chemins

Comme vous le constatez le code SVG devient un peu plus complexe. Mais bonne nouvelle vous pouvez demander à un logiciel d'encoder à votre place. Je veux parler de Inkscape.
Inkscape est un programme qui permet de produire des images vectorielles au format SVG.
Il comprend un éditeur WYSIWIG c'est à dire que vous dessinez des formes et le programme génère un fichier encodé en SVG.
Ci-dessous j'ai inséré dans la page un document Inkscape intitulé "svg_par_inkscape.svg".

Insertion avec la balise IMG comme pour une image matricielle.

Ci-dessous le code du document Inkscape.

Inkcape crée des regroupements (balise G) pour mettre en facteur commun certains attributs.
Ici fill ="none" s'applique aux quatre chemins.
stroke ="#000" (noir) s'applique aux trois derniers chemins

Je n'étais pas obligé d'insérer le document Inkscape dans la page HTML, je pouvais simplement coller ce code dans la page.
Rendu avec code SVG interne :

Notez que dans les deux cas (SVG externe ou SVG interne à la page) le rendu est identique !

Dessiner des courbes de Bézier (quadratique et cubique)

Comme vous savez il existe deux types de courbes de Bézier : les courbes quadratiques et les courbes cubiques.

Courbes quadratiques

Exemple

image SVG

Le code du fichier SVG inséré dans la page

Si vous utilisez Inkscape le document obtenu comprendra ces espaces de noms.

Notez qu'un fichier SVG peut comporter une feuille de style.
Il faut bien sûr utiliser les propriétés CSS de mise en forme qui sont spécifiques aux éléments SVG : fill, stroke, etc.
Pour le reste il n'y a aucune différence entre du code SVG interne ou externe.

Comme dans tout path la commande Q est précédée de la commande M avec les coordonnées du point de départ.

Pour comprendre le fonctionnement d’une courbe quadratiques il faut imaginer un segment de métal qui, attiré par un aimant (le point d'inflexion), se courbe vers ce point aimant (sans jamais le toucher).
Dans l'exemple Les deux points d'inflexion ont la même abcsisse (200) mais des ordonnées opposées : 5 et 195.
Donc la première ligne se courbe vers le haut et la deuxième se courbe vers le bas.

Courbes cubiques avec SVG

Exemple

image SVG

Le code du fichier SVG (extraits) inséré dans cette page

Les courbes de Bézier cubiques (ou tout simplement "courbes cubiques") sont semblables aux courbes de Bézier quadratiques à la différence qu’il y a deux points aimants.

Comme dans tout chemin la commande C est précédée de la commande M avec les coordonnées du point de départ.

Dans l'exemple les trois courbes cubiques ont le même point de départ et le même point d'arrivé mais la courbe de couleur bleue est plus creusée que la rouge car les ordonnées de ses deux points d'inflexion sont respectivement 0 et 200 alors que ces mêmes ordonnées sont seulement 50 et 150 pour la courbe rouge.

Faut-il rappeler que la commande c peut être écrite en minuscules suivie des coordonnées en relatif des points d'inflexion et du point d'arrivée c'est à dire par rapport au point de départ.
C'est la technique que j'ai réalisé pour la courbe verte.

Pour cette courbe verte les ordonnées des points d'inflexion sont respectivement -150 et 150 par rapport à l'ordonnée du point d'origine alors qu'elles sont -50 et 50 pour la courbe rouge et -100 et 100 pour la courbe bleue.
C'est pour cette raison que c'est la courbe verte la plus creusée.

Arcs de cercle et arcs d'ellipse

Pour dessiner des arcs, il y a deux solutions : une très compliquée et une très simple.

Solution très compliquée

La solution très compliquée consiste à encoder soi-même.

Exemple

Le code SVG que j'ai du saisir dans la page

Commentaire

Pour dessiner des arcs d'ellipse (de cercle) il faut employer la balise path avec la commande A (A comme arc).
La lettre A est précédée des coordonnées X,Y du point de départ de l'arc.

Solution très simple

Il s'agit en fait d'une astuce.

Exemples

Deux canevas SVG de front. L'un présente un arc de cercle (clair de lune) et l'autre un arc d'ellipse.

Le code correspondant

Le code CSS :
une classe définie comme suit : svg.front {display : inline-block ; margin-right : 10px ; }

Le code SVG :

Comme le premier canevas a comme couleur de fond "navy" donc le cercle (qui masque partiellement le rond jaune) doit être rempli de cette même couleur.
Le deuxième canevas n'a pas de couleur de fond défini donc par défaut c'est "white".
Admettez que c'est beaucoup plus simple que de créer un chemin avec 7 paramètres

Troisième solution

Vous vous en doutez, la troisème solution et la meilleure consiste à faire appel à Inskcape pour générer le code SVG.
Vous dessinez des ellipses puis vous convertissez en arcs d'ellipse et en précisant le type d'arc (camembert, arc ouvert, corde). Voir dans le même site le tutoriel Inkscape !
Si vous enregistrer le document au format "SVG optimisé" vous obtenez un code succinct et propre.
Il suffit ensuite d'ouvrir le document Inkscape via un éditeur tel NotePad puis de copier-coller ce code SVG dans votre page HTML.
Ci-dessous 4 formes dont une ellipse complète et trois arcs d'ellipse.

Le code SVG correspondant :

Notez que Inkscape a créé un groupe (balise G) pour mettre en facteur commun plusieurs paramètres de style : fill, stroke, stroke-width, etc.

Je me suis contenté de coller le code du document Inkscape dans la page puis de rajouter dans la balise SVG l'attribut width ="60%".
J'ai aussi supprimé dans cette balise SVG les espaces de noms qui sont inutiles en cas de SVG interne à une page web.