feat(rcf): mesh transmission attempt
This commit is contained in:
184
client.json
Normal file
184
client.json
Normal file
@ -0,0 +1,184 @@
|
||||
{
|
||||
"active_material": "Material",
|
||||
"active_material_index": 0,
|
||||
"active_shape_key_index": 0,
|
||||
"data": "Cube",
|
||||
"delta_location": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"delta_scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"dimensions": [
|
||||
2.615931749343872,
|
||||
2.0,
|
||||
2.615931749343872
|
||||
],
|
||||
"display_bounds_type": "BOX",
|
||||
"display_type": "TEXTURED",
|
||||
"empty_display_size": 1.0,
|
||||
"empty_display_type": "ARROWS",
|
||||
"empty_image_depth": "DEFAULT",
|
||||
"empty_image_side": "DOUBLE_SIDED",
|
||||
"hide_render": false,
|
||||
"hide_select": false,
|
||||
"hide_viewport": false,
|
||||
"instance_faces_scale": 1.0,
|
||||
"instance_type": "NONE",
|
||||
"is_evaluated": false,
|
||||
"is_from_instancer": false,
|
||||
"is_from_set": false,
|
||||
"is_instancer": false,
|
||||
"is_library_indirect": false,
|
||||
"location": [
|
||||
-3.7747275829315186,
|
||||
0.3205798268318176,
|
||||
0.3536362648010254
|
||||
],
|
||||
"lock_rotation_w": false,
|
||||
"lock_rotations_4d": false,
|
||||
"matrix_basis": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-3.7747275829315186
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.3205798268318176
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.3536362648010254
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_local": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-3.7747275829315186
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.3205798268318176
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.3536362648010254
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_parent_inverse": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_world": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-3.7747275829315186
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.3205798268318176
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.3536362648010254
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"mode": "OBJECT",
|
||||
"name": "Cube",
|
||||
"name_full": "Cube",
|
||||
"original": "Cube",
|
||||
"parent_bone": "",
|
||||
"parent_type": "OBJECT",
|
||||
"pass_index": 0,
|
||||
"rotation_mode": "XYZ",
|
||||
"scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"show_all_edges": false,
|
||||
"show_axis": false,
|
||||
"show_bounds": false,
|
||||
"show_empty_image_orthographic": true,
|
||||
"show_empty_image_perspective": true,
|
||||
"show_in_front": false,
|
||||
"show_instancer_for_render": true,
|
||||
"show_instancer_for_viewport": true,
|
||||
"show_name": false,
|
||||
"show_only_shape_key": false,
|
||||
"show_texture_space": false,
|
||||
"show_transparent": false,
|
||||
"show_wire": false,
|
||||
"tag": true,
|
||||
"track_axis": "POS_Y",
|
||||
"type": "MESH",
|
||||
"up_axis": "Z",
|
||||
"use_dynamic_topology_sculpting": false,
|
||||
"use_fake_user": false,
|
||||
"use_instance_faces_scale": false,
|
||||
"use_instance_vertices_rotation": false,
|
||||
"use_shape_key_edit_mode": false,
|
||||
"users": 1
|
||||
}
|
@ -226,6 +226,7 @@ class Loader:
|
||||
if filter_function(any):
|
||||
load_function(any, dump)
|
||||
return
|
||||
|
||||
|
||||
def _load_identity(self, element, dump):
|
||||
element.write(dump)
|
||||
@ -298,6 +299,7 @@ class Loader:
|
||||
return # TODO error handling
|
||||
for k in self._ordered_keys(dump.keys()):
|
||||
v = dump[k]
|
||||
print(k)
|
||||
if not hasattr(default.read(), k):
|
||||
continue # TODO error handling
|
||||
self._load_any(default.extend(k), v)
|
||||
|
109
net_operators.py
109
net_operators.py
@ -120,67 +120,6 @@ def randomStringDigits(stringLength=6):
|
||||
return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))
|
||||
|
||||
|
||||
def match_supported_types(value):
|
||||
type_factory = None
|
||||
|
||||
if isinstance(value, bool):
|
||||
print("float")
|
||||
elif isinstance(value, mathutils.Vector):
|
||||
print("vector")
|
||||
type_factory = VectorTypeTranslation()
|
||||
elif isinstance(value, mathutils.Euler):
|
||||
print("Euler")
|
||||
elif type(value) in NATIVE_TYPES:
|
||||
print("native")
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
return type_factory
|
||||
|
||||
|
||||
# TODO: Less ugly method
|
||||
def from_bpy(value):
|
||||
# logger.debug(' casting from bpy')
|
||||
value_type = type(value)
|
||||
value_casted = None
|
||||
|
||||
if value_type is mathutils.Vector or value_type is mathutils.Euler:
|
||||
value_casted = [value.x, value.y, value.z]
|
||||
elif isinstance(value,mathutils.Matrix):
|
||||
value_casted = []
|
||||
for r in value.row:
|
||||
value_casted.extend([r[0], r[1], r[2],r[3]])
|
||||
elif value_type is bpy.props.collection:
|
||||
pass # TODO: Collection replication
|
||||
# elif value_type is mathutils.Euler:
|
||||
# value_casted = [value.x, value.y, value.z]
|
||||
elif value_type in NATIVE_TYPES:
|
||||
value_casted = value
|
||||
|
||||
return str(value.__class__.__name__), value_casted
|
||||
|
||||
|
||||
def to_bpy(store_item):
|
||||
"""
|
||||
Get bpy value from store
|
||||
"""
|
||||
value_type = store_item.mtype
|
||||
value_casted = None
|
||||
store_value = store_item.body
|
||||
|
||||
if value_type == 'Vector' or 'Euler':
|
||||
value_casted = mathutils.Vector(
|
||||
(store_value[0], store_value[1], store_value[2]))
|
||||
if value_type == 'Matrix':
|
||||
mat = mathutils.Matrix()
|
||||
mat[0] = mathutils.Vector((store_value[0], store_value[1], store_value[2], store_value[3]))
|
||||
mat[1] = mathutils.Vector((store_value[4], store_value[5], store_value[6], store_value[7]))
|
||||
mat[2] = mathutils.Vector((store_value[8], store_value[9], store_value[10], store_value[11]))
|
||||
mat[3] = mathutils.Vector((store_value[12], store_value[13], store_value[14], store_value[15]))
|
||||
value_casted = mat
|
||||
return value_casted
|
||||
|
||||
|
||||
def resolve_bpy_path(path):
|
||||
"""
|
||||
Get bpy property value from path
|
||||
@ -229,6 +168,33 @@ def refresh_window():
|
||||
def init_scene():
|
||||
global client
|
||||
|
||||
def load_mesh(target,data):
|
||||
import bmesh
|
||||
|
||||
mesh_buffer = bmesh.new()
|
||||
|
||||
for i in data["vertices"]:
|
||||
mesh_buffer.verts.new(data["vertices"][i]["co"])
|
||||
|
||||
mesh_buffer.verts.ensure_lookup_table()
|
||||
|
||||
for i in data["edges"]:
|
||||
verts = mesh_buffer.verts
|
||||
v1 = data["edges"][i]["vertices"][0]
|
||||
v2 = data["edges"][i]["vertices"][1]
|
||||
mesh_buffer.edges.new([verts[v1],verts[v2]])
|
||||
|
||||
for p in data["polygons"]:
|
||||
verts = []
|
||||
for v in data["polygons"][p]["vertices"]:
|
||||
verts.append(mesh_buffer.verts[v])
|
||||
|
||||
|
||||
if len(verts) > 0:
|
||||
mesh_buffer.faces.new(verts)
|
||||
|
||||
|
||||
mesh_buffer.to_mesh(target)
|
||||
|
||||
def update_scene(msg):
|
||||
global client
|
||||
@ -240,19 +206,24 @@ def update_scene(msg):
|
||||
if bpy.context.scene.session_settings.active_object.name in msg.key:
|
||||
raise ValueError()
|
||||
|
||||
item = resolve_bpy_path(msg.key)
|
||||
|
||||
if item:
|
||||
loader = dump_anything.Loader()
|
||||
loader.load(item, msg.body)
|
||||
|
||||
if msg.mtype == 'Mesh' or 'Object':
|
||||
item = resolve_bpy_path(msg.key)
|
||||
|
||||
if item:
|
||||
loader = dump_anything.Loader()
|
||||
loader.load(item,msg.body)
|
||||
|
||||
if msg.mtype == 'Mesh':
|
||||
load_mesh(item, msg.body)
|
||||
|
||||
print("LOADED")
|
||||
# print(msg.get)
|
||||
# logger.debug("Updating scene:\n object: {} attribute: {} , value: {}".format(
|
||||
# obj, attr_name, value))
|
||||
|
||||
# setattr(obj, attr_name, value)
|
||||
# except:
|
||||
# pass
|
||||
# passñ
|
||||
else:
|
||||
pass
|
||||
# logger.debug('no need to update scene on our own')
|
||||
@ -334,7 +305,7 @@ class session_add_property(bpy.types.Operator):
|
||||
|
||||
dumper = dump_anything.Dumper()
|
||||
dumper.type_subset = dumper.match_subset_all
|
||||
dumper.depth = 3
|
||||
dumper.depth = 4
|
||||
|
||||
data = dumper.dump(item)
|
||||
data_type = item.__class__.__name__
|
||||
|
184
server.json
Normal file
184
server.json
Normal file
@ -0,0 +1,184 @@
|
||||
{
|
||||
"active_material": "Material",
|
||||
"active_material_index": 0,
|
||||
"active_shape_key_index": 0,
|
||||
"data": "Cube",
|
||||
"delta_location": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"delta_scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"dimensions": [
|
||||
2.0,
|
||||
2.0,
|
||||
2.0
|
||||
],
|
||||
"display_bounds_type": "BOX",
|
||||
"display_type": "TEXTURED",
|
||||
"empty_display_size": 1.0,
|
||||
"empty_display_type": "ARROWS",
|
||||
"empty_image_depth": "DEFAULT",
|
||||
"empty_image_side": "DOUBLE_SIDED",
|
||||
"hide_render": false,
|
||||
"hide_select": false,
|
||||
"hide_viewport": false,
|
||||
"instance_faces_scale": 1.0,
|
||||
"instance_type": "NONE",
|
||||
"is_evaluated": false,
|
||||
"is_from_instancer": false,
|
||||
"is_from_set": false,
|
||||
"is_instancer": false,
|
||||
"is_library_indirect": false,
|
||||
"location": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"lock_rotation_w": false,
|
||||
"lock_rotations_4d": false,
|
||||
"matrix_basis": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_local": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_parent_inverse": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"matrix_world": [
|
||||
[
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
],
|
||||
"mode": "OBJECT",
|
||||
"name": "Cube",
|
||||
"name_full": "Cube",
|
||||
"original": "Cube",
|
||||
"parent_bone": "",
|
||||
"parent_type": "OBJECT",
|
||||
"pass_index": 0,
|
||||
"rotation_mode": "XYZ",
|
||||
"scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"show_all_edges": false,
|
||||
"show_axis": false,
|
||||
"show_bounds": false,
|
||||
"show_empty_image_orthographic": true,
|
||||
"show_empty_image_perspective": true,
|
||||
"show_in_front": false,
|
||||
"show_instancer_for_render": true,
|
||||
"show_instancer_for_viewport": true,
|
||||
"show_name": false,
|
||||
"show_only_shape_key": false,
|
||||
"show_texture_space": false,
|
||||
"show_transparent": false,
|
||||
"show_wire": false,
|
||||
"tag": false,
|
||||
"track_axis": "POS_Y",
|
||||
"type": "MESH",
|
||||
"up_axis": "Z",
|
||||
"use_dynamic_topology_sculpting": false,
|
||||
"use_fake_user": false,
|
||||
"use_instance_faces_scale": false,
|
||||
"use_instance_vertices_rotation": false,
|
||||
"use_shape_key_edit_mode": false,
|
||||
"users": 1
|
||||
}
|
Reference in New Issue
Block a user