feat: basic library handling

This commit is contained in:
Swann Martinez
2019-09-13 16:48:35 +02:00
parent 0446d0841f
commit 1fe6f545f6
4 changed files with 29 additions and 9 deletions

View File

@ -12,15 +12,19 @@ class BlDatablock(ReplicatedDatablock):
pointer = kwargs.get('pointer', None) pointer = kwargs.get('pointer', None)
buffer = self.buffer buffer = self.buffer
if (pointer and hasattr(pointer, 'library') and # TODO: use is_library_indirect
pointer.library) or \ self.is_library = (pointer and hasattr(pointer, 'library') and
(buffer and 'library' in buffer): pointer.library) or \
(buffer and 'library' in buffer)
# :
if self.is_library:
self.load = self.load_library self.load = self.load_library
self.dump = self.dump_library self.dump = self.dump_library
self.construct = self.construct_library
self.diff = self.diff_library self.diff = self.diff_library
self.resolve_dependencies = self.resolve_dependencies_library
self.apply = self.library_apply # self.construct = self.construct_library
# self.resolve_dependencies = self.resolve_dependencies_library
# self.apply = self.library_apply
if self.pointer and hasattr(self.pointer, 'uuid'): if self.pointer and hasattr(self.pointer, 'uuid'):
self.pointer.uuid = self.uuid self.pointer.uuid = self.uuid
@ -36,11 +40,13 @@ class BlDatablock(ReplicatedDatablock):
return self.pointer.name != self.buffer['name'] return self.pointer.name != self.buffer['name']
def construct_library(self, data): def construct_library(self, data):
with bpy.data.libraries.load(filepath=bpy.data.libraries[self.buffer['library']].filepath, link=True) as (sourceData, targetData):
# targetData[self.name] = sourceData
print("asd")
return None return None
def load_library(self, data, target): def load_library(self, data, target):
pass print("asdasdas")
def dump_library(self, pointer=None): def dump_library(self, pointer=None):
return utils.dump_datablock(pointer, 1) return utils.dump_datablock(pointer, 1)

View File

@ -90,6 +90,8 @@ class BlMaterial(BlDatablock):
for node in self.pointer.node_tree.nodes: for node in self.pointer.node_tree.nodes:
if node.type == 'TEX_IMAGE': if node.type == 'TEX_IMAGE':
deps.append(node.image) deps.append(node.image)
if self.is_library:
deps.append(self.pointer.library)
return deps return deps

View File

@ -175,5 +175,5 @@ bl_class = bpy.types.Mesh
bl_rep_class = BlMesh bl_rep_class = BlMesh
bl_delay_refresh = 10 bl_delay_refresh = 10
bl_delay_apply = 10 bl_delay_apply = 10
bl_automatic_push = False bl_automatic_push = True
bl_icon = 'MESH_DATA' bl_icon = 'MESH_DATA'

View File

@ -9,6 +9,12 @@ class BlObject(BlDatablock):
def construct(self, data): def construct(self, data):
pointer = None pointer = None
if self.is_library:
with bpy.data.libraries.load(filepath=bpy.data.libraries[self.buffer['library']].filepath, link=True) as (sourceData, targetData):
targetData.objects = [name for name in sourceData.objects if name == self.buffer['name']]
return targetData.objects[self.buffer['name']]
# Object specific constructor... # Object specific constructor...
if data["data"] in bpy.data.meshes.keys(): if data["data"] in bpy.data.meshes.keys():
pointer = bpy.data.meshes[data["data"]] pointer = bpy.data.meshes[data["data"]]
@ -52,6 +58,9 @@ class BlObject(BlDatablock):
assert(pointer) assert(pointer)
data = utils.dump_datablock(pointer, 1) data = utils.dump_datablock(pointer, 1)
if self.is_library:
return data
if hasattr(pointer, 'modifiers'): if hasattr(pointer, 'modifiers'):
utils.dump_datablock_attibutes( utils.dump_datablock_attibutes(
pointer, ['modifiers'], 3, data) pointer, ['modifiers'], 3, data)
@ -72,6 +81,9 @@ class BlObject(BlDatablock):
deps.append(self.pointer.data) deps.append(self.pointer.data)
if self.is_library:
deps.append(self.pointer.library)
return deps return deps