Skip to content

Commit 1b8f18f

Browse files
refactor: Improve GetActiveDocument calling and breakdown tile assembly step into smaller functions
Signed-off-by: Lagos Gonzales <214008711+gianelli-lagos-aws@users.noreply.github.com>
1 parent ecd5e8f commit 1b8f18f

2 files changed

Lines changed: 198 additions & 117 deletions

File tree

src/deadline/cinema4d_submitter/cinema4d_render_submitter.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,32 +81,49 @@ def show_submitter():
8181
traceback.print_exc()
8282

8383

84-
def is_valid_tile_rendering_data(camera_obj):
84+
def has_valid_tile_rendering_configuration(tile_render_camera):
8585
"""
86-
Check if the Tile Rendering camera has valid user data.
86+
Validates that a Tile Rendering camera object has proper configuration.
87+
88+
Checks that the camera has:
89+
- 'Use Tiling' checkbox enabled
90+
- Valid reference camera assigned
91+
92+
Args:
93+
tile_render_camera: Cinema 4D camera object with tile rendering user data
94+
95+
Returns:
96+
bool: True if camera is properly configured for tile rendering
8797
"""
8898
try:
8999
# Use the correct DescID for the Reference camera
90100
reference_camera_desc_id = c4d.DescID(c4d.DescLevel(700, 5, 0), c4d.DescLevel(4, 133, 0))
91-
reference_camera_obj = camera_obj[reference_camera_desc_id]
101+
reference_camera_obj = tile_render_camera[reference_camera_desc_id]
92102

93103
# Use the correct DescID for the "Use Tiling" checkbox
94104
use_tiling_desc_id = c4d.DescID(c4d.DescLevel(700, 5, 0), c4d.DescLevel(1, 400006001, 0))
95-
use_tiling_state = camera_obj[
105+
use_tiling_state = tile_render_camera[
96106
use_tiling_desc_id
97107
] # Value is either 1 for checked or 0 for unchecked
98108

99109
# Check if the camera has the valid tile rendering data
100110
return use_tiling_state and isinstance(reference_camera_obj, c4d.CameraObject)
101-
except Exception:
111+
except Exception as e:
112+
print(
113+
f"Warning: Failed to validate tile rendering configuration for camera {tile_render_camera.GetName()}: {e}"
114+
)
102115
return False
103116

104117

105-
def get_tiles_per_axis_value():
118+
def get_tiles_per_axis_value(doc=None):
106119
"""
107120
Get the Tiles Per Axis value that is needed for Tile Rendering.
121+
122+
Args:
123+
doc: Cinema 4D document object. If None, gets the active document.
108124
"""
109-
doc = c4d.documents.GetActiveDocument()
125+
if doc is None:
126+
doc = c4d.documents.GetActiveDocument()
110127
objects = doc.GetObjects()
111128

112129
for obj in objects:
@@ -117,23 +134,23 @@ def get_tiles_per_axis_value():
117134
tiles_per_axis_value = obj[tiles_per_axis_desc_id]
118135
except AttributeError:
119136
continue
120-
if tiles_per_axis_value and is_valid_tile_rendering_data(obj):
137+
if tiles_per_axis_value and has_valid_tile_rendering_configuration(obj):
121138
return tiles_per_axis_value
122139
raise ValueError(
123-
"Tile rendering is checked and Render Tiles camera object was found but the Render Tiles camera configuration was invalid.\nAdd a Reference camera and check `Use Tiling`"
140+
"Tile rendering is checked and Render Tiles camera object was found but the Render Tiles camera configuration was non valid.\nAdd a Reference camera and check `Use Tiling`"
124141
)
125142

126143
raise ValueError(
127-
"Tile rendering is checked but no Render Tiles camera object was found in the scene.\nRefer to the tile rendering instructions in the Cinema 4D GitHub repository: https://github.com/aws-deadline/deadline-cloud-for-cinema-4d"
144+
"Tile rendering is checked but no Render Tiles camera object was found in the scene.\nRefer to the tile rendering instructions in the Cinema 4D GitHub repository: https://github.com/aws-deadline/deadline-cloud-for-cinema-4d/docs/tile_rendering"
128145
)
129146

130147

131148
def set_tile_rendering_frame_range():
132149
"""
133150
Set the frame range for Tile Rendering.
134151
"""
135-
tiles_per_axis = get_tiles_per_axis_value()
136152
doc = c4d.documents.GetActiveDocument()
153+
tiles_per_axis = get_tiles_per_axis_value(doc)
137154
render_data = doc.GetActiveRenderData()
138155
frame_start = c4d.BaseTime(0, doc.GetFps())
139156
frame_end = c4d.BaseTime((tiles_per_axis * tiles_per_axis) - 1, doc.GetFps())
@@ -158,7 +175,8 @@ def _get_parameter_values(
158175
{"name": "ActivateErrorChecking", "value": settings.activate_error_checking}
159176
)
160177
if settings.use_tile_rendering:
161-
parameter_values.append({"name": "TilesPerAxis", "value": get_tiles_per_axis_value()})
178+
doc = c4d.documents.GetActiveDocument()
179+
parameter_values.append({"name": "TilesPerAxis", "value": get_tiles_per_axis_value(doc)})
162180

163181
if per_take_frames_parameters:
164182
for take_data in submit_takes:

0 commit comments

Comments
 (0)