feat(helper): armature attempt

This commit is contained in:
Swann Martinez
2019-05-03 16:20:40 +02:00
parent 44da21f825
commit 31a72f5001
3 changed files with 46 additions and 31 deletions

1
cache_Armature.001.json Normal file
View File

@ -0,0 +1 @@
{"use_deform_delay": false, "show_names": false, "is_dirty": false, "is_evaluated": false, "tag": false, "pose_position": "POSE", "bones": {}, "id": "user_IM3xRe", "layers": [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_auto_ik": false, "show_bone_custom_shapes": true, "show_group_colors": true, "is_editmode": false, "users": 0, "name_full": "Armature.001", "use_mirror_x": false, "display_type": "OCTAHEDRAL", "layers_protected": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_fake_user": false, "name": "Armature.001", "is_library_indirect": false, "show_axes": false, "edit_bones": {}, "original": {"use_deform_delay": false, "show_names": false, "is_dirty": false, "is_evaluated": false, "tag": false, "pose_position": "POSE", "bones": {}, "id": "user_IM3xRe", "layers": [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_auto_ik": false, "show_bone_custom_shapes": true, "show_group_colors": true, "is_editmode": false, "users": 0, "name_full": "Armature.001", "use_mirror_x": false, "display_type": "OCTAHEDRAL", "layers_protected": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_fake_user": false, "name": "Armature.001", "is_library_indirect": false, "show_axes": false, "edit_bones": {}, "original": {"use_deform_delay": false, "show_names": false, "is_dirty": false, "is_evaluated": false, "tag": false, "pose_position": "POSE", "bones": {}, "id": "user_IM3xRe", "layers": [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_auto_ik": false, "show_bone_custom_shapes": true, "show_group_colors": true, "is_editmode": false, "users": 0, "name_full": "Armature.001", "use_mirror_x": false, "display_type": "OCTAHEDRAL", "layers_protected": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], "use_fake_user": false, "name": "Armature.001", "is_library_indirect": false, "show_axes": false, "edit_bones": {}, "original": {"is_editmode": false, "name": "Armature.001", "is_library_indirect": false, "use_auto_ik": false, "use_mirror_x": false, "name_full": "Armature.001", "use_deform_delay": false, "show_bone_custom_shapes": true, "original": "Armature.001", "show_names": false, "is_dirty": false, "is_evaluated": false, "show_group_colors": true, "display_type": "OCTAHEDRAL", "pose_position": "POSE", "show_axes": false, "tag": false, "id": "user_IM3xRe", "use_fake_user": false, "users": 0}}}}

1
cache_Armature.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
import logging import logging
import sys import sys
from uuid import uuid4 from uuid import uuid4
import json
import bpy import bpy
import mathutils import mathutils
@ -24,33 +25,28 @@ def refresh_window():
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
def get_armature_edition_context(armature): def get_armature_edition_context(armature):
override = bpy.context.copy()
override = {}
# Set correct area # Set correct area
for area in bpy.data.window_managers[0].windows[0].screen.areas : for area in bpy.data.window_managers[0].windows[0].screen.areas :
if area.type == 'VIEW_3D': if area.type == 'VIEW_3D':
override = bpy.context.copy()
override['area'] = area override['area'] = area
break break
# Set correct armature settings # Set correct armature settings
override['window'] = bpy.data.window_managers[0].windows[0]
override['screen'] = bpy.data.window_managers[0].windows[0].screen
override['mode'] = 'EDIT_ARMATURE' override['mode'] = 'EDIT_ARMATURE'
override['active_object'] = armature override['active_object'] = armature
override['selected_objects'] = [armature] override['selected_objects'] = [armature]
edit_object_ref = None
for o in bpy.data.objects: for o in bpy.data.objects:
if o.data == armature: if o.data == armature:
edit_object_ref = o override['edit_object'] = o
break break
if edit_object_ref is None:
edit_object_ref = bpy.data.objects.new(armature.name, armature)
override['edit_object'] = edit_object_ref
return override return override
def get_selected_objects(scene): def get_selected_objects(scene):
@ -106,7 +102,7 @@ def load(key, value):
load_default(target=target, data=value, load_default(target=target, data=value,
create=True, type=target_type) create=True, type=target_type)
elif target_type == 'Armature': elif target_type == 'Armature':
load_armature(target=target, data=value, preload_armature(target=target, data=value,
create=True) create=True)
elif target_type == 'Client': elif target_type == 'Client':
load_client(key.split('/')[1], value) load_client(key.split('/')[1], value)
@ -139,28 +135,39 @@ def load_client(client=None, data=None):
draw.renderer.draw_client_selected_objects(data) draw.renderer.draw_client_selected_objects(data)
def load_armature(target=None, data=None, create=False): def load_armature(target=None, data=None, create=False):
file = "cache_{}.json".format(data['name'])
if not target or not target.is_editmode: if not target or not target.is_editmode:
target = bpy.data.armatures.new(data['name']) target = bpy.data.armatures.new(data['name'])
# Construct a correct execution context
# context = get_armature_edition_context(target)
dump_anything.load(target, data) dump_anything.load(target, data)
# for eb in data['edit_bones']: with open(file, 'w') as fp:
# if eb in target.edit_bones.keys(): json.dump(data, fp)
# # Update the bone fp.close()
# pass
# else:
# # Add new edit bone and load it
# bpy.ops.armature.bone_primitive_add(context)
# target_new_eb = target.edit_bones[eb]
# dump_anything.load(target_new_eb, data['edit_bones'][eb])
# logger.info(eb)
target.id = data['id'] target.id = data['id']
else:
# Construct a correct execution context
context = get_armature_edition_context(target)
file = "cache_{}.json".format(target.name)
with open(file, 'r') as fp:
data = json.load(fp)
if data:
for b in data['bones']:
if b in target.edit_bones.keys():
# Update the bone
pass
else:
# Add new edit bone and load it
bpy.ops.armature.bone_primitive_add(context)
target_new_b = target.bones[b]
dump_anything.load(target_new_b, data['bones'][b])
logger.info(b)
def load_mesh(target=None, data=None, create=False): def load_mesh(target=None, data=None, create=False):
import bmesh import bmesh
@ -222,6 +229,8 @@ def load_object(target=None, data=None, create=False):
target = bpy.data.objects.new(data["name"], pointer) target = bpy.data.objects.new(data["name"], pointer)
# Load other meshes metadata # Load other meshes metadata
dump_anything.load(target, data) dump_anything.load(target, data)
@ -236,8 +245,12 @@ def load_object(target=None, data=None, create=False):
else: else:
target.hide_select = True target.hide_select = True
except: #Post load
logger.error("Object {} loading error ".format(data["name"])) if pointer and pointer.__class__.__name__ == 'Armature':
load_armature(pointer)
except Exception as e:
logger.error("Object {} loading error: {} ".format(data["name"],e))
def load_collection(target=None, data=None, create=False): def load_collection(target=None, data=None, create=False):