/// <summary> /// Applies transformations set to this object, if any, and delegates the drawing of this element and its children /// to the /// <see cref="DoDraw(iText.Svg.Renderers.SvgDrawContext)">doDraw</see> /// method. /// </summary> /// <param name="context">the object that knows the place to draw this element and maintains its state</param> public void Draw(SvgDrawContext context) { PdfCanvas currentCanvas = context.GetCurrentCanvas(); if (this.attributesAndStyles != null) { String transformString = this.attributesAndStyles.Get(SvgConstants.Attributes.TRANSFORM); if (transformString != null && !String.IsNullOrEmpty(transformString)) { AffineTransform transformation = TransformUtils.ParseTransform(transformString); if (!transformation.IsIdentity()) { currentCanvas.ConcatMatrix(transformation); } } if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.ID)) { context.AddUsedId(attributesAndStyles.Get(SvgConstants.Attributes.ID)); } } /* If a (non-empty) clipping path exists, drawing operations must be surrounded by q/Q operators * and may have to be drawn multiple times */ if (!DrawInClipPath(context)) { PreDraw(context); DoDraw(context); PostDraw(context); } if (attributesAndStyles.ContainsKey(SvgConstants.Attributes.ID)) { context.RemoveUsedId(attributesAndStyles.Get(SvgConstants.Attributes.ID)); } }