Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
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.
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:
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}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.
PathBuilder prend en charge les commandes SVG path absolues et relatives pour créer des lignes, courbes, arcs et graphiques vectoriels complexes.
| Command | Relative Command | Description |
|---|---|---|
M | m | Déplacer le point courant |
L | l | Tracer une ligne droite |
H | h | Tracer une ligne horizontale |
V | v | Tracer une ligne verticale |
C | c | Tracer une courbe de Bézier cubique |
S | s | Tracer une courbe cubique lissée |
Q | q | Tracer une courbe de Bézier quadratique |
T | t | Tracer une courbe quadratique lissée |
A | a | Tracer un arc elliptique |
Z | z | Fermer le path courant |
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.
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:
Q() crée une courbe de Bézier quadratique;T() poursuit automatiquement la courbe lissée.Les commandes de courbe sont utilisées dans les illustrations, graphiques, signatures et éléments SVG décoratifs.
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:

Les builders within builders sont également utilisés: SVGSVGElementBuilder crée <svg>, tandis que des builders imbriqués ajoutent <path>, <text> et <textPath>.
| Problème | Cause possible | Correction recommandée |
|---|---|---|
| Le SVG path n’est pas visible | Styles fill ou stroke manquants | Appliquer Fill() ou Stroke() |
| La forme du path semble incomplète | Le path n’est pas fermé | Utiliser Z() |
| Le texte ne suit pas la courbe | Référence de path incorrecte | Vérifier que Href() correspond à Id() |
| Les courbes semblent déformées | Points de contrôle incorrects | Ajuster les points de contrôle Bézier |
| Les path data importées ne s’affichent pas | Syntaxe SVG path invalide | Valider la chaîne SVG path avant l’import |
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.
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.
stroke et fill.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.