feat: start to support metaballs
This commit is contained in:
@ -13,7 +13,8 @@ __all__ = [
|
||||
'bl_library',
|
||||
'bl_armature',
|
||||
'bl_action',
|
||||
'bl_world'
|
||||
'bl_world',
|
||||
'bl_metaball'
|
||||
] # Order here defines execution order
|
||||
|
||||
from . import *
|
||||
|
@ -15,8 +15,9 @@ class BlLight(BlDatablock):
|
||||
|
||||
def dump(self, pointer=None):
|
||||
assert(pointer)
|
||||
|
||||
replicated_attributes = [
|
||||
dumper = utils.dump_anything.Dumper()
|
||||
dumper.depth = 3
|
||||
dumper.include_filter = [
|
||||
"name",
|
||||
"type",
|
||||
"color",
|
||||
@ -36,7 +37,7 @@ class BlLight(BlDatablock):
|
||||
"contact_shadow_bias",
|
||||
"contact_shadow_thickness"
|
||||
]
|
||||
data = { k:v for k,v in utils.dump_datablock(pointer, 3).items() if k in replicated_attributes }
|
||||
data = dumper.dump(pointer)
|
||||
return data
|
||||
|
||||
def resolve(self):
|
||||
|
45
bl_types/bl_metaball.py
Normal file
45
bl_types/bl_metaball.py
Normal file
@ -0,0 +1,45 @@
|
||||
import bpy
|
||||
import mathutils
|
||||
from jsondiff import diff
|
||||
|
||||
from .. import utils
|
||||
from .bl_datablock import BlDatablock
|
||||
|
||||
|
||||
class BlMetaball(BlDatablock):
|
||||
def construct(self, data):
|
||||
return bpy.data.metaballs.new(data["name"])
|
||||
|
||||
def load(self, data, target):
|
||||
utils.dump_anything.load(target, data)
|
||||
|
||||
target.elements.clear()
|
||||
for element in data["elements"]:
|
||||
element = target.elements.new(type=data["elements"][element]['type'])
|
||||
utils.dump_anything.load(element, data["elements"][element])
|
||||
def dump(self, pointer=None):
|
||||
assert(pointer)
|
||||
dumper = utils.dump_anything.Dumper()
|
||||
dumper.depth = 3
|
||||
|
||||
data = dumper.dump(pointer)
|
||||
return data
|
||||
|
||||
def resolve(self):
|
||||
assert(self.buffer)
|
||||
self.pointer = bpy.data.metaballs.get(self.buffer['name'])
|
||||
|
||||
def diff(self):
|
||||
return (self.bl_diff() or
|
||||
len(diff(self.dump(pointer=self.pointer), self.buffer)) > 1)
|
||||
|
||||
def is_valid(self):
|
||||
return bpy.data.metaballs.get(self.buffer['name'])
|
||||
|
||||
bl_id = "metaballs"
|
||||
bl_class = bpy.types.MetaBall
|
||||
bl_rep_class = BlMetaball
|
||||
bl_delay_refresh = 1
|
||||
bl_delay_apply = 1
|
||||
bl_automatic_push = True
|
||||
bl_icon = 'META_BALL'
|
@ -27,6 +27,8 @@ class BlObject(BlDatablock):
|
||||
pointer = bpy.data.cameras[data["data"]]
|
||||
elif data["data"] in bpy.data.curves.keys():
|
||||
pointer = bpy.data.curves[data["data"]]
|
||||
elif data["data"] in bpy.data.metaballs.keys():
|
||||
pointer = bpy.data.metaballs[data["data"]]
|
||||
elif data["data"] in bpy.data.armatures.keys():
|
||||
pointer = bpy.data.armatures[data["data"]]
|
||||
elif data["data"] in bpy.data.grease_pencils.keys():
|
||||
|
Reference in New Issue
Block a user