feat(rcf): mesh transmission attempt

This commit is contained in:
slumber
2019-03-23 21:04:13 +01:00
parent e6171be305
commit 07844955a9
4 changed files with 410 additions and 69 deletions

184
client.json Normal file
View 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
}

View File

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

View File

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