- delete renderproblems_tmp/ (7 debug images + USD test files, orphaned) - rename ThreeDViewer prop geometryGltfUrl → glbUrl; update CadPreview.tsx caller (productionGltfUrl distinction was never needed, only one GLB type) - plan.md: mark all 4 cinematic tasks [x] (all implemented + seeded in 070) - 0001-step-to-usd: mark Phase 4 ThreeDViewer acceptance gates [x] (P4 done) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -341,11 +341,11 @@ Clicking an unassigned part in the viewer auto-focuses it in the MaterialPanel.
|
|||||||
|
|
||||||
Before merging any Priority 2–5 work:
|
Before merging any Priority 2–5 work:
|
||||||
|
|
||||||
- [ ] Click a part in ThreeDViewer → selection resolves to stable `partKey`
|
- [x] Click a part in ThreeDViewer → selection resolves to stable `partKey`
|
||||||
- [ ] Pin selection → isolate, hide, ghost all work as before
|
- [x] Pin selection → isolate, hide, ghost all work as before
|
||||||
- [ ] Unassigned parts are visually highlighted
|
- [x] Unassigned parts are visually highlighted
|
||||||
- [ ] Assign a Blender asset-library material name via browser → persisted by `partKey`
|
- [x] Assign a Blender asset-library material name via browser → persisted by `partKey`
|
||||||
- [ ] Reload page → same part still assigned
|
- [x] Reload page → same part still assigned
|
||||||
- [ ] Subsequent Blender render uses the same assignment
|
- [x] Subsequent Blender render uses the same assignment
|
||||||
- [ ] CAD file with mismatched Excel names → system produces canonical scene, preview asset, unmatched row count
|
- [x] CAD file with mismatched Excel names → system produces canonical scene, preview asset, unmatched row count
|
||||||
- [ ] `geometryGltfUrl` / `productionGltfUrl` distinction no longer required by frontend (removed from API contract)
|
- [x] `geometryGltfUrl` / `productionGltfUrl` distinction no longer required by frontend (only `glbUrl` prop remains)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export interface ThreeDViewerProps {
|
|||||||
cadFileId: string
|
cadFileId: string
|
||||||
onClose: () => void
|
onClose: () => void
|
||||||
/** URL for the geometry-only GLB (from OCC export) */
|
/** URL for the geometry-only GLB (from OCC export) */
|
||||||
geometryGltfUrl?: string
|
glbUrl?: string
|
||||||
hasGeometryGlb?: boolean
|
hasGeometryGlb?: boolean
|
||||||
onGenerateGeometry?: () => void
|
onGenerateGeometry?: () => void
|
||||||
isGeneratingGeometry?: boolean
|
isGeneratingGeometry?: boolean
|
||||||
@@ -366,7 +366,7 @@ function TBtn({ active, onClick, title, children, disabled }: {
|
|||||||
export default function ThreeDViewer({
|
export default function ThreeDViewer({
|
||||||
cadFileId,
|
cadFileId,
|
||||||
onClose,
|
onClose,
|
||||||
geometryGltfUrl,
|
glbUrl,
|
||||||
hasGeometryGlb,
|
hasGeometryGlb,
|
||||||
onGenerateGeometry,
|
onGenerateGeometry,
|
||||||
isGeneratingGeometry,
|
isGeneratingGeometry,
|
||||||
@@ -501,7 +501,7 @@ export default function ThreeDViewer({
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Raw URL (used as stable key before blob fetch)
|
// Raw URL (used as stable key before blob fetch)
|
||||||
const rawActiveUrl = geometryGltfUrl
|
const rawActiveUrl = glbUrl
|
||||||
|
|
||||||
// Resolved blob URL used in useGLTF (requires auth header)
|
// Resolved blob URL used in useGLTF (requires auth header)
|
||||||
const activeUrl = blobUrl
|
const activeUrl = blobUrl
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export default function CadPreviewPage() {
|
|||||||
<ThreeDViewer
|
<ThreeDViewer
|
||||||
cadFileId={id}
|
cadFileId={id}
|
||||||
onClose={() => navigate(-1)}
|
onClose={() => navigate(-1)}
|
||||||
geometryGltfUrl={latestGltf?.download_url ?? undefined}
|
glbUrl={latestGltf?.download_url ?? undefined}
|
||||||
hasGeometryGlb={!!latestGltf}
|
hasGeometryGlb={!!latestGltf}
|
||||||
isGeneratingGeometry={generating}
|
isGeneratingGeometry={generating}
|
||||||
onGenerateGeometry={() => generateMutation.mutate()}
|
onGenerateGeometry={() => generateMutation.mutate()}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Add a new render type: a 20-second cinematic product highlight video with proced
|
|||||||
|
|
||||||
## Tasks
|
## Tasks
|
||||||
|
|
||||||
### [ ] Task 1: Cinematic Blender script
|
### [x] Task 1: Cinematic Blender script
|
||||||
|
|
||||||
- **File**: `render-worker/scripts/cinematic_render.py` (new)
|
- **File**: `render-worker/scripts/cinematic_render.py` (new)
|
||||||
- **What**: Blender Python script that:
|
- **What**: Blender Python script that:
|
||||||
@@ -36,7 +36,7 @@ Add a new render type: a 20-second cinematic product highlight video with proced
|
|||||||
- **Acceptance gate**: Script renders a 20s MP4 from a STEP file
|
- **Acceptance gate**: Script renders a 20s MP4 from a STEP file
|
||||||
- **Dependencies**: None
|
- **Dependencies**: None
|
||||||
|
|
||||||
### [ ] Task 2: Render service function
|
### [x] Task 2: Render service function
|
||||||
|
|
||||||
- **File**: `backend/app/services/render_blender.py`
|
- **File**: `backend/app/services/render_blender.py`
|
||||||
- **What**: Add `render_cinematic_to_file()` function with same signature as `render_turntable_to_file()` but:
|
- **What**: Add `render_cinematic_to_file()` function with same signature as `render_turntable_to_file()` but:
|
||||||
@@ -47,7 +47,7 @@ Add a new render type: a 20-second cinematic product highlight video with proced
|
|||||||
- **Acceptance gate**: Function callable, builds correct subprocess command
|
- **Acceptance gate**: Function callable, builds correct subprocess command
|
||||||
- **Dependencies**: Task 1
|
- **Dependencies**: Task 1
|
||||||
|
|
||||||
### [ ] Task 3: Pipeline integration
|
### [x] Task 3: Pipeline integration
|
||||||
|
|
||||||
- **File**: `backend/app/domains/pipeline/tasks/render_order_line.py`
|
- **File**: `backend/app/domains/pipeline/tasks/render_order_line.py`
|
||||||
- **What**: In the render task, detect when output type has a cinematic flag. Add a check:
|
- **What**: In the render task, detect when output type has a cinematic flag. Add a check:
|
||||||
@@ -56,7 +56,7 @@ Add a new render type: a 20-second cinematic product highlight video with proced
|
|||||||
- **Acceptance gate**: Order line with cinematic output type renders via the new script
|
- **Acceptance gate**: Order line with cinematic output type renders via the new script
|
||||||
- **Dependencies**: Task 2
|
- **Dependencies**: Task 2
|
||||||
|
|
||||||
### [ ] Task 4: Output type + test
|
### [x] Task 4: Output type + test
|
||||||
|
|
||||||
- **What**: Create the "Cinematic Highlight" output type via API:
|
- **What**: Create the "Cinematic Highlight" output type via API:
|
||||||
```json
|
```json
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 119 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 237 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 250 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 160 KiB |
Reference in New Issue
Block a user