@babylonjs/core 6.21.1 → 6.21.3

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 (165) hide show
  1. package/Animations/animatable.d.ts +4 -0
  2. package/Animations/animatable.js +6 -0
  3. package/Animations/animatable.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +9 -0
  5. package/Animations/animationGroup.js +14 -0
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Buffers/buffer.d.ts +31 -2
  8. package/Buffers/buffer.js +100 -64
  9. package/Buffers/buffer.js.map +1 -1
  10. package/Engines/Native/nativeInterfaces.d.ts +2 -0
  11. package/Engines/Native/nativeInterfaces.js.map +1 -1
  12. package/Engines/engine.d.ts +8 -1
  13. package/Engines/engine.js +7 -1
  14. package/Engines/engine.js.map +1 -1
  15. package/Engines/nativeEngine.d.ts +2 -2
  16. package/Engines/nativeEngine.js +30 -19
  17. package/Engines/nativeEngine.js.map +1 -1
  18. package/Engines/thinEngine.js +4 -4
  19. package/Engines/thinEngine.js.map +1 -1
  20. package/Engines/webgpuEngine.js +2 -2
  21. package/Engines/webgpuEngine.js.map +1 -1
  22. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.d.ts +59 -0
  23. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.js +86 -0
  24. package/FlowGraph/Blocks/Data/Logic/flowGraphBitwiseBlocks.js.map +1 -0
  25. package/FlowGraph/Blocks/Data/Logic/index.d.ts +2 -0
  26. package/FlowGraph/Blocks/Data/Logic/index.js +3 -0
  27. package/FlowGraph/Blocks/Data/Logic/index.js.map +1 -0
  28. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.d.ts +2 -1
  29. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.js +6 -2
  30. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.js.map +1 -1
  31. package/FlowGraph/Blocks/Data/Math/index.d.ts +4 -0
  32. package/FlowGraph/Blocks/Data/Math/index.js +5 -0
  33. package/FlowGraph/Blocks/Data/Math/index.js.map +1 -0
  34. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js +1 -1
  35. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
  36. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js +1 -1
  37. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js.map +1 -1
  38. package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.d.ts +2 -1
  39. package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js +2 -2
  40. package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js.map +1 -1
  41. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.d.ts +1 -8
  42. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js +2 -5
  43. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
  44. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js +1 -1
  45. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
  46. package/FlowGraph/Blocks/Data/index.d.ts +2 -4
  47. package/FlowGraph/Blocks/Data/index.js +4 -4
  48. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  49. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +1 -1
  50. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  51. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.d.ts +16 -0
  52. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js +18 -0
  53. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -0
  54. package/FlowGraph/Blocks/Execution/{flowGraphPlayAnimationBlock.d.ts → Animation/flowGraphPlayAnimationBlock.d.ts} +5 -5
  55. package/FlowGraph/Blocks/Execution/{flowGraphPlayAnimationBlock.js → Animation/flowGraphPlayAnimationBlock.js} +15 -10
  56. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -0
  57. package/FlowGraph/Blocks/Execution/{flowGraphStopAnimationBlock.d.ts → Animation/flowGraphStopAnimationBlock.d.ts} +4 -4
  58. package/FlowGraph/Blocks/Execution/{flowGraphStopAnimationBlock.js → Animation/flowGraphStopAnimationBlock.js} +2 -2
  59. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -0
  60. package/FlowGraph/Blocks/Execution/Animation/index.d.ts +3 -0
  61. package/FlowGraph/Blocks/Execution/Animation/index.js +4 -0
  62. package/FlowGraph/Blocks/Execution/Animation/index.js.map +1 -0
  63. package/FlowGraph/Blocks/Execution/{flowGraphConditionalBlock.d.ts → ControlFlow/flowGraphConditionalBlock.d.ts} +5 -5
  64. package/FlowGraph/Blocks/Execution/{flowGraphConditionalBlock.js → ControlFlow/flowGraphConditionalBlock.js} +3 -3
  65. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphConditionalBlock.js.map +1 -0
  66. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.d.ts +20 -0
  67. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +26 -0
  68. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -0
  69. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.d.ts +24 -0
  70. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js +30 -0
  71. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -0
  72. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.d.ts +24 -0
  73. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js +27 -0
  74. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -0
  75. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.d.ts +24 -0
  76. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.js +27 -0
  77. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.js.map +1 -0
  78. package/FlowGraph/Blocks/Execution/{flowGraphForLoopBlock.d.ts → ControlFlow/flowGraphForLoopBlock.d.ts} +4 -4
  79. package/FlowGraph/Blocks/Execution/{flowGraphForLoopBlock.js → ControlFlow/flowGraphForLoopBlock.js} +4 -5
  80. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -0
  81. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.d.ts +51 -0
  82. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +77 -0
  83. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -0
  84. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.d.ts +31 -0
  85. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js +32 -0
  86. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -0
  87. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.d.ts +24 -0
  88. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js +31 -0
  89. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -0
  90. package/FlowGraph/Blocks/Execution/{flowGraphTimerBlock.d.ts → ControlFlow/flowGraphTimerBlock.d.ts} +5 -9
  91. package/FlowGraph/Blocks/Execution/{flowGraphTimerBlock.js → ControlFlow/flowGraphTimerBlock.js} +5 -9
  92. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js.map +1 -0
  93. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.d.ts +32 -0
  94. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js +62 -0
  95. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -0
  96. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.d.ts +31 -0
  97. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +27 -0
  98. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -0
  99. package/FlowGraph/Blocks/Execution/ControlFlow/index.d.ts +12 -0
  100. package/FlowGraph/Blocks/Execution/ControlFlow/index.js +13 -0
  101. package/FlowGraph/Blocks/Execution/ControlFlow/index.js.map +1 -0
  102. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js +0 -1
  103. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js.map +1 -1
  104. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +1 -5
  105. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +3 -8
  106. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  107. package/FlowGraph/Blocks/Execution/index.d.ts +2 -5
  108. package/FlowGraph/Blocks/Execution/index.js +4 -5
  109. package/FlowGraph/Blocks/Execution/index.js.map +1 -1
  110. package/FlowGraph/flowGraphConnection.d.ts +4 -0
  111. package/FlowGraph/flowGraphConnection.js +5 -0
  112. package/FlowGraph/flowGraphConnection.js.map +1 -1
  113. package/FlowGraph/flowGraphContext.d.ts +42 -2
  114. package/FlowGraph/flowGraphContext.js +58 -6
  115. package/FlowGraph/flowGraphContext.js.map +1 -1
  116. package/FlowGraph/flowGraphDataConnection.d.ts +19 -2
  117. package/FlowGraph/flowGraphDataConnection.js +29 -5
  118. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  119. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
  120. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  121. package/FlowGraph/flowGraphSignalConnection.js +1 -1
  122. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  123. package/Gizmos/axisDragGizmo.js +0 -1
  124. package/Gizmos/axisDragGizmo.js.map +1 -1
  125. package/Gizmos/axisScaleGizmo.js +0 -1
  126. package/Gizmos/axisScaleGizmo.js.map +1 -1
  127. package/Gizmos/boundingBoxGizmo.d.ts +12 -0
  128. package/Gizmos/boundingBoxGizmo.js +37 -1
  129. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  130. package/Gizmos/gizmo.d.ts +0 -4
  131. package/Gizmos/gizmo.js +19 -16
  132. package/Gizmos/gizmo.js.map +1 -1
  133. package/Gizmos/planeDragGizmo.js +0 -1
  134. package/Gizmos/planeDragGizmo.js.map +1 -1
  135. package/Gizmos/planeRotationGizmo.js +0 -1
  136. package/Gizmos/planeRotationGizmo.js.map +1 -1
  137. package/Gizmos/scaleGizmo.d.ts +2 -2
  138. package/Gizmos/scaleGizmo.js +5 -2
  139. package/Gizmos/scaleGizmo.js.map +1 -1
  140. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  141. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  142. package/Materials/PBR/pbrBaseMaterial.js +5 -1
  143. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  144. package/Materials/Textures/equiRectangularCubeTexture.js +25 -4
  145. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  146. package/Maths/math.vector.d.ts +1 -1
  147. package/Maths/math.vector.js +1 -1
  148. package/Maths/math.vector.js.map +1 -1
  149. package/Meshes/Compression/dracoCompression.d.ts +6 -0
  150. package/Meshes/Compression/dracoCompression.js +51 -11
  151. package/Meshes/Compression/dracoCompression.js.map +1 -1
  152. package/Misc/fileTools.js +2 -2
  153. package/Misc/fileTools.js.map +1 -1
  154. package/Misc/webRequest.d.ts +5 -0
  155. package/Misc/webRequest.js +7 -0
  156. package/Misc/webRequest.js.map +1 -1
  157. package/XR/features/WebXRPlaneDetector.d.ts +8 -0
  158. package/XR/features/WebXRPlaneDetector.js +13 -0
  159. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  160. package/package.json +1 -1
  161. package/FlowGraph/Blocks/Execution/flowGraphConditionalBlock.js.map +0 -1
  162. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.js.map +0 -1
  163. package/FlowGraph/Blocks/Execution/flowGraphPlayAnimationBlock.js.map +0 -1
  164. package/FlowGraph/Blocks/Execution/flowGraphStopAnimationBlock.js.map +0 -1
  165. package/FlowGraph/Blocks/Execution/flowGraphTimerBlock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"axisScaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisScaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { ScaleGizmo } from \"./scaleGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\n\r\n/**\r\n * Interface for axis scale gizmo\r\n */\r\nexport interface IAxisScaleGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the scaling operation should be done on all axis */\r\n uniformScaling: boolean;\r\n /** Custom sensitivity value for the drag strength */\r\n sensitivity: number;\r\n /** The magnitude of the drag strength (scaling factor) */\r\n dragScale: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis scale gizmo\r\n */\r\nexport class AxisScaleGizmo extends Gizmo implements IAxisScaleGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n /**\r\n * If the scaling operation should be done on all axis (default: false)\r\n */\r\n public uniformScaling = false;\r\n /**\r\n * Custom sensitivity value for the drag strength\r\n */\r\n public sensitivity = 1;\r\n /**\r\n * The magnitude of the drag strength (scaling factor)\r\n */\r\n public dragScale = 1;\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<ScaleGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n private _tmpVector = new Vector3(0, 0, 0);\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n /**\r\n * Creates an AxisScaleGizmo\r\n * @param dragAxis The axis which the gizmo will be able to scale on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<ScaleGizmo> = null,\r\n thickness: number = 1\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh + Collider\r\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\r\n const { arrowMesh, arrowTail } = this._createGizmoMesh(this._gizmoMesh, thickness);\r\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n\r\n // Closure of initial prop values for resetting\r\n const nodePosition = arrowMesh.position.clone();\r\n const linePosition = arrowTail.position.clone();\r\n const lineScale = arrowTail.scaling.clone();\r\n\r\n const increaseGizmoMesh = (dragDistance: number) => {\r\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\r\n\r\n arrowMesh.position.z += dragStrength / 3.5;\r\n arrowTail.scaling.y += dragStrength;\r\n this.dragScale = arrowTail.scaling.y;\r\n arrowTail.position.z = arrowMesh.position.z / 2;\r\n };\r\n\r\n const resetGizmoMesh = () => {\r\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\r\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\r\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\r\n this.dragScale = arrowTail.scaling.y;\r\n this._dragging = false;\r\n };\r\n\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n let currentSnapDragDistance = 0;\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n this._handlePivot();\r\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\r\n const dragStrength = this.sensitivity * event.dragDistance * ((this.scaleRatio * 3) / this._rootMesh.scaling.length());\r\n const tmpVector = this._tmpVector;\r\n // Snapping logic\r\n let snapped = false;\r\n let dragSteps = 0;\r\n if (this.uniformScaling) {\r\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\r\n } else {\r\n tmpVector.copyFrom(dragAxis);\r\n }\r\n if (this.snapDistance == 0) {\r\n tmpVector.scaleToRef(dragStrength, tmpVector);\r\n } else {\r\n currentSnapDragDistance += dragStrength;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n if (currentSnapDragDistance < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\r\n snapped = true;\r\n } else {\r\n tmpVector.scaleInPlace(0);\r\n }\r\n }\r\n\r\n Matrix.ScalingToRef(1 + tmpVector.x, 1 + tmpVector.y, 1 + tmpVector.z, TmpVectors.Matrix[2]);\r\n\r\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n\r\n const maxScale = 100000;\r\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\r\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\r\n }\r\n\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n // On Drag Listener: to move gizmo mesh with user action\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragObservable.add((e) => increaseGizmoMesh(e.dragDistance));\r\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\r\n\r\n // Listeners for Universal Scalar\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragObservable?.add((e) => increaseGizmoMesh(e.delta.y));\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragEndObservable?.add(resetGizmoMesh);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [arrowMesh, arrowTail],\r\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\r\n }\r\n\r\n /**\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param isCollider\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, isCollider = false) {\r\n const arrowMesh = CreateBox(\"yPosMesh\", { size: 0.4 * (1 + (thickness - 1) / 4) }, this.gizmoLayer.utilityLayerScene);\r\n const arrowTail = CreateCylinder(\r\n \"cylinder\",\r\n { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n arrowMesh.scaling.scaleInPlace(0.1);\r\n arrowMesh.material = this._coloredMaterial;\r\n arrowMesh.rotation.x = Math.PI / 2;\r\n arrowMesh.position.z += 0.3;\r\n\r\n arrowTail.material = this._coloredMaterial;\r\n arrowTail.position.z += 0.275 / 2;\r\n arrowTail.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n arrowMesh.visibility = 0;\r\n arrowTail.visibility = 0;\r\n }\r\n\r\n parentMesh.addChild(arrowMesh);\r\n parentMesh.addChild(arrowTail);\r\n\r\n return { arrowMesh, arrowTail };\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\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 super.dispose();\r\n }\r\n\r\n /**\r\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\r\n */\r\n public setCustomMesh(mesh: Mesh, useGizmoMaterial: boolean = false) {\r\n super.setCustomMesh(mesh);\r\n if (useGizmoMaterial) {\r\n this._rootMesh.getChildMeshes().forEach((m) => {\r\n m.material = this._coloredMaterial;\r\n if ((<LinesMesh>m).color) {\r\n (<LinesMesh>m).color = this._coloredMaterial.diffuseColor;\r\n }\r\n });\r\n this._customMeshSet = false;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"axisScaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisScaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { ScaleGizmo } from \"./scaleGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\n\r\n/**\r\n * Interface for axis scale gizmo\r\n */\r\nexport interface IAxisScaleGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the scaling operation should be done on all axis */\r\n uniformScaling: boolean;\r\n /** Custom sensitivity value for the drag strength */\r\n sensitivity: number;\r\n /** The magnitude of the drag strength (scaling factor) */\r\n dragScale: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis scale gizmo\r\n */\r\nexport class AxisScaleGizmo extends Gizmo implements IAxisScaleGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n /**\r\n * If the scaling operation should be done on all axis (default: false)\r\n */\r\n public uniformScaling = false;\r\n /**\r\n * Custom sensitivity value for the drag strength\r\n */\r\n public sensitivity = 1;\r\n /**\r\n * The magnitude of the drag strength (scaling factor)\r\n */\r\n public dragScale = 1;\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<ScaleGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n private _tmpVector = new Vector3(0, 0, 0);\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n /**\r\n * Creates an AxisScaleGizmo\r\n * @param dragAxis The axis which the gizmo will be able to scale on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<ScaleGizmo> = null,\r\n thickness: number = 1\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = Color3.Yellow();\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = Color3.Gray();\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh + Collider\r\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\r\n const { arrowMesh, arrowTail } = this._createGizmoMesh(this._gizmoMesh, thickness);\r\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n\r\n // Closure of initial prop values for resetting\r\n const nodePosition = arrowMesh.position.clone();\r\n const linePosition = arrowTail.position.clone();\r\n const lineScale = arrowTail.scaling.clone();\r\n\r\n const increaseGizmoMesh = (dragDistance: number) => {\r\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\r\n\r\n arrowMesh.position.z += dragStrength / 3.5;\r\n arrowTail.scaling.y += dragStrength;\r\n this.dragScale = arrowTail.scaling.y;\r\n arrowTail.position.z = arrowMesh.position.z / 2;\r\n };\r\n\r\n const resetGizmoMesh = () => {\r\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\r\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\r\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\r\n this.dragScale = arrowTail.scaling.y;\r\n this._dragging = false;\r\n };\r\n\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n let currentSnapDragDistance = 0;\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\r\n const dragStrength = this.sensitivity * event.dragDistance * ((this.scaleRatio * 3) / this._rootMesh.scaling.length());\r\n const tmpVector = this._tmpVector;\r\n // Snapping logic\r\n let snapped = false;\r\n let dragSteps = 0;\r\n if (this.uniformScaling) {\r\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\r\n } else {\r\n tmpVector.copyFrom(dragAxis);\r\n }\r\n if (this.snapDistance == 0) {\r\n tmpVector.scaleToRef(dragStrength, tmpVector);\r\n } else {\r\n currentSnapDragDistance += dragStrength;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n if (currentSnapDragDistance < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\r\n snapped = true;\r\n } else {\r\n tmpVector.scaleInPlace(0);\r\n }\r\n }\r\n\r\n Matrix.ScalingToRef(1 + tmpVector.x, 1 + tmpVector.y, 1 + tmpVector.z, TmpVectors.Matrix[2]);\r\n\r\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n\r\n const maxScale = 100000;\r\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\r\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\r\n }\r\n\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n // On Drag Listener: to move gizmo mesh with user action\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragObservable.add((e) => increaseGizmoMesh(e.dragDistance));\r\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\r\n\r\n // Listeners for Universal Scalar\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragObservable?.add((e) => increaseGizmoMesh(e.delta.y));\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragEndObservable?.add(resetGizmoMesh);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [arrowMesh, arrowTail],\r\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\r\n }\r\n\r\n /**\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param isCollider\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, isCollider = false) {\r\n const arrowMesh = CreateBox(\"yPosMesh\", { size: 0.4 * (1 + (thickness - 1) / 4) }, this.gizmoLayer.utilityLayerScene);\r\n const arrowTail = CreateCylinder(\r\n \"cylinder\",\r\n { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n arrowMesh.scaling.scaleInPlace(0.1);\r\n arrowMesh.material = this._coloredMaterial;\r\n arrowMesh.rotation.x = Math.PI / 2;\r\n arrowMesh.position.z += 0.3;\r\n\r\n arrowTail.material = this._coloredMaterial;\r\n arrowTail.position.z += 0.275 / 2;\r\n arrowTail.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n arrowMesh.visibility = 0;\r\n arrowTail.visibility = 0;\r\n }\r\n\r\n parentMesh.addChild(arrowMesh);\r\n parentMesh.addChild(arrowTail);\r\n\r\n return { arrowMesh, arrowTail };\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\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 super.dispose();\r\n }\r\n\r\n /**\r\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\r\n */\r\n public setCustomMesh(mesh: Mesh, useGizmoMaterial: boolean = false) {\r\n super.setCustomMesh(mesh);\r\n if (useGizmoMaterial) {\r\n this._rootMesh.getChildMeshes().forEach((m) => {\r\n m.material = this._coloredMaterial;\r\n if ((<LinesMesh>m).color) {\r\n (<LinesMesh>m).color = this._coloredMaterial.diffuseColor;\r\n }\r\n });\r\n this._customMeshSet = false;\r\n }\r\n }\r\n}\r\n"]}
