Asset Pipeline v2 #145
@ -44,6 +44,7 @@ class AssetTransferMapping:
|
||||
self.object_map = self._gen_object_map()
|
||||
self.collection_map = self._gen_collection_map()
|
||||
self.transfer_data_map = self._gen_transfer_data_map()
|
||||
self.other_id_map = self._gen_other_id_map()
|
||||
|
||||
def _get_external_object(self, local_obj):
|
||||
external_obj_name = asset_suffix.get_target_name(
|
||||
@ -205,3 +206,22 @@ class AssetTransferMapping:
|
||||
)
|
||||
transfer_data_map[name] = map_item
|
||||
return transfer_data_map
|
||||
|
||||
def _gen_other_id_map(self):
|
||||
other_id_map: Dict[bpy.types.ID, bpy.types.ID] = {}
|
||||
for local_id in core.get_other_ids(self._local_col):
|
||||
external_id_name = asset_suffix.get_target_name(local_id.name)
|
||||
id_storage = util.get_storage_of_id(local_id)
|
||||
external_id = id_storage.get(external_id_name)
|
||||
# TODO Check for conflicts
|
||||
if (
|
||||
local_id.asset_id_owner in self._local_tls
|
||||
and local_id.asset_id_owner != "NONE"
|
||||
):
|
||||
if external_id:
|
||||
other_id_map[external_id] = local_id
|
||||
else:
|
||||
if external_id:
|
||||
other_id_map[local_id] = external_id
|
||||
|
||||
return other_id_map
|
||||
|
@ -9,6 +9,7 @@ from .asset_mapping import AssetTransferMapping
|
||||
from . import constants, util
|
||||
|
||||
from rigify.utils.misc import copy_attributes
|
||||
from bpy_extras.id_map_utils import get_id_reference_map, get_all_referenced_ids
|
||||
|
||||
|
||||
def ownership_transfer_data_cleanup(
|
||||
@ -192,6 +193,9 @@ def merge_task_layer(
|
||||
for col in map.collection_map:
|
||||
remap_user(col, map.collection_map[col])
|
||||
|
||||
for id in map.other_id_map:
|
||||
remap_user(id, map.other_id_map[id])
|
||||
|
||||
bpy.ops.outliner.orphans_purge(
|
||||
do_local_ids=True, do_linked_ids=False, do_recursive=True
|
||||
)
|
||||
@ -386,3 +390,24 @@ def find_drivers(drivers, target_type, target_name):
|
||||
if f'{target_type}["{target_name}"]' in driver.data_path:
|
||||
found_drivers.append(driver)
|
||||
return found_drivers
|
||||
|
||||
|
||||
def get_other_ids(collection): # TODO find better name
|
||||
ref_map = get_id_reference_map()
|
||||
all_ids_of_coll = get_all_referenced_ids(collection, ref_map)
|
||||
return [
|
||||
id
|
||||
for id in all_ids_of_coll
|
||||
if type(id) == bpy.types.NodeGroup or type(id) == bpy.types.Image
|
||||
]
|
||||
|
||||
|
||||
def init_other_ids(scene):
|
||||
other_ids = []
|
||||
asset_pipe = scene.asset_pipeline
|
||||
local_col = asset_pipe.asset_collection
|
||||
for id in get_other_ids(local_col):
|
||||
if id.asset_id_owner == 'NONE':
|
||||
id.asset_id_owner = asset_pipe.task_layer_name
|
||||
other_ids.append(id)
|
||||
return other_ids
|
||||
|
@ -103,6 +103,7 @@ class ASSETPIPE_OT_sync_with_publish(bpy.types.Operator):
|
||||
|
||||
_temp_transfer_data = None
|
||||
_invalid_objs = []
|
||||
_other_ids = []
|
||||
|
||||
expand: bpy.props.BoolProperty(
|
||||
name="Show New Transfer Data",
|
||||
@ -144,6 +145,7 @@ class ASSETPIPE_OT_sync_with_publish(bpy.types.Operator):
|
||||
|
||||
# TODO Remove Invalid Objs Explicitly, some will be auto removed but not all
|
||||
self._invalid_objs = core.get_invalid_objects(local_col, context.scene)
|
||||
self._other_ids = core.init_other_ids(context.scene)
|
||||
|
||||
# Default behaviour is to pull before pushing
|
||||
if self.push:
|
||||
@ -165,6 +167,12 @@ class ASSETPIPE_OT_sync_with_publish(bpy.types.Operator):
|
||||
for obj in self._invalid_objs:
|
||||
box.label(text=obj.name, icon="OBJECT_DATA")
|
||||
|
||||
if len(self._other_ids) != 0:
|
||||
box = layout.box()
|
||||
box.label(text="New 'Other IDs' found")
|
||||
for id in self._other_ids:
|
||||
box.label(text=id.name)
|
||||
|
||||
if len(self._temp_transfer_data) == 0:
|
||||
layout.label(text="No New Transfer Data found")
|
||||
else:
|
||||
|
@ -92,7 +92,7 @@ def register():
|
||||
type=AssetTransferData
|
||||
)
|
||||
bpy.types.Scene.asset_pipeline = bpy.props.PointerProperty(type=AssetPipeline)
|
||||
bpy.types.Object.asset_id_owner = bpy.props.EnumProperty(
|
||||
bpy.types.ID.asset_id_owner = bpy.props.EnumProperty(
|
||||
name="ID Owner",
|
||||
items=constants.TASK_LAYER_TYPES_ENUM_ITEMS,
|
||||
)
|
||||
@ -103,4 +103,4 @@ def unregister():
|
||||
bpy.utils.unregister_class(i)
|
||||
del bpy.types.Object.transfer_data_ownership
|
||||
del bpy.types.Scene.asset_pipeline
|
||||
del bpy.types.Object.asset_id_owner
|
||||
del bpy.types.ID.asset_id_owner
|
||||
|
Loading…
Reference in New Issue
Block a user