Asset Pipeline v2 #145
@ -46,6 +46,7 @@ def draw_task_layer_selection(
|
|||||||
data_owner_name,
|
data_owner_name,
|
||||||
show_all_task_layers=False,
|
show_all_task_layers=False,
|
||||||
show_local=False,
|
show_local=False,
|
||||||
|
text="",
|
||||||
):
|
):
|
||||||
# TODO Simplify Arguments and add Type Hints / Doc String
|
# TODO Simplify Arguments and add Type Hints / Doc String
|
||||||
if show_all_task_layers == True:
|
if show_all_task_layers == True:
|
||||||
@ -54,7 +55,7 @@ def draw_task_layer_selection(
|
|||||||
data_owner_name,
|
data_owner_name,
|
||||||
scene.asset_pipeline,
|
scene.asset_pipeline,
|
||||||
'all_task_layers',
|
'all_task_layers',
|
||||||
text="",
|
text=text,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
if (
|
if (
|
||||||
@ -67,7 +68,7 @@ def draw_task_layer_selection(
|
|||||||
data_owner_name,
|
data_owner_name,
|
||||||
scene.asset_pipeline,
|
scene.asset_pipeline,
|
||||||
'all_task_layers',
|
'all_task_layers',
|
||||||
text="",
|
text=text,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
@ -76,5 +77,5 @@ def draw_task_layer_selection(
|
|||||||
data_owner_name,
|
data_owner_name,
|
||||||
scene.asset_pipeline,
|
scene.asset_pipeline,
|
||||||
'local_task_layers',
|
'local_task_layers',
|
||||||
text="",
|
text=text,
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,7 @@ from .merge.naming import task_layer_prefix_transfer_data_update
|
|||||||
from .merge.task_layer import (
|
from .merge.task_layer import (
|
||||||
set_local_task_layers,
|
set_local_task_layers,
|
||||||
draw_task_layer_selection,
|
draw_task_layer_selection,
|
||||||
|
get_local_task_layers,
|
||||||
)
|
)
|
||||||
from .merge.publish import get_next_published_file, find_all_published
|
from .merge.publish import get_next_published_file, find_all_published
|
||||||
from .images import save_images
|
from .images import save_images
|
||||||
@ -506,6 +507,179 @@ class ASSETPIPE_OT_update_surrendered_transfer_data(bpy.types.Operator):
|
|||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
def get_task_layer_types(self, context):
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
class ASSETPIPE_OT_batch_ownership_change(bpy.types.Operator):
|
||||||
|
bl_idname = "assetpipe.batch_ownership_change"
|
||||||
|
bl_label = "Batch Re-Assign"
|
||||||
|
bl_description = """Re-Assign Ownership in a batch operation"""
|
||||||
|
|
||||||
|
name_filter: bpy.props.StringProperty(
|
||||||
|
name="Filter by Name",
|
||||||
|
description="Filter Object or Transfer Data items by name",
|
||||||
|
default="",
|
||||||
|
)
|
||||||
|
|
||||||
|
data_source: bpy.props.EnumProperty(
|
||||||
|
name="Source",
|
||||||
|
items=(
|
||||||
|
('SELECT', "Selected", "Update Selected Objects Only"),
|
||||||
|
('ALL', "All", "Update All Objects"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
data_status: bpy.props.EnumProperty(
|
||||||
|
name="Owner Status",
|
||||||
|
items=(
|
||||||
|
('OWNED', "Owned", "Only objects that already have assignment"),
|
||||||
|
('ALL', "Any", "Set Ownership on any objects, even without an owner"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
owner_filter: bpy.props.EnumProperty(
|
||||||
|
name="Owner Status",
|
||||||
|
items=(
|
||||||
|
('LOCAL', "Local Task Layers", "Only objects that already have assignment"),
|
||||||
|
(
|
||||||
|
'ALL',
|
||||||
|
"All Task Layers",
|
||||||
|
"Set Ownership on any objects, even without an owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
data_type: bpy.props.EnumProperty(
|
||||||
|
name="Type",
|
||||||
|
items=(
|
||||||
|
('OBJECT', "Object", "Update Owner of Objects"),
|
||||||
|
(
|
||||||
|
'TRANSFER_DATA',
|
||||||
|
"Transfer Data",
|
||||||
|
"Update Owner of Transfer Data with Objects",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
transfer_data_type: bpy.props.EnumProperty(
|
||||||
|
name="Type Filter", items=constants.TRANSFER_DATA_TYPES_ENUM_ITEMS
|
||||||
|
)
|
||||||
|
owner_selection: bpy.props.StringProperty(name="Set Owner")
|
||||||
|
surrender_selection: bpy.props.BoolProperty(name="Set Surrender", default=False)
|
||||||
|
|
||||||
|
def _filter_by_name(self, context, unfiltered_list: []):
|
||||||
|
if self.name_filter == "":
|
||||||
|
return unfiltered_list
|
||||||
|
return [item for item in unfiltered_list if self.name_filter in item.name]
|
||||||
|
|
||||||
|
def _get_transfer_data_to_update(self, context, objs):
|
||||||
|
transfer_data_items_to_update = []
|
||||||
|
if self.data_type == "TRANSFER_DATA":
|
||||||
|
for obj in objs:
|
||||||
|
filtered_transfer_data = self._filter_by_name(
|
||||||
|
context, obj.transfer_data_ownership
|
||||||
|
)
|
||||||
|
for transfer_data_item in filtered_transfer_data:
|
||||||
|
if self.transfer_data_type != "NONE":
|
||||||
|
if transfer_data_item.type == self.transfer_data_type:
|
||||||
|
transfer_data_items_to_update.append(transfer_data_item)
|
||||||
|
else:
|
||||||
|
transfer_data_items_to_update.append(transfer_data_item)
|
||||||
|
return transfer_data_items_to_update
|
||||||
|
|
||||||
|
def _get_object_to_update(self, context):
|
||||||
|
objs = (
|
||||||
|
context.selected_objects
|
||||||
|
if self.data_source == "SELECT"
|
||||||
|
else context.scene.objects
|
||||||
|
)
|
||||||
|
if self.data_status == "OWNED":
|
||||||
|
return [
|
||||||
|
item
|
||||||
|
for item in self._filter_by_name(context, objs)
|
||||||
|
if item.asset_id_owner != "NONE"
|
||||||
|
]
|
||||||
|
return self._filter_by_name(context, objs)
|
||||||
|
|
||||||
|
def invoke(self, context: bpy.types.Context, event: bpy.types.Event):
|
||||||
|
# if self.owner_selection == "NONE":
|
||||||
|
# self.owner_selection = get_local_task_layers()[0]
|
||||||
|
return context.window_manager.invoke_props_dialog(self, width=400)
|
||||||
|
|
||||||
|
def draw(self, context: bpy.types.Context):
|
||||||
|
layout = self.layout
|
||||||
|
split = layout.split(align=True)
|
||||||
|
layout.row(align=True).prop(self, "data_source", expand=True)
|
||||||
|
|
||||||
|
layout.prop(self, "data_type", text="Update Owner of")
|
||||||
|
|
||||||
|
if self.data_type == "OBJECT":
|
||||||
|
box = layout.box()
|
||||||
|
box.prop(self, "data_status")
|
||||||
|
|
||||||
|
if self.data_type == "TRANSFER_DATA":
|
||||||
|
box = layout.box()
|
||||||
|
box.prop(self, "transfer_data_type")
|
||||||
|
box.prop(self, "owner_filter", text="Owner Filter")
|
||||||
|
box.prop(self, "name_filter", text="Name Filter")
|
||||||
|
|
||||||
|
if self.owner_filter == "LOCAL":
|
||||||
|
show_local = True
|
||||||
|
show_all_task_layers = False
|
||||||
|
else:
|
||||||
|
show_local = False
|
||||||
|
show_all_task_layers = True
|
||||||
|
draw_task_layer_selection(
|
||||||
|
box,
|
||||||
|
context.scene,
|
||||||
|
self,
|
||||||
|
self.owner_selection,
|
||||||
|
'owner_selection',
|
||||||
|
show_all_task_layers=show_all_task_layers,
|
||||||
|
show_local=show_local,
|
||||||
|
text="Set Owner",
|
||||||
|
)
|
||||||
|
# TODO Logically this can't be assigned to all objects, only ones I Own?
|
||||||
|
# if self.data_type == "TRANSFER_DATA":
|
||||||
|
# box.prop(self, "surrender_selection", expand=True)
|
||||||
|
|
||||||
|
objs = self._get_object_to_update(context)
|
||||||
|
if self.data_type == "OBJECT":
|
||||||
|
data_type_name = "Object(s)"
|
||||||
|
length = len(objs) if objs else 0
|
||||||
|
else:
|
||||||
|
transfer_data_items_to_update = self._get_transfer_data_to_update(
|
||||||
|
context, objs
|
||||||
|
)
|
||||||
|
data_type_name = "Transfer Data Item(s)"
|
||||||
|
length = (
|
||||||
|
len(transfer_data_items_to_update)
|
||||||
|
if transfer_data_items_to_update
|
||||||
|
else 0
|
||||||
|
)
|
||||||
|
|
||||||
|
layout.label(text=f"Change Ownership on {length} {data_type_name}")
|
||||||
|
|
||||||
|
def execute(self, context: bpy.types.Context):
|
||||||
|
objs = self._get_object_to_update(context)
|
||||||
|
|
||||||
|
if self.data_type == "OBJECT":
|
||||||
|
for obj in objs:
|
||||||
|
obj.asset_id_owner = self.owner_selection
|
||||||
|
else:
|
||||||
|
transfer_data_items_to_update = self._get_transfer_data_to_update(
|
||||||
|
context, objs
|
||||||
|
)
|
||||||
|
|
||||||
|
for transfer_data_item_to_update in transfer_data_items_to_update:
|
||||||
|
transfer_data_item_to_update.owner = self.owner_selection
|
||||||
|
# if self.surrender_selection:
|
||||||
|
# transfer_data_item_to_update.surrender = True
|
||||||
|
|
||||||
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
classes = (
|
classes = (
|
||||||
ASSETPIPE_OT_update_ownership,
|
ASSETPIPE_OT_update_ownership,
|
||||||
ASSETPIPE_OT_sync_push,
|
ASSETPIPE_OT_sync_push,
|
||||||
@ -517,6 +691,7 @@ classes = (
|
|||||||
ASSETPIPE_OT_revert_file,
|
ASSETPIPE_OT_revert_file,
|
||||||
ASSETPIPE_OT_fix_prefixes,
|
ASSETPIPE_OT_fix_prefixes,
|
||||||
ASSETPIPE_OT_update_surrendered_transfer_data,
|
ASSETPIPE_OT_update_surrendered_transfer_data,
|
||||||
|
ASSETPIPE_OT_batch_ownership_change,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ class ASSETPIPE_PT_sync(bpy.types.Panel):
|
|||||||
if not Path(bpy.data.filepath).exists:
|
if not Path(bpy.data.filepath).exists:
|
||||||
layout.label(text="File is not saved", icon="ERROR")
|
layout.label(text="File is not saved", icon="ERROR")
|
||||||
return
|
return
|
||||||
|
|
||||||
if asset_pipe.sync_error or asset_pipe.asset_collection.name.endswith(
|
if asset_pipe.sync_error or asset_pipe.asset_collection.name.endswith(
|
||||||
constants.LOCAL_SUFFIX
|
constants.LOCAL_SUFFIX
|
||||||
):
|
):
|
||||||
@ -79,6 +79,7 @@ class ASSETPIPE_PT_sync_advanced(bpy.types.Panel):
|
|||||||
box = layout.box()
|
box = layout.box()
|
||||||
box.operator("assetpipe.reset_ownership", icon="LOOP_BACK")
|
box.operator("assetpipe.reset_ownership", icon="LOOP_BACK")
|
||||||
box.operator("assetpipe.fix_prefixes", icon="CHECKMARK")
|
box.operator("assetpipe.fix_prefixes", icon="CHECKMARK")
|
||||||
|
box.operator("assetpipe.batch_ownership_change")
|
||||||
box.operator("assetpipe.revert_file", icon="FILE_TICK")
|
box.operator("assetpipe.revert_file", icon="FILE_TICK")
|
||||||
|
|
||||||
# Task Layer Updater
|
# Task Layer Updater
|
||||||
|
Loading…
Reference in New Issue
Block a user