93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
|
|
# 3DE4.script.hide: true
|
|
# 3DE4.script.startup: false
|
|
#
|
|
# Giovanni Di Grezia 2016
|
|
# http://www.xgiovio.com
|
|
#
|
|
|
|
import tde4
|
|
|
|
|
|
def operations (del_non_keyframes = False, triangulate = False, reelin = False, distortion = False , deform = False, inside_only = False):
|
|
|
|
|
|
cam = tde4.getCurrentCamera()
|
|
current_point_group = tde4.getCurrentPGroup()
|
|
selected_points = tde4.getPointList (current_point_group,1)
|
|
playback = tde4.getCameraPlaybackRange(cam)
|
|
firstframe = playback[0]
|
|
lastframe = playback[1]
|
|
|
|
if del_non_keyframes :
|
|
for point in selected_points :
|
|
k_pos = []
|
|
for frame in range (firstframe, lastframe + 1):
|
|
point_status = tde4.getPointStatus2D(current_point_group,point,cam,frame)
|
|
if point_status == "POINT_KEYFRAME" or point_status == "POINT_KEYFRAME_END":
|
|
pos = tde4.getPointPosition2D(current_point_group,point,cam,frame)
|
|
k_pos.append([frame,[ pos[0], pos[1] ] ])
|
|
tde4.deletePointCurve2D (current_point_group,point,cam)
|
|
for i in k_pos :
|
|
tde4.setPointPosition2D(current_point_group,point,cam,i[0],i[1])
|
|
if triangulate :
|
|
if len(k_pos) >= 2:
|
|
pos3d = tde4.calcPointPosition3D(current_point_group,point,cam)
|
|
tde4.setPointCalcPosition3D(current_point_group,point,pos3d)
|
|
tde4.setPointCalculated3D(current_point_group,point,1)
|
|
tde4.setPointCalculated3DStatus(current_point_group,point,"TRIANGULATED")
|
|
if reelin :
|
|
points_to_deform = {}
|
|
for frame in range (firstframe, lastframe + 1):
|
|
if distortion:
|
|
pos = tde4.calcPointBackProjection2D(current_point_group,point,cam,frame,1)
|
|
else:
|
|
pos = tde4.calcPointBackProjection2D(current_point_group,point,cam,frame,0)
|
|
if not deform:
|
|
if inside_only :
|
|
if frame >= k_pos[0][0] and frame <= k_pos[-1][0]:
|
|
tde4.setPointPosition2D(current_point_group,point,cam,frame,pos)
|
|
else:
|
|
tde4.setPointPosition2D(current_point_group,point,cam,frame,pos)
|
|
else:
|
|
points_to_deform[frame] = pos
|
|
if deform:
|
|
|
|
#update k_pos with offset from reelincurve
|
|
for i in k_pos:
|
|
reel_in_x = points_to_deform[i[0]][0]
|
|
reel_in_y = points_to_deform[i[0]][1]
|
|
k_pos_x = i[1][0]
|
|
k_pos_y = i[1][1]
|
|
offset_x = k_pos_x - reel_in_x
|
|
offset_y = k_pos_y - reel_in_y
|
|
i[1] = [offset_x,offset_y]
|
|
|
|
#extend keyframes to reelin range
|
|
k_pos_extended = []
|
|
if k_pos[0][0] != firstframe and not inside_only:
|
|
k_pos_extended.append([firstframe,k_pos[0][1]])
|
|
for i in k_pos:
|
|
k_pos_extended.append(i)
|
|
if k_pos[-1][0] != lastframe and not inside_only:
|
|
k_pos_extended.append([lastframe,k_pos[-1][1]])
|
|
|
|
|
|
for i in range(len(k_pos_extended) - 1):
|
|
f0 = k_pos_extended[i][0]
|
|
f1 = k_pos_extended[i+1][0]
|
|
xo0 = k_pos_extended[i][1][0]
|
|
yo0 = k_pos_extended[i][1][1]
|
|
xo1 = k_pos_extended[i+1][1][0]
|
|
yo1 = k_pos_extended[i+1][1][1]
|
|
# linear deform step
|
|
for f in range(f0, f1):
|
|
xoI = (xo0 + ((f - f0) * ((xo1 - xo0) / (f1 - f0))))
|
|
yoI = (yo0 + ((f - f0) * ((yo1 - yo0) / (f1 - f0))))
|
|
reelin_curve_x = points_to_deform[f][0]
|
|
reelin_curve_y = points_to_deform[f][1]
|
|
tde4.setPointPosition2D(current_point_group,point,cam,f,[reelin_curve_x + xoI, reelin_curve_y + yoI ] )
|
|
#lastkeyframe
|
|
reelin_curve_x = points_to_deform[f1][0]
|
|
reelin_curve_y = points_to_deform[f1][1]
|
|
tde4.setPointPosition2D(current_point_group,point,cam,f1,[reelin_curve_x + xo1, reelin_curve_y + yo1 ] ) |