[Bf-extensions-cvs] [5c634a4] master: After Effects export: cleanup - remove "data" dict
Damien Picard
noreply at git.blender.org
Wed May 25 12:43:15 CEST 2022
Commit: 5c634a4378dea4104c1455110d442691776c3701
Author: Damien Picard
Date: Thu May 19 17:37:14 2022 +0200
Branches: master
https://developer.blender.org/rBAC5c634a4378dea4104c1455110d442691776c3701
After Effects export: cleanup - remove "data" dict
This dict is only used from the write_jsx_file function, so its
content can be stored directly there instead of passed around.
===================================================================
M io_export_after_effects.py
===================================================================
diff --git a/io_export_after_effects.py b/io_export_after_effects.py
index 2b13b57..dccb56c 100644
--- a/io_export_after_effects.py
+++ b/io_export_after_effects.py
@@ -40,31 +40,6 @@ from math import degrees, floor
from mathutils import Matrix, Vector, Color
-def get_comp_data(context):
- """Create list of static blender's data"""
- scene = context.scene
- aspect_x = scene.render.pixel_aspect_x
- aspect_y = scene.render.pixel_aspect_y
- aspect = aspect_x / aspect_y
- start = scene.frame_start
- end = scene.frame_end
- active_cam_frames = get_active_cam_for_each_frame(scene, start, end)
- fps = scene.render.fps / scene.render.fps_base
-
- return {
- 'scn': scene,
- 'width': scene.render.resolution_x,
- 'height': scene.render.resolution_y,
- 'aspect': aspect,
- 'fps': fps,
- 'start': start,
- 'end': end,
- 'duration': (end - start + 1.0) / fps,
- 'active_cam_frames': active_cam_frames,
- 'frame_current': scene.frame_current,
- }
-
-
def get_active_cam_for_each_frame(scene, start, end):
"""Create list of active camera for each frame in case active camera is set by markers"""
active_cam_frames = []
@@ -107,8 +82,8 @@ class ObjectExport():
self.name_ae = convert_name(self.obj.name)
self.keyframes = {}
- def get_prop_keyframe(self, context, prop_name, value, time):
- """Set keyframe for given property"""
+ def get_prop_keyframe(self, prop_name, value, time):
+ """Get keyframe for given property, only if different from previous value"""
prop_keys = self.keyframes.setdefault(prop_name, [])
if len(prop_keys) == 0:
prop_keys.append([time, value, False])
@@ -121,19 +96,19 @@ class ObjectExport():
else:
prop_keys[-1][2] = True
- def get_keyframe(self, context, data, time, ae_size):
+ def get_keyframe(self, context, width, height, aspect, time, ae_size):
"""Store animation for the current frame"""
ae_transform = convert_transform_matrix(self.obj.matrix_world,
- data['width'], data['height'],
- data['aspect'], True, ae_size)
+ width, height,
+ aspect, True, ae_size)
- self.get_prop_keyframe(context, 'position', ae_transform[0:3], time)
- self.get_prop_keyframe(context, 'orientation', ae_transform[3:6], time)
- self.get_prop_keyframe(context, 'scale', ae_transform[6:9], time)
+ self.get_prop_keyframe('position', ae_transform[0:3], time)
+ self.get_prop_keyframe('orientation', ae_transform[3:6], time)
+ self.get_prop_keyframe('scale', ae_transform[6:9], time)
def get_obj_script(self, include_animation):
"""Get the JSX script for the object"""
- return self.get_type_script() + self.get_prop_script(include_animation) + self.get_post_script()
+ return self.get_type_script() + self.get_anim_script(include_animation) + self.get_post_script()
def get_type_script(self):
"""Get the basic part of the JSX script"""
@@ -142,22 +117,22 @@ class ObjectExport():
type_script += f'{self.name_ae}.source.name = "{self.name_ae}";\n'
return type_script
- def get_prop_script(self, include_animation):
+ def get_anim_script(self, include_animation):
"""Get the part of the JSX script encoding animation"""
- prop_script = ""
+ anim_script = ""
# Set values of properties, add keyframes only where needed
for prop, keys in self.keyframes.items():
if include_animation and len(keys) > 1:
times = ",".join(str(k[0]) for k in keys)
values = ",".join(str(k[1]) for k in keys).replace(" ", "")
- prop_script += (
+ anim_script += (
f'{self.name_ae}.property("{prop}").setValuesAtTimes([{times}],[{values}]);\n')
# Set to HOLD the frames after which animation is fixed
# for several frames, to avoid interpolation errors
if any(k[2] for k in keys):
- prop_script += (
+ anim_script += (
f'var hold_frames = {[i + 1 for i, k in enumerate(keys) if k[2]]};\n'
'for (var i = 0; i < hold_frames.length; i++) {\n'
f' {self.name_ae}.property("{prop}").setInterpolationTypeAtKey(hold_frames[i], KeyframeInterpolationType.HOLD);\n'
@@ -166,27 +141,28 @@ class ObjectExport():
# No animation for this property
else:
value = str(keys[0][1]).replace(" ", "")
- prop_script += (
+ anim_script += (
f'{self.name_ae}.property("{prop}").setValue({value});\n')
- prop_script += '\n'
- return prop_script
+ anim_script += '\n'
+
+ return anim_script
def get_post_script(self):
"""This is only used in lights as a post-treatment after animation"""
return ""
class CameraExport(ObjectExport):
- def get_keyframe(self, context, data, time, ae_size):
+ def get_keyframe(self, context, width, height, aspect, time, ae_size):
ae_transform = convert_transform_matrix(self.obj.matrix_world,
- data['width'], data['height'],
- data['aspect'], True, ae_size)
- zoom = convert_lens(self.obj, data['width'], data['height'],
- data['aspect'])
+ width, height,
+ aspect, True, ae_size)
+ zoom = convert_lens(self.obj, width, height,
+ aspect)
- self.get_prop_keyframe(context, 'position', ae_transform[0:3], time)
- self.get_prop_keyframe(context, 'orientation', ae_transform[3:6], time)
- self.get_prop_keyframe(context, 'zoom', zoom, time)
+ self.get_prop_keyframe('position', ae_transform[0:3], time)
+ self.get_prop_keyframe('orientation', ae_transform[3:6], time)
+ self.get_prop_keyframe('zoom', zoom, time)
def get_type_script(self):
type_script = f'var {self.name_ae} = newComp.layers.addCamera("{self.name_ae}",[0,0]);\n'
@@ -195,24 +171,24 @@ class CameraExport(ObjectExport):
class LightExport(ObjectExport):
- def get_keyframe(self, context, data, time, ae_size):
+ def get_keyframe(self, context, width, height, aspect, time, ae_size):
ae_transform = convert_transform_matrix(self.obj.matrix_world,
- data['width'], data['height'],
- data['aspect'], True, ae_size)
+ width, height,
+ aspect, True, ae_size)
self.type = self.obj.data.type
color = list(self.obj.data.color)
intensity = self.obj.data.energy * 10.0
- self.get_prop_keyframe(context, 'position', ae_transform[0:3], time)
+ self.get_prop_keyframe('position', ae_transform[0:3], time)
if self.type in {'SPOT', 'SUN'}:
- self.get_prop_keyframe(context, 'orientation', ae_transform[3:6], time)
- self.get_prop_keyframe(context, 'intensity', intensity, time)
- self.get_prop_keyframe(context, 'Color', color, time)
+ self.get_prop_keyframe('orientation', ae_transform[3:6], time)
+ self.get_prop_keyframe('intensity', intensity, time)
+ self.get_prop_keyframe('Color', color, time)
if self.type == 'SPOT':
cone_angle = degrees(self.obj.data.spot_size)
- self.get_prop_keyframe(context, 'Cone Angle', cone_angle, time)
+ self.get_prop_keyframe('Cone Angle', cone_angle, time)
cone_feather = self.obj.data.spot_blend * 100.0
- self.get_prop_keyframe(context, 'Cone Feather', cone_feather, time)
+ self.get_prop_keyframe('Cone Feather', cone_feather, time)
def get_type_script(self):
type_script = f'var {self.name_ae} = newComp.layers.addLight("{self.name_ae}", [0.0, 0.0]);\n'
@@ -232,14 +208,14 @@ class LightExport(ObjectExport):
class ImageExport(ObjectExport):
- def get_keyframe(self, context, data, time, ae_size):
+ def get_keyframe(self, context, width, height, aspect, time, ae_size):
# Convert obj transform properties to AE space
plane_matrix = get_image_plane_matrix(self.obj)
# Scale plane to account for AE's transforms
- plane_matrix = plane_matrix @ Matrix.Scale(100.0 / data['width'], 4)
+ plane_matrix = plane_matrix @ Matrix.Scale(100.0 / width, 4)
- ae_transform = convert_transform_matrix(plane_matrix, data['width'],
- data['height'], data['aspect'],
+ ae_transform = convert_transform_matrix(plane_matrix, width,
+ height, aspect,
True, ae_size)
opacity = 0.0 if self.obj.hide_render else 100.0
@@ -247,7 +223,7 @@ class ImageExport(ObjectExport):
self.filepath = get_image_filepath(self.obj)
image_width, image_height = get_image_size(self.obj)
- ratio_to_comp = image_width / data['width']
+ ratio_to_comp = image_width / width
scale = ae_transform[6:9]
if image_height != 0.0:
scale[1] *= image_width / image_height
@@ -255,10 +231,10 @@ class ImageExport(ObjectExport):
scale[0] /= ratio_to_comp
scale[1] /= ratio_to_comp
- self.get_prop_keyframe(context, 'position', ae_transform[0:3], time)
- self.get_prop_keyframe(context, 'orientation', ae_transform[3:6], time)
- self.get_prop_keyframe(context, 'scale', scale, time)
- self.get_prop_keyframe(context, 'opacity', opacity, t
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list