|
AnishGulati |
12ca25 |
"""
|
|
AnishGulati |
12ca25 |
Stores the functions required for adjusting time factor in the neighbouring
|
|
AnishGulati |
12ca25 |
waypoints in Synfig
|
|
AnishGulati |
12ca25 |
"""
|
|
AnishGulati |
decf6d |
|
|
AnishGulati |
12ca25 |
import sys
|
|
AnishGulati |
668236 |
sys.path.append("../")
|
|
AnishGulati |
668236 |
|
|
AnishGulati |
decf6d |
|
|
AnishGulati |
668236 |
def time_adjust(lottie, animated):
|
|
AnishGulati |
12ca25 |
"""
|
|
AnishGulati |
12ca25 |
Adjusts the tangents between neighbouring waypoints depending upon the time
|
|
AnishGulati |
12ca25 |
factor between previous waypoints or next waypoints
|
|
AnishGulati |
0f1f11 |
|
|
AnishGulati |
0f1f11 |
Args:
|
|
AnishGulati |
0f1f11 |
lottie (dict) : Holds bezier curve in Lottie format
|
|
AnishGulati |
0f1f11 |
animated (lxml.etree._Element) : Synfig format animation
|
|
AnishGulati |
0f1f11 |
|
|
AnishGulati |
0f1f11 |
Returns:
|
|
AnishGulati |
0f1f11 |
(None)
|
|
AnishGulati |
12ca25 |
"""
|
|
AnishGulati |
668236 |
timeadjust = 0.5
|
|
AnishGulati |
668236 |
for i in range(len(animated) - 1):
|
|
AnishGulati |
668236 |
if i == 0:
|
|
AnishGulati |
668236 |
continue
|
|
AnishGulati |
668236 |
time_span_cur = lottie["k"][i+1]["t"] - lottie["k"][i]["t"]
|
|
AnishGulati |
668236 |
time_span_prev = lottie["k"][i]["t"] - lottie["k"][i-1]["t"]
|
|
AnishGulati |
668236 |
cur_get_after = animated[i].attrib["after"]
|
|
AnishGulati |
668236 |
next_get_before = animated[i+1].attrib["before"]
|
|
AnishGulati |
668236 |
|
|
AnishGulati |
0d2507 |
# prev iter
|
|
AnishGulati |
668236 |
# ANY/CONSTANT ---- ANY/ANY
|
|
AnishGulati |
668236 |
# ANY/ANY ---- CONSTANT/ANY
|
|
AnishGulati |
668236 |
if cur_get_after == "constant" or next_get_before == "constant":
|
|
AnishGulati |
668236 |
continue
|
|
AnishGulati |
668236 |
|
|
AnishGulati |
0d2507 |
if animated.attrib["type"] == "real":
|
|
AnishGulati |
0d2507 |
if cur_get_after != "linear":
|
|
AnishGulati |
0d2507 |
lottie["k"][i]["o"]["x"][0] *= (time_span_cur * (timeadjust + 1)) /\
|
|
AnishGulati |
0d2507 |
(time_span_cur * timeadjust + time_span_prev)
|
|
AnishGulati |
0d2507 |
lottie["k"][i]["o"]["y"][0] *= (time_span_cur * (timeadjust + 1)) /\
|
|
AnishGulati |
0d2507 |
(time_span_cur * timeadjust + time_span_prev)
|
|
AnishGulati |
0d2507 |
if next_get_before != "linear":
|
|
AnishGulati |
668236 |
if i + 2 <= len(animated) - 1:
|
|
AnishGulati |
668236 |
time_span_next = lottie["k"][i+2]["t"] - lottie["k"][i+1]["t"]
|
|
AnishGulati |
0d2507 |
lottie["k"][i]["i"]["x"][0] *= (time_span_cur * (timeadjust + 1)) /\
|
|
AnishGulati |
0d2507 |
(time_span_cur * timeadjust + time_span_next)
|
|
AnishGulati |
0d2507 |
|
|
AnishGulati |
0d2507 |
elif animated.attrib["type"] == "vector":
|
|
AnishGulati |
0d2507 |
|
|
AnishGulati |
0d2507 |
# prev --- iter --- next
|
|
AnishGulati |
0d2507 |
# ANY/ANY --- ANY/!LINEAR --- ANY/ANY
|
|
AnishGulati |
0d2507 |
if cur_get_after != "linear":
|
|
AnishGulati |
0d2507 |
for dim in range(len(lottie["k"][i]["to"])):
|
|
AnishGulati |
0d2507 |
lottie["k"][i]["to"][dim] = lottie["k"][i]["to"][dim] *\
|
|
AnishGulati |
668236 |
(time_span_cur * (timeadjust + 1)) /\
|
|
AnishGulati |
0d2507 |
(time_span_cur * timeadjust + time_span_prev)
|
|
AnishGulati |
0d2507 |
|
|
AnishGulati |
0d2507 |
# iter --- next --- after_next
|
|
AnishGulati |
0d2507 |
# ANY/ANY --- !LINEAR/ANY --- ANY/ANY
|
|
AnishGulati |
0d2507 |
if next_get_before != "linear":
|
|
AnishGulati |
0d2507 |
for dim in range(len(lottie["k"][i]["to"])):
|
|
AnishGulati |
0d2507 |
if i + 2 <= len(animated) - 1:
|
|
AnishGulati |
0d2507 |
time_span_next = lottie["k"][i+2]["t"] - lottie["k"][i+1]["t"]
|
|
AnishGulati |
0d2507 |
lottie["k"][i]["ti"][dim] = lottie["k"][i]["ti"][dim] *\
|
|
AnishGulati |
0d2507 |
(time_span_cur * (timeadjust + 1)) /\
|
|
AnishGulati |
0d2507 |
(time_span_cur * timeadjust + time_span_next)
|