@combeenation/3d-viewer 4.0.0-alpha8 → 4.0.0-beta3
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/README.md +1 -0
- package/dist/lib-cjs/api/classes/element.d.ts +9 -14
- package/dist/lib-cjs/api/classes/element.js +96 -143
- package/dist/lib-cjs/api/classes/element.js.map +1 -1
- package/dist/lib-cjs/api/classes/event.d.ts +1 -15
- package/dist/lib-cjs/api/classes/event.js +1 -15
- package/dist/lib-cjs/api/classes/event.js.map +1 -1
- package/dist/lib-cjs/api/classes/parameter.d.ts +7 -101
- package/dist/lib-cjs/api/classes/parameter.js +21 -141
- package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
- package/dist/lib-cjs/api/classes/parameterObservable.js +36 -11
- package/dist/lib-cjs/api/classes/parameterObservable.js.map +1 -1
- package/dist/lib-cjs/api/classes/variant.d.ts +14 -48
- package/dist/lib-cjs/api/classes/variant.js +56 -315
- package/dist/lib-cjs/api/classes/variant.js.map +1 -1
- package/dist/lib-cjs/api/classes/variantInstance.d.ts +1 -5
- package/dist/lib-cjs/api/classes/variantInstance.js +0 -10
- package/dist/lib-cjs/api/classes/variantInstance.js.map +1 -1
- package/dist/lib-cjs/api/classes/viewer.d.ts +1 -0
- package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
- package/dist/lib-cjs/api/classes/viewerLight.js +24 -16
- package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
- package/dist/lib-cjs/api/internal/sceneSetup.d.ts +1 -5
- package/dist/lib-cjs/api/internal/sceneSetup.js +71 -75
- package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
- package/dist/lib-cjs/api/util/babylonHelper.d.ts +4 -51
- package/dist/lib-cjs/api/util/babylonHelper.js +8 -141
- package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
- package/dist/lib-cjs/api/util/globalTypes.d.ts +11 -53
- package/dist/lib-cjs/api/util/resourceHelper.d.ts +26 -4
- package/dist/lib-cjs/api/util/resourceHelper.js +56 -53
- package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
- package/dist/lib-cjs/index.d.ts +22 -24
- package/dist/lib-cjs/index.js +38 -42
- package/dist/lib-cjs/index.js.map +1 -1
- package/package.json +1 -1
- package/src/api/classes/element.ts +100 -110
- package/src/api/classes/{parameterizable.ts → elementParameterizable.ts} +1 -12
- package/src/api/classes/event.ts +1 -16
- package/src/api/classes/parameter.ts +22 -153
- package/src/api/classes/parameterObservable.ts +31 -9
- package/src/api/classes/variant.ts +51 -184
- package/src/api/classes/variantInstance.ts +1 -8
- package/src/api/classes/viewer.ts +1 -0
- package/src/api/internal/sceneSetup.ts +109 -99
- package/src/api/util/babylonHelper.ts +9 -153
- package/src/api/util/globalTypes.ts +13 -64
- package/src/api/util/resourceHelper.ts +53 -26
- package/src/dev.ts +7 -5
- package/src/index.ts +23 -27
- package/src/pagesconfig.json +13 -8
- package/dist/lib-cjs/api/emitter.d.ts +0 -35
- package/dist/lib-cjs/api/emitter.js +0 -61
- package/dist/lib-cjs/api/emitter.js.map +0 -1
- package/src/api/classes/variantParameterizable.ts +0 -73
- package/src/api/classes/viewerLight.ts +0 -326
- package/src/api/util/stringHelper.ts +0 -26
package/dist/lib-cjs/index.d.ts
CHANGED
|
@@ -1,48 +1,46 @@
|
|
|
1
1
|
/// <reference path="api/util/globalTypes.d.ts" />
|
|
2
|
-
import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
|
|
3
2
|
import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
|
|
4
3
|
import { Engine } from '@babylonjs/core/Engines/engine';
|
|
5
|
-
import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
|
|
6
|
-
import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
|
|
7
4
|
import { Material } from '@babylonjs/core/Materials/material';
|
|
8
5
|
import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
|
|
9
6
|
import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
|
|
10
|
-
import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
|
|
11
7
|
import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
|
|
12
|
-
import { Texture } from '@babylonjs/core/Materials/Textures/texture';
|
|
13
8
|
import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
|
|
14
9
|
import { Vector3 } from '@babylonjs/core/Maths/math.vector';
|
|
15
10
|
import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
|
|
16
11
|
import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
|
|
17
12
|
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
18
|
-
import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
|
|
19
13
|
import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
|
|
20
14
|
import { Node } from '@babylonjs/core/node';
|
|
21
|
-
/**
|
|
22
|
-
* Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
|
|
23
|
-
* errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
|
|
24
|
-
* version of the viewer (e.g. when pulling it from NPM etc.)...
|
|
25
|
-
*/
|
|
26
|
-
import '@babylonjs/core/Rendering/boundingBoxRenderer';
|
|
27
15
|
import { Scene } from '@babylonjs/core/scene';
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
16
|
+
import { VariantInstance } from './api/classes/variantInstance';
|
|
17
|
+
import { Viewer } from './api/classes/viewer';
|
|
18
|
+
import { Event, emitter } from './api/classes/event';
|
|
30
19
|
import { EventEmitter } from 'eventemitter3';
|
|
31
|
-
import { Element } from './api/classes/element';
|
|
32
|
-
import { emitter, Event } from './api/classes/event';
|
|
33
|
-
import { EventBroadcaster } from './api/classes/eventBroadcaster';
|
|
34
20
|
import { Parameter } from './api/classes/parameter';
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
21
|
+
import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
|
|
22
|
+
import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
|
|
23
|
+
import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
|
|
24
|
+
import { Texture } from '@babylonjs/core/Materials/Textures/texture';
|
|
25
|
+
import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
|
|
26
|
+
import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
|
|
37
27
|
import { Variant } from './api/classes/variant';
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
28
|
+
import { ParameterObservable } from './api/classes/parameterObservable';
|
|
29
|
+
import { ElementParameterizable } from './api/classes/elementParameterizable';
|
|
30
|
+
import { Element } from './api/classes/element';
|
|
31
|
+
import { VariantInstanceManager } from './api/manager/variantInstanceManager';
|
|
41
32
|
import { AnimationManager } from './api/manager/animationManager';
|
|
33
|
+
import { EventBroadcaster } from './api/classes/eventBroadcaster';
|
|
42
34
|
import { SceneManager } from './api/manager/sceneManager';
|
|
43
|
-
import {
|
|
35
|
+
import { PlacementAnimation } from './api/classes/placementAnimation';
|
|
44
36
|
import * as BabylonHelper from './api/util/babylonHelper';
|
|
37
|
+
/**
|
|
38
|
+
* Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
|
|
39
|
+
* errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
|
|
40
|
+
* version of the viewer (e.g. when pulling it from NPM etc.)...
|
|
41
|
+
*/
|
|
42
|
+
import '@babylonjs/core/Rendering/boundingBoxRenderer';
|
|
45
43
|
/**
|
|
46
44
|
* Expose some frequently used babylon modules by our consumers.
|
|
47
45
|
*/
|
|
48
|
-
export { AnimationManager, Variant, VariantInstanceManager, Viewer, ParameterObservable,
|
|
46
|
+
export { AnimationManager, Variant, VariantInstanceManager, Viewer, ParameterObservable, ElementParameterizable, emitter as Emitter, EventEmitter, Event, Parameter, VariantInstance, Color3, Color4, Vector3, AbstractMesh, InstancedMesh, Mesh, TransformNode, Node, Material, PBRMaterial, StandardMaterial, Scene, Engine, ArcRotateCamera, DynamicTexture, CubeTexture, MeshBuilder, Texture, BabylonAnimation, HemisphericLight, DirectionalLight, Element, EventBroadcaster, SceneManager, PlacementAnimation, BabylonHelper, };
|
package/dist/lib-cjs/index.js
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/// <reference path="api/util/globalTypes.ts" />
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.BabylonHelper = exports.PlacementAnimation = exports.SceneManager = exports.EventBroadcaster = exports.Element = exports.DirectionalLight = exports.HemisphericLight = exports.BabylonAnimation = exports.Texture = exports.MeshBuilder = exports.CubeTexture = exports.DynamicTexture = exports.ArcRotateCamera = exports.Engine = exports.Scene = exports.StandardMaterial = exports.PBRMaterial = exports.Material = exports.Node = exports.TransformNode = exports.Mesh = exports.InstancedMesh = exports.AbstractMesh = exports.Vector3 = exports.Color4 = exports.Color3 = exports.VariantInstance = exports.Parameter = exports.Event = exports.EventEmitter = exports.Emitter = exports.
|
|
5
|
-
var animation_1 = require("@babylonjs/core/Animations/animation");
|
|
6
|
-
Object.defineProperty(exports, "BabylonAnimation", { enumerable: true, get: function () { return animation_1.Animation; } });
|
|
4
|
+
exports.BabylonHelper = exports.PlacementAnimation = exports.SceneManager = exports.EventBroadcaster = exports.Element = exports.DirectionalLight = exports.HemisphericLight = exports.BabylonAnimation = exports.Texture = exports.MeshBuilder = exports.CubeTexture = exports.DynamicTexture = exports.ArcRotateCamera = exports.Engine = exports.Scene = exports.StandardMaterial = exports.PBRMaterial = exports.Material = exports.Node = exports.TransformNode = exports.Mesh = exports.InstancedMesh = exports.AbstractMesh = exports.Vector3 = exports.Color4 = exports.Color3 = exports.VariantInstance = exports.Parameter = exports.Event = exports.EventEmitter = exports.Emitter = exports.ElementParameterizable = exports.ParameterObservable = exports.Viewer = exports.VariantInstanceManager = exports.Variant = exports.AnimationManager = void 0;
|
|
7
5
|
var arcRotateCamera_1 = require("@babylonjs/core/Cameras/arcRotateCamera");
|
|
8
6
|
Object.defineProperty(exports, "ArcRotateCamera", { enumerable: true, get: function () { return arcRotateCamera_1.ArcRotateCamera; } });
|
|
9
7
|
var engine_1 = require("@babylonjs/core/Engines/engine");
|
|
10
8
|
Object.defineProperty(exports, "Engine", { enumerable: true, get: function () { return engine_1.Engine; } });
|
|
11
|
-
var directionalLight_1 = require("@babylonjs/core/Lights/directionalLight");
|
|
12
|
-
Object.defineProperty(exports, "DirectionalLight", { enumerable: true, get: function () { return directionalLight_1.DirectionalLight; } });
|
|
13
|
-
var hemisphericLight_1 = require("@babylonjs/core/Lights/hemisphericLight");
|
|
14
|
-
Object.defineProperty(exports, "HemisphericLight", { enumerable: true, get: function () { return hemisphericLight_1.HemisphericLight; } });
|
|
15
9
|
var material_1 = require("@babylonjs/core/Materials/material");
|
|
16
10
|
Object.defineProperty(exports, "Material", { enumerable: true, get: function () { return material_1.Material; } });
|
|
17
11
|
var pbrMaterial_1 = require("@babylonjs/core/Materials/PBR/pbrMaterial");
|
|
18
12
|
Object.defineProperty(exports, "PBRMaterial", { enumerable: true, get: function () { return pbrMaterial_1.PBRMaterial; } });
|
|
19
13
|
var standardMaterial_1 = require("@babylonjs/core/Materials/standardMaterial");
|
|
20
14
|
Object.defineProperty(exports, "StandardMaterial", { enumerable: true, get: function () { return standardMaterial_1.StandardMaterial; } });
|
|
21
|
-
var cubeTexture_1 = require("@babylonjs/core/Materials/Textures/cubeTexture");
|
|
22
|
-
Object.defineProperty(exports, "CubeTexture", { enumerable: true, get: function () { return cubeTexture_1.CubeTexture; } });
|
|
23
15
|
var dynamicTexture_1 = require("@babylonjs/core/Materials/Textures/dynamicTexture");
|
|
24
16
|
Object.defineProperty(exports, "DynamicTexture", { enumerable: true, get: function () { return dynamicTexture_1.DynamicTexture; } });
|
|
25
|
-
var texture_1 = require("@babylonjs/core/Materials/Textures/texture");
|
|
26
|
-
Object.defineProperty(exports, "Texture", { enumerable: true, get: function () { return texture_1.Texture; } });
|
|
27
17
|
var math_color_1 = require("@babylonjs/core/Maths/math.color");
|
|
28
18
|
Object.defineProperty(exports, "Color3", { enumerable: true, get: function () { return math_color_1.Color3; } });
|
|
29
19
|
Object.defineProperty(exports, "Color4", { enumerable: true, get: function () { return math_color_1.Color4; } });
|
|
@@ -35,53 +25,59 @@ var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
|
|
|
35
25
|
Object.defineProperty(exports, "InstancedMesh", { enumerable: true, get: function () { return instancedMesh_1.InstancedMesh; } });
|
|
36
26
|
var mesh_1 = require("@babylonjs/core/Meshes/mesh");
|
|
37
27
|
Object.defineProperty(exports, "Mesh", { enumerable: true, get: function () { return mesh_1.Mesh; } });
|
|
38
|
-
var meshBuilder_1 = require("@babylonjs/core/Meshes/meshBuilder");
|
|
39
|
-
Object.defineProperty(exports, "MeshBuilder", { enumerable: true, get: function () { return meshBuilder_1.MeshBuilder; } });
|
|
40
28
|
var transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
|
|
41
29
|
Object.defineProperty(exports, "TransformNode", { enumerable: true, get: function () { return transformNode_1.TransformNode; } });
|
|
42
30
|
var node_1 = require("@babylonjs/core/node");
|
|
43
31
|
Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return node_1.Node; } });
|
|
44
|
-
/**
|
|
45
|
-
* Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
|
|
46
|
-
* errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
|
|
47
|
-
* version of the viewer (e.g. when pulling it from NPM etc.)...
|
|
48
|
-
*/
|
|
49
|
-
require("@babylonjs/core/Rendering/boundingBoxRenderer");
|
|
50
32
|
var scene_1 = require("@babylonjs/core/scene");
|
|
51
33
|
Object.defineProperty(exports, "Scene", { enumerable: true, get: function () { return scene_1.Scene; } });
|
|
52
|
-
var
|
|
53
|
-
Object.defineProperty(exports, "
|
|
54
|
-
var
|
|
55
|
-
Object.defineProperty(exports, "
|
|
56
|
-
var eventemitter3_1 = require("eventemitter3");
|
|
57
|
-
Object.defineProperty(exports, "EventEmitter", { enumerable: true, get: function () { return eventemitter3_1.EventEmitter; } });
|
|
58
|
-
var element_1 = require("./api/classes/element");
|
|
59
|
-
Object.defineProperty(exports, "Element", { enumerable: true, get: function () { return element_1.Element; } });
|
|
34
|
+
var variantInstance_1 = require("./api/classes/variantInstance");
|
|
35
|
+
Object.defineProperty(exports, "VariantInstance", { enumerable: true, get: function () { return variantInstance_1.VariantInstance; } });
|
|
36
|
+
var viewer_1 = require("./api/classes/viewer");
|
|
37
|
+
Object.defineProperty(exports, "Viewer", { enumerable: true, get: function () { return viewer_1.Viewer; } });
|
|
60
38
|
var event_1 = require("./api/classes/event");
|
|
61
|
-
Object.defineProperty(exports, "Emitter", { enumerable: true, get: function () { return event_1.emitter; } });
|
|
62
39
|
Object.defineProperty(exports, "Event", { enumerable: true, get: function () { return event_1.Event; } });
|
|
63
|
-
|
|
64
|
-
|
|
40
|
+
Object.defineProperty(exports, "Emitter", { enumerable: true, get: function () { return event_1.emitter; } });
|
|
41
|
+
var eventemitter3_1 = require("eventemitter3");
|
|
42
|
+
Object.defineProperty(exports, "EventEmitter", { enumerable: true, get: function () { return eventemitter3_1.EventEmitter; } });
|
|
65
43
|
var parameter_1 = require("./api/classes/parameter");
|
|
66
44
|
Object.defineProperty(exports, "Parameter", { enumerable: true, get: function () { return parameter_1.Parameter; } });
|
|
67
|
-
var
|
|
68
|
-
Object.defineProperty(exports, "
|
|
69
|
-
var
|
|
70
|
-
Object.defineProperty(exports, "
|
|
45
|
+
var cubeTexture_1 = require("@babylonjs/core/Materials/Textures/cubeTexture");
|
|
46
|
+
Object.defineProperty(exports, "CubeTexture", { enumerable: true, get: function () { return cubeTexture_1.CubeTexture; } });
|
|
47
|
+
var animation_1 = require("@babylonjs/core/Animations/animation");
|
|
48
|
+
Object.defineProperty(exports, "BabylonAnimation", { enumerable: true, get: function () { return animation_1.Animation; } });
|
|
49
|
+
var meshBuilder_1 = require("@babylonjs/core/Meshes/meshBuilder");
|
|
50
|
+
Object.defineProperty(exports, "MeshBuilder", { enumerable: true, get: function () { return meshBuilder_1.MeshBuilder; } });
|
|
51
|
+
var texture_1 = require("@babylonjs/core/Materials/Textures/texture");
|
|
52
|
+
Object.defineProperty(exports, "Texture", { enumerable: true, get: function () { return texture_1.Texture; } });
|
|
53
|
+
var directionalLight_1 = require("@babylonjs/core/Lights/directionalLight");
|
|
54
|
+
Object.defineProperty(exports, "DirectionalLight", { enumerable: true, get: function () { return directionalLight_1.DirectionalLight; } });
|
|
55
|
+
var hemisphericLight_1 = require("@babylonjs/core/Lights/hemisphericLight");
|
|
56
|
+
Object.defineProperty(exports, "HemisphericLight", { enumerable: true, get: function () { return hemisphericLight_1.HemisphericLight; } });
|
|
71
57
|
var variant_1 = require("./api/classes/variant");
|
|
72
58
|
Object.defineProperty(exports, "Variant", { enumerable: true, get: function () { return variant_1.Variant; } });
|
|
73
|
-
var
|
|
74
|
-
Object.defineProperty(exports, "
|
|
75
|
-
var
|
|
76
|
-
Object.defineProperty(exports, "
|
|
77
|
-
var
|
|
78
|
-
Object.defineProperty(exports, "
|
|
59
|
+
var parameterObservable_1 = require("./api/classes/parameterObservable");
|
|
60
|
+
Object.defineProperty(exports, "ParameterObservable", { enumerable: true, get: function () { return parameterObservable_1.ParameterObservable; } });
|
|
61
|
+
var elementParameterizable_1 = require("./api/classes/elementParameterizable");
|
|
62
|
+
Object.defineProperty(exports, "ElementParameterizable", { enumerable: true, get: function () { return elementParameterizable_1.ElementParameterizable; } });
|
|
63
|
+
var element_1 = require("./api/classes/element");
|
|
64
|
+
Object.defineProperty(exports, "Element", { enumerable: true, get: function () { return element_1.Element; } });
|
|
65
|
+
var variantInstanceManager_1 = require("./api/manager/variantInstanceManager");
|
|
66
|
+
Object.defineProperty(exports, "VariantInstanceManager", { enumerable: true, get: function () { return variantInstanceManager_1.VariantInstanceManager; } });
|
|
79
67
|
var animationManager_1 = require("./api/manager/animationManager");
|
|
80
68
|
Object.defineProperty(exports, "AnimationManager", { enumerable: true, get: function () { return animationManager_1.AnimationManager; } });
|
|
69
|
+
var eventBroadcaster_1 = require("./api/classes/eventBroadcaster");
|
|
70
|
+
Object.defineProperty(exports, "EventBroadcaster", { enumerable: true, get: function () { return eventBroadcaster_1.EventBroadcaster; } });
|
|
81
71
|
var sceneManager_1 = require("./api/manager/sceneManager");
|
|
82
72
|
Object.defineProperty(exports, "SceneManager", { enumerable: true, get: function () { return sceneManager_1.SceneManager; } });
|
|
83
|
-
var
|
|
84
|
-
Object.defineProperty(exports, "
|
|
73
|
+
var placementAnimation_1 = require("./api/classes/placementAnimation");
|
|
74
|
+
Object.defineProperty(exports, "PlacementAnimation", { enumerable: true, get: function () { return placementAnimation_1.PlacementAnimation; } });
|
|
85
75
|
var BabylonHelper = require("./api/util/babylonHelper");
|
|
86
76
|
exports.BabylonHelper = BabylonHelper;
|
|
77
|
+
/**
|
|
78
|
+
* Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
|
|
79
|
+
* errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
|
|
80
|
+
* version of the viewer (e.g. when pulling it from NPM etc.)...
|
|
81
|
+
*/
|
|
82
|
+
require("@babylonjs/core/Rendering/boundingBoxRenderer");
|
|
87
83
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,gDAAgD;;;AAEhD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,gDAAgD;;;AAEhD,2EAA0E;AAuEzE,gGAvEQ,iCAAe,OAuER;AAtEhB,yDAAwD;AAqEvD,uFArEQ,eAAM,OAqER;AApEP,+DAA8D;AAgE7D,yFAhEQ,mBAAQ,OAgER;AA/DT,yEAAwE;AAgEvE,4FAhEQ,yBAAW,OAgER;AA/DZ,+EAA8E;AAgE7E,iGAhEQ,mCAAgB,OAgER;AA/DjB,oFAAmF;AAmElF,+FAnEQ,+BAAc,OAmER;AAlEf,+DAAkE;AAoDjE,uFApDQ,mBAAM,OAoDR;AACN,uFArDgB,mBAAM,OAqDhB;AApDP,iEAA4D;AAqD3D,wFArDQ,qBAAO,OAqDR;AApDR,oEAAmE;AAqDlE,6FArDQ,2BAAY,OAqDR;AApDb,sEAAqE;AAqDpE,8FArDQ,6BAAa,OAqDR;AApDd,oDAAmD;AAqDlD,qFArDQ,WAAI,OAqDR;AApDL,sEAAqE;AAqDpE,8FArDQ,6BAAa,OAqDR;AApDd,6CAA4C;AAqD3C,qFArDQ,WAAI,OAqDR;AApDL,+CAA8C;AAwD7C,sFAxDQ,aAAK,OAwDR;AAvDN,iEAAgE;AA2C/D,gGA3CQ,iCAAe,OA2CR;AA1ChB,+CAA8C;AAmC7C,uFAnCQ,eAAM,OAmCR;AAlCP,6CAAqD;AAuCpD,sFAvCQ,aAAK,OAuCR;AAFM,wFArCI,eAAO,OAqCJ;AApCnB,+CAA6C;AAqC5C,6FArCQ,4BAAY,OAqCR;AApCb,qDAAoD;AAsCnD,0FAtCQ,qBAAS,OAsCR;AArCV,8EAA6E;AAsD5E,4FAtDQ,yBAAW,OAsDR;AArDZ,kEAAqF;AAwDpF,iGAxDqB,qBAAgB,OAwDrB;AAvDjB,kEAAiE;AAqDhE,4FArDQ,yBAAW,OAqDR;AApDZ,sEAAqE;AAqDpE,wFArDQ,iBAAO,OAqDR;AApDR,4EAA2E;AAuD1E,iGAvDQ,mCAAgB,OAuDR;AAtDjB,4EAA2E;AAqD1E,iGArDQ,mCAAgB,OAqDR;AApDjB,iDAAgD;AAuB/C,wFAvBQ,iBAAO,OAuBR;AAtBR,yEAAwE;AAyBvE,oGAzBQ,yCAAmB,OAyBR;AAxBpB,+EAA8E;AAyB7E,uGAzBQ,+CAAsB,OAyBR;AAxBvB,iDAAgD;AAmD/C,wFAnDQ,iBAAO,OAmDR;AAlDR,+EAA8E;AAoB7E,uGApBQ,+CAAsB,OAoBR;AAnBvB,mEAAkE;AAiBjE,iGAjBQ,mCAAgB,OAiBR;AAhBjB,mEAAkE;AAiDjE,iGAjDQ,mCAAgB,OAiDR;AAhDjB,2DAA0D;AAiDzD,6FAjDQ,2BAAY,OAiDR;AAhDb,uEAAsE;AAiDrE,mGAjDQ,uCAAkB,OAiDR;AAhDnB,wDAA0D;AAiDzD,sCAAa;AA/Cd;;;;GAIG;AACH,yDAAuD"}
|
package/package.json
CHANGED
|
@@ -1,40 +1,35 @@
|
|
|
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 { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
|
|
6
4
|
import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
|
|
5
|
+
import { Axis, Space } from '@babylonjs/core/Maths/math.axis';
|
|
7
6
|
import { Color3 } from '@babylonjs/core/Maths/math.color';
|
|
8
7
|
import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
|
|
9
8
|
import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
|
|
10
9
|
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
11
10
|
import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
|
|
12
|
-
import { get, isArray, isNumber, isPlainObject, merge, union } from 'lodash-es';
|
|
11
|
+
import { cloneDeep, concat, get, isArray, isNumber, isPlainObject, merge, union } from 'lodash-es';
|
|
13
12
|
import {
|
|
14
13
|
activateTransformNode as activate,
|
|
15
14
|
addToHighlightLayer,
|
|
16
|
-
addToShadowGenerator,
|
|
17
15
|
assertTransformNode,
|
|
18
16
|
cloneTransformNode,
|
|
19
17
|
cloneTransformNodeMaterial,
|
|
20
18
|
deactivateTransformNode as deactivate,
|
|
21
19
|
getClientRectFromMesh,
|
|
22
|
-
|
|
20
|
+
injectTransformNodeMetadata,
|
|
23
21
|
mapToDottedNodes,
|
|
24
|
-
moveTransformNode,
|
|
25
22
|
removeFromHighlightLayer,
|
|
26
|
-
removeFromShadowGenerator,
|
|
27
|
-
rotateTransformNode,
|
|
28
23
|
setMaterial,
|
|
29
24
|
setMaterialColor,
|
|
30
25
|
setMaterialMetallness,
|
|
31
26
|
setMaterialRoughness,
|
|
32
|
-
setMaterialTexture
|
|
33
|
-
setReceiveShadows
|
|
27
|
+
setMaterialTexture
|
|
34
28
|
} from '../util/babylonHelper';
|
|
35
|
-
import {
|
|
36
|
-
import { VariantParameterizable } from './../classes/variantParameterizable';
|
|
29
|
+
import { createImageFromSvg, createImageFromImgSrc, mergeMaps } from '../util/resourceHelper';
|
|
37
30
|
import { DottedPath } from './dottedPath';
|
|
31
|
+
import { ElementParameterizable } from './elementParameterizable';
|
|
32
|
+
import { Event } from './event';
|
|
38
33
|
import { Parameter } from './parameter';
|
|
39
34
|
import { Variant } from './variant';
|
|
40
35
|
|
|
@@ -45,20 +40,22 @@ import { Variant } from './variant';
|
|
|
45
40
|
* When used in typings, refer to via its alias {@link VariantElement} to prevent name clashes with the web APIs
|
|
46
41
|
* [Element](https://developer.mozilla.org/en-US/docs/Web/API/Element) class
|
|
47
42
|
*/
|
|
48
|
-
export class Element extends
|
|
49
|
-
|
|
50
|
-
public readonly nodes: TransformNode[] = [];
|
|
43
|
+
export class Element extends ElementParameterizable {
|
|
51
44
|
|
|
52
45
|
protected readonly _dottedNodes: Map<DottedPath, TransformNode> = new Map();
|
|
53
46
|
|
|
47
|
+
protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
|
|
48
|
+
|
|
54
49
|
protected _highlightLayer?: HighlightLayer;
|
|
55
50
|
|
|
51
|
+
public readonly nodes: TransformNode[] = [];
|
|
52
|
+
|
|
56
53
|
/**
|
|
57
54
|
* Constructor.
|
|
58
55
|
*/
|
|
59
|
-
|
|
56
|
+
public constructor( public readonly variant: Variant,
|
|
60
57
|
public readonly name: string ) {
|
|
61
|
-
super(
|
|
58
|
+
super();
|
|
62
59
|
if ( process.env.NODE_ENV?.toLowerCase().includes('dev')) {
|
|
63
60
|
this.assertPathDefinitions();
|
|
64
61
|
}
|
|
@@ -73,13 +70,6 @@ export class Element extends VariantParameterizable {
|
|
|
73
70
|
this.addParameterObservers();
|
|
74
71
|
}
|
|
75
72
|
|
|
76
|
-
/**
|
|
77
|
-
* Creates an {@link Element} with given name.
|
|
78
|
-
*/
|
|
79
|
-
public static async create( variant: Variant, name: string ): Promise<Element> {
|
|
80
|
-
return new Element( variant, name );
|
|
81
|
-
}
|
|
82
|
-
|
|
83
73
|
/**
|
|
84
74
|
* The {@link DottedPath} in the built tree of {@link Element}s.
|
|
85
75
|
* E.g. "_.top-1.sub-2.sub-sub-3.el-1"
|
|
@@ -166,9 +156,10 @@ export class Element extends VariantParameterizable {
|
|
|
166
156
|
* Gets a node by its {@link DottedPath}.
|
|
167
157
|
*/
|
|
168
158
|
public getNode( dottedPath: DottedPathArgument ): TransformNode {
|
|
169
|
-
// TODO: fix, currently broken
|
|
170
159
|
const _dottedPath = DottedPath.create( dottedPath );
|
|
171
|
-
const
|
|
160
|
+
const keys = Array.from( this._dottedNodes.keys() ).map( dp => dp.path );
|
|
161
|
+
const values = Array.from( this._dottedNodes.values() );
|
|
162
|
+
const node = values[keys.indexOf( _dottedPath.path )];
|
|
172
163
|
if( !node ) {
|
|
173
164
|
throw new Error( `Node with path "${_dottedPath.path}" does not exist for element "${this.id}".` );
|
|
174
165
|
}
|
|
@@ -221,11 +212,41 @@ export class Element extends VariantParameterizable {
|
|
|
221
212
|
}
|
|
222
213
|
|
|
223
214
|
/**
|
|
224
|
-
* @
|
|
215
|
+
* Places the given {@link ParameterBag} in the {@link Element}'s parameters, replaces all patterns in the
|
|
216
|
+
* {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
|
|
217
|
+
*
|
|
225
218
|
* @emit {@link Event.ELEMENT_PARAMETER_COMMITTED}
|
|
226
219
|
*/
|
|
227
|
-
public async commitParameters( parameters?: ParameterBag ): Promise<
|
|
228
|
-
|
|
220
|
+
public async commitParameters( parameters?: ParameterBag ): Promise<Element> {
|
|
221
|
+
if( !parameters ) {
|
|
222
|
+
parameters = {};
|
|
223
|
+
}
|
|
224
|
+
const oldParameters = cloneDeep( this.parameters );
|
|
225
|
+
merge( this.parameters, parameters );
|
|
226
|
+
// handle parameter observers
|
|
227
|
+
let observerPromises: Promise<void | ParameterObserver>[] = [];
|
|
228
|
+
for( const parameter in this.parameters ) {
|
|
229
|
+
const oldParameterValue = oldParameters[parameter];
|
|
230
|
+
const newParameterValue = this.parameters[parameter];
|
|
231
|
+
this.variant.assertParameter( this.variant.inheritedParameterDeclaration, parameter, newParameterValue );
|
|
232
|
+
if( oldParameterValue === newParameterValue ) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
// parameter changed
|
|
236
|
+
const parameterObservers = mergeMaps( this._parameterObservers, this.parameterObservers );
|
|
237
|
+
if( parameterObservers.has( parameter ) ) {
|
|
238
|
+
const observers = parameterObservers.get( parameter )!;
|
|
239
|
+
observerPromises = concat(observerPromises, observers.map( observer => {
|
|
240
|
+
const observerResult = observer( this, oldParameterValue, newParameterValue );
|
|
241
|
+
return Promise.resolve( observerResult ).then( () => {
|
|
242
|
+
this.broadcastEvent( Event.ELEMENT_PARAMETER_COMMITTED,
|
|
243
|
+
this, parameter, oldParameterValue, newParameterValue );
|
|
244
|
+
} );
|
|
245
|
+
} ) );
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
await Promise.all( observerPromises );
|
|
249
|
+
return this;
|
|
229
250
|
}
|
|
230
251
|
|
|
231
252
|
/**
|
|
@@ -260,7 +281,7 @@ export class Element extends VariantParameterizable {
|
|
|
260
281
|
* Draws a `ImageBitmap` or `OffscreenCanvas` onto a `paintable` defined via {@link PaintableDefinition}.
|
|
261
282
|
*/
|
|
262
283
|
public drawPaintable( paintable: string, imageSource: CanvasImageSource ): Element {
|
|
263
|
-
|
|
284
|
+
// node and material checks and preperation
|
|
264
285
|
const node = this.getPaintableNode( paintable );
|
|
265
286
|
if( !(node instanceof AbstractMesh) ) {
|
|
266
287
|
throw new Error( `The path must be an instance of "AbstractMesh" for paintable "${paintable}" ` +
|
|
@@ -275,12 +296,15 @@ export class Element extends VariantParameterizable {
|
|
|
275
296
|
node.material.transparencyMode = Material.MATERIAL_ALPHATESTANDBLEND;
|
|
276
297
|
if( !get( node.metadata, 'dirty.material.texture' ) ) {
|
|
277
298
|
// inject initial value and mark as dirty
|
|
278
|
-
|
|
299
|
+
injectTransformNodeMetadata( node, { dirty: { material: { texture: true } } } );
|
|
279
300
|
}
|
|
301
|
+
|
|
302
|
+
// consider width and height of the paintable
|
|
280
303
|
const widthAndHeight = {
|
|
281
304
|
width: imageSource.width,
|
|
282
305
|
height: imageSource.height
|
|
283
306
|
};
|
|
307
|
+
const paintableDefinition = this.getPaintableDefinition( paintable );
|
|
284
308
|
if( isNumber( paintableDefinition.textureOptions ) ) {
|
|
285
309
|
widthAndHeight.width = paintableDefinition.textureOptions;
|
|
286
310
|
widthAndHeight.height = paintableDefinition.textureOptions;
|
|
@@ -288,17 +312,23 @@ export class Element extends VariantParameterizable {
|
|
|
288
312
|
widthAndHeight.width = paintableDefinition.textureOptions.width;
|
|
289
313
|
widthAndHeight.height = paintableDefinition.textureOptions.height;
|
|
290
314
|
}
|
|
315
|
+
|
|
316
|
+
// create dynamic texture on which the image can be drawn
|
|
291
317
|
const texture = new DynamicTexture(
|
|
292
318
|
`${this.id}.${paintable}.texture`,
|
|
293
319
|
widthAndHeight,
|
|
294
320
|
this.variant.viewer.scene,
|
|
295
321
|
false
|
|
296
322
|
);
|
|
297
|
-
|
|
323
|
+
|
|
324
|
+
// draw image on texture
|
|
298
325
|
const ctx = texture.getContext();
|
|
299
|
-
// flip texture context horizontal with translate and scale
|
|
300
326
|
ctx.drawImage( imageSource, 0, 0);
|
|
301
327
|
texture.update( false );
|
|
328
|
+
|
|
329
|
+
// finally apply the texture on the desired node material
|
|
330
|
+
setMaterialTexture( node, texture, false );
|
|
331
|
+
|
|
302
332
|
return this;
|
|
303
333
|
}
|
|
304
334
|
|
|
@@ -306,16 +336,16 @@ export class Element extends VariantParameterizable {
|
|
|
306
336
|
* Draws a SVG string onto a `paintable` defined via {@link PaintableDefinition}.
|
|
307
337
|
*/
|
|
308
338
|
public async drawPaintableFromSvg( paintable: string, svgSource: string ): Promise<Element> {
|
|
309
|
-
const
|
|
310
|
-
return this.drawPaintable( paintable,
|
|
339
|
+
const image = await createImageFromSvg( svgSource );
|
|
340
|
+
return this.drawPaintable( paintable, image );
|
|
311
341
|
}
|
|
312
342
|
|
|
313
343
|
/**
|
|
314
344
|
* Draws an Image from source (URL/URI) onto a `paintable` defined via {@link PaintableDefinition}.
|
|
315
345
|
*/
|
|
316
346
|
public async drawPaintableFromImgSrc( paintable: string, imgSource: string ): Promise<Element> {
|
|
317
|
-
const
|
|
318
|
-
return this.drawPaintable( paintable,
|
|
347
|
+
const image = await createImageFromImgSrc( imgSource );
|
|
348
|
+
return this.drawPaintable( paintable, image );
|
|
319
349
|
}
|
|
320
350
|
|
|
321
351
|
/**
|
|
@@ -332,12 +362,12 @@ export class Element extends VariantParameterizable {
|
|
|
332
362
|
}
|
|
333
363
|
if( visible === true ) {
|
|
334
364
|
element.nodes.forEach( node => {
|
|
335
|
-
|
|
365
|
+
injectTransformNodeMetadata( node, { visibility: node.isEnabled() } );
|
|
336
366
|
activate( node );
|
|
337
367
|
} );
|
|
338
368
|
} else if( visible === false ) {
|
|
339
369
|
element.nodes.forEach( node => {
|
|
340
|
-
|
|
370
|
+
injectTransformNodeMetadata( node, { visibility: node.isEnabled() } );
|
|
341
371
|
deactivate( node );
|
|
342
372
|
} );
|
|
343
373
|
}
|
|
@@ -353,7 +383,7 @@ export class Element extends VariantParameterizable {
|
|
|
353
383
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
354
384
|
const material = element.variant.getMaterial( newValue.toString() );
|
|
355
385
|
element.nodes.forEach( node => {
|
|
356
|
-
assertTransformNode(node, (node:
|
|
386
|
+
assertTransformNode(node, (node: TransformNode) => {
|
|
357
387
|
if( node instanceof InstancedMesh ) {
|
|
358
388
|
throw new Error( `Changing parameter "${Parameter.MATERIAL}" ` +
|
|
359
389
|
`of an InstancedMesh is not supported. ` +
|
|
@@ -368,7 +398,7 @@ export class Element extends VariantParameterizable {
|
|
|
368
398
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
369
399
|
const color = Parameter.parseColor( newValue );
|
|
370
400
|
element.nodes.forEach( node => {
|
|
371
|
-
assertTransformNode(node, (node:
|
|
401
|
+
assertTransformNode(node, (node: TransformNode) => {
|
|
372
402
|
if( node instanceof InstancedMesh ) {
|
|
373
403
|
throw new Error( `Changing parameter "${Parameter.MATERIAL_COLOR}" ` +
|
|
374
404
|
`of an InstancedMesh is not supported. ` +
|
|
@@ -380,7 +410,7 @@ export class Element extends VariantParameterizable {
|
|
|
380
410
|
}
|
|
381
411
|
if( !get( node.metadata, 'dirty.material.color' ) ) {
|
|
382
412
|
// inject initial value and mark as dirty
|
|
383
|
-
|
|
413
|
+
injectTransformNodeMetadata( node, { dirty: { material: { color: oldValue } } } );
|
|
384
414
|
}
|
|
385
415
|
setMaterialColor( node, color );
|
|
386
416
|
} );
|
|
@@ -390,7 +420,7 @@ export class Element extends VariantParameterizable {
|
|
|
390
420
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
391
421
|
const metallness = Parameter.parseNumber( newValue );
|
|
392
422
|
element.nodes.forEach( node => {
|
|
393
|
-
assertTransformNode(node, (node:
|
|
423
|
+
assertTransformNode(node, (node: TransformNode) => {
|
|
394
424
|
if( node instanceof InstancedMesh ) {
|
|
395
425
|
throw new Error( `Changing parameter "${Parameter.MATERIAL_METALLNESS}" ` +
|
|
396
426
|
`of an InstancedMesh is not supported. ` +
|
|
@@ -402,7 +432,7 @@ export class Element extends VariantParameterizable {
|
|
|
402
432
|
}
|
|
403
433
|
if( !get( node.metadata, 'dirty.material.metallness' ) ) {
|
|
404
434
|
// inject initial value and mark as dirty
|
|
405
|
-
|
|
435
|
+
injectTransformNodeMetadata( node, { dirty: { material: { metallness: oldValue } } } );
|
|
406
436
|
}
|
|
407
437
|
setMaterialMetallness( node, metallness );
|
|
408
438
|
} );
|
|
@@ -412,7 +442,7 @@ export class Element extends VariantParameterizable {
|
|
|
412
442
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
413
443
|
const roughness = Parameter.parseNumber( newValue );
|
|
414
444
|
element.nodes.forEach( node => {
|
|
415
|
-
assertTransformNode(node, (node:
|
|
445
|
+
assertTransformNode(node, (node: TransformNode) => {
|
|
416
446
|
if( node instanceof InstancedMesh ) {
|
|
417
447
|
throw new Error( `Changing parameter "${Parameter.MATERIAL_ROUGHNESS}" ` +
|
|
418
448
|
`of an InstancedMesh is not supported. ` +
|
|
@@ -424,7 +454,7 @@ export class Element extends VariantParameterizable {
|
|
|
424
454
|
}
|
|
425
455
|
if( !get( node.metadata, 'dirty.material.roughness' ) ) {
|
|
426
456
|
// inject initial value and mark as dirty
|
|
427
|
-
|
|
457
|
+
injectTransformNodeMetadata( node, { dirty: { material: { roughness: oldValue } } } );
|
|
428
458
|
}
|
|
429
459
|
setMaterialRoughness( node, roughness );
|
|
430
460
|
} );
|
|
@@ -480,7 +510,7 @@ export class Element extends VariantParameterizable {
|
|
|
480
510
|
// Add/Remove meshes to previously created highlight layers.
|
|
481
511
|
if( highlighted === true ) {
|
|
482
512
|
element.nodes.forEach( node => {
|
|
483
|
-
assertTransformNode(node, (node:
|
|
513
|
+
assertTransformNode(node, (node: TransformNode) => {
|
|
484
514
|
if( node instanceof InstancedMesh ) {
|
|
485
515
|
throw new Error( `Changing parameter "${Parameter.HIGHLIGHTED}" ` +
|
|
486
516
|
`of an InstancedMesh is not supported. ` +
|
|
@@ -507,54 +537,35 @@ export class Element extends VariantParameterizable {
|
|
|
507
537
|
this._parameterObservers.set( Parameter.POSITION, [
|
|
508
538
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
509
539
|
// we have to deal just with root nodes here due to relative impacts in a node tree
|
|
510
|
-
element.nodes.forEach( node =>
|
|
540
|
+
element.nodes.forEach( node => {
|
|
541
|
+
// remember absolute position and reset it before translating
|
|
542
|
+
if( !get( node.metadata, 'position' ) ) {
|
|
543
|
+
node.metadata.position = node.absolutePosition.clone();
|
|
544
|
+
}
|
|
545
|
+
node.setAbsolutePosition( node.metadata.position );
|
|
546
|
+
// move
|
|
547
|
+
const distance = Parameter.parseVector( newValue );
|
|
548
|
+
node.translate( Axis.X, distance.x, Space.WORLD );
|
|
549
|
+
node.translate( Axis.Y, distance.y, Space.WORLD );
|
|
550
|
+
node.translate( Axis.Z, distance.z, Space.WORLD );
|
|
551
|
+
} );
|
|
511
552
|
}
|
|
512
553
|
] );
|
|
513
554
|
this._parameterObservers.set( Parameter.ROTATION, [
|
|
514
555
|
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
515
556
|
// we have to deal just with root nodes here due to relative impacts in a node tree
|
|
516
|
-
element.nodes.forEach( node =>
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
521
|
-
let castShadow;
|
|
522
|
-
try {
|
|
523
|
-
castShadow = Parameter.parseBoolean( newValue );
|
|
524
|
-
} catch( e ) {
|
|
525
|
-
return;
|
|
526
|
-
}
|
|
527
|
-
let lightCsl = element.inheritedParameters[Parameter.CAST_SHADOW_FROM_LIGHTS];
|
|
528
|
-
if( ! lightCsl ) {
|
|
529
|
-
lightCsl = element.variant.inheritedViewerLights.map( l => l.name ).join( ',' );
|
|
530
|
-
}
|
|
531
|
-
if( castShadow === true ) {
|
|
532
|
-
await this.castShadowValueHandler( lightCsl, addToShadowGenerator );
|
|
533
|
-
}
|
|
534
|
-
if( castShadow === false ) {
|
|
535
|
-
await this.castShadowValueHandler( lightCsl, removeFromShadowGenerator );
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
] );
|
|
539
|
-
this._parameterObservers.set( Parameter.CAST_SHADOW_FROM_LIGHTS, [
|
|
540
|
-
async ( element: Element, oldValue: ParameterValue, newValue: ParameterValue ) => {
|
|
541
|
-
// TODO: Possible performance issue in combination with CAST_SHADOW, since both observers are initially called
|
|
542
|
-
// when CAST_SHADOW and CAST_SHADOW_FROM_LIGHTS are defined in the spec.
|
|
543
|
-
const lightCsl = element.variant.inheritedViewerLights.map( l => l.name ).join( ',' );
|
|
544
|
-
// cleanup all shadow generators
|
|
545
|
-
await this.castShadowValueHandler( lightCsl, removeFromShadowGenerator );
|
|
546
|
-
if( element.castShadow === true ) {
|
|
547
|
-
// if newValue is undefined or '' then set newValue to lightCsl (use all lights)
|
|
548
|
-
if( !newValue ) {
|
|
549
|
-
newValue = lightCsl;
|
|
557
|
+
element.nodes.forEach( node => {
|
|
558
|
+
// remember absolute rotation and reset it before translating
|
|
559
|
+
if(!get( node.metadata, 'rotation' ) ) {
|
|
560
|
+
node.metadata.rotation = node.rotation.clone();
|
|
550
561
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
562
|
+
node.rotation = node.metadata.rotation;
|
|
563
|
+
// rotate
|
|
564
|
+
const rotation = Parameter.parseRotation( newValue );
|
|
565
|
+
node.rotate( Axis.X, rotation.x, Space.WORLD );
|
|
566
|
+
node.rotate( Axis.Y, rotation.y, Space.WORLD );
|
|
567
|
+
node.rotate( Axis.Z, rotation.z, Space.WORLD );
|
|
568
|
+
} );
|
|
558
569
|
}
|
|
559
570
|
] );
|
|
560
571
|
return this;
|
|
@@ -603,25 +614,4 @@ export class Element extends VariantParameterizable {
|
|
|
603
614
|
} );
|
|
604
615
|
}
|
|
605
616
|
|
|
606
|
-
/**
|
|
607
|
-
* Handles callback for given light parameter.
|
|
608
|
-
*/
|
|
609
|
-
private async castShadowValueHandler( lightCsl: ParameterValue, mutator: CallableFunction ) {
|
|
610
|
-
let lights: Light[] = [];
|
|
611
|
-
for( const lightName of Parameter.parseCommaSeparatedList( lightCsl ) ) {
|
|
612
|
-
const viewerLight = await this.variant.getViewerLight( lightName );
|
|
613
|
-
if( viewerLight ) {
|
|
614
|
-
lights.push( viewerLight.light );
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
const shadowGenerators = lights
|
|
618
|
-
.map( light => light?.getShadowGenerator() as ShadowGenerator )
|
|
619
|
-
.filter( Boolean );
|
|
620
|
-
shadowGenerators.forEach( generator => {
|
|
621
|
-
this.nodes.forEach( node => {
|
|
622
|
-
mutator( generator, node );
|
|
623
|
-
} );
|
|
624
|
-
} );
|
|
625
|
-
}
|
|
626
|
-
|
|
627
617
|
}
|