feat(rcf): early work on update
This commit is contained in:
111
net_operators.py
111
net_operators.py
@ -24,7 +24,7 @@ server = None
|
|||||||
context = None
|
context = None
|
||||||
drawer = None
|
drawer = None
|
||||||
update_list = {}
|
update_list = {}
|
||||||
|
update_tasks = queue.Queue()
|
||||||
|
|
||||||
def add_update(type, item):
|
def add_update(type, item):
|
||||||
try:
|
try:
|
||||||
@ -136,9 +136,9 @@ def upload_mesh(mesh):
|
|||||||
mesh, ['name', 'polygons', 'edges', 'vertices'], 6)
|
mesh, ['name', 'polygons', 'edges', 'vertices'], 6)
|
||||||
|
|
||||||
|
|
||||||
def upload_material(mesh):
|
def upload_material(material):
|
||||||
if mesh.bl_rna.name == 'Material':
|
if material.bl_rna.name == 'Material':
|
||||||
dump_datablock_attibute(mesh, ['name', 'node_tree'], 7)
|
dump_datablock_attibute(material, ['name', 'node_tree'], 7)
|
||||||
|
|
||||||
def upload_gpencil(gpencil):
|
def upload_gpencil(gpencil):
|
||||||
if gpencil.bl_rna.name == 'Grease Pencil':
|
if gpencil.bl_rna.name == 'Grease Pencil':
|
||||||
@ -346,14 +346,12 @@ def load_material(target=None, data=None, create=False):
|
|||||||
|
|
||||||
for link in data["node_tree"]["links"]:
|
for link in data["node_tree"]["links"]:
|
||||||
current_link = data["node_tree"]["links"][link]
|
current_link = data["node_tree"]["links"][link]
|
||||||
print(target.node_tree.nodes[current_link['to_node']['name']])
|
|
||||||
input_socket = target.node_tree.nodes[current_link['to_node']
|
input_socket = target.node_tree.nodes[current_link['to_node']
|
||||||
['name']].inputs[current_link['to_socket']['name']]
|
['name']].inputs[current_link['to_socket']['name']]
|
||||||
output_socket = target.node_tree.nodes[current_link['from_node']
|
output_socket = target.node_tree.nodes[current_link['from_node']
|
||||||
['name']].outputs[current_link['from_socket']['name']]
|
['name']].outputs[current_link['from_socket']['name']]
|
||||||
|
|
||||||
target.node_tree.links.new(input_socket, output_socket)
|
target.node_tree.links.new(input_socket, output_socket)
|
||||||
print(data["node_tree"]["links"][link])
|
|
||||||
|
|
||||||
except:
|
except:
|
||||||
print("Material loading error")
|
print("Material loading error")
|
||||||
@ -436,6 +434,9 @@ def update_scene(msg):
|
|||||||
if 'net' not in msg.key:
|
if 'net' not in msg.key:
|
||||||
target = resolve_bpy_path(msg.key)
|
target = resolve_bpy_path(msg.key)
|
||||||
|
|
||||||
|
if target:
|
||||||
|
target.is_updating = True
|
||||||
|
|
||||||
if msg.mtype == 'Object':
|
if msg.mtype == 'Object':
|
||||||
load_object(target=target, data=msg.body,
|
load_object(target=target, data=msg.body,
|
||||||
create=net_vars.load_data)
|
create=net_vars.load_data)
|
||||||
@ -459,7 +460,7 @@ def update_scene(msg):
|
|||||||
elif 'Light' in msg.mtype:
|
elif 'Light' in msg.mtype:
|
||||||
load_light(target=target, data=msg.body,
|
load_light(target=target, data=msg.body,
|
||||||
create=net_vars.load_data)
|
create=net_vars.load_data)
|
||||||
elif msg.mtype == 'Camera':
|
else:
|
||||||
load_default(target=target, data=msg.body,
|
load_default(target=target, data=msg.body,
|
||||||
create=net_vars.load_data, type=msg.mtype)
|
create=net_vars.load_data, type=msg.mtype)
|
||||||
else:
|
else:
|
||||||
@ -481,10 +482,22 @@ def update_scene(msg):
|
|||||||
|
|
||||||
refresh_window()
|
refresh_window()
|
||||||
|
|
||||||
|
def push(data_type,id):
|
||||||
|
print(data_type)
|
||||||
|
if data_type == 'Material':
|
||||||
|
upload_material(bpy.data.materials[id])
|
||||||
|
|
||||||
|
|
||||||
recv_callbacks = [update_scene]
|
recv_callbacks = [update_scene]
|
||||||
post_init_callbacks = [refresh_window]
|
post_init_callbacks = [refresh_window]
|
||||||
|
|
||||||
|
def default_tick():
|
||||||
|
if not update_tasks.empty():
|
||||||
|
update = update_tasks.get()
|
||||||
|
|
||||||
|
push(update[0],update[1])
|
||||||
|
|
||||||
|
return 2
|
||||||
|
|
||||||
def mesh_tick():
|
def mesh_tick():
|
||||||
mesh = get_update("Mesh")
|
mesh = get_update("Mesh")
|
||||||
@ -496,10 +509,14 @@ def mesh_tick():
|
|||||||
|
|
||||||
|
|
||||||
def object_tick():
|
def object_tick():
|
||||||
obj = get_update("Object")
|
obj_name = get_update("Object")
|
||||||
|
global client
|
||||||
|
|
||||||
if obj:
|
if obj_name:
|
||||||
dump_datablock_attibute(bpy.data.objects[obj], ['matrix_world'])
|
if "Object/{}".format(obj_name) in client.property_map.keys():
|
||||||
|
dump_datablock_attibute(bpy.data.objects[obj_name], ['matrix_world'])
|
||||||
|
else:
|
||||||
|
dump_datablock(bpy.data.objects[obj_name], 1)
|
||||||
|
|
||||||
return 0.1
|
return 0.1
|
||||||
|
|
||||||
@ -524,7 +541,7 @@ def register_ticks():
|
|||||||
bpy.app.timers.register(draw_tick)
|
bpy.app.timers.register(draw_tick)
|
||||||
bpy.app.timers.register(mesh_tick)
|
bpy.app.timers.register(mesh_tick)
|
||||||
bpy.app.timers.register(object_tick)
|
bpy.app.timers.register(object_tick)
|
||||||
|
bpy.app.timers.register(default_tick)
|
||||||
|
|
||||||
def unregister_ticks():
|
def unregister_ticks():
|
||||||
# REGISTER Updaters
|
# REGISTER Updaters
|
||||||
@ -533,7 +550,7 @@ def unregister_ticks():
|
|||||||
bpy.app.timers.unregister(draw_tick)
|
bpy.app.timers.unregister(draw_tick)
|
||||||
bpy.app.timers.unregister(mesh_tick)
|
bpy.app.timers.unregister(mesh_tick)
|
||||||
bpy.app.timers.unregister(object_tick)
|
bpy.app.timers.unregister(object_tick)
|
||||||
|
bpy.app.timers.unregister(default_tick)
|
||||||
|
|
||||||
# OPERATORS
|
# OPERATORS
|
||||||
class session_join(bpy.types.Operator):
|
class session_join(bpy.types.Operator):
|
||||||
@ -767,37 +784,48 @@ classes = (
|
|||||||
|
|
||||||
def depsgraph_update(scene):
|
def depsgraph_update(scene):
|
||||||
global client
|
global client
|
||||||
# for c in (bpy.context.depsgraph.updates.items()):
|
|
||||||
# print("UPDATE {}".format(c[1].id))
|
if client and client.status == net_components.RCFStatus.CONNECTED:
|
||||||
if client:
|
updates = bpy.context.depsgraph.updates
|
||||||
update_selected_object(bpy.context)
|
update_selected_object(bpy.context)
|
||||||
for c in bpy.context.depsgraph.updates.items():
|
|
||||||
if client.status == net_components.RCFStatus.CONNECTED:
|
# Update selected object
|
||||||
if scene.session_settings.active_object:
|
for update in updates.items():
|
||||||
if c[1].is_updated_geometry:
|
updated_data = update[1]
|
||||||
# print('geometry {}'.format(c[1].id.name))
|
if scene.session_settings.active_object and updated_data.id.name == scene.session_settings.active_object.name:
|
||||||
if c[1].id.name == scene.session_settings.active_object.name:
|
if updated_data.is_updated_transform or updated_data.is_updated_geometry:
|
||||||
add_update(c[1].id.bl_rna.name, c[1].id.name)
|
add_update(updated_data.id.bl_rna.name, updated_data.id.name)
|
||||||
elif c[1].is_updated_transform:
|
elif updated_data.id.is_updating:
|
||||||
# print('transform{}'.format(c[1].id.name))
|
updated_data.id.is_updating = False
|
||||||
if c[1].id.name == scene.session_settings.active_object.name:
|
elif updated_data.id.bl_rna.name in ['Material']:
|
||||||
add_update(c[1].id.bl_rna.name, c[1].id.name)
|
update_tasks.put((updated_data.id.bl_rna.name, updated_data.id.name))
|
||||||
else:
|
|
||||||
pass
|
# for c in reversed(updates.items()):
|
||||||
|
# if c[1].is_updated_geometry:
|
||||||
|
# print("{} - {}".format(c[1].id.name,c[1].id.bl_rna.name))
|
||||||
|
# for c in updates.items():
|
||||||
|
# if scene.session_settings.active_object:
|
||||||
|
# if c[1].id.name == scene.session_settings.active_object.name:
|
||||||
|
# if c[1].is_updated_geometry:
|
||||||
|
# add_update(c[1].id.bl_rna.name, c[1].id.name)
|
||||||
|
# elif c[1].is_updated_transform:
|
||||||
|
# add_update(c[1].id.bl_rna.name, c[1].id.name)
|
||||||
|
# else:
|
||||||
|
# pass
|
||||||
# print('other{}'.format(c[1].id.name))
|
# print('other{}'.format(c[1].id.name))
|
||||||
# if c[1].id.bl_rna.name == 'Material' or c[1].id.bl_rna.name== 'Shader Nodetree':
|
# if c[1].id.bl_rna.name == 'Material' or c[1].id.bl_rna.name== 'Shader Nodetree':
|
||||||
print(len(bpy.context.depsgraph.updates.items()))
|
# print(len(bpy.context.depsgraph.updates.items()))
|
||||||
data_name = c[1].id.name
|
# data_name = c[1].id.name
|
||||||
if c[1].id.bl_rna.name == "Object":
|
# if c[1].id.bl_rna.name == "Object":
|
||||||
if data_name in bpy.data.objects.keys():
|
# if data_name in bpy.data.objects.keys():
|
||||||
found = False
|
# found = False
|
||||||
for k in client.property_map.keys():
|
# for k in client.property_map.keys():
|
||||||
if data_name in k:
|
# if data_name in k:
|
||||||
found = True
|
# found = True
|
||||||
break
|
# break
|
||||||
|
|
||||||
if not found:
|
# if not found:
|
||||||
pass
|
# pass
|
||||||
# upload_mesh(bpy.data.objects[data_name].data)
|
# upload_mesh(bpy.data.objects[data_name].data)
|
||||||
# dump_datablock(bpy.data.objects[data_name], 1)
|
# dump_datablock(bpy.data.objects[data_name], 1)
|
||||||
# dump_datablock(bpy.data.scenes[0], 4)
|
# dump_datablock(bpy.data.scenes[0], 4)
|
||||||
@ -810,7 +838,7 @@ def register():
|
|||||||
from bpy.utils import register_class
|
from bpy.utils import register_class
|
||||||
for cls in classes:
|
for cls in classes:
|
||||||
register_class(cls)
|
register_class(cls)
|
||||||
|
bpy.types.ID.is_updating = bpy.props.BoolProperty(default=False)
|
||||||
bpy.types.Scene.session_settings = bpy.props.PointerProperty(
|
bpy.types.Scene.session_settings = bpy.props.PointerProperty(
|
||||||
type=session_settings)
|
type=session_settings)
|
||||||
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update)
|
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update)
|
||||||
@ -822,7 +850,6 @@ def unregister():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update)
|
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -840,7 +867,7 @@ def unregister():
|
|||||||
unregister_class(cls)
|
unregister_class(cls)
|
||||||
|
|
||||||
del bpy.types.Scene.session_settings
|
del bpy.types.Scene.session_settings
|
||||||
|
del bpy.types.ID.is_updating
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
register()
|
register()
|
||||||
|
Reference in New Issue
Block a user