@@ -84,6 +84,10 @@ export interface IBoundingBoxGizmo extends IGizmo {
84
84
  coloredMaterial: StandardMaterial;
85
85
  /** Material used to render when gizmo is hovered with mouse*/
86
86
  hoverMaterial: StandardMaterial;
87
+ /** Drag distance in babylon units that the gizmo will snap scaling to when dragged */
88
+ scalingSnapDistance: number;
89
+ /** Drag distance in babylon units that the gizmo will snap rotation to when dragged */
90
+ rotationSnapDistance: number;
87
91
  }
88
92
  /**
89
93
  * Bounding box gizmo
@@ -129,6 +133,14 @@ export declare class BoundingBoxGizmo extends Gizmo implements IBoundingBoxGizmo
129
133
  * The distance away from the object which the draggable meshes should appear world sized when fixedDragMeshScreenSize is set to true (default: 10)
130
134
  */
131
135
  fixedDragMeshScreenSizeDistanceFactor: number;
136
+ /**
137
+ * Drag distance in babylon units that the gizmo will snap scaling to when dragged
138
+ */
139
+ scalingSnapDistance: number;
140
+ /**
141
+ * Drag distance in babylon units that the gizmo will snap rotation to when dragged
142
+ */
143
+ rotationSnapDistance: number;
132
144
  /**
133
145
  * Fired when a rotation sphere or scale box is dragged
134
146
  */
