#!/usr/bin/env ruby require "erb" TEMPLATE = < ]; <% objects.each_pair do |obj_name, obj_array| %> int[][][] <%= obj_name %> = [ <%= obj_array.map {|oa| "[" + oa.map {|o| o.inspect}.join(",\n ") + "]"}.join(",\n ") %> ]; <% end %> EOF def main(obj_fname, d_fname) objects = {} vertices = [] cur_obj = nil File.read(obj_fname).each_line do |line| if line =~ /^v\s+(\S+)\s+(\S+)/ vertices << [$1.to_f, $2.to_f] elsif line =~ /^o\s+(..)-(\d+)/ obj_class, obj_class_index = $1, $2.to_i objects[obj_class] ||= [] objects[obj_class][obj_class_index] ||= [] cur_obj = objects[obj_class][obj_class_index] elsif line =~ /^o\s+(.*)/ raise "Do not know how to handle object #{$1.inspect}" elsif line =~ /^f\s+(\d+)\s+(\d+)\s+(\d+)/ cur_obj << [$1, $2, $3].map(&:to_i) elsif line =~ /^l\s+(\d+)\s+(\d+)/ cur_obj << [$1, $2].map(&:to_i) end end File.open(d_fname, "w") do |fh| fh.puts ERB.new(TEMPLATE, nil, "<>").result(binding) end end main(*ARGV)