Transformaciones SVG – ejemplos de C#

En SVG, las transformaciones se utilizan para modificar la posición, el tamaño, la orientación y la inclinación de los elementos SVG dentro del lienzo SVG. Los objetos SVG se pueden transformar utilizando las propiedades del atributo de transformación: traducir, escalar, rotar, skewX, skewY y matriz. Usando Aspose.SVG para la biblioteca .NET, puede realizar estas transformaciones mediante programación. En este capítulo se ofrece una descripción general de cómo podría trabajar con transformaciones utilizando Aspose.SVG.

El capítulo actual describe transformaciones SVG populares, así como ejemplos de C# para los escenarios de transformación más comunes.

  • Rotar SVG: este artículo cubrió ejemplos de C# para la rotación de SVG. Casos considerados de uso de la función rotate() en el atributo transform así como de una matriz de transformación matrix(a,b,c,d,e,f).
  • Escalado SVG: este artículo ha cubierto ejemplos de C# para el escalado SVG.
  • Traducir SVG: en esta sección, aprenderá cómo traducir SVG mediante programación en C#.

Algunas formas de transformar SVG en C#

  1. Usando las propiedades del atributo transform. Las propiedades de atributos de transformación en SVG le permiten manipular elementos utilizando las siguientes funciones de transformación:
  1. Usando la Matriz de Transformación. La matriz de transformación es una forma matemática de describir transformaciones SVG. La matriz incluye valores de escala, rotación, sesgo y traslación, lo que proporciona más flexibilidad para transformaciones complejas. La matriz de transformación combina transformaciones de traslación, escala, rotación y sesgo.

Estas dos formas ofrecen diferentes niveles de complejidad y precisión, siendo el atributo transform más fácil para transformaciones simples, mientras que la matriz de transformación permite un mayor control sobre el proceso de transformación. Veamos estos métodos usando ejemplos de C# para una transformación SVG, como la traducción SVG.

Transformación SVG – Función Translate()

El siguiente fragmento de código C# demuestra cómo crear un elemento SVG <rect>, establecer sus atributos y aplicar una transformación de traducción utilizando el atributo transform. La transformación mueve el rectángulo 150 unidades hacia la derecha y 50 unidades hacia abajo.1. Cree una instancia de la clase SVGDocument. La propiedad RootElement apunta al elemento raíz <svg> del documento. 2. Cree un elemento <rect> con atributos y agréguelo al elemento <svg>: - Puede utilizar el método CreateElementNS() para crear una instancia de la clase SVGRectElement. - Llame al método SetAttribute(name, value) para establecer atributos que especifiquen la posición, el tamaño, el relleno y la transformación. El atributo transform se establece en el elemento <rect> usando el valor "translate(150, 50)". Esto aplica una transformación de traslación que mueve el rectángulo 150 unidades hacia la derecha y 50 unidades hacia abajo. 3. Para agregar rectElement a svgElement, puede usar el método AppendChild(). 4. Llame al método Save() para guardar la imagen SVG resultante en un archivo local especificado por la ruta.

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5	// Create a new SVG document
 6	using (var document = new SVGDocument())
 7	{
 8		var svgElement = document.RootElement;
 9
10		// Create a <rect> element and set its attributes
11		var rectElement = (SVGRectElement)document.CreateElementNS("http://www.w3.org/2000/svg", "rect");
12		rectElement.X.BaseVal.Value = 50;
13		rectElement.Y.BaseVal.Value = 50;
14		rectElement.Width.BaseVal.Value = 100;
15		rectElement.Height.BaseVal.Value = 100;
16		rectElement.SetAttribute("fill", "blue");
17
18		// Apply translate() function to the rectangle
19		rectElement.SetAttribute("transform", "translate(150, 50)");
20
21		// Append the <rect> element to the <svg> element
22		svgElement.AppendChild(rectElement);
23
24		// Save the document
25		document.Save(Path.Combine(OutputDir, "translate.svg"));
26	}

Matriz de transformación SVG

Aquí, veremos el ejemplo de C# como el anterior: crearemos un elemento SVG <rect>, estableceremos sus atributos e implementaremos la traducción usando una matriz de transformación. Echemos un vistazo más de cerca al código C# para implementar la matriz de transformación.

  1. Utilice el método GetCTM() de la clase SVGGraphicsElement que devuelve la matriz de transformación actual (CTM) asociada con el elemento <rect>. El CTM representa las transformaciones acumulativas aplicadas al elemento e incluye información sobre traslación, rotación, escala y sesgo que se pueden aplicar al elemento.
  2. Después de obtener el CTM, utilice el método Translate() que multiplica posteriormente una transformación de traducción en la matriz actual y devuelve la matriz resultante. El método Translate(dx, dy) toma dos argumentos, dx y dy, que representan distancias de traslación horizontal y vertical, respectivamente.
  3. Construya un transformAttribute: una representación de cadena de una matriz de transformación 2D utilizando los valores de la transformationMatrix modificada. La notación matricial es matrix(a, b, c, d, e, f).
  4. Llame al método SetAttribute() para establecer el atributo transform del elemento <rect> usando la cadena transformAttribute.
 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5	// Create a new SVG document
 6	using (var document = new SVGDocument())
 7	{
 8		var svgElement = document.RootElement;
 9
10		// Create a <rect> element and set its attributes
11		var rectElement = (SVGRectElement)document.CreateElementNS("http://www.w3.org/2000/svg", "rect");
12		rectElement.X.BaseVal.Value = 150;
13		rectElement.Y.BaseVal.Value = 50;
14		rectElement.Width.BaseVal.Value = 100;
15		rectElement.Height.BaseVal.Value = 100;
16		rectElement.SetAttribute("fill", "blue");
17		svgElement.AppendChild(rectElement);
18
19		// Get the current transformation matrix associated with the rectElement
20		var transformationMatrix = rectElement.GetCTM();
21		transformationMatrix = transformationMatrix.Translate(150, 50);
22
23		// Apply the transformation matrix to the rectElement
24		var transformAttribute = "matrix(" + transformationMatrix.A + "," + transformationMatrix.B + ","
25			+ transformationMatrix.C + "," + transformationMatrix.D + "," + transformationMatrix.E + ","
26			+ transformationMatrix.F + ")";
27		rectElement.SetAttribute("transform", transformAttribute);
28
29		// Save the document
30		document.Save(Path.Combine(OutputDir, "translation-matrix.svg"));
31	}

Ver también

Puede descargar los ejemplos completos y los archivos de datos desde GitHub.

Encontrará información sobre la descarga desde GitHub y la ejecución de ejemplos en la sección Cómo ejecutar los ejemplos.

Para aprender a utilizar una matriz de transformación para rotar, escalar, traducir y sesgar gráficos SVG y considerar ejemplos de código SVG, consulte el artículo Matriz de transformación: ejemplos de código SVG.

Lea el artículo Transformación SVG para obtener más información y obtener ejemplos de código SVG para rotar, escalar, mover y sesgar gráficos SVG utilizando el atributo de transformación SVG.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.