Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.SVG Builder API permite configurar las propiedades SVG fill y stroke mediante programación con sintaxis fluida. La clase
PaintBuilder simplifica la creación de valores paint SVG, incluidos colores sólidos y referencias a paint servers como patterns y gradients, en aplicaciones C#.
La configuración de paint SVG se usa para fondos reutilizables, texturas decorativas, estilos de gráficos, rellenos de iconos y efectos vectoriales. Con builders anidados y métodos encadenados, la generación de SVG es más legible y fácil de mantener.
Este artículo explica cómo usar PaintBuilder, una clase builder para crear valores paint para elementos SVG. Esta clase se usa para especificar los valores de los atributos stroke o fill al aplicar colores, patterns o gradients.
PaintBuilder forma parte de Aspose.SVG Builder API y se usa para configurar valores SVG fill y stroke. Admite varios valores paint SVG:
Builder API utiliza un modelo de configuración fluida que simplifica la creación y el diseño de elementos SVG.
Los SVG patterns permiten rellenar formas con elementos gráficos repetidos en lugar de colores sólidos. Los patterns se definen una vez y pueden reutilizarse en varios elementos SVG. En el siguiente ejemplo,
PaintServerId() de PaintBuilder establece el valor fill como una referencia a un paint server por su Id.
1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO; 1// Create SVG pattern with polygons and apply as fill to rectangle using C# Builder API
2
3using (SVGDocument document = new SVGDocument())
4{
5 SVGSVGElement svg = new SVGSVGElementBuilder()
6 .Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
7 .ViewBox(0, 0, 400, 400)
8 .AddG(g => g
9 .AddPattern(p => p.Id("stars")
10 .ViewBox(0, 0, 20, 20)
11 .Width(5, LengthType.Percentage)
12 .Height(5, LengthType.Percentage)
13 .PatternUnits(CoordinateUnits.UserSpaceOnUse)
14 .AddPolygon(points: new double[] { 5, 0, 7, 3, 10, 5, 7, 7, 5, 10, 3, 7, 0, 5, 3, 3 }, fill: Color.Teal)
15 .AddPolygon(points: new double[] { 15, 0, 17, 3, 20, 5, 17, 7, 15, 10, 13, 7, 10, 5, 13, 3 }, fill: Color.DarkRed)
16 .AddPolygon(points: new double[] { 15, 10, 17, 13, 20, 15, 17, 17, 15, 20, 13, 17, 10, 15, 13, 13 }, fill: Color.DarkBlue)
17 )
18 .AddRect(r => r.Rect(20, 40, 440, 80).Fill(pt => pt.PaintServerId("stars")))
19 )
20 .Build(document.FirstChild as SVGSVGElement);
21 document.Save(Path.Combine(OutputDir, "pattern-stars.svg"));
22}En este ejemplo, primero se define un pattern con
AddPattern(), combinando polígonos de colores para crear un relleno complejo. El pattern recibe el identificador stars. Luego se aplica a un rectángulo con Fill() y PaintServerId("stars").

