Path Builder – Créer des SVG Paths en C#

Créer un SVG Path avec Aspose.SVG

Les SVG paths sont l’une des fonctionnalités SVG les plus puissantes pour créer des graphiques vectoriels personnalisés, courbes, contours et formes complexes. Avec Aspose.SVG Builder API, les développeurs peuvent créer des SVG path elements en C# avec une syntaxe fluide lisible.

Cet article explique comment créer des SVG paths en C#, construire des graphiques vectoriels complexes par programmation et utiliser des SVG text paths avec Aspose.SVG for .NET.

Path Builder

La classe PathBuilder simplifie la création de SVG paths grâce à des méthodes pour les commandes courantes comme M, L, C, Q, A et Z.

Aspose.SVG Builder API fournit SVGPathElementBuilder pour construire des éléments SVG <path> par programmation. Avec PathBuilder, les commandes SVG path sont définies par des méthodes fluentes chaînées.

Les SVG paths sont utilisés pour:

Builders within Builders

SVG Builder API utilise des builders imbriqués pour définir intuitivement des structures SVG complexes. Dans l’exemple suivant, PathBuilder est un builder dans un builder: SVGSVGElementBuilder crée l’élément <svg>, tandis que PathBuilder construit l’élément <path> interne.

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1// Create an SVG path element with line commands using SVG Path Builder in C#
 2
 3// Initialize an SVG document
 4using (SVGDocument document = new SVGDocument())
 5{
 6    // Create an <svg> element with specified width, height and viewBox, and add a <path> element to it
 7    SVGSVGElement svg = new SVGSVGElementBuilder()
 8        .Width(200).Height(200)
 9        .ViewBox(0, 0, 150, 150)
10
11        .AddPath(p => p
12        // 'D' method defines the 'd' attribute, which contains the path data
13        .D(d => d
14        // 'M' sets the starting point of the path (Move to x=50, y=50)
15        .M(50, 50)
16        // 'L' draws a line from the current point to the new point (Line to x=100, y=50)
17        .L(100, 50)
18        // Another 'L' to draw a line to a new point (Line to x=100, y=100)
19        .L(100, 100)
20        // 'Z' closes the path by drawing a line to the starting point
21        .Z())
22        // Sets the fill color of the path to teal
23        .Fill(Color.Teal))
24        .Build(document.FirstChild as SVGSVGElement);
25
26    // Save the SVG document
27    document.Save(Path.Combine(OutputDir, "path.svg"));
28}

Fonctionnement du Path

Dans cet exemple, AddPath() définit un élément <path>. La méthode D() définit les SVG path data avec des commandes SVG path:

La syntaxe fluide simplifie la génération de SVG paths et rend les définitions plus faciles à lire et à maintenir.

SVG Path Commands pris en charge par PathBuilder

PathBuilder prend en charge les commandes SVG path absolues et relatives pour créer des lignes, courbes, arcs et graphiques vectoriels complexes.

CommandRelative CommandDescription
MmDéplacer le point courant
LlTracer une ligne droite
HhTracer une ligne horizontale
VvTracer une ligne verticale
CcTracer une courbe de Bézier cubique
SsTracer une courbe cubique lissée
QqTracer une courbe de Bézier quadratique
TtTracer une courbe quadratique lissée
AaTracer un arc elliptique
ZzFermer le path courant

Ajouter des SVG Path Data personnalisées

Les path data peuvent aussi être ajoutées directement sous forme de chaîne avec AddPathSegment().

1.D(d => d.AddPathSegment(
2    "M199 89 C206 66 235 25 270 30 286 38 298 59 310 73"
3))

Cette approche est utile lors de l’importation de SVG path data existantes ou de graphiques SVG générés par des outils externes.

Créer des SVG Curves et Bézier Paths

Les SVG paths prennent en charge les courbes de Bézier quadratiques et cubiques pour des graphiques vectoriels lisses et des contours complexes.

 1using Aspose.Svg.Builder;
 2using System.Drawing;
 3using System.IO;
 4
 5using (SVGDocument document = new SVGDocument())
 6{
 7    // Create an <svg> element with specified width, height and viewBox, and add a <path> element to it
 8    SVGSVGElement svg = new SVGSVGElementBuilder()
 9        .Width(500).Height(500)
10        .ViewBox(0, 0, 400, 400)
11
12        .AddPath(p => p
13            .D(d => d
14            .M(80, 210)
15            .Q(95, 110, 200, 200)
16            .T(350, 200)
17        )
18        // Sets the fill color of the path to red
19        .Fill(Color.Red))
20        .Build(document.FirstChild as SVGSVGElement);
21
22    // Save the SVG document
23    document.Save(Path.Combine(OutputDir, "curve-path.svg"));
24}

Dans cet exemple:

Les commandes de courbe sont utilisées dans les illustrations, graphiques, signatures et éléments SVG décoratifs.

SVG TextPath

SVG peut placer du texte le long d’un path défini par <path>. Cela se fait avec un élément <textPath> et l’attribut href.

