- 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:
|
||||
|
||||
- [ ] Click a part in ThreeDViewer → selection resolves to stable `partKey`
|
||||
- [ ] Pin selection → isolate, hide, ghost all work as before
|
||||
- [ ] Unassigned parts are visually highlighted
|
||||
- [ ] Assign a Blender asset-library material name via browser → persisted by `partKey`
|
||||
- [ ] Reload page → same part still assigned
|
||||
- [ ] Subsequent Blender render uses the same assignment
|
||||
- [ ] 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] Click a part in ThreeDViewer → selection resolves to stable `partKey`
|
||||
- [x] Pin selection → isolate, hide, ghost all work as before
|
||||
- [x] Unassigned parts are visually highlighted
|
||||
- [x] Assign a Blender asset-library material name via browser → persisted by `partKey`
|
||||
- [x] Reload page → same part still assigned
|
||||
- [x] Subsequent Blender render uses the same assignment
|
||||
- [x] CAD file with mismatched Excel names → system produces canonical scene, preview asset, unmatched row count
|
||||
- [x] `geometryGltfUrl` / `productionGltfUrl` distinction no longer required by frontend (only `glbUrl` prop remains)
|
||||
|
||||
@@ -55,7 +55,7 @@ export interface ThreeDViewerProps {
|
||||
cadFileId: string
|
||||
onClose: () => void
|
||||
/** URL for the geometry-only GLB (from OCC export) */
|
||||
geometryGltfUrl?: string
|
||||
glbUrl?: string
|
||||
hasGeometryGlb?: boolean
|
||||
onGenerateGeometry?: () => void
|
||||
isGeneratingGeometry?: boolean
|
||||
@@ -366,7 +366,7 @@ function TBtn({ active, onClick, title, children, disabled }: {
|
||||
export default function ThreeDViewer({
|
||||
cadFileId,
|
||||
onClose,
|
||||
geometryGltfUrl,
|
||||
glbUrl,
|
||||
hasGeometryGlb,
|
||||
onGenerateGeometry,
|
||||
isGeneratingGeometry,
|
||||
@@ -501,7 +501,7 @@ export default function ThreeDViewer({
|
||||
)
|
||||
|
||||
// Raw URL (used as stable key before blob fetch)
|
||||
const rawActiveUrl = geometryGltfUrl
|
||||
const rawActiveUrl = glbUrl
|
||||
|
||||
// Resolved blob URL used in useGLTF (requires auth header)
|
||||
const activeUrl = blobUrl
|
||||
|
||||
@@ -119,7 +119,7 @@ export default function CadPreviewPage() {
|
||||
<ThreeDViewer
|
||||
cadFileId={id}
|
||||
onClose={() => navigate(-1)}
|
||||
geometryGltfUrl={latestGltf?.download_url ?? undefined}
|
||||
glbUrl={latestGltf?.download_url ?? undefined}
|
||||
hasGeometryGlb={!!latestGltf}
|
||||
isGeneratingGeometry={generating}
|
||||
onGenerateGeometry={() => generateMutation.mutate()}
|
||||
|
||||
@@ -6,7 +6,7 @@ Add a new render type: a 20-second cinematic product highlight video with proced
|
||||
|
||||
## Tasks
|
||||
|
||||
### [ ] Task 1: Cinematic Blender script
|
||||
### [x] Task 1: Cinematic Blender script
|
||||
|
||||
- **File**: `render-worker/scripts/cinematic_render.py` (new)
|
||||
- **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
|
||||
- **Dependencies**: None
|
||||
|
||||
### [ ] Task 2: Render service function
|
||||
### [x] Task 2: Render service function
|
||||
|
||||
- **File**: `backend/app/services/render_blender.py`
|
||||
- **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
|
||||
- **Dependencies**: Task 1
|
||||
|
||||
### [ ] Task 3: Pipeline integration
|
||||
### [x] Task 3: Pipeline integration
|
||||
|
||||
- **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:
|
||||
@@ -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
|
||||
- **Dependencies**: Task 2
|
||||
|
||||
### [ ] Task 4: Output type + test
|
||||
### [x] Task 4: Output type + test
|
||||
|
||||
- **What**: Create the "Cinematic Highlight" output type via API:
|
||||
```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