lib/import/pftrack.rb in tracksperanto-2.0.2 vs lib/import/pftrack.rb in tracksperanto-2.1.0
- old
+ new
@@ -1,23 +1,24 @@
class Tracksperanto::Import::PFTrack < Tracksperanto::Import::Base
def self.human_name
- "PFTrack .2dt file"
+ "PFTrack/PFMatchit .2dt file"
end
def self.distinct_file_ext
".2dt"
end
CHARACTERS_OR_QUOTES = /[AZaz"]/
+ INTS = /^\d+$/
def stream_parse(io)
until io.eof?
line = io.gets
next if (!line || line =~ /^#/)
if line =~ CHARACTERS_OR_QUOTES # Tracker with a name
- t = Tracksperanto::Tracker.new{|t| t.name = line.strip.gsub(/"/, '') }
+ t = Tracksperanto::Tracker.new{|t| t.name = unquote(line.strip) }
report_progress("Reading tracker #{t.name}")
parse_tracker(t, io)
send_tracker(t)
end
end
@@ -25,17 +26,33 @@
private
def parse_tracker(t, io)
first_tracker_line = io.gets.chomp
- if first_tracker_line =~ CHARACTERS_OR_QUOTES # PFTrack version 5 format
- first_tracker_line = io.gets.chomp
+ # We will be reading one line too many possibly, so we need to know
+ # where to return to in case we do
+ first_data_offset = io.pos
+ second_tracker_line = io.gets.chomp
+
+ # Camera name in version 5 format, might be integer might be string
+ if first_tracker_line =~ CHARACTERS_OR_QUOTES || second_tracker_line =~ INTS
+ # Add cam name to the tracker
+ t.name += ("_%s" % unquote(first_tracker_line))
+ num_of_keyframes = second_tracker_line.to_i
+ else
+ num_of_keyframes = first_tracker_line.to_i
+ # Backtrack to where we were on this IO so that the first line read will be the tracker
+ report_progress("Backtracking to the beginning of data block")
+ io.seek(first_data_offset)
end
- num_of_keyframes = first_tracker_line.to_i
(1..num_of_keyframes).map do | keyframe_idx |
report_progress("Reading keyframe #{keyframe_idx} of #{num_of_keyframes} in #{t.name}")
f, x, y, residual = io.gets.chomp.split
t.keyframe!(:frame => f, :abs_x => x, :abs_y => y, :residual => residual.to_f * 8)
end
+ end
+
+ def unquote(s)
+ s.gsub(/"/, '')
end
end
\ No newline at end of file