Los rellenos con patterns pueden aplicarse a rectángulos, círculos, rutas, polígonos y texto. Cualquier elemento SVG compatible con fill puede usar una referencia a paint server creada con PaintBuilder.
El siguiente ejemplo C# muestra cómo crear SVG patterns y aplicarlos a formas dentro del documento. El código muestra el enfoque de «constructor dentro de constructor», que utiliza varias clases constructoras, donde un constructor se anida dentro de otro para facilitar la construcción de objetos o estructuras complejos y proporcionar un enfoque modular и estructurado para la creación de documentos SVG:
1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO; 1// Create SVG patterns with reusable elements and apply them to circles using C# Builder API
2
3using (SVGDocument document = new SVGDocument())
4{
5 SVGSVGElement svg = new SVGSVGElementBuilder()
6 .Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
7 .ViewBox(0, 0, 600, 600)
8 .AddG(g => g
9 .FontFamily("Arial")
10 .FontSize(10)
11 .AddPattern(p => p.Id("Pat3a")
12 .Rect(0, 0, 20, 20)
13 .PatternUnits(CoordinateUnits.UserSpaceOnUse)
14 .AddRect(r => r.Rect(0, 0, 10, 10).Fill(Color.LightSlateGray))
15 .AddRect(r => r.Rect(10, 0, 10, 10).Fill(Color.Teal))
16 .AddRect(r => r.Rect(0, 10, 10, 10).Fill(Color.DarkRed))
17 .AddRect(r => r.Rect(10, 10, 10, 10).Fill(Color.Gold))
18 )
19 .AddPattern(p => p.Id("Pat3b")
20 .Href("#Pat3a")
21 .Width(23).Height(23)
22 )
23 .AddPattern(p => p.Id("Pat3c")
24 .Href("#Pat3a")
25 .Width(15).Height(15)
26 )
27 .AddCircle(circle => circle.Cx(90).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3a")))
28 .AddText(t => t.X(55).Y(50)
29 .AddContent("Pattern #Pat3a")
30 )
31 .AddCircle(circle => circle.Cx(240).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3b")))
32 .AddText(t => t.X(205).Y(50)
33 .AddContent("Pattern #Pat3b")
34 )
35 .AddCircle(circle => circle.Cx(390).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3c")))
36 .AddText(t => t.X(355).Y(50)
37 .AddContent("Pattern #Pat3c")
38 )
39 )
40 .Build(document.FirstChild as SVGSVGElement);
41 document.Save(Path.Combine(OutputDir, "patterns.svg"));
42}
El elemento <pattern> define una tesela reutilizable que se repite sobre la forma rellenada. En este ejemplo:
Width() y Height() definen el tamaño de la tesela repetida;PatternUnits(UserSpaceOnUse) usa coordenadas fijas para la repetición;El pattern puede reutilizarse en varios elementos SVG referenciando el mismo ID. Dimensiones menores generan repeticiones más densas, mientras que valores mayores aumentan el espaciado.
En el ejemplo, se agregan tres patterns diferentes, llamados Pat3a, Pat3b y Pat3c, al documento SVG.
La altura y la anchura de una tesela en un elemento de pattern definen el tamaño de la unidad de pattern repetida en el documento SVG. Este tamaño determina el aspecto del pattern cuando se aplica a formas o elementos. En el pattern Pat3b, al aumentar la altura y la anchura de la tesela se amplía la unidad de pattern, lo que da lugar a zonas sin rellenar (transparentes). En el pattern Pat3c, al reducir la altura y la anchura de la tesela el pattern parece más denso, creando un efecto visual diferente.
Por lo tanto, ajustar la altura y la anchura de la tesela en un elemento SVG <pattern> permite controlar la densidad y la repetición del pattern dentro del documento SVG y permite crear diversos efectos visuales.
Aspose.SVG Builder API permite crear SVG linear gradients reutilizables y aplicarlos a formas SVG mediante programación. Los gradients se usan en fondos, gráficos, botones y elementos decorativos.
1using Aspose.Svg.Builder;
2using System.Drawing;
3using System.IO;
4
5using (SVGDocument document = new SVGDocument())
6{
7 SVGSVGElement svg = new SVGSVGElementBuilder()
8 .Width(400).Height(200)
9 .ViewBox(0, 0, 400, 200)
10 .AddDefs(defs => defs
11 .AddLinearGradient(gradient => gradient
12 .Id("gradientFill")
13 .X1(0, LengthType.Percentage).Y1(0, LengthType.Percentage)
14 .X2(100, LengthType.Percentage).Y2(0, LengthType.Percentage)
15 .AddStop(stop => stop
16 .Offset(0, StopUnitType.Percentage)
17 .Attribute("stop-color", "gold"))
18 .AddStop(stop => stop
19 .Offset(100, StopUnitType.Percentage)
20 .Attribute("stop-color", "teal"))))
21 .AddRect(rect => rect
22 .Rect(20, 20, 360, 160)
23 .Fill(paint => paint.PaintServerId("gradientFill")))
24 .Build(document.FirstChild as SVGSVGElement);
25
26 document.Save(Path.Combine(OutputDir, "linear-gradient-fill.svg"));
27}El ejemplo crea una definición SVG <linearGradient> reutilizable dentro de <defs> y la aplica al relleno de un rectángulo.
AddLinearGradient() define la dirección y el identificador del gradient;AddStop() define los puntos de transición de color;PaintServerId("gradientFill") aplica el paint server del gradient al relleno del rectángulo y produce una referencia url(#gradientFill) en la salida SVG;| Problema | Causa | Solución |
|---|---|---|
| El pattern no es visible | ID de pattern incorrecto | Asegúrese de que PaintServerId() coincida con Id() |
| El pattern aparece estirado | La tesela es demasiado grande | Ajuste Width() y Height() del pattern |
| El pattern no se repite bien | Valor PatternUnits incorrecto | Use UserSpaceOnUse si necesita teselas fijas |
| El fill no se aplica | Pattern definido fuera del alcance accesible | Defina patterns antes de aplicarlos |
1. ¿Qué es un paint server en SVG?
Un paint server es un recurso SVG que proporciona valores fill o stroke. Los más comunes son patterns y gradients referenciados con url(#id).
2. ¿Puedo reutilizar el mismo SVG pattern en varias formas?
Sí. Un SVG pattern puede reutilizarse en varios elementos con el mismo ID mediante PaintServerId().
3. ¿Cuál es la diferencia entre UserSpaceOnUse y ObjectBoundingBox?
UserSpaceOnUse usa coordenadas fijas, mientras que ObjectBoundingBox escala el pattern respecto al tamaño del elemento destino.
4. ¿Por qué mi SVG pattern se ve estirado?
Suele ocurrir si la tesela del pattern es demasiado grande o si el sistema de coordenadas no coincide con el elemento destino.
5. ¿Puedo aplicar SVG patterns al texto?
Sí. Los elementos de texto SVG admiten fill y pueden usar patterns igual que las formas.
6. ¿PaintBuilder admite SVG gradients?
Sí. PaintBuilder admite referencias a paint servers para configurar gradients SVG mediante programación.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.