@babylonjs/core 4.2.0-rc.6 → 4.2.1

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.
@@ -93,7 +93,7 @@ var SixDofDragBehavior = /** @class */ (function () {
93
93
  this._ownerNode = ownerNode;
94
94
  this._scene = this._ownerNode.getScene();
95
95
  if (!SixDofDragBehavior._virtualScene) {
96
- SixDofDragBehavior._virtualScene = new Scene(this._scene.getEngine());
96
+ SixDofDragBehavior._virtualScene = new Scene(this._scene.getEngine(), { virtual: true });
97
97
  SixDofDragBehavior._virtualScene.detachControl();
98
98
  this._scene.getEngine().scenes.pop();
99
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sixDofDragBehavior.js","sourceRoot":"","sources":["../../../../sourceES6/core/Behaviors/Meshes/sixDofDragBehavior.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAe,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAY,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD;;GAEG;AACH;IAkDI;;OAEG;IACH;QAlDQ,yBAAoB,GAA8B,IAAI,CAAC;QAEvD,oBAAe,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAIvC,YAAO,GAAG,KAAK,CAAC;QAChB,yBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;QACxC,uBAAkB,GAAY,KAAK,CAAC;QAE5C;;WAEG;QACK,gBAAW,GAAG,CAAC,CAAC;QACxB;;WAEG;QACI,wBAAmB,GAAG,IAAI,CAAC;QAClC;;WAEG;QACI,aAAQ,GAAG,KAAK,CAAC;QACxB;;WAEG;QACI,mBAAc,GAAG,GAAG,CAAC;QAC5B;;WAEG;QACI,6BAAwB,GAAG,CAAC,CAAC,CAAC;QACrC;;WAEG;QACI,yBAAoB,GAAG,IAAI,CAAC;QACnC;;WAEG;QACI,0BAAqB,GAAG,IAAI,UAAU,EAAM,CAAC;QACpD;;WAEG;QACI,qBAAgB,GAAG,IAAI,UAAU,EAAQ,CAAC;QACjD;;WAEG;QACI,wBAAmB,GAAG,IAAI,UAAU,EAAM,CAAC;IAMlD,CAAC;IAKD,sBAAW,oCAAI;QAHf;;WAEG;aACH;YACI,OAAO,YAAY,CAAC;QACxB,CAAC;;;OAAA;IAED;;OAEG;IACI,iCAAI,GAAX,cAAgB,CAAC;IAKjB,sBAAY,8CAAc;QAH1B;;WAEG;aACH;YACI,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;gBACpC,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;aAC7C;iBAAM;gBACH,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;aACnC;QACL,CAAC;;;OAAA;IAED;;;OAGG;IACI,mCAAM,GAAb,UAAc,SAAe;QAA7B,iBAyJC;QAxJG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;YACnC,kBAAkB,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACtE,kBAAkB,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;SACxC;QAED,IAAI,UAAU,GAA2B,IAAI,CAAC;QAC9C,IAAI,wBAAwB,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpD,mFAAmF;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,IAAI,UAAU,EAAE,CAAC;QAE5D,IAAI,aAAa,GAAG,UAAC,CAAe;YAChC,OAAO,KAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC;QACrE,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAC,WAAW,EAAE,UAAU;YAChF,IAAI,WAAW,CAAC,IAAI,IAAI,iBAAiB,CAAC,WAAW,EAAE;gBACnD,IAAI,CAAC,KAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;oBACrL,IAAI,KAAI,CAAC,cAAc,IAAI,KAAI,CAAC,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,EAAE;wBAClF,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAI,CAAC,cAAe,CAAC,cAAc,CAAC,CAAC;qBACjF;oBAED,UAAU,GAAG,KAAI,CAAC,UAAU,CAAC;oBAC7B,UAAU,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;oBACjD,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAEnE,iDAAiD;oBACjD,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC3E,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;oBAExG,+EAA+E;oBAC/E,KAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC3D,UAAU,CAAC,kBAAkB,EAAE,CAAC;oBAChC,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;oBACrE,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;wBAChC,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;qBACxI;oBACD,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;oBAClC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC3B,KAAI,CAAC,gBAAgB,CAAC,kBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;oBAClF,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAChC,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBAExD,eAAe;oBACf,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;oBACtE,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,KAAI,CAAC,wBAAwB,GAAkB,WAAW,CAAC,KAAM,CAAC,SAAS,CAAC;oBAE5E,yBAAyB;oBACzB,IAAI,KAAI,CAAC,oBAAoB,IAAI,KAAI,CAAC,cAAc,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,UAAU,EAAE;wBACrF,IAAI,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,iBAAiB,EAAE;4BAC9C,KAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;4BACpC,KAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;yBAClC;6BAAM;4BACH,KAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;yBACnC;qBACJ;oBACD,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;oBAC1C,KAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;iBAClD;aACJ;iBAAM,IAAI,WAAW,CAAC,IAAI,IAAI,iBAAiB,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,EAAE;gBAClH,IAAI,KAAI,CAAC,wBAAwB,IAAmB,WAAW,CAAC,KAAM,CAAC,SAAS,EAAE;oBAC9E,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACtB,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,KAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC;oBACnC,UAAU,GAAG,IAAI,CAAC;oBAClB,KAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBAE3D,2BAA2B;oBAC3B,IAAI,KAAI,CAAC,oBAAoB,IAAI,KAAI,CAAC,kBAAkB,IAAI,KAAI,CAAC,cAAc,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,UAAU,EAAE;wBAChH,KAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACxC,KAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;qBACnC;oBACD,KAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;iBAChD;aACJ;iBAAM,IAAI,WAAW,CAAC,IAAI,IAAI,iBAAiB,CAAC,WAAW,EAAE;gBAC1D,IAAI,KAAI,CAAC,wBAAwB,IAAmB,WAAW,CAAC,KAAM,CAAC,SAAS,IAAI,KAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,UAAU,EAAE;oBACjK,IAAI,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC;oBACnC,IAAI,KAAI,CAAC,cAAc,IAAI,KAAI,CAAC,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,EAAE;wBAClF,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAI,CAAC,cAAe,CAAC,cAAc,CAAC,CAAC;wBAC9E,WAAW,GAAG,CAAC,CAAC;qBACnB;oBAED,yDAAyD;oBACzD,IAAI,oBAAoB,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;oBAC9F,wBAAwB,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACnE,IAAI,yBAAyB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAEvG,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBACxD,2IAA2I;oBAC3I,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB,GAAG,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrM,IAAI,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE;wBACtC,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;qBACxC;oBAED,iCAAiC;oBACjC,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC3E,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;oBACxG,KAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBAE3D,yEAAyE;oBACzE,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;oBACtE,IAAI,UAAU,CAAC,MAAM,EAAE;wBACnB,OAAO,CAAC,yBAAyB,CAAC,KAAI,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,KAAI,CAAC,eAAe,CAAC,CAAC;qBACpI;oBAED,IAAI,CAAC,KAAI,CAAC,OAAO,EAAE;wBACf,KAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAI,CAAC,gBAAgB,CAAC,kBAAmB,CAAC,CAAC;qBACjF;oBACD,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACvB;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,aAAa,GAAG,IAAI,UAAU,EAAE,CAAC;QACrC,sFAAsF;QACtF,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC;YAC1E,IAAI,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,OAAO,IAAI,UAAU,EAAE;gBAC7C,UAAU,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBACjD,mCAAmC;gBACnC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAE9G,IAAI,KAAI,CAAC,mBAAmB,EAAE;oBAC1B,yBAAyB;oBACzB,aAAa,CAAC,QAAQ,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC;oBAClD,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;oBACnC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;oBACnC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;oBACnC,KAAI,CAAC,gBAAgB,CAAC,kBAAmB,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;oBACtF,qDAAqD;oBACrD,UAAU,CAAC,yBAAyB,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;oBAChG,aAAa,CAAC,aAAa,CAAC,KAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;oBACtE,mCAAmC;oBACnC,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;oBAElC,0DAA0D;oBAC1D,IAAI,CAAC,SAAS,IAAI,CAAE,SAAkB,CAAC,OAAO,IAAI,CAAE,SAAkB,CAAC,OAAO,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC9G,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBAC3B,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,kBAAmB,EAAE,aAAa,EAAE,KAAI,CAAC,cAAc,EAAE,UAAU,CAAC,kBAAmB,CAAC,CAAC;wBAC1H,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;qBACnC;iBACJ;gBACD,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAE1C,KAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC;aAC3C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IACD;;OAEG;IACI,mCAAM,GAAb;QACI,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;gBAChH,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;aACnC;YACD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACjE;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACzF;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;SACnC;QACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IACL,yBAAC;AAAD,CAAC,AArQD,IAqQC","sourcesContent":["import { Behavior } from \"../../Behaviors/behavior\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Nullable } from \"../../types\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Vector3, Quaternion, Matrix } from \"../../Maths/math.vector\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { PivotTools } from \"../../Misc/pivotTools\";\r\n/**\r\n * A behavior that when attached to a mesh will allow the mesh to be dragged around based on directions and origin of the pointer's ray\r\n */\r\nexport class SixDofDragBehavior implements Behavior<Mesh> {\r\n private static _virtualScene: Scene;\r\n private _ownerNode: Mesh;\r\n private _sceneRenderObserver: Nullable<Observer<Scene>> = null;\r\n private _scene: Scene;\r\n private _targetPosition = new Vector3(0, 0, 0);\r\n private _virtualOriginMesh: AbstractMesh;\r\n private _virtualDragMesh: AbstractMesh;\r\n private _pointerObserver: Nullable<Observer<PointerInfo>>;\r\n private _moving = false;\r\n private _startingOrientation = new Quaternion();\r\n private _attachedToElement: boolean = false;\r\n\r\n /**\r\n * How much faster the object should move when the controller is moving towards it. This is useful to bring objects that are far away from the user to them faster. Set this to 0 to avoid any speed increase. (Default: 3)\r\n */\r\n private zDragFactor = 3;\r\n /**\r\n * If the object should rotate to face the drag origin\r\n */\r\n public rotateDraggedObject = true;\r\n /**\r\n * If the behavior is currently in a dragging state\r\n */\r\n public dragging = false;\r\n /**\r\n * The distance towards the target drag position to move each frame. This can be useful to avoid jitter. Set this to 1 for no delay. (Default: 0.2)\r\n */\r\n public dragDeltaRatio = 0.2;\r\n /**\r\n * The id of the pointer that is currently interacting with the behavior (-1 when no pointer is active)\r\n */\r\n public currentDraggingPointerID = -1;\r\n /**\r\n * If camera controls should be detached during the drag\r\n */\r\n public detachCameraControls = true;\r\n /**\r\n * Fires each time a drag starts\r\n */\r\n public onDragStartObservable = new Observable<{}>();\r\n /**\r\n * Fires each time a drag happens\r\n */\r\n public onDragObservable = new Observable<void>();\r\n /**\r\n * Fires each time a drag ends (eg. mouse release after drag)\r\n */\r\n public onDragEndObservable = new Observable<{}>();\r\n\r\n /**\r\n * Instantiates a behavior that when attached to a mesh will allow the mesh to be dragged around based on directions and origin of the pointer's ray\r\n */\r\n constructor() {\r\n }\r\n\r\n /**\r\n * The name of the behavior\r\n */\r\n public get name(): string {\r\n return \"SixDofDrag\";\r\n }\r\n\r\n /**\r\n * Initializes the behavior\r\n */\r\n public init() { }\r\n\r\n /**\r\n * In the case of multiplea active cameras, the cameraToUseForPointers should be used if set instead of active camera\r\n */\r\n private get _pointerCamera() {\r\n if (this._scene.cameraToUseForPointers) {\r\n return this._scene.cameraToUseForPointers;\r\n } else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Attaches the scale behavior the passed in mesh\r\n * @param ownerNode The mesh that will be scaled around once attached\r\n */\r\n public attach(ownerNode: Mesh): void {\r\n this._ownerNode = ownerNode;\r\n this._scene = this._ownerNode.getScene();\r\n if (!SixDofDragBehavior._virtualScene) {\r\n SixDofDragBehavior._virtualScene = new Scene(this._scene.getEngine());\r\n SixDofDragBehavior._virtualScene.detachControl();\r\n this._scene.getEngine().scenes.pop();\r\n }\r\n\r\n var pickedMesh: Nullable<AbstractMesh> = null;\r\n var lastSixDofOriginPosition = new Vector3(0, 0, 0);\r\n\r\n // Setup virtual meshes to be used for dragging without dirtying the existing scene\r\n this._virtualOriginMesh = new AbstractMesh(\"\", SixDofDragBehavior._virtualScene);\r\n this._virtualOriginMesh.rotationQuaternion = new Quaternion();\r\n this._virtualDragMesh = new AbstractMesh(\"\", SixDofDragBehavior._virtualScene);\r\n this._virtualDragMesh.rotationQuaternion = new Quaternion();\r\n\r\n var pickPredicate = (m: AbstractMesh) => {\r\n return this._ownerNode == m || m.isDescendantOf(this._ownerNode);\r\n };\r\n this._pointerObserver = this._scene.onPointerObservable.add((pointerInfo, eventState) => {\r\n if (pointerInfo.type == PointerEventTypes.POINTERDOWN) {\r\n if (!this.dragging && pointerInfo.pickInfo && pointerInfo.pickInfo.hit && pointerInfo.pickInfo.pickedMesh && pointerInfo.pickInfo.ray && pickPredicate(pointerInfo.pickInfo.pickedMesh)) {\r\n if (this._pointerCamera && this._pointerCamera.cameraRigMode == Camera.RIG_MODE_NONE) {\r\n pointerInfo.pickInfo.ray.origin.copyFrom(this._pointerCamera!.globalPosition);\r\n }\r\n\r\n pickedMesh = this._ownerNode;\r\n PivotTools._RemoveAndStorePivotPoint(pickedMesh);\r\n lastSixDofOriginPosition.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n\r\n // Set position and orientation of the controller\r\n this._virtualOriginMesh.position.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n this._virtualOriginMesh.lookAt(pointerInfo.pickInfo.ray.origin.add(pointerInfo.pickInfo.ray.direction));\r\n\r\n // Attach the virtual drag mesh to the virtual origin mesh so it can be dragged\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n pickedMesh.computeWorldMatrix();\r\n this._virtualDragMesh.position.copyFrom(pickedMesh.absolutePosition);\r\n if (!pickedMesh.rotationQuaternion) {\r\n pickedMesh.rotationQuaternion = Quaternion.RotationYawPitchRoll(pickedMesh.rotation.y, pickedMesh.rotation.x, pickedMesh.rotation.z);\r\n }\r\n var oldParent = pickedMesh.parent;\r\n pickedMesh.setParent(null);\r\n this._virtualDragMesh.rotationQuaternion!.copyFrom(pickedMesh.rotationQuaternion);\r\n pickedMesh.setParent(oldParent);\r\n this._virtualOriginMesh.addChild(this._virtualDragMesh);\r\n\r\n // Update state\r\n this._targetPosition.copyFrom(this._virtualDragMesh.absolutePosition);\r\n this.dragging = true;\r\n this.currentDraggingPointerID = (<PointerEvent>pointerInfo.event).pointerId;\r\n\r\n // Detach camera controls\r\n if (this.detachCameraControls && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n if (this._pointerCamera.inputs.attachedToElement) {\r\n this._pointerCamera.detachControl();\r\n this._attachedToElement = true;\r\n } else {\r\n this._attachedToElement = false;\r\n }\r\n }\r\n PivotTools._RestorePivotPoint(pickedMesh);\r\n this.onDragStartObservable.notifyObservers({});\r\n }\r\n } else if (pointerInfo.type == PointerEventTypes.POINTERUP || pointerInfo.type == PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this.currentDraggingPointerID == (<PointerEvent>pointerInfo.event).pointerId) {\r\n this.dragging = false;\r\n this._moving = false;\r\n this.currentDraggingPointerID = -1;\r\n pickedMesh = null;\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n\r\n // Reattach camera controls\r\n if (this.detachCameraControls && this._attachedToElement && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n this._pointerCamera.attachControl(true);\r\n this._attachedToElement = false;\r\n }\r\n this.onDragEndObservable.notifyObservers({});\r\n }\r\n } else if (pointerInfo.type == PointerEventTypes.POINTERMOVE) {\r\n if (this.currentDraggingPointerID == (<PointerEvent>pointerInfo.event).pointerId && this.dragging && pointerInfo.pickInfo && pointerInfo.pickInfo.ray && pickedMesh) {\r\n var zDragFactor = this.zDragFactor;\r\n if (this._pointerCamera && this._pointerCamera.cameraRigMode == Camera.RIG_MODE_NONE) {\r\n pointerInfo.pickInfo.ray.origin.copyFrom(this._pointerCamera!.globalPosition);\r\n zDragFactor = 0;\r\n }\r\n\r\n // Calculate controller drag distance in controller space\r\n var originDragDifference = pointerInfo.pickInfo.ray.origin.subtract(lastSixDofOriginPosition);\r\n lastSixDofOriginPosition.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n var localOriginDragDifference = -Vector3.Dot(originDragDifference, pointerInfo.pickInfo.ray.direction);\r\n\r\n this._virtualOriginMesh.addChild(this._virtualDragMesh);\r\n // Determine how much the controller moved to/away towards the dragged object and use this to move the object further when its further away\r\n this._virtualDragMesh.position.z -= this._virtualDragMesh.position.z < 1 ? localOriginDragDifference * this.zDragFactor : localOriginDragDifference * zDragFactor * this._virtualDragMesh.position.z;\r\n if (this._virtualDragMesh.position.z < 0) {\r\n this._virtualDragMesh.position.z = 0;\r\n }\r\n\r\n // Update the controller position\r\n this._virtualOriginMesh.position.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n this._virtualOriginMesh.lookAt(pointerInfo.pickInfo.ray.origin.add(pointerInfo.pickInfo.ray.direction));\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n\r\n // Move the virtualObjectsPosition into the picked mesh's space if needed\r\n this._targetPosition.copyFrom(this._virtualDragMesh.absolutePosition);\r\n if (pickedMesh.parent) {\r\n Vector3.TransformCoordinatesToRef(this._targetPosition, Matrix.Invert(pickedMesh.parent.getWorldMatrix()), this._targetPosition);\r\n }\r\n\r\n if (!this._moving) {\r\n this._startingOrientation.copyFrom(this._virtualDragMesh.rotationQuaternion!);\r\n }\r\n this._moving = true;\r\n }\r\n }\r\n });\r\n\r\n var tmpQuaternion = new Quaternion();\r\n // On every frame move towards target scaling to avoid jitter caused by vr controllers\r\n this._sceneRenderObserver = ownerNode.getScene().onBeforeRenderObservable.add(() => {\r\n if (this.dragging && this._moving && pickedMesh) {\r\n PivotTools._RemoveAndStorePivotPoint(pickedMesh);\r\n // Slowly move mesh to avoid jitter\r\n pickedMesh.position.addInPlace(this._targetPosition.subtract(pickedMesh.position).scale(this.dragDeltaRatio));\r\n\r\n if (this.rotateDraggedObject) {\r\n // Get change in rotation\r\n tmpQuaternion.copyFrom(this._startingOrientation);\r\n tmpQuaternion.x = -tmpQuaternion.x;\r\n tmpQuaternion.y = -tmpQuaternion.y;\r\n tmpQuaternion.z = -tmpQuaternion.z;\r\n this._virtualDragMesh.rotationQuaternion!.multiplyToRef(tmpQuaternion, tmpQuaternion);\r\n // Convert change in rotation to only y axis rotation\r\n Quaternion.RotationYawPitchRollToRef(tmpQuaternion.toEulerAngles(\"xyz\").y, 0, 0, tmpQuaternion);\r\n tmpQuaternion.multiplyToRef(this._startingOrientation, tmpQuaternion);\r\n // Slowly move mesh to avoid jitter\r\n var oldParent = pickedMesh.parent;\r\n\r\n // Only rotate the mesh if it's parent has uniform scaling\r\n if (!oldParent || ((oldParent as Mesh).scaling && !(oldParent as Mesh).scaling.isNonUniformWithinEpsilon(0.001))) {\r\n pickedMesh.setParent(null);\r\n Quaternion.SlerpToRef(pickedMesh.rotationQuaternion!, tmpQuaternion, this.dragDeltaRatio, pickedMesh.rotationQuaternion!);\r\n pickedMesh.setParent(oldParent);\r\n }\r\n }\r\n PivotTools._RestorePivotPoint(pickedMesh);\r\n\r\n this.onDragObservable.notifyObservers();\r\n }\r\n });\r\n }\r\n /**\r\n * Detaches the behavior from the mesh\r\n */\r\n public detach(): void {\r\n if (this._scene) {\r\n if (this.detachCameraControls && this._attachedToElement && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n this._pointerCamera.attachControl(true);\r\n this._attachedToElement = false;\r\n }\r\n this._scene.onPointerObservable.remove(this._pointerObserver);\r\n }\r\n if (this._ownerNode) {\r\n this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver);\r\n }\r\n if (this._virtualOriginMesh) {\r\n this._virtualOriginMesh.dispose();\r\n }\r\n if (this._virtualDragMesh) {\r\n this._virtualDragMesh.dispose();\r\n }\r\n this.onDragEndObservable.clear();\r\n this.onDragObservable.clear();\r\n this.onDragStartObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"sixDofDragBehavior.js","sourceRoot":"","sources":["../../../../sourceES6/core/Behaviors/Meshes/sixDofDragBehavior.ts"],"names":[],"mappings":"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","sourcesContent":["import { Behavior } from \"../../Behaviors/behavior\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Nullable } from \"../../types\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Vector3, Quaternion, Matrix } from \"../../Maths/math.vector\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { PivotTools } from \"../../Misc/pivotTools\";\r\n/**\r\n * A behavior that when attached to a mesh will allow the mesh to be dragged around based on directions and origin of the pointer's ray\r\n */\r\nexport class SixDofDragBehavior implements Behavior<Mesh> {\r\n private static _virtualScene: Scene;\r\n private _ownerNode: Mesh;\r\n private _sceneRenderObserver: Nullable<Observer<Scene>> = null;\r\n private _scene: Scene;\r\n private _targetPosition = new Vector3(0, 0, 0);\r\n private _virtualOriginMesh: AbstractMesh;\r\n private _virtualDragMesh: AbstractMesh;\r\n private _pointerObserver: Nullable<Observer<PointerInfo>>;\r\n private _moving = false;\r\n private _startingOrientation = new Quaternion();\r\n private _attachedToElement: boolean = false;\r\n\r\n /**\r\n * How much faster the object should move when the controller is moving towards it. This is useful to bring objects that are far away from the user to them faster. Set this to 0 to avoid any speed increase. (Default: 3)\r\n */\r\n private zDragFactor = 3;\r\n /**\r\n * If the object should rotate to face the drag origin\r\n */\r\n public rotateDraggedObject = true;\r\n /**\r\n * If the behavior is currently in a dragging state\r\n */\r\n public dragging = false;\r\n /**\r\n * The distance towards the target drag position to move each frame. This can be useful to avoid jitter. Set this to 1 for no delay. (Default: 0.2)\r\n */\r\n public dragDeltaRatio = 0.2;\r\n /**\r\n * The id of the pointer that is currently interacting with the behavior (-1 when no pointer is active)\r\n */\r\n public currentDraggingPointerID = -1;\r\n /**\r\n * If camera controls should be detached during the drag\r\n */\r\n public detachCameraControls = true;\r\n /**\r\n * Fires each time a drag starts\r\n */\r\n public onDragStartObservable = new Observable<{}>();\r\n /**\r\n * Fires each time a drag happens\r\n */\r\n public onDragObservable = new Observable<void>();\r\n /**\r\n * Fires each time a drag ends (eg. mouse release after drag)\r\n */\r\n public onDragEndObservable = new Observable<{}>();\r\n\r\n /**\r\n * Instantiates a behavior that when attached to a mesh will allow the mesh to be dragged around based on directions and origin of the pointer's ray\r\n */\r\n constructor() {\r\n }\r\n\r\n /**\r\n * The name of the behavior\r\n */\r\n public get name(): string {\r\n return \"SixDofDrag\";\r\n }\r\n\r\n /**\r\n * Initializes the behavior\r\n */\r\n public init() { }\r\n\r\n /**\r\n * In the case of multiplea active cameras, the cameraToUseForPointers should be used if set instead of active camera\r\n */\r\n private get _pointerCamera() {\r\n if (this._scene.cameraToUseForPointers) {\r\n return this._scene.cameraToUseForPointers;\r\n } else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Attaches the scale behavior the passed in mesh\r\n * @param ownerNode The mesh that will be scaled around once attached\r\n */\r\n public attach(ownerNode: Mesh): void {\r\n this._ownerNode = ownerNode;\r\n this._scene = this._ownerNode.getScene();\r\n if (!SixDofDragBehavior._virtualScene) {\r\n SixDofDragBehavior._virtualScene = new Scene(this._scene.getEngine(), {virtual: true});\r\n SixDofDragBehavior._virtualScene.detachControl();\r\n this._scene.getEngine().scenes.pop();\r\n }\r\n\r\n var pickedMesh: Nullable<AbstractMesh> = null;\r\n var lastSixDofOriginPosition = new Vector3(0, 0, 0);\r\n\r\n // Setup virtual meshes to be used for dragging without dirtying the existing scene\r\n this._virtualOriginMesh = new AbstractMesh(\"\", SixDofDragBehavior._virtualScene);\r\n this._virtualOriginMesh.rotationQuaternion = new Quaternion();\r\n this._virtualDragMesh = new AbstractMesh(\"\", SixDofDragBehavior._virtualScene);\r\n this._virtualDragMesh.rotationQuaternion = new Quaternion();\r\n\r\n var pickPredicate = (m: AbstractMesh) => {\r\n return this._ownerNode == m || m.isDescendantOf(this._ownerNode);\r\n };\r\n this._pointerObserver = this._scene.onPointerObservable.add((pointerInfo, eventState) => {\r\n if (pointerInfo.type == PointerEventTypes.POINTERDOWN) {\r\n if (!this.dragging && pointerInfo.pickInfo && pointerInfo.pickInfo.hit && pointerInfo.pickInfo.pickedMesh && pointerInfo.pickInfo.ray && pickPredicate(pointerInfo.pickInfo.pickedMesh)) {\r\n if (this._pointerCamera && this._pointerCamera.cameraRigMode == Camera.RIG_MODE_NONE) {\r\n pointerInfo.pickInfo.ray.origin.copyFrom(this._pointerCamera!.globalPosition);\r\n }\r\n\r\n pickedMesh = this._ownerNode;\r\n PivotTools._RemoveAndStorePivotPoint(pickedMesh);\r\n lastSixDofOriginPosition.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n\r\n // Set position and orientation of the controller\r\n this._virtualOriginMesh.position.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n this._virtualOriginMesh.lookAt(pointerInfo.pickInfo.ray.origin.add(pointerInfo.pickInfo.ray.direction));\r\n\r\n // Attach the virtual drag mesh to the virtual origin mesh so it can be dragged\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n pickedMesh.computeWorldMatrix();\r\n this._virtualDragMesh.position.copyFrom(pickedMesh.absolutePosition);\r\n if (!pickedMesh.rotationQuaternion) {\r\n pickedMesh.rotationQuaternion = Quaternion.RotationYawPitchRoll(pickedMesh.rotation.y, pickedMesh.rotation.x, pickedMesh.rotation.z);\r\n }\r\n var oldParent = pickedMesh.parent;\r\n pickedMesh.setParent(null);\r\n this._virtualDragMesh.rotationQuaternion!.copyFrom(pickedMesh.rotationQuaternion);\r\n pickedMesh.setParent(oldParent);\r\n this._virtualOriginMesh.addChild(this._virtualDragMesh);\r\n\r\n // Update state\r\n this._targetPosition.copyFrom(this._virtualDragMesh.absolutePosition);\r\n this.dragging = true;\r\n this.currentDraggingPointerID = (<PointerEvent>pointerInfo.event).pointerId;\r\n\r\n // Detach camera controls\r\n if (this.detachCameraControls && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n if (this._pointerCamera.inputs.attachedToElement) {\r\n this._pointerCamera.detachControl();\r\n this._attachedToElement = true;\r\n } else {\r\n this._attachedToElement = false;\r\n }\r\n }\r\n PivotTools._RestorePivotPoint(pickedMesh);\r\n this.onDragStartObservable.notifyObservers({});\r\n }\r\n } else if (pointerInfo.type == PointerEventTypes.POINTERUP || pointerInfo.type == PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this.currentDraggingPointerID == (<PointerEvent>pointerInfo.event).pointerId) {\r\n this.dragging = false;\r\n this._moving = false;\r\n this.currentDraggingPointerID = -1;\r\n pickedMesh = null;\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n\r\n // Reattach camera controls\r\n if (this.detachCameraControls && this._attachedToElement && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n this._pointerCamera.attachControl(true);\r\n this._attachedToElement = false;\r\n }\r\n this.onDragEndObservable.notifyObservers({});\r\n }\r\n } else if (pointerInfo.type == PointerEventTypes.POINTERMOVE) {\r\n if (this.currentDraggingPointerID == (<PointerEvent>pointerInfo.event).pointerId && this.dragging && pointerInfo.pickInfo && pointerInfo.pickInfo.ray && pickedMesh) {\r\n var zDragFactor = this.zDragFactor;\r\n if (this._pointerCamera && this._pointerCamera.cameraRigMode == Camera.RIG_MODE_NONE) {\r\n pointerInfo.pickInfo.ray.origin.copyFrom(this._pointerCamera!.globalPosition);\r\n zDragFactor = 0;\r\n }\r\n\r\n // Calculate controller drag distance in controller space\r\n var originDragDifference = pointerInfo.pickInfo.ray.origin.subtract(lastSixDofOriginPosition);\r\n lastSixDofOriginPosition.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n var localOriginDragDifference = -Vector3.Dot(originDragDifference, pointerInfo.pickInfo.ray.direction);\r\n\r\n this._virtualOriginMesh.addChild(this._virtualDragMesh);\r\n // Determine how much the controller moved to/away towards the dragged object and use this to move the object further when its further away\r\n this._virtualDragMesh.position.z -= this._virtualDragMesh.position.z < 1 ? localOriginDragDifference * this.zDragFactor : localOriginDragDifference * zDragFactor * this._virtualDragMesh.position.z;\r\n if (this._virtualDragMesh.position.z < 0) {\r\n this._virtualDragMesh.position.z = 0;\r\n }\r\n\r\n // Update the controller position\r\n this._virtualOriginMesh.position.copyFrom(pointerInfo.pickInfo.ray.origin);\r\n this._virtualOriginMesh.lookAt(pointerInfo.pickInfo.ray.origin.add(pointerInfo.pickInfo.ray.direction));\r\n this._virtualOriginMesh.removeChild(this._virtualDragMesh);\r\n\r\n // Move the virtualObjectsPosition into the picked mesh's space if needed\r\n this._targetPosition.copyFrom(this._virtualDragMesh.absolutePosition);\r\n if (pickedMesh.parent) {\r\n Vector3.TransformCoordinatesToRef(this._targetPosition, Matrix.Invert(pickedMesh.parent.getWorldMatrix()), this._targetPosition);\r\n }\r\n\r\n if (!this._moving) {\r\n this._startingOrientation.copyFrom(this._virtualDragMesh.rotationQuaternion!);\r\n }\r\n this._moving = true;\r\n }\r\n }\r\n });\r\n\r\n var tmpQuaternion = new Quaternion();\r\n // On every frame move towards target scaling to avoid jitter caused by vr controllers\r\n this._sceneRenderObserver = ownerNode.getScene().onBeforeRenderObservable.add(() => {\r\n if (this.dragging && this._moving && pickedMesh) {\r\n PivotTools._RemoveAndStorePivotPoint(pickedMesh);\r\n // Slowly move mesh to avoid jitter\r\n pickedMesh.position.addInPlace(this._targetPosition.subtract(pickedMesh.position).scale(this.dragDeltaRatio));\r\n\r\n if (this.rotateDraggedObject) {\r\n // Get change in rotation\r\n tmpQuaternion.copyFrom(this._startingOrientation);\r\n tmpQuaternion.x = -tmpQuaternion.x;\r\n tmpQuaternion.y = -tmpQuaternion.y;\r\n tmpQuaternion.z = -tmpQuaternion.z;\r\n this._virtualDragMesh.rotationQuaternion!.multiplyToRef(tmpQuaternion, tmpQuaternion);\r\n // Convert change in rotation to only y axis rotation\r\n Quaternion.RotationYawPitchRollToRef(tmpQuaternion.toEulerAngles(\"xyz\").y, 0, 0, tmpQuaternion);\r\n tmpQuaternion.multiplyToRef(this._startingOrientation, tmpQuaternion);\r\n // Slowly move mesh to avoid jitter\r\n var oldParent = pickedMesh.parent;\r\n\r\n // Only rotate the mesh if it's parent has uniform scaling\r\n if (!oldParent || ((oldParent as Mesh).scaling && !(oldParent as Mesh).scaling.isNonUniformWithinEpsilon(0.001))) {\r\n pickedMesh.setParent(null);\r\n Quaternion.SlerpToRef(pickedMesh.rotationQuaternion!, tmpQuaternion, this.dragDeltaRatio, pickedMesh.rotationQuaternion!);\r\n pickedMesh.setParent(oldParent);\r\n }\r\n }\r\n PivotTools._RestorePivotPoint(pickedMesh);\r\n\r\n this.onDragObservable.notifyObservers();\r\n }\r\n });\r\n }\r\n /**\r\n * Detaches the behavior from the mesh\r\n */\r\n public detach(): void {\r\n if (this._scene) {\r\n if (this.detachCameraControls && this._attachedToElement && this._pointerCamera && !this._pointerCamera.leftCamera) {\r\n this._pointerCamera.attachControl(true);\r\n this._attachedToElement = false;\r\n }\r\n this._scene.onPointerObservable.remove(this._pointerObserver);\r\n }\r\n if (this._ownerNode) {\r\n this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver);\r\n }\r\n if (this._virtualOriginMesh) {\r\n this._virtualOriginMesh.dispose();\r\n }\r\n if (this._virtualDragMesh) {\r\n this._virtualDragMesh.dispose();\r\n }\r\n this.onDragEndObservable.clear();\r\n this.onDragObservable.clear();\r\n this.onDragStartObservable.clear();\r\n }\r\n}\r\n"]}
@@ -362,7 +362,7 @@ var ThinEngine = /** @class */ (function () {
362
362
  */
363
363
  // Not mixed with Version for tooling purpose.
364
364
  get: function () {
365
- return "babylonjs@4.2.0-rc.6";
365
+ return "babylonjs@4.2.1";
366
366
  },
367
367
  enumerable: false,
368
368
  configurable: true
@@ -372,7 +372,7 @@ var ThinEngine = /** @class */ (function () {
372
372
  * Returns the current version of the framework
373
373
  */
374
374
  get: function () {
375
- return "4.2.0-rc.6";
375
+ return "4.2.1";
376
376
  },
377
377
  enumerable: false,
378
378
  configurable: true