io_scene_3ds: Update for Blender 3.x #2
@ -23,7 +23,7 @@ bl_info = {
|
|||||||
"description": "Export cameras, selected objects & camera solution "
|
"description": "Export cameras, selected objects & camera solution "
|
||||||
"3D Markers to Adobe After Effects CS3 and above",
|
"3D Markers to Adobe After Effects CS3 and above",
|
||||||
"author": "Bartek Skorupa, Damien Picard (@pioverfour)",
|
"author": "Bartek Skorupa, Damien Picard (@pioverfour)",
|
||||||
"version": (0, 1, 1),
|
"version": (0, 1, 2),
|
||||||
"blender": (2, 80, 0),
|
"blender": (2, 80, 0),
|
||||||
"location": "File > Export > Adobe After Effects (.jsx)",
|
"location": "File > Export > Adobe After Effects (.jsx)",
|
||||||
"warning": "",
|
"warning": "",
|
||||||
@ -144,6 +144,11 @@ class ObjectExport():
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
class CameraExport(ObjectExport):
|
class CameraExport(ObjectExport):
|
||||||
|
def __init__(self, obj, start_time=None, end_time=None):
|
||||||
|
super().__init__(obj)
|
||||||
|
self.start_time = start_time
|
||||||
|
self.end_time = end_time
|
||||||
|
|
||||||
def get_keyframe(self, context, width, height, aspect, time, ae_size):
|
def get_keyframe(self, context, width, height, aspect, time, ae_size):
|
||||||
ae_transform = convert_transform_matrix(self.obj.matrix_world,
|
ae_transform = convert_transform_matrix(self.obj.matrix_world,
|
||||||
width, height, aspect, ae_size)
|
width, height, aspect, ae_size)
|
||||||
@ -156,6 +161,10 @@ class CameraExport(ObjectExport):
|
|||||||
|
|
||||||
def get_type_script(self):
|
def get_type_script(self):
|
||||||
type_script = f'var {self.name_ae} = newComp.layers.addCamera("{self.name_ae}",[0,0]);\n'
|
type_script = f'var {self.name_ae} = newComp.layers.addCamera("{self.name_ae}",[0,0]);\n'
|
||||||
|
# Restrict time range when multiple cameras are used (markers)
|
||||||
|
if self.start_time is not None:
|
||||||
|
type_script += f'{self.name_ae}.inPoint = {self.start_time};\n'
|
||||||
|
type_script += f'{self.name_ae}.outPoint = {self.end_time};\n'
|
||||||
type_script += f'{self.name_ae}.autoOrient = AutoOrientType.NO_AUTO_ORIENT;\n'
|
type_script += f'{self.name_ae}.autoOrient = AutoOrientType.NO_AUTO_ORIENT;\n'
|
||||||
return type_script
|
return type_script
|
||||||
|
|
||||||
@ -324,17 +333,29 @@ def get_selected(context, include_active_cam, include_selected_cams,
|
|||||||
cam_bundles = [] # Camera trackers exported as AE nulls
|
cam_bundles = [] # Camera trackers exported as AE nulls
|
||||||
nulls = [] # Remaining objects exported as AE nulls
|
nulls = [] # Remaining objects exported as AE nulls
|
||||||
|
|
||||||
|
scene = context.scene
|
||||||
|
fps = scene.render.fps / scene.render.fps_base
|
||||||
|
|
||||||
if context.scene.camera is not None:
|
if context.scene.camera is not None:
|
||||||
if include_active_cam:
|
if include_active_cam:
|
||||||
cameras.append(CameraExport(context.scene.camera))
|
for frame_range, camera in get_camera_frame_ranges(
|
||||||
if include_cam_bundles:
|
context.scene,
|
||||||
cam_bundles.extend(get_camera_bundles(context.scene, context.scene.camera))
|
context.scene.frame_start, context.scene.frame_end):
|
||||||
|
|
||||||
|
if (include_cam_bundles
|
||||||
|
and camera not in (cam.obj for cam in cameras)):
|
||||||
|
cam_bundles.extend(
|
||||||
|
get_camera_bundles(context.scene, camera))
|
||||||
|
|
||||||
|
cameras.append(
|
||||||
|
CameraExport(camera,
|
||||||
|
(frame_range[0] - scene.frame_start) / fps,
|
||||||
|
(frame_range[1] - scene.frame_start) / fps))
|
||||||
|
|
||||||
for obj in context.selected_objects:
|
for obj in context.selected_objects:
|
||||||
if obj.type == 'CAMERA':
|
if obj.type == 'CAMERA':
|
||||||
if (include_active_cam
|
# Ignore camera if already selected
|
||||||
and obj is context.scene.camera):
|
if obj in (cam.obj for cam in cameras):
|
||||||
# Ignore active camera if already selected
|
|
||||||
continue
|
continue
|
||||||
if include_selected_cams:
|
if include_selected_cams:
|
||||||
cameras.append(CameraExport(obj))
|
cameras.append(CameraExport(obj))
|
||||||
|
Reference in New Issue
Block a user