@combeenation/3d-viewer 4.0.0-alpha7 → 4.0.0-beta2

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.
Files changed (57) hide show
  1. package/README.md +1 -0
  2. package/dist/lib-cjs/api/classes/element.d.ts +12 -16
  3. package/dist/lib-cjs/api/classes/element.js +125 -180
  4. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  5. package/dist/lib-cjs/api/classes/event.d.ts +1 -15
  6. package/dist/lib-cjs/api/classes/event.js +1 -15
  7. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  8. package/dist/lib-cjs/api/classes/parameter.d.ts +7 -101
  9. package/dist/lib-cjs/api/classes/parameter.js +21 -141
  10. package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
  11. package/dist/lib-cjs/api/classes/parameterObservable.js +36 -11
  12. package/dist/lib-cjs/api/classes/parameterObservable.js.map +1 -1
  13. package/dist/lib-cjs/api/classes/variant.d.ts +14 -48
  14. package/dist/lib-cjs/api/classes/variant.js +56 -315
  15. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  16. package/dist/lib-cjs/api/classes/variantInstance.d.ts +1 -5
  17. package/dist/lib-cjs/api/classes/variantInstance.js +0 -10
  18. package/dist/lib-cjs/api/classes/variantInstance.js.map +1 -1
  19. package/dist/lib-cjs/api/classes/viewer.d.ts +1 -0
  20. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  21. package/dist/lib-cjs/api/classes/viewerLight.js +27 -19
  22. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
  23. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +1 -5
  24. package/dist/lib-cjs/api/internal/sceneSetup.js +71 -75
  25. package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
  26. package/dist/lib-cjs/api/util/babylonHelper.d.ts +4 -51
  27. package/dist/lib-cjs/api/util/babylonHelper.js +8 -141
  28. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  29. package/dist/lib-cjs/api/util/globalTypes.d.ts +11 -53
  30. package/dist/lib-cjs/api/util/resourceHelper.d.ts +8 -4
  31. package/dist/lib-cjs/api/util/resourceHelper.js +25 -59
  32. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  33. package/dist/lib-cjs/index.d.ts +22 -24
  34. package/dist/lib-cjs/index.js +38 -42
  35. package/dist/lib-cjs/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/api/classes/element.ts +112 -133
  38. package/src/api/classes/{parameterizable.ts → elementParameterizable.ts} +1 -12
  39. package/src/api/classes/event.ts +1 -16
  40. package/src/api/classes/parameter.ts +22 -153
  41. package/src/api/classes/parameterObservable.ts +31 -9
  42. package/src/api/classes/variant.ts +51 -184
  43. package/src/api/classes/variantInstance.ts +1 -8
  44. package/src/api/classes/viewer.ts +1 -0
  45. package/src/api/internal/sceneSetup.ts +109 -99
  46. package/src/api/util/babylonHelper.ts +9 -153
  47. package/src/api/util/globalTypes.ts +13 -64
  48. package/src/api/util/resourceHelper.ts +24 -26
  49. package/src/dev.ts +7 -5
  50. package/src/index.ts +23 -27
  51. package/src/pagesconfig.json +13 -8
  52. package/dist/lib-cjs/api/emitter.d.ts +0 -35
  53. package/dist/lib-cjs/api/emitter.js +0 -61
  54. package/dist/lib-cjs/api/emitter.js.map +0 -1
  55. package/src/api/classes/variantParameterizable.ts +0 -73
  56. package/src/api/classes/viewerLight.ts +0 -326
  57. package/src/api/util/stringHelper.ts +0 -26
@@ -1,6 +1,6 @@
1
1
  import { Mesh } from '@babylonjs/core/Meshes/mesh';
2
+ import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
2
3
  import { Element } from './element';
3
- import { ViewerLight } from './viewerLight';
4
4
  import { EventBroadcaster } from './eventBroadcaster';
5
5
  import { ParameterObservable } from './parameterObservable';
6
6
  import { Variant } from './variant';
@@ -51,13 +51,6 @@ export class VariantInstance extends EventBroadcaster {
51
51
  return this.variant.getElement( dottedPath );
52
52
  }
