First release. All scripts in v1.
This commit is contained in:
117
xg_copy_paste_2d_curves.py
Normal file
117
xg_copy_paste_2d_curves.py
Normal file
@@ -0,0 +1,117 @@
|
||||
# 3DE4.script.hide: true
|
||||
# 3DE4.script.startup: false
|
||||
#
|
||||
# Giovanni Di Grezia 2016
|
||||
# http://www.xgiovio.com
|
||||
#
|
||||
|
||||
import tde4
|
||||
|
||||
global copied_2d_curve
|
||||
try:
|
||||
copied_2d_curve
|
||||
except :
|
||||
copied_2d_curve = {}
|
||||
|
||||
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]
|
||||
|
||||
def copy () :
|
||||
if len(selected_points) != 1 :
|
||||
tde4.postQuestionRequester("Error","You need to select 1 2D point","OK")
|
||||
else:
|
||||
for point in selected_points:
|
||||
for frame in range (firstframe, lastframe + 1):
|
||||
if tde4.isPointPos2DValid(current_point_group,point,cam,frame):
|
||||
selected_point_position = tde4.getPointPosition2D(current_point_group,point,cam,frame)
|
||||
copied_2d_curve[frame] = selected_point_position
|
||||
|
||||
|
||||
|
||||
def paste (adapt_to_keyframes = False, inside_only = False):
|
||||
if len(selected_points) != 1 :
|
||||
tde4.postQuestionRequester("Error","You need to select 1 2D point","OK")
|
||||
else:
|
||||
for point in selected_points:
|
||||
if adapt_to_keyframes :
|
||||
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[frame]= pos
|
||||
|
||||
tde4.deletePointCurve2D (current_point_group,point,cam)
|
||||
|
||||
if not adapt_to_keyframes or len(k_pos) == 0 :
|
||||
for frame in copied_2d_curve:
|
||||
tde4.setPointPosition2D(current_point_group,point,cam,frame,copied_2d_curve[frame])
|
||||
else:
|
||||
k_pos_to_delete = []
|
||||
for frame in k_pos:
|
||||
if frame in copied_2d_curve:
|
||||
copied_2d_curve_x = copied_2d_curve[frame][0]
|
||||
copied_2d_curve_y = copied_2d_curve[frame][1]
|
||||
k_pos_x = k_pos[frame][0]
|
||||
k_pos_y = k_pos[frame][1]
|
||||
offset_x = k_pos_x - copied_2d_curve_x
|
||||
offset_y = k_pos_y - copied_2d_curve_y
|
||||
k_pos[frame] = [offset_x,offset_y]
|
||||
else :
|
||||
k_pos_to_delete.append(frame)
|
||||
for frame in k_pos_to_delete:
|
||||
del k_pos[frame]
|
||||
|
||||
|
||||
if len(k_pos) > 0:
|
||||
#extend keyframes to source curve range
|
||||
k_pos_extended = {}
|
||||
|
||||
min_frame_k_pos = min(k_pos)
|
||||
max_frame_k_pos = max(k_pos)
|
||||
|
||||
min_frame_copied_2d_curve = min(copied_2d_curve)
|
||||
max_frame_copied_2d_curve = max(copied_2d_curve)
|
||||
|
||||
if min_frame_k_pos != min_frame_copied_2d_curve and not inside_only:
|
||||
k_pos_extended[min_frame_copied_2d_curve] = k_pos[min_frame_k_pos]
|
||||
for frame in k_pos:
|
||||
k_pos_extended[frame] = k_pos[frame]
|
||||
if max_frame_k_pos != max_frame_copied_2d_curve and not inside_only:
|
||||
k_pos_extended[max_frame_copied_2d_curve] = k_pos[max_frame_k_pos]
|
||||
|
||||
|
||||
k_pos_extended_keys = k_pos_extended.keys()
|
||||
k_pos_extended_keys.sort()
|
||||
|
||||
for i in range(len(k_pos_extended_keys) - 1):
|
||||
print
|
||||
f0 = k_pos_extended_keys[i]
|
||||
f1 = k_pos_extended_keys[i + 1]
|
||||
xo0 = k_pos_extended[k_pos_extended_keys[i]][0]
|
||||
yo0 = k_pos_extended[k_pos_extended_keys[i]][1]
|
||||
xo1 = k_pos_extended[k_pos_extended_keys[i+ 1]][0]
|
||||
yo1 = k_pos_extended[k_pos_extended_keys[i + 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))))
|
||||
copied_2d_curve_x = copied_2d_curve[f][0]
|
||||
copied_2d_curve_y = copied_2d_curve[f][1]
|
||||
tde4.setPointPosition2D(current_point_group,point,cam,f,[copied_2d_curve_x + xoI, copied_2d_curve_y + yoI ] )
|
||||
#lastkeyframe
|
||||
copied_2d_curve_x = copied_2d_curve[f1][0]
|
||||
copied_2d_curve_y = copied_2d_curve[f1][1]
|
||||
tde4.setPointPosition2D(current_point_group,point,cam,f1,[copied_2d_curve_x + xo1, copied_2d_curve_y + yo1 ] )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user