feat: start to resolve data by uuid

This commit is contained in:
Swann Martinez
2019-10-07 17:32:56 +02:00
parent 5867d39a52
commit 411d77643e
5 changed files with 39 additions and 14 deletions

View File

@ -7,7 +7,9 @@ from .bl_datablock import BlDatablock
class BlCollection(BlDatablock):
def construct(self,data):
return bpy.data.collections.new(data["name"])
instance = bpy.data.collections.new(data["name"])
instance.uuid = self.uuid
return instance
def load(self, data, target):
# Load other meshes metadata
@ -38,11 +40,17 @@ class BlCollection(BlDatablock):
def dump(self, pointer=None):
assert(pointer)
return utils.dump_datablock(pointer, 4)
dumper = utils.dump_anything.Dumper()
dumper.depth = 4
dumper.include_filter = ['name','objects', 'children', 'uuid']
return dumper.dump(pointer)
def resolve(self):
assert(self.buffer)
self.pointer = bpy.data.collections.get(self.buffer['name'])
# self.pointer = bpy.data.collections.get(self.buffer['name'])
self.pointer = utils.find_from_attr('uuid', self.uuid, bpy.data.collections)
def resolve_dependencies(self):
deps = []

View File

@ -76,8 +76,10 @@ def dump_mesh(mesh, data={}):
class BlMesh(BlDatablock):
def construct(self, data):
return bpy.data.meshes.new(data["name"])
instance = bpy.data.meshes.new(data["name"])
instance.uuid = self.uuid
return instance
def load(self, data, target):
if not target or not target.is_editmode:
# 1 - LOAD MATERIAL SLOTS
@ -153,8 +155,9 @@ class BlMesh(BlDatablock):
return data
def resolve(self):
assert(self.buffer)
self.pointer = bpy.data.meshes.get(self.buffer['name'])
assert(self.buffer)
self.pointer = utils.find_from_attr('uuid', self.uuid, bpy.data.meshes)
# self.pointer = bpy.data.meshes.get(self.buffer['name'])
def resolve_dependencies(self):
deps = []

View File

@ -37,7 +37,10 @@ class BlObject(BlDatablock):
elif data["data"] in bpy.data.curves.keys():
pointer = bpy.data.curves[data["data"]]
return bpy.data.objects.new(data["name"], pointer)
instance = bpy.data.objects.new(data["name"], pointer)
instance.uuid = self.uuid
return instance
def load(self, data, target):
target.uuid = data['uuid']
@ -97,11 +100,12 @@ class BlObject(BlDatablock):
def resolve(self):
assert(self.buffer)
object_name = self.buffer['name']
try:
self.pointer = bpy.data.objects[object_name]
except:
pass
self.pointer = utils.find_from_attr('uuid', self.uuid, bpy.data.objects)
# object_name = self.buffer['name']
# try:
# self.pointer = bpy.data.objects[object_name]
# except:
# pass
def resolve_dependencies(self):
deps = []

View File

@ -7,7 +7,9 @@ from .bl_datablock import BlDatablock
class BlScene(BlDatablock):
def construct(self, data):
return bpy.data.scenes.new(data["name"])
instance = bpy.data.scenes.new(data["name"])
instance.uuid = self.uuid
return instance
def load(self, data, target):
target = self.pointer
@ -58,6 +60,7 @@ class BlScene(BlDatablock):
scene_name = self.buffer['name']
self.pointer = bpy.data.scenes.get(scene_name)
# self.pointer = utils.find_from_attr('uuid', self.uuid, bpy.data.objects)
def resolve_dependencies(self):
deps = []

View File

@ -16,6 +16,13 @@ logger = logging.getLogger(__name__)
logger.setLevel(logging.ERROR)
def find_from_attr(attr_name, attr_value, list):
for item in list:
if getattr(item, attr_name, None) == attr_value:
return item
return None
def get_datablock_users(datablock):
users = []
supported_types = bpy.context.window_manager.session.supported_datablock