Sha256: e302dc4d1c7bc85cf1cf6d337cb33e0e06613ea6fc855a58ecef83d705f07630

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

class Tracksperanto::Import::Boujou < Tracksperanto::Import::Base
  
  def self.human_name
    "Boujou feature tracks export"
  end
  
  def parse(io)
    wrapped_io = Tracksperanto::ExtIO.new(io)
    detect_columns(wrapped_io)
    trackers = {}
    filtering_trackers_from(wrapped_io) do | name, frame, x, y |
      trackers[name] ||= Tracksperanto::Tracker.new(:name => name)
      report_progress("Extracting frame #{frame} of #{name}")
      trackers[name].keyframe!(:frame => (frame.to_i - 1), :abs_y => (@height.to_f - y.to_f), :abs_x => x)
    end
    trackers.values.sort{|a,b| a.name <=> b.name }
  end
  
  private
  
  COMMENT = /^# /
  
  def detect_columns(io)
    until io.eof? do 
      line = io.gets_and_strip
      if line =~ /^# track_id/
        report_progress("Detecting columns")
        return set_columns_from(line)
      end
    end
  end
  
  def set_columns_from(line)
    @columns = line.gsub(COMMENT, '').split
  end
  
  #
  #
  # # track_id    view      x    y
  # Target_track_1  5  252.046  171.677
  def filtering_trackers_from(io)
    until io.eof?
      line = io.gets_and_strip
      next if comment?(line)
      column = make_column_hash(line)
      yield(column["track_id"], column["view"], column["x"], column["y"])
    end
  end
  
  def make_column_hash(line)
    Hash[*@columns.zip(line.split).flatten]
  end
  
  def comment?(line)
    line =~ COMMENT
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tracksperanto-1.6.6 lib/import/boujou.rb
tracksperanto-1.6.5 lib/import/boujou.rb