feat: per-order-line material override — override materials for individual renders
- Add `material_override` nullable column on OrderLine (DB migration)
- Line override takes priority over OutputType override
- PATCH /orders/{id}/lines/{id} endpoint to update material_override
- Inline dropdown on each order line in the OrderDetail page
- Amber background when override is active
- Same output type, different material per line — no need to create a new output type
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -198,9 +198,11 @@ def render_order_line_task(self, order_line_id: str):
|
||||
from app.services.material_service import resolve_material_map
|
||||
material_map = resolve_material_map(material_map)
|
||||
|
||||
# Apply global material override from OutputType (e.g. x-ray mode)
|
||||
if line.output_type and line.output_type.material_override:
|
||||
override_mat = line.output_type.material_override
|
||||
# Apply material override: per-line override takes priority over output type override
|
||||
_line_override = getattr(line, 'material_override', None)
|
||||
_ot_override = line.output_type.material_override if line.output_type else None
|
||||
override_mat = _line_override or _ot_override
|
||||
if override_mat:
|
||||
# Build override map from existing material_map keys or from parsed STEP parts
|
||||
override_keys = set()
|
||||
if material_map:
|
||||
@@ -360,7 +362,7 @@ def render_order_line_task(self, order_line_id: str):
|
||||
usd_path=usd_render_path,
|
||||
focal_length_mm=focal_length_mm,
|
||||
sensor_width_mm=sensor_width_mm,
|
||||
material_override=line.output_type.material_override if line.output_type else None,
|
||||
material_override=override_mat,
|
||||
)
|
||||
success = True
|
||||
render_log = {
|
||||
@@ -419,7 +421,7 @@ def render_order_line_task(self, order_line_id: str):
|
||||
rotation_z=rotation_z,
|
||||
focal_length_mm=focal_length_mm,
|
||||
sensor_width_mm=sensor_width_mm,
|
||||
material_override=line.output_type.material_override if line.output_type else None,
|
||||
material_override=override_mat,
|
||||
job_id=order_line_id,
|
||||
order_line_id=order_line_id,
|
||||
noise_threshold=noise_threshold,
|
||||
|
||||
Reference in New Issue
Block a user