Class: Tracksperanto::Import::ShakeScript::TrackExtractor
- Inherits:
-
ShakeGrammar::Catcher
- Object
- ShakeGrammar::Lexer
- ShakeGrammar::Catcher
- Tracksperanto::Import::ShakeScript::TrackExtractor
- Includes:
- ZipTuples
- Defined in:
- lib/import/shake_script.rb
Overview
Extractor. Here we define copies of Shake’s standard node creation functions.
Constant Summary
Constants inherited from ShakeGrammar::Lexer
ShakeGrammar::Lexer::MAX_BUFFER_SIZE, ShakeGrammar::Lexer::MAX_STACK_DEPTH, ShakeGrammar::Lexer::STOP_TOKEN
Instance Attribute Summary
Attributes inherited from ShakeGrammar::Lexer
Instance Method Summary collapse
-
#atom_is_tracker_assignment?(a) ⇒ Boolean
An atom that is a tracker node will look like this [:assign, [:vardef, “Stabilize2”], [:retval, [:trk, <T “track1” with 116 keyframes>, <T “track2” with 116 keyframes>, <T “track3” with 116 keyframes>, <T “track4” with 89 keyframes>]]] a Stabilize though will look like this [:assign, [:vardef, “Stabilize1”], [:retval, [:trk, <T “track1” with 116 keyframes>, <T “track2” with 116 keyframes>, <T “track3” with 116 keyframes>]]].
-
#deep_include?(array_or_element, atom_name) ⇒ Boolean
Find whether the passed atom includes a [:trk] on any level.
-
#hermite(extrapolation_type, *keyframes) ⇒ Object
Hermite interpolation looks like this Hermite(0,@1,@2) The first value in the array is the keyframe value, the other two are tangent positions (which we discard).
-
#linear(extrapolation_type, *keyframes) ⇒ Object
(also: #nspline, #jspline)
For Linear() curve calls.
-
#matchmove(bgImage, fgImage, applyTransform, trackType, track1X, track1Y, matchX, matchY, track2X, track2Y, scale, rotation, track3X, track3Y, track4X, track4Y, *others) ⇒ Object
image = MatchMove( Background, Foreground, applyTransform, “trackType”, track1X, track1Y, matchX, matchY, track2X, track2Y, scale, rotation, track3X, track3Y, track4X, track4Y, x1, y1, x2, y2, x3, y3, x4, y4, “xFilter”, “yFilter”, motionBlur, shutterTiming, shutterOffset, referenceFrame, “compositeType”, clipMode, “trackRange”, “subPixelRes”, “matchSpace”, float referenceTolerance, “referenceBehavior”, float failureTolerance, “failureBehavior”, int limitProcessing, … );.
-
#push(atom) ⇒ Object
Normally, we wouldn’t need to look for the variable name from inside of the funcall.
-
#settimerange(str) ⇒ Object
SetTimeRange(“-5-15”) // sets time range of comp We use it to avoid producing keyframes which start at negative frames.
-
#stabilize(imageIn, applyTransform, inverseTransform, trackType, track1X, track1Y, stabilizeX, stabilizeY, track2X, track2Y, matchScale, matchRotation, track3X, track3Y, track4X, track4Y, *useless_args) ⇒ Object
stabilize { image In, int applyTransform, int inverseTransform const char * trackType, float track1X, float track1Y, int stabilizeX, int stabilizeY, float track2X, float track2Y, int matchScale, int matchRotation, float track3X, float track3Y, float track4X, float track4Y, const char * xFilter, const char * yFilter, const char * transformationOrder, float motionBlur, float shutterTiming, float shutterOffset, float referenceFrame, float aspectRatio, … };.
-
#tracker(input, trackRange, subPixelRes, matchSpace, referenceTolerance, referenceBehavior, failureTolerance, failureBehavior, limitProcessing, referencFrame, s1, s2, s3, s4, s5, s6, *trackers) ⇒ Object
image Tracker( image In, const char * trackRange, const char * subPixelRes, const char * matchSpace, float referenceTolerance, const char * referenceBehavior, float failureTolerance, const char * failureBehavior, int limitProcessing, float referencFrame … );.
Methods included from ZipTuples
Methods inherited from ShakeGrammar::Lexer
Constructor Details
This class inherits a constructor from Tracksperanto::ShakeGrammar::Lexer
Instance Method Details
#atom_is_tracker_assignment?(a) ⇒ Boolean
An atom that is a tracker node will look like this
- :assign, [:vardef, “Stabilize2”], [:retval, [:trk, <T “track1” with 116 keyframes>, <T “track2” with 116 keyframes>, <T “track3” with 116 keyframes>, <T “track4” with 89 keyframes>]]
-
a Stabilize though will look like this
- :assign, [:vardef, “Stabilize1”], [:retval, [:trk, <T “track1” with 116 keyframes>, <T “track2” with 116 keyframes>, <T “track3” with 116 keyframes>]]
77 78 79 |
# File 'lib/import/shake_script.rb', line 77 def atom_is_tracker_assignment?(a) deep_include?(a, :trk) end |
#deep_include?(array_or_element, atom_name) ⇒ Boolean
Find whether the passed atom includes a [:trk] on any level
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/import/shake_script.rb', line 62 def deep_include?(array_or_element, atom_name) return false unless array_or_element.is_a?(Array) return true if array_or_element[0] == atom_name array_or_element.each do | elem | return true if deep_include?(elem, atom_name) end false end |
#hermite(extrapolation_type, *keyframes) ⇒ Object
Hermite interpolation looks like this Hermite(0,@1,@2) The first value in the array is the keyframe value, the other two are tangent positions (which we discard)
95 96 97 98 99 |
# File 'lib/import/shake_script.rb', line 95 def hermite(extrapolation_type, *keyframes) report_progress("Translating Hermite curve, removing tangents") remap_keyframes_against_negative_at!(keyframes) keyframes.map{ |kf| [kf.at, kf.value[0]] } end |
#linear(extrapolation_type, *keyframes) ⇒ Object Also known as: nspline, jspline
For Linear() curve calls. If someone selected JSpline or Hermite it’s his problem. We put the frame number at the beginning since it works witih oru tuple zipper
83 84 85 86 87 |
# File 'lib/import/shake_script.rb', line 83 def linear(extrapolation_type, *keyframes) report_progress("Translating Linear animation") remap_keyframes_against_negative_at!(keyframes) keyframes.map { |kf| [kf.at , kf.value] } end |
#matchmove(bgImage, fgImage, applyTransform, trackType, track1X, track1Y, matchX, matchY, track2X, track2Y, scale, rotation, track3X, track3Y, track4X, track4Y, *others) ⇒ Object
image = MatchMove(
Background,
Foreground,
applyTransform,
"trackType",
track1X,
track1Y,
matchX,
matchY,
track2X,
track2Y,
scale,
rotation,
track3X,
track3Y,
track4X,
track4Y,
x1,
y1,
x2,
y2,
x3,
y3,
x4,
y4,
"xFilter",
"yFilter",
motionBlur,
shutterTiming,
shutterOffset,
referenceFrame,
"compositeType",
clipMode,
"trackRange",
"subPixelRes",
"matchSpace",
float referenceTolerance,
"referenceBehavior",
float failureTolerance,
"failureBehavior",
int limitProcessing,
...
);
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/import/shake_script.rb', line 222 def matchmove(bgImage, fgImage, applyTransform, trackType, track1X, track1Y, matchX, matchY, track2X, track2Y, scale, rotation, track3X, track3Y, track4X, track4Y, *others) report_progress("Parsing MatchMove node") [ collect_stabilizer_tracker("track1", track1X, track1Y), collect_stabilizer_tracker("track2", track2X, track2Y), collect_stabilizer_tracker("track3", track3X, track3Y), collect_stabilizer_tracker("track4", track4X, track4Y), ].compact.unshift(:trk) end |
#push(atom) ⇒ Object
Normally, we wouldn’t need to look for the variable name from inside of the funcall. However, in this case we DO want to take this shortcut so we know how the tracker node is called
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/import/shake_script.rb', line 49 def push(atom) return super unless atom_is_tracker_assignment?(atom) node_name = atom[1][-1] trackers = atom[2][1][1..-1] trackers.map do | tracker | tracker.name = [node_name, tracker.name].join("_") # THIS IS THE MOST IMPORTANT THINGO sentinel.tracker_proc.call(tracker) end end |
#settimerange(str) ⇒ Object
SetTimeRange(“-5-15”) // sets time range of comp We use it to avoid producing keyframes which start at negative frames
43 44 45 |
# File 'lib/import/shake_script.rb', line 43 def settimerange(str) sentinel.start_frame = str.to_i if str.to_i < 0 end |
#stabilize(imageIn, applyTransform, inverseTransform, trackType, track1X, track1Y, stabilizeX, stabilizeY, track2X, track2Y, matchScale, matchRotation, track3X, track3Y, track4X, track4Y, *useless_args) ⇒ Object
stabilize
image In,
int applyTransform,
int inverseTransform
const char * trackType,
float track1X,
float track1Y,
int stabilizeX,
int stabilizeY,
float track2X,
float track2Y,
int matchScale,
int matchRotation,
float track3X,
float track3Y,
float track4X,
float track4Y,
const char * xFilter,
const char * yFilter,
const char * transformationOrder,
float motionBlur,
float shutterTiming,
float shutterOffset,
float referenceFrame,
float aspectRatio,
...
;
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/import/shake_script.rb', line 160 def stabilize(imageIn, applyTransform, inverseTransform, trackType, track1X, track1Y, stabilizeX, stabilizeY, track2X, track2Y, matchScale, matchRotation, track3X, track3Y, track4X, track4Y, *useless_args) report_progress("Parsing Stabilize node") [ collect_stabilizer_tracker("track1", track1X, track1Y), collect_stabilizer_tracker("track2", track2X, track2Y), collect_stabilizer_tracker("track3", track3X, track3Y), collect_stabilizer_tracker("track4", track4X, track4Y), ].compact.unshift(:trk) end |
#tracker(input, trackRange, subPixelRes, matchSpace, referenceTolerance, referenceBehavior, failureTolerance, failureBehavior, limitProcessing, referencFrame, s1, s2, s3, s4, s5, s6, *trackers) ⇒ Object
image Tracker(
image In,
const char * trackRange,
const char * subPixelRes,
const char * matchSpace,
float referenceTolerance,
const char * referenceBehavior,
float failureTolerance,
const char * failureBehavior,
int limitProcessing,
float referencFrame
...
);
120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/import/shake_script.rb', line 120 def tracker(input, trackRange, subPixelRes, matchSpace, referenceTolerance, referenceBehavior, failureTolerance, failureBehavior, limitProcessing, referencFrame, s1, s2, s3, s4, s5, s6, *trackers) flat_tracks = if (s1 == "v2.0") # The Shake version stupid Winfucks users didn't get trackers else [s1, s2, s3, s4, s4, s6] + trackers end report_progress("Parsing Tracker node") collect_trackers_from(flat_tracks).unshift(:trk) end |