1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
 1// Create SVG text along a path using SVG Builder in C#
 2
 3// Initialize an SVG document
 4using (SVGDocument document = new SVGDocument())
 5{
 6    // Create an <svg> element with specified width, height, and viewBox, and add into it <path> elements
 7    SVGSVGElement svg = new SVGSVGElementBuilder()
 8        .Width(1200).Height(300)
 9        .ViewBox(0, 0, 1200, 300)
10
11        .AddPath(p => p.Id("Path1")
12            .Fill(f => f.None()).Stroke(Color.IndianRed).Transform(t => t.Translate(-100, 40))
13            .D(d => d.AddPathSegment("M 199 89 C 206 66 235 25 270 30 286 38 298 59 310 73 321 87 338 99 356 103 387 111 396 90 410 85"))
14         )
15
16        .AddPath(p => p.Id("Path2")
17            .Fill(f => f.None()).Stroke(Paint.None).Transform(t => t.Translate(400, -100))
18            .D(d => d.M(80, 210).Q(95, 110, 200, 200).T(400, 200)))
19
20
21         .AddText(t => t.FontSize(30).Fill(Color.Teal)
22             .AddTextPath(tp => tp
23                 .Href("#Path1")
24                 .AddContent("SVG textPath element")
25              )
26             .AddTextPath(tp => tp
27                  .Href("#Path2")
28                  .AddContent("SVG can place text along a path")
29              )
30         )
31
32        .Build(document.FirstChild as SVGSVGElement);
33
34    // Save the SVG document
35    document.Save(Path.Combine(OutputDir, "text-path.svg"));
36}

Dans l’exemple, deux paths avec des attributs id différents sont créés. Le premier utilise AddPathSegment(), le second utilise M(), Q() et T(). L’élément SVG <textPath> référence l’id du <path> et affiche le texte le long de ce path:

Visualisation du fichier text-path.svg avec du texte suivant des courbes SVG.

Les builders within builders sont également utilisés: SVGSVGElementBuilder crée <svg>, tandis que des builders imbriqués ajoutent <path>, <text> et <textPath>.

Erreurs courantes et corrections

ProblèmeCause possibleCorrection recommandée
Le SVG path n’est pas visibleStyles fill ou stroke manquantsAppliquer Fill() ou Stroke()
La forme du path semble incomplèteLe path n’est pas ferméUtiliser Z()
Le texte ne suit pas la courbeRéférence de path incorrecteVérifier que Href() correspond à Id()
Les courbes semblent déforméesPoints de contrôle incorrectsAjuster les points de contrôle Bézier
Les path data importées ne s’affichent pasSyntaxe SVG path invalideValider la chaîne SVG path avant l’import

Quick Recipes

1. Créer un triangle simple

 1using (SVGDocument document = new SVGDocument())
 2{
 3    SVGSVGElement svg = new SVGSVGElementBuilder()
 4        .Width(200).Height(200)
 5        .ViewBox(0, 0, 150, 150)
 6        .AddPath(p => p
 7            .D(d => d
 8            .M(50, 150)
 9            .L(150, 150)
10            .L(100, 50)
11            .Z())
12        .Fill(Color.Teal))
13        .Build(document.FirstChild as SVGSVGElement);
14    document.Save("triangle.svg");
15}

2. Ajouter un path segment

1    .AddPath(p => p
2        .Fill(Color.IndianRed)
3        .D(d => d.AddPathSegment("M10 75 Q150 0 290 75"))
4        )

3. Combiner plusieurs segments

 1    .AddPath(p => p
 2    .Fill(Color.CadetBlue)
 3    .Stroke(Color.Red)
 4    .StrokeWidth(2)
 5    .D(d => d
 6        .AddPathSegment("M40 120")
 7        .AddPathSegment("C70 20 140 20 170 120")
 8        .AddPathSegment("S270 220 300 120")
 9        .AddPathSegment("Q250 180 170 170")
10        .AddPathSegment("Q90 160 40 120")
11        )
12    )

Note: Le premier recipe est un exemple complet avec les directives using indiquées plus haut. Les autres recipes sont des fragments à intégrer dans un workflow complet de création SVG.

FAQ

1. PathBuilder est-il préférable aux SVG path strings manuelles?
Pour les graphiques SVG complexes, PathBuilder est généralement plus facile à maintenir et à déboguer.

2. Pourquoi utiliser SVG paths plutôt que des shapes simples?
Les SVG paths sont plus flexibles que <rect> ou <circle> et peuvent représenter des formes complexes, des courbes et des graphiques vectoriels.

3. Puis-je convertir des SVG path data existantes en commandes PathBuilder?
Oui. Les valeurs existantes de l’attribut d peuvent être traduites en commandes PathBuilder ou ajoutées avec AddPathSegment().

4. Les SVG paths sont-ils indépendants de la résolution?
Oui. Ils sont vectoriels et se redimensionnent sans perte de qualité.

5. Un SVG path peut-il contenir plusieurs formes séparées?
Oui. Un path peut contenir plusieurs subpaths avec plusieurs commandes M.

6. Quelle est la différence entre commandes relatives et absolues?
Les commandes absolues utilisent des coordonnées fixes, tandis que les commandes relatives calculent les positions depuis le point courant.

Ressources connexes

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.