### Home Classes Methods

### In Files

- lib/prawn/graphics.rb
- lib/prawn/graphics/transformation.rb
- lib/prawn/graphics/join_style.rb
- lib/prawn/graphics/color.rb
- lib/prawn/graphics/transparency.rb
- lib/prawn/graphics/dash.rb
- lib/prawn/graphics/cap_style.rb

### Namespace

- MODULE Prawn::Graphics::CapStyle
- MODULE Prawn::Graphics::Color
- MODULE Prawn::Graphics::Dash
- MODULE Prawn::Graphics::JoinStyle
- MODULE Prawn::Graphics::Transformation
- MODULE Prawn::Graphics::Transparency

### Methods

- #circle_at
- #curve
- #curve_to
- #ellipse_at
- #fill
- #fill_and_stroke
- #horizontal_line
- #horizontal_rule
- #line
- #line_to
- #line_width
- #line_width=
- #move_to
- #polygon
- #rectangle
- #rounded_polygon
- #rounded_rectangle
- #rounded_vertex
- #stroke
- #stroke_bounds
- #vertical_line

### Included Modules

- Prawn::Graphics::Color
- Prawn::Graphics::Dash
- Prawn::Graphics::CapStyle
- Prawn::Graphics::JoinStyle
- Prawn::Graphics::Transparency
- Prawn::Graphics::Transformation

### Files

- COPYING
- HACKING
- LICENSE
- README

### Class/Module Index

Quicksearch

- Prawn
- Prawn::Core
- Prawn::Document
- Prawn::Document::Annotations
- Prawn::Document::BoundingBox
- Prawn::Document::ColumnBox
- Prawn::Document::Destinations
- Prawn::Document::GraphicsState
- Prawn::Document::Internals
- Prawn::Document::PageGeometry
- Prawn::Document::Snapshot
- Prawn::Encoding
- Prawn::Errors
- Prawn::Font
- Prawn::Font::AFM
- Prawn::Font::DFont
- Prawn::Font::TTF
- Prawn::Graphics
- Prawn::Graphics::CapStyle
- Prawn::Graphics::Color
- Prawn::Graphics::Dash
- Prawn::Graphics::JoinStyle
- Prawn::Graphics::Transformation
- Prawn::Graphics::Transparency
- Prawn::Images
- Prawn::Images::JPG
- Prawn::Images::PNG
- Prawn::Measurements
- Prawn::Outline
- Prawn::Stamp
- Prawn::Text
- Prawn::Text::Box
- Prawn::Text::LineWrap
- File
- Numeric

No matching classes.

# Prawn::Graphics

Implements the drawing facilities for Prawn::Document. Use this to draw the most beautiful imaginable things.

This file lifts and modifies several of PDF::Writer's graphics functions ruby-pdf.rubyforge.org

### Constants

KAPPA

  This constant is used to approximate a symmetrical arc using a cubic Bezier curve.

### Public Instance Methods

circle_at(point, options) click to toggle source

Draws a circle of radius `:radius` with the centre-point at `point` as a complete subpath. The drawing point will be moved to the centre-point upon completion of the drawing the circle.

    pdf.circle_at [100,100], :radius => 25

    # File lib/prawn/graphics.rb, line 187
    def circle_at(point, options)
      x,y = point
      ellipse_at [x, y], options[:radius]
    end

curve(origin,dest, options={}) click to toggle source

Draws a Bezier curve between two points, bounded by two additional points

    pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]

    # File lib/prawn/graphics.rb, line 171
    def curve(origin,dest, options={})
      move_to(*origin)
      curve_to(dest,options)
    end

curve_to(dest,options={}) click to toggle source

Draws a Bezier curve from the current drawing position to the specified point, bounded by two additional points.

    pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]

    # File lib/prawn/graphics.rb, line 63
    def curve_to(dest,options={})
       options[:bounds] or raise Prawn::Errors::InvalidGraphicsPath,
         "Bounding points for bezier curve must be specified "+
         "as :bounds => [[x1,y1],[x2,y2]]"

       curve_points = (options[:bounds] << dest).map { |e| map_to_absolute(e) }
       add_content("%.3f %.3f %.3f %.3f %.3f %.3f c" %
                     curve_points.flatten )
    end

