class Mittsu::MTLLoader

Public Class Methods

new(base_url, options = {}) click to toggle source
# File lib/mittsu/loaders/mtl_loader.rb, line 5
def initialize(base_url, options = {})
  @base_url = base_url
  @options = options
end

Public Instance Methods

load(url) click to toggle source
# File lib/mittsu/loaders/mtl_loader.rb, line 10
def load(url)
  loader = FileLoader.new

  text = loader.load File.join(@base_url, url)
  parse(text)
end
parse(text) click to toggle source
# File lib/mittsu/loaders/mtl_loader.rb, line 17
def parse(text)
  lines = text.split("\n")
  info = {}
  delimiter_pattern = /\s+/
  materials_info = {}

  lines.each do |line|
                    line = line.strip

                    next if line.empty? || line.start_with?('#')

                    pos = line.index(' ')

                    key = ( pos >= 0 ) ? line[0...pos] : line
                    key = key.downcase

                    value = ( pos >= 0 ) ? line[pos + 1..-1] : ""
                    value = value.strip

                    if key == "newmtl"
                            info = { name: value };
                            materials_info[value] = info
                    elsif info
                            if key == "ka" || key == "kd" || key == "ks"
                                    info[key] = value.split(delimiter_pattern).take(3).map(&:to_f)
                            else
                                    info[key] = value
                            end
                    end
  end

  MaterialCreator.new(@base_url, @options).tap do |material_creator|
    material_creator.set_materials(materials_info)
  end
end