UNPKG

threepipe

Version:

A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.

143 lines 5.08 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { TransformControls } from './TransformControls.js'; import { MathUtils } from 'three'; import { iObjectCommons } from '../../core'; import { uiDropdown, uiFolderContainer, uiSlider, uiToggle } from 'uiconfig.js'; let TransformControls2 = class TransformControls2 extends TransformControls { _keyDownListener(event) { if (!this.enabled) return; if (!this.object) return; if (event.metaKey || event.ctrlKey) return; switch (event.code) { case 'KeyQ': this.space = this.space === 'local' ? 'world' : 'local'; break; case 'ShiftLeft': this.translationSnap = 0.5; this.rotationSnap = MathUtils.degToRad(15); this.scaleSnap = 0.25; break; case 'KeyW': this.mode = 'translate'; break; case 'KeyE': this.mode = 'rotate'; break; case 'KeyR': this.mode = 'scale'; break; case 'Equal': case 'NumpadAdd': case 'Plus': this.size = this.size + 0.1; break; case 'Minus': case 'NumpadSubtract': case 'Underscore': this.size = Math.max(this.size - 0.1, 0.1); break; case 'KeyX': this.showX = !this.showX; break; case 'KeyY': this.showY = !this.showY; break; case 'KeyZ': this.showZ = !this.showZ; break; case 'Space': this.enabled = !this.enabled; break; default: return; } this.setDirty({ refreshScene: true, frameFade: true }); } _keyUpListener(event) { if (!this.enabled) return; // reset events switch (event.code) { case 'ShiftLeft': this.translationSnap = null; this.rotationSnap = null; this.scaleSnap = null; break; default: break; } if (!this.object) return; // non-reset events switch (event.code) { default: break; } } constructor(camera, canvas) { super(camera, canvas); this.isWidget = true; this.assetType = 'widget'; this.setDirty = iObjectCommons.setDirty.bind(this); this.refreshUi = iObjectCommons.refreshUi.bind(this); this.visible = false; this.userData.bboxVisible = false; this.size = 1.5; this.addEventListener('objectChange', () => { this?.object?.setDirty && this.object.setDirty({ frameFade: false }); // todo: do this.setDirty? }); this.addEventListener('change', () => { this.setDirty({ frameFade: false }); }); this._keyUpListener = this._keyUpListener.bind(this); this._keyDownListener = this._keyDownListener.bind(this); window.addEventListener('keydown', this._keyDownListener); window.addEventListener('keyup', this._keyUpListener); } dispose() { window.removeEventListener('keydown', this._keyDownListener); window.removeEventListener('keyup', this._keyUpListener); super.dispose(); } // dragging: boolean // endregion /** * Get the threejs object * @deprecated */ get modelObject() { return this; } }; __decorate([ uiDropdown('Mode', ['translate', 'rotate', 'scale'].map(label => ({ label }))) ], TransformControls2.prototype, "mode", void 0); __decorate([ uiDropdown('Space', ['world', 'local'].map(label => ({ label }))) ], TransformControls2.prototype, "space", void 0); __decorate([ uiSlider('Size', [0.1, 10], 0.1) ], TransformControls2.prototype, "size", void 0); __decorate([ uiToggle('Show X') ], TransformControls2.prototype, "showX", void 0); __decorate([ uiToggle('Show Y') ], TransformControls2.prototype, "showY", void 0); __decorate([ uiToggle('Show Z') ], TransformControls2.prototype, "showZ", void 0); TransformControls2 = __decorate([ uiFolderContainer('Transform Controls') ], TransformControls2); export { TransformControls2 }; //# sourceMappingURL=TransformControls2.js.map