@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.
Files changed (159) hide show
  1. package/Debug/debugLayer.d.ts +36 -0
  2. package/Debug/debugLayer.js.map +1 -1
  3. package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
  4. package/DeviceInput/InputDevices/deviceSource.js.map +1 -1
  5. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +1 -1
  6. package/DeviceInput/InputDevices/deviceSourceManager.js +1 -1
  7. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  8. package/DeviceInput/{Helpers/eventFactory.d.ts → eventFactory.d.ts} +4 -4
  9. package/DeviceInput/{Helpers/eventFactory.js → eventFactory.js} +2 -2
  10. package/DeviceInput/eventFactory.js.map +1 -0
  11. package/DeviceInput/{InputDevices/inputInterfaces.d.ts → inputInterfaces.d.ts} +2 -2
  12. package/DeviceInput/{InputDevices/inputInterfaces.js → inputInterfaces.js} +0 -0
  13. package/DeviceInput/inputInterfaces.js.map +1 -0
  14. package/DeviceInput/{InputDevices/internalDeviceSourceManager.d.ts → internalDeviceSourceManager.d.ts} +7 -7
  15. package/DeviceInput/{InputDevices/internalDeviceSourceManager.js → internalDeviceSourceManager.js} +2 -2
  16. package/DeviceInput/internalDeviceSourceManager.js.map +1 -0
  17. package/DeviceInput/{InputDevices/nativeDeviceInputSystem.d.ts → nativeDeviceInputSystem.d.ts} +2 -2
  18. package/DeviceInput/{InputDevices/nativeDeviceInputSystem.js → nativeDeviceInputSystem.js} +2 -2
  19. package/DeviceInput/nativeDeviceInputSystem.js.map +1 -0
  20. package/DeviceInput/{InputDevices/webDeviceInputSystem.d.ts → webDeviceInputSystem.d.ts} +3 -3
  21. package/DeviceInput/{InputDevices/webDeviceInputSystem.js → webDeviceInputSystem.js} +4 -4
  22. package/DeviceInput/webDeviceInputSystem.js.map +1 -0
  23. package/Engines/Extensions/engine.query.js +5 -1
  24. package/Engines/Extensions/engine.query.js.map +1 -1
  25. package/Engines/Extensions/engine.transformFeedback.js +5 -1
  26. package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
  27. package/Engines/Extensions/engine.views.d.ts +13 -0
  28. package/Engines/Extensions/engine.views.js +16 -1
  29. package/Engines/Extensions/engine.views.js.map +1 -1
  30. package/Engines/Native/nativeInterfaces.d.ts +1 -1
  31. package/Engines/Native/nativeInterfaces.js.map +1 -1
  32. package/Engines/engine.d.ts +15 -240
  33. package/Engines/engineFeatures.d.ts +2 -0
  34. package/Engines/engineFeatures.js.map +1 -1
  35. package/Engines/nativeEngine.js +1 -0
  36. package/Engines/nativeEngine.js.map +1 -1
  37. package/Engines/nullEngine.js +1 -0
  38. package/Engines/nullEngine.js.map +1 -1
  39. package/Engines/thinEngine.d.ts +1 -1
  40. package/Engines/thinEngine.js +14 -4
  41. package/Engines/thinEngine.js.map +1 -1
  42. package/Engines/webgpuEngine.js +1 -0
  43. package/Engines/webgpuEngine.js.map +1 -1
  44. package/Gizmos/axisDragGizmo.d.ts +31 -9
  45. package/Gizmos/axisDragGizmo.js.map +1 -1
  46. package/Gizmos/axisScaleGizmo.d.ts +46 -14
  47. package/Gizmos/axisScaleGizmo.js.map +1 -1
  48. package/Gizmos/boundingBoxGizmo.d.ts +94 -19
  49. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  50. package/Gizmos/cameraGizmo.d.ts +23 -6
  51. package/Gizmos/cameraGizmo.js.map +1 -1
  52. package/Gizmos/gizmo.d.ts +48 -6
  53. package/Gizmos/gizmo.js.map +1 -1
  54. package/Gizmos/gizmoManager.d.ts +25 -17
  55. package/Gizmos/gizmoManager.js.map +1 -1
  56. package/Gizmos/lightGizmo.d.ts +25 -8
  57. package/Gizmos/lightGizmo.js.map +1 -1
  58. package/Gizmos/planeDragGizmo.d.ts +30 -9
  59. package/Gizmos/planeDragGizmo.js.map +1 -1
  60. package/Gizmos/planeRotationGizmo.d.ts +45 -15
  61. package/Gizmos/planeRotationGizmo.js.map +1 -1
  62. package/Gizmos/positionGizmo.d.ts +53 -17
  63. package/Gizmos/positionGizmo.js +1 -1
  64. package/Gizmos/positionGizmo.js.map +1 -1
  65. package/Gizmos/rotationGizmo.d.ts +35 -10
  66. package/Gizmos/rotationGizmo.js.map +1 -1
  67. package/Gizmos/scaleGizmo.d.ts +49 -18
  68. package/Gizmos/scaleGizmo.js.map +1 -1
  69. package/Loading/Plugins/babylonFileLoader.js +16 -4
  70. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  71. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +39 -0
  72. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +97 -0
  73. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -0
  74. package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
  75. package/Materials/Node/Blocks/Fragment/index.js +1 -0
  76. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  77. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +18 -0
  78. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +85 -1
  79. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  80. package/Materials/Node/nodeMaterial.d.ts +6 -0
  81. package/Materials/Node/nodeMaterial.js +11 -0
  82. package/Materials/Node/nodeMaterial.js.map +1 -1
  83. package/Materials/Textures/Procedurals/proceduralTexture.js +5 -1
  84. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  85. package/Materials/Textures/renderTargetTexture.js +3 -0
  86. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  87. package/Materials/Textures/texture.js +9 -5
  88. package/Materials/Textures/texture.js.map +1 -1
  89. package/Materials/index.d.ts +1 -0
  90. package/Materials/index.js +1 -0
  91. package/Materials/index.js.map +1 -1
  92. package/Maths/math.vector.d.ts +134 -8
  93. package/Maths/math.vector.js +168 -36
  94. package/Maths/math.vector.js.map +1 -1
  95. package/Meshes/Compression/dracoCompression.js +1 -1
  96. package/Meshes/Compression/dracoCompression.js.map +1 -1
  97. package/Meshes/groundMesh.js +1 -1
  98. package/Meshes/groundMesh.js.map +1 -1
  99. package/Meshes/mesh.js +1 -0
  100. package/Meshes/mesh.js.map +1 -1
  101. package/Meshes/transformNode.js +1 -0
  102. package/Meshes/transformNode.js.map +1 -1
  103. package/Misc/assetsManager.d.ts +9 -0
  104. package/Misc/assetsManager.js +3 -1
  105. package/Misc/assetsManager.js.map +1 -1
  106. package/Misc/basis.js +10 -4
  107. package/Misc/basis.js.map +1 -1
  108. package/Misc/computePressure.d.ts +9 -3
  109. package/Misc/computePressure.js +13 -5
  110. package/Misc/computePressure.js.map +1 -1
  111. package/Misc/fileTools.js +2 -2
  112. package/Misc/fileTools.js.map +1 -1
  113. package/Misc/iInspectable.d.ts +12 -2
  114. package/Misc/iInspectable.js +4 -0
  115. package/Misc/iInspectable.js.map +1 -1
  116. package/Misc/khronosTextureContainer2.js +1 -1
  117. package/Misc/khronosTextureContainer2.js.map +1 -1
  118. package/Misc/sceneSerializer.js +1 -1
  119. package/Misc/sceneSerializer.js.map +1 -1
  120. package/Misc/tools.d.ts +2 -2
  121. package/Misc/tools.js +4 -1
  122. package/Misc/tools.js.map +1 -1
  123. package/Offline/database.js +6 -8
  124. package/Offline/database.js.map +1 -1
  125. package/Particles/solidParticleSystem.d.ts +1 -0
  126. package/Particles/solidParticleSystem.js +4 -1
  127. package/Particles/solidParticleSystem.js.map +1 -1
  128. package/Physics/Plugins/ammoJSPlugin.d.ts +2 -2
  129. package/Physics/Plugins/ammoJSPlugin.js +29 -29
  130. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  131. package/Physics/Plugins/cannonJSPlugin.d.ts +2 -2
  132. package/Physics/Plugins/cannonJSPlugin.js +26 -26
  133. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  134. package/Physics/Plugins/oimoJSPlugin.js +9 -11
  135. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  136. package/Physics/physicsImpostor.d.ts +6 -6
  137. package/Physics/physicsImpostor.js +15 -8
  138. package/Physics/physicsImpostor.js.map +1 -1
  139. package/Shaders/sprites.fragment.js +1 -1
  140. package/Shaders/sprites.fragment.js.map +1 -1
  141. package/Sprites/spriteRenderer.js +1 -1
  142. package/Sprites/spriteRenderer.js.map +1 -1
  143. package/XR/webXRDefaultExperience.d.ts +10 -0
  144. package/XR/webXRDefaultExperience.js +2 -12
  145. package/XR/webXRDefaultExperience.js.map +1 -1
  146. package/XR/webXRExperienceHelper.js +12 -12
  147. package/XR/webXRExperienceHelper.js.map +1 -1
  148. package/node.d.ts +2 -0
  149. package/node.js +2 -0
  150. package/node.js.map +1 -1
  151. package/package.json +1 -1
  152. package/scene.d.ts +1 -1
  153. package/scene.js +5 -3
  154. package/scene.js.map +1 -1
  155. package/DeviceInput/Helpers/eventFactory.js.map +0 -1
  156. package/DeviceInput/InputDevices/inputInterfaces.js.map +0 -1
  157. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +0 -1
  158. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +0 -1
  159. 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 { PlaneRotationGizmo } from "./planeRotationGizmo";
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: PlaneRotationGizmo;
75
+ xGizmo: IPlaneRotationGizmo;
51
76
  /**
52
77
  * Internal gizmo used for interactions on the y axis
53
78
  */