53
53
 
54
- /**
55
- * A proxy for {@link Variant.getViewerLight}.
56
- */
57
- public async getViewerLight( dottedPath: DottedPathArgument ): Promise<ViewerLight> {
58
- return this.variant.getViewerLight( dottedPath );
59
- }
60
-
61
54
  /**
62
55
  * A proxy for {@link Variant.getNode}.
63
56
  */
@@ -5,6 +5,7 @@ import { Engine } from '@babylonjs/core/Engines/engine';
5
5
  import { HighlightLayer } from '@babylonjs/core/Layers/highlightLayer';
6
6
  import { Vector3 } from '@babylonjs/core/Maths/math.vector';
7
7
  import { Mesh } from '@babylonjs/core/Meshes/mesh';
8
+ import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
8
9
  import { ScreenshotTools } from '@babylonjs/core/Misc/screenshotTools';
9
10
  import { Scene } from '@babylonjs/core/scene';
10
11
  import { isString } from 'lodash-es';
@@ -1,171 +1,180 @@
1
- import { Camera } from '@babylonjs/core/Cameras/camera';
1
+
2
2
  import { Engine } from '@babylonjs/core/Engines/engine';
3
- import '@babylonjs/core/Helpers/sceneHelpers';
4
3
  import '@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader';
5
- import { Color4 } from '@babylonjs/core/Maths/math.color';
4
+ import '@babylonjs/core/Helpers/sceneHelpers';
5
+ import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
6
+ import { HDRCubeTexture } from '@babylonjs/core/Materials/Textures/hdrCubeTexture';
7
+ import { Texture } from '@babylonjs/core/Materials/Textures/texture';
8
+ import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
6
9
  import { Vector3 } from '@babylonjs/core/Maths/math.vector';
7
- import { GroundMesh } from '@babylonjs/core/Meshes/groundMesh';
8
10
  import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
