class Tracksperanto::Export::FlameStabilizerCornerpin::Sorter
The trackers for cornerpins should go in Z order, like this
TL(0)---->TR(1) / / / / BL(2)----->BR(3)
This “kinda tool” ensures that this is indeed taking place
Public Class Methods
new(exporter)
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 26 def initialize(exporter) @exp = exporter end
Public Instance Methods
end_export()
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 50 def end_export # We will have problems sorting if we have too few trackers return @exp.just_export(@corners, @width, @height) unless @corners.length == 4 # Sort the trackers, first in Y of the first keyframe in_y = sort_on_first_keyframe(@corners, :abs_y) # then on the X for the two separate blocks for top and bottom tl, tr = sort_on_first_keyframe(in_y[2..3], :abs_x) bl, br = sort_on_first_keyframe(in_y[0..1], :abs_x) bulk = [tl, tr, bl, br] # If we have less than 4 we might have a problem @exp.just_export(bulk, @width, @height) end
end_tracker_segment()
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 46 def end_tracker_segment # Just leave that end
export_point(f, x, y, r)
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 41 def export_point(f, x, y, r) return if @four_done @corners[-1].keyframe! :frame => f, :abs_x => x, :abs_y => y, :residual => r end
start_export(w,h)
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 30 def start_export(w,h) @width, @height = w, h @corners, @four_done = [], false end
start_tracker_segment(name)
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 35 def start_tracker_segment(name) @four_done = (@corners.length == 4) return if @four_done @corners.push(Tracksperanto::Tracker.new(:name => name)) end
Private Instance Methods
sort_on_first_keyframe(enum, property)
click to toggle source
# File lib/export/flame_stabilizer_cornerpin.rb, line 67 def sort_on_first_keyframe(enum, property) enum.sort{|a, b| a[0].send(property) <=> b[0].send(property) } end