diff --git a/Fange Pipeline/operators/exports.py b/Fange Pipeline/operators/exports.py index 9e1afd2..182cda6 100644 --- a/Fange Pipeline/operators/exports.py +++ b/Fange Pipeline/operators/exports.py @@ -1,6 +1,7 @@ import bpy from ..models import FangeProject +from pathlib import Path class ExportForFange(bpy.types.Operator): @@ -11,18 +12,29 @@ class ExportForFange(bpy.types.Operator): def __init__(self): self.coll_layout = bpy.data.collections.get('Placeholder') self.path = FangeProject() + self.asset = self.get_asset_name() + self.category = self.get_asset_type() @classmethod def poll(cls, context): col = bpy.data.collections.get('Placeholder') - if col is not None: + if col is not None and bpy.data.is_saved: return True def execute(self, context): bpy.ops.object.select_all(action='DESELECT') print(f'[Pipeline] Start to export the building props.') + # Make a check if the file are saved on the disk + if not bpy.data.is_saved: + self.report({'ERROR'}, 'Your blend file is not saved.') + return {'CANCELLED'} + + if not self.category: + self.report({'ERROR'}, 'Can\'t find the asset category.') + return {'CANCELLED'} + if len(self.coll_layout.collection_children): for coll in self.coll_layout.children: print(f'[Pipeline] Update "{coll.name}" mesh') @@ -35,11 +47,12 @@ class ExportForFange(bpy.types.Operator): if isinstance(ob.data, bpy.types.Mesh): ob.select_set(True) - # TODO The plugin export only the garden building - abs_export = self.path.buildings.joinpath("Garden", "Meshes") + abs_export = self.category.joinpath(self.asset, "Meshes") if not abs_export.exists(): abs_export.mkdir() + print(f'[Pipeline] Export fbx here "{abs_export.joinpath(f"SM_{coll.name}.fbx").as_posix()}"') + # TODO Use a preset system bpy.ops.export_scene.fbx(filepath=abs_export.joinpath(f"SM_{coll.name}.fbx").as_posix(), use_selection=True, @@ -86,5 +99,33 @@ class ExportForFange(bpy.types.Operator): # for coll in coll_layout.children: # print(f'[Pipeline] Check {coll}. Item type {type(coll)}') + + self.report({'INFO'}, 'Placeholder exported') return {'FINISHED'} + def get_asset_type(self) -> Path: + """Look the file path, to understand if the asset are a Character, Buildings or Props""" + abs_blend_path = Path(bpy.data.filepath) + print(f'[Pipeline] Get blend file path "{abs_blend_path}"') + print(f'[Pipeline] Convert to List "{abs_blend_path.parts}"') + + if 'Buildings' in abs_blend_path.parts: + print(f'[Pipeline] Export here "{self.path.buildings}"') + return self.path.buildings + + elif 'Pros' in abs_blend_path.parts: + print(f'[Pipeline] Export here "{self.path.props}"') + return self.path.props + + elif 'Characters' in abs_blend_path.parts: + print(f'[Pipeline] Export here "{self.path.characters}"') + return self.path.characters + + else: + print(f'[Pipeline] Can\'t find asset category') + return Path() + + @staticmethod + def get_asset_name(): + abs_blend_path = Path(bpy.data.filepath) + return abs_blend_path.stem