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
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__":
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))
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):
@@ -82,12 +82,12 @@ class AERenderWorker(BaseRenderWorker):
if match:
total_durations += int(match.group(2))
average = float(total_durations) / self.last_frame
average = float(total_durations) / self.current_frame
return average
def percent_complete(self):
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:
return 0

View File

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

View File

@@ -19,8 +19,8 @@ for cam_obj in bpy.data.cameras:
data = {'cameras': cameras,
'engine': scene.render.engine,
'frame_start': scene.frame_start,
'frame_end': scene.frame_end,
'start_frame': scene.frame_start,
'end_frame': scene.frame_end,
'resolution_x': scene.render.resolution_x,
'resolution_y': scene.render.resolution_y,
'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
return None
@staticmethod
def worker_class(): # override when subclassing to link worker class
raise NotImplementedError("Worker class not implemented")
@classmethod
def worker_class(cls): # override when subclassing to link worker class
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 {}
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
return FFMPEGDownloader
@staticmethod
def worker_class():
@classmethod
def worker_class(cls):
from src.engines.ffmpeg.ffmpeg_worker import FFMPEGRenderWorker
return FFMPEGRenderWorker
def ui_options(self):
def ui_options(self, project_info):
from src.engines.ffmpeg.ffmpeg_ui import FFMPEGUI
return FFMPEGUI.get_options(self)
return FFMPEGUI.get_options(self, project_info)
@classmethod
def supported_extensions(cls):

View File

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

View File

@@ -350,7 +350,7 @@ class NewRenderJobForm(QWidget):
# Dynamic Engine Options
clear_layout(self.renderer_options_layout) # clear old options
# 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:
h_layout = QHBoxLayout()
label = QLabel(option['name'].replace('_', ' ').capitalize() + ':')