@@ -134,6 +134,14 @@ export class BoundingBoxGizmo extends Gizmo {
134
134
  * The distance away from the object which the draggable meshes should appear world sized when fixedDragMeshScreenSize is set to true (default: 10)
135
135
  */
136
136
  this.fixedDragMeshScreenSizeDistanceFactor = 10;
137
+ /**
138
+ * Drag distance in babylon units that the gizmo will snap scaling to when dragged
139
+ */
140
+ this.scalingSnapDistance = 0;
141
+ /**
142
+ * Drag distance in babylon units that the gizmo will snap rotation to when dragged
143
+ */
144
+ this.rotationSnapDistance = 0;
137
145
  /**
138
146
  * Fired when a rotation sphere or scale box is dragged
139
147
  */
@@ -228,9 +236,11 @@ export class BoundingBoxGizmo extends Gizmo {
228
236
  sphere.addBehavior(_dragBehavior);
229
237
  const startingTurnDirection = new Vector3(1, 0, 0);
230
238
  let totalTurnAmountOfDrag = 0;
239
+ let previousProjectDist = 0;
231
240
  _dragBehavior.onDragStartObservable.add(() => {
232
241
  startingTurnDirection.copyFrom(sphere.forward);
233
242
  totalTurnAmountOfDrag = 0;
243
+ previousProjectDist = 0;
234
244
  });
235
245
  _dragBehavior.onDragObservable.add((event) => {
236
246
  this.onRotationSphereDragObservable.notifyObservers({});
@@ -259,6 +269,12 @@ export class BoundingBoxGizmo extends Gizmo {
259
269
  // Do not allow the object to turn more than a full circle
260
270
  totalTurnAmountOfDrag += projectDist;
261
271
  if (Math.abs(totalTurnAmountOfDrag) <= 2 * Math.PI) {
272
+ if (this.rotationSnapDistance > 0) {
273
+ const dragSteps = Math.floor(Math.abs(totalTurnAmountOfDrag) / this.rotationSnapDistance) * (totalTurnAmountOfDrag < 0 ? -1 : 1);
274
+ const angle = this.rotationSnapDistance * dragSteps;
275
+ projectDist = angle - previousProjectDist;
276
+ previousProjectDist = angle;
277
+ }
262
278
  if (i >= 8) {
263
279
  Quaternion.RotationYawPitchRollToRef(0, 0, projectDist, this._tmpQuaternion);
264
280
  }
@@ -268,6 +284,10 @@ export class BoundingBoxGizmo extends Gizmo {
268
284
  else {
269
285
  Quaternion.RotationYawPitchRollToRef(0, projectDist, 0, this._tmpQuaternion);
270
286
  }
287
+ // if using pivot, move anchor so mesh will be at relative (0,0,0) when parented
288
+ if (this.attachedMesh.isUsingPivotMatrix()) {
289
+ this._anchorMesh.position.copyFrom(this.attachedMesh.position);
290
+ }
271
291
  // Rotate around center of bounding box
272
292
  this._anchorMesh.addChild(this.attachedMesh, Gizmo.PreserveScaling);
273
293
  if (this._anchorMesh.getScene().useRightHandedSystem) {
@@ -316,6 +336,8 @@ export class BoundingBoxGizmo extends Gizmo {
316
336
  const _dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });
317
337
  _dragBehavior.updateDragPlane = false;
318
338
  _dragBehavior.moveAttached = false;
339
+ let totalRelativeDragDistance = 0;
340
+ let previousScale = 0;
319
341
  box.addBehavior(_dragBehavior);
320
342
  _dragBehavior.onDragObservable.add((event) => {
321
343
  this.onScaleBoxDragObservable.notifyObservers({});
@@ -326,7 +348,14 @@ export class BoundingBoxGizmo extends Gizmo {
326
348
  return;
327
349
  }
328
350
  PivotTools._RemoveAndStorePivotPoint(this.attachedMesh);
329
- const relativeDragDistance = (event.dragDistance / this._boundingDimensions.length()) * this._anchorMesh.scaling.length();
351
+ let relativeDragDistance = (event.dragDistance / this._boundingDimensions.length()) * this._anchorMesh.scaling.length();
352
+ totalRelativeDragDistance += relativeDragDistance;
353
+ if (this.scalingSnapDistance > 0) {
354
+ const dragSteps = Math.floor(Math.abs(totalRelativeDragDistance) / this.scalingSnapDistance) * (totalRelativeDragDistance < 0 ? -1 : 1);
355
+ const scale = this.scalingSnapDistance * dragSteps;
356
+ relativeDragDistance = scale - previousScale;
357
+ previousScale = scale;
358
+ }
330
359
  const deltaScale = new Vector3(relativeDragDistance, relativeDragDistance, relativeDragDistance);
331
360
  if (zeroAxisCount === 2) {
332
361
  // scale on 1 axis when using the anchor box in the face middle
@@ -351,6 +380,9 @@ export class BoundingBoxGizmo extends Gizmo {
351
380
  // Scale from the position of the opposite corner
352
381
  box.absolutePosition.subtractToRef(this._anchorMesh.position, this._tmpVector);
353
382
  this._anchorMesh.position.subtractInPlace(this._tmpVector);
383
+ if (this.attachedMesh.isUsingPivotMatrix()) {
384
+ this._anchorMesh.position.subtractInPlace(this.attachedMesh.getPivotPoint());
385
+ }
354
386
  }
355
387
  this._anchorMesh.addChild(this.attachedMesh, Gizmo.PreserveScaling);
356
388
  this._anchorMesh.scaling.addInPlace(deltaScale);
@@ -367,6 +399,8 @@ export class BoundingBoxGizmo extends Gizmo {
367
399
  _dragBehavior.onDragStartObservable.add(() => {
368
400
  this.onDragStartObservable.notifyObservers({});
369
401
  this._selectNode(box);
402
+ totalRelativeDragDistance = 0;
403
+ previousScale = 0;
370
404
  });
371
405
  _dragBehavior.onDragEndObservable.add((event) => {
372
406
  this.onScaleBoxDragEndObservable.notifyObservers({});
@@ -390,6 +424,7 @@ export class BoundingBoxGizmo extends Gizmo {
390
424
  if (pointerInfo.pickInfo && pointerInfo.pickInfo.pickedMesh == mesh) {
391
425
  pointerIds[pointerInfo.event.pointerId] = mesh;
392
426
  mesh.material = this._hoverColoredMaterial;
427
+ this._isHovered = true;
393
428
  }
394
429
  });
395
430
  }
@@ -397,6 +432,7 @@ export class BoundingBoxGizmo extends Gizmo {
397
432
  if (pointerInfo.pickInfo && pointerInfo.pickInfo.pickedMesh != pointerIds[pointerInfo.event.pointerId]) {
398
433
  pointerIds[pointerInfo.event.pointerId].material = this._coloredMaterial;
399
434
  delete pointerIds[pointerInfo.event.pointerId];
435
+ this._isHovered = false;
400
436
  }
401
437
  }
402
438
  });