@dreamerbird/camera-studio 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/models/Y Bot.glb +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-base-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-base-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-relaxed-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-relaxed-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-straight-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-straight-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-03-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-03-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-04-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-04-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-05-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-05-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-06-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-06-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-bowl-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-bowl-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-card-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-card-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-claw-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-claw-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-fist-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-fist-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-grip-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-grip-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-ko-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-ko-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-offer-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-offer-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-the-button-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-the-button-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-scratch-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-scratch-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-spread-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-spread-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-write-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-write-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-cobblepot-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-cobblepot-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fingers-crossed-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fingers-crossed-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-five-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-five-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-ring-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-ring-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fu-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fu-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-index-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-index-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-martian-reactor-switch-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-martian-reactor-switch-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-one-does-not-simply-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-one-does-not-simply-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-flipped-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-flipped.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-perfect-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-perfect-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-pinky-swear-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-pinky-swear-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-rock-out-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-rock-out-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-scout-salute-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-scout-salute-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-spock-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-spock-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-stop-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-stop-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-flipped-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-flipped-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-hicox-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-hicox-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-ring-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-ring-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-thumbs-up-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-thumbs-up-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-detonator-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-detonator-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-grip-sword-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-grip-sword-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-03-l-cock-the-hammer.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-03-r-cock-the-hammer.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-hadoken-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-hadoken-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-double-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-double-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-throw-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-throw-r.png +0 -0
- package/dist/Anchors.d.ts +11 -0
- package/dist/Anchors.d.ts.map +1 -0
- package/dist/Anchors.js +315 -0
- package/dist/App.hostFlows.test.d.ts +2 -0
- package/dist/App.hostFlows.test.d.ts.map +1 -0
- package/dist/App.hostFlows.test.js +48 -0
- package/dist/CameraPath.d.ts +130 -0
- package/dist/CameraPath.d.ts.map +1 -0
- package/dist/CameraPath.js +920 -0
- package/dist/CameraScene.d.ts +45 -0
- package/dist/CameraScene.d.ts.map +1 -0
- package/dist/CameraScene.js +1716 -0
- package/dist/CameraScene.test.d.ts +2 -0
- package/dist/CameraScene.test.d.ts.map +1 -0
- package/dist/CameraScene.test.js +259 -0
- package/dist/PathPresetDropRig.d.ts +27 -0
- package/dist/PathPresetDropRig.d.ts.map +1 -0
- package/dist/PathPresetDropRig.js +192 -0
- package/dist/PathPresetThumb.d.ts +11 -0
- package/dist/PathPresetThumb.d.ts.map +1 -0
- package/dist/PathPresetThumb.js +85 -0
- package/dist/PipCameraSelector.d.ts +15 -0
- package/dist/PipCameraSelector.d.ts.map +1 -0
- package/dist/PipCameraSelector.js +92 -0
- package/dist/PlacementManager.d.ts +252 -0
- package/dist/PlacementManager.d.ts.map +1 -0
- package/dist/PlacementManager.js +1525 -0
- package/dist/ShotCamera.d.ts +21 -0
- package/dist/ShotCamera.d.ts.map +1 -0
- package/dist/ShotCamera.js +568 -0
- package/dist/TopToolbar.d.ts +43 -0
- package/dist/TopToolbar.d.ts.map +1 -0
- package/dist/TopToolbar.js +167 -0
- package/dist/TopToolbar.test.d.ts +2 -0
- package/dist/TopToolbar.test.d.ts.map +1 -0
- package/dist/TopToolbar.test.js +107 -0
- package/dist/agent/api.d.ts +95 -0
- package/dist/agent/api.d.ts.map +1 -0
- package/dist/agent/api.js +337 -0
- package/dist/agent/api.test.d.ts +2 -0
- package/dist/agent/api.test.d.ts.map +1 -0
- package/dist/agent/api.test.js +907 -0
- package/dist/agent/bridgeClient.d.ts +62 -0
- package/dist/agent/bridgeClient.d.ts.map +1 -0
- package/dist/agent/bridgeClient.js +277 -0
- package/dist/agent/bridgeClient.test.d.ts +2 -0
- package/dist/agent/bridgeClient.test.d.ts.map +1 -0
- package/dist/agent/bridgeClient.test.js +413 -0
- package/dist/agent/bridgeFiles.d.ts +33 -0
- package/dist/agent/bridgeFiles.d.ts.map +1 -0
- package/dist/agent/bridgeFiles.js +193 -0
- package/dist/agent/bridgeFiles.test.d.ts +2 -0
- package/dist/agent/bridgeFiles.test.d.ts.map +1 -0
- package/dist/agent/bridgeFiles.test.js +220 -0
- package/dist/agent/commands/anchors.d.ts +43 -0
- package/dist/agent/commands/anchors.d.ts.map +1 -0
- package/dist/agent/commands/anchors.js +331 -0
- package/dist/agent/commands/anchors.test.d.ts +2 -0
- package/dist/agent/commands/anchors.test.d.ts.map +1 -0
- package/dist/agent/commands/anchors.test.js +447 -0
- package/dist/agent/commands/animations.d.ts +47 -0
- package/dist/agent/commands/animations.d.ts.map +1 -0
- package/dist/agent/commands/animations.js +245 -0
- package/dist/agent/commands/animations.test.d.ts +2 -0
- package/dist/agent/commands/animations.test.d.ts.map +1 -0
- package/dist/agent/commands/animations.test.js +426 -0
- package/dist/agent/commands/assets.d.ts +34 -0
- package/dist/agent/commands/assets.d.ts.map +1 -0
- package/dist/agent/commands/assets.js +367 -0
- package/dist/agent/commands/assets.test.d.ts +2 -0
- package/dist/agent/commands/assets.test.d.ts.map +1 -0
- package/dist/agent/commands/assets.test.js +405 -0
- package/dist/agent/commands/bindings.realStudio.test.d.ts +21 -0
- package/dist/agent/commands/bindings.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/bindings.realStudio.test.js +281 -0
- package/dist/agent/commands/cameras.d.ts +65 -0
- package/dist/agent/commands/cameras.d.ts.map +1 -0
- package/dist/agent/commands/cameras.js +498 -0
- package/dist/agent/commands/cameras.test.d.ts +2 -0
- package/dist/agent/commands/cameras.test.d.ts.map +1 -0
- package/dist/agent/commands/cameras.test.js +560 -0
- package/dist/agent/commands/delete.test.d.ts +2 -0
- package/dist/agent/commands/delete.test.d.ts.map +1 -0
- package/dist/agent/commands/delete.test.js +518 -0
- package/dist/agent/commands/exports.d.ts +12 -0
- package/dist/agent/commands/exports.d.ts.map +1 -0
- package/dist/agent/commands/exports.js +132 -0
- package/dist/agent/commands/exports.test.d.ts +2 -0
- package/dist/agent/commands/exports.test.d.ts.map +1 -0
- package/dist/agent/commands/exports.test.js +402 -0
- package/dist/agent/commands/history.d.ts +17 -0
- package/dist/agent/commands/history.d.ts.map +1 -0
- package/dist/agent/commands/history.js +96 -0
- package/dist/agent/commands/history.test.d.ts +2 -0
- package/dist/agent/commands/history.test.d.ts.map +1 -0
- package/dist/agent/commands/history.test.js +140 -0
- package/dist/agent/commands/jobs.d.ts +23 -0
- package/dist/agent/commands/jobs.d.ts.map +1 -0
- package/dist/agent/commands/jobs.js +66 -0
- package/dist/agent/commands/keyframes.d.ts +42 -0
- package/dist/agent/commands/keyframes.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.js +310 -0
- package/dist/agent/commands/keyframes.realStudio.test.d.ts +11 -0
- package/dist/agent/commands/keyframes.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.realStudio.test.js +95 -0
- package/dist/agent/commands/keyframes.test.d.ts +2 -0
- package/dist/agent/commands/keyframes.test.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.test.js +474 -0
- package/dist/agent/commands/models.d.ts +34 -0
- package/dist/agent/commands/models.d.ts.map +1 -0
- package/dist/agent/commands/models.js +137 -0
- package/dist/agent/commands/models.test.d.ts +2 -0
- package/dist/agent/commands/models.test.d.ts.map +1 -0
- package/dist/agent/commands/models.test.js +268 -0
- package/dist/agent/commands/objects.d.ts +4 -0
- package/dist/agent/commands/objects.d.ts.map +1 -0
- package/dist/agent/commands/objects.js +182 -0
- package/dist/agent/commands/objects.test.d.ts +2 -0
- package/dist/agent/commands/objects.test.d.ts.map +1 -0
- package/dist/agent/commands/objects.test.js +316 -0
- package/dist/agent/commands/paths.d.ts +111 -0
- package/dist/agent/commands/paths.d.ts.map +1 -0
- package/dist/agent/commands/paths.js +576 -0
- package/dist/agent/commands/paths.test.d.ts +2 -0
- package/dist/agent/commands/paths.test.d.ts.map +1 -0
- package/dist/agent/commands/paths.test.js +773 -0
- package/dist/agent/commands/poses.d.ts +101 -0
- package/dist/agent/commands/poses.d.ts.map +1 -0
- package/dist/agent/commands/poses.js +500 -0
- package/dist/agent/commands/poses.realStudio.test.d.ts +15 -0
- package/dist/agent/commands/poses.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/poses.realStudio.test.js +161 -0
- package/dist/agent/commands/poses.test.d.ts +2 -0
- package/dist/agent/commands/poses.test.d.ts.map +1 -0
- package/dist/agent/commands/poses.test.js +735 -0
- package/dist/agent/commands/project.d.ts +12 -0
- package/dist/agent/commands/project.d.ts.map +1 -0
- package/dist/agent/commands/project.js +42 -0
- package/dist/agent/commands/project.test.d.ts +2 -0
- package/dist/agent/commands/project.test.d.ts.map +1 -0
- package/dist/agent/commands/project.test.js +125 -0
- package/dist/agent/commands/revision.realStudio.test.d.ts +14 -0
- package/dist/agent/commands/revision.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/revision.realStudio.test.js +129 -0
- package/dist/agent/commands/scene.d.ts +32 -0
- package/dist/agent/commands/scene.d.ts.map +1 -0
- package/dist/agent/commands/scene.js +100 -0
- package/dist/agent/commands/scene.test.d.ts +2 -0
- package/dist/agent/commands/scene.test.d.ts.map +1 -0
- package/dist/agent/commands/scene.test.js +147 -0
- package/dist/agent/commands/selection.d.ts +21 -0
- package/dist/agent/commands/selection.d.ts.map +1 -0
- package/dist/agent/commands/selection.js +101 -0
- package/dist/agent/commands/selection.test.d.ts +2 -0
- package/dist/agent/commands/selection.test.d.ts.map +1 -0
- package/dist/agent/commands/selection.test.js +173 -0
- package/dist/agent/commands/sequence.d.ts +25 -0
- package/dist/agent/commands/sequence.d.ts.map +1 -0
- package/dist/agent/commands/sequence.js +174 -0
- package/dist/agent/commands/sequence.test.d.ts +2 -0
- package/dist/agent/commands/sequence.test.d.ts.map +1 -0
- package/dist/agent/commands/sequence.test.js +264 -0
- package/dist/agent/commands/ui.d.ts +40 -0
- package/dist/agent/commands/ui.d.ts.map +1 -0
- package/dist/agent/commands/ui.js +166 -0
- package/dist/agent/commands/view.d.ts +61 -0
- package/dist/agent/commands/view.d.ts.map +1 -0
- package/dist/agent/commands/view.js +229 -0
- package/dist/agent/commands/view.test.d.ts +2 -0
- package/dist/agent/commands/view.test.d.ts.map +1 -0
- package/dist/agent/commands/view.test.js +347 -0
- package/dist/agent/contractCoverage.test.d.ts +2 -0
- package/dist/agent/contractCoverage.test.d.ts.map +1 -0
- package/dist/agent/contractCoverage.test.js +87 -0
- package/dist/agent/deleteHandlers.d.ts +61 -0
- package/dist/agent/deleteHandlers.d.ts.map +1 -0
- package/dist/agent/deleteHandlers.js +41 -0
- package/dist/agent/errors.d.ts +24 -0
- package/dist/agent/errors.d.ts.map +1 -0
- package/dist/agent/errors.js +59 -0
- package/dist/agent/errors.test.d.ts +2 -0
- package/dist/agent/errors.test.d.ts.map +1 -0
- package/dist/agent/errors.test.js +25 -0
- package/dist/agent/expectedCommands.d.ts +9 -0
- package/dist/agent/expectedCommands.d.ts.map +1 -0
- package/dist/agent/expectedCommands.js +79 -0
- package/dist/agent/jobs.d.ts +52 -0
- package/dist/agent/jobs.d.ts.map +1 -0
- package/dist/agent/jobs.js +175 -0
- package/dist/agent/jobs.test.d.ts +2 -0
- package/dist/agent/jobs.test.d.ts.map +1 -0
- package/dist/agent/jobs.test.js +281 -0
- package/dist/agent/keyframeTracks.d.ts +57 -0
- package/dist/agent/keyframeTracks.d.ts.map +1 -0
- package/dist/agent/keyframeTracks.js +127 -0
- package/dist/agent/objectIds.d.ts +7 -0
- package/dist/agent/objectIds.d.ts.map +1 -0
- package/dist/agent/objectIds.js +20 -0
- package/dist/agent/objectIds.test.d.ts +2 -0
- package/dist/agent/objectIds.test.d.ts.map +1 -0
- package/dist/agent/objectIds.test.js +10 -0
- package/dist/agent/objectResolver.d.ts +34 -0
- package/dist/agent/objectResolver.d.ts.map +1 -0
- package/dist/agent/objectResolver.js +112 -0
- package/dist/agent/pathCommands.d.ts +78 -0
- package/dist/agent/pathCommands.d.ts.map +1 -0
- package/dist/agent/pathCommands.js +240 -0
- package/dist/agent/propAccess.d.ts +42 -0
- package/dist/agent/propAccess.d.ts.map +1 -0
- package/dist/agent/propAccess.js +181 -0
- package/dist/agent/registerCommands.d.ts +9 -0
- package/dist/agent/registerCommands.d.ts.map +1 -0
- package/dist/agent/registerCommands.js +77 -0
- package/dist/agent/registry.d.ts +33 -0
- package/dist/agent/registry.d.ts.map +1 -0
- package/dist/agent/registry.js +55 -0
- package/dist/agent/registry.test.d.ts +2 -0
- package/dist/agent/registry.test.d.ts.map +1 -0
- package/dist/agent/registry.test.js +106 -0
- package/dist/agent/runtime/animationStatus.d.ts +25 -0
- package/dist/agent/runtime/animationStatus.d.ts.map +1 -0
- package/dist/agent/runtime/animationStatus.js +13 -0
- package/dist/agent/runtime/cameraLifecycle.d.ts +37 -0
- package/dist/agent/runtime/cameraLifecycle.d.ts.map +1 -0
- package/dist/agent/runtime/cameraLifecycle.js +112 -0
- package/dist/agent/runtime/directorView.d.ts +42 -0
- package/dist/agent/runtime/directorView.d.ts.map +1 -0
- package/dist/agent/runtime/directorView.js +27 -0
- package/dist/agent/runtime/exportRuntime.d.ts +95 -0
- package/dist/agent/runtime/exportRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/exportRuntime.js +227 -0
- package/dist/agent/runtime/objectRuntime.d.ts +26 -0
- package/dist/agent/runtime/objectRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/objectRuntime.js +29 -0
- package/dist/agent/runtime/pathRuntime.d.ts +21 -0
- package/dist/agent/runtime/pathRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/pathRuntime.js +13 -0
- package/dist/agent/runtime/placementLifecycle.d.ts +34 -0
- package/dist/agent/runtime/placementLifecycle.d.ts.map +1 -0
- package/dist/agent/runtime/placementLifecycle.js +63 -0
- package/dist/agent/runtime/placementLifecycle.test.d.ts +2 -0
- package/dist/agent/runtime/placementLifecycle.test.d.ts.map +1 -0
- package/dist/agent/runtime/placementLifecycle.test.js +68 -0
- package/dist/agent/runtime/poseSessionRuntime.d.ts +17 -0
- package/dist/agent/runtime/poseSessionRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/poseSessionRuntime.js +64 -0
- package/dist/agent/runtime.d.ts +67 -0
- package/dist/agent/runtime.d.ts.map +1 -0
- package/dist/agent/runtime.js +214 -0
- package/dist/agent/runtime.test.d.ts +2 -0
- package/dist/agent/runtime.test.d.ts.map +1 -0
- package/dist/agent/runtime.test.js +142 -0
- package/dist/agent/sequenceLength.d.ts +20 -0
- package/dist/agent/sequenceLength.d.ts.map +1 -0
- package/dist/agent/sequenceLength.js +18 -0
- package/dist/agent/types.d.ts +70 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +6 -0
- package/dist/agent/validation.d.ts +7 -0
- package/dist/agent/validation.d.ts.map +1 -0
- package/dist/agent/validation.js +39 -0
- package/dist/aimTargets.d.ts +128 -0
- package/dist/aimTargets.d.ts.map +1 -0
- package/dist/aimTargets.js +367 -0
- package/dist/aimTargets.test.d.ts +2 -0
- package/dist/aimTargets.test.d.ts.map +1 -0
- package/dist/aimTargets.test.js +84 -0
- package/dist/anchorParenting.test.d.ts +2 -0
- package/dist/anchorParenting.test.d.ts.map +1 -0
- package/dist/anchorParenting.test.js +87 -0
- package/dist/anchorsRegistry.d.ts +45 -0
- package/dist/anchorsRegistry.d.ts.map +1 -0
- package/dist/anchorsRegistry.js +101 -0
- package/dist/anchorsRegistry.test.d.ts +2 -0
- package/dist/anchorsRegistry.test.d.ts.map +1 -0
- package/dist/anchorsRegistry.test.js +29 -0
- package/dist/assetLibrary/AssetLibraryPanel.d.ts +35 -0
- package/dist/assetLibrary/AssetLibraryPanel.d.ts.map +1 -0
- package/dist/assetLibrary/AssetLibraryPanel.js +544 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.d.ts +2 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.d.ts.map +1 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.js +133 -0
- package/dist/assetLibrary/ModelPickerSlot.d.ts +24 -0
- package/dist/assetLibrary/ModelPickerSlot.d.ts.map +1 -0
- package/dist/assetLibrary/ModelPickerSlot.js +32 -0
- package/dist/assetLibrary/catalogThumbs.d.ts +7 -0
- package/dist/assetLibrary/catalogThumbs.d.ts.map +1 -0
- package/dist/assetLibrary/catalogThumbs.js +75 -0
- package/dist/assetLibrary/classify.d.ts +14 -0
- package/dist/assetLibrary/classify.d.ts.map +1 -0
- package/dist/assetLibrary/classify.js +43 -0
- package/dist/assetLibrary/classify.test.d.ts +2 -0
- package/dist/assetLibrary/classify.test.d.ts.map +1 -0
- package/dist/assetLibrary/classify.test.js +44 -0
- package/dist/assetLibrary/contract.indexeddb.test.d.ts +2 -0
- package/dist/assetLibrary/contract.indexeddb.test.d.ts.map +1 -0
- package/dist/assetLibrary/contract.indexeddb.test.js +10 -0
- package/dist/assetLibrary/contractTests.d.ts +12 -0
- package/dist/assetLibrary/contractTests.d.ts.map +1 -0
- package/dist/assetLibrary/contractTests.js +51 -0
- package/dist/assetLibrary/dispose.d.ts +4 -0
- package/dist/assetLibrary/dispose.d.ts.map +1 -0
- package/dist/assetLibrary/dispose.js +21 -0
- package/dist/assetLibrary/draco.d.ts +6 -0
- package/dist/assetLibrary/draco.d.ts.map +1 -0
- package/dist/assetLibrary/draco.js +45 -0
- package/dist/assetLibrary/draco.test.d.ts +2 -0
- package/dist/assetLibrary/draco.test.d.ts.map +1 -0
- package/dist/assetLibrary/draco.test.js +93 -0
- package/dist/assetLibrary/exportGLB.d.ts +20 -0
- package/dist/assetLibrary/exportGLB.d.ts.map +1 -0
- package/dist/assetLibrary/exportGLB.js +83 -0
- package/dist/assetLibrary/exportGLB.test.d.ts +2 -0
- package/dist/assetLibrary/exportGLB.test.d.ts.map +1 -0
- package/dist/assetLibrary/exportGLB.test.js +73 -0
- package/dist/assetLibrary/gltfLoader.d.ts +8 -0
- package/dist/assetLibrary/gltfLoader.d.ts.map +1 -0
- package/dist/assetLibrary/gltfLoader.js +11 -0
- package/dist/assetLibrary/hash.d.ts +7 -0
- package/dist/assetLibrary/hash.d.ts.map +1 -0
- package/dist/assetLibrary/hash.js +17 -0
- package/dist/assetLibrary/importModelFile.d.ts +5 -0
- package/dist/assetLibrary/importModelFile.d.ts.map +1 -0
- package/dist/assetLibrary/importModelFile.js +19 -0
- package/dist/assetLibrary/importModelFile.test.d.ts +2 -0
- package/dist/assetLibrary/importModelFile.test.d.ts.map +1 -0
- package/dist/assetLibrary/importModelFile.test.js +77 -0
- package/dist/assetLibrary/importPipeline.d.ts +61 -0
- package/dist/assetLibrary/importPipeline.d.ts.map +1 -0
- package/dist/assetLibrary/importPipeline.js +253 -0
- package/dist/assetLibrary/importPipeline.test.d.ts +2 -0
- package/dist/assetLibrary/importPipeline.test.d.ts.map +1 -0
- package/dist/assetLibrary/importPipeline.test.js +188 -0
- package/dist/assetLibrary/indexedDBBackend.d.ts +31 -0
- package/dist/assetLibrary/indexedDBBackend.d.ts.map +1 -0
- package/dist/assetLibrary/indexedDBBackend.js +134 -0
- package/dist/assetLibrary/indexedDBBackend.test.d.ts +2 -0
- package/dist/assetLibrary/indexedDBBackend.test.d.ts.map +1 -0
- package/dist/assetLibrary/indexedDBBackend.test.js +148 -0
- package/dist/assetLibrary/legacySeedCleanup.d.ts +19 -0
- package/dist/assetLibrary/legacySeedCleanup.d.ts.map +1 -0
- package/dist/assetLibrary/legacySeedCleanup.js +50 -0
- package/dist/assetLibrary/legacySeedCleanup.test.d.ts +2 -0
- package/dist/assetLibrary/legacySeedCleanup.test.d.ts.map +1 -0
- package/dist/assetLibrary/legacySeedCleanup.test.js +74 -0
- package/dist/assetLibrary/library.d.ts +122 -0
- package/dist/assetLibrary/library.d.ts.map +1 -0
- package/dist/assetLibrary/library.js +424 -0
- package/dist/assetLibrary/library.test.d.ts +2 -0
- package/dist/assetLibrary/library.test.d.ts.map +1 -0
- package/dist/assetLibrary/library.test.js +520 -0
- package/dist/assetLibrary/options.d.ts +9 -0
- package/dist/assetLibrary/options.d.ts.map +1 -0
- package/dist/assetLibrary/options.js +20 -0
- package/dist/assetLibrary/options.test.d.ts +2 -0
- package/dist/assetLibrary/options.test.d.ts.map +1 -0
- package/dist/assetLibrary/options.test.js +70 -0
- package/dist/assetLibrary/pose.d.ts +15 -0
- package/dist/assetLibrary/pose.d.ts.map +1 -0
- package/dist/assetLibrary/pose.js +41 -0
- package/dist/assetLibrary/pose.test.d.ts +2 -0
- package/dist/assetLibrary/pose.test.d.ts.map +1 -0
- package/dist/assetLibrary/pose.test.js +45 -0
- package/dist/assetLibrary/poseThumbnail.d.ts +30 -0
- package/dist/assetLibrary/poseThumbnail.d.ts.map +1 -0
- package/dist/assetLibrary/poseThumbnail.js +144 -0
- package/dist/assetLibrary/poseThumbnail.test.d.ts +2 -0
- package/dist/assetLibrary/poseThumbnail.test.d.ts.map +1 -0
- package/dist/assetLibrary/poseThumbnail.test.js +111 -0
- package/dist/assetLibrary/rig.d.ts +14 -0
- package/dist/assetLibrary/rig.d.ts.map +1 -0
- package/dist/assetLibrary/rig.js +33 -0
- package/dist/assetLibrary/rig.test.d.ts +2 -0
- package/dist/assetLibrary/rig.test.d.ts.map +1 -0
- package/dist/assetLibrary/rig.test.js +55 -0
- package/dist/assetLibrary/seedAssetsManifest.d.ts +24 -0
- package/dist/assetLibrary/seedAssetsManifest.d.ts.map +1 -0
- package/dist/assetLibrary/seedAssetsManifest.js +347 -0
- package/dist/assetLibrary/seedBuiltinPoses.d.ts +29 -0
- package/dist/assetLibrary/seedBuiltinPoses.d.ts.map +1 -0
- package/dist/assetLibrary/seedBuiltinPoses.js +114 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.d.ts +2 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.d.ts.map +1 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.js +176 -0
- package/dist/assetLibrary/seedPoses.d.ts +8 -0
- package/dist/assetLibrary/seedPoses.d.ts.map +1 -0
- package/dist/assetLibrary/seedPoses.js +2414 -0
- package/dist/assetLibrary/seedPosesDpl.d.ts +8 -0
- package/dist/assetLibrary/seedPosesDpl.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesDpl.js +11660 -0
- package/dist/assetLibrary/seedPosesQbx.d.ts +8 -0
- package/dist/assetLibrary/seedPosesQbx.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesQbx.js +5612 -0
- package/dist/assetLibrary/seedPosesQbx.test.d.ts +2 -0
- package/dist/assetLibrary/seedPosesQbx.test.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesQbx.test.js +181 -0
- package/dist/assetLibrary/source.d.ts +45 -0
- package/dist/assetLibrary/source.d.ts.map +1 -0
- package/dist/assetLibrary/source.js +11 -0
- package/dist/assetLibrary/source.test.d.ts +2 -0
- package/dist/assetLibrary/source.test.d.ts.map +1 -0
- package/dist/assetLibrary/source.test.js +28 -0
- package/dist/assetLibrary/staticCatalogSource.d.ts +48 -0
- package/dist/assetLibrary/staticCatalogSource.d.ts.map +1 -0
- package/dist/assetLibrary/staticCatalogSource.js +140 -0
- package/dist/assetLibrary/staticCatalogSource.test.d.ts +2 -0
- package/dist/assetLibrary/staticCatalogSource.test.d.ts.map +1 -0
- package/dist/assetLibrary/staticCatalogSource.test.js +154 -0
- package/dist/assetLibrary/thumbnail.d.ts +14 -0
- package/dist/assetLibrary/thumbnail.d.ts.map +1 -0
- package/dist/assetLibrary/thumbnail.js +70 -0
- package/dist/assetLibrary/types.d.ts +54 -0
- package/dist/assetLibrary/types.d.ts.map +1 -0
- package/dist/assetLibrary/types.js +1 -0
- package/dist/assetLibrary/useModelThumbUrl.d.ts +10 -0
- package/dist/assetLibrary/useModelThumbUrl.d.ts.map +1 -0
- package/dist/assetLibrary/useModelThumbUrl.js +56 -0
- package/dist/boneAnchorWiring.test.d.ts +2 -0
- package/dist/boneAnchorWiring.test.d.ts.map +1 -0
- package/dist/boneAnchorWiring.test.js +173 -0
- package/dist/boneAnchors.d.ts +30 -0
- package/dist/boneAnchors.d.ts.map +1 -0
- package/dist/boneAnchors.js +111 -0
- package/dist/boneAnchors.test.d.ts +2 -0
- package/dist/boneAnchors.test.d.ts.map +1 -0
- package/dist/boneAnchors.test.js +98 -0
- package/dist/bootstrap.d.ts +37 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +394 -0
- package/dist/bootstrap.test.d.ts +2 -0
- package/dist/bootstrap.test.d.ts.map +1 -0
- package/dist/bootstrap.test.js +647 -0
- package/dist/cameraRegistry.d.ts +65 -0
- package/dist/cameraRegistry.d.ts.map +1 -0
- package/dist/cameraRegistry.js +151 -0
- package/dist/cameraRegistry.test.d.ts +2 -0
- package/dist/cameraRegistry.test.d.ts.map +1 -0
- package/dist/cameraRegistry.test.js +68 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1 -0
- package/dist/contextMenu.d.ts +16 -0
- package/dist/contextMenu.d.ts.map +1 -0
- package/dist/contextMenu.js +10 -0
- package/dist/dropPoint.d.ts +61 -0
- package/dist/dropPoint.d.ts.map +1 -0
- package/dist/dropPoint.js +97 -0
- package/dist/dropPoint.test.d.ts +2 -0
- package/dist/dropPoint.test.d.ts.map +1 -0
- package/dist/dropPoint.test.js +174 -0
- package/dist/editorOnly.d.ts +6 -0
- package/dist/editorOnly.d.ts.map +1 -0
- package/dist/editorOnly.js +32 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/gestureProps.d.ts +99 -0
- package/dist/gestureProps.d.ts.map +1 -0
- package/dist/gestureProps.js +118 -0
- package/dist/gestureProps.test.d.ts +2 -0
- package/dist/gestureProps.test.d.ts.map +1 -0
- package/dist/gestureProps.test.js +182 -0
- package/dist/gesturePropsEditor.d.ts +27 -0
- package/dist/gesturePropsEditor.d.ts.map +1 -0
- package/dist/gesturePropsEditor.js +121 -0
- package/dist/getDeep.d.ts +8 -0
- package/dist/getDeep.d.ts.map +1 -0
- package/dist/getDeep.js +15 -0
- package/dist/gizmoRegistry.test.d.ts +2 -0
- package/dist/gizmoRegistry.test.d.ts.map +1 -0
- package/dist/gizmoRegistry.test.js +40 -0
- package/dist/hostFlows.d.ts +55 -0
- package/dist/hostFlows.d.ts.map +1 -0
- package/dist/hostFlows.js +77 -0
- package/dist/hostFlows.test.d.ts +2 -0
- package/dist/hostFlows.test.d.ts.map +1 -0
- package/dist/hostFlows.test.js +191 -0
- package/dist/i18n.d.ts +26 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +271 -0
- package/dist/i18n.test.d.ts +2 -0
- package/dist/i18n.test.d.ts.map +1 -0
- package/dist/i18n.test.js +41 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/menuModel.d.ts +51 -0
- package/dist/menuModel.d.ts.map +1 -0
- package/dist/menuModel.js +111 -0
- package/dist/menuModel.test.d.ts +2 -0
- package/dist/menuModel.test.d.ts.map +1 -0
- package/dist/menuModel.test.js +197 -0
- package/dist/modalGrab.d.ts +29 -0
- package/dist/modalGrab.d.ts.map +1 -0
- package/dist/modalGrab.js +127 -0
- package/dist/outlineObjectMenu.d.ts +41 -0
- package/dist/outlineObjectMenu.d.ts.map +1 -0
- package/dist/outlineObjectMenu.js +58 -0
- package/dist/outlineObjectMenu.test.d.ts +2 -0
- package/dist/outlineObjectMenu.test.d.ts.map +1 -0
- package/dist/outlineObjectMenu.test.js +83 -0
- package/dist/pathBinding.d.ts +16 -0
- package/dist/pathBinding.d.ts.map +1 -0
- package/dist/pathBinding.js +19 -0
- package/dist/pathBinding.test.d.ts +2 -0
- package/dist/pathBinding.test.d.ts.map +1 -0
- package/dist/pathBinding.test.js +14 -0
- package/dist/pathModel.d.ts +123 -0
- package/dist/pathModel.d.ts.map +1 -0
- package/dist/pathModel.js +343 -0
- package/dist/pathModel.test.d.ts +2 -0
- package/dist/pathModel.test.d.ts.map +1 -0
- package/dist/pathModel.test.js +394 -0
- package/dist/pathPresets.d.ts +38 -0
- package/dist/pathPresets.d.ts.map +1 -0
- package/dist/pathPresets.js +180 -0
- package/dist/pathPresets.test.d.ts +2 -0
- package/dist/pathPresets.test.d.ts.map +1 -0
- package/dist/pathPresets.test.js +154 -0
- package/dist/pathRegistry.d.ts +46 -0
- package/dist/pathRegistry.d.ts.map +1 -0
- package/dist/pathRegistry.js +105 -0
- package/dist/pathRegistry.test.d.ts +2 -0
- package/dist/pathRegistry.test.d.ts.map +1 -0
- package/dist/pathRegistry.test.js +23 -0
- package/dist/pickerRegistry.d.ts +49 -0
- package/dist/pickerRegistry.d.ts.map +1 -0
- package/dist/pickerRegistry.js +17 -0
- package/dist/pickerRegistry.test.d.ts +2 -0
- package/dist/pickerRegistry.test.d.ts.map +1 -0
- package/dist/pickerRegistry.test.js +31 -0
- package/dist/pipLayout.d.ts +7 -0
- package/dist/pipLayout.d.ts.map +1 -0
- package/dist/pipLayout.js +58 -0
- package/dist/placementKey.test.d.ts +2 -0
- package/dist/placementKey.test.d.ts.map +1 -0
- package/dist/placementKey.test.js +32 -0
- package/dist/placementPoseProps.d.ts +29 -0
- package/dist/placementPoseProps.d.ts.map +1 -0
- package/dist/placementPoseProps.js +43 -0
- package/dist/placementPoseProps.test.d.ts +2 -0
- package/dist/placementPoseProps.test.d.ts.map +1 -0
- package/dist/placementPoseProps.test.js +35 -0
- package/dist/poseMode/PoseModeBar.d.ts +18 -0
- package/dist/poseMode/PoseModeBar.d.ts.map +1 -0
- package/dist/poseMode/PoseModeBar.js +127 -0
- package/dist/poseMode/PoseModeRig.d.ts +9 -0
- package/dist/poseMode/PoseModeRig.d.ts.map +1 -0
- package/dist/poseMode/PoseModeRig.js +300 -0
- package/dist/poseMode/PosePickerFrame.d.ts +42 -0
- package/dist/poseMode/PosePickerFrame.d.ts.map +1 -0
- package/dist/poseMode/PosePickerFrame.js +164 -0
- package/dist/poseMode/PosePropEditor.d.ts +30 -0
- package/dist/poseMode/PosePropEditor.d.ts.map +1 -0
- package/dist/poseMode/PosePropEditor.js +139 -0
- package/dist/poseMode/controlSpec.d.ts +26 -0
- package/dist/poseMode/controlSpec.d.ts.map +1 -0
- package/dist/poseMode/controlSpec.js +157 -0
- package/dist/poseMode/controlSpec.test.d.ts +2 -0
- package/dist/poseMode/controlSpec.test.d.ts.map +1 -0
- package/dist/poseMode/controlSpec.test.js +196 -0
- package/dist/poseMode/dragState.d.ts +16 -0
- package/dist/poseMode/dragState.d.ts.map +1 -0
- package/dist/poseMode/dragState.js +15 -0
- package/dist/poseMode/dragState.test.d.ts +2 -0
- package/dist/poseMode/dragState.test.d.ts.map +1 -0
- package/dist/poseMode/dragState.test.js +23 -0
- package/dist/poseMode/poseDisplayText.d.ts +18 -0
- package/dist/poseMode/poseDisplayText.d.ts.map +1 -0
- package/dist/poseMode/poseDisplayText.js +13 -0
- package/dist/poseMode/poseDisplayText.test.d.ts +2 -0
- package/dist/poseMode/poseDisplayText.test.d.ts.map +1 -0
- package/dist/poseMode/poseDisplayText.test.js +35 -0
- package/dist/poseMode/poseExitGuard.d.ts +8 -0
- package/dist/poseMode/poseExitGuard.d.ts.map +1 -0
- package/dist/poseMode/poseExitGuard.js +13 -0
- package/dist/poseMode/poseExitGuard.test.d.ts +2 -0
- package/dist/poseMode/poseExitGuard.test.d.ts.map +1 -0
- package/dist/poseMode/poseExitGuard.test.js +41 -0
- package/dist/poseMode/poseFrame.d.ts +11 -0
- package/dist/poseMode/poseFrame.d.ts.map +1 -0
- package/dist/poseMode/poseFrame.js +7 -0
- package/dist/poseMode/poseFrame.test.d.ts +2 -0
- package/dist/poseMode/poseFrame.test.d.ts.map +1 -0
- package/dist/poseMode/poseFrame.test.js +25 -0
- package/dist/poseMode/poseInterpolate.d.ts +4 -0
- package/dist/poseMode/poseInterpolate.d.ts.map +1 -0
- package/dist/poseMode/poseInterpolate.js +75 -0
- package/dist/poseMode/poseInterpolate.test.d.ts +2 -0
- package/dist/poseMode/poseInterpolate.test.d.ts.map +1 -0
- package/dist/poseMode/poseInterpolate.test.js +61 -0
- package/dist/poseMode/poseLibResolve.d.ts +9 -0
- package/dist/poseMode/poseLibResolve.d.ts.map +1 -0
- package/dist/poseMode/poseLibResolve.js +49 -0
- package/dist/poseMode/poseLibResolve.test.d.ts +2 -0
- package/dist/poseMode/poseLibResolve.test.d.ts.map +1 -0
- package/dist/poseMode/poseLibResolve.test.js +59 -0
- package/dist/poseMode/poseMigration.d.ts +5 -0
- package/dist/poseMode/poseMigration.d.ts.map +1 -0
- package/dist/poseMode/poseMigration.js +16 -0
- package/dist/poseMode/poseMigration.test.d.ts +2 -0
- package/dist/poseMode/poseMigration.test.d.ts.map +1 -0
- package/dist/poseMode/poseMigration.test.js +25 -0
- package/dist/poseMode/poseOptions.d.ts +45 -0
- package/dist/poseMode/poseOptions.d.ts.map +1 -0
- package/dist/poseMode/poseOptions.js +39 -0
- package/dist/poseMode/poseOptions.test.d.ts +2 -0
- package/dist/poseMode/poseOptions.test.d.ts.map +1 -0
- package/dist/poseMode/poseOptions.test.js +83 -0
- package/dist/poseMode/poseOverride.d.ts +13 -0
- package/dist/poseMode/poseOverride.d.ts.map +1 -0
- package/dist/poseMode/poseOverride.js +26 -0
- package/dist/poseMode/poseOverride.test.d.ts +2 -0
- package/dist/poseMode/poseOverride.test.d.ts.map +1 -0
- package/dist/poseMode/poseOverride.test.js +23 -0
- package/dist/poseMode/poseRetarget.d.ts +17 -0
- package/dist/poseMode/poseRetarget.d.ts.map +1 -0
- package/dist/poseMode/poseRetarget.js +53 -0
- package/dist/poseMode/poseRetarget.test.d.ts +2 -0
- package/dist/poseMode/poseRetarget.test.d.ts.map +1 -0
- package/dist/poseMode/poseRetarget.test.js +88 -0
- package/dist/poseMode/poseSession.d.ts +58 -0
- package/dist/poseMode/poseSession.d.ts.map +1 -0
- package/dist/poseMode/poseSession.js +183 -0
- package/dist/poseMode/poseSession.test.d.ts +2 -0
- package/dist/poseMode/poseSession.test.d.ts.map +1 -0
- package/dist/poseMode/poseSession.test.js +159 -0
- package/dist/poseMode/poseSessionHooks.test.d.ts +2 -0
- package/dist/poseMode/poseSessionHooks.test.d.ts.map +1 -0
- package/dist/poseMode/poseSessionHooks.test.js +49 -0
- package/dist/poseMode/poseTrack.d.ts +30 -0
- package/dist/poseMode/poseTrack.d.ts.map +1 -0
- package/dist/poseMode/poseTrack.js +155 -0
- package/dist/poseMode/poseTrack.test.d.ts +2 -0
- package/dist/poseMode/poseTrack.test.d.ts.map +1 -0
- package/dist/poseMode/poseTrack.test.js +84 -0
- package/dist/poseMode/poseValue.d.ts +22 -0
- package/dist/poseMode/poseValue.d.ts.map +1 -0
- package/dist/poseMode/poseValue.js +73 -0
- package/dist/poseMode/poseValue.test.d.ts +2 -0
- package/dist/poseMode/poseValue.test.d.ts.map +1 -0
- package/dist/poseMode/poseValue.test.js +62 -0
- package/dist/poseMode/savePose.d.ts +23 -0
- package/dist/poseMode/savePose.d.ts.map +1 -0
- package/dist/poseMode/savePose.js +29 -0
- package/dist/poseMode/selectionModes.d.ts +14 -0
- package/dist/poseMode/selectionModes.d.ts.map +1 -0
- package/dist/poseMode/selectionModes.js +39 -0
- package/dist/poseMode/selectionModes.test.d.ts +2 -0
- package/dist/poseMode/selectionModes.test.d.ts.map +1 -0
- package/dist/poseMode/selectionModes.test.js +91 -0
- package/dist/poseNameMessages.d.ts +13 -0
- package/dist/poseNameMessages.d.ts.map +1 -0
- package/dist/poseNameMessages.js +370 -0
- package/dist/poseNames.d.ts +14 -0
- package/dist/poseNames.d.ts.map +1 -0
- package/dist/poseNames.js +21 -0
- package/dist/poseNames.test.d.ts +2 -0
- package/dist/poseNames.test.d.ts.map +1 -0
- package/dist/poseNames.test.js +41 -0
- package/dist/poseStatusText.d.ts +2 -0
- package/dist/poseStatusText.d.ts.map +1 -0
- package/dist/poseStatusText.js +11 -0
- package/dist/poseStatusText.test.d.ts +2 -0
- package/dist/poseStatusText.test.d.ts.map +1 -0
- package/dist/poseStatusText.test.js +21 -0
- package/dist/presetThumbGeometry.d.ts +26 -0
- package/dist/presetThumbGeometry.d.ts.map +1 -0
- package/dist/presetThumbGeometry.js +103 -0
- package/dist/presetThumbGeometry.test.d.ts +2 -0
- package/dist/presetThumbGeometry.test.d.ts.map +1 -0
- package/dist/presetThumbGeometry.test.js +83 -0
- package/dist/selectionOutline.d.ts +42 -0
- package/dist/selectionOutline.d.ts.map +1 -0
- package/dist/selectionOutline.js +174 -0
- package/dist/selectionOutline.test.d.ts +2 -0
- package/dist/selectionOutline.test.d.ts.map +1 -0
- package/dist/selectionOutline.test.js +58 -0
- package/dist/smoke.test.d.ts +1 -0
- package/dist/smoke.test.d.ts.map +1 -0
- package/dist/smoke.test.js +17 -0
- package/dist/uiConfig.d.ts +16 -0
- package/dist/uiConfig.d.ts.map +1 -0
- package/dist/uiConfig.js +13 -0
- package/dist/uiConfig.test.d.ts +2 -0
- package/dist/uiConfig.test.d.ts.map +1 -0
- package/dist/uiConfig.test.js +98 -0
- package/dist/undoShortcuts.d.ts +28 -0
- package/dist/undoShortcuts.d.ts.map +1 -0
- package/dist/undoShortcuts.js +59 -0
- package/dist/undoShortcuts.test.d.ts +2 -0
- package/dist/undoShortcuts.test.d.ts.map +1 -0
- package/dist/undoShortcuts.test.js +37 -0
- package/dist/useCameraStudio.d.ts +3 -0
- package/dist/useCameraStudio.d.ts.map +1 -0
- package/dist/useCameraStudio.js +86 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/videoExport/BlobCollectSink.d.ts +25 -0
- package/dist/videoExport/BlobCollectSink.d.ts.map +1 -0
- package/dist/videoExport/BlobCollectSink.js +56 -0
- package/dist/videoExport/BlobCollectSink.test.d.ts +2 -0
- package/dist/videoExport/BlobCollectSink.test.d.ts.map +1 -0
- package/dist/videoExport/BlobCollectSink.test.js +78 -0
- package/dist/videoExport/encoder.d.ts +34 -0
- package/dist/videoExport/encoder.d.ts.map +1 -0
- package/dist/videoExport/encoder.js +61 -0
- package/dist/videoExport/encoder.test.d.ts +2 -0
- package/dist/videoExport/encoder.test.d.ts.map +1 -0
- package/dist/videoExport/encoder.test.js +21 -0
- package/dist/videoExport/exporter.d.ts +24 -0
- package/dist/videoExport/exporter.d.ts.map +1 -0
- package/dist/videoExport/exporter.js +74 -0
- package/dist/videoExport/sinks.d.ts +55 -0
- package/dist/videoExport/sinks.d.ts.map +1 -0
- package/dist/videoExport/sinks.js +69 -0
- package/package.json +59 -3
- package/README.md +0 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ISheetObject } from '@dreamerbird/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { MutableRefObject } from 'react';
|
|
4
|
+
import './i18n';
|
|
5
|
+
/** 响应式读对象的某个标量属性(值没变就返回原引用,不触发重渲染) */
|
|
6
|
+
export declare function useObjPropScalar<T>(objRef: MutableRefObject<ISheetObject<any> | undefined>, prop: string, fallback: T): T;
|
|
7
|
+
export declare function ShotCamera({ cameraKey, isActive, shotView, pipVisible, pipBottom, cameraObjRef, onCameraContextMenu, }: {
|
|
8
|
+
cameraKey: string;
|
|
9
|
+
/** 活动相机:画中画/镜头视角全屏/导出都只对它生效 */
|
|
10
|
+
isActive: boolean;
|
|
11
|
+
/** 镜头视角全屏中(此时非活动相机的视锥也全部隐藏) */
|
|
12
|
+
shotView: boolean;
|
|
13
|
+
/** 画中画开关(顶栏按钮);只影响编辑视角的右下角小窗,镜头全屏视角不受它管 */
|
|
14
|
+
pipVisible: boolean;
|
|
15
|
+
/** 画中画底部留白(px,DOM 边框层同源):悬在时间轴面板上方 */
|
|
16
|
+
pipBottom: number;
|
|
17
|
+
cameraObjRef: MutableRefObject<ISheetObject<any> | undefined>;
|
|
18
|
+
/** 右键相机:弹出相机菜单 */
|
|
19
|
+
onCameraContextMenu?: (x: number, y: number) => void;
|
|
20
|
+
}): React.JSX.Element;
|
|
21
|
+
//# sourceMappingURL=ShotCamera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShotCamera.d.ts","sourceRoot":"","sources":["../src/ShotCamera.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAON,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,OAAO,CAAA;AAqB3C,OAAO,QAAQ,CAAA;AAmPf,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EACvD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GACV,CAAC,CAgBH;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,SAAS,EACT,YAAY,EACZ,mBAAmB,GACpB,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,2CAA2C;IAC3C,UAAU,EAAE,OAAO,CAAA;IACnB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;IAC7D,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD,qBA+VA"}
|
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
import { PerspectiveCamera, useCurrentSheet } from '@dreamerbird/r3f';
|
|
2
|
+
import { getStudioSync, types as t, val } from '@dreamerbird/core';
|
|
3
|
+
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
|
|
4
|
+
import { invalidate, useFrame, useThree } from '@react-three/fiber';
|
|
5
|
+
import { BufferAttribute, BufferGeometry, DoubleSide, Euler, LineBasicMaterial, LineSegments, Matrix4, Mesh, MeshBasicMaterial, Object3D, PlaneGeometry, Vector3, } from 'three';
|
|
6
|
+
import { translate } from '@dreamerbird/studio/i18n';
|
|
7
|
+
// 副作用导入:本模块在模块加载时就 translate 属性标签,必须先注册词条,
|
|
8
|
+
// 否则入口文件 import 顺序不保险时会把原始 key 烘焙进配置
|
|
9
|
+
import './i18n';
|
|
10
|
+
import { registerEditorOnly, withEditorOnlyHidden } from './editorOnly';
|
|
11
|
+
import { useSelectionGizmoTarget } from './PlacementManager';
|
|
12
|
+
import { getPathMeta, samplePathPoint, usePathExists, usePathHasPoints, } from './CameraPath';
|
|
13
|
+
import { resolveBoundPathKey } from './pathBinding';
|
|
14
|
+
import { getPathsRegistry, readPathEntries, usePathsList } from './pathRegistry';
|
|
15
|
+
import { consumeCameraSeed, registerShotCameraObject } from './cameraRegistry';
|
|
16
|
+
import { resolveAimTarget, aimTargetOptions, subscribeTargetRegistry, } from './aimTargets';
|
|
17
|
+
import { formatSceneObjectId } from './agent/objectIds';
|
|
18
|
+
import { registerSceneSheetObject, unregisterSceneSheetObject, } from './agent/runtime/objectRuntime';
|
|
19
|
+
import { notifyCameraReady, rejectCameraMount, } from './agent/runtime/cameraLifecycle';
|
|
20
|
+
/**
|
|
21
|
+
* 场景摄像机(shot camera):独立于编辑主视角的"镜头",取景画面用于
|
|
22
|
+
* 画中画预览和之后的视频导出,对标 Blender 的场景 Camera 对象。
|
|
23
|
+
*
|
|
24
|
+
* - theatre 对象 Shot Camera(位置/旋转/fov 可上时间轴)。朝向不再自带
|
|
25
|
+
* Target 对象:由面板上的「瞄准目标」下拉(aimTarget 属性)选目标,
|
|
26
|
+
* 目标可解析时相机 lookAt 它,对齐 Blender 的 Track To 约束
|
|
27
|
+
* (约束的目标槽换成运行时登记表里的锚点/骨骼/模型/相机);
|
|
28
|
+
* 解绑或目标消失时把当前朝向定格进 rotation 属性,画面不跳
|
|
29
|
+
* - 运镜驱动:机位可以切到"沿路径"(相机面板的「绑定路径」下拉选一条
|
|
30
|
+
* 路径,对齐 Blender 的约束跟随),由 CameraPath 的曲线 + 路径对象的
|
|
31
|
+
* 行进进度(0~1,对齐曲线侧的 Evaluation Time)驱动,
|
|
32
|
+
* 进度打关键帧 = 调运镜节奏;路径为空时回退手动,不产生异常画面
|
|
33
|
+
* - 编辑器里的视锥示意:从相机顶点拉 4 条线到固定距离的末端平面,
|
|
34
|
+
* 平面画成半透明色块(自绘 LineSegments + 半透明 Plane,不用
|
|
35
|
+
* CameraHelper——它无法被 scene.clone() 复制,r3f 快照编辑器克隆
|
|
36
|
+
* 场景时必炸),点线或色块即选中摄像机,挂三轴箭头拖动摆机位;
|
|
37
|
+
* 机位被路径接管时相机箭头不出现
|
|
38
|
+
* (对齐 Blender 的约束:驱动期间物体拖不动,要挪就挪路径/进度)
|
|
39
|
+
* - 画中画:右下角小窗实时渲染镜头取景;切到"镜头视角"时全屏取景
|
|
40
|
+
* - 视锥线/手柄都登记进 editorOnly,画中画与镜头视角渲染时
|
|
41
|
+
* 隐藏,取景画面始终干净
|
|
42
|
+
*/
|
|
43
|
+
const PIP_WIDTH_FRACTION = 0.28;
|
|
44
|
+
const PIP_MARGIN_PX = 16;
|
|
45
|
+
const FRUSTUM_COLOR = 0x6fb7ff;
|
|
46
|
+
/** 视锥示意线的末端距离(示意用,与相机实际 far 无关;0.75 = 早期 3 的四分之一) */
|
|
47
|
+
const FRUSTUM_DISPLAY_LENGTH = 0.75;
|
|
48
|
+
/** 末端平面的不透明度 */
|
|
49
|
+
const FRUSTUM_FILL_OPACITY = 0.12;
|
|
50
|
+
/** 选中高亮色:与锚点同色(Blender 式选中橙),选中时整套视锥换色 */
|
|
51
|
+
const FRUSTUM_HIGHLIGHT = 0xffb020;
|
|
52
|
+
/**
|
|
53
|
+
* 尾部内缩比例:机位射向远端矩形角点的 4 根线,从机位前方「视锥长度
|
|
54
|
+
* × 该比例」处才开始画,4 根线不再在机位精确交汇成亮点,尾部更干净
|
|
55
|
+
*/
|
|
56
|
+
const FRUSTUM_TAIL_INSET = 0.125;
|
|
57
|
+
/**
|
|
58
|
+
* 运镜驱动属性,挂在 Shot Camera 对象上(模块级常量:
|
|
59
|
+
* sheet.object 重复调用要求配置 deep-equal,函数按引用比,
|
|
60
|
+
* 每次 render 新建会在热更新后炸"called twice with different config")。
|
|
61
|
+
*
|
|
62
|
+
* 分工对齐 Blender 的 Follow Path:**绑哪条路径归相机**(pathKey 属性,
|
|
63
|
+
* 面板下拉选,选了即生效、清空即解绑,position 属性被忽略),**行进进度
|
|
64
|
+
* 归路径**(绑定路径对象的 progress 属性,打关键帧 = 调运镜节奏;
|
|
65
|
+
* 对齐曲线侧的 Evaluation Time)。路径被删回退手动(机位定格当前,
|
|
66
|
+
* 对齐 Blender 约束目标消失),不产生异常画面。
|
|
67
|
+
* 朝向绑定归「瞄准目标」下拉(aimTarget 属性):选「无」或目标消失
|
|
68
|
+
* = 解除朝向绑定(对齐 Blender 关掉 Track To 约束):解绑瞬间把当前
|
|
69
|
+
* 朝向定格进 rotation 属性,画面不跳。
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* 「绑定路径」下拉的动态选项:pathKey → 显示名。选项函数由 studio 在
|
|
73
|
+
* 编辑器渲染/校验时调用(不在 React 上下文里),经 dropdownSheet 拿
|
|
74
|
+
* 当前 sheet 读注册表;注册表对象还没建好时退化为只有「手动」一项。
|
|
75
|
+
*/
|
|
76
|
+
let dropdownSheet = null;
|
|
77
|
+
function pathBindingOptions() {
|
|
78
|
+
// 选项函数每次读取都会调,经 t() 取词:语言切换后面板重渲染即生效
|
|
79
|
+
const options = {
|
|
80
|
+
'': translate('pg.props.pathManual'),
|
|
81
|
+
};
|
|
82
|
+
if (!dropdownSheet)
|
|
83
|
+
return options;
|
|
84
|
+
try {
|
|
85
|
+
for (const entry of readPathEntries(getPathsRegistry(dropdownSheet))) {
|
|
86
|
+
options[entry.pathKey] = entry.pathKey;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// 注册表对象尚未创建:只有手动项
|
|
91
|
+
}
|
|
92
|
+
return options;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 运镜驱动属性,挂在 Shot Camera 对象上(模块级常量:
|
|
96
|
+
* sheet.object 重复调用要求配置 deep-equal,函数按引用比,
|
|
97
|
+
* 每次 render 新建会在热更新后炸"called twice with different config")。
|
|
98
|
+
*
|
|
99
|
+
* pathKey 是绑定的单一直径:下拉选项动态来自注册表(见
|
|
100
|
+
* pathBindingOptions),选「手动」= 解绑。moveMode 是双属性时代的
|
|
101
|
+
* 历史属性,隐藏保留只为兼容已持久化的状态值,不再显示也不再读写。
|
|
102
|
+
*
|
|
103
|
+
* label 用函数形式(() => translate(...)):studio 属性面板每次渲染
|
|
104
|
+
* 都会现调(resolvePropLabel),所以语言切换后这两个标签跟着热改,
|
|
105
|
+
* 不再需要刷新页面。箭头函数在模块级定义,引用稳定,满足 deep-equal。
|
|
106
|
+
* moveMode 已 hidden(双属性时代遗留),不再显示,硬编码留着无碍。
|
|
107
|
+
*/
|
|
108
|
+
const shotCameraAdditionalProps = {
|
|
109
|
+
// 旧「朝向绑定」开关已并入 aimTarget 下拉(选「无」= 解绑):
|
|
110
|
+
// 属性隐藏保留只为兼容已持久化的状态值,不再显示也不再读写
|
|
111
|
+
trackTarget: t.boolean(true, {
|
|
112
|
+
label: () => translate('pg.props.trackTarget'),
|
|
113
|
+
hidden: true,
|
|
114
|
+
}),
|
|
115
|
+
aimTarget: t.stringLiteral('', aimTargetOptions, {
|
|
116
|
+
label: () => translate('pg.props.aimTarget'),
|
|
117
|
+
as: 'menu',
|
|
118
|
+
}),
|
|
119
|
+
moveMode: t.stringLiteral('manual', { manual: '手动', path: '路径' }, { label: '机位驱动', hidden: true }),
|
|
120
|
+
pathKey: t.stringLiteral('', pathBindingOptions, {
|
|
121
|
+
label: () => translate('pg.props.pathKey'),
|
|
122
|
+
as: 'menu',
|
|
123
|
+
}),
|
|
124
|
+
};
|
|
125
|
+
/** 视锥线:末端平面矩形 4 段 + 顶点→平面 4 角 = 8 段 */
|
|
126
|
+
function makeFrustumLines() {
|
|
127
|
+
const geo = new BufferGeometry();
|
|
128
|
+
geo.setAttribute('position', new BufferAttribute(new Float32Array(16 * 3), 3));
|
|
129
|
+
const lines = new LineSegments(geo, new LineBasicMaterial({ color: FRUSTUM_COLOR, toneMapped: false }));
|
|
130
|
+
// 顶点逐帧重写,包围球不更新,关掉视锥剔除防止被误剔
|
|
131
|
+
lines.frustumCulled = false;
|
|
132
|
+
return lines;
|
|
133
|
+
}
|
|
134
|
+
/** 末端半透明显示面(示意取景框,单位平面,逐帧按 fov/aspect 缩放) */
|
|
135
|
+
function makeFrustumFill() {
|
|
136
|
+
const fill = new Mesh(new PlaneGeometry(1, 1), new MeshBasicMaterial({
|
|
137
|
+
color: FRUSTUM_COLOR,
|
|
138
|
+
transparent: true,
|
|
139
|
+
opacity: FRUSTUM_FILL_OPACITY,
|
|
140
|
+
side: DoubleSide,
|
|
141
|
+
depthWrite: false,
|
|
142
|
+
toneMapped: false,
|
|
143
|
+
}));
|
|
144
|
+
fill.position.z = -FRUSTUM_DISPLAY_LENGTH;
|
|
145
|
+
return fill;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* "上方"指示三角(对齐 Blender 相机 gizmo):末端矩形上边中点向上
|
|
149
|
+
* 一根实心三角,随视锥一起按 fov/aspect 缩放、跟相机翻滚转动,
|
|
150
|
+
* 一眼看出哪边是镜头的上。单位几何:底边宽 1、高 1,底边中点在原点。
|
|
151
|
+
*/
|
|
152
|
+
function makeUpTriangle() {
|
|
153
|
+
const geo = new BufferGeometry();
|
|
154
|
+
geo.setAttribute('position', new BufferAttribute(new Float32Array([-0.5, 0, 0, 0.5, 0, 0, 0, 1, 0]), 3));
|
|
155
|
+
const tri = new Mesh(geo, new MeshBasicMaterial({
|
|
156
|
+
color: FRUSTUM_COLOR,
|
|
157
|
+
side: DoubleSide,
|
|
158
|
+
toneMapped: false,
|
|
159
|
+
}));
|
|
160
|
+
tri.frustumCulled = false;
|
|
161
|
+
return tri;
|
|
162
|
+
}
|
|
163
|
+
/** 按相机当前 fov/aspect 重写视锥顶点、显示面尺寸和上方三角(挂在相机节点下,用视空间坐标) */
|
|
164
|
+
function updateFrustum(lines, fill, up, cam) {
|
|
165
|
+
const { fov, aspect } = cam;
|
|
166
|
+
const tan = Math.tan((fov * Math.PI) / 360);
|
|
167
|
+
const h = tan * FRUSTUM_DISPLAY_LENGTH;
|
|
168
|
+
const w = h * aspect;
|
|
169
|
+
const z = -FRUSTUM_DISPLAY_LENGTH;
|
|
170
|
+
const corners = [
|
|
171
|
+
[-w, -h, z],
|
|
172
|
+
[w, -h, z],
|
|
173
|
+
[w, h, z],
|
|
174
|
+
[-w, h, z],
|
|
175
|
+
];
|
|
176
|
+
const attr = lines.geometry.getAttribute('position');
|
|
177
|
+
const arr = attr.array;
|
|
178
|
+
let o = 0;
|
|
179
|
+
const seg = (a, b) => {
|
|
180
|
+
arr[o++] = a[0];
|
|
181
|
+
arr[o++] = a[1];
|
|
182
|
+
arr[o++] = a[2];
|
|
183
|
+
arr[o++] = b[0];
|
|
184
|
+
arr[o++] = b[1];
|
|
185
|
+
arr[o++] = b[2];
|
|
186
|
+
};
|
|
187
|
+
for (let i = 0; i < 4; i++) {
|
|
188
|
+
seg(corners[i], corners[(i + 1) % 4]);
|
|
189
|
+
// 尾部内缩:起点从机位沿角点方向前移视锥长度的 FRUSTUM_TAIL_INSET,
|
|
190
|
+
// 4 根线起点错开,不再交汇成亮点
|
|
191
|
+
seg([
|
|
192
|
+
corners[i][0] * FRUSTUM_TAIL_INSET,
|
|
193
|
+
corners[i][1] * FRUSTUM_TAIL_INSET,
|
|
194
|
+
corners[i][2] * FRUSTUM_TAIL_INSET,
|
|
195
|
+
], corners[i]);
|
|
196
|
+
}
|
|
197
|
+
attr.needsUpdate = true;
|
|
198
|
+
fill.scale.set(2 * w, 2 * h, 1);
|
|
199
|
+
// 上方三角:宽取矩形宽的一半,高 = 宽的一半(高宽比 1:2),
|
|
200
|
+
// 底边与矩形上边之间留 1/8 底宽的间距
|
|
201
|
+
up.position.set(0, h + w * 0.125, z);
|
|
202
|
+
up.scale.set(w, w * 0.5, 1);
|
|
203
|
+
}
|
|
204
|
+
/** 响应式读对象的某个标量属性(值没变就返回原引用,不触发重渲染) */
|
|
205
|
+
export function useObjPropScalar(objRef, prop, fallback) {
|
|
206
|
+
const [value, setValue] = useState(fallback);
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
const obj = objRef.current;
|
|
209
|
+
if (!obj)
|
|
210
|
+
return;
|
|
211
|
+
// onValuesChange 任何值变都会来(播放中的进度属性每帧都变),
|
|
212
|
+
// 值没变就返回原引用,不触发重渲染
|
|
213
|
+
const update = () => {
|
|
214
|
+
const next = val(obj.props[prop]);
|
|
215
|
+
setValue((prev) => (prev === next ? prev : next));
|
|
216
|
+
};
|
|
217
|
+
update();
|
|
218
|
+
return obj.onValuesChange(update);
|
|
219
|
+
// objRef 由下面的 wrapper 挂载时填充,效果跑时已就绪
|
|
220
|
+
}, [objRef, prop]);
|
|
221
|
+
return value;
|
|
222
|
+
}
|
|
223
|
+
export function ShotCamera({ cameraKey, isActive, shotView, pipVisible, pipBottom, cameraObjRef, onCameraContextMenu, }) {
|
|
224
|
+
// true = 镜头视角全屏(主相机让位);false = 编辑视角,右下角画中画
|
|
225
|
+
const makeDefault = shotView && isActive;
|
|
226
|
+
const camRef = useRef(null);
|
|
227
|
+
// 登记 three 相机对象,供锚点父级绑定的 camera: 解析
|
|
228
|
+
useEffect(() => {
|
|
229
|
+
registerShotCameraObject(cameraKey, camRef.current);
|
|
230
|
+
return () => registerShotCameraObject(cameraKey, null);
|
|
231
|
+
}, [cameraKey]);
|
|
232
|
+
// 瞄准代理:wrapper 的 lookAt 每帧读它的位置。瞄准目标(aimTarget)
|
|
233
|
+
// 解析出的运行时对象每帧先把世界位置写进代理,wrapper 优先级 0 的
|
|
234
|
+
// lookAt 读到的就是本帧的值,朝向不晚一帧
|
|
235
|
+
const aimRef = useRef(new Object3D());
|
|
236
|
+
const frustum = useMemo(makeFrustumLines, []);
|
|
237
|
+
const frustumFill = useMemo(makeFrustumFill, []);
|
|
238
|
+
const upTriangle = useMemo(makeUpTriangle, []);
|
|
239
|
+
// Agent 运行时登记(2026-10-17,Task 10):objRef 填充即「相机
|
|
240
|
+
// SheetObject 已挂载」信号,cameras.create 的 resolver 复核与
|
|
241
|
+
// scene/objects 查询都读这份登记;清空/卸载时按 id + 同一对象清理,
|
|
242
|
+
// 防过期 cleanup 误删新代次。editable 的 objRef 支持回调形式
|
|
243
|
+
// (与 Anchors/PlacedModelCore 同款)
|
|
244
|
+
const setCameraObjRef = useCallback((obj) => {
|
|
245
|
+
const id = formatSceneObjectId('camera', cameraKey);
|
|
246
|
+
const prev = cameraObjRef.current;
|
|
247
|
+
cameraObjRef.current = obj ?? undefined;
|
|
248
|
+
if (obj) {
|
|
249
|
+
registerSceneSheetObject(id, obj);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
unregisterSceneSheetObject(id, prev);
|
|
253
|
+
}
|
|
254
|
+
}, [cameraKey, cameraObjRef]);
|
|
255
|
+
// 新相机落地即取景:添加时从导演视角捕获的种子(机位/朝向),
|
|
256
|
+
// 挂载后消费一次——此后相机数据归面板/拖拽/时间轴管,种子不再介入。
|
|
257
|
+
// 结束时通知 Agent 挂载等待者(cameras.create 的 completion:mounted);
|
|
258
|
+
// 没有 seed 的恢复对象同样通知,不重复写值
|
|
259
|
+
useLayoutEffect(() => {
|
|
260
|
+
const seed = consumeCameraSeed(cameraKey);
|
|
261
|
+
const camObj = cameraObjRef.current;
|
|
262
|
+
if (seed && camObj) {
|
|
263
|
+
const studio = getStudioSync();
|
|
264
|
+
if (studio) {
|
|
265
|
+
const scrub = studio.scrub();
|
|
266
|
+
scrub.capture(({ set }) => {
|
|
267
|
+
set(camObj.props.position, seed.position);
|
|
268
|
+
set(camObj.props.rotation, seed.rotation);
|
|
269
|
+
});
|
|
270
|
+
scrub.commit();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// cameraObjRef 是稳定引用;子组件(editable)的 layout
|
|
274
|
+
// effect 先跑,到这里 objRef 已填好(Agent 登记也在那完成)
|
|
275
|
+
notifyCameraReady(cameraKey);
|
|
276
|
+
}, [cameraKey]);
|
|
277
|
+
// 卸载即清空 App 侧的对象引用:editable 只填不清,注册表移除相机后
|
|
278
|
+
// ref 若仍指向已删除的对象,播种/再删除等逻辑会读到失效数据。
|
|
279
|
+
// 同时按 id + 同一对象清 Agent 登记;挂载等待未兑现即卸载时拒绝,
|
|
280
|
+
// cameras.create 的等待方不悬挂(UI 路径无 waiter,no-op)
|
|
281
|
+
useEffect(() => () => {
|
|
282
|
+
const prev = cameraObjRef.current;
|
|
283
|
+
cameraObjRef.current = undefined;
|
|
284
|
+
unregisterSceneSheetObject(formatSceneObjectId('camera', cameraKey), prev);
|
|
285
|
+
rejectCameraMount(cameraKey, new Error(`相机挂载未完成即卸载: ${cameraKey}`));
|
|
286
|
+
}, [cameraObjRef, cameraKey]);
|
|
287
|
+
// 驱动锁(对齐 Blender 的约束语义):机位被路径接管期间,
|
|
288
|
+
// 相机拖了也不生效,干脆不登记选中 gizmo——箭头和 G 抓取
|
|
289
|
+
// 都不出现,从源头消灭"拖了没反应、数据还悄悄岔开"的假动作。
|
|
290
|
+
// 空路径驱动自动回退手动,不锁
|
|
291
|
+
const sheet = useCurrentSheet();
|
|
292
|
+
// 「绑定路径」下拉的选项函数在面板渲染时调用(非 React 上下文),
|
|
293
|
+
// 把当前 sheet 喂给模块级 pathBindingOptions
|
|
294
|
+
useEffect(() => {
|
|
295
|
+
dropdownSheet = sheet;
|
|
296
|
+
}, [sheet]);
|
|
297
|
+
// 绑定解析:pathKey 非空且在册 = 绑定生效;进度仍在路径对象上(共享进度)
|
|
298
|
+
const paths = usePathsList(sheet);
|
|
299
|
+
const registeredKeys = useMemo(() => paths.map((e) => e.pathKey), [paths]);
|
|
300
|
+
const camPathKey = useObjPropScalar(cameraObjRef, 'pathKey', '');
|
|
301
|
+
const boundKey = resolveBoundPathKey(camPathKey, registeredKeys);
|
|
302
|
+
// boundKey 为 null 时用 '' 探测(getObject('') 恒不存在,不创建)
|
|
303
|
+
const boundPathExists = usePathExists(sheet, boundKey ?? '');
|
|
304
|
+
const boundHasPoints = usePathHasPoints(sheet, boundKey ?? '');
|
|
305
|
+
// getPathMeta 会顺手创建不存在的对象,只有探测到存在才取
|
|
306
|
+
const boundMeta = useMemo(() => (boundKey && boundPathExists ? getPathMeta(sheet, boundKey) : null), [sheet, boundKey, boundPathExists]);
|
|
307
|
+
const camDriveLocked = boundKey !== null && boundHasPoints;
|
|
308
|
+
// 帧驱动的机位镜像:useFrame 每次把相机驱动到路径点时就同步一份到
|
|
309
|
+
// 这里。看护/解绑的"定格当前机位"读它,而不是去读 THREE 相机本体
|
|
310
|
+
const drivenPosRef = useRef(new Vector3());
|
|
311
|
+
const drivenPosValidRef = useRef(false);
|
|
312
|
+
// 换绑到另一条路径后,旧路径攒下的镜像作废,等下一次帧驱动写入——
|
|
313
|
+
// 不然换绑瞬间路径被对端删掉,定格会拿上一条路径的旧机位(复审 minor)。
|
|
314
|
+
// 只在换绑/绑定时作废:失效(boundKey→null)时看护紧接着就要读它定格
|
|
315
|
+
useEffect(() => {
|
|
316
|
+
if (boundKey !== null)
|
|
317
|
+
drivenPosValidRef.current = false;
|
|
318
|
+
}, [boundKey]);
|
|
319
|
+
// 解绑/失效统一看护:boundKey 由有变无(下拉选「手动」、绑定路径被删)
|
|
320
|
+
// → 过期 position 属性马上会被包装器重应用,相机跳回绑定前位置——
|
|
321
|
+
// 先把当前驱动机位定格进 position(对齐 Blender:约束解除,物体保持
|
|
322
|
+
// 当前变换),同时清掉 pathKey(失效时可能留着已删路径的死 key)。
|
|
323
|
+
// 本地路径删除已在 removePathFromRegistry 的同一个 scrub 里定格+清
|
|
324
|
+
// 绑定(App 的 removePath),这里检测到无需再写就直接跳过,不产生
|
|
325
|
+
// 多余撤销步。空路径(没控制点)不算失效,维持绑定。
|
|
326
|
+
// 定格取 drivenPosRef(帧驱动每帧镜像的驱动机位),不读 cam.position:
|
|
327
|
+
// 解绑引发的 theatre 值变化可能已让包装器重应用过期属性、或组件
|
|
328
|
+
// 重挂载出了新相机,此刻 cam.position 不一定是画面机位(实测竞态:
|
|
329
|
+
// 同一删除两次运行一次定格一次跳变)
|
|
330
|
+
const prevBoundKeyRef = useRef(null);
|
|
331
|
+
useEffect(() => {
|
|
332
|
+
const prev = prevBoundKeyRef.current;
|
|
333
|
+
prevBoundKeyRef.current = boundKey;
|
|
334
|
+
if (prev === null || boundKey !== null)
|
|
335
|
+
return;
|
|
336
|
+
const obj = cameraObjRef.current;
|
|
337
|
+
const studio = getStudioSync();
|
|
338
|
+
if (!obj || !studio)
|
|
339
|
+
return;
|
|
340
|
+
const frozen = drivenPosValidRef.current
|
|
341
|
+
? drivenPosRef.current
|
|
342
|
+
: camRef.current?.position;
|
|
343
|
+
const cur = val(obj.props.position);
|
|
344
|
+
const pathKey = val(obj.props.pathKey) ?? '';
|
|
345
|
+
const alreadyFrozen = !!frozen &&
|
|
346
|
+
!!cur &&
|
|
347
|
+
cur.x === frozen.x &&
|
|
348
|
+
cur.y === frozen.y &&
|
|
349
|
+
cur.z === frozen.z;
|
|
350
|
+
if (alreadyFrozen && pathKey === '')
|
|
351
|
+
return;
|
|
352
|
+
const scrub = studio.scrub();
|
|
353
|
+
scrub.capture(({ set }) => {
|
|
354
|
+
if (frozen && !alreadyFrozen)
|
|
355
|
+
set(obj.props.position, { x: frozen.x, y: frozen.y, z: frozen.z });
|
|
356
|
+
if (pathKey !== '')
|
|
357
|
+
set(obj.props.pathKey, '');
|
|
358
|
+
});
|
|
359
|
+
scrub.commit();
|
|
360
|
+
}, [boundKey, cameraObjRef]);
|
|
361
|
+
// 朝向绑定:aimTarget 下拉选目标(对齐 Blender Track To 的目标槽)。
|
|
362
|
+
// tracking = 目标存在且可解析;目标被删/选「无」→ 定格当前朝向进
|
|
363
|
+
// rotation 属性,画面不跳(对齐 Blender 约束失效)
|
|
364
|
+
const aimTargetId = useObjPropScalar(cameraObjRef, 'aimTarget', '');
|
|
365
|
+
const aimObj = aimTargetId ? resolveAimTarget(aimTargetId) : null;
|
|
366
|
+
const tracking = aimObj !== null;
|
|
367
|
+
// 目标登记表变更订阅:四条登记路径——独立锚点(registerAnchorObject)、
|
|
368
|
+
// 拍摄相机(registerShotCameraObject)、骨骼锚点(registerBoneAnchors/
|
|
369
|
+
// unregisterBoneAnchors)、放置实例(registerPlacedInstance/
|
|
370
|
+
// unregisterPlacedInstance)——写表后都经 notifyTargetRegistryChange
|
|
371
|
+
// 广播:持久态 aimTarget 指向的目标在目标挂载登记/注销的瞬间,tracking
|
|
372
|
+
// (渲染期解析)立即翻正,不等到无关重渲染;目标被删同理即时触发下面
|
|
373
|
+
// 的定格看护(规格§4 回退自由朝向)
|
|
374
|
+
const [, bumpTargetRegistry] = useState(0);
|
|
375
|
+
useEffect(() => subscribeTargetRegistry(() => bumpTargetRegistry((n) => n + 1)), []);
|
|
376
|
+
const prevTrackingRef = useRef(null);
|
|
377
|
+
const capturePosTmp = useRef(new Vector3());
|
|
378
|
+
useEffect(() => {
|
|
379
|
+
const prev = prevTrackingRef.current;
|
|
380
|
+
prevTrackingRef.current = tracking;
|
|
381
|
+
// prev=null 是挂载首次跑(持久态恢复):rotation 本来就是对的,跳过
|
|
382
|
+
if (prev !== true || tracking)
|
|
383
|
+
return;
|
|
384
|
+
const cam = camRef.current;
|
|
385
|
+
const obj = cameraObjRef.current;
|
|
386
|
+
const studio = getStudioSync();
|
|
387
|
+
if (!cam || !obj || !studio)
|
|
388
|
+
return;
|
|
389
|
+
// 此刻包装器刚全量应用过属性、帧驱动还没跑:机位被路径接管时
|
|
390
|
+
// cam.position 是过期的 position 属性值,不是画面里的真实机位——
|
|
391
|
+
// 真实机位用路径采样重算;瞄准方向读 aimRef(每帧镜像目标位置,
|
|
392
|
+
// 此刻存的是最后画面里的目标位置)
|
|
393
|
+
const sampled = capturePosTmp.current;
|
|
394
|
+
const from = boundMeta &&
|
|
395
|
+
samplePathPoint(boundKey, val(boundMeta.props.progress), sampled)
|
|
396
|
+
? sampled
|
|
397
|
+
: cam.position;
|
|
398
|
+
const m = new Matrix4().lookAt(from, aimRef.current.position, cam.up);
|
|
399
|
+
const e = new Euler().setFromRotationMatrix(m, 'XYZ');
|
|
400
|
+
// 同值守卫(与解绑定格的 alreadyFrozen 同款):cameras.setAimTarget
|
|
401
|
+
// 命令解除瞄准时已把朝向定格折进写 aimTarget 的同一事务,持久值==
|
|
402
|
+
// 此处换算结果,原样重写会多出一个同值撤销步骤(撤销陷阱)——跳过提交
|
|
403
|
+
const persisted = val(obj.props.rotation);
|
|
404
|
+
const sameRotation = !!persisted &&
|
|
405
|
+
Math.abs(persisted.x - e.x) < 1e-6 &&
|
|
406
|
+
Math.abs(persisted.y - e.y) < 1e-6 &&
|
|
407
|
+
Math.abs(persisted.z - e.z) < 1e-6;
|
|
408
|
+
if (sameRotation)
|
|
409
|
+
return;
|
|
410
|
+
const scrub = studio.scrub();
|
|
411
|
+
scrub.capture(({ set }) => set(obj.props.rotation, { x: e.x, y: e.y, z: e.z }));
|
|
412
|
+
scrub.commit();
|
|
413
|
+
}, [tracking, cameraObjRef, boundKey, boundMeta]);
|
|
414
|
+
// 选中后挂三轴移动箭头:摄像机本体可拖(机位被路径接管时
|
|
415
|
+
// 相机除外,见上)。视锥有自己的选中高亮(整套变橙),不再画包围盒
|
|
416
|
+
useSelectionGizmoTarget(cameraObjRef, camRef, !camDriveLocked, {
|
|
417
|
+
boxHighlight: false,
|
|
418
|
+
});
|
|
419
|
+
// 运镜驱动(优先级 -1,赶在 wrapper 的 lookAt 之前):
|
|
420
|
+
// 机位路径非空且 moveMode=path → 机位取路径上行进进度处。
|
|
421
|
+
// 瞄准目标可解析时每帧把它的世界位置写进代理;目标为空时
|
|
422
|
+
// 自动回退手动朝向(rotation 属性),不会出现"相机消失"
|
|
423
|
+
const pathSampleTmp = useRef(new Vector3());
|
|
424
|
+
useFrame(() => {
|
|
425
|
+
const cam = camRef.current;
|
|
426
|
+
const camObj = cameraObjRef.current;
|
|
427
|
+
if (!cam || !camObj)
|
|
428
|
+
return;
|
|
429
|
+
const tmp = pathSampleTmp.current;
|
|
430
|
+
if (boundMeta &&
|
|
431
|
+
samplePathPoint(boundKey, val(boundMeta.props.progress), tmp)) {
|
|
432
|
+
cam.position.copy(tmp);
|
|
433
|
+
drivenPosRef.current.copy(tmp);
|
|
434
|
+
drivenPosValidRef.current = true;
|
|
435
|
+
}
|
|
436
|
+
// useFrame 回调里读外层渲染作用域的 aimTargetId——它在帧间变化会
|
|
437
|
+
// 触发重渲染,闭包是新的,安全
|
|
438
|
+
const aimObj = aimTargetId ? resolveAimTarget(aimTargetId) : null;
|
|
439
|
+
if (aimObj)
|
|
440
|
+
aimObj.getWorldPosition(aimRef.current.position);
|
|
441
|
+
}, -1);
|
|
442
|
+
// 视锥线/显示面只在编辑视角出现;镜头视角全屏时人已经在镜头里,直接藏
|
|
443
|
+
useEffect(() => registerEditorOnly(frustum), [frustum]);
|
|
444
|
+
useEffect(() => registerEditorOnly(frustumFill), [frustumFill]);
|
|
445
|
+
useEffect(() => registerEditorOnly(upTriangle), [upTriangle]);
|
|
446
|
+
useEffect(() => {
|
|
447
|
+
frustum.visible = !shotView;
|
|
448
|
+
frustumFill.visible = !shotView;
|
|
449
|
+
upTriangle.visible = !shotView;
|
|
450
|
+
}, [shotView, frustum, frustumFill, upTriangle]);
|
|
451
|
+
// 选中高亮:视锥三件套整套换橙色,对齐锚点色与 Blender 选中惯例。
|
|
452
|
+
// studio 选中变化驱动(值不变 setState 自动跳过,无关切换不重渲染);
|
|
453
|
+
// demand 帧模式下换色不重画,手动 invalidate 补一帧
|
|
454
|
+
const [selected, setSelected] = useState(false);
|
|
455
|
+
useEffect(() => {
|
|
456
|
+
const studio = getStudioSync();
|
|
457
|
+
if (!studio)
|
|
458
|
+
return;
|
|
459
|
+
const sync = () => setSelected(studio.selection.includes(cameraObjRef.current));
|
|
460
|
+
sync();
|
|
461
|
+
return studio.onSelectionChange(sync);
|
|
462
|
+
}, [cameraObjRef]);
|
|
463
|
+
useEffect(() => {
|
|
464
|
+
const color = selected ? FRUSTUM_HIGHLIGHT : FRUSTUM_COLOR;
|
|
465
|
+
frustum.material.color.set(color);
|
|
466
|
+
frustumFill.material.color.set(color);
|
|
467
|
+
upTriangle.material.color.set(color);
|
|
468
|
+
invalidate();
|
|
469
|
+
}, [selected, frustum, frustumFill, upTriangle]);
|
|
470
|
+
useFrame(() => {
|
|
471
|
+
if (camRef.current && frustum.visible) {
|
|
472
|
+
updateFrustum(frustum, frustumFill, upTriangle, camRef.current);
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
// 调试/自动化验证挂钩:浏览器里直接读 three 相机本体(只写活动相机的)
|
|
476
|
+
useEffect(() => {
|
|
477
|
+
if (isActive)
|
|
478
|
+
window.__shotCam3 = camRef.current;
|
|
479
|
+
}, [isActive]);
|
|
480
|
+
// 点视锥线 = 选中摄像机
|
|
481
|
+
const select = (objRef) => (event) => {
|
|
482
|
+
event.stopPropagation();
|
|
483
|
+
const studio = getStudioSync();
|
|
484
|
+
if (studio && objRef.current) {
|
|
485
|
+
studio.setSelection([objRef.current]);
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
// 右键相机 = 选中 + 弹出相机菜单
|
|
489
|
+
const contextMenu = (objRef) => (event) => {
|
|
490
|
+
if (!onCameraContextMenu)
|
|
491
|
+
return;
|
|
492
|
+
event.stopPropagation();
|
|
493
|
+
event.nativeEvent.preventDefault();
|
|
494
|
+
const studio = getStudioSync();
|
|
495
|
+
if (studio && objRef.current) {
|
|
496
|
+
studio.setSelection([objRef.current]);
|
|
497
|
+
}
|
|
498
|
+
onCameraContextMenu(event.nativeEvent.clientX, event.nativeEvent.clientY);
|
|
499
|
+
};
|
|
500
|
+
return (React.createElement(React.Fragment, null,
|
|
501
|
+
React.createElement(PerspectiveCamera, { theatreKey: cameraKey, objRef: setCameraObjRef, ref: camRef, makeDefault: makeDefault, manual: true, position: [8, 3, 8], fov: 50, near: 0.1, far: 60, lookAt: tracking ? aimRef : undefined, additionalProps: shotCameraAdditionalProps },
|
|
502
|
+
React.createElement("primitive", { object: frustum, onClick: select(cameraObjRef), onContextMenu: contextMenu(cameraObjRef) }),
|
|
503
|
+
React.createElement("primitive", { object: frustumFill, onClick: select(cameraObjRef), onContextMenu: contextMenu(cameraObjRef) }),
|
|
504
|
+
React.createElement("primitive", { object: upTriangle, onClick: select(cameraObjRef), onContextMenu: contextMenu(cameraObjRef) })),
|
|
505
|
+
isActive && (React.createElement(ShotCameraRenderer, { camRef: camRef, pip: !makeDefault, pipVisible: pipVisible, pipBottom: pipBottom }))));
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* 渲染镜头取景:编辑视角时叠到右下角画中画,镜头视角时全屏。
|
|
509
|
+
* useFrame 优先级 2,必须高于 drei Hud(GizmoNav 导航块)的 1——
|
|
510
|
+
* Hud 每帧先全屏重画默认场景,同优先级或更低的内容都会被它盖掉;
|
|
511
|
+
* 主视角因此交给 Hud 画,这里只画小窗/全屏取景,互不覆盖。
|
|
512
|
+
* frameloop="demand" 的按需语义不变(本组件不额外要帧)。
|
|
513
|
+
*/
|
|
514
|
+
function ShotCameraRenderer({ camRef, pip, pipVisible, pipBottom, }) {
|
|
515
|
+
// frameloop="demand":切换镜头视角/画中画只是 React 状态变化,
|
|
516
|
+
// 不触发新帧的话画布上会留着上一帧(全屏取景的右下角)当"画中画"
|
|
517
|
+
const invalidate = useThree((s) => s.invalidate);
|
|
518
|
+
useEffect(() => {
|
|
519
|
+
// 开关切换也要 invalidate:关掉时触发一帧重画,把残留在画面角落的
|
|
520
|
+
// 最后一帧小窗清掉(demand 模式下不会自动重画)
|
|
521
|
+
invalidate();
|
|
522
|
+
}, [pip, pipVisible, invalidate]);
|
|
523
|
+
// 渲染分工(踩过的坑,别改回自己画主视角):
|
|
524
|
+
// drei Hud(GizmoNav 的导航块)的 useFrame 以优先级 1 每帧先全屏画
|
|
525
|
+
// 默认场景再叠导航块——它会把同优先级先画的任何内容整个覆盖掉,
|
|
526
|
+
// 画中画就是这么被冲成主视角画面的。所以这里:
|
|
527
|
+
// 编辑视角:主视角交给 Hud 画,本回调只以优先级 2 把镜头取景
|
|
528
|
+
// 叠到右下角小窗(剪刀限定,不碰导航块);
|
|
529
|
+
// 镜头视角:GizmoNav 已卸载,没有 Hud,本回调全屏画镜头取景。
|
|
530
|
+
useFrame(({ gl, scene, size }) => {
|
|
531
|
+
const shotCam = camRef.current;
|
|
532
|
+
if (!shotCam)
|
|
533
|
+
return;
|
|
534
|
+
const w = size.width;
|
|
535
|
+
const h = size.height;
|
|
536
|
+
if (!pip) {
|
|
537
|
+
// 镜头视角:全屏取景(wrapper 传了 manual,aspect 归这里管)
|
|
538
|
+
shotCam.aspect = w / h;
|
|
539
|
+
shotCam.updateProjectionMatrix();
|
|
540
|
+
gl.render(scene, shotCam);
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
// 画中画被顶栏开关关掉了:这一帧不叠小窗(镜头全屏视角不受开关管)
|
|
544
|
+
if (!pipVisible)
|
|
545
|
+
return;
|
|
546
|
+
const pipW = Math.round(w * PIP_WIDTH_FRACTION);
|
|
547
|
+
const pipH = Math.round((pipW * 9) / 16);
|
|
548
|
+
const x = w - pipW - PIP_MARGIN_PX;
|
|
549
|
+
// gl viewport 原点在左下角;底部留白与 DOM 边框层同源(悬在时间轴上方)
|
|
550
|
+
const y = pipBottom;
|
|
551
|
+
withEditorOnlyHidden(() => {
|
|
552
|
+
shotCam.aspect = pipW / pipH;
|
|
553
|
+
shotCam.updateProjectionMatrix();
|
|
554
|
+
// setViewport/setScissor 接收 CSS 像素,three 内部会自己乘 pixelRatio,
|
|
555
|
+
// 这里再乘一遍 dpr 矩形会被推到画布外(踩过这个坑)
|
|
556
|
+
gl.setViewport(x, y, pipW, pipH);
|
|
557
|
+
gl.setScissor(x, y, pipW, pipH);
|
|
558
|
+
gl.setScissorTest(true);
|
|
559
|
+
// autoClear 保持 true:剪刀会把清屏裁到小窗内,颜色和深度都清。
|
|
560
|
+
// 不关 autoClear 的话,主视角的深度值留在小窗区域,
|
|
561
|
+
// 会把小窗里的片元深度测试杀掉(踩过:画面只剩零星碎屑)
|
|
562
|
+
gl.render(scene, shotCam);
|
|
563
|
+
gl.setScissorTest(false);
|
|
564
|
+
gl.setViewport(0, 0, w, h);
|
|
565
|
+
});
|
|
566
|
+
}, 2);
|
|
567
|
+
return null;
|
|
568
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 顶栏工具条:三组连体按钮,组间留空——
|
|
3
|
+
* [选择|移动|旋转|缩放] 变换模式(互斥单选,和 W/G/R/S 快捷键、对象
|
|
4
|
+
* 右键菜单共用 useGizmoMode 的 state;选择模式下只点选不挂手柄;
|
|
5
|
+
* 无选中对象时也可先设好模式)
|
|
6
|
+
* [添加模型|添加路径|添加相机|添加锚点] 各弹各的框体
|
|
7
|
+
* [画中画|导出视频] 输出
|
|
8
|
+
* 姿势/动作绑定具体物体,入口在右键模型的菜单里;物体的属性设置在各自
|
|
9
|
+
* 面板(见 docs/superpowers/specs/2026-09-12-asset-library-split-design.md)。
|
|
10
|
+
*
|
|
11
|
+
* 外观 = studio 原生工具条:连体容器(ToolbarSwitchSelectContainer)+
|
|
12
|
+
* 图标按钮(ToolbarIconButton),图标+hover tooltip。chordial 挂在 studio
|
|
13
|
+
* 的 shadow DOM 里(这里用不了),tooltip 是自实现的,样式照抄 BasicTooltip。
|
|
14
|
+
* 图标全部来自 @phosphor-icons/react(studio 图标包本来就是 phosphor
|
|
15
|
+
* 手移植,这里直接用库,风格天然一致)。
|
|
16
|
+
* --theatre-* 令牌定义在 studio 的 :host(shadow DOM),主文档不可见,
|
|
17
|
+
* 一律带同值兜底——令牌将来全局化时自动接管。
|
|
18
|
+
*/
|
|
19
|
+
import React from 'react';
|
|
20
|
+
import type { ExportSink } from './videoExport/sinks';
|
|
21
|
+
import type { GizmoMode } from './PlacementManager';
|
|
22
|
+
export declare function TopToolbar({ gizmoMode, onSelectGizmoMode, onToggleModelLibrary, onTogglePathLibrary, onAddCamera, onAddAnchor, exportSinks, exporting, exportDisabled, onPickExportSink, onStopExport, pipVisible, onTogglePip, pipDisabled, libraryDisabled, }: {
|
|
23
|
+
/** 变换模式组的当前模式,与 G/R/S 快捷键、对象右键菜单同源 */
|
|
24
|
+
gizmoMode: GizmoMode;
|
|
25
|
+
onSelectGizmoMode: (mode: GizmoMode) => void;
|
|
26
|
+
onToggleModelLibrary: () => void;
|
|
27
|
+
onTogglePathLibrary: () => void;
|
|
28
|
+
onAddCamera: () => void;
|
|
29
|
+
onAddAnchor: () => void;
|
|
30
|
+
exportSinks: readonly ExportSink[];
|
|
31
|
+
exporting: boolean;
|
|
32
|
+
exportDisabled: boolean;
|
|
33
|
+
onPickExportSink: (sink: ExportSink) => void;
|
|
34
|
+
onStopExport: () => void;
|
|
35
|
+
/** 画中画开关:开时按钮带高亮(和小窗边框同色) */
|
|
36
|
+
pipVisible: boolean;
|
|
37
|
+
onTogglePip: () => void;
|
|
38
|
+
/** 没有活动相机时置灰(小窗本来也不存在) */
|
|
39
|
+
pipDisabled?: boolean;
|
|
40
|
+
/** 放置中/拖拽中禁用添加入口,避免再开一次放置流程 */
|
|
41
|
+
libraryDisabled?: boolean;
|
|
42
|
+
}): React.JSX.Element;
|
|
43
|
+
//# sourceMappingURL=TopToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopToolbar.d.ts","sourceRoot":"","sources":["../src/TopToolbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAA4B,MAAM,OAAO,CAAA;AAoBhD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAA;AA+HjD,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAmB,EACnB,eAAuB,GACxB,EAAE;IACD,sCAAsC;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IAC5C,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,OAAO,CAAA;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IAC5C,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,6BAA6B;IAC7B,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,qBA8GA"}
|