{"ast":null,"code":"import { PointerDragBehavior } from \"./pointerDragBehavior.js\";\nimport { Vector3 } from \"../../Maths/math.vector.js\";\n/**\n * A behavior that when attached to a mesh will allow the mesh to be scaled\n */\nexport class MultiPointerScaleBehavior {\n /**\n * Instantiate a new behavior that when attached to a mesh will allow the mesh to be scaled\n */\n constructor() {\n this._startDistance = 0;\n this._initialScale = new Vector3(0, 0, 0);\n this._targetScale = new Vector3(0, 0, 0);\n this._sceneRenderObserver = null;\n this._dragBehaviorA = new PointerDragBehavior({});\n this._dragBehaviorA.moveAttached = false;\n this._dragBehaviorB = new PointerDragBehavior({});\n this._dragBehaviorB.moveAttached = false;\n }\n /**\n * The name of the behavior\n */\n get name() {\n return \"MultiPointerScale\";\n }\n /**\n * Initializes the behavior\n */\n init() {}\n _getCurrentDistance() {\n return this._dragBehaviorA.lastDragPosition.subtract(this._dragBehaviorB.lastDragPosition).length();\n }\n /**\n * Attaches the scale behavior the passed in mesh\n * @param ownerNode The mesh that will be scaled around once attached\n */\n attach(ownerNode) {\n this._ownerNode = ownerNode;\n // Create 2 drag behaviors such that each will only be triggered by a separate pointer\n this._dragBehaviorA.onDragStartObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n if (this._dragBehaviorA.currentDraggingPointerId == this._dragBehaviorB.currentDraggingPointerId) {\n this._dragBehaviorA.releaseDrag();\n } else {\n this._initialScale.copyFrom(ownerNode.scaling);\n this._startDistance = this._getCurrentDistance();\n }\n }\n });\n this._dragBehaviorB.onDragStartObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n if (this._dragBehaviorA.currentDraggingPointerId == this._dragBehaviorB.currentDraggingPointerId) {\n this._dragBehaviorB.releaseDrag();\n } else {\n this._initialScale.copyFrom(ownerNode.scaling);\n this._startDistance = this._getCurrentDistance();\n }\n }\n });\n // Once both drag behaviors are active scale based on the distance between the two pointers\n [this._dragBehaviorA, this._dragBehaviorB].forEach(behavior => {\n behavior.onDragObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n const ratio = this._getCurrentDistance() / this._startDistance;\n this._initialScale.scaleToRef(ratio, this._targetScale);\n }\n });\n });\n ownerNode.addBehavior(this._dragBehaviorA);\n ownerNode.addBehavior(this._dragBehaviorB);\n // On every frame move towards target scaling to avoid jitter caused by vr controllers\n this._sceneRenderObserver = ownerNode.getScene().onBeforeRenderObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n const change = this._targetScale.subtract(ownerNode.scaling).scaleInPlace(0.1);\n if (change.length() > 0.01) {\n ownerNode.scaling.addInPlace(change);\n }\n }\n });\n }\n /**\n * Detaches the behavior from the mesh\n */\n detach() {\n this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver);\n [this._dragBehaviorA, this._dragBehaviorB].forEach(behavior => {\n behavior.onDragStartObservable.clear();\n behavior.onDragObservable.clear();\n this._ownerNode.removeBehavior(behavior);\n });\n }\n}","map":{"version":3,"names":["PointerDragBehavior","Vector3","MultiPointerScaleBehavior","constructor","_startDistance","_initialScale","_targetScale","_sceneRenderObserver","_dragBehaviorA","moveAttached","_dragBehaviorB","name","init","_getCurrentDistance","lastDragPosition","subtract","length","attach","ownerNode","_ownerNode","onDragStartObservable","add","dragging","currentDraggingPointerId","releaseDrag","copyFrom","scaling","forEach","behavior","onDragObservable","ratio","scaleToRef","addBehavior","getScene","onBeforeRenderObservable","change","scaleInPlace","addInPlace","detach","remove","clear","removeBehavior"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Behaviors/Meshes/multiPointerScaleBehavior.js"],"sourcesContent":["import { PointerDragBehavior } from \"./pointerDragBehavior.js\";\nimport { Vector3 } from \"../../Maths/math.vector.js\";\n/**\n * A behavior that when attached to a mesh will allow the mesh to be scaled\n */\nexport class MultiPointerScaleBehavior {\n /**\n * Instantiate a new behavior that when attached to a mesh will allow the mesh to be scaled\n */\n constructor() {\n this._startDistance = 0;\n this._initialScale = new Vector3(0, 0, 0);\n this._targetScale = new Vector3(0, 0, 0);\n this._sceneRenderObserver = null;\n this._dragBehaviorA = new PointerDragBehavior({});\n this._dragBehaviorA.moveAttached = false;\n this._dragBehaviorB = new PointerDragBehavior({});\n this._dragBehaviorB.moveAttached = false;\n }\n /**\n * The name of the behavior\n */\n get name() {\n return \"MultiPointerScale\";\n }\n /**\n * Initializes the behavior\n */\n init() { }\n _getCurrentDistance() {\n return this._dragBehaviorA.lastDragPosition.subtract(this._dragBehaviorB.lastDragPosition).length();\n }\n /**\n * Attaches the scale behavior the passed in mesh\n * @param ownerNode The mesh that will be scaled around once attached\n */\n attach(ownerNode) {\n this._ownerNode = ownerNode;\n // Create 2 drag behaviors such that each will only be triggered by a separate pointer\n this._dragBehaviorA.onDragStartObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n if (this._dragBehaviorA.currentDraggingPointerId == this._dragBehaviorB.currentDraggingPointerId) {\n this._dragBehaviorA.releaseDrag();\n }\n else {\n this._initialScale.copyFrom(ownerNode.scaling);\n this._startDistance = this._getCurrentDistance();\n }\n }\n });\n this._dragBehaviorB.onDragStartObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n if (this._dragBehaviorA.currentDraggingPointerId == this._dragBehaviorB.currentDraggingPointerId) {\n this._dragBehaviorB.releaseDrag();\n }\n else {\n this._initialScale.copyFrom(ownerNode.scaling);\n this._startDistance = this._getCurrentDistance();\n }\n }\n });\n // Once both drag behaviors are active scale based on the distance between the two pointers\n [this._dragBehaviorA, this._dragBehaviorB].forEach((behavior) => {\n behavior.onDragObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n const ratio = this._getCurrentDistance() / this._startDistance;\n this._initialScale.scaleToRef(ratio, this._targetScale);\n }\n });\n });\n ownerNode.addBehavior(this._dragBehaviorA);\n ownerNode.addBehavior(this._dragBehaviorB);\n // On every frame move towards target scaling to avoid jitter caused by vr controllers\n this._sceneRenderObserver = ownerNode.getScene().onBeforeRenderObservable.add(() => {\n if (this._dragBehaviorA.dragging && this._dragBehaviorB.dragging) {\n const change = this._targetScale.subtract(ownerNode.scaling).scaleInPlace(0.1);\n if (change.length() > 0.01) {\n ownerNode.scaling.addInPlace(change);\n }\n }\n });\n }\n /**\n * Detaches the behavior from the mesh\n */\n detach() {\n this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver);\n [this._dragBehaviorA, this._dragBehaviorB].forEach((behavior) => {\n behavior.onDragStartObservable.clear();\n behavior.onDragObservable.clear();\n this._ownerNode.removeBehavior(behavior);\n });\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}