173 lines
4.5 KiB
Python
173 lines
4.5 KiB
Python
# coding: utf-8
|
|
import unreal
|
|
|
|
import argparse
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-vrm")
|
|
parser.add_argument("-rig")
|
|
parser.add_argument("-debugeachsave")
|
|
args = parser.parse_args()
|
|
#print(args.vrm)
|
|
|
|
|
|
######
|
|
|
|
rigs = unreal.ControlRigBlueprint.get_currently_open_rig_blueprints()
|
|
print(rigs)
|
|
|
|
for r in rigs:
|
|
s:str = r.get_path_name()
|
|
ss:str = args.rig
|
|
if (s.find(ss) < 0):
|
|
print("no rig")
|
|
else:
|
|
rig = r
|
|
|
|
|
|
h_mod = rig.get_hierarchy_modifier()
|
|
|
|
elements = h_mod.get_selection()
|
|
|
|
print(unreal.SystemLibrary.get_engine_version())
|
|
if (unreal.SystemLibrary.get_engine_version()[0] == '5'):
|
|
c = rig.get_controller()
|
|
else:
|
|
c = rig.controller
|
|
|
|
g = c.get_graph()
|
|
n = g.get_nodes()
|
|
|
|
mesh = rig.get_preview_mesh()
|
|
morphList = mesh.get_all_morph_target_names()
|
|
morphListWithNo = morphList[:]
|
|
|
|
morphListRenamed = []
|
|
morphListRenamed.clear()
|
|
|
|
|
|
for i in range(len(morphList)):
|
|
morphListWithNo[i] = '{}'.format(morphList[i])
|
|
|
|
|
|
print(morphListWithNo)
|
|
|
|
###### root
|
|
key = unreal.RigElementKey(unreal.RigElementType.SPACE, 'MorphControlRoot_s')
|
|
space = h_mod.get_space(key)
|
|
if (space.get_editor_property('index') < 0):
|
|
space = h_mod.add_space('MorphControlRoot_s', space_type=unreal.RigSpaceType.SPACE)
|
|
else:
|
|
space = key
|
|
|
|
|
|
a:unreal.RigUnit_CollectionItems = unreal.RigUnit_CollectionItems()
|
|
|
|
print(a)
|
|
|
|
# 配列ノード追加
|
|
values_forCurve:unreal.RigVMStructNode = []
|
|
items_forControl:unreal.RigVMStructNode = []
|
|
items_forCurve:unreal.RigVMStructNode = []
|
|
|
|
|
|
for node in n:
|
|
print(node)
|
|
print(node.get_node_title())
|
|
|
|
# set curve num
|
|
if (node.get_node_title() == 'For Loop'):
|
|
print(node)
|
|
pin = node.find_pin('Count')
|
|
print(pin)
|
|
c.set_pin_default_value(pin.get_pin_path(), str(len(morphList)))
|
|
|
|
# curve name array pin
|
|
if (node.get_node_title() == 'Select'):
|
|
print(node)
|
|
pin = node.find_pin('Values')
|
|
#print(pin)
|
|
#print(pin.get_array_size())
|
|
#print(pin.get_default_value())
|
|
values_forCurve.append(pin)
|
|
|
|
# items
|
|
if (node.get_node_title() == 'Items'):
|
|
if ("Type=Curve," in c.get_pin_default_value(node.find_pin('Items').get_pin_path())):
|
|
items_forCurve.append(node.find_pin('Items'))
|
|
else:
|
|
items_forControl.append(node.find_pin('Items'))
|
|
|
|
print(values_forCurve)
|
|
|
|
# reset controller
|
|
for e in reversed(h_mod.get_elements()):
|
|
if (e.type!= unreal.RigElementType.CONTROL):
|
|
continue
|
|
tmp = h_mod.get_control(e)
|
|
if (tmp.space_name == 'MorphControlRoot_s'):
|
|
#if (str(e.name).rstrip('_c') in morphList):
|
|
# continue
|
|
print('delete')
|
|
#print(str(e.name))
|
|
h_mod.remove_element(e)
|
|
|
|
|
|
# curve array
|
|
for v in values_forCurve:
|
|
c.clear_array_pin(v.get_pin_path())
|
|
for morph in morphList:
|
|
tmp = "{}".format(morph)
|
|
c.add_array_pin(v.get_pin_path(), default_value=tmp)
|
|
|
|
# curve controller
|
|
for morph in morphListWithNo:
|
|
name_c = "{}_c".format(morph)
|
|
key = unreal.RigElementKey(unreal.RigElementType.CONTROL, name_c)
|
|
try:
|
|
control = h_mod.get_control(key)
|
|
if (control.get_editor_property('index') < 0):
|
|
k = h_mod.add_control(name_c,
|
|
control_type=unreal.RigControlType.FLOAT,
|
|
space_name=space.name,
|
|
gizmo_color=[1.0, 0.0, 0.0, 1.0],
|
|
)
|
|
control = h_mod.get_control(k)
|
|
except:
|
|
k = h_mod.add_control(name_c,
|
|
control_type=unreal.RigControlType.FLOAT,
|
|
space_name=space.name,
|
|
gizmo_color=[1.0, 0.0, 0.0, 1.0],
|
|
)
|
|
control = h_mod.get_control(k)
|
|
control.set_editor_property('gizmo_visible', False)
|
|
control.set_editor_property('gizmo_enabled', False)
|
|
h_mod.set_control(control)
|
|
|
|
morphListRenamed.append(control.get_editor_property('name'))
|
|
if (args.debugeachsave == '1'):
|
|
try:
|
|
unreal.EditorAssetLibrary.save_loaded_asset(rig)
|
|
except:
|
|
print('save error')
|
|
#unreal.SystemLibrary.collect_garbage()
|
|
|
|
# curve Control array
|
|
for v in items_forControl:
|
|
c.clear_array_pin(v.get_pin_path())
|
|
for morph in morphListRenamed:
|
|
tmp = '(Type=Control,Name='
|
|
tmp += "{}".format(morph)
|
|
tmp += ')'
|
|
c.add_array_pin(v.get_pin_path(), default_value=tmp)
|
|
|
|
# curve Float array
|
|
for v in items_forCurve:
|
|
c.clear_array_pin(v.get_pin_path())
|
|
for morph in morphList:
|
|
tmp = '(Type=Curve,Name='
|
|
tmp += "{}".format(morph)
|
|
tmp += ')'
|
|
c.add_array_pin(v.get_pin_path(), default_value=tmp)
|
|
|
|
|