Scalable Vector Graphics

La notion de graphisme vectoriel

Quelques formats vectoriels

Pendant longtemps, pas de standard. Raisons commerciales

Les formats sont plus ou moins développés :

Inclusion de SVG dans un document HTML

(Attention, dépend du navigateur)

Principes de SVG

(transposables à la plupart des formats vectoriels)

Formes géométriques simples

Styles

Couleur et remplissage

la propriété fill indique le remplissage. Elle peut valoir :

Les propriétés définissant le contour :

Formes complexes : Chemins

Courbes de bézier

Outre les commandes M, L, Z vues précédemment, les chemins peuvent comporter des courbes. Le système le plus général est celui des courbes de bézier cubique (commande C).
	  <path d="M100,100 C120,20 170,210 200,100"/>
      

Groupes

La balise <g> permet de créer un groupe. Les groupes permettent de partager des styles, et de déplacer plusieurs éléments en leur associant une transformation.

	  <svg xmlns="http://www.w3.org/2000/svg">
	    <g style="fill: red;" transform="translate(30, 30)">
	      <circle cx="10" cy="10" r="10"/>
	      <circle cx="30" cy="10" r="10"/>
	    </g>
	    <g style="fill: green;" transform="translate(100,60), rotate(30)">
	      <circle cx="10" cy="10" r="10"/>
	      <circle cx="30" cy="10" r="10"/>
	    </g>
	  </svg>
      

Le groupe vert est tourné de 30°, puis translaté en 100, 60.

SVG et Javascript

Rappel : quand un événement se produit (onclick, etc...) sur un élément HTML, on peut le passer au script qui le traite en nommant la variable event.

mais... quand un événement se produit sur un élément SVG, la variable à utiliser est evt

Exemple : un mouvement sur le grand cercle déclenchera l'affichage des coordonnées ; un clic sur ce même cercle fera passer le second cercle en bleu.

un texte
	<svg xmlns="http://www.w3.org/2000/svg">
	<circle cx="40" cy="40" r="40" onmousemove="montrerEvenement(evt)" onclick="mettreEnBleu(evt)"/>
	<circle id="cercle2" cx="100" cy="40" r="10"/>
	<text x="10" y="100" id="t1">un texte</text>
      </svg>
      <script>
	
	function mettreEnBleu(e) {
		document.getElementById('cercle2').setAttributeNS(null, "fill", "blue");
	}

	function montrerEvenement(e) {
		t=document.getElementById('t1');
		// innerHTML ne fonctionne pas ici
		t.removeChild(t.firstChild);
	        var evInfo = "click : "+ e.clientX+","+e.clientY;
	        t.appendChild(document.createTextNode("événement"+ e+  " " + evInfo));
	}
      </script>

      

Créer du SVG en javascript

Animation

Svg permet aussi des animations fluides sans utiliser javascript (ne fonctionne pas partout). On trouvera des exemples sur http://www.w3schools.com/svg/svg_examples.asp

Outils