@babylonjs/core 5.17.1 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Debug/debugLayer.d.ts +36 -0
- package/Debug/debugLayer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSource.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/{Helpers/eventFactory.d.ts → eventFactory.d.ts} +4 -4
- package/DeviceInput/{Helpers/eventFactory.js → eventFactory.js} +2 -2
- package/DeviceInput/eventFactory.js.map +1 -0
- package/DeviceInput/{InputDevices/inputInterfaces.d.ts → inputInterfaces.d.ts} +2 -2
- package/DeviceInput/{InputDevices/inputInterfaces.js → inputInterfaces.js} +0 -0
- package/DeviceInput/inputInterfaces.js.map +1 -0
- package/DeviceInput/{InputDevices/internalDeviceSourceManager.d.ts → internalDeviceSourceManager.d.ts} +7 -7
- package/DeviceInput/{InputDevices/internalDeviceSourceManager.js → internalDeviceSourceManager.js} +2 -2
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -0
- package/DeviceInput/{InputDevices/nativeDeviceInputSystem.d.ts → nativeDeviceInputSystem.d.ts} +2 -2
- package/DeviceInput/{InputDevices/nativeDeviceInputSystem.js → nativeDeviceInputSystem.js} +2 -2
- package/DeviceInput/nativeDeviceInputSystem.js.map +1 -0
- package/DeviceInput/{InputDevices/webDeviceInputSystem.d.ts → webDeviceInputSystem.d.ts} +3 -3
- package/DeviceInput/{InputDevices/webDeviceInputSystem.js → webDeviceInputSystem.js} +4 -4
- package/DeviceInput/webDeviceInputSystem.js.map +1 -0
- package/Engines/Extensions/engine.query.js +5 -1
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.transformFeedback.js +5 -1
- package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +13 -0
- package/Engines/Extensions/engine.views.js +16 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/engine.d.ts +15 -240
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +1 -1
- package/Engines/thinEngine.js +14 -4
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +31 -9
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +46 -14
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +94 -19
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +23 -6
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +48 -6
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +25 -17
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +25 -8
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +30 -9
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.d.ts +45 -15
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +53 -17
- package/Gizmos/positionGizmo.js +1 -1
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +35 -10
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +49 -18
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +16 -4
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +39 -0
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +97 -0
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -0
- package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/index.js +1 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +18 -0
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +85 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +6 -0
- package/Materials/Node/nodeMaterial.js +11 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +5 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +3 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +9 -5
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Maths/math.vector.d.ts +134 -8
- package/Maths/math.vector.js +168 -36
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Compression/dracoCompression.js +1 -1
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/groundMesh.js +1 -1
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/mesh.js +1 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/transformNode.js +1 -0
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/assetsManager.d.ts +9 -0
- package/Misc/assetsManager.js +3 -1
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +10 -4
- package/Misc/basis.js.map +1 -1
- package/Misc/computePressure.d.ts +9 -3
- package/Misc/computePressure.js +13 -5
- package/Misc/computePressure.js.map +1 -1
- package/Misc/fileTools.js +2 -2
- package/Misc/fileTools.js.map +1 -1
- package/Misc/iInspectable.d.ts +12 -2
- package/Misc/iInspectable.js +4 -0
- package/Misc/iInspectable.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +1 -1
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/sceneSerializer.js +1 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/tools.d.ts +2 -2
- package/Misc/tools.js +4 -1
- package/Misc/tools.js.map +1 -1
- package/Offline/database.js +6 -8
- package/Offline/database.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +1 -0
- package/Particles/solidParticleSystem.js +4 -1
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +2 -2
- package/Physics/Plugins/ammoJSPlugin.js +29 -29
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +2 -2
- package/Physics/Plugins/cannonJSPlugin.js +26 -26
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/Plugins/oimoJSPlugin.js +9 -11
- package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +6 -6
- package/Physics/physicsImpostor.js +15 -8
- package/Physics/physicsImpostor.js.map +1 -1
- package/Shaders/sprites.fragment.js +1 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Sprites/spriteRenderer.js +1 -1
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +10 -0
- package/XR/webXRDefaultExperience.js +2 -12
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +12 -12
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/node.d.ts +2 -0
- package/node.js +2 -0
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +1 -1
- package/scene.js +5 -3
- package/scene.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js.map +0 -1
- package/DeviceInput/InputDevices/inputInterfaces.js.map +0 -1
- package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +0 -1
- package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +0 -1
- package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +0 -1
|
@@ -1,14 +1,39 @@
|
|
|
1
|
+
import type { Observer } from "../Misc/observable";
|
|
1
2
|
import { Observable } from "../Misc/observable";
|
|
2
3
|
import type { Nullable } from "../types";
|
|
3
4
|
import { Color3 } from "../Maths/math.color";
|
|
4
5
|
import type { AbstractMesh } from "../Meshes/abstractMesh";
|
|
5
6
|
import type { Mesh } from "../Meshes/mesh";
|
|
6
|
-
import type { GizmoAxisCache } from "./gizmo";
|
|
7
|
+
import type { GizmoAxisCache, IGizmo } from "./gizmo";
|
|
7
8
|
import { Gizmo } from "./gizmo";
|
|
8
|
-
import {
|
|
9
|
+
import type { IPlaneRotationGizmo } from "./planeRotationGizmo";
|
|
9
10
|
import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
|
|
10
11
|
import type { Node } from "../node";
|
|
12
|
+
import type { PointerInfo } from "../Events/pointerEvents";
|
|
11
13
|
import type { GizmoManager } from "./gizmoManager";
|
|
14
|
+
/**
|
|
15
|
+
* Interface for rotation gizmo
|
|
16
|
+
*/
|
|
17
|
+
export interface IRotationGizmo extends IGizmo {
|
|
18
|
+
/** Internal gizmo used for interactions on the x axis */
|
|
19
|
+
xGizmo: IPlaneRotationGizmo;
|
|
20
|
+
/** Internal gizmo used for interactions on the y axis */
|
|
21
|
+
yGizmo: IPlaneRotationGizmo;
|
|
22
|
+
/** Internal gizmo used for interactions on the z axis */
|
|
23
|
+
zGizmo: IPlaneRotationGizmo;
|
|
24
|
+
/** Fires an event when any of it's sub gizmos are dragged */
|
|
25
|
+
onDragStartObservable: Observable<unknown>;
|
|
26
|
+
/** Fires an event when any of it's sub gizmos are released from dragging */
|
|
27
|
+
onDragEndObservable: Observable<unknown>;
|
|
28
|
+
/** Drag distance in babylon units that the gizmo will snap to when dragged */
|
|
29
|
+
snapDistance: number;
|
|
30
|
+
/**
|
|
31
|
+
* Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation
|
|
32
|
+
* @param mesh Axis gizmo mesh
|
|
33
|
+
* @param cache Gizmo axis definition used for reactive gizmo UI
|
|
34
|
+
*/
|
|
35
|
+
addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;
|
|
36
|
+
}
|
|
12
37
|
/**
|
|
13
38
|
* Options for each individual plane rotation gizmo contained within RotationGizmo
|
|
14
39
|
* @since 5.0.0
|
|
@@ -43,28 +68,28 @@ export interface RotationGizmoOptions {
|
|
|
43
68
|
/**
|
|
44
69
|
* Gizmo that enables rotating a mesh along 3 axis
|
|
45
70
|
*/
|
|
46
|
-
export declare class RotationGizmo extends Gizmo {
|
|
71
|
+
export declare class RotationGizmo extends Gizmo implements IRotationGizmo {
|
|
47
72
|
/**
|
|
48
73
|
* Internal gizmo used for interactions on the x axis
|
|
49
74
|
*/
|
|
50
|
-
xGizmo:
|
|
75
|
+
xGizmo: IPlaneRotationGizmo;
|
|
51
76
|
/**
|
|
52
77
|
* Internal gizmo used for interactions on the y axis
|
|
53
78
|
*/
|
|
54
|
-
yGizmo:
|
|
79
|
+
yGizmo: IPlaneRotationGizmo;
|
|
55
80
|
/**
|
|
56
81
|
* Internal gizmo used for interactions on the z axis
|
|
57
82
|
*/
|
|
58
|
-
zGizmo:
|
|
83
|
+
zGizmo: IPlaneRotationGizmo;
|
|
59
84
|
/** Fires an event when any of it's sub gizmos are dragged */
|
|
60
85
|
onDragStartObservable: Observable<unknown>;
|
|
61
86
|
/** Fires an event when any of it's sub gizmos are released from dragging */
|
|
62
87
|
onDragEndObservable: Observable<unknown>;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
88
|
+
protected _meshAttached: Nullable<AbstractMesh>;
|
|
89
|
+
protected _nodeAttached: Nullable<Node>;
|
|
90
|
+
protected _observables: Observer<PointerInfo>[];
|
|
66
91
|
/** Node Caching for quick lookup */
|
|
67
|
-
|
|
92
|
+
protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache>;
|
|
68
93
|
get attachedMesh(): Nullable<AbstractMesh>;
|
|
69
94
|
set attachedMesh(mesh: Nullable<AbstractMesh>);
|
|
70
95
|
get attachedNode(): Nullable<Node>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotationGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/rotationGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { GizmoAxisCache } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { PlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n\r\n/**\r\n * Options for each individual plane rotation gizmo contained within RotationGizmo\r\n * @since 5.0.0\r\n */\r\nexport interface PlaneRotationGizmoOptions {\r\n /**\r\n * Color to use for the plane rotation gizmo\r\n */\r\n color?: Color3;\r\n}\r\n\r\n/**\r\n * Additional options for each rotation gizmo\r\n */\r\nexport interface RotationGizmoOptions {\r\n /**\r\n * When set, the gizmo will always appear the same size no matter where the camera is (default: true)\r\n */\r\n updateScale?: boolean;\r\n\r\n /**\r\n * Specific options for xGizmo\r\n */\r\n xOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for yGizmo\r\n */\r\n yOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for zGizmo\r\n */\r\n zOptions?: PlaneRotationGizmoOptions;\r\n}\r\n\r\n/**\r\n * Gizmo that enables rotating a mesh along 3 axis\r\n */\r\nexport class RotationGizmo extends Gizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: PlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: PlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: PlaneRotationGizmo;\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n private _meshAttached: Nullable<AbstractMesh>;\r\n private _nodeAttached: Nullable<Node>;\r\n private _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n protected _checkBillboardTransform() {\r\n if (this._nodeAttached && (<TransformNode>this._nodeAttached).billboardMode) {\r\n console.log(\"Rotation Gizmo will not work with transforms in billboard mode.\");\r\n }\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a RotationGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager Gizmo manager\r\n * @param options More options\r\n */\r\n constructor(\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n useEulerRotation = false,\r\n thickness: number = 1,\r\n gizmoManager?: GizmoManager,\r\n options?: RotationGizmoOptions\r\n ) {\r\n super(gizmoLayer);\r\n const xColor = options && options.xOptions && options.xOptions.color ? options.xOptions.color : Color3.Red().scale(0.5);\r\n const yColor = options && options.yOptions && options.yOptions.color ? options.yOptions.color : Color3.Green().scale(0.5);\r\n const zColor = options && options.zOptions && options.zOptions.color ? options.zOptions.color : Color3.Blue().scale(0.5);\r\n this.xGizmo = new PlaneRotationGizmo(new Vector3(1, 0, 0), xColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.yGizmo = new PlaneRotationGizmo(new Vector3(0, 1, 0), yColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.zGizmo = new PlaneRotationGizmo(new Vector3(0, 0, 1), zColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n // Relay drag events and set update scale\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n //must set updateScale on each gizmo, as setting it on root RotationGizmo doesnt prevent individual gizmos from updating\r\n //currently updateScale is a property with no getter/setter, so no good way to override behavior at runtime, so we will at least set it on startup\r\n if (options && options.updateScale != undefined) {\r\n gizmo.updateScale = options.updateScale;\r\n }\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.snapDistance = value;\r\n this.yGizmo.snapDistance = value;\r\n this.zGizmo.snapDistance = value;\r\n }\r\n }\r\n public get snapDistance() {\r\n return this.xGizmo.snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.scaleRatio = value;\r\n this.yGizmo.scaleRatio = value;\r\n this.zGizmo.scaleRatio = value;\r\n }\r\n }\r\n public get scaleRatio() {\r\n return this.xGizmo.scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.xGizmo.dispose();\r\n this.yGizmo.dispose();\r\n this.zGizmo.dispose();\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n */\r\n public setCustomMesh() {\r\n Logger.Error(\r\n \"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)\"\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"rotationGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/rotationGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport type { IPlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { PlaneRotationGizmo } from \"./planeRotationGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n\r\n/**\r\n * Interface for rotation gizmo\r\n */\r\nexport interface IRotationGizmo extends IGizmo {\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IPlaneRotationGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IPlaneRotationGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<unknown>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<unknown>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n}\r\n\r\n/**\r\n * Options for each individual plane rotation gizmo contained within RotationGizmo\r\n * @since 5.0.0\r\n */\r\nexport interface PlaneRotationGizmoOptions {\r\n /**\r\n * Color to use for the plane rotation gizmo\r\n */\r\n color?: Color3;\r\n}\r\n\r\n/**\r\n * Additional options for each rotation gizmo\r\n */\r\nexport interface RotationGizmoOptions {\r\n /**\r\n * When set, the gizmo will always appear the same size no matter where the camera is (default: true)\r\n */\r\n updateScale?: boolean;\r\n\r\n /**\r\n * Specific options for xGizmo\r\n */\r\n xOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for yGizmo\r\n */\r\n yOptions?: PlaneRotationGizmoOptions;\r\n\r\n /**\r\n * Specific options for zGizmo\r\n */\r\n zOptions?: PlaneRotationGizmoOptions;\r\n}\r\n\r\n/**\r\n * Gizmo that enables rotating a mesh along 3 axis\r\n */\r\nexport class RotationGizmo extends Gizmo implements IRotationGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IPlaneRotationGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IPlaneRotationGizmo;\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n protected _meshAttached: Nullable<AbstractMesh>;\r\n protected _nodeAttached: Nullable<Node>;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n this._checkBillboardTransform();\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n protected _checkBillboardTransform() {\r\n if (this._nodeAttached && (<TransformNode>this._nodeAttached).billboardMode) {\r\n console.log(\"Rotation Gizmo will not work with transforms in billboard mode.\");\r\n }\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a RotationGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param tessellation Amount of tessellation to be used when creating rotation circles\r\n * @param useEulerRotation Use and update Euler angle instead of quaternion\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager Gizmo manager\r\n * @param options More options\r\n */\r\n constructor(\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n tessellation = 32,\r\n useEulerRotation = false,\r\n thickness: number = 1,\r\n gizmoManager?: GizmoManager,\r\n options?: RotationGizmoOptions\r\n ) {\r\n super(gizmoLayer);\r\n const xColor = options && options.xOptions && options.xOptions.color ? options.xOptions.color : Color3.Red().scale(0.5);\r\n const yColor = options && options.yOptions && options.yOptions.color ? options.yOptions.color : Color3.Green().scale(0.5);\r\n const zColor = options && options.zOptions && options.zOptions.color ? options.zOptions.color : Color3.Blue().scale(0.5);\r\n this.xGizmo = new PlaneRotationGizmo(new Vector3(1, 0, 0), xColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.yGizmo = new PlaneRotationGizmo(new Vector3(0, 1, 0), yColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n this.zGizmo = new PlaneRotationGizmo(new Vector3(0, 0, 1), zColor, gizmoLayer, tessellation, this, useEulerRotation, thickness);\r\n // Relay drag events and set update scale\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n //must set updateScale on each gizmo, as setting it on root RotationGizmo doesnt prevent individual gizmos from updating\r\n //currently updateScale is a property with no getter/setter, so no good way to override behavior at runtime, so we will at least set it on startup\r\n if (options && options.updateScale != undefined) {\r\n gizmo.updateScale = options.updateScale;\r\n }\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.snapDistance = value;\r\n this.yGizmo.snapDistance = value;\r\n this.zGizmo.snapDistance = value;\r\n }\r\n }\r\n public get snapDistance() {\r\n return this.xGizmo.snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n if (this.xGizmo) {\r\n this.xGizmo.scaleRatio = value;\r\n this.yGizmo.scaleRatio = value;\r\n this.zGizmo.scaleRatio = value;\r\n }\r\n }\r\n public get scaleRatio() {\r\n return this.xGizmo.scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.xGizmo.dispose();\r\n this.yGizmo.dispose();\r\n this.zGizmo.dispose();\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n */\r\n public setCustomMesh() {\r\n Logger.Error(\r\n \"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)\"\r\n );\r\n }\r\n}\r\n"]}
|
package/Gizmos/scaleGizmo.d.ts
CHANGED
|
@@ -1,45 +1,76 @@
|
|
|
1
|
+
import type { Observer } from "../Misc/observable";
|
|
1
2
|
import { Observable } from "../Misc/observable";
|
|
2
3
|
import type { Nullable } from "../types";
|
|
3
4
|
import type { AbstractMesh } from "../Meshes/abstractMesh";
|
|
4
|
-
import type { GizmoAxisCache } from "./gizmo";
|
|
5
|
+
import type { GizmoAxisCache, IGizmo } from "./gizmo";
|
|
5
6
|
import { Gizmo } from "./gizmo";
|
|
7
|
+
import type { IAxisScaleGizmo } from "./axisScaleGizmo";
|
|
6
8
|
import { AxisScaleGizmo } from "./axisScaleGizmo";
|
|
7
9
|
import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
|
|
8
10
|
import type { Mesh } from "../Meshes/mesh";
|
|
9
11
|
import type { Node } from "../node";
|
|
12
|
+
import type { PointerInfo } from "../Events/pointerEvents";
|
|
13
|
+
import { StandardMaterial } from "../Materials/standardMaterial";
|
|
10
14
|
import type { GizmoManager } from "./gizmoManager";
|
|
15
|
+
/**
|
|
16
|
+
* Interface for scale gizmo
|
|
17
|
+
*/
|
|
18
|
+
export interface IScaleGizmo extends IGizmo {
|
|
19
|
+
/** Internal gizmo used for interactions on the x axis */
|
|
20
|
+
xGizmo: IAxisScaleGizmo;
|
|
21
|
+
/** Internal gizmo used for interactions on the y axis */
|
|
22
|
+
yGizmo: IAxisScaleGizmo;
|
|
23
|
+
/** Internal gizmo used for interactions on the z axis */
|
|
24
|
+
zGizmo: IAxisScaleGizmo;
|
|
25
|
+
/** Internal gizmo used to scale all axis equally*/
|
|
26
|
+
uniformScaleGizmo: IAxisScaleGizmo;
|
|
27
|
+
/** Fires an event when any of it's sub gizmos are dragged */
|
|
28
|
+
onDragStartObservable: Observable<unknown>;
|
|
29
|
+
/** Fires an event when any of it's sub gizmos are released from dragging */
|
|
30
|
+
onDragEndObservable: Observable<unknown>;
|
|
31
|
+
/** Drag distance in babylon units that the gizmo will snap to when dragged */
|
|
32
|
+
snapDistance: number;
|
|
33
|
+
/** Sensitivity factor for dragging */
|
|
34
|
+
sensitivity: number;
|
|
35
|
+
/**
|
|
36
|
+
* Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation
|
|
37
|
+
* @param mesh Axis gizmo mesh
|
|
38
|
+
* @param cache Gizmo axis definition used for reactive gizmo UI
|
|
39
|
+
*/
|
|
40
|
+
addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;
|
|
41
|
+
}
|
|
11
42
|
/**
|
|
12
43
|
* Gizmo that enables scaling a mesh along 3 axis
|
|
13
44
|
*/
|
|
14
|
-
export declare class ScaleGizmo extends Gizmo {
|
|
45
|
+
export declare class ScaleGizmo extends Gizmo implements IScaleGizmo {
|
|
15
46
|
/**
|
|
16
47
|
* Internal gizmo used for interactions on the x axis
|
|
17
48
|
*/
|
|
18
|
-
xGizmo:
|
|
49
|
+
xGizmo: IAxisScaleGizmo;
|
|
19
50
|
/**
|
|
20
51
|
* Internal gizmo used for interactions on the y axis
|
|
21
52
|
*/
|
|
22
|
-
yGizmo:
|
|
53
|
+
yGizmo: IAxisScaleGizmo;
|
|
23
54
|
/**
|
|
24
55
|
* Internal gizmo used for interactions on the z axis
|
|
25
56
|
*/
|
|
26
|
-
zGizmo:
|
|
57
|
+
zGizmo: IAxisScaleGizmo;
|
|
27
58
|
/**
|
|
28
59
|
* Internal gizmo used to scale all axis equally
|
|
29
60
|
*/
|
|
30
|
-
uniformScaleGizmo:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
61
|
+
uniformScaleGizmo: IAxisScaleGizmo;
|
|
62
|
+
protected _meshAttached: Nullable<AbstractMesh>;
|
|
63
|
+
protected _nodeAttached: Nullable<Node>;
|
|
64
|
+
protected _snapDistance: number;
|
|
65
|
+
protected _uniformScalingMesh: Mesh;
|
|
66
|
+
protected _octahedron: Mesh;
|
|
67
|
+
protected _sensitivity: number;
|
|
68
|
+
protected _coloredMaterial: StandardMaterial;
|
|
69
|
+
protected _hoverMaterial: StandardMaterial;
|
|
70
|
+
protected _disableMaterial: StandardMaterial;
|
|
71
|
+
protected _observables: Observer<PointerInfo>[];
|
|
41
72
|
/** Node Caching for quick lookup */
|
|
42
|
-
|
|
73
|
+
protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache>;
|
|
43
74
|
/** Fires an event when any of it's sub gizmos are dragged */
|
|
44
75
|
onDragStartObservable: Observable<unknown>;
|
|
45
76
|
/** Fires an event when any of it's sub gizmos are released from dragging */
|
|
@@ -60,7 +91,7 @@ export declare class ScaleGizmo extends Gizmo {
|
|
|
60
91
|
*/
|
|
61
92
|
constructor(gizmoLayer?: UtilityLayerRenderer, thickness?: number, gizmoManager?: GizmoManager);
|
|
62
93
|
/** Create Geometry for Gizmo */
|
|
63
|
-
|
|
94
|
+
protected _createUniformScaleMesh(): AxisScaleGizmo;
|
|
64
95
|
set updateGizmoRotationToMatchAttachedMesh(value: boolean);
|
|
65
96
|
get updateGizmoRotationToMatchAttachedMesh(): boolean;
|
|
66
97
|
/**
|
package/Gizmos/scaleGizmo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaleGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/scaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { CreatePolyhedron } from \"../Meshes/Builders/polyhedronBuilder\";\r\nimport type { GizmoAxisCache } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { AxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n/**\r\n * Gizmo that enables scaling a mesh along 3 axis\r\n */\r\nexport class ScaleGizmo extends Gizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: AxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: AxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: AxisScaleGizmo;\r\n\r\n /**\r\n * Internal gizmo used to scale all axis equally\r\n */\r\n public uniformScaleGizmo: AxisScaleGizmo;\r\n\r\n private _meshAttached: Nullable<AbstractMesh> = null;\r\n private _nodeAttached: Nullable<Node> = null;\r\n private _snapDistance: number;\r\n private _uniformScalingMesh: Mesh;\r\n private _octahedron: Mesh;\r\n private _sensitivity: number = 1;\r\n private _coloredMaterial: StandardMaterial;\r\n private _hoverMaterial: StandardMaterial;\r\n private _disableMaterial: StandardMaterial;\r\n private _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a ScaleGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager) {\r\n super(gizmoLayer);\r\n this.uniformScaleGizmo = this._createUniformScaleMesh();\r\n this.xGizmo = new AxisScaleGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisScaleGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n // Relay drag events\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /** Create Geometry for Gizmo */\r\n private _createUniformScaleMesh(): AxisScaleGizmo {\r\n this._coloredMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = Color3.Gray();\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n const uniformScaleGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Gray().scale(0.5), this.gizmoLayer, this);\r\n uniformScaleGizmo.updateGizmoRotationToMatchAttachedMesh = false;\r\n uniformScaleGizmo.uniformScaling = true;\r\n this._uniformScalingMesh = CreatePolyhedron(\"uniform\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._uniformScalingMesh.scaling.scaleInPlace(0.01);\r\n this._uniformScalingMesh.visibility = 0;\r\n this._octahedron = CreatePolyhedron(\"\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._octahedron.scaling.scaleInPlace(0.007);\r\n this._uniformScalingMesh.addChild(this._octahedron);\r\n uniformScaleGizmo.setCustomMesh(this._uniformScalingMesh, true);\r\n const light = this.gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._octahedron);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [this._octahedron, this._uniformScalingMesh],\r\n colliderMeshes: [this._uniformScalingMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: uniformScaleGizmo.dragBehavior,\r\n };\r\n\r\n this.addToAxisCache(uniformScaleGizmo._rootMesh, cache);\r\n\r\n return uniformScaleGizmo;\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (!value) {\r\n Logger.Warn(\"Setting updateGizmoRotationToMatchAttachedMesh = false on scaling gizmo is not supported.\");\r\n } else {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n });\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n });\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Sensitivity factor for dragging (Default: 1)\r\n */\r\n public set sensitivity(value: number) {\r\n this._sensitivity = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.sensitivity = value;\r\n }\r\n });\r\n }\r\n public get sensitivity() {\r\n return this._sensitivity;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n });\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n [this._uniformScalingMesh, this._octahedron].forEach((msh) => {\r\n if (msh) {\r\n msh.dispose();\r\n }\r\n });\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"scaleGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/scaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { CreatePolyhedron } from \"../Meshes/Builders/polyhedronBuilder\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport type { IAxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { AxisScaleGizmo } from \"./axisScaleGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Node } from \"../node\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { GizmoManager } from \"./gizmoManager\";\r\n\r\n/**\r\n * Interface for scale gizmo\r\n */\r\nexport interface IScaleGizmo extends IGizmo {\r\n /** Internal gizmo used for interactions on the x axis */\r\n xGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the y axis */\r\n yGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used for interactions on the z axis */\r\n zGizmo: IAxisScaleGizmo;\r\n /** Internal gizmo used to scale all axis equally*/\r\n uniformScaleGizmo: IAxisScaleGizmo;\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n onDragStartObservable: Observable<unknown>;\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n onDragEndObservable: Observable<unknown>;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Sensitivity factor for dragging */\r\n sensitivity: number;\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n addToAxisCache(mesh: Mesh, cache: GizmoAxisCache): void;\r\n}\r\n\r\n/**\r\n * Gizmo that enables scaling a mesh along 3 axis\r\n */\r\nexport class ScaleGizmo extends Gizmo implements IScaleGizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: IAxisScaleGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: IAxisScaleGizmo;\r\n\r\n /**\r\n * Internal gizmo used to scale all axis equally\r\n */\r\n public uniformScaleGizmo: IAxisScaleGizmo;\r\n\r\n protected _meshAttached: Nullable<AbstractMesh> = null;\r\n protected _nodeAttached: Nullable<Node> = null;\r\n protected _snapDistance: number;\r\n protected _uniformScalingMesh: Mesh;\r\n protected _octahedron: Mesh;\r\n protected _sensitivity: number = 1;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n protected _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n } else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n } else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n let hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a ScaleGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param thickness display gizmo axis thickness\r\n * @param gizmoManager\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager) {\r\n super(gizmoLayer);\r\n this.uniformScaleGizmo = this._createUniformScaleMesh();\r\n this.xGizmo = new AxisScaleGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisScaleGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n // Relay drag events\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /** Create Geometry for Gizmo */\r\n protected _createUniformScaleMesh(): AxisScaleGizmo {\r\n this._coloredMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = Color3.Gray();\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n const uniformScaleGizmo = new AxisScaleGizmo(new Vector3(0, 1, 0), Color3.Gray().scale(0.5), this.gizmoLayer, this);\r\n uniformScaleGizmo.updateGizmoRotationToMatchAttachedMesh = false;\r\n uniformScaleGizmo.uniformScaling = true;\r\n this._uniformScalingMesh = CreatePolyhedron(\"uniform\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._uniformScalingMesh.scaling.scaleInPlace(0.01);\r\n this._uniformScalingMesh.visibility = 0;\r\n this._octahedron = CreatePolyhedron(\"\", { type: 1 }, uniformScaleGizmo.gizmoLayer.utilityLayerScene);\r\n this._octahedron.scaling.scaleInPlace(0.007);\r\n this._uniformScalingMesh.addChild(this._octahedron);\r\n uniformScaleGizmo.setCustomMesh(this._uniformScalingMesh, true);\r\n const light = this.gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._octahedron);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [this._octahedron, this._uniformScalingMesh],\r\n colliderMeshes: [this._uniformScalingMesh],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: uniformScaleGizmo.dragBehavior,\r\n };\r\n\r\n this.addToAxisCache(uniformScaleGizmo._rootMesh, cache);\r\n\r\n return uniformScaleGizmo;\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n if (!value) {\r\n Logger.Warn(\"Setting updateGizmoRotationToMatchAttachedMesh = false on scaling gizmo is not supported.\");\r\n } else {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n });\r\n }\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n });\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Sensitivity factor for dragging (Default: 1)\r\n */\r\n public set sensitivity(value: number) {\r\n this._sensitivity = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.sensitivity = value;\r\n }\r\n });\r\n }\r\n public get sensitivity() {\r\n return this._sensitivity;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.uniformScaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n });\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n [this._uniformScalingMesh, this._octahedron].forEach((msh) => {\r\n if (msh) {\r\n msh.dispose();\r\n }\r\n });\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -545,12 +545,16 @@ SceneLoader.RegisterPlugin({
|
|
|
545
545
|
meshesNames = [meshesNames];
|
|
546
546
|
}
|
|
547
547
|
var hierarchyIds = new Array();
|
|
548
|
+
var parsedIdToNodeMap = new Map();
|
|
548
549
|
// Transform nodes (the overall idea is to load all of them as this is super fast and then get rid of the ones we don't need)
|
|
549
550
|
var loadedTransformNodes = [];
|
|
550
551
|
if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {
|
|
551
552
|
for (var index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {
|
|
552
|
-
var
|
|
553
|
-
|
|
553
|
+
var parsedJSONTransformNode = parsedData.transformNodes[index];
|
|
554
|
+
var parsedTransformNode = TransformNode.Parse(parsedJSONTransformNode, scene, rootUrl);
|
|
555
|
+
loadedTransformNodes.push(parsedTransformNode);
|
|
556
|
+
parsedIdToNodeMap.set(parsedTransformNode._waitingParsedUniqueId, parsedTransformNode);
|
|
557
|
+
parsedTransformNode._waitingParsedUniqueId = null;
|
|
554
558
|
}
|
|
555
559
|
}
|
|
556
560
|
if (parsedData.meshes !== undefined && parsedData.meshes !== null) {
|
|
@@ -680,6 +684,8 @@ SceneLoader.RegisterPlugin({
|
|
|
680
684
|
}
|
|
681
685
|
var mesh = Mesh.Parse(parsedMesh, scene, rootUrl);
|
|
682
686
|
meshes.push(mesh);
|
|
687
|
+
parsedIdToNodeMap.set(mesh._waitingParsedUniqueId, mesh);
|
|
688
|
+
mesh._waitingParsedUniqueId = null;
|
|
683
689
|
log += "\n\tMesh " + mesh.toString(fullDetails_1);
|
|
684
690
|
}
|
|
685
691
|
};
|
|
@@ -704,7 +710,10 @@ SceneLoader.RegisterPlugin({
|
|
|
704
710
|
for (var index = 0, cache = scene.transformNodes.length; index < cache; index++) {
|
|
705
711
|
var transformNode = scene.transformNodes[index];
|
|
706
712
|
if (transformNode._waitingParentId !== null) {
|
|
707
|
-
var parent_1 =
|
|
713
|
+
var parent_1 = parsedIdToNodeMap.get(parseInt(transformNode._waitingParentId)) || null;
|
|
714
|
+
if (parent_1 === null) {
|
|
715
|
+
parent_1 = scene.getLastEntryById(transformNode._waitingParentId);
|
|
716
|
+
}
|
|
708
717
|
var parentNode = parent_1;
|
|
709
718
|
if (transformNode._waitingParentInstanceIndex) {
|
|
710
719
|
parentNode = parent_1.instances[parseInt(transformNode._waitingParentInstanceIndex)];
|
|
@@ -718,7 +727,10 @@ SceneLoader.RegisterPlugin({
|
|
|
718
727
|
for (var index = 0, cache = scene.meshes.length; index < cache; index++) {
|
|
719
728
|
currentMesh = scene.meshes[index];
|
|
720
729
|
if (currentMesh._waitingParentId) {
|
|
721
|
-
var parent_2 =
|
|
730
|
+
var parent_2 = parsedIdToNodeMap.get(parseInt(currentMesh._waitingParentId)) || null;
|
|
731
|
+
if (parent_2 === null) {
|
|
732
|
+
parent_2 = scene.getLastEntryById(currentMesh._waitingParentId);
|
|
733
|
+
}
|
|
722
734
|
var parentNode = parent_2;
|
|
723
735
|
if (currentMesh._waitingParentInstanceIndex) {
|
|
724
736
|
parentNode = parent_2.instances[parseInt(currentMesh._waitingParentInstanceIndex)];
|