feat(helper): armature attempt
This commit is contained in:
1
cache_Armature.001.json
Normal file
1
cache_Armature.001.json
Normal 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
1
cache_Armature.json
Normal file
File diff suppressed because one or more lines are too long
69
helpers.py
69
helpers.py
@ -1,6 +1,7 @@
|
||||
import logging
|
||||
import sys
|
||||
from uuid import uuid4
|
||||
import json
|
||||
|
||||
import bpy
|
||||
import mathutils
|
||||
@ -24,33 +25,28 @@ def refresh_window():
|
||||
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
|
||||
|
||||
def get_armature_edition_context(armature):
|
||||
override = bpy.context.copy()
|
||||
|
||||
override = {}
|
||||
# Set correct area
|
||||
for area in bpy.data.window_managers[0].windows[0].screen.areas :
|
||||
if area.type == 'VIEW_3D':
|
||||
override = bpy.context.copy()
|
||||
override['area'] = area
|
||||
break
|
||||
|
||||
# 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['active_object'] = armature
|
||||
override['selected_objects'] = [armature]
|
||||
|
||||
edit_object_ref = None
|
||||
|
||||
for o in bpy.data.objects:
|
||||
if o.data == armature:
|
||||
edit_object_ref = o
|
||||
override['edit_object'] = o
|
||||
|
||||
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
|
||||
|
||||
def get_selected_objects(scene):
|
||||
@ -106,7 +102,7 @@ def load(key, value):
|
||||
load_default(target=target, data=value,
|
||||
create=True, type=target_type)
|
||||
elif target_type == 'Armature':
|
||||
load_armature(target=target, data=value,
|
||||
preload_armature(target=target, data=value,
|
||||
create=True)
|
||||
elif target_type == 'Client':
|
||||
load_client(key.split('/')[1], value)
|
||||
@ -139,28 +135,39 @@ def load_client(client=None, data=None):
|
||||
draw.renderer.draw_client_selected_objects(data)
|
||||
|
||||
def load_armature(target=None, data=None, create=False):
|
||||
file = "cache_{}.json".format(data['name'])
|
||||
|
||||
if not target or not target.is_editmode:
|
||||
target = bpy.data.armatures.new(data['name'])
|
||||
|
||||
# Construct a correct execution context
|
||||
# context = get_armature_edition_context(target)
|
||||
|
||||
dump_anything.load(target, data)
|
||||
|
||||
# for eb in data['edit_bones']:
|
||||
# if eb in target.edit_bones.keys():
|
||||
# # Update the bone
|
||||
# pass
|
||||
# else:
|
||||
# # Add new edit bone and load it
|
||||
# bpy.ops.armature.bone_primitive_add(context)
|
||||
with open(file, 'w') as fp:
|
||||
json.dump(data, fp)
|
||||
fp.close()
|
||||
|
||||
# target_new_eb = target.edit_bones[eb]
|
||||
# dump_anything.load(target_new_eb, data['edit_bones'][eb])
|
||||
|
||||
# logger.info(eb)
|
||||
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):
|
||||
import bmesh
|
||||
@ -222,6 +229,8 @@ def load_object(target=None, data=None, create=False):
|
||||
|
||||
target = bpy.data.objects.new(data["name"], pointer)
|
||||
|
||||
|
||||
|
||||
# Load other meshes metadata
|
||||
dump_anything.load(target, data)
|
||||
|
||||
@ -236,8 +245,12 @@ def load_object(target=None, data=None, create=False):
|
||||
else:
|
||||
target.hide_select = True
|
||||
|
||||
except:
|
||||
logger.error("Object {} loading error ".format(data["name"]))
|
||||
#Post load
|
||||
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):
|
||||
|
Reference in New Issue
Block a user