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>]]
73 74 75 |
# File 'lib/import/shake_script.rb', line 73 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
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/import/shake_script.rb', line 58 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)
91 92 93 94 95 |
# File 'lib/import/shake_script.rb', line 91 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
79 80 81 82 83 |
# File 'lib/import/shake_script.rb', line 79 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,
...
);
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/import/shake_script.rb', line 218 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
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/import/shake_script.rb', line 45 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
39 40 41 |
# File 'lib/import/shake_script.rb', line 39 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,
...
;
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/import/shake_script.rb', line 156 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
...
);
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/import/shake_script.rb', line 116 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 |