@babylonjs/core 6.34.1 → 6.34.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js +28 -9
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/followCameraInputsManager.js +2 -1
- package/Cameras/followCameraInputsManager.js.map +1 -1
- package/Debug/skeletonViewer.js +2 -1
- package/Debug/skeletonViewer.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +15 -14
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +3 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +3 -2
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.d.ts +2 -4
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +4 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +4 -4
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +75 -50
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +2 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
- package/Gizmos/lightGizmo.js +2 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +1 -1
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +9 -8
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +2 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +1 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +1 -4
- package/Materials/uniformBuffer.js +2 -5
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +7 -1
- package/Meshes/Builders/groundBuilder.js +17 -8
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +2 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -1
- package/Meshes/mesh.js +3 -2
- package/Meshes/mesh.js.map +1 -1
- package/Misc/assetsManager.js +2 -2
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/dds.js +1 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/fileTools.js +4 -0
- package/Misc/fileTools.js.map +1 -1
- package/Misc/logger.d.ts +3 -3
- package/Misc/logger.js +8 -4
- package/Misc/logger.js.map +1 -1
- package/Misc/sceneSerializer.js +2 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/tools.d.ts +2 -7
- package/Misc/tools.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +3 -3
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +1 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +5 -0
- package/Physics/v2/physicsBody.js +7 -0
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +5 -10
- package/Physics/v2/ragdoll.js +29 -36
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/Rendering/GaussianSplatting/gaussianSplatting.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +2 -2
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +1 -1
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRMotionControllerManager.js +1 -1
- package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/assetContainer.js +2 -2
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +2 -4
- package/scene.js +2 -1
- package/scene.js.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FlowGraphExecutionBlockWithOutSignal } from "../../flowGraphWithOnDoneExecutionBlock.js";
|
|
2
2
|
import { RichTypeAny } from "../../flowGraphRichTypes.js";
|
|
3
3
|
import { RegisterClass } from "../../../Misc/typeStore.js";
|
|
4
|
+
import { Logger } from "../../../Misc/logger.js";
|
|
4
5
|
/**
|
|
5
6
|
* @experimental
|
|
6
7
|
* Block that logs a message to the console.
|
|
@@ -15,7 +16,7 @@ export class FlowGraphConsoleLogBlock extends FlowGraphExecutionBlockWithOutSign
|
|
|
15
16
|
*/
|
|
16
17
|
_execute(context) {
|
|
17
18
|
const messageValue = this.message.getValue(context);
|
|
18
|
-
|
|
19
|
+
Logger.Log(messageValue);
|
|
19
20
|
// activate the output flow block
|
|
20
21
|
this.out._activateSignal(context);
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowGraphConsoleLogBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"flowGraphConsoleLogBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,gCAAyB;AAE1C;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,oCAAoC;IAM9E,YAAmB,MAAqC;QACpD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,OAAyB;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzB,iCAAiC;QACjC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY;QACf,OAAO,wBAAwB,CAAC,SAAS,CAAC;IAC9C,CAAC;;AAEa,kCAAS,GAAG,mBAAmB,CAAC;AAElD,aAAa,CAAC,wBAAwB,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC","sourcesContent":["import type { FlowGraphContext } from \"../../flowGraphContext\";\r\nimport type { FlowGraphDataConnection } from \"../../flowGraphDataConnection\";\r\nimport { FlowGraphExecutionBlockWithOutSignal } from \"../../flowGraphWithOnDoneExecutionBlock\";\r\nimport { RichTypeAny } from \"../../flowGraphRichTypes\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { IFlowGraphBlockConfiguration } from \"../../flowGraphBlock\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * @experimental\r\n * Block that logs a message to the console.\r\n */\r\nexport class FlowGraphConsoleLogBlock extends FlowGraphExecutionBlockWithOutSignal {\r\n /**\r\n * Input connection: The message to log.\r\n */\r\n public readonly message: FlowGraphDataConnection<any>;\r\n\r\n public constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(config);\r\n this.message = this.registerDataInput(\"message\", RichTypeAny);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _execute(context: FlowGraphContext): void {\r\n const messageValue = this.message.getValue(context);\r\n Logger.Log(messageValue);\r\n // activate the output flow block\r\n this.out._activateSignal(context);\r\n }\r\n\r\n public getClassName(): string {\r\n return FlowGraphConsoleLogBlock.ClassName;\r\n }\r\n\r\n public static ClassName = \"FGConsoleLogBlock\";\r\n}\r\nRegisterClass(FlowGraphConsoleLogBlock.ClassName, FlowGraphConsoleLogBlock);\r\n"]}
|
package/Gizmos/lightGizmo.js
CHANGED
|
@@ -14,6 +14,7 @@ import { TransformNode } from "../Meshes/transformNode.js";
|
|
|
14
14
|
import { PointerEventTypes } from "../Events/pointerEvents.js";
|
|
15
15
|
import { Observable } from "../Misc/observable.js";
|
|
16
16
|
import { CreateCylinder } from "../Meshes/Builders/cylinderBuilder.js";
|
|
17
|
+
import { Logger } from "../Misc/logger.js";
|
|
17
18
|
/**
|
|
18
19
|
* Gizmo that enables viewing a light
|
|
19
20
|
*/
|
|
@@ -57,7 +58,7 @@ export class LightGizmo extends Gizmo {
|
|
|
57
58
|
return this.attachedMesh;
|
|
58
59
|
}
|
|
59
60
|
set attachedNode(value) {
|
|
60
|
-
|
|
61
|
+
Logger.Warn("Nodes cannot be attached to LightGizmo. Attach to a mesh instead.");
|
|
61
62
|
}
|
|
62
63
|
/**
|
|
63
64
|
* The light that the gizmo is attached to
|
package/Gizmos/lightGizmo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/lightGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport type { Scene } from \"../scene\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport { DirectionalLight } from \"../Lights/directionalLight\";\r\nimport { CreateSphere } from \"../Meshes/Builders/sphereBuilder\";\r\nimport { CreateHemisphere } from \"../Meshes/Builders/hemisphereBuilder\";\r\nimport { SpotLight } from \"../Lights/spotLight\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\n\r\n/**\r\n * Interface for light gizmo\r\n */\r\nexport interface ILightGizmo extends IGizmo {\r\n /** Event that fires each time the gizmo is clicked */\r\n onClickedObservable: Observable<Light>;\r\n /** The light that the gizmo is attached to */\r\n light: Nullable<Light>;\r\n /** The material used to render the light gizmo */\r\n readonly material: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Gizmo that enables viewing a light\r\n */\r\nexport class LightGizmo extends Gizmo implements ILightGizmo {\r\n protected _lightMesh: Mesh;\r\n protected _material: StandardMaterial;\r\n protected _cachedPosition = new Vector3();\r\n protected _cachedForward = new Vector3(0, 0, 1);\r\n protected _attachedMeshParent: TransformNode;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n\r\n /**\r\n * Event that fires each time the gizmo is clicked\r\n */\r\n public onClickedObservable = new Observable<Light>();\r\n\r\n /**\r\n * Creates a LightGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer) {\r\n super(gizmoLayer);\r\n this.attachedMesh = new AbstractMesh(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._attachedMeshParent = new TransformNode(\"parent\", this.gizmoLayer.utilityLayerScene);\r\n\r\n this.attachedMesh.parent = this._attachedMeshParent;\r\n this._material = new StandardMaterial(\"light\", this.gizmoLayer.utilityLayerScene);\r\n this._material.diffuseColor = new Color3(0.5, 0.5, 0.5);\r\n this._material.specularColor = new Color3(0.1, 0.1, 0.1);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._light) {\r\n return;\r\n }\r\n\r\n this._isHovered = !!(pointerInfo.pickInfo && this._rootMesh.getChildMeshes().indexOf(<Mesh>pointerInfo.pickInfo.pickedMesh) != -1);\r\n if (this._isHovered && pointerInfo.event.button === 0) {\r\n this.onClickedObservable.notifyObservers(this._light);\r\n }\r\n }, PointerEventTypes.POINTERDOWN);\r\n }\r\n protected _light: Nullable<Light> = null;\r\n\r\n /**\r\n * Override attachedNode because lightgizmo only support attached mesh\r\n * It will return the attached mesh (if any) and setting an attached node will log\r\n * a warning\r\n */\r\n public get attachedNode() {\r\n return this.attachedMesh;\r\n }\r\n public set attachedNode(value: Nullable<Node>) {\r\n console.warn(\"Nodes cannot be attached to LightGizmo. Attach to a mesh instead.\");\r\n }\r\n\r\n /**\r\n * The light that the gizmo is attached to\r\n */\r\n public set light(light: Nullable<Light>) {\r\n this._light = light;\r\n if (light) {\r\n // Create the mesh for the given light type\r\n if (this._lightMesh) {\r\n this._lightMesh.dispose();\r\n }\r\n\r\n if (light instanceof HemisphericLight) {\r\n this._lightMesh = LightGizmo._CreateHemisphericLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else if (light instanceof DirectionalLight) {\r\n this._lightMesh = LightGizmo._CreateDirectionalLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else if (light instanceof SpotLight) {\r\n this._lightMesh = LightGizmo._CreateSpotLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else {\r\n this._lightMesh = LightGizmo._CreatePointLightMesh(this.gizmoLayer.utilityLayerScene);\r\n }\r\n this._lightMesh.getChildMeshes(false).forEach((m) => {\r\n m.material = this._material;\r\n });\r\n this._lightMesh.parent = this._rootMesh;\r\n\r\n // Add lighting to the light gizmo\r\n const gizmoLight = this.gizmoLayer._getSharedGizmoLight();\r\n gizmoLight.includedOnlyMeshes = gizmoLight.includedOnlyMeshes.concat(this._lightMesh.getChildMeshes(false));\r\n\r\n this._lightMesh.rotationQuaternion = new Quaternion();\r\n\r\n if (!this.attachedMesh!.reservedDataStore) {\r\n this.attachedMesh!.reservedDataStore = {};\r\n }\r\n this.attachedMesh!.reservedDataStore.lightGizmo = this;\r\n\r\n if (light.parent) {\r\n this._attachedMeshParent.freezeWorldMatrix(light.parent.getWorldMatrix());\r\n }\r\n\r\n // Get update position and direction if the light has it\r\n if ((light as any).position) {\r\n this.attachedMesh!.position.copyFrom((light as any).position);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n }\r\n if ((light as any).direction) {\r\n this.attachedMesh!.setDirection((light as any).direction);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n const forward = this._getMeshForward();\r\n this._cachedForward.copyFrom(forward);\r\n }\r\n\r\n this._update();\r\n }\r\n }\r\n public get light() {\r\n return this._light;\r\n }\r\n\r\n /**\r\n * Gets the material used to render the light gizmo\r\n */\r\n public get material() {\r\n return this._material;\r\n }\r\n\r\n /**\r\n * @internal\r\n * returns mesh forward\r\n */\r\n protected _getMeshForward(): Vector3 {\r\n let forward = this.attachedMesh!.forward;\r\n if (this.attachedMesh!.getScene().useRightHandedSystem) {\r\n forward.negateToRef(TmpVectors.Vector3[0]);\r\n forward = TmpVectors.Vector3[0];\r\n }\r\n return forward;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the gizmo to match the attached mesh's position/rotation\r\n */\r\n protected _update() {\r\n super._update();\r\n if (!this._light) {\r\n return;\r\n }\r\n\r\n if (this._light.parent) {\r\n this._attachedMeshParent.freezeWorldMatrix(this._light.parent.getWorldMatrix());\r\n }\r\n\r\n // For light position and direction, a dirty flag is set to true in the setter\r\n // It means setting values individually or copying values will not call setter and\r\n // dirty flag will not be set to true. Hence creating a new Vector3.\r\n if ((this._light as any).position) {\r\n // If the gizmo is moved update the light otherwise update the gizmo to match the light\r\n if (!this.attachedMesh!.position.equals(this._cachedPosition)) {\r\n // update light to match gizmo\r\n const position = this.attachedMesh!.position;\r\n (this._light as any).position = new Vector3(position.x, position.y, position.z);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n } else {\r\n // update gizmo to match light\r\n this.attachedMesh!.position.copyFrom((this._light as any).position);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n }\r\n }\r\n if ((this._light as any).direction) {\r\n // If the gizmo is moved update the light otherwise update the gizmo to match the light\r\n const forward = this._getMeshForward();\r\n if (Vector3.DistanceSquared(forward, this._cachedForward) > 0.0001) {\r\n // update light to match gizmo\r\n const direction = forward;\r\n (this._light as any).direction = new Vector3(direction.x, direction.y, direction.z);\r\n this._cachedForward.copyFrom(forward);\r\n } else if (Vector3.DistanceSquared(forward, (this._light as any).direction) > 0.0001) {\r\n // update gizmo to match light\r\n this.attachedMesh!.setDirection((this._light as any).direction);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedForward.copyFrom(forward);\r\n }\r\n }\r\n }\r\n\r\n // Static helper methods\r\n private static _Scale = 0.007;\r\n\r\n /**\r\n * Creates the lines for a light mesh\r\n * @param levels\r\n * @param scene\r\n */\r\n private static _CreateLightLines = (levels: number, scene: Scene) => {\r\n const distFromSphere = 1.2;\r\n\r\n const root = new Mesh(\"root\", scene);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n // Create the top line, this will be cloned for all other lines\r\n const linePivot = new Mesh(\"linePivot\", scene);\r\n linePivot.parent = root;\r\n const line = CreateCylinder(\r\n \"line\",\r\n {\r\n updatable: false,\r\n height: 2,\r\n diameterTop: 0.2,\r\n diameterBottom: 0.3,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n line.position.y = line.scaling.y / 2 + distFromSphere;\r\n line.parent = linePivot;\r\n\r\n if (levels < 2) {\r\n return linePivot;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"lineParentClone\")!;\r\n l.rotation.z = Math.PI / 4;\r\n l.rotation.y = Math.PI / 2 + (Math.PI / 2) * i;\r\n\r\n l.getChildMeshes()[0].scaling.y = 0.5;\r\n l.getChildMeshes()[0].scaling.x = l.getChildMeshes()[0].scaling.z = 0.8;\r\n l.getChildMeshes()[0].position.y = l.getChildMeshes()[0].scaling.y / 2 + distFromSphere;\r\n }\r\n\r\n if (levels < 3) {\r\n return root;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI / 2;\r\n l.rotation.y = (Math.PI / 2) * i;\r\n }\r\n\r\n if (levels < 4) {\r\n return root;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI + Math.PI / 4;\r\n l.rotation.y = Math.PI / 2 + (Math.PI / 2) * i;\r\n\r\n l.getChildMeshes()[0].scaling.y = 0.5;\r\n l.getChildMeshes()[0].scaling.x = l.getChildMeshes()[0].scaling.z = 0.8;\r\n l.getChildMeshes()[0].position.y = l.getChildMeshes()[0].scaling.y / 2 + distFromSphere;\r\n }\r\n\r\n if (levels < 5) {\r\n return root;\r\n }\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI;\r\n\r\n return root;\r\n };\r\n\r\n /**\r\n * Disposes of the light gizmo\r\n */\r\n public dispose() {\r\n this.onClickedObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this._material.dispose();\r\n super.dispose();\r\n this._attachedMeshParent.dispose();\r\n }\r\n\r\n private static _CreateHemisphericLightMesh(scene: Scene) {\r\n const root = new Mesh(\"hemisphereLight\", scene);\r\n const hemisphere = CreateHemisphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n hemisphere.position.z = -0.15;\r\n hemisphere.rotation.x = Math.PI / 2;\r\n hemisphere.parent = root;\r\n\r\n const lines = this._CreateLightLines(3, scene);\r\n lines.parent = root;\r\n\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreatePointLightMesh(scene: Scene) {\r\n const root = new Mesh(\"pointLight\", scene);\r\n const sphere = CreateSphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n sphere.rotation.x = Math.PI / 2;\r\n sphere.parent = root;\r\n\r\n const lines = this._CreateLightLines(5, scene);\r\n lines.parent = root;\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateSpotLightMesh(scene: Scene) {\r\n const root = new Mesh(\"spotLight\", scene);\r\n const sphere = CreateSphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n sphere.parent = root;\r\n\r\n const hemisphere = CreateHemisphere(root.name, { segments: 10, diameter: 2 }, scene);\r\n hemisphere.parent = root;\r\n hemisphere.rotation.x = -Math.PI / 2;\r\n\r\n const lines = this._CreateLightLines(2, scene);\r\n lines.parent = root;\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateDirectionalLightMesh(scene: Scene) {\r\n const root = new Mesh(\"directionalLight\", scene);\r\n\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n const sphere = CreateSphere(root.name, { diameter: 1.2, segments: 10 }, scene);\r\n sphere.parent = mesh;\r\n\r\n const line = CreateCylinder(\r\n root.name,\r\n {\r\n updatable: false,\r\n height: 6,\r\n diameterTop: 0.3,\r\n diameterBottom: 0.3,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n line.parent = mesh;\r\n\r\n let left = line.clone(root.name)!;\r\n left.scaling.y = 0.5;\r\n left.position.x += 1.25;\r\n\r\n let right = line.clone(root.name)!;\r\n right.scaling.y = 0.5;\r\n right.position.x += -1.25;\r\n\r\n const arrowHead = CreateCylinder(\r\n root.name,\r\n {\r\n updatable: false,\r\n height: 1,\r\n diameterTop: 0,\r\n diameterBottom: 0.6,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n arrowHead.position.y += 3;\r\n arrowHead.parent = mesh;\r\n\r\n left = arrowHead.clone(root.name);\r\n left.position.y = 1.5;\r\n left.position.x += 1.25;\r\n\r\n right = arrowHead.clone(root.name);\r\n right.position.y = 1.5;\r\n right.position.x += -1.25;\r\n\r\n mesh.scaling.scaleInPlace(LightGizmo._Scale);\r\n mesh.rotation.z = Math.PI / 2;\r\n mesh.rotation.y = Math.PI / 2;\r\n return root;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"lightGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/lightGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { Node } from \"../node\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport type { Scene } from \"../scene\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport { DirectionalLight } from \"../Lights/directionalLight\";\r\nimport { CreateSphere } from \"../Meshes/Builders/sphereBuilder\";\r\nimport { CreateHemisphere } from \"../Meshes/Builders/hemisphereBuilder\";\r\nimport { SpotLight } from \"../Lights/spotLight\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Interface for light gizmo\r\n */\r\nexport interface ILightGizmo extends IGizmo {\r\n /** Event that fires each time the gizmo is clicked */\r\n onClickedObservable: Observable<Light>;\r\n /** The light that the gizmo is attached to */\r\n light: Nullable<Light>;\r\n /** The material used to render the light gizmo */\r\n readonly material: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Gizmo that enables viewing a light\r\n */\r\nexport class LightGizmo extends Gizmo implements ILightGizmo {\r\n protected _lightMesh: Mesh;\r\n protected _material: StandardMaterial;\r\n protected _cachedPosition = new Vector3();\r\n protected _cachedForward = new Vector3(0, 0, 1);\r\n protected _attachedMeshParent: TransformNode;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n\r\n /**\r\n * Event that fires each time the gizmo is clicked\r\n */\r\n public onClickedObservable = new Observable<Light>();\r\n\r\n /**\r\n * Creates a LightGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer) {\r\n super(gizmoLayer);\r\n this.attachedMesh = new AbstractMesh(\"\", this.gizmoLayer.utilityLayerScene);\r\n this._attachedMeshParent = new TransformNode(\"parent\", this.gizmoLayer.utilityLayerScene);\r\n\r\n this.attachedMesh.parent = this._attachedMeshParent;\r\n this._material = new StandardMaterial(\"light\", this.gizmoLayer.utilityLayerScene);\r\n this._material.diffuseColor = new Color3(0.5, 0.5, 0.5);\r\n this._material.specularColor = new Color3(0.1, 0.1, 0.1);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._light) {\r\n return;\r\n }\r\n\r\n this._isHovered = !!(pointerInfo.pickInfo && this._rootMesh.getChildMeshes().indexOf(<Mesh>pointerInfo.pickInfo.pickedMesh) != -1);\r\n if (this._isHovered && pointerInfo.event.button === 0) {\r\n this.onClickedObservable.notifyObservers(this._light);\r\n }\r\n }, PointerEventTypes.POINTERDOWN);\r\n }\r\n protected _light: Nullable<Light> = null;\r\n\r\n /**\r\n * Override attachedNode because lightgizmo only support attached mesh\r\n * It will return the attached mesh (if any) and setting an attached node will log\r\n * a warning\r\n */\r\n public get attachedNode() {\r\n return this.attachedMesh;\r\n }\r\n public set attachedNode(value: Nullable<Node>) {\r\n Logger.Warn(\"Nodes cannot be attached to LightGizmo. Attach to a mesh instead.\");\r\n }\r\n\r\n /**\r\n * The light that the gizmo is attached to\r\n */\r\n public set light(light: Nullable<Light>) {\r\n this._light = light;\r\n if (light) {\r\n // Create the mesh for the given light type\r\n if (this._lightMesh) {\r\n this._lightMesh.dispose();\r\n }\r\n\r\n if (light instanceof HemisphericLight) {\r\n this._lightMesh = LightGizmo._CreateHemisphericLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else if (light instanceof DirectionalLight) {\r\n this._lightMesh = LightGizmo._CreateDirectionalLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else if (light instanceof SpotLight) {\r\n this._lightMesh = LightGizmo._CreateSpotLightMesh(this.gizmoLayer.utilityLayerScene);\r\n } else {\r\n this._lightMesh = LightGizmo._CreatePointLightMesh(this.gizmoLayer.utilityLayerScene);\r\n }\r\n this._lightMesh.getChildMeshes(false).forEach((m) => {\r\n m.material = this._material;\r\n });\r\n this._lightMesh.parent = this._rootMesh;\r\n\r\n // Add lighting to the light gizmo\r\n const gizmoLight = this.gizmoLayer._getSharedGizmoLight();\r\n gizmoLight.includedOnlyMeshes = gizmoLight.includedOnlyMeshes.concat(this._lightMesh.getChildMeshes(false));\r\n\r\n this._lightMesh.rotationQuaternion = new Quaternion();\r\n\r\n if (!this.attachedMesh!.reservedDataStore) {\r\n this.attachedMesh!.reservedDataStore = {};\r\n }\r\n this.attachedMesh!.reservedDataStore.lightGizmo = this;\r\n\r\n if (light.parent) {\r\n this._attachedMeshParent.freezeWorldMatrix(light.parent.getWorldMatrix());\r\n }\r\n\r\n // Get update position and direction if the light has it\r\n if ((light as any).position) {\r\n this.attachedMesh!.position.copyFrom((light as any).position);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n }\r\n if ((light as any).direction) {\r\n this.attachedMesh!.setDirection((light as any).direction);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n const forward = this._getMeshForward();\r\n this._cachedForward.copyFrom(forward);\r\n }\r\n\r\n this._update();\r\n }\r\n }\r\n public get light() {\r\n return this._light;\r\n }\r\n\r\n /**\r\n * Gets the material used to render the light gizmo\r\n */\r\n public get material() {\r\n return this._material;\r\n }\r\n\r\n /**\r\n * @internal\r\n * returns mesh forward\r\n */\r\n protected _getMeshForward(): Vector3 {\r\n let forward = this.attachedMesh!.forward;\r\n if (this.attachedMesh!.getScene().useRightHandedSystem) {\r\n forward.negateToRef(TmpVectors.Vector3[0]);\r\n forward = TmpVectors.Vector3[0];\r\n }\r\n return forward;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates the gizmo to match the attached mesh's position/rotation\r\n */\r\n protected _update() {\r\n super._update();\r\n if (!this._light) {\r\n return;\r\n }\r\n\r\n if (this._light.parent) {\r\n this._attachedMeshParent.freezeWorldMatrix(this._light.parent.getWorldMatrix());\r\n }\r\n\r\n // For light position and direction, a dirty flag is set to true in the setter\r\n // It means setting values individually or copying values will not call setter and\r\n // dirty flag will not be set to true. Hence creating a new Vector3.\r\n if ((this._light as any).position) {\r\n // If the gizmo is moved update the light otherwise update the gizmo to match the light\r\n if (!this.attachedMesh!.position.equals(this._cachedPosition)) {\r\n // update light to match gizmo\r\n const position = this.attachedMesh!.position;\r\n (this._light as any).position = new Vector3(position.x, position.y, position.z);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n } else {\r\n // update gizmo to match light\r\n this.attachedMesh!.position.copyFrom((this._light as any).position);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedPosition.copyFrom(this.attachedMesh!.position);\r\n }\r\n }\r\n if ((this._light as any).direction) {\r\n // If the gizmo is moved update the light otherwise update the gizmo to match the light\r\n const forward = this._getMeshForward();\r\n if (Vector3.DistanceSquared(forward, this._cachedForward) > 0.0001) {\r\n // update light to match gizmo\r\n const direction = forward;\r\n (this._light as any).direction = new Vector3(direction.x, direction.y, direction.z);\r\n this._cachedForward.copyFrom(forward);\r\n } else if (Vector3.DistanceSquared(forward, (this._light as any).direction) > 0.0001) {\r\n // update gizmo to match light\r\n this.attachedMesh!.setDirection((this._light as any).direction);\r\n this.attachedMesh!.computeWorldMatrix(true);\r\n this._cachedForward.copyFrom(forward);\r\n }\r\n }\r\n }\r\n\r\n // Static helper methods\r\n private static _Scale = 0.007;\r\n\r\n /**\r\n * Creates the lines for a light mesh\r\n * @param levels\r\n * @param scene\r\n */\r\n private static _CreateLightLines = (levels: number, scene: Scene) => {\r\n const distFromSphere = 1.2;\r\n\r\n const root = new Mesh(\"root\", scene);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n // Create the top line, this will be cloned for all other lines\r\n const linePivot = new Mesh(\"linePivot\", scene);\r\n linePivot.parent = root;\r\n const line = CreateCylinder(\r\n \"line\",\r\n {\r\n updatable: false,\r\n height: 2,\r\n diameterTop: 0.2,\r\n diameterBottom: 0.3,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n line.position.y = line.scaling.y / 2 + distFromSphere;\r\n line.parent = linePivot;\r\n\r\n if (levels < 2) {\r\n return linePivot;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"lineParentClone\")!;\r\n l.rotation.z = Math.PI / 4;\r\n l.rotation.y = Math.PI / 2 + (Math.PI / 2) * i;\r\n\r\n l.getChildMeshes()[0].scaling.y = 0.5;\r\n l.getChildMeshes()[0].scaling.x = l.getChildMeshes()[0].scaling.z = 0.8;\r\n l.getChildMeshes()[0].position.y = l.getChildMeshes()[0].scaling.y / 2 + distFromSphere;\r\n }\r\n\r\n if (levels < 3) {\r\n return root;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI / 2;\r\n l.rotation.y = (Math.PI / 2) * i;\r\n }\r\n\r\n if (levels < 4) {\r\n return root;\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI + Math.PI / 4;\r\n l.rotation.y = Math.PI / 2 + (Math.PI / 2) * i;\r\n\r\n l.getChildMeshes()[0].scaling.y = 0.5;\r\n l.getChildMeshes()[0].scaling.x = l.getChildMeshes()[0].scaling.z = 0.8;\r\n l.getChildMeshes()[0].position.y = l.getChildMeshes()[0].scaling.y / 2 + distFromSphere;\r\n }\r\n\r\n if (levels < 5) {\r\n return root;\r\n }\r\n const l = linePivot.clone(\"linePivotClone\");\r\n l.rotation.z = Math.PI;\r\n\r\n return root;\r\n };\r\n\r\n /**\r\n * Disposes of the light gizmo\r\n */\r\n public dispose() {\r\n this.onClickedObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this._material.dispose();\r\n super.dispose();\r\n this._attachedMeshParent.dispose();\r\n }\r\n\r\n private static _CreateHemisphericLightMesh(scene: Scene) {\r\n const root = new Mesh(\"hemisphereLight\", scene);\r\n const hemisphere = CreateHemisphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n hemisphere.position.z = -0.15;\r\n hemisphere.rotation.x = Math.PI / 2;\r\n hemisphere.parent = root;\r\n\r\n const lines = this._CreateLightLines(3, scene);\r\n lines.parent = root;\r\n\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreatePointLightMesh(scene: Scene) {\r\n const root = new Mesh(\"pointLight\", scene);\r\n const sphere = CreateSphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n sphere.rotation.x = Math.PI / 2;\r\n sphere.parent = root;\r\n\r\n const lines = this._CreateLightLines(5, scene);\r\n lines.parent = root;\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateSpotLightMesh(scene: Scene) {\r\n const root = new Mesh(\"spotLight\", scene);\r\n const sphere = CreateSphere(root.name, { segments: 10, diameter: 1 }, scene);\r\n sphere.parent = root;\r\n\r\n const hemisphere = CreateHemisphere(root.name, { segments: 10, diameter: 2 }, scene);\r\n hemisphere.parent = root;\r\n hemisphere.rotation.x = -Math.PI / 2;\r\n\r\n const lines = this._CreateLightLines(2, scene);\r\n lines.parent = root;\r\n root.scaling.scaleInPlace(LightGizmo._Scale);\r\n root.rotation.x = Math.PI / 2;\r\n\r\n return root;\r\n }\r\n\r\n private static _CreateDirectionalLightMesh(scene: Scene) {\r\n const root = new Mesh(\"directionalLight\", scene);\r\n\r\n const mesh = new Mesh(root.name, scene);\r\n mesh.parent = root;\r\n const sphere = CreateSphere(root.name, { diameter: 1.2, segments: 10 }, scene);\r\n sphere.parent = mesh;\r\n\r\n const line = CreateCylinder(\r\n root.name,\r\n {\r\n updatable: false,\r\n height: 6,\r\n diameterTop: 0.3,\r\n diameterBottom: 0.3,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n line.parent = mesh;\r\n\r\n let left = line.clone(root.name)!;\r\n left.scaling.y = 0.5;\r\n left.position.x += 1.25;\r\n\r\n let right = line.clone(root.name)!;\r\n right.scaling.y = 0.5;\r\n right.position.x += -1.25;\r\n\r\n const arrowHead = CreateCylinder(\r\n root.name,\r\n {\r\n updatable: false,\r\n height: 1,\r\n diameterTop: 0,\r\n diameterBottom: 0.6,\r\n tessellation: 6,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n arrowHead.position.y += 3;\r\n arrowHead.parent = mesh;\r\n\r\n left = arrowHead.clone(root.name);\r\n left.position.y = 1.5;\r\n left.position.x += 1.25;\r\n\r\n right = arrowHead.clone(root.name);\r\n right.position.y = 1.5;\r\n right.position.x += -1.25;\r\n\r\n mesh.scaling.scaleInPlace(LightGizmo._Scale);\r\n mesh.rotation.z = Math.PI / 2;\r\n mesh.rotation.y = Math.PI / 2;\r\n return root;\r\n }\r\n}\r\n"]}
|
package/Gizmos/rotationGizmo.js
CHANGED
|
@@ -43,7 +43,7 @@ export class RotationGizmo extends Gizmo {
|
|
|
43
43
|
}
|
|
44
44
|
_checkBillboardTransform() {
|
|
45
45
|
if (this._nodeAttached && this._nodeAttached.billboardMode) {
|
|
46
|
-
|
|
46
|
+
Logger.Log("Rotation Gizmo will not work with transforms in billboard mode.");
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotationGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/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 type { Quaternion } 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 { GizmoAnchorPoint, GizmoCoordinatesMode, 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 being dragged */\r\n onDragObservable: 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 /** Custom sensitivity value for the drag strength */\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 * 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 being dragged */\r\n public onDragObservable = 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 protected _sensitivity: number = 1;\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 * 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].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 * 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.onDragObservable.add(() => {\r\n this.onDragObservable.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 /**\r\n * If set the gizmo's rotation will be updated to match the attached mesh each frame (Default: true)\r\n * NOTE: This is only possible for meshes with uniform scaling, as otherwise it's not possible to decompose the rotation\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 public set updateGizmoPositionToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoPositionToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoPositionToMatchAttachedMesh;\r\n }\r\n\r\n public set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.anchorPoint = value;\r\n });\r\n }\r\n public get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.coordinatesMode = coordinatesMode;\r\n });\r\n }\r\n\r\n public set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public get updateScale() {\r\n return this.xGizmo.updateScale;\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 * posture that the gizmo will be display\r\n * When set null, default value will be used (Quaternion(0, 0, 0, 1))\r\n */\r\n public get customRotationQuaternion(): Nullable<Quaternion> {\r\n return this._customRotationQuaternion;\r\n }\r\n\r\n public set customRotationQuaternion(customRotationQuaternion: Nullable<Quaternion>) {\r\n this._customRotationQuaternion = customRotationQuaternion;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.customRotationQuaternion = customRotationQuaternion;\r\n }\r\n });\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.onDragObservable.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":["../../../../dev/core/src/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 type { Quaternion } 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 { GizmoAnchorPoint, GizmoCoordinatesMode, 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 being dragged */\r\n onDragObservable: 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 /** Custom sensitivity value for the drag strength */\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 * 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 being dragged */\r\n public onDragObservable = 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 protected _sensitivity: number = 1;\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 Logger.Log(\"Rotation Gizmo will not work with transforms in billboard mode.\");\r\n }\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].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 * 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.onDragObservable.add(() => {\r\n this.onDragObservable.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 /**\r\n * If set the gizmo's rotation will be updated to match the attached mesh each frame (Default: true)\r\n * NOTE: This is only possible for meshes with uniform scaling, as otherwise it's not possible to decompose the rotation\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 public set updateGizmoPositionToMatchAttachedMesh(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.yGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n this.zGizmo.updateGizmoPositionToMatchAttachedMesh = value;\r\n }\r\n }\r\n public get updateGizmoPositionToMatchAttachedMesh() {\r\n return this.xGizmo.updateGizmoPositionToMatchAttachedMesh;\r\n }\r\n\r\n public set anchorPoint(value: GizmoAnchorPoint) {\r\n this._anchorPoint = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.anchorPoint = value;\r\n });\r\n }\r\n public get anchorPoint() {\r\n return this._anchorPoint;\r\n }\r\n\r\n /**\r\n * Set the coordinate system to use. By default it's local.\r\n * But it's possible for a user to tweak so its local for translation and world for rotation.\r\n * In that case, setting the coordinate system will change `updateGizmoRotationToMatchAttachedMesh` and `updateGizmoPositionToMatchAttachedMesh`\r\n */\r\n public set coordinatesMode(coordinatesMode: GizmoCoordinatesMode) {\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n gizmo.coordinatesMode = coordinatesMode;\r\n });\r\n }\r\n\r\n public set updateScale(value: boolean) {\r\n if (this.xGizmo) {\r\n this.xGizmo.updateScale = value;\r\n this.yGizmo.updateScale = value;\r\n this.zGizmo.updateScale = value;\r\n }\r\n }\r\n public get updateScale() {\r\n return this.xGizmo.updateScale;\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 * posture that the gizmo will be display\r\n * When set null, default value will be used (Quaternion(0, 0, 0, 1))\r\n */\r\n public get customRotationQuaternion(): Nullable<Quaternion> {\r\n return this._customRotationQuaternion;\r\n }\r\n\r\n public set customRotationQuaternion(customRotationQuaternion: Nullable<Quaternion>) {\r\n this._customRotationQuaternion = customRotationQuaternion;\r\n [this.xGizmo, this.yGizmo, this.zGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.customRotationQuaternion = customRotationQuaternion;\r\n }\r\n });\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.onDragObservable.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"]}
|
|
@@ -25,7 +25,7 @@ export class CascadedShadowGenerator extends ShadowGenerator {
|
|
|
25
25
|
if (filter === ShadowGenerator.FILTER_NONE || filter === ShadowGenerator.FILTER_PCF || filter === ShadowGenerator.FILTER_PCSS) {
|
|
26
26
|
return filter;
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
Logger.Error('Unsupported filter "' + filter + '"!');
|
|
29
29
|
return ShadowGenerator.FILTER_NONE;
|
|
30
30
|
}
|
|
31
31
|
/**
|