refactor: add camera back

This commit is contained in:
Swann 2021-05-19 09:55:07 +02:00
parent 330ff08fd3
commit 5f669fd49a
No known key found for this signature in database
GPG Key ID: E1D3641A7C43AACB

View File

@ -21,6 +21,8 @@ import mathutils
from .dump_anything import Loader, Dumper
from replication.protocol import ReplicatedDatablock
from .bl_datablock import resolve_datablock_from_uuid
from .bl_action import dump_animation_data, load_animation_data, resolve_animation_dependencies
class BlCamera(ReplicatedDatablock):
@ -30,29 +32,34 @@ class BlCamera(ReplicatedDatablock):
bl_icon = 'CAMERA_DATA'
bl_reload_parent = False
@staticmethod
def construct(data: dict) -> object:
return bpy.data.cameras.new(data["name"])
@staticmethod
def load(data: dict, datablock: object):
loader = Loader()
loader.load(target, data)
loader.load(datablock, data)
dof_settings = data.get('dof')
load_animation_data(datablock.get('animation_data'), datablock)
# DOF settings
if dof_settings:
loader.load(target.dof, dof_settings)
loader.load(datablock.dof, dof_settings)
background_images = data.get('background_images')
target.background_images.clear()
datablock.background_images.clear()
if background_images:
for img_name, img_data in background_images.items():
img_id = img_data.get('image')
if img_id:
target_img = target.background_images.new()
target_img = datablock.background_images.new()
target_img.image = bpy.data.images[img_id]
loader.load(target_img, img_data)
@ -61,11 +68,8 @@ class BlCamera(ReplicatedDatablock):
loader.load(target_img.image_user, img_user)
@staticmethod
def dump(datablock: object) -> dict:
assert(instance)
# TODO: background image support
dumper = Dumper()
dumper.depth = 3
dumper.include_filter = [
@ -114,15 +118,34 @@ class BlCamera(ReplicatedDatablock):
'use_cyclic',
'use_auto_refresh'
]
data = dumper.dump(instance)
for index, image in enumerate(instance.background_images):
data = dumper.dump(datablock)
data['animation_data'] = dump_animation_data(datablock)
for index, image in enumerate(datablock.background_images):
if image.image_user:
data['background_images'][index]['image_user'] = dumper.dump(image.image_user)
return data
@staticmethod
def resolve(data: dict) -> object:
uuid = data.get('uuid')
name = data.get('name')
datablock = resolve_datablock_from_uuid(uuid, bpy.data.cameras)
if datablock is None:
datablock = bpy.data.cameras.get(name)
return datablock
@staticmethod
def resolve_deps(datablock: object) -> [object]:
deps = []
for background in self.instance.background_images:
for background in datablock.background_images:
if background.image:
deps.append(background.image)
deps.extend(resolve_animation_dependencies(datablock))
return deps
_type = bpy.types.Camera
_class = BlCamera