class EagleCAD::Symbol
Attributes
description[RW]
layers[R]
name[RW]
pins[R]
Public Class Methods
from_xml(element)
click to toggle source
Create a new {Symbol} from an {REXML::Element} @param [Element] element The {REXML::Element} to parse
# File lib/eaglecad/symbol.rb, line 12 def self.from_xml(element) symbol = Symbol.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 'circle' symbol.push layer_number, Geometry::Circle.from_xml(element) when 'description' symbol.description = element.text when 'pin' symbol.pins.push Geometry::Pin.from_xml(element) when 'polygon' symbol.push layer_number, Geometry::Polygon.from_xml(element) when 'rectangle' symbol.push layer_number, Geometry::Rectangle.from_xml(element) when 'smd' symbol.push layer_number, Geometry::SMD.from_xml(element) when 'text' symbol.push layer_number, Geometry::Text.from_xml(element) when 'wire' symbol.push layer_number, Geometry::Line.from_xml(element) else raise StandardError, "Unrecognized symbol element '#{element.name}'" end end symbol end
new(name)
click to toggle source
@param [String] name The name of the {Package}
# File lib/eaglecad/symbol.rb, line 43 def initialize(name) @layers = {} @layers.default_proc = proc {|hash, key| hash[key] = []} @name = name @pins = [] 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/symbol.rb, line 53 def push(layer_number, element) layer = @layers[layer_number] layer.push element end
to_xml()
click to toggle source
Generate XML for the {Symbol} element @return [REXML::Element]
# File lib/eaglecad/symbol.rb, line 60 def to_xml REXML::Element.new('symbol').tap do |element| element.add_attribute 'name', name element.add_element('description').text = description if description pins.each {|pin| element.add_element pin.to_xml } layers.each do |number, layer| layer.each {|obj| element.add_element(obj.to_xml, {'layer' => number}) } end end end