54
- yGizmo: PlaneRotationGizmo;
79
+ yGizmo: IPlaneRotationGizmo;
55
80
  /**
56
81
  * Internal gizmo used for interactions on the z axis
57
82
  */
58
- zGizmo: PlaneRotationGizmo;
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
- private _meshAttached;
64
- private _nodeAttached;
65
- private _observables;
88
+ protected _meshAttached: Nullable<AbstractMesh>;
89
+ protected _nodeAttached: Nullable<Node>;
90
+ protected _observables: Observer<PointerInfo>[];
66
91
  /** Node Caching for quick lookup */
67
- private _gizmoAxisCache;
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"]}
@@ -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: AxisScaleGizmo;
49
+ xGizmo: IAxisScaleGizmo;
19
50
  /**
20
51
  * Internal gizmo used for interactions on the y axis
21
52
  */
22
- yGizmo: AxisScaleGizmo;
53
+ yGizmo: IAxisScaleGizmo;
23
54
  /**
24
55
  * Internal gizmo used for interactions on the z axis
25
56
  */
26
- zGizmo: AxisScaleGizmo;
57
+ zGizmo: IAxisScaleGizmo;
27
58
  /**
28
59
  * Internal gizmo used to scale all axis equally
29
60
  */
30
- uniformScaleGizmo: AxisScaleGizmo;
31
- private _meshAttached;
32
- private _nodeAttached;
33
- private _snapDistance;
34
- private _uniformScalingMesh;
35
- private _octahedron;
36
- private _sensitivity;
37
- private _coloredMaterial;
38
- private _hoverMaterial;
39
- private _disableMaterial;
40
- private _observables;
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
- private _gizmoAxisCache;
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
- private _createUniformScaleMesh;
94
+ protected _createUniformScaleMesh(): AxisScaleGizmo;
64
95
  set updateGizmoRotationToMatchAttachedMesh(value: boolean);
65
96
  get updateGizmoRotationToMatchAttachedMesh(): boolean;
66
97
  /**
@@ -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 parsedTransformNode = parsedData.transformNodes[index];
553
- loadedTransformNodes.push(TransformNode.Parse(parsedTransformNode, scene, rootUrl));
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 = scene.getLastEntryById(transformNode._waitingParentId);
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 = scene.getLastEntryById(currentMesh._waitingParentId);
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)];