@soonspacejs/plugin-transform-controls 2.13.11 → 2.13.14

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/dist/index.esm.js CHANGED
@@ -1 +1,67 @@
1
- import{Mesh as e}from"three";import{TransformControls as t}from"three/examples/jsm/controls/TransformControls.js";class s{constructor(e){this.ssp=e,this.controls=new Set}start(e,s={}){const{mode:o="translate",onUpdate:r,onDragStart:n,onDragEnd:a,onClose:i}=s,l=new t(this.ssp.viewport.camera,this.ssp.viewport.rendererManager.interactiveContainer);this.controls.add(l),l.attach(e),l.mode=o,l.addEventListener("dragging-changed",t=>{this.ssp.controls.enabled=!t.value,t.value?null==n||n(e):null==a||a(e)}),l.addEventListener("objectChange",()=>{null==r||r(e),this.ssp.signals.objectChanged.dispatch(e)});const c=l.getHelper();return c.addEventListener("removed",()=>{null==i||i()}),this.ssp.viewport.scene.add(c),this.ssp.render(),l}_getPreviousControl(){return[...this.controls].at(-1)}close(t=this._getPreviousControl()){if(t){t.detach(),t.disconnect();const s=t.getHelper();s.traverse(function(t){t instanceof e&&(t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose())}),this.ssp.removeObject(s),this.controls.delete(t)}}closeAll(){this.controls.forEach(e=>this.close(e)),this.controls.clear()}changeMode(e=this._getPreviousControl(),t="translate"){e&&e.mode!==t&&(e.mode=t,this.ssp.signals.objectChanged.dispatch())}}export{s as default};
1
+ import { Mesh } from 'three';
2
+ import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
3
+
4
+ class TransformControlsPlugin {
5
+ constructor(ssp) {
6
+ this.ssp = ssp;
7
+ this.controls = new Set();
8
+ }
9
+ start(object, options = {}) {
10
+ const { mode = 'translate', onUpdate, onDragStart, onDragEnd, onClose, } = options;
11
+ const control = new TransformControls(this.ssp.viewport.camera, this.ssp.viewport.rendererManager.interactiveContainer);
12
+ this.controls.add(control);
13
+ control.attach(object);
14
+ control.mode = mode;
15
+ control.addEventListener('dragging-changed', (event) => {
16
+ this.ssp.controls.enabled = !event.value;
17
+ if (event.value)
18
+ onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(object);
19
+ else
20
+ onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(object);
21
+ });
22
+ control.addEventListener('objectChange', () => {
23
+ onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate(object);
24
+ this.ssp.signals.objectChanged.dispatch(object);
25
+ });
26
+ const helper = control.getHelper();
27
+ helper.addEventListener('removed', () => {
28
+ onClose === null || onClose === void 0 ? void 0 : onClose();
29
+ });
30
+ this.ssp.viewport.scene.add(helper);
31
+ this.ssp.render();
32
+ return control;
33
+ }
34
+ _getPreviousControl() {
35
+ return [...this.controls].at(-1);
36
+ }
37
+ close(control = this._getPreviousControl()) {
38
+ if (control) {
39
+ control.detach();
40
+ control.disconnect();
41
+ const helper = control.getHelper();
42
+ helper.traverse(function (child) {
43
+ if (child instanceof Mesh) {
44
+ if (child.geometry)
45
+ child.geometry.dispose();
46
+ if (child.material)
47
+ child.material.dispose();
48
+ }
49
+ });
50
+ this.ssp.removeObject(helper);
51
+ this.controls.delete(control);
52
+ }
53
+ }
54
+ closeAll() {
55
+ this.controls.forEach((control) => this.close(control));
56
+ this.controls.clear();
57
+ }
58
+ changeMode(control = this._getPreviousControl(), mode = 'translate') {
59
+ if (control && control.mode !== mode) {
60
+ control.mode = mode;
61
+ this.ssp.signals.objectChanged.dispatch();
62
+ }
63
+ }
64
+ }
65
+
66
+ export { TransformControlsPlugin as default };
67
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["import SoonSpace from 'soonspacejs'\nimport { Mesh, Object3D, } from 'three'\nimport { TransformControls, } from 'three/examples/jsm/controls/TransformControls.js'\n\nexport interface StartOptions {\n mode?: 'translate' | 'rotate' | 'scale';\n onUpdate?: ( object: Object3D ) => void;\n onDragStart?: ( object: Object3D ) => void;\n onDragEnd?: ( object: Object3D ) => void;\n onClose?: () => void;\n}\n\nexport default class TransformControlsPlugin {\n\n controls: Set<TransformControls> = new Set()\n\n constructor ( readonly ssp: SoonSpace ) {}\n\n start ( object: Object3D, options: StartOptions = {} ): TransformControls {\n\n const { mode = 'translate', onUpdate, onDragStart, onDragEnd, onClose, } = options\n\n const control = new TransformControls(\n this.ssp.viewport.camera,\n this.ssp.viewport.rendererManager.interactiveContainer\n )\n\n this.controls.add( control )\n control.attach( object )\n control.mode = mode\n\n control.addEventListener( 'dragging-changed', ( event ) => {\n\n this.ssp.controls.enabled = !event.value\n\n if ( event.value ) onDragStart?.( object )\n else onDragEnd?.( object )\n \n } )\n control.addEventListener( 'objectChange', () => {\n\n onUpdate?.( object )\n this.ssp.signals.objectChanged.dispatch( object )\n \n } )\n\n const helper = control.getHelper()\n\n helper.addEventListener( 'removed', () => {\n\n onClose?.()\n \n } )\n this.ssp.viewport.scene.add( helper )\n\n this.ssp.render()\n\n return control\n \n }\n\n _getPreviousControl (): TransformControls | undefined {\n\n return [ ...this.controls ].at( -1 )\n \n }\n\n close ( control = this._getPreviousControl() ): void {\n\n if ( control ) {\n\n\n control.detach()\n control.disconnect()\n \n const helper = control.getHelper()\n\n helper.traverse( function ( child ) {\n\n if ( child instanceof Mesh ) {\n\n if ( child.geometry ) child.geometry.dispose()\n if ( child.material ) child.material.dispose()\n \n }\n \n } )\n this.ssp.removeObject( helper )\n \n this.controls.delete( control )\n \n }\n \n }\n\n closeAll () {\n\n this.controls.forEach( ( control ) => this.close( control ) )\n this.controls.clear()\n \n }\n\n changeMode ( control = this._getPreviousControl(), mode: StartOptions['mode'] = 'translate' ) {\n\n if ( control && control.mode !== mode ) {\n\n control.mode = mode\n this.ssp.signals.objectChanged.dispatch()\n \n }\n \n }\n\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-transform-controls",
3
3
  "pluginName": "TransformControlsPlugin",
4
- "version": "2.13.11",
4
+ "version": "2.13.14",
5
5
  "description": "Transform-controls plugin for SoonSpace.js",
6
6
  "main": "dist/index.esm.js",
7
7
  "module": "dist/index.esm.js",
@@ -13,8 +13,8 @@
13
13
  ],
14
14
  "author": "xunwei",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "08bf9efb38c291f22ca044b936fd49269c716bbb",
16
+ "gitHead": "71d91773a54276b7cbb0a0525ba5f921345f121f",
17
17
  "peerDependencies": {
18
- "soonspacejs": "2.13.11"
18
+ "soonspacejs": "2.13.14"
19
19
  }
20
20
  }