Class PathSvgNodeRenderer

java.lang.Object
com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer
com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer
All Implemented Interfaces:
IMarkerCapable, ISvgNodeRenderer

public class PathSvgNodeRenderer extends AbstractSvgNodeRenderer implements IMarkerCapable
ISvgNodeRenderer implementation for the <path> tag.
  • Field Details

  • Constructor Details

    • PathSvgNodeRenderer

      public PathSvgNodeRenderer()
  • Method Details

    • doDraw

      public void doDraw(SvgDrawContext context)
      Description copied from class: AbstractSvgNodeRenderer
      Draws this element to a canvas-like object maintained in the context.
      Specified by:
      doDraw in class AbstractSvgNodeRenderer
      Parameters:
      context - the object that knows the place to draw this element and maintains its state
    • createDeepCopy

      public ISvgNodeRenderer createDeepCopy()
      Description copied from interface: ISvgNodeRenderer
      Creates a deep copy of this renderer, including it's subtree of children
      Specified by:
      createDeepCopy in interface ISvgNodeRenderer
      Returns:
      deep copy of this renderer
    • getObjectBoundingBox

      public Rectangle getObjectBoundingBox(SvgDrawContext context)
      Description copied from interface: ISvgNodeRenderer
      Calculates the current object bounding box.
      Specified by:
      getObjectBoundingBox in interface ISvgNodeRenderer
      Parameters:
      context - the current context, for instance it contains current viewport and available font data
      Returns:
      the Rectangle representing the current object's bounding box, or null if bounding box is undefined
    • getShapeCoordinates

      private String[] getShapeCoordinates(IPathShape shape, IPathShape previousShape, String[] pathProperties)
      Gets the coordinates that shall be passed to IPathShape.setCoordinates(java.lang.String[], com.itextpdf.kernel.geom.Point) for the current shape.
      Parameters:
      shape - The current shape.
      previousShape - The previous shape which can affect the coordinates of the current shape.
      pathProperties - The operator and all arguments as an array of Strings
      Returns:
      a String array of coordinates that shall be passed to IPathShape.setCoordinates(java.lang.String[], com.itextpdf.kernel.geom.Point)
    • processPathOperator

      private List<IPathShape> processPathOperator(String[] pathProperties, IPathShape previousShape)
      Processes an individual pathing operator and all of its arguments, converting into one or more IPathShape objects.
      Parameters:
      pathProperties - The property operator and all arguments as an array of Strings
      previousShape - The previous shape which can affect the positioning of the current shape. If no previous shape exists null is passed.
      Returns:
      a List of each IPathShape that should be drawn to represent the operator.
    • addMoveToShapes

      private List<IPathShape> addMoveToShapes(IPathShape pathShape, String[] pathProperties, IPathShape beforeMoveShape)
    • getShapes

      Collection<IPathShape> getShapes()
      Processes the SvgConstants.Attributes.D AbstractSvgNodeRenderer.attributesAndStyles and converts them into one or more IPathShape objects to be drawn on the canvas.

      Each individual operator is passed to processPathOperator(String[], IPathShape) to be processed individually.

      Returns:
      a Collection of each IPathShape that should be drawn to represent the path.
    • concatenate

      private static String[] concatenate(String[] first, String[] second)
    • containsInvalidAttributes

      boolean containsInvalidAttributes(String attributes)
    • parsePathOperations

      Collection<String> parsePathOperations()
    • separateDecimalPoints

      String separateDecimalPoints(String input)
      Iterate over the input string and separate numbers from each other with space chars
    • splitPathStringIntoOperators

      static String[] splitPathStringIntoOperators(String path)
      Gets an array of strings representing operators with their arguments, e.g. {"M 100 100", "L 300 100", "L200, 300", "z"}
    • endsWithNonWhitespace

      private static boolean endsWithNonWhitespace(StringBuilder sb)
    • drawMarker

      public void drawMarker(SvgDrawContext context, MarkerVertexType markerVertexType)
      Description copied from interface: IMarkerCapable
      Draws a marker in the specified context. The marker is drawn on the vertices defined according to the given marker type.
      Specified by:
      drawMarker in interface IMarkerCapable
      Parameters:
      context - the object that knows the place to draw this element and maintains its state
      markerVertexType - type of marker that determine on which vertices of the given element marker should be drawn
    • getAutoOrientAngle

      public double getAutoOrientAngle(MarkerSvgNodeRenderer marker, boolean reverse)
      Description copied from interface: IMarkerCapable
      Calculates marker orientation angle if orient attribute is set to auto
      Specified by:
      getAutoOrientAngle in interface IMarkerCapable
      Parameters:
      marker - marker for which the rotation angle should be calculated
      reverse - indicates that the resulting angle should be rotated 180 degrees
      Returns:
      marker orientation angle so that its positive x-axis is pointing in the direction of the path at the point it is placed
    • getCurrentPoint

      private static Point getCurrentPoint(IPathShape previousShape)