9
11
  import { DefaultRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline';
10
12
  import { Scene } from '@babylonjs/core/scene';
11
- import { get, isEmpty, set } from 'lodash-es';
13
+ import type { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
14
+ import { Camera } from '@babylonjs/core/Cameras/camera';
15
+ import { Light } from '@babylonjs/core/Lights/light';
12
16
  import { Parameter } from '../classes/parameter';
13
17
 
14
- /**
15
- * @param scene
16
- * @param name
17
- * @param definition
18
- */
19
- const processGround = async function( scene: Scene, name: string, definition: GroundDefinition ): Promise<Mesh | GroundMesh> {
20
- return new Promise( resolve => {
21
- const _resolve = ( ground: Mesh ) => {
22
- if( definition.receiveShadows !== undefined ) {
23
- ground.receiveShadows = definition.receiveShadows;
24
- }
25
- resolve( ground );
26
- };
27
- switch( definition.type ) {
28
- case 'baked':
29
- if( !definition.meshId ) {
30
- throw new Error( `A baked ground must define a "meshId".` );
31
- }
32
- _resolve( scene.getMeshByID( definition.meshId ) as Mesh );
33
- break;
34
- case 'ground':
35
- _resolve( MeshBuilder.CreateGround(
36
- name,
37
- definition,
38
- scene
39
- ) );
40
- break;
41
- case 'heightmap':
42
- if( !definition.url ) {
43
- throw new Error( `A heightmap ground must define an "url".` );
44
- }
45
- definition.onReady = ( _ground: GroundMesh ) => {
46
- _resolve( _ground );
47
- };
48
- MeshBuilder.CreateGroundFromHeightMap(
49
- name,
50
- definition.url,
51
- definition,
52
- scene,
53
- );
54
- break;
55
- default:
56
- throw new Error( `Ground of type "${definition.type}" not implemented (yet).` );
57
- }
58
- } );
18
+
19
+ const defaultLightning = async function(scene: Scene) {
20
+ const defaultSetup: LightDefinition = {
21
+ type: 'hemispheric',
22
+ };
23
+
24
+ const defaultLight = await processLight(scene, 'default_light', defaultSetup) as HemisphericLight;
25
+ defaultLight.groundColor = Color3.Black();
26
+ defaultLight.diffuse = Color3.White();
27
+
28
+ return defaultLight;
29
+ };
30
+
31
+
32
+ const processLight = async function(scene: Scene, name: string, lightSetup: LightDefinition) {
33
+
34
+ let light: Light;
35
+
36
+ switch(lightSetup.type ) {
37
+ case 'hemispheric':
38
+ // @ts-ignore
39
+ const hemisphericLightModule = await import(/* webpackChunkName: "hemispheric-light" */ '@babylonjs/core/Lights/hemisphericLight');
40
+ light = new hemisphericLightModule.HemisphericLight( name, Vector3.Up(), scene);
41
+ break;
42
+ case 'point':
43
+ // @ts-ignore
44
+ const pointLightModule = await import(/* webpackChunkName: "point-light" */ '@babylonjs/core/Lights/pointLight');
45
+ light = new pointLightModule.PointLight( name, Vector3.Up(), scene);
46
+ break;
47
+ }
48
+
49
+ return light;
59
50
  };
60
51
 
61
- /**
62
- * @param scene
63
- */
64
- const defaultCamera = async function( scene: Scene ): Promise<Camera> {
65
- return await processCamera( scene, 'default_camera', {
52
+
53
+ const defaultCamera = async function(scene: Scene) {
54
+
55
+ const cameraSetup: CameraDefinition = {
66
56
  type: 'arc',
67
57
  active: true,
68
- } );
58
+ };
59
+
60
+ const defaultCamera = await processCamera(scene, 'default_camera', cameraSetup);
61
+
62
+ return defaultCamera;
69
63
  };
70
64
 
71
- /**
72
- * @param scene
73
- * @param name
74
- * @param cameraSetup
75
- */
76
- const processCamera = async function( scene: Scene, name: string, cameraSetup: CameraDefinition ): Promise<Camera> {
65
+ const processCamera = async function(scene: Scene, name: string, cameraSetup: CameraDefinition) {
66
+
77
67
  let camera: Camera;
68
+
78
69
  let target = Vector3.Zero();
79
- if( cameraSetup.target ) {
80
- target = Parameter.parseVector( cameraSetup.target );
70
+ if(cameraSetup.target) {
71
+ target = Parameter.parseVector(cameraSetup.target);
81
72
  }
82
- switch( cameraSetup.type ) {
73
+
74
+ switch(cameraSetup.type ) {
83
75
  case 'arc':
84
76
  // @ts-ignore
85
77
  const arcCameraModule = await import(/* webpackChunkName: "arc-rotate-camera" */ '@babylonjs/core/Cameras/arcRotateCamera');
86
- camera = new arcCameraModule.ArcRotateCamera( name, Math.PI / 4, Math.PI / 4, 2, target, scene );
78
+ camera = new arcCameraModule.ArcRotateCamera(name, Math.PI / 4, Math.PI / 4, 2, target, scene );
87
79
  camera.metadata = {
88
80
  alpha: Math.PI / 4,
89
81
  beta: Math.PI / 4,
90
82
  radius: 2
91
83
  };
92
84
  break;
85
+
93
86
  }
94
- if( cameraSetup.active ) {
87
+
88
+ if(cameraSetup.active) {
95
89
  camera.attachControl( scene.getEngine().getRenderingCanvas()!, true );
96
90
  }
91
+
97
92
  if( cameraSetup.fov ) {
98
93
  camera.fov = cameraSetup.fov;
99
94
  }
95
+
100
96
  camera.storeState();
101
97
  return camera;
102
98
  };
103
99
 
104
- /**
105
- * @param engine
106
- * @param sceneJson
107
- */
108
- const sceneSetup = async function(engine: Engine, sceneJson: SceneJson): Promise<Scene> {
100
+ const sceneSetup = async function(engine: Engine, sceneJson: SceneJson) {
109
101
  const scene = new Scene( engine );
110
102
  scene.clearColor = new Color4(0, 0, 0, 0);
111
- // cameras
112
- const cameras: Camera[] = [];
113
- const cameraDefinitions = get( sceneJson.scene, 'cameras' ) as CameraDefinitions;
114
- if( !isEmpty( cameraDefinitions ) ) {
115
- for( let cameraName in cameraDefinitions ) {
116
- cameras.push( await processCamera( scene, cameraName, cameraDefinitions[cameraName] ) );
117
- }
103
+
104
+ let cameras: Camera[] = [];
105
+ //there is either no "cameras" or "cameras" is empty
106
+ if( ! sceneJson.scene.hasOwnProperty('cameras') || (sceneJson.scene.cameras && ! Object.keys(sceneJson.scene.cameras).length ) ) {
107
+ const camera = await defaultCamera(scene);
108
+
109
+ cameras.push(camera);
118
110
  } else {
119
- const camera = await defaultCamera( scene );
120
- cameras.push( camera );
111
+ for(let camera in sceneJson.scene.cameras) {
112
+ cameras.push(await processCamera(scene, camera, sceneJson.scene.cameras[camera]));
113
+ }
121
114
  }
122
- // grounds
123
- const groundDefinitions = get( sceneJson.scene, 'grounds' ) as GroundDefinitions;
124
- if( !isEmpty( groundDefinitions ) ) {
125
- for( const groundName in groundDefinitions ) {
126
- await processGround( scene, groundName, groundDefinitions[groundName] );
115
+
116
+
117
+ //there is either no "lights" or "lights" is empty
118
+ if( ! sceneJson.scene.hasOwnProperty('lights') || (sceneJson.scene.lights && ! Object.keys(sceneJson.scene.lights).length ) ) {
119
+ // await defaultLightning(scene);
120
+ } else {
121
+ for(let light in sceneJson.scene.lights) {
122
+ await processLight(scene, light, sceneJson.scene.lights[light]);
127
123
  }
128
124
  }
125
+
126
+
129
127
  // TODO: try to split this away from the default rendering pipeline to save module imports
130
128
  // The "hdr" setting had negative effect on rendering in Safari. Everything looked a little "edgy". I'm not completely
131
129
  // sure if disabling it comes with other negative side effects I don't see right now, so we should probably
132
130
  // investigate this a little more in detail at some point.
133
131
  const defaultPipeline = new DefaultRenderingPipeline( 'default-rendering-pipeline', false, scene );
132
+
134
133
  /* DISABLED: causes problems with Internet Explorer
135
134
  defaultPipeline.imageProcessingEnabled = true;
136
135
  */
136
+
137
137
  if( sceneJson.scene.globals.aa ) {
138
138
  defaultPipeline.fxaaEnabled = true; //implicitly does FxaaPostProcess()
139
139
  }
140
+
140
141
  // Set samples regardless of fxaa setting since we don't want to use fxaa but still increase the sample count
141
142
  defaultPipeline.samples = 8;
143
+
142
144
  if( sceneJson.scene.globals['camera-settings'] ) {
143
- if( sceneJson.scene.globals['camera-settings']!.sharpen && sceneJson.scene.globals['camera-settings']!.sharpen.enabled ) {
145
+ if( sceneJson.scene.globals['camera-settings'].sharpen && sceneJson.scene.globals['camera-settings'].sharpen.enabled ) {
144
146
  defaultPipeline.sharpenEnabled = true; //implicitly does SharpenPostProcess()
145
147
  //defaultPipeline.sharpen.colorAmount = 1;
146
148
  //defaultPipeline.sharpen.edgeAmount = 0;
147
149
  }
148
- if( sceneJson.scene.globals['camera-settings']!.bloom && sceneJson.scene.globals['camera-settings']!.bloom.enabled ) {
150
+
151
+ if( sceneJson.scene.globals['camera-settings'].bloom && sceneJson.scene.globals['camera-settings'].bloom.enabled ) {
149
152
  defaultPipeline.bloomEnabled = true;
150
- if( sceneJson.scene.globals['camera-settings']!.bloom.size ) {
151
- defaultPipeline.bloomScale = sceneJson.scene.globals['camera-settings']!.bloom.size;
153
+
154
+ if( sceneJson.scene.globals['camera-settings'].bloom.size ) {
155
+ defaultPipeline.bloomScale = sceneJson.scene.globals['camera-settings'].bloom.size;
152
156
  }
153
- if( sceneJson.scene.globals['camera-settings']!.bloom.threshold ) {
154
- defaultPipeline.bloomThreshold = sceneJson.scene.globals['camera-settings']!.bloom.threshold;
157
+
158
+ if( sceneJson.scene.globals['camera-settings'].bloom.threshold ) {
159
+ defaultPipeline.bloomThreshold = sceneJson.scene.globals['camera-settings'].bloom.threshold;
155
160
  }
156
161
  }
157
- if( sceneJson.scene.globals['camera-settings']!.contrast ) {
158
- scene.imageProcessingConfiguration.contrast = sceneJson.scene.globals['camera-settings']!.contrast;
162
+
163
+ if( sceneJson.scene.globals['camera-settings'].contrast ) {
164
+ scene.imageProcessingConfiguration.contrast = sceneJson.scene.globals['camera-settings'].contrast;
159
165
  }
160
- if( sceneJson.scene.globals['camera-settings']!.exposure ) {
161
- scene.imageProcessingConfiguration.exposure = sceneJson.scene.globals['camera-settings']!.exposure;
166
+
167
+ if( sceneJson.scene.globals['camera-settings'].exposure ) {
168
+ scene.imageProcessingConfiguration.exposure = sceneJson.scene.globals['camera-settings'].exposure;
162
169
  }
163
- if( sceneJson.scene.globals['camera-settings']!.dof && sceneJson.scene.globals['camera-settings']!.dof.enabled ) {
170
+
171
+ if( sceneJson.scene.globals['camera-settings'].dof && sceneJson.scene.globals['camera-settings'].dof.enabled ) {
164
172
  //@ts-ignore
165
173
  const module = await import(/* webpackChunkName: "lens-rendering" */ './lensRendering');
166
- new module.LensRenderingPipeline( 'lens-rendering', sceneJson.scene.globals['camera-settings']!.dof.settings, scene, 1.0, cameras );
174
+ new module.LensRenderingPipeline( 'lens-rendering', sceneJson.scene.globals['camera-settings'].dof!.settings, scene, 1.0, cameras );
167
175
  }
168
176
  }
177
+
169
178
  // TODO: make this dynamic
170
179
  /*
171
180
  const texture = new HDRCubeTexture("/assets/small_cave_1k.hdr", scene, 256);
@@ -186,9 +195,10 @@ const sceneSetup = async function(engine: Engine, sceneJson: SceneJson): Promise
186
195
  */
187
196
 
188
197
  // TODO: shadows don't work with HemishpericLight
198
+
189
199
  return scene;
190
200
  };
191
201
 
192
202
  export {
193
203
  sceneSetup
194
- };
204
+ }
@@ -1,10 +1,7 @@
1
1
  import { HighlightLayer } from '@babylonjs/core/Layers/highlightLayer';
2
- import { Light } from '@babylonjs/core/Lights/light';
3
- import { ShadowGenerator } from '@babylonjs/core/Lights/Shadows/shadowGenerator';
4
2
  import { Material } from '@babylonjs/core/Materials/material';
5
3
  import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
6
4
  import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
7
- import { Axis, Space } from '@babylonjs/core/Maths/math.axis';
8
5
  import { Color3 } from '@babylonjs/core/Maths/math.color';
9
6
  import { Vector3 } from '@babylonjs/core/Maths/math.vector';
10
7
  import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
@@ -13,22 +10,9 @@ import { Mesh } from '@babylonjs/core/Meshes/mesh';
13
10
  import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
14
11
  import { Node } from '@babylonjs/core/node';
15
12
  import { Scene } from '@babylonjs/core/scene';
16
- import { Parameter } from 'api/classes/parameter';
17
- import { cloneDeep, get, merge } from 'lodash-es';
13
+ import { cloneDeep, merge } from 'lodash-es';
18
14
  import { DottedPath } from '../classes/dottedPath';
19
15
 
20
- /**
21
- * @param node
22
- * @return Node
23
- */
24
- const getRootNode = function( node: Node ): Node {
25
- let _node = node;
26
- while( _node.parent ) {
27
- _node = _node.parent;
28
- }
29
- return _node;
30
- }
31
-
32
16
  /**
33
17
  * @param nodes
34
18
  * @param predicate
@@ -55,17 +39,18 @@ const mapToDottedNodes = function <T>( nodes: Node[],
55
39
  * @param node
56
40
  * @return DottedPath
57
41
  */
58
- const getDottedPathForNode = function( node: Node ): DottedPath {
42
+ const getDottedPathForTransformNode = function( node: TransformNode ): DottedPath {
59
43
  const dottedPath = DottedPath.create( node.name );
60
44
  let _parent = node;
61
45
  while( _parent.parent ) {
62
- _parent = _parent.parent;
46
+ _parent = _parent.parent as TransformNode;
63
47
  dottedPath.unshiftPart( _parent.name );
64
48
  }
65
49
  return dottedPath;
66
50
  };
67
51
 
68
52
  /**
53
+ *
69
54
  * @param node
70
55
  * @param predicate
71
56
  * @param deep
@@ -93,21 +78,6 @@ const cloneTransformNode = function( node: TransformNode,
93
78
  return clone;
94
79
  };
95
80
 
96
- /**
97
- * @param node
98
- */
99
- const cloneNodeWithParents = function( node: Node | null ): Node | null {
100
- let clone = null;
101
- if( node instanceof TransformNode ) {
102
- clone = node.clone( node.name, cloneNodeWithParents( node.parent ), true );
103
- } else if( node instanceof Light ) {
104
- clone = node.clone( node.name, cloneNodeWithParents( node.parent ) );
105
- } else if( node ) {
106
- throw new Error( `Cloning of "${node?.constructor.name}" is not implemented (yet).` );
107
- }
108
- return clone;
109
- };
110
-
111
81
  /**
112
82
  * @param node
113
83
  * @param deep
@@ -136,11 +106,11 @@ const cloneTransformNodeMaterial = function( node: TransformNode,
136
106
  * @param deep
137
107
  * @param metadata
138
108
  */
139
- const injectNodeMetadata = function( node: Node, metadata: {}, deep: boolean = true ) {
109
+ const injectTransformNodeMetadata = function( node: TransformNode, metadata: {}, deep: boolean = true ) {
140
110
  node.metadata = merge( {}, node.metadata, metadata );
141
- if( deep && node instanceof TransformNode ) {
111
+ if( deep ) {
142
112
  const children = node.getChildTransformNodes( true );
143
- children.forEach( child => injectNodeMetadata( child, metadata, deep ) );
113
+ children.forEach( child => injectTransformNodeMetadata( child, metadata, deep ) );
144
114
  }
145
115
  };
146
116
 
@@ -195,61 +165,6 @@ const deactivateTransformNode = function( node: TransformNode, deep: boolean = t
195
165
  }
196
166
  };
197
167
 
198
- /**
199
- * @param node
200
- */
201
- const enableNodeWithParents = function( node: Node ) {
202
- node.setEnabled( true );
203
- if ( node.parent ) {
204
- enableNodeWithParents( node.parent );
205
- }
206
- };
207
-
208
- /**
209
- * @param node
210
- */
211
- const disableNodeWithParents = function( node: Node ) {
212
- node.setEnabled( false );
213
- if ( node.parent ) {
214
- disableNodeWithParents( node.parent );
215
- }
216
- };
217
-
218
- /**
219
- * @param node
220
- * @param rotation
221
- * @param space
222
- */
223
- const rotateTransformNode = function( node: TransformNode, rotation: Vector3 ): TransformNode {
224
- // remember absolute rotation and reset it before translating
225
- if( !get( node.metadata, 'rotation' ) ) {
226
- injectNodeMetadata( node, { rotation: node.rotation.clone() }, false);
227
- }
228
- node.rotation = node.metadata.rotation;
229
- // rotate
230
- node.rotate( Axis.X, rotation.x, Space.WORLD );
231
- node.rotate( Axis.Y, rotation.y, Space.WORLD );
232
- node.rotate( Axis.Z, rotation.z, Space.WORLD );
233
- return node;
234
- };
235
-
236
- /**
237
- * @param node
238
- * @param distance
239
- */
240
- const moveTransformNode = function( node: TransformNode, distance: Vector3 ): TransformNode {
241
- // remember absolute position and reset it before translating
242
- if( !get( node.metadata, 'position' ) ) {
243
- injectNodeMetadata( node, { position: node.absolutePosition.clone() }, false);
244
- }
245
- node.setAbsolutePosition( node.metadata.position );
246
- // move
247
- node.translate( Axis.X, distance.x, Space.WORLD );
248
- node.translate( Axis.Y, distance.y, Space.WORLD );
249
- node.translate( Axis.Z, distance.z, Space.WORLD );
250
- return node;
251
- }
252
-
253
168
  /**
254
169
  * @param node
255
170
  * @param material
@@ -420,56 +335,6 @@ const removeFromHighlightLayer = function( layer: HighlightLayer, node: Transfor
420
335
  }
421
336
  };
422
337
 
423
- /**
424
- * @param node
425
- * @param receiveShadows
426
- * @param deep
427
- */
428
- const setReceiveShadows = function( node: TransformNode, receiveShadows: boolean, deep: boolean = true ) {
429
- if( node instanceof AbstractMesh ) {
430
- node.receiveShadows = receiveShadows;
431
- }
432
- if( deep ) {
433
- node.getChildTransformNodes( true ).forEach(
434
- child => setReceiveShadows( child, receiveShadows, deep )
435
- );
436
- }
437
- };
438
-
439
- /**
440
- * @param node
441
- * @param generator
442
- * @param deep
443
- */
444
- const addToShadowGenerator = function( generator: ShadowGenerator, node: TransformNode, deep: boolean = true ) {
445
- if( node instanceof AbstractMesh ) {
446
- // We have to remove the node because there's no duplicate check in babylon
447
- generator.removeShadowCaster( node, false );
448
- generator.addShadowCaster( node, false );
449
- }
450
- if( deep ) {
451
- node.getChildTransformNodes( true ).forEach(
452
- child => addToShadowGenerator( generator, child, deep )
453
- );
454
- }
455
- };
456
-
457
- /**
458
- * @param node
459
- * @param generator
460
- * @param deep
461
- */
462
- const removeFromShadowGenerator = function( generator: ShadowGenerator, node: TransformNode, deep: boolean = true ) {
463
- if( node instanceof AbstractMesh ) {
464
- generator.removeShadowCaster( node, false );
465
- }
466
- if( deep ) {
467
- node.getChildTransformNodes( true ).forEach(
468
- child => removeFromShadowGenerator( generator, child, deep )
469
- );
470
- }
471
- };
472
-
473
338
  /**
474
339
  * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
475
340
  * @param mesh
@@ -507,20 +372,14 @@ const getClientRectFromMesh = function( mesh: AbstractMesh, scene: Scene, canvas
507
372
  };
508
373
 
509
374
  export {
510
- getRootNode,
511
375
  mapToDottedNodes,
512
- getDottedPathForNode,
376
+ getDottedPathForTransformNode,
513
377
  cloneTransformNode,
514
- cloneNodeWithParents,
515
378
  cloneTransformNodeMaterial,
516
- injectNodeMetadata,
379
+ injectTransformNodeMetadata,
517
380
  assertTransformNode,
518
381
  activateTransformNode,
519
382
  deactivateTransformNode,
520
- enableNodeWithParents,
521
- disableNodeWithParents,
522
- rotateTransformNode,
523
- moveTransformNode,
524
383
  setMaterial,
525
384
  setSourceNodeMaterial,
526
385
  setMaterialColor,
@@ -529,8 +388,5 @@ export {
529
388
  setMaterialRoughness,
530
389
  addToHighlightLayer,
531
390
  removeFromHighlightLayer,
532
- setReceiveShadows,
533
- addToShadowGenerator,
534
- removeFromShadowGenerator,
535
391
  getClientRectFromMesh
536
392
  };