feat(rcf): improve init scene

This commit is contained in:
Swann Martinez
2019-03-14 12:09:33 +01:00
parent 9856159e1c
commit c152ce2408
2 changed files with 39 additions and 30 deletions

View File

@ -163,7 +163,6 @@ def to_bpy(store_item):
if value_type == 'Vector' or 'Euler': if value_type == 'Vector' or 'Euler':
value_casted = mathutils.Vector( value_casted = mathutils.Vector(
(store_value[0], store_value[1], store_value[2])) (store_value[0], store_value[1], store_value[2]))
return value_casted return value_casted
@ -218,13 +217,14 @@ def init_scene():
for object in bpy.context.scene.objects: for object in bpy.context.scene.objects:
for attr in dir(object): for attr in dir(object):
try: try:
key = "objects/{}/{}".format(object.name,attr) key = "objects/{}/{}".format(object.name, attr)
value_type, value = from_bpy(getattr(object,attr)) value_type, value = from_bpy(getattr(object, attr))
client.push_update(key, value_type, value) client.push_update(key, value_type, value)
except: except:
pass pass
def update_scene(msg): def update_scene(msg):
global client global client
@ -261,6 +261,9 @@ def update_ui(msg):
recv_callbacks = [update_scene, update_ui] recv_callbacks = [update_scene, update_ui]
post_init_callbacks = [refresh_window] post_init_callbacks = [refresh_window]
# Catch operator execution
#C.window_manager.operators['MESH_OT_primitive_plane_add'].bl_idname
class session_join(bpy.types.Operator): class session_join(bpy.types.Operator):
bl_idname = "session.join" bl_idname = "session.join"
@ -369,7 +372,7 @@ class session_create(bpy.types.Operator):
bpy.ops.session.join() bpy.ops.session.join()
init_scene() # init_scene()
bpy.app.timers.register(observer) bpy.app.timers.register(observer)
return {"FINISHED"} return {"FINISHED"}
@ -568,7 +571,6 @@ class session_draw_clients(bpy.types.Operator):
session = context.scene.session_settings session = context.scene.session_settings
if client: if client:
# Local view update # Local view update
current_coords = get_client_view_rect() current_coords = get_client_view_rect()
if current_coords != self.coords: if current_coords != self.coords:
@ -627,7 +629,7 @@ class session_snapview(bpy.types.Operator):
area, region, rv3d = view3d_find() area, region, rv3d = view3d_find()
for k,v in client.property_map.items(): for k, v in client.property_map.items():
if v.mtype == 'client' and v.id.decode() == self.target_client: if v.mtype == 'client' and v.id.decode() == self.target_client:
rv3d.view_location = v.body[1] rv3d.view_location = v.body[1]
rv3d.view_distance = 10.0 rv3d.view_distance = 10.0
@ -636,6 +638,8 @@ class session_snapview(bpy.types.Operator):
return {"CANCELLED"} return {"CANCELLED"}
pass pass
# TODO: Rename to match official blender convention # TODO: Rename to match official blender convention
classes = ( classes = (
session_join, session_join,

View File

@ -19,11 +19,11 @@ class SessionSettingsPanel(bpy.types.Panel):
# self.layout.label(text="",icon='HIDE_OFF') # self.layout.label(text="",icon='HIDE_OFF')
# else: # else:
# self.layout.label(text="",icon='HIDE_ON') # self.layout.label(text="",icon='HIDE_ON')
# self.layout.label(text="Offline") # self.layout.label(text="Offline")
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
net_settings = context.scene.session_settings net_settings = context.scene.session_settings
scene = context.scene scene = context.scene
# Create a simple row. # Create a simple row.
@ -31,16 +31,15 @@ class SessionSettingsPanel(bpy.types.Panel):
if net_operators.client: if net_operators.client:
row.label(text="Net frequency:") row.label(text="Net frequency:")
row.prop(net_settings,"update_frequency",text="") row.prop(net_settings, "update_frequency", text="")
row = layout.row() row = layout.row()
row = layout.row() row = layout.row()
row.operator("session.stop", text="exit session") row.operator("session.stop", icon='QUIT', text="Exit")
else: else:
row = layout.row() row = layout.row()
row.prop(scene.session_settings,"username",text="username:") row.prop(scene.session_settings, "username", text="username:")
row = layout.row() row = layout.row()
row.operator("session.join") row.operator("session.join")
row = layout.row() row = layout.row()
@ -48,6 +47,7 @@ class SessionSettingsPanel(bpy.types.Panel):
row = layout.row() row = layout.row()
class SessionUsersPanel(bpy.types.Panel): class SessionUsersPanel(bpy.types.Panel):
"""Creates a Panel in the scene context of the properties editor""" """Creates a Panel in the scene context of the properties editor"""
bl_label = "NET users" bl_label = "NET users"
@ -62,15 +62,15 @@ class SessionUsersPanel(bpy.types.Panel):
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
net_settings = context.scene.session_settings net_settings = context.scene.session_settings
scene = context.scene scene = context.scene
# Create a simple row. # Create a simple row.
row = layout.row() row = layout.row()
if net_operators.client: if net_operators.client:
if len(net_operators.client.property_map) > 0: if len(net_operators.client.property_map) > 0:
for key,values in net_operators.client.property_map.items(): for key, values in net_operators.client.property_map.items():
if 'client' in key: if 'client' in key:
info = "" info = ""
item_box = row.box() item_box = row.box()
@ -79,17 +79,18 @@ class SessionUsersPanel(bpy.types.Panel):
if values.id == net_operators.client.id: if values.id == net_operators.client.id:
info = "(self)" info = "(self)"
# detail_item_box = item_box.row() # detail_item_box = item_box.row()
detail_item_box.label(text="{} {}".format(values.id.decode(),info)) detail_item_box.label(
text="{} {}".format(values.id.decode(), info))
if net_operators.client.id.decode() not in key: if net_operators.client.id.decode() not in key:
detail_item_box.operator("session.snapview",text="",icon='VIEW_CAMERA').target_client = values.id.decode() detail_item_box.operator(
"session.snapview", text="", icon='VIEW_CAMERA').target_client = values.id.decode()
row = layout.row() row = layout.row()
else: else:
row.label(text="Empty") row.label(text="Empty")
row = layout.row() row = layout.row()
class SessionPropertiesPanel(bpy.types.Panel): class SessionPropertiesPanel(bpy.types.Panel):
"""Creates a Panel in the scene context of the properties editor""" """Creates a Panel in the scene context of the properties editor"""
@ -101,11 +102,11 @@ class SessionPropertiesPanel(bpy.types.Panel):
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
return net_operators.client return net_operators.client
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
net_settings = context.scene.session_settings net_settings = context.scene.session_settings
scene = context.scene scene = context.scene
# Create a simple row. # Create a simple row.
@ -113,21 +114,25 @@ class SessionPropertiesPanel(bpy.types.Panel):
if net_operators.client: if net_operators.client:
row = layout.row(align=True) row = layout.row(align=True)
row.prop(net_settings,"buffer", text="") row.prop(net_settings, "buffer", text="")
row.operator("session.add_prop", text="",icon="ADD").property_path = net_settings.buffer row.operator("session.add_prop", text="",
icon="ADD").property_path = net_settings.buffer
row = layout.row() row = layout.row()
# Property area # Property area
area_msg = row.box() area_msg = row.box()
if len(net_operators.client.property_map) > 0: if len(net_operators.client.property_map) > 0:
for key,values in net_operators.client.property_map.items(): for key, values in net_operators.client.property_map.items():
item_box = area_msg.box() item_box = area_msg.box()
detail_item_box = item_box.row() detail_item_box = item_box.row()
# detail_item_box = item_box.row() # detail_item_box = item_box.row()
detail_item_box.label(text="{} ({}) {} ".format(key, values.mtype, values.id.decode())) detail_item_box.label(text="{} ({}) {} ".format(
detail_item_box.operator("session.remove_prop",text="",icon="X").property_path = key key, values.mtype, values.id.decode()))
detail_item_box.operator(
"session.remove_prop", text="", icon="X").property_path = key
else: else:
area_msg.label(text="Empty") area_msg.label(text="Empty")
classes = ( classes = (
SessionSettingsPanel, SessionSettingsPanel,
SessionUsersPanel, SessionUsersPanel,
@ -138,4 +143,4 @@ classes = (
register, unregister = bpy.utils.register_classes_factory(classes) register, unregister = bpy.utils.register_classes_factory(classes)
if __name__ == "__main__": if __name__ == "__main__":
register() register()