P2/P5: coordinate tabs and render feature preview
This commit is contained in:
21
src/App.tsx
21
src/App.tsx
@@ -136,6 +136,11 @@ function App() {
|
||||
}
|
||||
}), [facade])
|
||||
|
||||
useEffect(() => facade.project.subscribeExternalChanges((notice) => {
|
||||
setNotice(`Project saved in another tab · v${notice.documentVersion}`)
|
||||
window.setTimeout(() => setNotice(''), 2600)
|
||||
}), [facade])
|
||||
|
||||
useEffect(() => () => facade.geometry.dispose(), [facade])
|
||||
|
||||
useEffect(() => {
|
||||
@@ -386,7 +391,7 @@ function Viewport({ selectedObject, setSelectedObject, workbench, facade, showNo
|
||||
const adapter = facade.viewport.createAdapter()
|
||||
adapterRef.current = adapter
|
||||
let cancelled = false
|
||||
let shape: ShapeHandle | null = null
|
||||
const shapes: ShapeHandle[] = []
|
||||
try {
|
||||
adapter.mount(host)
|
||||
} catch (error) {
|
||||
@@ -399,13 +404,17 @@ function Viewport({ selectedObject, setSelectedObject, workbench, facade, showNo
|
||||
const capabilities = await facade.geometry.initialize()
|
||||
if (capabilities.status !== 'ready') throw new Error(capabilities.reason || 'OCCT geometry runtime unavailable')
|
||||
const document = facade.app.document.getActive()
|
||||
shape = await facade.geometry.createBox({ width: 2.7, length: 1.4, height: 1.6, center: [0, 0, 0], originOnCenter: true, documentId: document.id, documentVersion: document.version })
|
||||
const profile = { outer: [[-1.35, -0.7, 0], [1.35, -0.7, 0], [1.35, 0.7, 0], [-1.35, 0.7, 0]] as [number, number, number][] }
|
||||
const pad = await facade.geometry.pad({ profile, length: 1.6, direction: [0, 0, 1], documentId: document.id, documentVersion: document.version })
|
||||
shapes.push(pad)
|
||||
const pocketProfile = { outer: [[-0.55, -0.32, 0], [0.55, -0.32, 0], [0.55, 0.32, 0], [-0.55, 0.32, 0]] as [number, number, number][] }
|
||||
const pocket = await facade.geometry.pocket({ base: pad, profile: pocketProfile, length: 1.8, direction: [0, 0, 1], documentId: document.id, documentVersion: document.version })
|
||||
shapes.push(pocket)
|
||||
if (cancelled) {
|
||||
await facade.geometry.release(shape)
|
||||
shape = null
|
||||
await Promise.all(shapes.map((entry) => facade.geometry.release(entry)))
|
||||
return
|
||||
}
|
||||
const mesh = await facade.geometry.mesh(shape, 0.05)
|
||||
const mesh = await facade.geometry.mesh(pocket, 0.05)
|
||||
if (!cancelled) adapter.setMesh(mesh)
|
||||
}
|
||||
void loadGeometry().catch((error: unknown) => {
|
||||
@@ -413,7 +422,7 @@ function Viewport({ selectedObject, setSelectedObject, workbench, facade, showNo
|
||||
})
|
||||
return () => {
|
||||
cancelled = true
|
||||
if (shape) void facade.geometry.release(shape)
|
||||
void Promise.all(shapes.map((entry) => facade.geometry.release(entry)))
|
||||
adapter.dispose()
|
||||
adapterRef.current = null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user