Add UI options for aerender

This commit is contained in:
Brett Williams
2024-08-04 10:00:16 -05:00
parent dad9b8c250
commit f9c114bf32
9 changed files with 35 additions and 18 deletions

View File

@@ -59,6 +59,15 @@ class AERender(BaseRenderEngine):
# todo: create implementation # todo: create implementation
return [] return []
def ui_options(self, project_info):
from src.engines.aerender.aerender_ui import AERenderUI
return AERenderUI.get_options(self, project_info)
@classmethod
def worker_class(cls):
from src.engines.aerender.aerender_worker import AERenderWorker
return AERenderWorker
if __name__ == "__main__": if __name__ == "__main__":
x = AERender().get_project_info('/Users/brett/ae_testing/project.aepx') x = AERender().get_project_info('/Users/brett/ae_testing/project.aepx')

View File

@@ -0,0 +1,8 @@
class AERenderUI:
@staticmethod
def get_options(instance, project_info):
options = [
{'name': 'comp', 'options': project_info.get('comp_names', [])}
]
return options

View File

@@ -71,7 +71,7 @@ class AERenderWorker(BaseRenderWorker):
self.total_frames = timecode_to_frames(duration_string.split('Duration:')[-1], float(frame_rate)) self.total_frames = timecode_to_frames(duration_string.split('Duration:')[-1], float(frame_rate))
match = re.match(r'PROGRESS:.*\((?P<frame>\d+)\): (?P<time>\d+)', line).groupdict() match = re.match(r'PROGRESS:.*\((?P<frame>\d+)\): (?P<time>\d+)', line).groupdict()
self.last_frame = match['frame'] self.current_frame = match['frame']
def average_frame_duration(self): def average_frame_duration(self):
@@ -82,12 +82,12 @@ class AERenderWorker(BaseRenderWorker):
if match: if match:
total_durations += int(match.group(2)) total_durations += int(match.group(2))
average = float(total_durations) / self.last_frame average = float(total_durations) / self.current_frame
return average return average
def percent_complete(self): def percent_complete(self):
if self.total_frames: if self.total_frames:
return (float(self.last_frame) / float(self.total_frames)) * 100 return (float(self.current_frame) / float(self.total_frames)) * 100
else: else:
return 0 return 0

View File

@@ -18,12 +18,12 @@ class Blender(BaseRenderEngine):
from src.engines.blender.blender_downloader import BlenderDownloader from src.engines.blender.blender_downloader import BlenderDownloader
return BlenderDownloader return BlenderDownloader
@staticmethod @classmethod
def worker_class(): def worker_class(cls):
from src.engines.blender.blender_worker import BlenderRenderWorker from src.engines.blender.blender_worker import BlenderRenderWorker
return BlenderRenderWorker return BlenderRenderWorker
def ui_options(self): def ui_options(self, project_info):
from src.engines.blender.blender_ui import BlenderUI from src.engines.blender.blender_ui import BlenderUI
return BlenderUI.get_options(self) return BlenderUI.get_options(self)

View File

@@ -19,8 +19,8 @@ for cam_obj in bpy.data.cameras:
data = {'cameras': cameras, data = {'cameras': cameras,
'engine': scene.render.engine, 'engine': scene.render.engine,
'frame_start': scene.frame_start, 'start_frame': scene.frame_start,
'frame_end': scene.frame_end, 'end_frame': scene.frame_end,
'resolution_x': scene.render.resolution_x, 'resolution_x': scene.render.resolution_x,
'resolution_y': scene.render.resolution_y, 'resolution_y': scene.render.resolution_y,
'resolution_percentage': scene.render.resolution_percentage, 'resolution_percentage': scene.render.resolution_percentage,

View File

@@ -47,11 +47,11 @@ class BaseRenderEngine(object):
def downloader(): # override when subclassing if using a downloader class def downloader(): # override when subclassing if using a downloader class
return None return None
@staticmethod @classmethod
def worker_class(): # override when subclassing to link worker class def worker_class(cls): # override when subclassing to link worker class
raise NotImplementedError("Worker class not implemented") raise NotImplementedError(f"Worker class not implemented for engine {cls.name()}")
def ui_options(self): # override to return options for ui def ui_options(self, project_info): # override to return options for ui
return {} return {}
def get_help(self): # override if renderer uses different help flag def get_help(self): # override if renderer uses different help flag

View File

@@ -12,14 +12,14 @@ class FFMPEG(BaseRenderEngine):
from src.engines.ffmpeg.ffmpeg_downloader import FFMPEGDownloader from src.engines.ffmpeg.ffmpeg_downloader import FFMPEGDownloader
return FFMPEGDownloader return FFMPEGDownloader
@staticmethod @classmethod
def worker_class(): def worker_class(cls):
from src.engines.ffmpeg.ffmpeg_worker import FFMPEGRenderWorker from src.engines.ffmpeg.ffmpeg_worker import FFMPEGRenderWorker
return FFMPEGRenderWorker return FFMPEGRenderWorker
def ui_options(self): def ui_options(self, project_info):
from src.engines.ffmpeg.ffmpeg_ui import FFMPEGUI from src.engines.ffmpeg.ffmpeg_ui import FFMPEGUI
return FFMPEGUI.get_options(self) return FFMPEGUI.get_options(self, project_info)
@classmethod @classmethod
def supported_extensions(cls): def supported_extensions(cls):

View File

@@ -1,5 +1,5 @@
class FFMPEGUI: class FFMPEGUI:
@staticmethod @staticmethod
def get_options(instance): def get_options(instance, project_info):
options = [] options = []
return options return options

View File

@@ -350,7 +350,7 @@ class NewRenderJobForm(QWidget):
# Dynamic Engine Options # Dynamic Engine Options
clear_layout(self.renderer_options_layout) # clear old options clear_layout(self.renderer_options_layout) # clear old options
# dynamically populate option list # dynamically populate option list
self.current_engine_options = engine().ui_options() self.current_engine_options = engine().ui_options(self.project_info)
for option in self.current_engine_options: for option in self.current_engine_options:
h_layout = QHBoxLayout() h_layout = QHBoxLayout()
label = QLabel(option['name'].replace('_', ' ').capitalize() + ':') label = QLabel(option['name'].replace('_', ' ').capitalize() + ':')