class EagleCAD::Package

Attributes

description[RW]
holes[R]
layers[R]
name[RW]
pads[R]

Public Class Methods

from_xml(element) click to toggle source

Create a new {Package} from an {REXML::Element} @param [REXML::Element] element The {REXML::Element} to parse

# File lib/eaglecad/package.rb, line 15
def self.from_xml(element)
    package = Package.new element.attributes['name']

    element.elements.each do |element|
        layer_number = element.attributes['layer'].to_i if element.attributes.has_key?('layer')
        case element.name
            when 'description'
                package.description = element.text
            when 'hole'
                package.holes.push Geometry::Hole.from_xml(element)
            when 'pad'
                package.pads.push Geometry::Pad.from_xml(element)
            else
                g = Geometry.from_xml(element)
                if g
                    package.push layer_number, g
                else
                    raise StandardError, "Unrecognized package element '#{element.name}'"
                end
        end
    end

    package
end
new(name) click to toggle source

@param [String] name The name of the {Package}

# File lib/eaglecad/package.rb, line 41
def initialize(name)
    @holes = []
    @layers = {}
    @layers.default_proc = proc {|hash, key| hash[key] = []}
    @name = name
    @pads = []
end

Public Instance Methods

push(layer_number, element) click to toggle source

Push a new element to the given layer number @param [Numeric] layer_number The layer to add the element to @param [Object] element The thing to push

# File lib/eaglecad/package.rb, line 52
def push(layer_number, element)
    layer = @layers[layer_number]
    layer.push element
end
to_xml() click to toggle source

Generate XML for the {Package} element @return [REXML::Element]

# File lib/eaglecad/package.rb, line 59
def to_xml
    REXML::Element.new('package').tap do |element|
        element.add_attribute('name', name)
        element.add_element('description').text = description

        holes.each {|hole| element.add_element hole.to_xml }
        pads.each {|pad| element.add_element pad.to_xml }

        layers.each do |number, layer|
            layer.each {|obj| element.add_element(obj.to_xml, {'layer' => number}) }
        end
    end
end