class Laser::Cutter::Renderer::LayoutRenderer

Public Class Methods

new(config) click to toggle source
Calls superclass method Laser::Cutter::Renderer::Base::new
# File lib/laser-cutter/renderer/layout_renderer.rb, line 7
def initialize(config)
  self.config = config
  super(config)
end

Public Instance Methods

calculate_image_boundary(box_renderer, margin) click to toggle source
# File lib/laser-cutter/renderer/layout_renderer.rb, line 50
def calculate_image_boundary(box_renderer, margin)
  box_renderer.enclosure.to_a[1].map do |c|
    c.send(config.units.to_sym) + 2 * margin
  end
end
render() click to toggle source
# File lib/laser-cutter/renderer/layout_renderer.rb, line 12
def render
  renderer = self
  renderers = []

  box_renderer = BoxRenderer.new(config)
  renderers << box_renderer

  if config.metadata
    meta_renderer = MetaRenderer.new(config)
    renderers << meta_renderer
    box_renderer.ensure_space_for(meta_renderer.enclosure)
  end

  if config.debug
    unkerfed_config = Laser::Cutter::Configuration.new(config.to_hash)
    unkerfed_config.merge!(kerf: 0.0, color: 'DD2211')
    unkerfed_box_renderer = BoxRenderer.new(unkerfed_config)
    unkerfed_box_renderer.ensure_space_for(meta_renderer.enclosure) if meta_renderer
    renderers << unkerfed_box_renderer
  end

  margin = config.margin.to_f.send(config.units.to_sym)
  page_size = config.page_size || calculate_image_boundary(box_renderer, margin)

  pdf = Prawn::Document.new(:margin => margin,
                            :page_size => page_size,
                            :page_layout => self.config.page_layout.to_sym)

  pdf.instance_eval do
    renderers.each {|r|  r.render(self) }
    render_file(renderer.config.file)
  end

  if config.verbose
    puts "PDF saved to #{config.file}."
  end
end