Sha256: 2df44769e1a6e3adda0ea9832489b23ee6cd64446235674ce7a97a5554f4d24d

Contents?: true

Size: 1.69 KB

Versions: 9

Compression:

Stored size: 1.69 KB

Contents

class Tracksperanto::Import::MatchMover < Tracksperanto::Import::Base
  
  def self.autodetects_size?
    true
  end
  
  def self.human_name
    "MatchMover .rz2 file"
  end
  
  def self.distinct_file_ext
    ".rz2"
  end
  
  def each
    detect_format(@io)
    extract_trackers(@io) { |t| yield(t) }
  end
  
  private
  
  def detect_format(io)
    report_progress("Detecting width and height")
    lines = (0..2).map{ io.gets }
    last_line = lines[-1]
    w, h, _ = last_line.scan(/(\d+)/).flatten
    @width, @height = w.to_i, h.to_i
  end
  
  def extract_trackers(io)
    while(line = io.gets) do
      yield(extract_track(line, io)) if line =~ /^pointTrack/
    end
  end
  
  def extract_track(start_line, io)
    tracker_name = start_line.scan(/\"([^\"]+)\"/).flatten[0]
    report_progress("Extracting tracker #{tracker_name}")
    t = Tracksperanto::Tracker.new(:name => tracker_name)
    while(line = io.gets) do
      return t if line =~ /\}/
      t.keyframes.push(extract_key(line.strip)) if line =~ /^(\s+?)(\d)/
      report_progress("Extracting keyframe")
    end
    raise "Track didn't close"
  end
  
  LINE_PATTERN = /(\d+)(\s+)([\-\d\.]+)(\s+)([\-\d\.]+)(\s+)(.+)/
  
  def extract_key(line)
    frame, x, y, residual, rest = line.scan(LINE_PATTERN).flatten.reject{|e| e.strip.empty? }
    Tracksperanto::Keyframe.new(
      :frame => (frame.to_i() - 1),
      :abs_x => x,
      :abs_y => @height - y.to_f, # Top-left in MM
      :residual => extract_residual(residual)
    )
  end
  
  def extract_residual(residual_segment)
    # Parse to the first opening brace and pick the residual from there
    float_pat = /([\-\d\.]+)/
    1 - residual_segment.scan(float_pat).flatten.shift.to_f
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
tracksperanto-2.5.0 lib/import/match_mover.rb
tracksperanto-2.4.1 lib/import/match_mover.rb
tracksperanto-2.3.3 lib/import/match_mover.rb
tracksperanto-2.3.2 lib/import/match_mover.rb
tracksperanto-2.3.1 lib/import/match_mover.rb
tracksperanto-2.3.0 lib/import/match_mover.rb
tracksperanto-2.2.4 lib/import/match_mover.rb
tracksperanto-2.2.2 lib/import/match_mover.rb
tracksperanto-2.2.0 lib/import/match_mover.rb