ellipse_at(point, r1, r2 = r1) click to toggle source

Draws an ellipse of `x` radius `r1` and `y` radius `r2` with the centre-point at `point` as a complete subpath. The drawing point will be moved to the centre-point upon completion of the drawing the ellipse.

    # draws an ellipse with x-radius 25 and y-radius 50
    pdf.ellipse_at [100,100], 25, 50

    # File lib/prawn/graphics.rb, line 200
    def ellipse_at(point, r1, r2 = r1)
      x, y = point
      l1 = r1 * KAPPA
      l2 = r2 * KAPPA

      move_to(x + r1, y)

      # Upper right hand corner
      curve_to [x,  y + r2],
        :bounds => [[x + r1, y + l1], [x + l2, y + r2]]

      # Upper left hand corner
      curve_to [x - r1, y],
        :bounds => [[x - l2, y + r2], [x - r1, y + l1]]

      # Lower left hand corner
      curve_to [x, y - r2],
        :bounds => [[x - r1, y - l1], [x - l2, y - r2]]

      # Lower right hand corner
      curve_to [x + r1, y],
        :bounds => [[x + l2, y - r2], [x + r1, y - l1]]

      move_to(x, y)
    end

fill() click to toggle source

Fills and closes the current path. See Graphic::Color for color details

    # File lib/prawn/graphics.rb, line 281
    def fill
      yield if block_given?
      add_content "f"
    end

fill_and_stroke() click to toggle source

Fills, strokes, and closes the current path. See Graphic::Color for color details

    # File lib/prawn/graphics.rb, line 288
    def fill_and_stroke
      yield if block_given?
      add_content "b"
    end

horizontal_line(x1,x2,options={}) click to toggle source

Draws a horizontal line from `x1` to `x2` at the current `y` position, or the position specified by the :at option.

    # draw a line from [25, 75] to [100, 75]
    horizontal_line 25, 100, :at => 75

    # File lib/prawn/graphics.rb, line 140
    def horizontal_line(x1,x2,options={})
      if options[:at]
        y1 = options[:at]
      else
        y1 = y - bounds.absolute_bottom
      end

      line(x1,y1,x2,y1)
    end

horizontal_rule() click to toggle source

Draws a horizontal line from the left border to the right border of the bounding box at the current `y` position.

    # File lib/prawn/graphics.rb, line 153
    def horizontal_rule
      horizontal_line(bounds.left, bounds.right)
    end

line(*points) click to toggle source

Draws a line from one point to another. Points may be specified as tuples or flattened argument list:

    pdf.line [100,100], [200,250]
    pdf.line(100,100,200,250)

    # File lib/prawn/graphics.rb, line 128
    def line(*points)
      x0,y0,x1,y1 = points.flatten
      move_to(x0, y0)
      line_to(x1, y1)
    end

line_to(*point) click to toggle source

Draws a line from the current drawing position to the specified point. The destination may be described as a tuple or a flattened list:

    pdf.line_to [50,50]
    pdf.line_to(50,50)

    # File lib/prawn/graphics.rb, line 53
    def line_to(*point)
      x,y = map_to_absolute(point)
      add_content("%.3f %.3f l" % [ x, y ])
    end

line_width(width=nil) click to toggle source

When called without an argument, returns the current line thickness. When called with an argument, sets the line thickness to the specified value (in PDF points)

    pdf.line_width #=> 1
    pdf.line_width(5)
    pdf.line_width #=> 5

    # File lib/prawn/graphics.rb, line 114
    def line_width(width=nil)
      if width
        self.line_width = width
      else
        (defined?(@line_width) && @line_width) || 1
      end
    end

line_width=(width) click to toggle source

Sets line thickness to the `width` specified.

    # File lib/prawn/graphics.rb, line 101
    def line_width=(width)
      @line_width = width
      add_content("#{width} w")
    end

