feat(rcf): append init scene mechanism
feat(rcf): append callback for data loading on snapshot init
This commit is contained in:
@ -230,7 +230,10 @@ class RCFClient():
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
logger.info("received : {}".format(rcfmsg_snapshot.key))
|
logger.info("received : {}".format(rcfmsg_snapshot.key))
|
||||||
|
|
||||||
rcfmsg_snapshot.store(self.property_map)
|
rcfmsg_snapshot.store(self.property_map)
|
||||||
|
for f in self.on_recv:
|
||||||
|
f(rcfmsg)
|
||||||
except:
|
except:
|
||||||
await asyncio.sleep(0.001)
|
await asyncio.sleep(0.001)
|
||||||
|
|
||||||
|
@ -28,6 +28,9 @@ SUPPORTED_DATABLOCKS = ['collections', 'meshes', 'objects',
|
|||||||
'materials', 'textures', 'lights', 'cameras', 'actions', 'armatures','grease_pencils']
|
'materials', 'textures', 'lights', 'cameras', 'actions', 'armatures','grease_pencils']
|
||||||
SUPPORTED_TYPES = ['Collection', 'Mesh', 'Object', 'Material',
|
SUPPORTED_TYPES = ['Collection', 'Mesh', 'Object', 'Material',
|
||||||
'Texture', 'Light', 'Camera', 'Action', 'Armature','GreasePencil']
|
'Texture', 'Light', 'Camera', 'Action', 'Armature','GreasePencil']
|
||||||
|
|
||||||
|
CORRESPONDANCE = {'Collection':'collections', 'Mesh':'meshes', 'Object':'objects', 'Material':'materials',
|
||||||
|
'Texture':'textures', 'Light':'lights', 'Camera':'cameras', 'Action':'actions', 'Armature':'armatures','GreasePencil':'grease_pencils'}
|
||||||
# UTILITY FUNCTIONS
|
# UTILITY FUNCTIONS
|
||||||
|
|
||||||
|
|
||||||
@ -125,7 +128,7 @@ def resolve_bpy_path(path):
|
|||||||
item = None
|
item = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
item = getattr(bpy.data, path[0])[path[1]]
|
item = getattr(bpy.data, CORRESPONDANCE[path[0]])[path[1]]
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
@ -137,12 +140,27 @@ def refresh_window():
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
|
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
|
||||||
|
|
||||||
|
def dump_datablock(datablock,depth):
|
||||||
|
if datablock:
|
||||||
|
print("sending {}".format(datablock.name))
|
||||||
|
|
||||||
|
dumper = dump_anything.Dumper()
|
||||||
|
dumper.type_subset = dumper.match_subset_all
|
||||||
|
dumper.depth = depth
|
||||||
|
|
||||||
|
datablock_type = datablock.__class__.__name__
|
||||||
|
key = "{}/{}".format(datablock_type,datablock.name)
|
||||||
|
data = dumper.dump(datablock)
|
||||||
|
|
||||||
|
client.push_update(key, datablock_type, data)
|
||||||
|
|
||||||
def init_scene():
|
def init_scene():
|
||||||
global client
|
global client
|
||||||
|
|
||||||
for mesh in bpy.data.meshes:
|
for mat in bpy.data.materials:
|
||||||
pass
|
dump_datablock(mat,7)
|
||||||
|
# for mesh in bpy.data.meshes:
|
||||||
|
# dump_datablock_from_path("meshes/{}".format(mat.name),7)
|
||||||
|
|
||||||
|
|
||||||
def load_mesh(target=None, data=None, create=False):
|
def load_mesh(target=None, data=None, create=False):
|
||||||
@ -209,6 +227,19 @@ def load_collection(target=None, data=None, create=False):
|
|||||||
except:
|
except:
|
||||||
print("Collection loading error")
|
print("Collection loading error")
|
||||||
|
|
||||||
|
def load_scene(target=None, data=None, create=False):
|
||||||
|
try:
|
||||||
|
if target is None and create:
|
||||||
|
target = bpy.data.scenes.new(data["name"])
|
||||||
|
|
||||||
|
# Load other meshes metadata
|
||||||
|
# dump_anything.load(target, data)
|
||||||
|
|
||||||
|
# load collections
|
||||||
|
for collection in data["collection"]["children"]:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
print("Collection loading error")
|
||||||
|
|
||||||
def load_material(target=None, data=None, create=False):
|
def load_material(target=None, data=None, create=False):
|
||||||
try:
|
try:
|
||||||
@ -255,6 +286,7 @@ def load_material(target=None, data=None, create=False):
|
|||||||
except:
|
except:
|
||||||
print("Material loading error")
|
print("Material loading error")
|
||||||
|
|
||||||
|
|
||||||
def load_gpencil(target=None, data=None, create=False):
|
def load_gpencil(target=None, data=None, create=False):
|
||||||
try:
|
try:
|
||||||
if target is None and create:
|
if target is None and create:
|
||||||
@ -438,7 +470,8 @@ class session_create(bpy.types.Operator):
|
|||||||
|
|
||||||
bpy.ops.session.join()
|
bpy.ops.session.join()
|
||||||
|
|
||||||
init_scene()
|
if context.scene.session_settings.init_scene:
|
||||||
|
init_scene()
|
||||||
|
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@ -486,6 +519,7 @@ class session_settings(bpy.types.PropertyGroup):
|
|||||||
buffer = bpy.props.StringProperty(name="None")
|
buffer = bpy.props.StringProperty(name="None")
|
||||||
is_running = bpy.props.BoolProperty(name="is_running", default=False)
|
is_running = bpy.props.BoolProperty(name="is_running", default=False)
|
||||||
load_data = bpy.props.BoolProperty(name="load_data", default=True)
|
load_data = bpy.props.BoolProperty(name="load_data", default=True)
|
||||||
|
init_scene = bpy.props.BoolProperty(name="load_data", default=True)
|
||||||
clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True)
|
clear_scene = bpy.props.BoolProperty(name="clear_scene", default=True)
|
||||||
update_frequency = bpy.props.FloatProperty(
|
update_frequency = bpy.props.FloatProperty(
|
||||||
name="update_frequency", default=0.008)
|
name="update_frequency", default=0.008)
|
||||||
|
@ -27,6 +27,11 @@ class SessionSettingsPanel(bpy.types.Panel):
|
|||||||
row = layout.row()
|
row = layout.row()
|
||||||
|
|
||||||
if scene.session_settings.session_mode == 'HOST':
|
if scene.session_settings.session_mode == 'HOST':
|
||||||
|
box = row.box()
|
||||||
|
row = box.row()
|
||||||
|
row.label(text="init scene:")
|
||||||
|
row.prop(net_settings, "init_scene", text="")
|
||||||
|
row = layout.row()
|
||||||
row.operator("session.create", text="HOST")
|
row.operator("session.create", text="HOST")
|
||||||
else:
|
else:
|
||||||
box = row.box()
|
box = row.box()
|
||||||
|
Reference in New Issue
Block a user