Blender Kitsu: New Assset Tagging System #286
@ -250,6 +250,17 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
|
|||||||
"Shot Builder, if the Asset is casted to the buider's target shot"
|
"Shot Builder, if the Asset is casted to the buider's target shot"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_published_file_path: Path = None
|
||||||
|
|
||||||
|
use_asset_pipeline_publish: bpy.props.BoolProperty( # type: ignore
|
||||||
|
name="Use Asset Pipeline Publish",
|
||||||
|
description=(
|
||||||
|
"Find the Publish of this file in the 'Publish' folder and use it's filepath for Kitsu Asset`"
|
||||||
|
"Selected Collection must be named exactly the same between current file and Publish"
|
||||||
|
),
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
kitsu_props = context.scene.kitsu
|
kitsu_props = context.scene.kitsu
|
||||||
@ -273,9 +284,40 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def is_asset_pipeline_enabled(self, context) -> bool:
|
||||||
|
for addon in context.preferences.addons:
|
||||||
|
if addon.module == "asset_pipeline":
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_asset_pipeline_publish(self, context) -> Path:
|
||||||
|
from asset_pipeline.merge.publish import find_latest_publish
|
||||||
|
|
||||||
|
return find_latest_publish(Path(bpy.data.filepath))
|
||||||
|
|
||||||
|
def invoke(self, context, event):
|
||||||
|
if self.is_asset_pipeline_enabled(context):
|
||||||
|
self._published_file_path = self.get_asset_pipeline_publish(context)
|
||||||
|
if self._published_file_path.exists():
|
||||||
|
self.use_asset_pipeline_publish = True
|
||||||
|
wm = context.window_manager
|
||||||
|
return wm.invoke_props_dialog(self)
|
||||||
|
return self.execute(context)
|
||||||
|
|
||||||
|
def draw(self, context):
|
||||||
|
layout = self.layout
|
||||||
|
relative_path = self._published_file_path.relative_to(Path(bpy.data.filepath).parent)
|
||||||
|
box = layout.box()
|
||||||
|
box.enabled = self.use_asset_pipeline_publish
|
||||||
|
box.label(text=f"//{str(relative_path)}")
|
||||||
|
layout.prop(self, "use_asset_pipeline_publish")
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
project_root = prefs.project_root_dir_get(context)
|
project_root = prefs.project_root_dir_get(context)
|
||||||
relative_path = Path(bpy.data.filepath).relative_to(project_root)
|
if self.use_asset_pipeline_publish:
|
||||||
|
relative_path = self._published_file_path.relative_to(project_root)
|
||||||
|
else:
|
||||||
|
relative_path = Path(bpy.data.filepath).relative_to(project_root)
|
||||||
blender_asset = context.scene.kitsu.asset_col
|
blender_asset = context.scene.kitsu.asset_col
|
||||||
kitsu_asset = cache.asset_active_get()
|
kitsu_asset = cache.asset_active_get()
|
||||||
if not kitsu_asset:
|
if not kitsu_asset:
|
||||||
@ -284,7 +326,8 @@ class KITSU_OT_con_set_asset(bpy.types.Operator):
|
|||||||
|
|
||||||
kitsu_asset.set_asset_path(str(relative_path), blender_asset.name)
|
kitsu_asset.set_asset_path(str(relative_path), blender_asset.name)
|
||||||
self.report(
|
self.report(
|
||||||
{"INFO"}, f"Kitsu Asset '{kitsu_asset.name}' set to Collection '{blender_asset.name}'"
|
{"INFO"},
|
||||||
|
f"Kitsu Asset '{kitsu_asset.name}' set to Collection '{blender_asset.name}' at path '{relative_path}'",
|
||||||
)
|
)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user