@babylonjs/inspector 8.28.3 → 8.29.0-preview

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.
@@ -0,0 +1,184 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { B as ButtonLine, c as SyncedSliderPropertyLine, b as SwitchPropertyLine, C as Collapse, T as ToolsServiceIdentity } from './index-Bt4ndVv5.js';
3
+ import { useState, useRef, useCallback } from 'react';
4
+ import { Tools } from '@babylonjs/core/Misc/tools.js';
5
+ import { VideoRecorder } from '@babylonjs/core/Misc/videoRecorder.js';
6
+ import { captureEquirectangularFromScene } from '@babylonjs/core/Misc/equirectangularCapture.js';
7
+ import { CameraRegular, RecordStopRegular, RecordRegular } from '@fluentui/react-icons';
8
+ import { FrameGraphUtils } from '@babylonjs/core/FrameGraph/frameGraphUtils.js';
9
+ import '@babylonjs/core/Maths/math.color.js';
10
+ import '@babylonjs/core/Maths/math.vector.js';
11
+ import '@babylonjs/core/Misc/observable.js';
12
+ import '@fluentui/react-components';
13
+ import '@fluentui/react-motion-components-preview';
14
+ import '@babylonjs/core/Misc/typeStore.js';
15
+ import 'usehooks-ts';
16
+ import '@babylonjs/core/Misc/asyncLock.js';
17
+ import '@babylonjs/core/Misc/deferred.js';
18
+ import '@fluentui-contrib/react-virtualizer';
19
+ import '@babylonjs/addons/msdfText/fontAsset.js';
20
+ import '@babylonjs/addons/msdfText/textRenderer.js';
21
+ import '@babylonjs/core/Debug/physicsViewer.js';
22
+ import '@babylonjs/core/Materials/Textures/texture.js';
23
+ import '@babylonjs/core/Materials/materialFlags.js';
24
+ import '@babylonjs/core/Materials/standardMaterial.js';
25
+ import '@babylonjs/core/Meshes/Builders/groundBuilder.js';
26
+ import '@babylonjs/core/Rendering/utilityLayerRenderer.js';
27
+ import '@babylonjs/materials/grid/gridMaterial.js';
28
+ import '@babylonjs/core/Misc/dataStorage.js';
29
+ import '@babylonjs/core/Instrumentation/engineInstrumentation.js';
30
+ import '@babylonjs/core/Instrumentation/sceneInstrumentation.js';
31
+ import '@babylonjs/core/Engines/AbstractEngine/abstractEngine.timeQuery.js';
32
+ import '@babylonjs/core/Engines/Extensions/engine.query.js';
33
+ import '@babylonjs/core/Engines/WebGPU/Extensions/engine.query.js';
34
+ import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js';
35
+ import '@babylonjs/core/Misc/pressureObserverWrapper.js';
36
+ import '@babylonjs/core/Engines/abstractEngine.js';
37
+ import '@babylonjs/core/Engines/engineStore.js';
38
+ import 'react-dom/client';
39
+ import '@babylonjs/core/Misc/logger.js';
40
+ import '@babylonjs/core/Gizmos/cameraGizmo.js';
41
+ import '@babylonjs/core/Gizmos/lightGizmo.js';
42
+ import '@babylonjs/core/Bones/bone.js';
43
+ import '@babylonjs/core/Cameras/camera.js';
44
+ import '@babylonjs/core/Gizmos/gizmoManager.js';
45
+ import '@babylonjs/core/Lights/light.js';
46
+ import '@babylonjs/core/Meshes/abstractMesh.js';
47
+ import '@babylonjs/core/node.js';
48
+ import '@babylonjs/core/Animations/animationGroup.js';
49
+ import '@babylonjs/core/Animations/animationPropertiesOverride.js';
50
+ import '@babylonjs/core/Cameras/arcRotateCamera.js';
51
+ import '@babylonjs/core/Cameras/followCamera.js';
52
+ import '@babylonjs/core/Cameras/freeCamera.js';
53
+ import '@babylonjs/core/Cameras/targetCamera.js';
54
+ import '@babylonjs/core/scene.js';
55
+ import '@babylonjs/core/FrameGraph/frameGraph.js';
56
+ import '@babylonjs/core/Lights/directionalLight.js';
57
+ import '@babylonjs/core/Lights/hemisphericLight.js';
58
+ import '@babylonjs/core/Lights/pointLight.js';
59
+ import '@babylonjs/core/Lights/rectAreaLight.js';
60
+ import '@babylonjs/core/Lights/shadowLight.js';
61
+ import '@babylonjs/core/Lights/spotLight.js';
62
+ import '@babylonjs/core/Lights/Shadows/cascadedShadowGenerator.js';
63
+ import '@babylonjs/core/Lights/Shadows/shadowGenerator.js';
64
+ import '@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js';
65
+ import '@babylonjs/core/Materials/material.js';
66
+ import '@babylonjs/core/Materials/multiMaterial.js';
67
+ import '@babylonjs/core/Materials/PBR/pbrBaseMaterial.js';
68
+ import '@babylonjs/core/Materials/PBR/pbrBaseSimpleMaterial.js';
69
+ import '@babylonjs/core/Materials/PBR/pbrMaterial.js';
70
+ import '@babylonjs/materials/sky/skyMaterial.js';
71
+ import '@babylonjs/core/Engines/engine.js';
72
+ import '@babylonjs/core/Engines/constants.js';
73
+ import '@babylonjs/core/Particles/particleSystem.js';
74
+ import '@babylonjs/core/Misc/fileTools.js';
75
+ import '@babylonjs/core/Meshes/mesh.js';
76
+ import '@babylonjs/core/Debug/skeletonViewer.js';
77
+ import '@babylonjs/core/Meshes/buffer.js';
78
+ import '@babylonjs/core/Meshes/Builders/linesBuilder.js';
79
+ import '@babylonjs/core/Meshes/instancedMesh.js';
80
+ import '@babylonjs/core/Rendering/renderingManager.js';
81
+ import '@babylonjs/core/Rendering/edgesRenderer.js';
82
+ import '@babylonjs/core/Rendering/outlineRenderer.js';
83
+ import '@babylonjs/core/Misc/gradients.js';
84
+ import '@babylonjs/core/Materials/Node/Blocks/gradientBlock.js';
85
+ import '@babylonjs/core/Particles/attractor.js';
86
+ import '@babylonjs/core/Meshes/Builders/sphereBuilder.js';
87
+ import '@babylonjs/core/Meshes/transformNode.js';
88
+ import '@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js';
89
+ import '@babylonjs/core/Physics/v2/physicsEngineComponent.js';
90
+ import '@babylonjs/core/PostProcesses/postProcess.js';
91
+ import '@babylonjs/core/Materials/Textures/cubeTexture.js';
92
+ import '@babylonjs/core/Materials/imageProcessingConfiguration.js';
93
+ import '@babylonjs/core/Bones/skeleton.js';
94
+ import '@babylonjs/core/Sprites/sprite.js';
95
+ import '@babylonjs/core/Materials/Textures/baseTexture.js';
96
+ import '@babylonjs/core/Materials/Textures/multiRenderTarget.js';
97
+ import '@babylonjs/core/Materials/Textures/renderTargetTexture.js';
98
+ import '@babylonjs/core/Materials/Textures/thinTexture.js';
99
+ import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js';
100
+ import '@babylonjs/core/Sprites/spriteSceneComponent.js';
101
+ import '@babylonjs/core/Materials/Textures/dynamicTexture.js';
102
+ import '@babylonjs/core/Events/pointerEvents.js';
103
+ import '@babylonjs/addons/atmosphere/atmosphere.js';
104
+
105
+ const CaptureRttTools = ({ scene }) => {
106
+ const [useWidthHeight, setUseWidthHeight] = useState(false);
107
+ const [screenshotSize, setScreenshotSize] = useState({ precision: 1 });
108
+ const captureRender = useCallback(async () => {
109
+ const sizeToUse = { ...screenshotSize };
110
+ if (!useWidthHeight) {
111
+ sizeToUse.width = undefined;
112
+ sizeToUse.height = undefined;
113
+ }
114
+ if (scene.activeCamera) {
115
+ Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);
116
+ }
117
+ }, [scene, screenshotSize, useWidthHeight]);
118
+ return (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Capture", icon: CameraRegular, onClick: captureRender }), jsx(SyncedSliderPropertyLine, { label: "Precision", value: screenshotSize.precision ?? 1, onChange: (value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 }), min: 0.1, max: 10, step: 0.1 }), jsx(SwitchPropertyLine, { label: "Use Custom Width/Height", value: useWidthHeight, onChange: (value) => setUseWidthHeight(value) }), jsxs(Collapse, { visible: useWidthHeight, children: [jsx(SyncedSliderPropertyLine, { label: "Width", value: screenshotSize.width ?? 512, onChange: (data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 }), min: 1, step: 1 }), jsx(SyncedSliderPropertyLine, { label: "Height", value: screenshotSize.height ?? 512, onChange: (data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 }), min: 1, step: 1 })] })] }));
119
+ };
120
+ const CaptureScreenshotTools = ({ scene }) => {
121
+ const [isRecording, setIsRecording] = useState(false);
122
+ const videoRecorder = useRef();
123
+ const captureScreenshot = useCallback(() => {
124
+ const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;
125
+ if (camera) {
126
+ Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });
127
+ }
128
+ }, [scene]);
129
+ const captureEquirectangularAsync = useCallback(async () => {
130
+ const currentActiveCamera = scene.activeCamera;
131
+ if (!currentActiveCamera && scene.frameGraph) {
132
+ scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);
133
+ }
134
+ if (scene.activeCamera) {
135
+ await captureEquirectangularFromScene(scene, { size: 1024, filename: "equirectangular_capture.png" });
136
+ }
137
+ // eslint-disable-next-line require-atomic-updates
138
+ scene.activeCamera = currentActiveCamera;
139
+ }, [scene]);
140
+ const recordVideoAsync = useCallback(async () => {
141
+ if (videoRecorder.current && videoRecorder.current.isRecording) {
142
+ videoRecorder.current.stopRecording();
143
+ setIsRecording(false);
144
+ return;
145
+ }
146
+ if (!videoRecorder.current) {
147
+ videoRecorder.current = new VideoRecorder(scene.getEngine());
148
+ }
149
+ void videoRecorder.current.startRecording();
150
+ setIsRecording(true);
151
+ }, [scene]);
152
+ return (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Capture", icon: CameraRegular, onClick: captureScreenshot }), jsx(ButtonLine, { label: "Capture Equirectangular", icon: CameraRegular, onClick: captureEquirectangularAsync }), jsx(ButtonLine, { label: isRecording ? "Stop Recording" : "Record Video", icon: isRecording ? RecordStopRegular : RecordRegular, onClick: recordVideoAsync })] }));
153
+ };
154
+
155
+ const CaptureServiceDefinition = {
156
+ friendlyName: "Capture Tools",
157
+ consumes: [ToolsServiceIdentity],
158
+ factory: (toolsService) => {
159
+ const contentRegistrations = [];
160
+ // Screenshot capture content
161
+ contentRegistrations.push(toolsService.addSectionContent({
162
+ key: "Screenshot Capture",
163
+ section: "Screenshot Capture",
164
+ component: ({ context }) => jsx(CaptureScreenshotTools, { scene: context }),
165
+ }));
166
+ // RTT capture content
167
+ contentRegistrations.push(toolsService.addSectionContent({
168
+ key: "RTT Capture",
169
+ section: "RTT Capture",
170
+ component: ({ context }) => jsx(CaptureRttTools, { scene: context }),
171
+ }));
172
+ return {
173
+ dispose: () => {
174
+ contentRegistrations.forEach((registration) => registration.dispose());
175
+ },
176
+ };
177
+ },
178
+ };
179
+ var captureService = {
180
+ serviceDefinitions: [CaptureServiceDefinition],
181
+ };
182
+
183
+ export { CaptureServiceDefinition, captureService as default };
184
+ //# sourceMappingURL=captureService-wvKpBv07.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureService-wvKpBv07.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/captureTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/captureService.tsx"],"sourcesContent":["import { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useState, useRef, useCallback } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { IScreenshotSize } from \"core/Misc/interfaces/screenshotSize\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { VideoRecorder } from \"core/Misc/videoRecorder\";\r\nimport { captureEquirectangularFromScene } from \"core/Misc/equirectangularCapture\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { CameraRegular, RecordRegular, RecordStopRegular } from \"@fluentui/react-icons\";\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\n\r\nexport const CaptureRttTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [useWidthHeight, setUseWidthHeight] = useState(false);\r\n const [screenshotSize, setScreenshotSize] = useState<IScreenshotSize>({ precision: 1 });\r\n\r\n const captureRender = useCallback(async () => {\r\n const sizeToUse: IScreenshotSize = { ...screenshotSize };\r\n if (!useWidthHeight) {\r\n sizeToUse.width = undefined;\r\n sizeToUse.height = undefined;\r\n }\r\n\r\n if (scene.activeCamera) {\r\n Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);\r\n }\r\n }, [scene, screenshotSize, useWidthHeight]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureRender} />\r\n <SyncedSliderPropertyLine\r\n label=\"Precision\"\r\n value={screenshotSize.precision ?? 1}\r\n onChange={(value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 })}\r\n min={0.1}\r\n max={10}\r\n step={0.1}\r\n />\r\n <SwitchPropertyLine label=\"Use Custom Width/Height\" value={useWidthHeight} onChange={(value) => setUseWidthHeight(value)} />\r\n <Collapse visible={useWidthHeight}>\r\n <SyncedSliderPropertyLine\r\n label=\"Width\"\r\n value={screenshotSize.width ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Height\"\r\n value={screenshotSize.height ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const CaptureScreenshotTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [isRecording, setIsRecording] = useState(false);\r\n const videoRecorder = useRef<VideoRecorder>();\r\n\r\n const captureScreenshot = useCallback(() => {\r\n const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;\r\n if (camera) {\r\n Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });\r\n }\r\n }, [scene]);\r\n\r\n const captureEquirectangularAsync = useCallback(async () => {\r\n const currentActiveCamera = scene.activeCamera;\r\n if (!currentActiveCamera && scene.frameGraph) {\r\n scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);\r\n }\r\n if (scene.activeCamera) {\r\n await captureEquirectangularFromScene(scene, { size: 1024, filename: \"equirectangular_capture.png\" });\r\n }\r\n // eslint-disable-next-line require-atomic-updates\r\n scene.activeCamera = currentActiveCamera;\r\n }, [scene]);\r\n\r\n const recordVideoAsync = useCallback(async () => {\r\n if (videoRecorder.current && videoRecorder.current.isRecording) {\r\n videoRecorder.current.stopRecording();\r\n setIsRecording(false);\r\n return;\r\n }\r\n\r\n if (!videoRecorder.current) {\r\n videoRecorder.current = new VideoRecorder(scene.getEngine());\r\n }\r\n\r\n void videoRecorder.current.startRecording();\r\n setIsRecording(true);\r\n }, [scene]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureScreenshot} />\r\n <ButtonLine label=\"Capture Equirectangular\" icon={CameraRegular} onClick={captureEquirectangularAsync} />\r\n <ButtonLine label={isRecording ? \"Stop Recording\" : \"Record Video\"} icon={isRecording ? RecordStopRegular : RecordRegular} onClick={recordVideoAsync} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { CaptureRttTools, CaptureScreenshotTools } from \"../../../components/tools/captureTools\";\r\n\r\nexport const CaptureServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Capture Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // Screenshot capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Screenshot Capture\",\r\n section: \"Screenshot Capture\",\r\n component: ({ context }) => <CaptureScreenshotTools scene={context} />,\r\n })\r\n );\r\n\r\n // RTT capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"RTT Capture\",\r\n section: \"RTT Capture\",\r\n component: ({ context }) => <CaptureRttTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [CaptureServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
+ import { makeStyles, Accordion, AccordionItem, AccordionHeader, Text, AccordionPanel, Button, tokens } from '@fluentui/react-components';
3
+ import { S as ShellServiceIdentity, a as SceneContextIdentity, u as useObservableState } from './index-Bt4ndVv5.js';
4
+ import { FormNewRegular } from '@fluentui/react-icons';
5
+ import 'react';
6
+ import '@babylonjs/core/Maths/math.color.js';
7
+ import '@babylonjs/core/Maths/math.vector.js';
8
+ import '@babylonjs/core/Misc/observable.js';
9
+ import '@fluentui/react-motion-components-preview';
10
+ import '@babylonjs/core/Misc/typeStore.js';
11
+ import 'usehooks-ts';
12
+ import '@babylonjs/core/Misc/asyncLock.js';
13
+ import '@babylonjs/core/Misc/deferred.js';
14
+ import '@fluentui-contrib/react-virtualizer';
15
+ import '@babylonjs/addons/msdfText/fontAsset.js';
16
+ import '@babylonjs/addons/msdfText/textRenderer.js';
17
+ import '@babylonjs/core/Debug/physicsViewer.js';
18
+ import '@babylonjs/core/Materials/Textures/texture.js';
19
+ import '@babylonjs/core/Materials/materialFlags.js';
20
+ import '@babylonjs/core/Materials/standardMaterial.js';
21
+ import '@babylonjs/core/Meshes/Builders/groundBuilder.js';
22
+ import '@babylonjs/core/Misc/tools.js';
23
+ import '@babylonjs/core/Rendering/utilityLayerRenderer.js';
24
+ import '@babylonjs/materials/grid/gridMaterial.js';
25
+ import '@babylonjs/core/Misc/dataStorage.js';
26
+ import '@babylonjs/core/Instrumentation/engineInstrumentation.js';
27
+ import '@babylonjs/core/Instrumentation/sceneInstrumentation.js';
28
+ import '@babylonjs/core/Engines/AbstractEngine/abstractEngine.timeQuery.js';
29
+ import '@babylonjs/core/Engines/Extensions/engine.query.js';
30
+ import '@babylonjs/core/Engines/WebGPU/Extensions/engine.query.js';
31
+ import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js';
32
+ import '@babylonjs/core/Misc/pressureObserverWrapper.js';
33
+ import '@babylonjs/core/Engines/abstractEngine.js';
34
+ import '@babylonjs/core/Engines/engineStore.js';
35
+ import 'react-dom/client';
36
+ import '@babylonjs/core/Misc/logger.js';
37
+ import '@babylonjs/core/FrameGraph/frameGraphUtils.js';
38
+ import '@babylonjs/core/Gizmos/cameraGizmo.js';
39
+ import '@babylonjs/core/Gizmos/lightGizmo.js';
40
+ import '@babylonjs/core/Bones/bone.js';
41
+ import '@babylonjs/core/Cameras/camera.js';
42
+ import '@babylonjs/core/Gizmos/gizmoManager.js';
43
+ import '@babylonjs/core/Lights/light.js';
44
+ import '@babylonjs/core/Meshes/abstractMesh.js';
45
+ import '@babylonjs/core/node.js';
46
+ import '@babylonjs/core/Animations/animationGroup.js';
47
+ import '@babylonjs/core/Animations/animationPropertiesOverride.js';
48
+ import '@babylonjs/core/Cameras/arcRotateCamera.js';
49
+ import '@babylonjs/core/Cameras/followCamera.js';
50
+ import '@babylonjs/core/Cameras/freeCamera.js';
51
+ import '@babylonjs/core/Cameras/targetCamera.js';
52
+ import '@babylonjs/core/scene.js';
53
+ import '@babylonjs/core/FrameGraph/frameGraph.js';
54
+ import '@babylonjs/core/Lights/directionalLight.js';
55
+ import '@babylonjs/core/Lights/hemisphericLight.js';
56
+ import '@babylonjs/core/Lights/pointLight.js';
57
+ import '@babylonjs/core/Lights/rectAreaLight.js';
58
+ import '@babylonjs/core/Lights/shadowLight.js';
59
+ import '@babylonjs/core/Lights/spotLight.js';
60
+ import '@babylonjs/core/Lights/Shadows/cascadedShadowGenerator.js';
61
+ import '@babylonjs/core/Lights/Shadows/shadowGenerator.js';
62
+ import '@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js';
63
+ import '@babylonjs/core/Materials/material.js';
64
+ import '@babylonjs/core/Materials/multiMaterial.js';
65
+ import '@babylonjs/core/Materials/PBR/pbrBaseMaterial.js';
66
+ import '@babylonjs/core/Materials/PBR/pbrBaseSimpleMaterial.js';
67
+ import '@babylonjs/core/Materials/PBR/pbrMaterial.js';
68
+ import '@babylonjs/materials/sky/skyMaterial.js';
69
+ import '@babylonjs/core/Engines/engine.js';
70
+ import '@babylonjs/core/Engines/constants.js';
71
+ import '@babylonjs/core/Particles/particleSystem.js';
72
+ import '@babylonjs/core/Misc/fileTools.js';
73
+ import '@babylonjs/core/Meshes/mesh.js';
74
+ import '@babylonjs/core/Debug/skeletonViewer.js';
75
+ import '@babylonjs/core/Meshes/buffer.js';
76
+ import '@babylonjs/core/Meshes/Builders/linesBuilder.js';
77
+ import '@babylonjs/core/Meshes/instancedMesh.js';
78
+ import '@babylonjs/core/Rendering/renderingManager.js';
79
+ import '@babylonjs/core/Rendering/edgesRenderer.js';
80
+ import '@babylonjs/core/Rendering/outlineRenderer.js';
81
+ import '@babylonjs/core/Misc/gradients.js';
82
+ import '@babylonjs/core/Materials/Node/Blocks/gradientBlock.js';
83
+ import '@babylonjs/core/Particles/attractor.js';
84
+ import '@babylonjs/core/Meshes/Builders/sphereBuilder.js';
85
+ import '@babylonjs/core/Meshes/transformNode.js';
86
+ import '@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js';
87
+ import '@babylonjs/core/Physics/v2/physicsEngineComponent.js';
88
+ import '@babylonjs/core/PostProcesses/postProcess.js';
89
+ import '@babylonjs/core/Materials/Textures/cubeTexture.js';
90
+ import '@babylonjs/core/Materials/imageProcessingConfiguration.js';
91
+ import '@babylonjs/core/Bones/skeleton.js';
92
+ import '@babylonjs/core/Sprites/sprite.js';
93
+ import '@babylonjs/core/Materials/Textures/baseTexture.js';
94
+ import '@babylonjs/core/Materials/Textures/multiRenderTarget.js';
95
+ import '@babylonjs/core/Materials/Textures/renderTargetTexture.js';
96
+ import '@babylonjs/core/Materials/Textures/thinTexture.js';
97
+ import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js';
98
+ import '@babylonjs/core/Sprites/spriteSceneComponent.js';
99
+ import '@babylonjs/core/Materials/Textures/dynamicTexture.js';
100
+ import '@babylonjs/core/Events/pointerEvents.js';
101
+ import '@babylonjs/addons/atmosphere/atmosphere.js';
102
+
103
+ // eslint-disable-next-line @typescript-eslint/naming-convention
104
+ const useStyles = makeStyles({
105
+ section: {
106
+ display: "flex",
107
+ flexDirection: "column",
108
+ rowGap: tokens.spacingVerticalM,
109
+ },
110
+ });
111
+ // TODO: This is just a placeholder for a dynamically installed extension that brings in asset creation tools (node materials, etc.).
112
+ const CreationToolsServiceDefinition = {
113
+ friendlyName: "Creation Tools",
114
+ consumes: [ShellServiceIdentity, SceneContextIdentity],
115
+ factory: (shellService, sceneContext) => {
116
+ const registration = shellService.addSidePane({
117
+ key: "Create",
118
+ title: "Create",
119
+ icon: FormNewRegular,
120
+ horizontalLocation: "left",
121
+ content: () => {
122
+ const classes = useStyles();
123
+ const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);
124
+ // eslint-disable-next-line no-console
125
+ console.log(scene);
126
+ return (jsx(Fragment, { children: jsxs(Accordion, { collapsible: true, multiple: true, defaultOpenItems: ["Materials", "Interactivity"], children: [jsxs(AccordionItem, { value: "Materials", children: [jsx(AccordionHeader, { expandIconPosition: "end", children: jsx(Text, { size: 500, children: "Materials" }) }), jsx(AccordionPanel, { children: jsxs("div", { className: classes.section, children: [jsx(Button, { children: "PBR Material" }), jsx(Button, { children: "Node Material" })] }) })] }, "Materials"), jsxs(AccordionItem, { value: "Interactivity", children: [jsx(AccordionHeader, { expandIconPosition: "end", children: jsx(Text, { size: 500, children: "Interactivity" }) }), jsx(AccordionPanel, { children: jsx("div", { className: classes.section, children: jsx(Button, { children: "Flow Graph" }) }) })] }, "Interactivity")] }) }));
127
+ },
128
+ });
129
+ return {
130
+ dispose: () => registration.dispose(),
131
+ };
132
+ },
133
+ };
134
+ var creationToolsService = {
135
+ serviceDefinitions: [CreationToolsServiceDefinition],
136
+ };
137
+
138
+ export { CreationToolsServiceDefinition, creationToolsService as default };
139
+ //# sourceMappingURL=creationToolsService-CISLGWl-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creationToolsService-CISLGWl-.js","sources":["../../../../../../../../dev/inspector-v2/src/services/creationToolsService.tsx"],"sourcesContent":["import type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"./sceneContext\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport { makeStyles, tokens, Accordion, AccordionItem, AccordionHeader, AccordionPanel, Text, Button } from \"@fluentui/react-components\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\n\r\nimport { FormNewRegular } from \"@fluentui/react-icons\";\r\nimport { SceneContextIdentity } from \"./sceneContext\";\r\nimport { useObservableState } from \"../hooks/observableHooks\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n section: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalM,\r\n },\r\n});\r\n\r\n// TODO: This is just a placeholder for a dynamically installed extension that brings in asset creation tools (node materials, etc.).\r\nexport const CreationToolsServiceDefinition: ServiceDefinition<[], [IShellService, ISceneContext]> = {\r\n friendlyName: \"Creation Tools\",\r\n consumes: [ShellServiceIdentity, SceneContextIdentity],\r\n factory: (shellService, sceneContext) => {\r\n const registration = shellService.addSidePane({\r\n key: \"Create\",\r\n title: \"Create\",\r\n icon: FormNewRegular,\r\n horizontalLocation: \"left\",\r\n content: () => {\r\n const classes = useStyles();\r\n\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n // eslint-disable-next-line no-console\r\n console.log(scene);\r\n\r\n return (\r\n <>\r\n <Accordion collapsible multiple defaultOpenItems={[\"Materials\", \"Interactivity\"]}>\r\n <AccordionItem key=\"Materials\" value=\"Materials\">\r\n <AccordionHeader expandIconPosition=\"end\">\r\n <Text size={500}>Materials</Text>\r\n </AccordionHeader>\r\n <AccordionPanel>\r\n <div className={classes.section}>\r\n <Button>PBR Material</Button>\r\n <Button>Node Material</Button>\r\n </div>\r\n </AccordionPanel>\r\n </AccordionItem>\r\n <AccordionItem key=\"Interactivity\" value=\"Interactivity\">\r\n <AccordionHeader expandIconPosition=\"end\">\r\n <Text size={500}>Interactivity</Text>\r\n </AccordionHeader>\r\n <AccordionPanel>\r\n <div className={classes.section}>\r\n <Button>Flow Graph</Button>\r\n </div>\r\n </AccordionPanel>\r\n </AccordionItem>\r\n </Accordion>\r\n </>\r\n );\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [CreationToolsServiceDefinition],\r\n} as const;\r\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;AACA,MAAM,SAAS,GAAG,UAAU,CAAC;AACzB,IAAA,OAAO,EAAE;AACL,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,MAAM,CAAC,gBAAgB;AAClC,KAAA;AACJ,CAAA,CAAC;AAEF;AACa,MAAA,8BAA8B,GAA0D;AACjG,IAAA,YAAY,EAAE,gBAAgB;AAC9B,IAAA,QAAQ,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;AACtD,IAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,KAAI;AACpC,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC;AAC1C,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,kBAAkB,EAAE,MAAM;YAC1B,OAAO,EAAE,MAAK;AACV,gBAAA,MAAM,OAAO,GAAG,SAAS,EAAE;AAE3B,gBAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,sBAAsB,CAAC;;AAEtG,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAElB,QACIA,0BACIC,IAAC,CAAA,SAAS,IAAC,WAAW,EAAA,IAAA,EAAC,QAAQ,EAAA,IAAA,EAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,EAC5E,QAAA,EAAA,CAAAA,IAAA,CAAC,aAAa,EAAiB,EAAA,KAAK,EAAC,WAAW,EAC5C,QAAA,EAAA,CAAAD,GAAA,CAAC,eAAe,EAAC,EAAA,kBAAkB,EAAC,KAAK,EACrC,QAAA,EAAAA,GAAA,CAAC,IAAI,EAAC,EAAA,IAAI,EAAE,GAAG,EAAkB,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CACnB,EAClBA,GAAC,CAAA,cAAc,EACX,EAAA,QAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,OAAO,CAAC,OAAO,EAC3B,QAAA,EAAA,CAAAD,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,CAAsB,EAC7BA,GAAC,CAAA,MAAM,EAAuB,EAAA,QAAA,EAAA,eAAA,EAAA,CAAA,CAAA,EAAA,CAC5B,EACO,CAAA,CAAA,EAAA,EATF,WAAW,CAUd,EAChBC,IAAC,CAAA,aAAa,EAAqB,EAAA,KAAK,EAAC,eAAe,EAAA,QAAA,EAAA,CACpDD,GAAC,CAAA,eAAe,EAAC,EAAA,kBAAkB,EAAC,KAAK,EAAA,QAAA,EACrCA,GAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAE,GAAG,EAAA,QAAA,EAAA,eAAA,EAAA,CAAsB,EACvB,CAAA,EAClBA,GAAC,CAAA,cAAc,cACXA,GAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,OAAO,CAAC,OAAO,YAC3BA,GAAC,CAAA,MAAM,EAAoB,EAAA,QAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CACzB,EACO,CAAA,CAAA,EAAA,EARF,eAAe,CASlB,CAAA,EAAA,CACR,EACb,CAAA;aAEV;AACJ,SAAA,CAAC;QAEF,OAAO;AACH,YAAA,OAAO,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE;SACxC;KACJ;;AAGL,2BAAe;IACX,kBAAkB,EAAE,CAAC,8BAA8B,CAAC;CAC9C;;;;"}
@@ -0,0 +1,230 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { M as MakeLazyComponent, b as SwitchPropertyLine, B as ButtonLine, N as NumberDropdownPropertyLine, C as Collapse, c as SyncedSliderPropertyLine, T as ToolsServiceIdentity } from './index-Bt4ndVv5.js';
3
+ import { SceneSerializer } from '@babylonjs/core/Misc/sceneSerializer.js';
4
+ import { Tools } from '@babylonjs/core/Misc/tools.js';
5
+ import { EnvironmentTextureTools } from '@babylonjs/core/Misc/environmentTextureTools.js';
6
+ import { Logger } from '@babylonjs/core/Misc/logger.js';
7
+ import { useState, useCallback } from 'react';
8
+ import { Mesh } from '@babylonjs/core/Meshes/mesh.js';
9
+ import { Texture } from '@babylonjs/core/Materials/Textures/texture.js';
10
+ import { Camera } from '@babylonjs/core/Cameras/camera.js';
11
+ import { Light } from '@babylonjs/core/Lights/light.js';
12
+ import { ArrowDownloadRegular } from '@fluentui/react-icons';
13
+ import '@babylonjs/core/Maths/math.color.js';
14
+ import '@babylonjs/core/Maths/math.vector.js';
15
+ import '@babylonjs/core/Misc/observable.js';
16
+ import '@fluentui/react-components';
17
+ import '@fluentui/react-motion-components-preview';
18
+ import '@babylonjs/core/Misc/typeStore.js';
19
+ import 'usehooks-ts';
20
+ import '@babylonjs/core/Misc/asyncLock.js';
21
+ import '@babylonjs/core/Misc/deferred.js';
22
+ import '@fluentui-contrib/react-virtualizer';
23
+ import '@babylonjs/addons/msdfText/fontAsset.js';
24
+ import '@babylonjs/addons/msdfText/textRenderer.js';
25
+ import '@babylonjs/core/Debug/physicsViewer.js';
26
+ import '@babylonjs/core/Materials/materialFlags.js';
27
+ import '@babylonjs/core/Materials/standardMaterial.js';
28
+ import '@babylonjs/core/Meshes/Builders/groundBuilder.js';
29
+ import '@babylonjs/core/Rendering/utilityLayerRenderer.js';
30
+ import '@babylonjs/materials/grid/gridMaterial.js';
31
+ import '@babylonjs/core/Misc/dataStorage.js';
32
+ import '@babylonjs/core/Instrumentation/engineInstrumentation.js';
33
+ import '@babylonjs/core/Instrumentation/sceneInstrumentation.js';
34
+ import '@babylonjs/core/Engines/AbstractEngine/abstractEngine.timeQuery.js';
35
+ import '@babylonjs/core/Engines/Extensions/engine.query.js';
36
+ import '@babylonjs/core/Engines/WebGPU/Extensions/engine.query.js';
37
+ import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js';
38
+ import '@babylonjs/core/Misc/pressureObserverWrapper.js';
39
+ import '@babylonjs/core/Engines/abstractEngine.js';
40
+ import '@babylonjs/core/Engines/engineStore.js';
41
+ import 'react-dom/client';
42
+ import '@babylonjs/core/FrameGraph/frameGraphUtils.js';
43
+ import '@babylonjs/core/Gizmos/cameraGizmo.js';
44
+ import '@babylonjs/core/Gizmos/lightGizmo.js';
45
+ import '@babylonjs/core/Bones/bone.js';
46
+ import '@babylonjs/core/Gizmos/gizmoManager.js';
47
+ import '@babylonjs/core/Meshes/abstractMesh.js';
48
+ import '@babylonjs/core/node.js';
49
+ import '@babylonjs/core/Animations/animationGroup.js';
50
+ import '@babylonjs/core/Animations/animationPropertiesOverride.js';
51
+ import '@babylonjs/core/Cameras/arcRotateCamera.js';
52
+ import '@babylonjs/core/Cameras/followCamera.js';
53
+ import '@babylonjs/core/Cameras/freeCamera.js';
54
+ import '@babylonjs/core/Cameras/targetCamera.js';
55
+ import '@babylonjs/core/scene.js';
56
+ import '@babylonjs/core/FrameGraph/frameGraph.js';
57
+ import '@babylonjs/core/Lights/directionalLight.js';
58
+ import '@babylonjs/core/Lights/hemisphericLight.js';
59
+ import '@babylonjs/core/Lights/pointLight.js';
60
+ import '@babylonjs/core/Lights/rectAreaLight.js';
61
+ import '@babylonjs/core/Lights/shadowLight.js';
62
+ import '@babylonjs/core/Lights/spotLight.js';
63
+ import '@babylonjs/core/Lights/Shadows/cascadedShadowGenerator.js';
64
+ import '@babylonjs/core/Lights/Shadows/shadowGenerator.js';
65
+ import '@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js';
66
+ import '@babylonjs/core/Materials/material.js';
67
+ import '@babylonjs/core/Materials/multiMaterial.js';
68
+ import '@babylonjs/core/Materials/PBR/pbrBaseMaterial.js';
69
+ import '@babylonjs/core/Materials/PBR/pbrBaseSimpleMaterial.js';
70
+ import '@babylonjs/core/Materials/PBR/pbrMaterial.js';
71
+ import '@babylonjs/materials/sky/skyMaterial.js';
72
+ import '@babylonjs/core/Engines/engine.js';
73
+ import '@babylonjs/core/Engines/constants.js';
74
+ import '@babylonjs/core/Particles/particleSystem.js';
75
+ import '@babylonjs/core/Misc/fileTools.js';
76
+ import '@babylonjs/core/Debug/skeletonViewer.js';
77
+ import '@babylonjs/core/Meshes/buffer.js';
78
+ import '@babylonjs/core/Meshes/Builders/linesBuilder.js';
79
+ import '@babylonjs/core/Meshes/instancedMesh.js';
80
+ import '@babylonjs/core/Rendering/renderingManager.js';
81
+ import '@babylonjs/core/Rendering/edgesRenderer.js';
82
+ import '@babylonjs/core/Rendering/outlineRenderer.js';
83
+ import '@babylonjs/core/Misc/gradients.js';
84
+ import '@babylonjs/core/Materials/Node/Blocks/gradientBlock.js';
85
+ import '@babylonjs/core/Particles/attractor.js';
86
+ import '@babylonjs/core/Meshes/Builders/sphereBuilder.js';
87
+ import '@babylonjs/core/Meshes/transformNode.js';
88
+ import '@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js';
89
+ import '@babylonjs/core/Physics/v2/physicsEngineComponent.js';
90
+ import '@babylonjs/core/PostProcesses/postProcess.js';
91
+ import '@babylonjs/core/Materials/Textures/cubeTexture.js';
92
+ import '@babylonjs/core/Materials/imageProcessingConfiguration.js';
93
+ import '@babylonjs/core/Bones/skeleton.js';
94
+ import '@babylonjs/core/Sprites/sprite.js';
95
+ import '@babylonjs/core/Materials/Textures/baseTexture.js';
96
+ import '@babylonjs/core/Materials/Textures/multiRenderTarget.js';
97
+ import '@babylonjs/core/Materials/Textures/renderTargetTexture.js';
98
+ import '@babylonjs/core/Materials/Textures/thinTexture.js';
99
+ import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js';
100
+ import '@babylonjs/core/Sprites/spriteSceneComponent.js';
101
+ import '@babylonjs/core/Materials/Textures/dynamicTexture.js';
102
+ import '@babylonjs/core/Events/pointerEvents.js';
103
+ import '@babylonjs/addons/atmosphere/atmosphere.js';
104
+
105
+ const EnvExportImageTypes = [
106
+ { label: "PNG", value: 0, imageType: "image/png" },
107
+ { label: "WebP", value: 1, imageType: "image/webp" },
108
+ ];
109
+ const ExportBabylonTools = ({ scene }) => {
110
+ const [babylonExportOptions, setBabylonExportOptions] = useState({
111
+ imageTypeIndex: 0,
112
+ imageQuality: 0.8,
113
+ iblDiffuse: false,
114
+ });
115
+ const exportBabylon = useCallback(async () => {
116
+ const strScene = JSON.stringify(SceneSerializer.Serialize(scene));
117
+ const blob = new Blob([strScene], { type: "octet/stream" });
118
+ Tools.Download(blob, "scene.babylon");
119
+ }, [scene]);
120
+ const createEnvTexture = useCallback(async () => {
121
+ if (!scene.environmentTexture) {
122
+ return;
123
+ }
124
+ try {
125
+ const buffer = await EnvironmentTextureTools.CreateEnvTextureAsync(scene.environmentTexture, {
126
+ imageType: EnvExportImageTypes[babylonExportOptions.imageTypeIndex].imageType,
127
+ imageQuality: babylonExportOptions.imageQuality,
128
+ disableIrradianceTexture: !babylonExportOptions.iblDiffuse,
129
+ });
130
+ const blob = new Blob([buffer], { type: "octet/stream" });
131
+ Tools.Download(blob, "environment.env");
132
+ }
133
+ catch (error) {
134
+ Logger.Error(error);
135
+ alert(error);
136
+ }
137
+ }, [scene, babylonExportOptions]);
138
+ return (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Export to Babylon", icon: ArrowDownloadRegular, onClick: exportBabylon }), !scene.getEngine().premultipliedAlpha && scene.environmentTexture && scene.environmentTexture._prefiltered && scene.activeCamera && (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Generate .env texture", icon: ArrowDownloadRegular, onClick: createEnvTexture }), scene.environmentTexture.irradianceTexture && (jsx(SwitchPropertyLine, { label: "Diffuse Texture", description: "Export diffuse texture for IBL", value: babylonExportOptions.iblDiffuse, onChange: (value) => {
139
+ setBabylonExportOptions((prev) => ({ ...prev, iblDiffuse: value }));
140
+ } }, "iblDiffuse")), jsx(NumberDropdownPropertyLine, { label: "Image type", options: EnvExportImageTypes, value: babylonExportOptions.imageTypeIndex, onChange: (val) => {
141
+ setBabylonExportOptions((prev) => ({ ...prev, imageTypeIndex: val }));
142
+ } }), jsx(Collapse, { visible: babylonExportOptions.imageTypeIndex > 0, children: jsx(SyncedSliderPropertyLine, { label: "Quality", value: babylonExportOptions.imageQuality, onChange: (value) => setBabylonExportOptions((prev) => ({ ...prev, imageQuality: value })), min: 0, max: 1 }) })] }))] }));
143
+ };
144
+ const ExportGltfTools = MakeLazyComponent(async () => {
145
+ // Defer importing anything from the serializers package until this component is actually mounted.
146
+ const { GLTF2Export } = await import('@babylonjs/serializers/glTF/2.0/glTFSerializer.js');
147
+ return (props) => {
148
+ const [isExportingGltf, setIsExportingGltf] = useState(false);
149
+ const [gltfExportOptions, setGltfExportOptions] = useState({
150
+ exportDisabledNodes: false,
151
+ exportSkyboxes: false,
152
+ exportCameras: false,
153
+ exportLights: false,
154
+ });
155
+ const exportGLTF = useCallback(async () => {
156
+ setIsExportingGltf(true);
157
+ const shouldExport = (node) => {
158
+ if (!gltfExportOptions.exportDisabledNodes) {
159
+ if (!node.isEnabled()) {
160
+ return false;
161
+ }
162
+ }
163
+ if (!gltfExportOptions.exportSkyboxes) {
164
+ if (node instanceof Mesh) {
165
+ if (node.material) {
166
+ const material = node.material;
167
+ const reflectionTexture = material.reflectionTexture;
168
+ if (reflectionTexture && reflectionTexture.coordinatesMode === Texture.SKYBOX_MODE) {
169
+ return false;
170
+ }
171
+ }
172
+ }
173
+ }
174
+ if (!gltfExportOptions.exportCameras) {
175
+ if (node instanceof Camera) {
176
+ return false;
177
+ }
178
+ }
179
+ if (!gltfExportOptions.exportLights) {
180
+ if (node instanceof Light) {
181
+ return false;
182
+ }
183
+ }
184
+ return true;
185
+ };
186
+ try {
187
+ const glb = await GLTF2Export.GLBAsync(props.scene, "scene", { shouldExportNode: (node) => shouldExport(node) });
188
+ glb.downloadFiles();
189
+ }
190
+ catch (reason) {
191
+ Logger.Error(`Failed to export GLB: ${reason}`);
192
+ }
193
+ finally {
194
+ setIsExportingGltf(false);
195
+ }
196
+ }, [gltfExportOptions, props.scene]);
197
+ return (jsxs(Fragment, { children: [jsx(SwitchPropertyLine, { label: "Export Disabled Nodes", description: "Whether to export nodes that are disabled in the scene.", value: gltfExportOptions.exportDisabledNodes, onChange: (checked) => setGltfExportOptions({ ...gltfExportOptions, exportDisabledNodes: checked }) }, "GLTFExportDisabledNodes"), jsx(SwitchPropertyLine, { label: "Export Skyboxes", description: "Whether to export skybox nodes in the scene.", value: gltfExportOptions.exportSkyboxes, onChange: (checked) => setGltfExportOptions({ ...gltfExportOptions, exportSkyboxes: checked }) }, "GLTFExportSkyboxes"), jsx(SwitchPropertyLine, { label: "Export Cameras", description: "Whether to export cameras in the scene.", value: gltfExportOptions.exportCameras, onChange: (checked) => setGltfExportOptions({ ...gltfExportOptions, exportCameras: checked }) }, "GLTFExportCameras"), jsx(SwitchPropertyLine, { label: "Export Lights", description: "Whether to export lights in the scene.", value: gltfExportOptions.exportLights, onChange: (checked) => setGltfExportOptions({ ...gltfExportOptions, exportLights: checked }) }, "GLTFExportLights"), jsx(ButtonLine, { label: "Export to GLB", icon: ArrowDownloadRegular, onClick: exportGLTF, disabled: isExportingGltf })] }));
198
+ };
199
+ });
200
+
201
+ const ExportServiceDefinition = {
202
+ friendlyName: "Export Tools",
203
+ consumes: [ToolsServiceIdentity],
204
+ factory: (toolsService) => {
205
+ const contentRegistrations = [];
206
+ // glTF export content
207
+ contentRegistrations.push(toolsService.addSectionContent({
208
+ key: "glTF Export",
209
+ section: "glTF Export",
210
+ component: ({ context }) => jsx(ExportGltfTools, { scene: context }),
211
+ }));
212
+ // Babylon export content
213
+ contentRegistrations.push(toolsService.addSectionContent({
214
+ key: "Babylon Export",
215
+ section: "Babylon Export",
216
+ component: ({ context }) => jsx(ExportBabylonTools, { scene: context }),
217
+ }));
218
+ return {
219
+ dispose: () => {
220
+ contentRegistrations.forEach((registration) => registration.dispose());
221
+ },
222
+ };
223
+ },
224
+ };
225
+ var exportService = {
226
+ serviceDefinitions: [ExportServiceDefinition],
227
+ };
228
+
229
+ export { ExportServiceDefinition, exportService as default };
230
+ //# sourceMappingURL=exportService-n5-mIhJj.js.map