Asset Pipeline v2 #145
11
scripts-blender/addons/asset_pipeline_2/core.py
Normal file
11
scripts-blender/addons/asset_pipeline_2/core.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import bpy
|
||||||
|
|
||||||
|
|
||||||
|
def update_transfer_data(transfer_data_item, target_obj):
|
||||||
|
transfer_data_ownership = target_obj.transfer_data_ownership
|
||||||
|
if transfer_data_item not in transfer_data_ownership.items():
|
||||||
|
new_item = transfer_data_ownership.add()
|
||||||
|
new_item.name = transfer_data_item.name
|
||||||
|
new_item.owner = transfer_data_item.owner
|
||||||
|
new_item.type = transfer_data_item.type
|
||||||
|
new_item.id = transfer_data_item.id
|
@ -1,5 +1,7 @@
|
|||||||
import bpy
|
import bpy
|
||||||
|
|
||||||
|
from . import transfer_functions, core
|
||||||
|
|
||||||
|
|
||||||
class ASSETPIPE_OT_update_ownership(bpy.types.Operator):
|
class ASSETPIPE_OT_update_ownership(bpy.types.Operator):
|
||||||
bl_idname = "assetpipe.update_ownership"
|
bl_idname = "assetpipe.update_ownership"
|
||||||
@ -7,13 +9,17 @@ class ASSETPIPE_OT_update_ownership(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
ownership = context.active_object.asset_ownership
|
ownership = context.active_object.transfer_data_ownership
|
||||||
task_layer_name = obj.name.split(".")[-1]
|
task_layer_name = obj.name.split(".")[-1]
|
||||||
for vertex_group in obj.vertex_groups:
|
for vertex_group in obj.vertex_groups:
|
||||||
if not vertex_group.name in [item.name for item in ownership]:
|
if not vertex_group.name in [item.name for item in ownership]:
|
||||||
item = ownership.add()
|
item = ownership.add()
|
||||||
item.name = vertex_group.name
|
item.name = vertex_group.name
|
||||||
item.owner = task_layer_name.upper()
|
item.owner = task_layer_name.upper()
|
||||||
|
item.type = "VERTEX_GROUP" # TODO Make procedural
|
||||||
|
item.id = bpy.data.objects[
|
||||||
|
f"{obj.name.split('.')[0]}.{obj.asset_id_owner}"
|
||||||
|
]
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
@ -33,19 +39,25 @@ class ASSETPIPE_OT_push_test(bpy.types.Operator):
|
|||||||
publish_col = col
|
publish_col = col
|
||||||
|
|
||||||
# Find Obj owned by Current Task Layer
|
# Find Obj owned by Current Task Layer
|
||||||
push_obj = []
|
push_objs = []
|
||||||
|
transfer_data = []
|
||||||
for obj in task_layer_col.objects:
|
for obj in task_layer_col.objects:
|
||||||
if obj.asset_id_owner == current_task_layer:
|
if obj.asset_id_owner == current_task_layer:
|
||||||
push_obj.append(obj)
|
push_objs.append(obj)
|
||||||
|
# Find Transfer-Data in current TL
|
||||||
|
for item in obj.transfer_data_ownership:
|
||||||
|
if item.owner == current_task_layer:
|
||||||
|
transfer_data.append(item)
|
||||||
|
|
||||||
# Delete existing root OBJ
|
# Delete existing root OBJ
|
||||||
for obj in publish_col.objects:
|
for obj in publish_col.objects:
|
||||||
obj_root_name = obj.name.split('.')[0]
|
obj_root_name = obj.name.split('.')[0]
|
||||||
if f"{obj_root_name}.PUB" in obj.name:
|
for push_obj in push_objs:
|
||||||
|
if f"{obj_root_name}.PUB" in push_obj.name:
|
||||||
bpy.data.objects.remove(obj)
|
bpy.data.objects.remove(obj)
|
||||||
|
|
||||||
# Link new obj to collection
|
# Link new obj to collection
|
||||||
for obj in push_obj:
|
for obj in push_objs:
|
||||||
obj_root_name = obj.name.split('.')[0]
|
obj_root_name = obj.name.split('.')[0]
|
||||||
new_obj = obj.copy()
|
new_obj = obj.copy()
|
||||||
new_obj.data = obj.data.copy()
|
new_obj.data = obj.data.copy()
|
||||||
@ -58,10 +70,21 @@ class ASSETPIPE_OT_push_test(bpy.types.Operator):
|
|||||||
new_obj.location[2] = 3
|
new_obj.location[2] = 3
|
||||||
|
|
||||||
# TODO Move transferrable data onto obj owned by others
|
# TODO Move transferrable data onto obj owned by others
|
||||||
# Find Transfer-Data in current TL
|
for item in transfer_data:
|
||||||
# Find matching Target Object in Publish
|
for obj in publish_col.objects:
|
||||||
# Copy Transfer-Data
|
if obj.name.split(".")[0] == item.id.name.split(".")[0]:
|
||||||
|
transfer_functions.transfer_vertex_group(
|
||||||
|
context=context,
|
||||||
|
vertex_group_name=item.name,
|
||||||
|
target_obj=obj,
|
||||||
|
source_obj=bpy.data.objects[
|
||||||
|
f"{item.id.name.split('.')[0]}.{current_task_layer}"
|
||||||
|
],
|
||||||
|
)
|
||||||
|
core.update_transfer_data(
|
||||||
|
transfer_data_item=item,
|
||||||
|
target_obj=obj,
|
||||||
|
)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,9 @@ avaliable task layers from the task_layer_defaults.json file that needs to be cr
|
|||||||
|
|
||||||
# items=[("MODEL", "Rigging", ""), ("RIG", "Modeling", "")],
|
# items=[("MODEL", "Rigging", ""), ("RIG", "Modeling", "")],
|
||||||
class ASSETOWNERSHIP(bpy.types.PropertyGroup):
|
class ASSETOWNERSHIP(bpy.types.PropertyGroup):
|
||||||
owner: bpy.props.StringProperty(name="ID Owner", default="")
|
owner: bpy.props.StringProperty(name="Transfer Data Owner", default="")
|
||||||
|
type: bpy.props.StringProperty(name="Transfer Data Type", default="")
|
||||||
|
id: bpy.props.PointerProperty(type=bpy.types.Object)
|
||||||
|
|
||||||
|
|
||||||
classes = (ASSETOWNERSHIP,)
|
classes = (ASSETOWNERSHIP,)
|
||||||
@ -17,7 +19,9 @@ classes = (ASSETOWNERSHIP,)
|
|||||||
def register():
|
def register():
|
||||||
for i in classes:
|
for i in classes:
|
||||||
bpy.utils.register_class(i)
|
bpy.utils.register_class(i)
|
||||||
bpy.types.Object.asset_ownership = bpy.props.CollectionProperty(type=ASSETOWNERSHIP)
|
bpy.types.Object.transfer_data_ownership = bpy.props.CollectionProperty(
|
||||||
|
type=ASSETOWNERSHIP
|
||||||
|
)
|
||||||
bpy.types.Object.asset_id_owner = bpy.props.EnumProperty(
|
bpy.types.Object.asset_id_owner = bpy.props.EnumProperty(
|
||||||
name="ID Owner",
|
name="ID Owner",
|
||||||
items=[("NONE", "None", ""), ("MODEL", "Modeling", ""), ("RIG", "Rigging", "")],
|
items=[("NONE", "None", ""), ("MODEL", "Modeling", ""), ("RIG", "Rigging", "")],
|
||||||
@ -27,4 +31,4 @@ def register():
|
|||||||
def unregister():
|
def unregister():
|
||||||
for i in classes:
|
for i in classes:
|
||||||
bpy.utils.unregister_class(i)
|
bpy.utils.unregister_class(i)
|
||||||
del bpy.types.Object.asset_ownership
|
del bpy.types.Object.transfer_data_ownership
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:9224d4dbb2b5f169ca9cf98d3da89dfd550167c7384575ecdc1a473adbb9e814
|
oid sha256:64c2d168bfc8b4c7234cbf48c1b0fdf36cafa0386ec236eaace4a02a0e3d2dae
|
||||||
size 901508
|
size 920988
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
import bpy
|
||||||
|
from bpy import context
|
||||||
|
|
||||||
|
def transfer_vertex_group(context, vertex_group_name:str, target_obj:bpy.types.Object, source_obj:bpy.types.Object):
|
||||||
|
source_obj.vertex_groups.active = source_obj.vertex_groups[vertex_group_name]
|
||||||
|
override = context.copy()
|
||||||
|
override["selected_editable_objects"] = [target_obj, source_obj]
|
||||||
|
override["active_object"] = source_obj
|
||||||
|
override["object"] = source_obj #TODO test if needed
|
||||||
|
with context.temp_override(**override ):
|
||||||
|
bpy.ops.object.data_transfer(
|
||||||
|
data_type="VGROUP_WEIGHTS",
|
||||||
|
use_create=True,
|
||||||
|
vert_mapping='POLYINTERP_NEAREST',
|
||||||
|
layers_select_src="ACTIVE",
|
||||||
|
layers_select_dst="NAME",
|
||||||
|
mix_mode="REPLACE",
|
||||||
|
)
|
@ -19,10 +19,12 @@ class ASSETPIPE_PT_TestUI(bpy.types.Panel):
|
|||||||
if not context.active_object:
|
if not context.active_object:
|
||||||
return
|
return
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
ownership = obj.asset_ownership
|
ownership = obj.transfer_data_ownership
|
||||||
self.layout.prop(obj, "asset_id_owner")
|
self.layout.prop(obj, "asset_id_owner")
|
||||||
for my_item in ownership:
|
for my_item in ownership:
|
||||||
self.layout.label(text=f"{my_item.name} : {my_item.owner}")
|
self.layout.label(
|
||||||
|
text=f"{my_item.name} : {my_item.owner} : {my_item.id.name}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
classes = (ASSETPIPE_PT_TestUI,)
|
classes = (ASSETPIPE_PT_TestUI,)
|
||||||
|
Loading…
Reference in New Issue
Block a user