class Blender3d::ObjectReader

Attributes

file[R]
model[RW]

Public Class Methods

new(file, model = nil) click to toggle source
# File lib/blender-3d/object_reader.rb, line 6
def initialize(file, model = nil)
  @file, @model = file, model
  endian = @model.header.endian_code

  %w'c s l q'.each.with_index do |code, i|
    bytes = 1 << i
    bits = 8 * bytes
    name = 'int' + bits.to_s
    define_reader name, bytes, code + endian
    define_reader 'u' + name, bytes, code.upcase + endian
  end

  code = @model.header.little_endian? ? 'e' : 'g'
  define_reader 'float', 4, code
  define_reader 'double', 8, code.upcase

  define_reader 'pointer', @model.header.pointer_size, @model.header.size_code + endian
end

Public Instance Methods

read(length) click to toggle source
# File lib/blender-3d/object_reader.rb, line 29
def read(length)
  @file.read(length)
end
read_string() click to toggle source
# File lib/blender-3d/object_reader.rb, line 33
def read_string
  @file.gets("\0")
end
seek(position) click to toggle source
# File lib/blender-3d/object_reader.rb, line 37
def seek(position)
  @file.seek(position)
end
tell() click to toggle source
# File lib/blender-3d/object_reader.rb, line 41
def tell
  @file.tell
end

Private Instance Methods

define_reader(name, num_bytes, unpack_type) click to toggle source
# File lib/blender-3d/object_reader.rb, line 25
        def define_reader(name, num_bytes, unpack_type)
  instance_eval "def read_#{name}; @file.read(#{num_bytes}).unpack('#{unpack_type}').first end"
end