export background

This commit is contained in:
“christopheseux”
2023-05-19 11:51:05 +02:00
parent 48dddb1905
commit beb85721a9
10 changed files with 416 additions and 120 deletions
+72 -6
View File
@@ -3,6 +3,7 @@
import bpy
import os
from pathlib import Path
import re
from bpy.props import (
BoolProperty,
@@ -16,7 +17,8 @@ from bpy.types import PropertyGroup, UIList
from pprint import pprint as pp
from vse_toolbox.bl_utils import get_addon_prefs, get_scene_settings
from vse_toolbox.constants import ASSET_PREVIEWS, TRACKERS, PREVIEWS_DIR
from vse_toolbox.file_utils import norm_str
from vse_toolbox.file_utils import norm_str, parse
from vse_toolbox.sequencer_utils import get_strip_sequence_name
def get_episodes_items(self, context):
@@ -187,7 +189,7 @@ def get_custom_name_items(self, context):
class SpreadsheetExport(PropertyGroup):
use_custom_cells: BoolProperty(default=False)
format : EnumProperty(items=[(i, i, '') for i in ('CSV', 'XLSX')])
format : EnumProperty(items=[(i, i, '') for i in ('csv', 'xlsx', 'Clipboard')])
separator : StringProperty(default='\\n')
delimiter : StringProperty(default=';')
export_path : StringProperty(default='//export')
@@ -245,7 +247,16 @@ class Project(PropertyGroup):
name="Shot Name", default="{sequence}_sh{index:04d}")
render_template : StringProperty(
name="Render Name", default="//render/{strip_name}.{ext}")
name="Movie Path", default="//render/{project_basename}.{ext}")
render_strip_template : StringProperty(
name="Strip Path", default="//render/shots/{strip}.{ext}")
render_per_strip: BoolProperty(name="Per Strip", default=True)
render_single_file: BoolProperty(name="Single File", default=False)
export_edl_template : StringProperty(
name="Edl Path", default="//render/{project_basename}.edl")
episode_name : EnumProperty(items=get_episodes_items, update=on_episode_updated)
episodes : CollectionProperty(type=Episode)
@@ -260,6 +271,23 @@ class Project(PropertyGroup):
type : StringProperty()
@property
def active_episode(self):
return self.episodes.get(self.episode_name)
@property
def format_data(self):
data = {}
data['project'] = norm_str(self.name)
data['project_basename'] = data['project']
if self.active_episode:
data['episode'] = norm_str(self.episode_name)
data['project_basename'] = f"{data['project']}_{data['episode']}"
return data
def get_cell_types(self):
settings = get_scene_settings()
project = settings.active_project
@@ -293,7 +321,7 @@ class Project(PropertyGroup):
cell = spreadsheet.cells.add()
cell.name = cell_name
cell.export_name = 'Name' if cell_name == 'Shot' else cell_name
cell.field_name = cell_name.upper()
cell.field_name = norm_str(cell_name, format=str.upper)
cell.type = "SHOT"
for metadata_type in self.metadata_types:
@@ -309,7 +337,7 @@ class Project(PropertyGroup):
cell = spreadsheet.cells.add()
cell.name = asset_type.name
cell.export_name = asset_type.name
cell.field_name = asset_type.name.upper()
cell.field_name = norm_str(asset_type.name, format=str.upper)
cell.type = "ASSET_TYPE"
def set_strip_metadata(self):
@@ -337,6 +365,8 @@ class Project(PropertyGroup):
setattr(Metadata, field_name, prop)
class VSETB_UL_casting(UIList):
order_by_type : BoolProperty(default=False)
@@ -489,8 +519,24 @@ class VSETB_PGT_scene_settings(PropertyGroup):
def active_episode(self):
project = self.active_project
if project:
return project.episodes.get(project.episode_name)
return project.active_episode
@property
def format_data(self):
data = {}
digit_matches = re.findall(r'(\d+)', bpy.data.filepath)
if len(digit_matches) == 1:
data['version'] = int(digit_matches[-1])
elif len(digit_matches) > 1:
data['increment'] = int(digit_matches[-1])
data['version'] = int(digit_matches[-2])
suffix = Path(bpy.context.scene.render.frame_path()).suffix
data['ext'] = suffix[1:]
return data
class VSETB_PGT_strip_settings(PropertyGroup):
casting : CollectionProperty(type=AssetCasting)
@@ -506,6 +552,26 @@ class VSETB_PGT_strip_settings(PropertyGroup):
except IndexError:
return
@property
def strip(self):
sequences = bpy.context.scene.sequence_editor.sequences_all
return next(s for s in sequences if s.vsetb_strip_settings == self)
@property
def format_data(self):
scn = bpy.context.scene
settings = get_scene_settings()
project = settings.active_project
strip = self.strip
data = parse(strip.name, template=project.shot_template)
data['index'] = int(data['index'])
data['sequence'] = get_strip_sequence_name(strip)
data['strip'] = strip.name
#data['shot'] = project.shot_template
return data
classes = (
Asset,
AssetCasting,