move_to(*point) click to toggle source

Moves the drawing position to a given point. The point can be specified as a tuple or a flattened argument list

    pdf.move_to [100,50]
    pdf.move_to(100,50)

    # File lib/prawn/graphics.rb, line 42
    def move_to(*point)
      x,y = map_to_absolute(point)
      add_content("%.3f %.3f m" % [ x, y ])
    end

polygon(*points) click to toggle source

Draws a polygon from the specified points.

    # draws a snazzy triangle
    pdf.polygon [100,100], [100,200], [200,200]

    # File lib/prawn/graphics.rb, line 231
    def polygon(*points)
      move_to points[0]
      (points[1..-1] << points[0]).each do |point|
        line_to(*point)
      end
    end

rectangle(point,width,height) click to toggle source

Draws a rectangle given `point`, `width` and `height`. The rectangle is bounded by its upper-left corner.

    pdf.rectangle [300,300], 100, 200

    # File lib/prawn/graphics.rb, line 78
    def rectangle(point,width,height)
      x,y = map_to_absolute(point)
      add_content("%.3f %.3f %.3f %.3f re" % [ x, y - height, width, height ])
    end

rounded_polygon(radius, *points) click to toggle source

Draws a rounded polygon from specified points using the radius to define bezier curves

    # draws a rounded filled in polygon
     pdf.fill_and_stroke_rounded_polygon(10, [100, 250], [200, 300], [300, 250],
                   [300, 150], [200, 100], [100, 150])

    # File lib/prawn/graphics.rb, line 243
    def rounded_polygon(radius, *points)
      move_to point_on_line(radius, points[1], points[0])
      sides = points.size
      points << points[0] << points[1]
      (sides).times do |i|
        rounded_vertex(radius, points[i], points[i + 1], points[i + 2])
      end
    end

rounded_rectangle(point,width,height,radius) click to toggle source

Draws a rounded rectangle given `point`, `width` and `height` and `radius` for the rounded corner. The rectangle is bounded by its upper-left corner.

    pdf.rounded_rectangle [300,300], 100, 200, 10

    # File lib/prawn/graphics.rb, line 89
    def rounded_rectangle(point,width,height,radius)
      x, y = point
      rounded_polygon(radius, point, [x + width, y], [x + width, y - height], [x, y - height])
    end

rounded_vertex(radius, *points) click to toggle source

Creates a rounded vertex for a line segment used for building a rounded polygon requires a radius to define bezier curve and three points. The first two points define the line segment and the third point helps define the curve for the vertex.

    # File lib/prawn/graphics.rb, line 256
    def rounded_vertex(radius, *points)
      x0,y0,x1,y1,x2,y2 = points.flatten
      radial_point_1 = point_on_line(radius, points[0], points[1])
      bezier_point_1 = point_on_line((radius - radius*KAPPA), points[0], points[1] )
      radial_point_2 = point_on_line(radius, points[2], points[1])
      bezier_point_2 = point_on_line((radius - radius*KAPPA), points[2], points[1])
      line_to(radial_point_1)
      curve_to(radial_point_2, :bounds => [bezier_point_1, bezier_point_2])
    end

stroke() click to toggle source

Strokes and closes the current path. See Graphic::Color for color details

    # File lib/prawn/graphics.rb, line 268
    def stroke
      yield if block_given?
      add_content "S"
    end

stroke_bounds() click to toggle source

Draws and strokes a rectangle represented by the current bounding box

    # File lib/prawn/graphics.rb, line 275
    def stroke_bounds
      stroke_rectangle bounds.top_left, bounds.width, bounds.height
    end

vertical_line(y1,y2,params) click to toggle source

Draws a vertical line at the x cooordinate given by :at from y1 to y2.

    # draw a line from [25, 100] to [25, 300]
    vertical_line 100, 300, :at => 25

    # File lib/prawn/graphics.rb, line 162
    def vertical_line(y1,y2,params)
      line(params[:at],y1,params[:at],y2)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.