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 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):
|
||||||
|
Reference in New Issue
Block a user