Blender Kitsu: Refactor Shot Builder #183
@ -169,7 +169,7 @@ def create_task_type_output_collection(
|
|||||||
scene: bpy.types.Scene, shot: Shot, task_type: TaskType
|
scene: bpy.types.Scene, shot: Shot, task_type: TaskType
|
||||||
) -> bpy.types.Collection:
|
) -> bpy.types.Collection:
|
||||||
collections = bpy.data.collections
|
collections = bpy.data.collections
|
||||||
output_col_name = shot.get_output_collection_name(task_type)
|
output_col_name = shot.get_output_collection_name(task_type.get_short_name())
|
||||||
|
|
||||||
if not collections.get(output_col_name):
|
if not collections.get(output_col_name):
|
||||||
bpy.data.collections.new(name=output_col_name)
|
bpy.data.collections.new(name=output_col_name)
|
||||||
@ -187,14 +187,16 @@ def create_task_type_output_collection(
|
|||||||
return output_collection
|
return output_collection
|
||||||
|
|
||||||
|
|
||||||
def link_task_type_output_collections(shot: Shot, task_short_name: str):
|
def link_task_type_output_collections(shot: Shot, task_type: TaskType):
|
||||||
# TODO TEST IF THIS WORKS
|
task_type_short_name = task_type.get_short_name()
|
||||||
if bkglobals.OUTPUT_COL_LINK_MAPPING.get(task_short_name) == None:
|
if bkglobals.OUTPUT_COL_LINK_MAPPING.get(task_type_short_name) == None:
|
||||||
return
|
return
|
||||||
for short_name in bkglobals.OUTPUT_COL_LINK_MAPPING.get(task_short_name):
|
for short_name in bkglobals.OUTPUT_COL_LINK_MAPPING.get(task_type_short_name):
|
||||||
external_filepath = shot.get_shot_filepath(bpy.context, short_name)
|
external_filepath = shot.get_shot_filepath(bpy.context, short_name)
|
||||||
if not external_filepath.exists():
|
if not Path(external_filepath).exists():
|
||||||
print(f"Unable to link output collection for {external_filepath.name}")
|
print(
|
||||||
|
f"Unable to link output collection for {Path(external_filepath).name}"
|
||||||
|
)
|
||||||
file_path = external_filepath.__str__()
|
file_path = external_filepath.__str__()
|
||||||
colection_name = shot.get_shot_task_name(short_name)
|
colection_name = shot.get_output_collection_name(short_name)
|
||||||
link_data_block(file_path, colection_name)
|
link_data_block(file_path, colection_name, 'Collection')
|
||||||
|
@ -201,14 +201,14 @@ class KITSU_OT_build_new_shot(bpy.types.Operator):
|
|||||||
seq = active_project.get_sequence(self.seq_id)
|
seq = active_project.get_sequence(self.seq_id)
|
||||||
shot = active_project.get_shot(self.shot_id)
|
shot = active_project.get_shot(self.shot_id)
|
||||||
task_type = self._get_task_type_for_shot(context, shot)
|
task_type = self._get_task_type_for_shot(context, shot)
|
||||||
task_short_name = task_type.get_short_name()
|
task_type_short_name = task_type.get_short_name()
|
||||||
shot_file_path_str = shot.get_shot_filepath(context, task_type)
|
shot_file_path_str = shot.get_shot_filepath(context, task_type_short_name)
|
||||||
|
|
||||||
# Open Template File
|
# Open Template File
|
||||||
replace_workspace_with_template(context, task_short_name)
|
replace_workspace_with_template(context, task_type_short_name)
|
||||||
|
|
||||||
# Set Up Scene + Naming
|
# Set Up Scene + Naming
|
||||||
shot_task_name = shot.get_shot_task_name(task_type)
|
shot_task_name = shot.get_shot_task_name(task_type.get_short_name())
|
||||||
scene = set_shot_scene(context, shot_task_name)
|
scene = set_shot_scene(context, shot_task_name)
|
||||||
remove_all_data()
|
remove_all_data()
|
||||||
set_resolution_and_fps(active_project, scene)
|
set_resolution_and_fps(active_project, scene)
|
||||||
@ -218,33 +218,33 @@ class KITSU_OT_build_new_shot(bpy.types.Operator):
|
|||||||
# TODO Only run if saving file
|
# TODO Only run if saving file
|
||||||
|
|
||||||
# Set Render Settings
|
# Set Render Settings
|
||||||
if task_short_name == 'anim': # TODO get anim from a constant instead
|
if task_type_short_name == 'anim': # TODO get anim from a constant instead
|
||||||
set_render_engine(context.scene, 'BLENDER_WORKBENCH')
|
set_render_engine(context.scene, 'BLENDER_WORKBENCH')
|
||||||
else:
|
else:
|
||||||
set_render_engine(context.scene)
|
set_render_engine(context.scene)
|
||||||
|
|
||||||
# Create Output Collection & Link Camera
|
# Create Output Collection & Link Camera
|
||||||
if bkglobals.OUTPUT_COL_CREATE.get(task_short_name):
|
if bkglobals.OUTPUT_COL_CREATE.get(task_type_short_name):
|
||||||
output_col = create_task_type_output_collection( # TODO imporve
|
output_col = create_task_type_output_collection( # TODO imporve
|
||||||
context.scene, shot, task_type
|
context.scene, shot, task_type
|
||||||
)
|
)
|
||||||
if task_short_name == 'anim':
|
if task_type_short_name == 'anim':
|
||||||
link_camera_rig(context.scene, output_col)
|
link_camera_rig(context.scene, output_col)
|
||||||
|
|
||||||
# Load Assets
|
# Load Assets
|
||||||
get_shot_assets(scene=scene, output_collection=output_col, shot=shot)
|
get_shot_assets(scene=scene, output_collection=output_col, shot=shot)
|
||||||
|
|
||||||
# Link External Output Collections
|
# Link External Output Collections
|
||||||
link_task_type_output_collections(shot, task_short_name)
|
link_task_type_output_collections(shot, task_type)
|
||||||
|
|
||||||
if bkglobals.LOAD_EDITORIAL_REF.get(task_short_name):
|
if bkglobals.LOAD_EDITORIAL_REF.get(task_type_short_name):
|
||||||
editorial_export_get_latest(context, shot)
|
editorial_export_get_latest(context, shot)
|
||||||
|
|
||||||
# Run Hooks
|
# Run Hooks
|
||||||
hooks_instance = Hooks()
|
hooks_instance = Hooks()
|
||||||
hooks_instance.load_hooks(context)
|
hooks_instance.load_hooks(context)
|
||||||
hooks_instance.execute_hooks(
|
hooks_instance.execute_hooks(
|
||||||
match_task_type=task_short_name,
|
match_task_type=task_type_short_name,
|
||||||
scene=context.scene,
|
scene=context.scene,
|
||||||
shot=shot,
|
shot=shot,
|
||||||
prod_path=prefs.project_root_dir_get(context),
|
prod_path=prefs.project_root_dir_get(context),
|
||||||
|
@ -13,23 +13,25 @@ def get_template_files() -> list[Path]:
|
|||||||
return list(dir.glob('*.blend'))
|
return list(dir.glob('*.blend'))
|
||||||
|
|
||||||
|
|
||||||
def get_template_for_task_type(task_short_name: str) -> Path:
|
def get_template_for_task_type(task_type_short_name: str) -> Path:
|
||||||
for file in get_template_files():
|
for file in get_template_files():
|
||||||
if file.stem == task_short_name:
|
if file.stem == task_type_short_name:
|
||||||
return file
|
return file
|
||||||
|
|
||||||
|
|
||||||
def open_template_for_task_type(task_short_name: str) -> bool:
|
def open_template_for_task_type(task_type_short_name: str) -> bool:
|
||||||
# TODO THIS DOESN'T WORK BECAUSE CHANGE THE OPEN FILE MESSES UP THE CONTEXT SOMEHOW
|
# TODO THIS DOESN'T WORK BECAUSE CHANGE THE OPEN FILE MESSES UP THE CONTEXT SOMEHOW
|
||||||
file_path = get_template_for_task_type(task_short_name)
|
file_path = get_template_for_task_type(task_type_short_name)
|
||||||
if file_path.exists() and file_path is not None:
|
if file_path.exists() and file_path is not None:
|
||||||
bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=file_path.__str__())
|
bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=file_path.__str__())
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def replace_workspace_with_template(context: bpy.types.Context, task_short_name: str):
|
def replace_workspace_with_template(
|
||||||
file_path = get_template_for_task_type(task_short_name).resolve().absolute()
|
context: bpy.types.Context, task_type_short_name: str
|
||||||
|
):
|
||||||
|
file_path = get_template_for_task_type(task_type_short_name).resolve().absolute()
|
||||||
remove_prefix = "REMOVE-"
|
remove_prefix = "REMOVE-"
|
||||||
if not file_path.exists():
|
if not file_path.exists():
|
||||||
return
|
return
|
||||||
|
@ -572,11 +572,11 @@ class Shot(Entity):
|
|||||||
gazu.shot.update_shot(asdict(self))
|
gazu.shot.update_shot(asdict(self))
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def get_shot_task_name(self, task_type: TaskType) -> str: #
|
def get_shot_task_name(self, task_type_short_name: str) -> str: #
|
||||||
return f"{self.name}{bkglobals.FILE_DELIMITER}{task_type.get_short_name()}"
|
return f"{self.name}{bkglobals.FILE_DELIMITER}{task_type_short_name}"
|
||||||
|
|
||||||
def get_output_collection_name(self, task_type: TaskType) -> str:
|
def get_output_collection_name(self, task_type_short_name: str) -> str:
|
||||||
return f"{self.get_shot_task_name(task_type)}{bkglobals.FILE_DELIMITER}output"
|
return f"{self.get_shot_task_name(task_type_short_name)}{bkglobals.FILE_DELIMITER}output"
|
||||||
|
|
||||||
def get_shot_dir(self, context) -> str:
|
def get_shot_dir(self, context) -> str:
|
||||||
project_root_dir = prefs.project_root_dir_get(context)
|
project_root_dir = prefs.project_root_dir_get(context)
|
||||||
@ -585,9 +585,8 @@ class Shot(Entity):
|
|||||||
shot_dir = all_shots_dir.joinpath(seq.name).joinpath(self.name)
|
shot_dir = all_shots_dir.joinpath(seq.name).joinpath(self.name)
|
||||||
return shot_dir.__str__()
|
return shot_dir.__str__()
|
||||||
|
|
||||||
def get_shot_filepath(self, context, task_type: TaskType) -> str:
|
def get_shot_filepath(self, context, task_type_short_name: str) -> str:
|
||||||
shot_task_name = self.get_shot_task_name(task_type)
|
file_name = self.get_shot_task_name(task_type_short_name) + '.blend'
|
||||||
file_name = shot_task_name + '.blend'
|
|
||||||
return Path(self.get_shot_dir(context)).joinpath(file_name).__str__()
|
return Path(self.get_shot_dir(context)).joinpath(file_name).__str__()
|
||||||
|
|
||||||
def update_data(self, data: Dict[str, Any]) -> Shot:
|
def update_data(self, data: Dict[str, Any]) -> Shot:
|
||||||
|
Loading…
Reference in New Issue
Block a user