feat: start to support metaballs

This commit is contained in:
Swann
2019-09-24 00:42:30 +02:00
parent 433cb800cb
commit a7485dc503
4 changed files with 53 additions and 4 deletions

View File

@ -13,7 +13,8 @@ __all__ = [
'bl_library',
'bl_armature',
'bl_action',
'bl_world'
'bl_world',
'bl_metaball'
] # Order here defines execution order
from . import *

View File

@ -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
View 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'

View File

@ -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():