@babylonjs/core 5.18.0 → 5.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Debug/debugLayer.d.ts +36 -0
- package/Debug/debugLayer.js.map +1 -1
- package/Engines/Extensions/engine.query.js +5 -1
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.transformFeedback.js +5 -1
- package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
- package/Engines/engine.d.ts +15 -242
- package/Engines/thinEngine.d.ts +1 -1
- package/Engines/thinEngine.js +7 -3
- package/Engines/thinEngine.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +20 -1
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +26 -1
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +71 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +15 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +8 -8
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +13 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +20 -1
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.d.ts +22 -1
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +44 -10
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +29 -6
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +34 -6
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +3 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Maths/math.vector.d.ts +16 -1
- package/Maths/math.vector.js +35 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/groundMesh.js +1 -1
- package/Meshes/groundMesh.js.map +1 -1
- package/Misc/assetsManager.d.ts +9 -0
- package/Misc/assetsManager.js +3 -1
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +7 -4
- package/Misc/basis.js.map +1 -1
- package/Misc/computePressure.d.ts +9 -3
- package/Misc/computePressure.js +13 -5
- package/Misc/computePressure.js.map +1 -1
- package/Physics/physicsImpostor.js +8 -2
- package/Physics/physicsImpostor.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +5 -3
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gizmoManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/gizmoManager.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 { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Scene, IDisposable } from \"../scene\";\r\nimport type { Node } from \"../node\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { SixDofDragBehavior } from \"../Behaviors/Meshes/sixDofDragBehavior\";\r\nimport type { GizmoAxisCache } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { RotationGizmo } from \"./rotationGizmo\";\r\nimport { PositionGizmo } from \"./positionGizmo\";\r\nimport { ScaleGizmo } from \"./scaleGizmo\";\r\nimport { BoundingBoxGizmo } from \"./boundingBoxGizmo\";\r\n\r\n/**\r\n * Helps setup gizmo's in the scene to rotate/scale/position nodes\r\n */\r\nexport class GizmoManager implements IDisposable {\r\n /**\r\n * Gizmo's created by the gizmo manager, gizmo will be null until gizmo has been enabled for the first time\r\n */\r\n public gizmos: {\r\n positionGizmo: Nullable<PositionGizmo>;\r\n rotationGizmo: Nullable<RotationGizmo>;\r\n scaleGizmo: Nullable<ScaleGizmo>;\r\n boundingBoxGizmo: Nullable<BoundingBoxGizmo>;\r\n };\r\n\r\n /** When true, the gizmo will be detached from the current object when a pointer down occurs with an empty picked mesh */\r\n public clearGizmoOnEmptyPointerEvent = false;\r\n\r\n /** When true (default), picking to attach a new mesh is enabled. This works in sync with inspector autopicking. */\r\n public enableAutoPicking = true;\r\n\r\n /** Fires an event when the manager is attached to a mesh */\r\n public onAttachedToMeshObservable = new Observable<Nullable<AbstractMesh>>();\r\n\r\n /** Fires an event when the manager is attached to a node */\r\n public onAttachedToNodeObservable = new Observable<Nullable<Node>>();\r\n\r\n protected _gizmosEnabled = { positionGizmo: false, rotationGizmo: false, scaleGizmo: false, boundingBoxGizmo: false };\r\n protected _pointerObservers: Observer<PointerInfo>[] = [];\r\n protected _attachedMesh: Nullable<AbstractMesh> = null;\r\n protected _attachedNode: Nullable<Node> = null;\r\n protected _boundingBoxColor = Color3.FromHexString(\"#0984e3\");\r\n protected _defaultUtilityLayer: UtilityLayerRenderer;\r\n protected _defaultKeepDepthUtilityLayer: UtilityLayerRenderer;\r\n protected _thickness: number = 1;\r\n protected _scaleRatio: number = 1;\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n /**\r\n * When bounding box gizmo is enabled, this can be used to track drag/end events\r\n */\r\n public boundingBoxDragBehavior = new SixDofDragBehavior();\r\n /**\r\n * Array of meshes which will have the gizmo attached when a pointer selected them. If null, all meshes are attachable. (Default: null)\r\n */\r\n public attachableMeshes: Nullable<Array<AbstractMesh>> = null;\r\n /**\r\n * Array of nodes which will have the gizmo attached when a pointer selected them. If null, all nodes are attachable. (Default: null)\r\n */\r\n public attachableNodes: Nullable<Array<Node>> = null;\r\n /**\r\n * If pointer events should perform attaching/detaching a gizmo, if false this can be done manually via attachToMesh/attachToNode. (Default: true)\r\n */\r\n public usePointerToAttachGizmos = true;\r\n\r\n /**\r\n * Utility layer that the bounding box gizmo belongs to\r\n */\r\n public get keepDepthUtilityLayer() {\r\n return this._defaultKeepDepthUtilityLayer;\r\n }\r\n\r\n /**\r\n * Utility layer that all gizmos besides bounding box belong to\r\n */\r\n public get utilityLayer() {\r\n return this._defaultUtilityLayer;\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 for (const key in this.gizmos) {\r\n const gizmo = <Nullable<Gizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && gizmo.isHovered) {\r\n hovered = true;\r\n break;\r\n }\r\n }\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.gizmos.positionGizmo, this.gizmos.rotationGizmo, this.gizmos.scaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Instantiates a gizmo manager\r\n * @param _scene the scene to overlay the gizmos on top of\r\n * @param thickness display gizmo axis thickness\r\n * @param utilityLayer the layer where gizmos are rendered\r\n * @param keepDepthUtilityLayer the layer where occluded gizmos are rendered\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n thickness: number = 1,\r\n utilityLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n keepDepthUtilityLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultKeepDepthUtilityLayer\r\n ) {\r\n this._defaultUtilityLayer = utilityLayer;\r\n this._defaultKeepDepthUtilityLayer = keepDepthUtilityLayer;\r\n this._defaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\r\n this._thickness = thickness;\r\n this.gizmos = { positionGizmo: null, rotationGizmo: null, scaleGizmo: null, boundingBoxGizmo: null };\r\n\r\n const attachToMeshPointerObserver = this._attachToMeshPointerObserver(_scene);\r\n const gizmoAxisPointerObserver = Gizmo.GizmoAxisPointerObserver(this._defaultUtilityLayer, this._gizmoAxisCache);\r\n this._pointerObservers = [attachToMeshPointerObserver, gizmoAxisPointerObserver];\r\n }\r\n\r\n /**\r\n * Subscribes to pointer down events, for attaching and detaching mesh\r\n * @param scene The scene layer the observer will be added to\r\n */\r\n private _attachToMeshPointerObserver(scene: Scene): Observer<PointerInfo> {\r\n // Instantiate/dispose gizmos based on pointer actions\r\n const pointerObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this.usePointerToAttachGizmos) {\r\n return;\r\n }\r\n if (pointerInfo.type == PointerEventTypes.POINTERDOWN) {\r\n if (pointerInfo.pickInfo && pointerInfo.pickInfo.pickedMesh) {\r\n if (this.enableAutoPicking) {\r\n let node: Nullable<Node> = pointerInfo.pickInfo.pickedMesh;\r\n if (this.attachableMeshes == null) {\r\n // Attach to the most parent node\r\n while (node && node.parent != null) {\r\n node = node.parent;\r\n }\r\n } else {\r\n // Attach to the parent node that is an attachableMesh\r\n let found = false;\r\n this.attachableMeshes.forEach((mesh) => {\r\n if (node && (node == mesh || node.isDescendantOf(mesh))) {\r\n node = mesh;\r\n found = true;\r\n }\r\n });\r\n if (!found) {\r\n node = null;\r\n }\r\n }\r\n if (node instanceof AbstractMesh) {\r\n if (this._attachedMesh != node) {\r\n this.attachToMesh(node);\r\n }\r\n } else {\r\n if (this.clearGizmoOnEmptyPointerEvent) {\r\n this.attachToMesh(null);\r\n }\r\n }\r\n }\r\n } else {\r\n if (this.clearGizmoOnEmptyPointerEvent) {\r\n this.attachToMesh(null);\r\n }\r\n }\r\n }\r\n });\r\n return pointerObserver!;\r\n }\r\n\r\n /**\r\n * Attaches a set of gizmos to the specified mesh\r\n * @param mesh The mesh the gizmo's should be attached to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this._attachedMesh = mesh;\r\n this._attachedNode = null;\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<Gizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && (<any>this._gizmosEnabled)[key]) {\r\n gizmo.attachedMesh = mesh;\r\n }\r\n }\r\n if (this.boundingBoxGizmoEnabled && this._attachedMesh) {\r\n this._attachedMesh.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.onAttachedToMeshObservable.notifyObservers(mesh);\r\n }\r\n\r\n /**\r\n * Attaches a set of gizmos to the specified node\r\n * @param node The node the gizmo's should be attached to\r\n */\r\n public attachToNode(node: Nullable<Node>) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this._attachedMesh = null;\r\n this._attachedNode = node;\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<Gizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && (<any>this._gizmosEnabled)[key]) {\r\n gizmo.attachedNode = node;\r\n }\r\n }\r\n if (this.boundingBoxGizmoEnabled && this._attachedNode) {\r\n this._attachedNode.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.onAttachedToNodeObservable.notifyObservers(node);\r\n }\r\n\r\n /**\r\n * If the position gizmo is enabled\r\n */\r\n public set positionGizmoEnabled(value: boolean) {\r\n if (value) {\r\n if (!this.gizmos.positionGizmo) {\r\n this.gizmos.positionGizmo = new PositionGizmo(this._defaultUtilityLayer, this._thickness, this);\r\n }\r\n if (this._attachedNode) {\r\n this.gizmos.positionGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.positionGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.positionGizmo) {\r\n this.gizmos.positionGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.positionGizmo = value;\r\n }\r\n public get positionGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.positionGizmo;\r\n }\r\n /**\r\n * If the rotation gizmo is enabled\r\n */\r\n public set rotationGizmoEnabled(value: boolean) {\r\n if (value) {\r\n if (!this.gizmos.rotationGizmo) {\r\n this.gizmos.rotationGizmo = new RotationGizmo(this._defaultUtilityLayer, 32, false, this._thickness, this);\r\n }\r\n if (this._attachedNode) {\r\n this.gizmos.rotationGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.rotationGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.rotationGizmo) {\r\n this.gizmos.rotationGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.rotationGizmo = value;\r\n }\r\n public get rotationGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.rotationGizmo;\r\n }\r\n /**\r\n * If the scale gizmo is enabled\r\n */\r\n public set scaleGizmoEnabled(value: boolean) {\r\n if (value) {\r\n this.gizmos.scaleGizmo = this.gizmos.scaleGizmo || new ScaleGizmo(this._defaultUtilityLayer, this._thickness, this);\r\n if (this._attachedNode) {\r\n this.gizmos.scaleGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.scaleGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.scaleGizmo) {\r\n this.gizmos.scaleGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.scaleGizmo = value;\r\n }\r\n public get scaleGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.scaleGizmo;\r\n }\r\n /**\r\n * If the boundingBox gizmo is enabled\r\n */\r\n public set boundingBoxGizmoEnabled(value: boolean) {\r\n if (value) {\r\n this.gizmos.boundingBoxGizmo = this.gizmos.boundingBoxGizmo || new BoundingBoxGizmo(this._boundingBoxColor, this._defaultKeepDepthUtilityLayer);\r\n if (this._attachedMesh) {\r\n this.gizmos.boundingBoxGizmo.attachedMesh = this._attachedMesh;\r\n } else {\r\n this.gizmos.boundingBoxGizmo.attachedNode = this._attachedNode;\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n this._attachedMesh.addBehavior(this.boundingBoxDragBehavior);\r\n } else if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n this._attachedNode.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n } else if (this.gizmos.boundingBoxGizmo) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n } else if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.gizmos.boundingBoxGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.boundingBoxGizmo = value;\r\n }\r\n public get boundingBoxGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.boundingBoxGizmo;\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 gizmoAxisCache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(gizmoAxisCache: Map<Mesh, GizmoAxisCache>) {\r\n if (gizmoAxisCache.size > 0) {\r\n gizmoAxisCache.forEach((v, k) => {\r\n this._gizmoAxisCache.set(k, v);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo manager\r\n */\r\n public dispose() {\r\n this._pointerObservers.forEach((observer) => {\r\n this._scene.onPointerObservable.remove(observer);\r\n });\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<Gizmo>>(<any>this.gizmos)[key];\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n }\r\n if (this._defaultKeepDepthUtilityLayer !== UtilityLayerRenderer._DefaultKeepDepthUtilityLayer) {\r\n this._defaultKeepDepthUtilityLayer?.dispose();\r\n }\r\n if (this._defaultUtilityLayer !== UtilityLayerRenderer._DefaultUtilityLayer) {\r\n this._defaultUtilityLayer?.dispose();\r\n }\r\n this.boundingBoxDragBehavior.detach();\r\n this.onAttachedToMeshObservable.clear();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"gizmoManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/gizmoManager.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 { PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport type { Scene, IDisposable } from \"../scene\";\r\nimport type { Node } from \"../node\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { SixDofDragBehavior } from \"../Behaviors/Meshes/sixDofDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport type { IRotationGizmo } from \"./rotationGizmo\";\r\nimport { RotationGizmo } from \"./rotationGizmo\";\r\nimport type { IPositionGizmo } from \"./positionGizmo\";\r\nimport { PositionGizmo } from \"./positionGizmo\";\r\nimport type { IScaleGizmo } from \"./scaleGizmo\";\r\nimport { ScaleGizmo } from \"./scaleGizmo\";\r\nimport type { IBoundingBoxGizmo } from \"./boundingBoxGizmo\";\r\nimport { BoundingBoxGizmo } from \"./boundingBoxGizmo\";\r\n\r\n/**\r\n * Helps setup gizmo's in the scene to rotate/scale/position nodes\r\n */\r\nexport class GizmoManager implements IDisposable {\r\n /**\r\n * Gizmo's created by the gizmo manager, gizmo will be null until gizmo has been enabled for the first time\r\n */\r\n public gizmos: {\r\n positionGizmo: Nullable<IPositionGizmo>;\r\n rotationGizmo: Nullable<IRotationGizmo>;\r\n scaleGizmo: Nullable<IScaleGizmo>;\r\n boundingBoxGizmo: Nullable<IBoundingBoxGizmo>;\r\n };\r\n\r\n /** When true, the gizmo will be detached from the current object when a pointer down occurs with an empty picked mesh */\r\n public clearGizmoOnEmptyPointerEvent = false;\r\n\r\n /** When true (default), picking to attach a new mesh is enabled. This works in sync with inspector autopicking. */\r\n public enableAutoPicking = true;\r\n\r\n /** Fires an event when the manager is attached to a mesh */\r\n public onAttachedToMeshObservable = new Observable<Nullable<AbstractMesh>>();\r\n\r\n /** Fires an event when the manager is attached to a node */\r\n public onAttachedToNodeObservable = new Observable<Nullable<Node>>();\r\n\r\n protected _gizmosEnabled = { positionGizmo: false, rotationGizmo: false, scaleGizmo: false, boundingBoxGizmo: false };\r\n protected _pointerObservers: Observer<PointerInfo>[] = [];\r\n protected _attachedMesh: Nullable<AbstractMesh> = null;\r\n protected _attachedNode: Nullable<Node> = null;\r\n protected _boundingBoxColor = Color3.FromHexString(\"#0984e3\");\r\n protected _defaultUtilityLayer: UtilityLayerRenderer;\r\n protected _defaultKeepDepthUtilityLayer: UtilityLayerRenderer;\r\n protected _thickness: number = 1;\r\n protected _scaleRatio: number = 1;\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n /**\r\n * When bounding box gizmo is enabled, this can be used to track drag/end events\r\n */\r\n public boundingBoxDragBehavior = new SixDofDragBehavior();\r\n /**\r\n * Array of meshes which will have the gizmo attached when a pointer selected them. If null, all meshes are attachable. (Default: null)\r\n */\r\n public attachableMeshes: Nullable<Array<AbstractMesh>> = null;\r\n /**\r\n * Array of nodes which will have the gizmo attached when a pointer selected them. If null, all nodes are attachable. (Default: null)\r\n */\r\n public attachableNodes: Nullable<Array<Node>> = null;\r\n /**\r\n * If pointer events should perform attaching/detaching a gizmo, if false this can be done manually via attachToMesh/attachToNode. (Default: true)\r\n */\r\n public usePointerToAttachGizmos = true;\r\n\r\n /**\r\n * Utility layer that the bounding box gizmo belongs to\r\n */\r\n public get keepDepthUtilityLayer() {\r\n return this._defaultKeepDepthUtilityLayer;\r\n }\r\n\r\n /**\r\n * Utility layer that all gizmos besides bounding box belong to\r\n */\r\n public get utilityLayer() {\r\n return this._defaultUtilityLayer;\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 for (const key in this.gizmos) {\r\n const gizmo = <Nullable<IGizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && gizmo.isHovered) {\r\n hovered = true;\r\n break;\r\n }\r\n }\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.gizmos.positionGizmo, this.gizmos.rotationGizmo, this.gizmos.scaleGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Instantiates a gizmo manager\r\n * @param _scene the scene to overlay the gizmos on top of\r\n * @param thickness display gizmo axis thickness\r\n * @param utilityLayer the layer where gizmos are rendered\r\n * @param keepDepthUtilityLayer the layer where occluded gizmos are rendered\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n thickness: number = 1,\r\n utilityLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n keepDepthUtilityLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultKeepDepthUtilityLayer\r\n ) {\r\n this._defaultUtilityLayer = utilityLayer;\r\n this._defaultKeepDepthUtilityLayer = keepDepthUtilityLayer;\r\n this._defaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;\r\n this._thickness = thickness;\r\n this.gizmos = { positionGizmo: null, rotationGizmo: null, scaleGizmo: null, boundingBoxGizmo: null };\r\n\r\n const attachToMeshPointerObserver = this._attachToMeshPointerObserver(_scene);\r\n const gizmoAxisPointerObserver = Gizmo.GizmoAxisPointerObserver(this._defaultUtilityLayer, this._gizmoAxisCache);\r\n this._pointerObservers = [attachToMeshPointerObserver, gizmoAxisPointerObserver];\r\n }\r\n\r\n /**\r\n * Subscribes to pointer down events, for attaching and detaching mesh\r\n * @param scene The scene layer the observer will be added to\r\n */\r\n private _attachToMeshPointerObserver(scene: Scene): Observer<PointerInfo> {\r\n // Instantiate/dispose gizmos based on pointer actions\r\n const pointerObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this.usePointerToAttachGizmos) {\r\n return;\r\n }\r\n if (pointerInfo.type == PointerEventTypes.POINTERDOWN) {\r\n if (pointerInfo.pickInfo && pointerInfo.pickInfo.pickedMesh) {\r\n if (this.enableAutoPicking) {\r\n let node: Nullable<Node> = pointerInfo.pickInfo.pickedMesh;\r\n if (this.attachableMeshes == null) {\r\n // Attach to the most parent node\r\n while (node && node.parent != null) {\r\n node = node.parent;\r\n }\r\n } else {\r\n // Attach to the parent node that is an attachableMesh\r\n let found = false;\r\n this.attachableMeshes.forEach((mesh) => {\r\n if (node && (node == mesh || node.isDescendantOf(mesh))) {\r\n node = mesh;\r\n found = true;\r\n }\r\n });\r\n if (!found) {\r\n node = null;\r\n }\r\n }\r\n if (node instanceof AbstractMesh) {\r\n if (this._attachedMesh != node) {\r\n this.attachToMesh(node);\r\n }\r\n } else {\r\n if (this.clearGizmoOnEmptyPointerEvent) {\r\n this.attachToMesh(null);\r\n }\r\n }\r\n }\r\n } else {\r\n if (this.clearGizmoOnEmptyPointerEvent) {\r\n this.attachToMesh(null);\r\n }\r\n }\r\n }\r\n });\r\n return pointerObserver!;\r\n }\r\n\r\n /**\r\n * Attaches a set of gizmos to the specified mesh\r\n * @param mesh The mesh the gizmo's should be attached to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this._attachedMesh = mesh;\r\n this._attachedNode = null;\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<IGizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && (<any>this._gizmosEnabled)[key]) {\r\n gizmo.attachedMesh = mesh;\r\n }\r\n }\r\n if (this.boundingBoxGizmoEnabled && this._attachedMesh) {\r\n this._attachedMesh.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.onAttachedToMeshObservable.notifyObservers(mesh);\r\n }\r\n\r\n /**\r\n * Attaches a set of gizmos to the specified node\r\n * @param node The node the gizmo's should be attached to\r\n */\r\n public attachToNode(node: Nullable<Node>) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this._attachedMesh = null;\r\n this._attachedNode = node;\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<IGizmo>>(<any>this.gizmos)[key];\r\n if (gizmo && (<any>this._gizmosEnabled)[key]) {\r\n gizmo.attachedNode = node;\r\n }\r\n }\r\n if (this.boundingBoxGizmoEnabled && this._attachedNode) {\r\n this._attachedNode.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.onAttachedToNodeObservable.notifyObservers(node);\r\n }\r\n\r\n /**\r\n * If the position gizmo is enabled\r\n */\r\n public set positionGizmoEnabled(value: boolean) {\r\n if (value) {\r\n if (!this.gizmos.positionGizmo) {\r\n this.gizmos.positionGizmo = new PositionGizmo(this._defaultUtilityLayer, this._thickness, this);\r\n }\r\n if (this._attachedNode) {\r\n this.gizmos.positionGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.positionGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.positionGizmo) {\r\n this.gizmos.positionGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.positionGizmo = value;\r\n }\r\n public get positionGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.positionGizmo;\r\n }\r\n /**\r\n * If the rotation gizmo is enabled\r\n */\r\n public set rotationGizmoEnabled(value: boolean) {\r\n if (value) {\r\n if (!this.gizmos.rotationGizmo) {\r\n this.gizmos.rotationGizmo = new RotationGizmo(this._defaultUtilityLayer, 32, false, this._thickness, this);\r\n }\r\n if (this._attachedNode) {\r\n this.gizmos.rotationGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.rotationGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.rotationGizmo) {\r\n this.gizmos.rotationGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.rotationGizmo = value;\r\n }\r\n public get rotationGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.rotationGizmo;\r\n }\r\n /**\r\n * If the scale gizmo is enabled\r\n */\r\n public set scaleGizmoEnabled(value: boolean) {\r\n if (value) {\r\n this.gizmos.scaleGizmo = this.gizmos.scaleGizmo || new ScaleGizmo(this._defaultUtilityLayer, this._thickness, this);\r\n if (this._attachedNode) {\r\n this.gizmos.scaleGizmo.attachedNode = this._attachedNode;\r\n } else {\r\n this.gizmos.scaleGizmo.attachedMesh = this._attachedMesh;\r\n }\r\n } else if (this.gizmos.scaleGizmo) {\r\n this.gizmos.scaleGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.scaleGizmo = value;\r\n }\r\n public get scaleGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.scaleGizmo;\r\n }\r\n /**\r\n * If the boundingBox gizmo is enabled\r\n */\r\n public set boundingBoxGizmoEnabled(value: boolean) {\r\n if (value) {\r\n this.gizmos.boundingBoxGizmo = this.gizmos.boundingBoxGizmo || new BoundingBoxGizmo(this._boundingBoxColor, this._defaultKeepDepthUtilityLayer);\r\n if (this._attachedMesh) {\r\n this.gizmos.boundingBoxGizmo.attachedMesh = this._attachedMesh;\r\n } else {\r\n this.gizmos.boundingBoxGizmo.attachedNode = this._attachedNode;\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n this._attachedMesh.addBehavior(this.boundingBoxDragBehavior);\r\n } else if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n this._attachedNode.addBehavior(this.boundingBoxDragBehavior);\r\n }\r\n } else if (this.gizmos.boundingBoxGizmo) {\r\n if (this._attachedMesh) {\r\n this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior);\r\n } else if (this._attachedNode) {\r\n this._attachedNode.removeBehavior(this.boundingBoxDragBehavior);\r\n }\r\n this.gizmos.boundingBoxGizmo.attachedNode = null;\r\n }\r\n this._gizmosEnabled.boundingBoxGizmo = value;\r\n }\r\n public get boundingBoxGizmoEnabled(): boolean {\r\n return this._gizmosEnabled.boundingBoxGizmo;\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 gizmoAxisCache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(gizmoAxisCache: Map<Mesh, GizmoAxisCache>) {\r\n if (gizmoAxisCache.size > 0) {\r\n gizmoAxisCache.forEach((v, k) => {\r\n this._gizmoAxisCache.set(k, v);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo manager\r\n */\r\n public dispose() {\r\n this._pointerObservers.forEach((observer) => {\r\n this._scene.onPointerObservable.remove(observer);\r\n });\r\n for (const key in this.gizmos) {\r\n const gizmo = <Nullable<IGizmo>>(<any>this.gizmos)[key];\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n }\r\n if (this._defaultKeepDepthUtilityLayer !== UtilityLayerRenderer._DefaultKeepDepthUtilityLayer) {\r\n this._defaultKeepDepthUtilityLayer?.dispose();\r\n }\r\n if (this._defaultUtilityLayer !== UtilityLayerRenderer._DefaultUtilityLayer) {\r\n this._defaultUtilityLayer?.dispose();\r\n }\r\n this.boundingBoxDragBehavior.detach();\r\n this.onAttachedToMeshObservable.clear();\r\n }\r\n}\r\n"]}
|
package/Gizmos/lightGizmo.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Nullable } from "../types";
|
|
2
2
|
import { Vector3 } from "../Maths/math.vector";
|
|
3
3
|
import { Mesh } from "../Meshes/mesh";
|
|
4
|
+
import type { IGizmo } from "./gizmo";
|
|
4
5
|
import { Gizmo } from "./gizmo";
|
|
5
6
|
import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
|
|
6
7
|
import type { Node } from "../node";
|
|
@@ -10,10 +11,21 @@ import { TransformNode } from "../Meshes/transformNode";
|
|
|
10
11
|
import type { PointerInfo } from "../Events/pointerEvents";
|
|
11
12
|
import type { Observer } from "../Misc/observable";
|
|
12
13
|
import { Observable } from "../Misc/observable";
|
|
14
|
+
/**
|
|
15
|
+
* Interface for light gizmo
|
|
16
|
+
*/
|
|
17
|
+
export interface ILightGizmo extends IGizmo {
|
|
18
|
+
/** Event that fires each time the gizmo is clicked */
|
|
19
|
+
onClickedObservable: Observable<Light>;
|
|
20
|
+
/** The light that the gizmo is attached to */
|
|
21
|
+
light: Nullable<Light>;
|
|
22
|
+
/** The material used to render the light gizmo */
|
|
23
|
+
readonly material: StandardMaterial;
|
|
24
|
+
}
|
|
13
25
|
/**
|
|
14
26
|
* Gizmo that enables viewing a light
|
|
15
27
|
*/
|
|
16
|
-
export declare class LightGizmo extends Gizmo {
|
|
28
|
+
export declare class LightGizmo extends Gizmo implements ILightGizmo {
|
|
17
29
|
protected _lightMesh: Mesh;
|
|
18
30
|
protected _material: StandardMaterial;
|
|
19
31
|
protected _cachedPosition: Vector3;
|
package/Gizmos/lightGizmo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/lightGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3, Quaternion } 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 { 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 * Gizmo that enables viewing a light\r\n */\r\nexport class LightGizmo extends Gizmo {\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 this._cachedForward.copyFrom(this.attachedMesh!.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 * @hidden\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 if (Vector3.DistanceSquared(this.attachedMesh!.forward, this._cachedForward) > 0.0001) {\r\n // update light to match gizmo\r\n const direction = this.attachedMesh!.forward;\r\n (this._light as any).direction = new Vector3(direction.x, direction.y, direction.z);\r\n this._cachedForward.copyFrom(this.attachedMesh!.forward);\r\n } else if (Vector3.DistanceSquared(this.attachedMesh!.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(this.attachedMesh!.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":["../../../../../lts/core/generated/Gizmos/lightGizmo.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAcpE;;GAEG;AACH;IAAgC,8BAAK;IAajC;;;OAGG;IACH,oBAAY,UAA2E;QAA3E,2BAAA,EAAA,aAAmC,oBAAoB,CAAC,mBAAmB;QAAvF,YACI,kBAAM,UAAU,CAAC,SAmBpB;QAlCS,qBAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QAChC,oBAAc,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtC,sBAAgB,GAAoC,IAAI,CAAC;QAEnE;;WAEG;QACI,yBAAmB,GAAG,IAAI,UAAU,EAAS,CAAC;QA2B3C,YAAM,GAAoB,IAAI,CAAC;QAnBrC,KAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,KAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC5E,KAAI,CAAC,mBAAmB,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAE1F,KAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAI,CAAC,mBAAmB,CAAC;QACpD,KAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,OAAO,EAAE,KAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAClF,KAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,KAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEzD,KAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAC,WAAW;YACrF,IAAI,CAAC,KAAI,CAAC,MAAM,EAAE;gBACd,OAAO;aACV;YAED,KAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,IAAI,KAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnI,IAAI,KAAI,CAAC,UAAU,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,KAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC;aACzD;QACL,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;;IACtC,CAAC;IAQD,sBAAW,oCAAY;QALvB;;;;WAIG;aACH;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;aACD,UAAwB,KAAqB;YACzC,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACtF,CAAC;;;OAHA;IAQD,sBAAW,6BAAK;aAoDhB;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QAzDD;;WAEG;aACH,UAAiB,KAAsB;YAAvC,iBAmDC;YAlDG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,KAAK,EAAE;gBACP,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;iBAC7B;gBAED,IAAI,KAAK,YAAY,gBAAgB,EAAE;oBACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;iBAC/F;qBAAM,IAAI,KAAK,YAAY,gBAAgB,EAAE;oBAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;iBAC/F;qBAAM,IAAI,KAAK,YAAY,SAAS,EAAE;oBACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;iBACxF;qBAAM;oBACH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;iBACzF;gBACD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,CAAC;oBAC5C,CAAC,CAAC,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBAExC,kCAAkC;gBAClC,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBAC1D,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE5G,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,UAAU,EAAE,CAAC;gBAEtD,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,iBAAiB,EAAE;oBACvC,IAAI,CAAC,YAAa,CAAC,iBAAiB,GAAG,EAAE,CAAC;iBAC7C;gBACD,IAAI,CAAC,YAAa,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC;gBAEvD,IAAI,KAAK,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;iBAC7E;gBAED,wDAAwD;gBACxD,IAAK,KAAa,CAAC,QAAQ,EAAE;oBACzB,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,QAAQ,CAAE,KAAa,CAAC,QAAQ,CAAC,CAAC;oBAC9D,IAAI,CAAC,YAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;iBAC9D;gBACD,IAAK,KAAa,CAAC,SAAS,EAAE;oBAC1B,IAAI,CAAC,YAAa,CAAC,YAAY,CAAE,KAAa,CAAC,SAAS,CAAC,CAAC;oBAC1D,IAAI,CAAC,YAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC;iBAC5D;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;QACL,CAAC;;;OAAA;IAQD,sBAAW,gCAAQ;QAHnB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;;;OAAA;IAED;;;OAGG;IACO,4BAAO,GAAjB;QACI,iBAAM,OAAO,WAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO;SACV;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;SACnF;QAED,8EAA8E;QAC9E,kFAAkF;QAClF,oEAAoE;QACpE,IAAK,IAAI,CAAC,MAAc,CAAC,QAAQ,EAAE;YAC/B,uFAAuF;YACvF,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC3D,8BAA8B;gBAC9B,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC;gBAC5C,IAAI,CAAC,MAAc,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAChF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;aAC9D;iBAAM;gBACH,8BAA8B;gBAC9B,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,QAAQ,CAAE,IAAI,CAAC,MAAc,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,CAAC,YAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;aAC9D;SACJ;QACD,IAAK,IAAI,CAAC,MAAc,CAAC,SAAS,EAAE;YAChC,uFAAuF;YACvF,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE;gBACnF,8BAA8B;gBAC9B,IAAM,SAAS,GAAG,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC;gBAC5C,IAAI,CAAC,MAAc,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC;aAC5D;iBAAM,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,EAAG,IAAI,CAAC,MAAc,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE;gBACrG,8BAA8B;gBAC9B,IAAI,CAAC,YAAa,CAAC,YAAY,CAAE,IAAI,CAAC,MAAc,CAAC,SAAS,CAAC,CAAC;gBAChE,IAAI,CAAC,YAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,CAAC,CAAC;aAC5D;SACJ;IACL,CAAC;IA8ED;;OAEG;IACI,4BAAO,GAAd;QACI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,iBAAM,OAAO,WAAE,CAAC;QAChB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAEc,sCAA2B,GAA1C,UAA2C,KAAY;QACnD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAChD,IAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACrF,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QAEzB,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEc,gCAAqB,GAApC,UAAqC,KAAY;QAC7C,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAErB,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEc,+BAAoB,GAAnC,UAAoC,KAAY;QAC5C,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAErB,IAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACrF,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAErC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEc,sCAA2B,GAA1C,UAA2C,KAAY;QACnD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAEjD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/E,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAErB,IAAM,IAAI,GAAG,cAAc,CACvB,IAAI,CAAC,IAAI,EACT;YACI,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAClB,EACD,KAAK,CACR,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;QAExB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAE1B,IAAM,SAAS,GAAG,cAAc,CAC5B,IAAI,CAAC,IAAI,EACT;YACI,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,GAAG;YACnB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAClB,EACD,KAAK,CACR,CAAC;QACF,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAExB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;QAExB,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAE1B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IA/LD,wBAAwB;IACT,iBAAM,GAAG,KAAK,CAAC;IAE9B;;;;OAIG;IACY,4BAAiB,GAAG,UAAC,MAAc,EAAE,KAAY;QAC5D,IAAM,cAAc,GAAG,GAAG,CAAC;QAE3B,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9B,+DAA+D;QAC/D,IAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,IAAM,IAAI,GAAG,cAAc,CACvB,MAAM,EACN;YACI,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAClB,EACD,KAAK,CACR,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,OAAO,SAAS,CAAC;SACpB;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,GAAC,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAE,CAAC;YAC9C,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3B,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAE/C,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;YACtC,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;YACxE,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;SAC3F;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,GAAC,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5C,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3B,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACpC;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,GAAC,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5C,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACrC,GAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAE/C,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;YACtC,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;YACxE,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;SAC3F;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;QACD,IAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5C,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAsHN,iBAAC;CAAA,AArWD,CAAgC,KAAK,GAqWpC;SArWY,UAAU","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector3, Quaternion } 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 this._cachedForward.copyFrom(this.attachedMesh!.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 * @hidden\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 if (Vector3.DistanceSquared(this.attachedMesh!.forward, this._cachedForward) > 0.0001) {\r\n // update light to match gizmo\r\n const direction = this.attachedMesh!.forward;\r\n (this._light as any).direction = new Vector3(direction.x, direction.y, direction.z);\r\n this._cachedForward.copyFrom(this.attachedMesh!.forward);\r\n } else if (Vector3.DistanceSquared(this.attachedMesh!.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(this.attachedMesh!.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"]}
|
|
@@ -7,15 +7,34 @@ import { Color3 } from "../Maths/math.color";
|
|
|
7
7
|
import { TransformNode } from "../Meshes/transformNode";
|
|
8
8
|
import type { Node } from "../node";
|
|
9
9
|
import { PointerDragBehavior } from "../Behaviors/Meshes/pointerDragBehavior";
|
|
10
|
+
import type { IGizmo } from "./gizmo";
|
|
10
11
|
import { Gizmo } from "./gizmo";
|
|
11
12
|
import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
|
|
12
13
|
import { StandardMaterial } from "../Materials/standardMaterial";
|
|
13
14
|
import type { Scene } from "../scene";
|
|
14
15
|
import type { PositionGizmo } from "./positionGizmo";
|
|
16
|
+
/**
|
|
17
|
+
* Interface for plane drag gizmo
|
|
18
|
+
*/
|
|
19
|
+
export interface IPlaneDragGizmo extends IGizmo {
|
|
20
|
+
/** Drag behavior responsible for the gizmos dragging interactions */
|
|
21
|
+
dragBehavior: PointerDragBehavior;
|
|
22
|
+
/** Drag distance in babylon units that the gizmo will snap to when dragged */
|
|
23
|
+
snapDistance: number;
|
|
24
|
+
/**
|
|
25
|
+
* Event that fires each time the gizmo snaps to a new location.
|
|
26
|
+
* * snapDistance is the the change in distance
|
|
27
|
+
*/
|
|
28
|
+
onSnapObservable: Observable<{
|
|
29
|
+
snapDistance: number;
|
|
30
|
+
}>;
|
|
31
|
+
/** If the gizmo is enabled */
|
|
32
|
+
isEnabled: boolean;
|
|
33
|
+
}
|
|
15
34
|
/**
|
|
16
35
|
* Single plane drag gizmo
|
|
17
36
|
*/
|
|
18
|
-
export declare class PlaneDragGizmo extends Gizmo {
|
|
37
|
+
export declare class PlaneDragGizmo extends Gizmo implements IPlaneDragGizmo {
|
|
19
38
|
/**
|
|
20
39
|
* Drag behavior responsible for the gizmos dragging interactions
|
|
21
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planeDragGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/planeDragGizmo.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 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\n/**\r\n * Single plane drag gizmo\r\n */\r\nexport class PlaneDragGizmo extends Gizmo {\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 * Drag 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 protected _gizmoMesh: TransformNode;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n\r\n protected _isEnabled: boolean = false;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n protected _dragging: boolean = false;\r\n\r\n /**\r\n * @param scene\r\n * @param material\r\n * @hidden\r\n */\r\n public static _CreatePlane(scene: Scene, material: StandardMaterial): TransformNode {\r\n const plane = new TransformNode(\"plane\", scene);\r\n\r\n //make sure plane is double sided\r\n const dragPlane = CreatePlane(\"dragPlane\", { width: 0.1375, height: 0.1375, sideOrientation: 2 }, scene);\r\n dragPlane.material = material;\r\n dragPlane.parent = plane;\r\n return plane;\r\n }\r\n\r\n /**\r\n * Creates a PlaneDragGizmo\r\n * @param dragPlaneNormal The axis normal to which the gizmo will be able to drag 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 */\r\n constructor(\r\n dragPlaneNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null\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 plane mesh on root node\r\n this._gizmoMesh = PlaneDragGizmo._CreatePlane(gizmoLayer.utilityLayerScene, this._coloredMaterial);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragPlaneNormal));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n let currentSnapDragDistance = 0;\r\n const tmpVector = new Vector3();\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add dragPlaneNormal drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: dragPlaneNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n this._handlePivot();\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n } else {\r\n currentSnapDragDistance += event.dragDistance;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n const dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n event.delta.normalizeToRef(tmpVector);\r\n tmpVector.scaleInPlace(this.snapDistance * dragSteps);\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(tmpVector.x, tmpVector.y, tmpVector.z);\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: this._gizmoMesh.getChildMeshes() as Mesh[],\r\n colliderMeshes: this._gizmoMesh.getChildMeshes() as Mesh[],\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 as Mesh, 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 = cache.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 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.attachedNode = null;\r\n } else {\r\n if (this._parent) {\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 * 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 super.dispose();\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 }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"planeDragGizmo.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gizmos/planeDragGizmo.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 } from \"../Maths/math.vector\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\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 { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\n\r\n/**\r\n * Interface for plane drag gizmo\r\n */\r\nexport interface IPlaneDragGizmo 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 gizmo is enabled */\r\n isEnabled: boolean;\r\n}\r\n\r\n/**\r\n * Single plane drag gizmo\r\n */\r\nexport class PlaneDragGizmo extends Gizmo implements IPlaneDragGizmo {\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 * Drag 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 protected _gizmoMesh: TransformNode;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n\r\n protected _isEnabled: boolean = false;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n protected _dragging: boolean = false;\r\n\r\n /**\r\n * @param scene\r\n * @param material\r\n * @hidden\r\n */\r\n public static _CreatePlane(scene: Scene, material: StandardMaterial): TransformNode {\r\n const plane = new TransformNode(\"plane\", scene);\r\n\r\n //make sure plane is double sided\r\n const dragPlane = CreatePlane(\"dragPlane\", { width: 0.1375, height: 0.1375, sideOrientation: 2 }, scene);\r\n dragPlane.material = material;\r\n dragPlane.parent = plane;\r\n return plane;\r\n }\r\n\r\n /**\r\n * Creates a PlaneDragGizmo\r\n * @param dragPlaneNormal The axis normal to which the gizmo will be able to drag 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 */\r\n constructor(\r\n dragPlaneNormal: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null\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 plane mesh on root node\r\n this._gizmoMesh = PlaneDragGizmo._CreatePlane(gizmoLayer.utilityLayerScene, this._coloredMaterial);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragPlaneNormal));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n let currentSnapDragDistance = 0;\r\n const tmpVector = new Vector3();\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add dragPlaneNormal drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragPlaneNormal: dragPlaneNormal });\r\n this.dragBehavior.moveAttached = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n this._handlePivot();\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n } else {\r\n currentSnapDragDistance += event.dragDistance;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n const dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n event.delta.normalizeToRef(tmpVector);\r\n tmpVector.scaleInPlace(this.snapDistance * dragSteps);\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(tmpVector.x, tmpVector.y, tmpVector.z);\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: this._gizmoMesh.getChildMeshes() as Mesh[],\r\n colliderMeshes: this._gizmoMesh.getChildMeshes() as Mesh[],\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 as Mesh, 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 = cache.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 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.attachedNode = null;\r\n } else {\r\n if (this._parent) {\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 * 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 super.dispose();\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 }\r\n}\r\n"]}
|
|
@@ -9,15 +9,36 @@ import type { AbstractMesh } from "../Meshes/abstractMesh";
|
|
|
9
9
|
import { Mesh } from "../Meshes/mesh";
|
|
10
10
|
import type { Node } from "../node";
|
|
11
11
|
import { PointerDragBehavior } from "../Behaviors/Meshes/pointerDragBehavior";
|
|
12
|
+
import type { IGizmo } from "./gizmo";
|
|
12
13
|
import { Gizmo } from "./gizmo";
|
|
13
14
|
import { UtilityLayerRenderer } from "../Rendering/utilityLayerRenderer";
|
|
14
15
|
import { StandardMaterial } from "../Materials/standardMaterial";
|
|
15
16
|
import type { RotationGizmo } from "./rotationGizmo";
|
|
16
17
|
import { ShaderMaterial } from "../Materials/shaderMaterial";
|
|
18
|
+
/**
|
|
19
|
+
* Interface for plane rotation gizmo
|
|
20
|
+
*/
|
|
21
|
+
export interface IPlaneRotationGizmo extends IGizmo {
|
|
22
|
+
/** Drag behavior responsible for the gizmos dragging interactions */
|
|
23
|
+
dragBehavior: PointerDragBehavior;
|
|
24
|
+
/** Drag distance in babylon units that the gizmo will snap to when dragged */
|
|
25
|
+
snapDistance: number;
|
|
26
|
+
/**
|
|
27
|
+
* Event that fires each time the gizmo snaps to a new location.
|
|
28
|
+
* * snapDistance is the the change in distance
|
|
29
|
+
*/
|
|
30
|
+
onSnapObservable: Observable<{
|
|
31
|
+
snapDistance: number;
|
|
32
|
+
}>;
|
|
33
|
+
/** Accumulated relative angle value for rotation on the axis. */
|
|
34
|
+
angle: number;
|
|
35
|
+
/** If the gizmo is enabled */
|
|
36
|
+
isEnabled: boolean;
|
|
37
|
+
}
|
|
17
38
|
/**
|
|
18
39
|
* Single plane rotation gizmo
|
|
19
40
|
*/
|
|
20
|
-
export declare class PlaneRotationGizmo extends Gizmo {
|
|
41
|
+
export declare class PlaneRotationGizmo extends Gizmo implements IPlaneRotationGizmo {
|
|
21
42
|
/**
|
|
22
43
|
* Drag behavior responsible for the gizmos dragging interactions
|
|
23
44
|
*/
|