viral-viewer-2 6.2.8 → 6.3.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.
Files changed (154) hide show
  1. package/dist/components/loader/viral-revit.loader.js +8 -3
  2. package/dist/components/loader/viral-revit.loader.js.map +1 -1
  3. package/dist/index.mjs +41153 -0
  4. package/package.json +1 -1
  5. package/dist/components/centralized-event-handler/viral-centralized-event-handler.d.ts +0 -7
  6. package/dist/components/centralized-event-handler/viral-centralized-event-handler.js +0 -47
  7. package/dist/components/centralized-event-handler/viral-centralized-event-handler.js.map +0 -1
  8. package/dist/components/compress/compress.processor.d.ts +0 -4
  9. package/dist/components/compress/compress.processor.js +0 -29
  10. package/dist/components/compress/compress.processor.js.map +0 -1
  11. package/dist/components/context-menu/viral-context-menu.d.ts +0 -17
  12. package/dist/components/context-menu/viral-context-menu.js +0 -74
  13. package/dist/components/context-menu/viral-context-menu.js.map +0 -1
  14. package/dist/components/keyboard/viral-keyboard.d.ts +0 -17
  15. package/dist/components/keyboard/viral-keyboard.js +0 -76
  16. package/dist/components/keyboard/viral-keyboard.js.map +0 -1
  17. package/dist/components/loader/viral-viewer-point-cloud.loader.d.ts +0 -16
  18. package/dist/components/loader/viral-viewer-point-cloud.loader.js +0 -33
  19. package/dist/components/loader/viral-viewer-point-cloud.loader.js.map +0 -1
  20. package/dist/components/loader/viral-viewer-revit.loader.d.ts +0 -13
  21. package/dist/components/loader/viral-viewer-revit.loader.js +0 -124
  22. package/dist/components/loader/viral-viewer-revit.loader.js.map +0 -1
  23. package/dist/components/mouse/viral-mouse.d.ts +0 -31
  24. package/dist/components/mouse/viral-mouse.js +0 -234
  25. package/dist/components/mouse/viral-mouse.js.map +0 -1
  26. package/dist/components/navigation-cube/components/cube-camera.d.ts +0 -15
  27. package/dist/components/navigation-cube/components/cube-camera.js +0 -74
  28. package/dist/components/navigation-cube/components/cube-camera.js.map +0 -1
  29. package/dist/components/navigation-cube/components/cube-renderer.d.ts +0 -9
  30. package/dist/components/navigation-cube/components/cube-renderer.js +0 -31
  31. package/dist/components/navigation-cube/components/cube-renderer.js.map +0 -1
  32. package/dist/components/navigation-cube/components/cube-scene.d.ts +0 -13
  33. package/dist/components/navigation-cube/components/cube-scene.js +0 -546
  34. package/dist/components/navigation-cube/components/cube-scene.js.map +0 -1
  35. package/dist/components/navigation-cube/components/cube.mouse.d.ts +0 -9
  36. package/dist/components/navigation-cube/components/cube.mouse.js +0 -109
  37. package/dist/components/navigation-cube/components/cube.mouse.js.map +0 -1
  38. package/dist/components/navigation-cube/viral-navigation-cube.d.ts +0 -16
  39. package/dist/components/navigation-cube/viral-navigation-cube.js +0 -50
  40. package/dist/components/navigation-cube/viral-navigation-cube.js.map +0 -1
  41. package/dist/components/post-processing/ambient-occlusion-effect.d.ts +0 -13
  42. package/dist/components/post-processing/ambient-occlusion-effect.js +0 -33
  43. package/dist/components/post-processing/ambient-occlusion-effect.js.map +0 -1
  44. package/dist/components/post-processing/bloom-effect.d.ts +0 -11
  45. package/dist/components/post-processing/bloom-effect.js +0 -29
  46. package/dist/components/post-processing/bloom-effect.js.map +0 -1
  47. package/dist/components/post-processing/outline-effect.d.ts +0 -13
  48. package/dist/components/post-processing/outline-effect.js +0 -33
  49. package/dist/components/post-processing/outline-effect.js.map +0 -1
  50. package/dist/components/spinner/viral-spinner.d.ts +0 -10
  51. package/dist/components/spinner/viral-spinner.js +0 -207
  52. package/dist/components/spinner/viral-spinner.js.map +0 -1
  53. package/dist/components/tools/tools/viral-tool-ambient-occlusion.d.ts +0 -7
  54. package/dist/components/tools/tools/viral-tool-ambient-occlusion.js +0 -16
  55. package/dist/components/tools/tools/viral-tool-ambient-occlusion.js.map +0 -1
  56. package/dist/components/tools/tools/viral-tool-dark-mode.d.ts +0 -7
  57. package/dist/components/tools/tools/viral-tool-dark-mode.js +0 -21
  58. package/dist/components/tools/tools/viral-tool-dark-mode.js.map +0 -1
  59. package/dist/components/tools/tools/viral-tool-elevation.d.ts +0 -11
  60. package/dist/components/tools/tools/viral-tool-elevation.js +0 -30
  61. package/dist/components/tools/tools/viral-tool-elevation.js.map +0 -1
  62. package/dist/components/tools/tools/viral-tool-measure.d.ts +0 -33
  63. package/dist/components/tools/tools/viral-tool-measure.js +0 -243
  64. package/dist/components/tools/tools/viral-tool-measure.js.map +0 -1
  65. package/dist/components/tools/tools/viral-tool-sunlight.d.ts +0 -7
  66. package/dist/components/tools/tools/viral-tool-sunlight.js +0 -46
  67. package/dist/components/tools/tools/viral-tool-sunlight.js.map +0 -1
  68. package/dist/components/tools/viral-tools.d.ts +0 -32
  69. package/dist/components/tools/viral-tools.js +0 -213
  70. package/dist/components/tools/viral-tools.js.map +0 -1
  71. package/dist/components/worker/load-model.d.ts +0 -126
  72. package/dist/components/worker/load-model.js +0 -1265
  73. package/dist/components/worker/load-model.js.map +0 -1
  74. package/dist/components/worker/test-worker-pool.d.ts +0 -6
  75. package/dist/components/worker/test-worker-pool.js +0 -21
  76. package/dist/components/worker/test-worker-pool.js.map +0 -1
  77. package/dist/components/worker/viral-viewer-4.worker.d.ts +0 -10
  78. package/dist/components/worker/viral-viewer-4.worker.js +0 -97
  79. package/dist/components/worker/viral-viewer-4.worker.js.map +0 -1
  80. package/dist/components/worker/viral-viewer.worker-pool.d.ts +0 -0
  81. package/dist/components/worker/viral-viewer.worker-pool.js +0 -61
  82. package/dist/components/worker/viral-viewer.worker-pool.js.map +0 -1
  83. package/dist/components/worker/worker-pool.d.ts +0 -21
  84. package/dist/components/worker/worker-pool.js +0 -47
  85. package/dist/components/worker/worker-pool.js.map +0 -1
  86. package/dist/components/worker/worker-thread.d.ts +0 -9
  87. package/dist/components/worker/worker-thread.js +0 -30
  88. package/dist/components/worker/worker-thread.js.map +0 -1
  89. package/dist/components/worker-script/load-model-worker-3.script.d.ts +0 -1
  90. package/dist/components/worker-script/load-model-worker-3.script.js +0 -34170
  91. package/dist/components/worker-script/load-model-worker-3.script.js.map +0 -1
  92. package/dist/components/worker-script/test-worker-pool.script.d.ts +0 -1
  93. package/dist/components/worker-script/test-worker-pool.script.js +0 -12
  94. package/dist/components/worker-script/test-worker-pool.script.js.map +0 -1
  95. package/dist/models/dictionary.model.d.ts +0 -10
  96. package/dist/models/dictionary.model.js +0 -42
  97. package/dist/models/dictionary.model.js.map +0 -1
  98. package/dist/threejs-addon/buffer-geometry-utils.d.ts +0 -64
  99. package/dist/threejs-addon/buffer-geometry-utils.js +0 -807
  100. package/dist/threejs-addon/buffer-geometry-utils.js.map +0 -1
  101. package/dist/threejs-addon/gltf-loader.d.ts +0 -17
  102. package/dist/threejs-addon/gltf-loader.js +0 -2796
  103. package/dist/threejs-addon/gltf-loader.js.map +0 -1
  104. package/dist/threejs-addon/post-processing/effect-composer.d.ts +0 -27
  105. package/dist/threejs-addon/post-processing/effect-composer.js +0 -134
  106. package/dist/threejs-addon/post-processing/effect-composer.js.map +0 -1
  107. package/dist/threejs-addon/post-processing/mask-pass.d.ts +0 -11
  108. package/dist/threejs-addon/post-processing/mask-pass.js +0 -69
  109. package/dist/threejs-addon/post-processing/mask-pass.js.map +0 -1
  110. package/dist/threejs-addon/post-processing/outline-pass.d.ts +0 -58
  111. package/dist/threejs-addon/post-processing/outline-pass.js +0 -484
  112. package/dist/threejs-addon/post-processing/outline-pass.js.map +0 -1
  113. package/dist/threejs-addon/post-processing/output-pass.d.ts +0 -11
  114. package/dist/threejs-addon/post-processing/output-pass.js +0 -61
  115. package/dist/threejs-addon/post-processing/output-pass.js.map +0 -1
  116. package/dist/threejs-addon/post-processing/pass.d.ts +0 -20
  117. package/dist/threejs-addon/post-processing/pass.js +0 -48
  118. package/dist/threejs-addon/post-processing/pass.js.map +0 -1
  119. package/dist/threejs-addon/post-processing/render-pass.d.ts +0 -13
  120. package/dist/threejs-addon/post-processing/render-pass.js +0 -50
  121. package/dist/threejs-addon/post-processing/render-pass.js.map +0 -1
  122. package/dist/threejs-addon/post-processing/sao-pass.d.ts +0 -62
  123. package/dist/threejs-addon/post-processing/sao-pass.js +0 -296
  124. package/dist/threejs-addon/post-processing/sao-pass.js.map +0 -1
  125. package/dist/threejs-addon/post-processing/shader-pass.d.ts +0 -11
  126. package/dist/threejs-addon/post-processing/shader-pass.js +0 -48
  127. package/dist/threejs-addon/post-processing/shader-pass.js.map +0 -1
  128. package/dist/threejs-addon/post-processing/unreal-bloom-pass.d.ts +0 -48
  129. package/dist/threejs-addon/post-processing/unreal-bloom-pass.js +0 -290
  130. package/dist/threejs-addon/post-processing/unreal-bloom-pass.js.map +0 -1
  131. package/dist/threejs-addon/shaders/copy-shader.d.ts +0 -13
  132. package/dist/threejs-addon/shaders/copy-shader.js +0 -39
  133. package/dist/threejs-addon/shaders/copy-shader.js.map +0 -1
  134. package/dist/threejs-addon/shaders/depth-limited-blur-shader.d.ts +0 -48
  135. package/dist/threejs-addon/shaders/depth-limited-blur-shader.js +0 -142
  136. package/dist/threejs-addon/shaders/depth-limited-blur-shader.js.map +0 -1
  137. package/dist/threejs-addon/shaders/luminosity-high-pass-shader.d.ts +0 -27
  138. package/dist/threejs-addon/shaders/luminosity-high-pass-shader.js +0 -56
  139. package/dist/threejs-addon/shaders/luminosity-high-pass-shader.js.map +0 -1
  140. package/dist/threejs-addon/shaders/output-shader.d.ts +0 -13
  141. package/dist/threejs-addon/shaders/output-shader.js +0 -72
  142. package/dist/threejs-addon/shaders/output-shader.js.map +0 -1
  143. package/dist/threejs-addon/shaders/sao-shader.d.ts +0 -71
  144. package/dist/threejs-addon/shaders/sao-shader.js +0 -180
  145. package/dist/threejs-addon/shaders/sao-shader.js.map +0 -1
  146. package/dist/threejs-addon/shaders/unpack-depth-rgba-shader.d.ts +0 -13
  147. package/dist/threejs-addon/shaders/unpack-depth-rgba-shader.js +0 -41
  148. package/dist/threejs-addon/shaders/unpack-depth-rgba-shader.js.map +0 -1
  149. package/dist/threejs-addon/simplify-modifier.d.ts +0 -4
  150. package/dist/threejs-addon/simplify-modifier.js +0 -325
  151. package/dist/threejs-addon/simplify-modifier.js.map +0 -1
  152. package/dist/threejs-addon/transform-control.d.ts +0 -74
  153. package/dist/threejs-addon/transform-control.js +0 -1033
  154. package/dist/threejs-addon/transform-control.js.map +0 -1
@@ -1,1033 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransformControlsPlane = exports.TransformControlsGizmo = exports.TransformControls = void 0;
4
- const three_1 = require("three");
5
- const _raycaster = new three_1.Raycaster();
6
- const _tempVector = new three_1.Vector3();
7
- const _tempVector2 = new three_1.Vector3();
8
- const _tempQuaternion = new three_1.Quaternion();
9
- const _unit = {
10
- X: new three_1.Vector3(1, 0, 0),
11
- Y: new three_1.Vector3(0, 1, 0),
12
- Z: new three_1.Vector3(0, 0, 1)
13
- };
14
- const _changeEvent = { type: 'change' };
15
- const _mouseDownEvent = { type: 'mouseDown' };
16
- const _mouseUpEvent = { type: 'mouseUp', mode: null };
17
- const _objectChangeEvent = { type: 'objectChange' };
18
- class TransformControls extends three_1.Object3D {
19
- constructor(camera, domElement) {
20
- super();
21
- if (domElement === undefined) {
22
- console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.');
23
- domElement = document;
24
- }
25
- this.isTransformControls = true;
26
- this.visible = false;
27
- this.domElement = domElement;
28
- this.domElement.style.touchAction = 'none'; // disable touch scroll
29
- const _gizmo = new TransformControlsGizmo();
30
- this._gizmo = _gizmo;
31
- this.add(_gizmo);
32
- const _plane = new TransformControlsPlane();
33
- this._plane = _plane;
34
- this.add(_plane);
35
- const scope = this;
36
- // Defined getter, setter and store for a property
37
- function defineProperty(propName, defaultValue) {
38
- let propValue = defaultValue;
39
- Object.defineProperty(scope, propName, {
40
- get: function () {
41
- return propValue !== undefined ? propValue : defaultValue;
42
- },
43
- set: function (value) {
44
- if (propValue !== value) {
45
- propValue = value;
46
- _plane[propName] = value;
47
- _gizmo[propName] = value;
48
- scope.dispatchEvent({ type: propName + '-changed', value: value });
49
- scope.dispatchEvent(_changeEvent);
50
- }
51
- }
52
- });
53
- scope[propName] = defaultValue;
54
- _plane[propName] = defaultValue;
55
- _gizmo[propName] = defaultValue;
56
- }
57
- // Define properties with getters/setter
58
- // Setting the defined property will automatically trigger change event
59
- // Defined properties are passed down to gizmo and plane
60
- defineProperty('camera', camera);
61
- defineProperty('object', undefined);
62
- defineProperty('enabled', true);
63
- defineProperty('axis', null);
64
- defineProperty('mode', 'translate');
65
- defineProperty('translationSnap', null);
66
- defineProperty('rotationSnap', null);
67
- defineProperty('scaleSnap', null);
68
- defineProperty('space', 'world');
69
- defineProperty('size', 1);
70
- defineProperty('dragging', false);
71
- defineProperty('showX', true);
72
- defineProperty('showY', true);
73
- defineProperty('showZ', true);
74
- // Reusable utility variables
75
- const worldPosition = new three_1.Vector3();
76
- const worldPositionStart = new three_1.Vector3();
77
- const worldQuaternion = new three_1.Quaternion();
78
- const worldQuaternionStart = new three_1.Quaternion();
79
- const cameraPosition = new three_1.Vector3();
80
- const cameraQuaternion = new three_1.Quaternion();
81
- const pointStart = new three_1.Vector3();
82
- const pointEnd = new three_1.Vector3();
83
- const rotationAxis = new three_1.Vector3();
84
- const rotationAngle = 0;
85
- const eye = new three_1.Vector3();
86
- // TODO: remove properties unused in plane and gizmo
87
- defineProperty('worldPosition', worldPosition);
88
- defineProperty('worldPositionStart', worldPositionStart);
89
- defineProperty('worldQuaternion', worldQuaternion);
90
- defineProperty('worldQuaternionStart', worldQuaternionStart);
91
- defineProperty('cameraPosition', cameraPosition);
92
- defineProperty('cameraQuaternion', cameraQuaternion);
93
- defineProperty('pointStart', pointStart);
94
- defineProperty('pointEnd', pointEnd);
95
- defineProperty('rotationAxis', rotationAxis);
96
- defineProperty('rotationAngle', rotationAngle);
97
- defineProperty('eye', eye);
98
- this._offset = new three_1.Vector3();
99
- this._startNorm = new three_1.Vector3();
100
- this._endNorm = new three_1.Vector3();
101
- this._cameraScale = new three_1.Vector3();
102
- this._parentPosition = new three_1.Vector3();
103
- this._parentQuaternion = new three_1.Quaternion();
104
- this._parentQuaternionInv = new three_1.Quaternion();
105
- this._parentScale = new three_1.Vector3();
106
- this._worldScaleStart = new three_1.Vector3();
107
- this._worldQuaternionInv = new three_1.Quaternion();
108
- this._worldScale = new three_1.Vector3();
109
- this._positionStart = new three_1.Vector3();
110
- this._quaternionStart = new three_1.Quaternion();
111
- this._scaleStart = new three_1.Vector3();
112
- this._getPointer = getPointer.bind(this);
113
- this._onPointerDown = onPointerDown.bind(this);
114
- this._onPointerHover = onPointerHover.bind(this);
115
- this._onPointerMove = onPointerMove.bind(this);
116
- this._onPointerUp = onPointerUp.bind(this);
117
- this.domElement.addEventListener('pointerdown', this._onPointerDown);
118
- this.domElement.addEventListener('pointermove', this._onPointerHover);
119
- this.domElement.addEventListener('pointerup', this._onPointerUp);
120
- }
121
- // updateMatrixWorld updates key transformation variables
122
- updateMatrixWorld() {
123
- if (this.object !== undefined) {
124
- this.object.updateMatrixWorld();
125
- if (this.object.parent === null) {
126
- console.error('TransformControls: The attached 3D object must be a part of the scene graph.');
127
- }
128
- else {
129
- this.object.parent.matrixWorld.decompose(this._parentPosition, this._parentQuaternion, this._parentScale);
130
- }
131
- this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this._worldScale);
132
- this._parentQuaternionInv.copy(this._parentQuaternion).invert();
133
- this._worldQuaternionInv.copy(this.worldQuaternion).invert();
134
- }
135
- this.camera.updateMatrixWorld();
136
- this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this._cameraScale);
137
- if (this.camera.isOrthographicCamera) {
138
- this.camera.getWorldDirection(this.eye).negate();
139
- }
140
- else {
141
- this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize();
142
- }
143
- super.updateMatrixWorld(this);
144
- }
145
- pointerHover(pointer) {
146
- if (this.object === undefined || this.dragging === true)
147
- return;
148
- _raycaster.setFromCamera(pointer, this.camera);
149
- const intersect = intersectObjectWithRay(this._gizmo.picker[this.mode], _raycaster);
150
- if (intersect) {
151
- this.axis = intersect.object.name;
152
- }
153
- else {
154
- this.axis = null;
155
- }
156
- }
157
- pointerDown(pointer) {
158
- if (this.object === undefined || this.dragging === true || pointer.button !== 0)
159
- return;
160
- if (this.axis !== null) {
161
- _raycaster.setFromCamera(pointer, this.camera);
162
- const planeIntersect = intersectObjectWithRay(this._plane, _raycaster, true);
163
- if (planeIntersect) {
164
- this.object.updateMatrixWorld();
165
- this.object.parent.updateMatrixWorld();
166
- this._positionStart.copy(this.object.position);
167
- this._quaternionStart.copy(this.object.quaternion);
168
- this._scaleStart.copy(this.object.scale);
169
- this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart);
170
- this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart);
171
- }
172
- this.dragging = true;
173
- _mouseDownEvent.mode = this.mode;
174
- this.dispatchEvent(_mouseDownEvent);
175
- }
176
- }
177
- pointerMove(pointer) {
178
- const axis = this.axis;
179
- const mode = this.mode;
180
- const object = this.object;
181
- let space = this.space;
182
- if (mode === 'scale') {
183
- space = 'local';
184
- }
185
- else if (axis === 'E' || axis === 'XYZE' || axis === 'XYZ') {
186
- space = 'world';
187
- }
188
- if (object === undefined || axis === null || this.dragging === false || pointer.button !== -1)
189
- return;
190
- _raycaster.setFromCamera(pointer, this.camera);
191
- const planeIntersect = intersectObjectWithRay(this._plane, _raycaster, true);
192
- if (!planeIntersect)
193
- return;
194
- this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart);
195
- if (mode === 'translate') {
196
- // Apply translate
197
- this._offset.copy(this.pointEnd).sub(this.pointStart);
198
- if (space === 'local' && axis !== 'XYZ') {
199
- this._offset.applyQuaternion(this._worldQuaternionInv);
200
- }
201
- if (axis.indexOf('X') === -1)
202
- this._offset.x = 0;
203
- if (axis.indexOf('Y') === -1)
204
- this._offset.y = 0;
205
- if (axis.indexOf('Z') === -1)
206
- this._offset.z = 0;
207
- if (space === 'local' && axis !== 'XYZ') {
208
- this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale);
209
- }
210
- else {
211
- this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale);
212
- }
213
- object.position.copy(this._offset).add(this._positionStart);
214
- // Apply translation snap
215
- if (this.translationSnap) {
216
- if (space === 'local') {
217
- object.position.applyQuaternion(_tempQuaternion.copy(this._quaternionStart).invert());
218
- if (axis.search('X') !== -1) {
219
- object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;
220
- }
221
- if (axis.search('Y') !== -1) {
222
- object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;
223
- }
224
- if (axis.search('Z') !== -1) {
225
- object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;
226
- }
227
- object.position.applyQuaternion(this._quaternionStart);
228
- }
229
- if (space === 'world') {
230
- if (object.parent) {
231
- object.position.add(_tempVector.setFromMatrixPosition(object.parent.matrixWorld));
232
- }
233
- if (axis.search('X') !== -1) {
234
- object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;
235
- }
236
- if (axis.search('Y') !== -1) {
237
- object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;
238
- }
239
- if (axis.search('Z') !== -1) {
240
- object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;
241
- }
242
- if (object.parent) {
243
- object.position.sub(_tempVector.setFromMatrixPosition(object.parent.matrixWorld));
244
- }
245
- }
246
- }
247
- }
248
- else if (mode === 'scale') {
249
- if (axis.search('XYZ') !== -1) {
250
- let d = this.pointEnd.length() / this.pointStart.length();
251
- if (this.pointEnd.dot(this.pointStart) < 0)
252
- d *= -1;
253
- _tempVector2.set(d, d, d);
254
- }
255
- else {
256
- _tempVector.copy(this.pointStart);
257
- _tempVector2.copy(this.pointEnd);
258
- _tempVector.applyQuaternion(this._worldQuaternionInv);
259
- _tempVector2.applyQuaternion(this._worldQuaternionInv);
260
- _tempVector2.divide(_tempVector);
261
- if (axis.search('X') === -1) {
262
- _tempVector2.x = 1;
263
- }
264
- if (axis.search('Y') === -1) {
265
- _tempVector2.y = 1;
266
- }
267
- if (axis.search('Z') === -1) {
268
- _tempVector2.z = 1;
269
- }
270
- }
271
- // Apply scale
272
- object.scale.copy(this._scaleStart).multiply(_tempVector2);
273
- if (this.scaleSnap) {
274
- if (axis.search('X') !== -1) {
275
- object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
276
- }
277
- if (axis.search('Y') !== -1) {
278
- object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
279
- }
280
- if (axis.search('Z') !== -1) {
281
- object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
282
- }
283
- }
284
- }
285
- else if (mode === 'rotate') {
286
- this._offset.copy(this.pointEnd).sub(this.pointStart);
287
- const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(_tempVector.setFromMatrixPosition(this.camera.matrixWorld));
288
- if (axis === 'E') {
289
- this.rotationAxis.copy(this.eye);
290
- this.rotationAngle = this.pointEnd.angleTo(this.pointStart);
291
- this._startNorm.copy(this.pointStart).normalize();
292
- this._endNorm.copy(this.pointEnd).normalize();
293
- this.rotationAngle *= (this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1);
294
- }
295
- else if (axis === 'XYZE') {
296
- this.rotationAxis.copy(this._offset).cross(this.eye).normalize();
297
- this.rotationAngle = this._offset.dot(_tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED;
298
- }
299
- else if (axis === 'X' || axis === 'Y' || axis === 'Z') {
300
- this.rotationAxis.copy(_unit[axis]);
301
- _tempVector.copy(_unit[axis]);
302
- if (space === 'local') {
303
- _tempVector.applyQuaternion(this.worldQuaternion);
304
- }
305
- this.rotationAngle = this._offset.dot(_tempVector.cross(this.eye).normalize()) * ROTATION_SPEED;
306
- }
307
- // Apply rotation snap
308
- if (this.rotationSnap)
309
- this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap;
310
- // Apply rotate
311
- if (space === 'local' && axis !== 'E' && axis !== 'XYZE') {
312
- object.quaternion.copy(this._quaternionStart);
313
- object.quaternion.multiply(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize();
314
- }
315
- else {
316
- this.rotationAxis.applyQuaternion(this._parentQuaternionInv);
317
- object.quaternion.copy(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle));
318
- object.quaternion.multiply(this._quaternionStart).normalize();
319
- }
320
- }
321
- this.dispatchEvent(_changeEvent);
322
- this.dispatchEvent(_objectChangeEvent);
323
- }
324
- pointerUp(pointer) {
325
- if (pointer.button !== 0)
326
- return;
327
- if (this.dragging && (this.axis !== null)) {
328
- _mouseUpEvent.mode = this.mode;
329
- this.dispatchEvent(_mouseUpEvent);
330
- }
331
- this.dragging = false;
332
- this.axis = null;
333
- }
334
- dispose() {
335
- this.domElement.removeEventListener('pointerdown', this._onPointerDown);
336
- this.domElement.removeEventListener('pointermove', this._onPointerHover);
337
- this.domElement.removeEventListener('pointermove', this._onPointerMove);
338
- this.domElement.removeEventListener('pointerup', this._onPointerUp);
339
- this.traverse(function (child) {
340
- if (child.geometry)
341
- child.geometry.dispose();
342
- if (child.material)
343
- child.material.dispose();
344
- });
345
- }
346
- // Set current object
347
- attach(object) {
348
- this.object = object;
349
- this.visible = true;
350
- return this;
351
- }
352
- // Detach from object
353
- detach() {
354
- this.object = undefined;
355
- this.visible = false;
356
- this.axis = null;
357
- return this;
358
- }
359
- reset() {
360
- if (!this.enabled)
361
- return;
362
- if (this.dragging) {
363
- this.object.position.copy(this._positionStart);
364
- this.object.quaternion.copy(this._quaternionStart);
365
- this.object.scale.copy(this._scaleStart);
366
- this.dispatchEvent(_changeEvent);
367
- this.dispatchEvent(_objectChangeEvent);
368
- this.pointStart.copy(this.pointEnd);
369
- }
370
- }
371
- getRaycaster() {
372
- return _raycaster;
373
- }
374
- // TODO: deprecate
375
- getMode() {
376
- return this.mode;
377
- }
378
- setMode(mode) {
379
- this.mode = mode;
380
- }
381
- setTranslationSnap(translationSnap) {
382
- this.translationSnap = translationSnap;
383
- }
384
- setRotationSnap(rotationSnap) {
385
- this.rotationSnap = rotationSnap;
386
- }
387
- setScaleSnap(scaleSnap) {
388
- this.scaleSnap = scaleSnap;
389
- }
390
- setSize(size) {
391
- this.size = size;
392
- }
393
- setSpace(space) {
394
- this.space = space;
395
- }
396
- }
397
- exports.TransformControls = TransformControls;
398
- // mouse / touch event handlers
399
- function getPointer(event) {
400
- if (this.domElement.ownerDocument.pointerLockElement) {
401
- return {
402
- x: 0,
403
- y: 0,
404
- button: event.button
405
- };
406
- }
407
- else {
408
- const rect = this.domElement.getBoundingClientRect();
409
- return {
410
- x: (event.clientX - rect.left) / rect.width * 2 - 1,
411
- y: -(event.clientY - rect.top) / rect.height * 2 + 1,
412
- button: event.button
413
- };
414
- }
415
- }
416
- function onPointerHover(event) {
417
- if (!this.enabled)
418
- return;
419
- switch (event.pointerType) {
420
- case 'mouse':
421
- case 'pen':
422
- this.pointerHover(this._getPointer(event));
423
- break;
424
- }
425
- }
426
- function onPointerDown(event) {
427
- if (!this.enabled)
428
- return;
429
- if (!document.pointerLockElement) {
430
- this.domElement.setPointerCapture(event.pointerId);
431
- }
432
- this.domElement.addEventListener('pointermove', this._onPointerMove);
433
- this.pointerHover(this._getPointer(event));
434
- this.pointerDown(this._getPointer(event));
435
- }
436
- function onPointerMove(event) {
437
- if (!this.enabled)
438
- return;
439
- this.pointerMove(this._getPointer(event));
440
- }
441
- function onPointerUp(event) {
442
- if (!this.enabled)
443
- return;
444
- this.domElement.releasePointerCapture(event.pointerId);
445
- this.domElement.removeEventListener('pointermove', this._onPointerMove);
446
- this.pointerUp(this._getPointer(event));
447
- }
448
- function intersectObjectWithRay(object, raycaster, includeInvisible) {
449
- const allIntersections = raycaster.intersectObject(object, true);
450
- for (let i = 0; i < allIntersections.length; i++) {
451
- if (allIntersections[i].object.visible || includeInvisible) {
452
- return allIntersections[i];
453
- }
454
- }
455
- return false;
456
- }
457
- //
458
- // Reusable utility variables
459
- const _tempEuler = new three_1.Euler();
460
- const _alignVector = new three_1.Vector3(0, 1, 0);
461
- const _zeroVector = new three_1.Vector3(0, 0, 0);
462
- const _lookAtMatrix = new three_1.Matrix4();
463
- const _tempQuaternion2 = new three_1.Quaternion();
464
- const _identityQuaternion = new three_1.Quaternion();
465
- const _dirVector = new three_1.Vector3();
466
- const _tempMatrix = new three_1.Matrix4();
467
- const _unitX = new three_1.Vector3(1, 0, 0);
468
- const _unitY = new three_1.Vector3(0, 1, 0);
469
- const _unitZ = new three_1.Vector3(0, 0, 1);
470
- const _v1 = new three_1.Vector3();
471
- const _v2 = new three_1.Vector3();
472
- const _v3 = new three_1.Vector3();
473
- class TransformControlsGizmo extends three_1.Object3D {
474
- constructor() {
475
- super();
476
- this.isTransformControlsGizmo = true;
477
- this.type = 'TransformControlsGizmo';
478
- // shared materials
479
- const gizmoMaterial = new three_1.MeshBasicMaterial({
480
- depthTest: false,
481
- depthWrite: false,
482
- fog: false,
483
- toneMapped: false,
484
- transparent: true
485
- });
486
- const gizmoLineMaterial = new three_1.LineBasicMaterial({
487
- depthTest: false,
488
- depthWrite: false,
489
- fog: false,
490
- toneMapped: false,
491
- transparent: true
492
- });
493
- // Make unique material for each axis/color
494
- const matInvisible = gizmoMaterial.clone();
495
- matInvisible.opacity = 0.15;
496
- const matHelper = gizmoLineMaterial.clone();
497
- matHelper.opacity = 0.5;
498
- const matRed = gizmoMaterial.clone();
499
- matRed.color.setHex(0xff0000);
500
- const matGreen = gizmoMaterial.clone();
501
- matGreen.color.setHex(0x00ff00);
502
- const matBlue = gizmoMaterial.clone();
503
- matBlue.color.setHex(0x0000ff);
504
- const matRedTransparent = gizmoMaterial.clone();
505
- matRedTransparent.color.setHex(0xff0000);
506
- matRedTransparent.opacity = 0.5;
507
- const matGreenTransparent = gizmoMaterial.clone();
508
- matGreenTransparent.color.setHex(0x00ff00);
509
- matGreenTransparent.opacity = 0.5;
510
- const matBlueTransparent = gizmoMaterial.clone();
511
- matBlueTransparent.color.setHex(0x0000ff);
512
- matBlueTransparent.opacity = 0.5;
513
- const matWhiteTransparent = gizmoMaterial.clone();
514
- matWhiteTransparent.opacity = 0.25;
515
- const matYellowTransparent = gizmoMaterial.clone();
516
- matYellowTransparent.color.setHex(0xffff00);
517
- matYellowTransparent.opacity = 0.25;
518
- const matYellow = gizmoMaterial.clone();
519
- matYellow.color.setHex(0xffff00);
520
- const matGray = gizmoMaterial.clone();
521
- matGray.color.setHex(0x787878);
522
- // reusable geometry
523
- const arrowGeometry = new three_1.CylinderGeometry(0, 0.04, 0.1, 12);
524
- arrowGeometry.translate(0, 0.05, 0);
525
- const scaleHandleGeometry = new three_1.BoxGeometry(0.08, 0.08, 0.08);
526
- scaleHandleGeometry.translate(0, 0.04, 0);
527
- const lineGeometry = new three_1.BufferGeometry();
528
- lineGeometry.setAttribute('position', new three_1.Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3));
529
- const lineGeometry2 = new three_1.CylinderGeometry(0.0075, 0.0075, 0.5, 3);
530
- lineGeometry2.translate(0, 0.25, 0);
531
- function CircleGeometry(radius, arc) {
532
- const geometry = new three_1.TorusGeometry(radius, 0.0075, 3, 64, arc * Math.PI * 2);
533
- geometry.rotateY(Math.PI / 2);
534
- geometry.rotateX(Math.PI / 2);
535
- return geometry;
536
- }
537
- // Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position
538
- function TranslateHelperGeometry() {
539
- const geometry = new three_1.BufferGeometry();
540
- geometry.setAttribute('position', new three_1.Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3));
541
- return geometry;
542
- }
543
- // Gizmo definitions - custom hierarchy definitions for setupGizmo() function
544
- const gizmoTranslate = {
545
- X: [
546
- [new three_1.Mesh(arrowGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]],
547
- [new three_1.Mesh(arrowGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]],
548
- [new three_1.Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]]
549
- ],
550
- Y: [
551
- [new three_1.Mesh(arrowGeometry, matGreen), [0, 0.5, 0]],
552
- [new three_1.Mesh(arrowGeometry, matGreen), [0, -0.5, 0], [Math.PI, 0, 0]],
553
- [new three_1.Mesh(lineGeometry2, matGreen)]
554
- ],
555
- Z: [
556
- [new three_1.Mesh(arrowGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]],
557
- [new three_1.Mesh(arrowGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]],
558
- [new three_1.Mesh(lineGeometry2, matBlue), null, [Math.PI / 2, 0, 0]]
559
- ],
560
- XYZ: [
561
- [new three_1.Mesh(new three_1.OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0]]
562
- ],
563
- XY: [
564
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent.clone()), [0.15, 0.15, 0]]
565
- ],
566
- YZ: [
567
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matRedTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
568
- ],
569
- XZ: [
570
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent.clone()), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
571
- ]
572
- };
573
- const pickerTranslate = {
574
- X: [
575
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]],
576
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]]
577
- ],
578
- Y: [
579
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]],
580
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]]
581
- ],
582
- Z: [
583
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]],
584
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]
585
- ],
586
- XYZ: [
587
- [new three_1.Mesh(new three_1.OctahedronGeometry(0.2, 0), matInvisible)]
588
- ],
589
- XY: [
590
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]]
591
- ],
592
- YZ: [
593
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
594
- ],
595
- XZ: [
596
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
597
- ]
598
- };
599
- const helperTranslate = {
600
- START: [
601
- [new three_1.Mesh(new three_1.OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']
602
- ],
603
- END: [
604
- [new three_1.Mesh(new three_1.OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']
605
- ],
606
- DELTA: [
607
- [new three_1.Line(TranslateHelperGeometry(), matHelper), null, null, null, 'helper']
608
- ],
609
- X: [
610
- [new three_1.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']
611
- ],
612
- Y: [
613
- [new three_1.Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']
614
- ],
615
- Z: [
616
- [new three_1.Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']
617
- ]
618
- };
619
- const gizmoRotate = {
620
- XYZE: [
621
- [new three_1.Mesh(CircleGeometry(0.5, 1), matGray), null, [0, Math.PI / 2, 0]]
622
- ],
623
- X: [
624
- [new three_1.Mesh(CircleGeometry(0.5, 0.5), matRed)]
625
- ],
626
- Y: [
627
- [new three_1.Mesh(CircleGeometry(0.5, 0.5), matGreen), null, [0, 0, -Math.PI / 2]]
628
- ],
629
- Z: [
630
- [new three_1.Mesh(CircleGeometry(0.5, 0.5), matBlue), null, [0, Math.PI / 2, 0]]
631
- ],
632
- E: [
633
- [new three_1.Mesh(CircleGeometry(0.75, 1), matYellowTransparent), null, [0, Math.PI / 2, 0]]
634
- ]
635
- };
636
- const helperRotate = {
637
- AXIS: [
638
- [new three_1.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']
639
- ]
640
- };
641
- const pickerRotate = {
642
- XYZE: [
643
- [new three_1.Mesh(new three_1.SphereGeometry(0.25, 10, 8), matInvisible)]
644
- ],
645
- X: [
646
- [new three_1.Mesh(new three_1.TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]],
647
- ],
648
- Y: [
649
- [new three_1.Mesh(new three_1.TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]],
650
- ],
651
- Z: [
652
- [new three_1.Mesh(new three_1.TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]],
653
- ],
654
- E: [
655
- [new three_1.Mesh(new three_1.TorusGeometry(0.75, 0.1, 2, 24), matInvisible)]
656
- ]
657
- };
658
- const gizmoScale = {
659
- X: [
660
- [new three_1.Mesh(scaleHandleGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]],
661
- [new three_1.Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]],
662
- [new three_1.Mesh(scaleHandleGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]],
663
- ],
664
- Y: [
665
- [new three_1.Mesh(scaleHandleGeometry, matGreen), [0, 0.5, 0]],
666
- [new three_1.Mesh(lineGeometry2, matGreen)],
667
- [new three_1.Mesh(scaleHandleGeometry, matGreen), [0, -0.5, 0], [0, 0, Math.PI]],
668
- ],
669
- Z: [
670
- [new three_1.Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]],
671
- [new three_1.Mesh(lineGeometry2, matBlue), [0, 0, 0], [Math.PI / 2, 0, 0]],
672
- [new three_1.Mesh(scaleHandleGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]]
673
- ],
674
- XY: [
675
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent), [0.15, 0.15, 0]]
676
- ],
677
- YZ: [
678
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matRedTransparent), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
679
- ],
680
- XZ: [
681
- [new three_1.Mesh(new three_1.BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
682
- ],
683
- XYZ: [
684
- [new three_1.Mesh(new three_1.BoxGeometry(0.1, 0.1, 0.1), matWhiteTransparent.clone())],
685
- ]
686
- };
687
- const pickerScale = {
688
- X: [
689
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]],
690
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]]
691
- ],
692
- Y: [
693
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]],
694
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]]
695
- ],
696
- Z: [
697
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]],
698
- [new three_1.Mesh(new three_1.CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]
699
- ],
700
- XY: [
701
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]],
702
- ],
703
- YZ: [
704
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],
705
- ],
706
- XZ: [
707
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]],
708
- ],
709
- XYZ: [
710
- [new three_1.Mesh(new three_1.BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 0]],
711
- ]
712
- };
713
- const helperScale = {
714
- X: [
715
- [new three_1.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']
716
- ],
717
- Y: [
718
- [new three_1.Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']
719
- ],
720
- Z: [
721
- [new three_1.Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']
722
- ]
723
- };
724
- // Creates an Object3D with gizmos described in custom hierarchy definition.
725
- function setupGizmo(gizmoMap) {
726
- const gizmo = new three_1.Object3D();
727
- for (const name in gizmoMap) {
728
- for (let i = gizmoMap[name].length; i--;) {
729
- const object = gizmoMap[name][i][0].clone();
730
- const position = gizmoMap[name][i][1];
731
- const rotation = gizmoMap[name][i][2];
732
- const scale = gizmoMap[name][i][3];
733
- const tag = gizmoMap[name][i][4];
734
- // name and tag properties are essential for picking and updating logic.
735
- object.name = name;
736
- object.tag = tag;
737
- if (position) {
738
- object.position.set(position[0], position[1], position[2]);
739
- }
740
- if (rotation) {
741
- object.rotation.set(rotation[0], rotation[1], rotation[2]);
742
- }
743
- if (scale) {
744
- object.scale.set(scale[0], scale[1], scale[2]);
745
- }
746
- object.updateMatrix();
747
- const tempGeometry = object.geometry.clone();
748
- tempGeometry.applyMatrix4(object.matrix);
749
- object.geometry = tempGeometry;
750
- object.renderOrder = Infinity;
751
- object.position.set(0, 0, 0);
752
- object.rotation.set(0, 0, 0);
753
- object.scale.set(1, 1, 1);
754
- gizmo.add(object);
755
- }
756
- }
757
- return gizmo;
758
- }
759
- // Gizmo creation
760
- this.gizmo = {};
761
- this.picker = {};
762
- this.helper = {};
763
- this.add(this.gizmo['translate'] = setupGizmo(gizmoTranslate));
764
- this.add(this.gizmo['rotate'] = setupGizmo(gizmoRotate));
765
- this.add(this.gizmo['scale'] = setupGizmo(gizmoScale));
766
- this.add(this.picker['translate'] = setupGizmo(pickerTranslate));
767
- this.add(this.picker['rotate'] = setupGizmo(pickerRotate));
768
- this.add(this.picker['scale'] = setupGizmo(pickerScale));
769
- this.add(this.helper['translate'] = setupGizmo(helperTranslate));
770
- this.add(this.helper['rotate'] = setupGizmo(helperRotate));
771
- this.add(this.helper['scale'] = setupGizmo(helperScale));
772
- // Pickers should be hidden always
773
- this.picker['translate'].visible = false;
774
- this.picker['rotate'].visible = false;
775
- this.picker['scale'].visible = false;
776
- }
777
- // updateMatrixWorld will update transformations and appearance of individual handles
778
- updateMatrixWorld(force) {
779
- const space = (this.mode === 'scale') ? 'local' : this.space; // scale always oriented to local rotation
780
- const quaternion = (space === 'local') ? this.worldQuaternion : _identityQuaternion;
781
- // Show only gizmos for current transform mode
782
- this.gizmo['translate'].visible = this.mode === 'translate';
783
- this.gizmo['rotate'].visible = this.mode === 'rotate';
784
- this.gizmo['scale'].visible = this.mode === 'scale';
785
- this.helper['translate'].visible = this.mode === 'translate';
786
- this.helper['rotate'].visible = this.mode === 'rotate';
787
- this.helper['scale'].visible = this.mode === 'scale';
788
- let handles = [];
789
- handles = handles.concat(this.picker[this.mode].children);
790
- handles = handles.concat(this.gizmo[this.mode].children);
791
- handles = handles.concat(this.helper[this.mode].children);
792
- for (let i = 0; i < handles.length; i++) {
793
- const handle = handles[i];
794
- // hide aligned to camera
795
- handle.visible = true;
796
- handle.rotation.set(0, 0, 0);
797
- handle.position.copy(this.worldPosition);
798
- let factor;
799
- if (this.camera.isOrthographicCamera) {
800
- factor = (this.camera.top - this.camera.bottom) / this.camera.zoom;
801
- }
802
- else {
803
- factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7);
804
- }
805
- handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 4);
806
- // TODO: simplify helpers and consider decoupling from gizmo
807
- if (handle.tag === 'helper') {
808
- handle.visible = false;
809
- if (handle.name === 'AXIS') {
810
- handle.visible = !!this.axis;
811
- if (this.axis === 'X') {
812
- _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, 0));
813
- handle.quaternion.copy(quaternion).multiply(_tempQuaternion);
814
- if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
815
- handle.visible = false;
816
- }
817
- }
818
- if (this.axis === 'Y') {
819
- _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, Math.PI / 2));
820
- handle.quaternion.copy(quaternion).multiply(_tempQuaternion);
821
- if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
822
- handle.visible = false;
823
- }
824
- }
825
- if (this.axis === 'Z') {
826
- _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0));
827
- handle.quaternion.copy(quaternion).multiply(_tempQuaternion);
828
- if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
829
- handle.visible = false;
830
- }
831
- }
832
- if (this.axis === 'XYZE') {
833
- _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0));
834
- _alignVector.copy(this.rotationAxis);
835
- handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(_zeroVector, _alignVector, _unitY));
836
- handle.quaternion.multiply(_tempQuaternion);
837
- handle.visible = this.dragging;
838
- }
839
- if (this.axis === 'E') {
840
- handle.visible = false;
841
- }
842
- }
843
- else if (handle.name === 'START') {
844
- handle.position.copy(this.worldPositionStart);
845
- handle.visible = this.dragging;
846
- }
847
- else if (handle.name === 'END') {
848
- handle.position.copy(this.worldPosition);
849
- handle.visible = this.dragging;
850
- }
851
- else if (handle.name === 'DELTA') {
852
- handle.position.copy(this.worldPositionStart);
853
- handle.quaternion.copy(this.worldQuaternionStart);
854
- _tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1);
855
- _tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert());
856
- handle.scale.copy(_tempVector);
857
- handle.visible = this.dragging;
858
- }
859
- else {
860
- handle.quaternion.copy(quaternion);
861
- if (this.dragging) {
862
- handle.position.copy(this.worldPositionStart);
863
- }
864
- else {
865
- handle.position.copy(this.worldPosition);
866
- }
867
- if (this.axis) {
868
- handle.visible = this.axis.search(handle.name) !== -1;
869
- }
870
- }
871
- // If updating helper, skip rest of the loop
872
- continue;
873
- }
874
- // Align handles to current local or world rotation
875
- handle.quaternion.copy(quaternion);
876
- if (this.mode === 'translate' || this.mode === 'scale') {
877
- // Hide translate and scale axis facing the camera
878
- const AXIS_HIDE_THRESHOLD = 0.99;
879
- const PLANE_HIDE_THRESHOLD = 0.2;
880
- if (handle.name === 'X') {
881
- if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) {
882
- handle.scale.set(1e-10, 1e-10, 1e-10);
883
- handle.visible = false;
884
- }
885
- }
886
- if (handle.name === 'Y') {
887
- if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) {
888
- handle.scale.set(1e-10, 1e-10, 1e-10);
889
- handle.visible = false;
890
- }
891
- }
892
- if (handle.name === 'Z') {
893
- if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) {
894
- handle.scale.set(1e-10, 1e-10, 1e-10);
895
- handle.visible = false;
896
- }
897
- }
898
- if (handle.name === 'XY') {
899
- if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) {
900
- handle.scale.set(1e-10, 1e-10, 1e-10);
901
- handle.visible = false;
902
- }
903
- }
904
- if (handle.name === 'YZ') {
905
- if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) {
906
- handle.scale.set(1e-10, 1e-10, 1e-10);
907
- handle.visible = false;
908
- }
909
- }
910
- if (handle.name === 'XZ') {
911
- if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) {
912
- handle.scale.set(1e-10, 1e-10, 1e-10);
913
- handle.visible = false;
914
- }
915
- }
916
- }
917
- else if (this.mode === 'rotate') {
918
- // Align handles to current local or world rotation
919
- _tempQuaternion2.copy(quaternion);
920
- _alignVector.copy(this.eye).applyQuaternion(_tempQuaternion.copy(quaternion).invert());
921
- if (handle.name.search('E') !== -1) {
922
- handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(this.eye, _zeroVector, _unitY));
923
- }
924
- if (handle.name === 'X') {
925
- _tempQuaternion.setFromAxisAngle(_unitX, Math.atan2(-_alignVector.y, _alignVector.z));
926
- _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion);
927
- handle.quaternion.copy(_tempQuaternion);
928
- }
929
- if (handle.name === 'Y') {
930
- _tempQuaternion.setFromAxisAngle(_unitY, Math.atan2(_alignVector.x, _alignVector.z));
931
- _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion);
932
- handle.quaternion.copy(_tempQuaternion);
933
- }
934
- if (handle.name === 'Z') {
935
- _tempQuaternion.setFromAxisAngle(_unitZ, Math.atan2(_alignVector.y, _alignVector.x));
936
- _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion);
937
- handle.quaternion.copy(_tempQuaternion);
938
- }
939
- }
940
- // Hide disabled axes
941
- handle.visible = handle.visible && (handle.name.indexOf('X') === -1 || this.showX);
942
- handle.visible = handle.visible && (handle.name.indexOf('Y') === -1 || this.showY);
943
- handle.visible = handle.visible && (handle.name.indexOf('Z') === -1 || this.showZ);
944
- handle.visible = handle.visible && (handle.name.indexOf('E') === -1 || (this.showX && this.showY && this.showZ));
945
- // highlight selected axis
946
- handle.material._color = handle.material._color || handle.material.color.clone();
947
- handle.material._opacity = handle.material._opacity || handle.material.opacity;
948
- handle.material.color.copy(handle.material._color);
949
- handle.material.opacity = handle.material._opacity;
950
- if (this.enabled && this.axis) {
951
- if (handle.name === this.axis) {
952
- handle.material.color.setHex(0xffff00);
953
- handle.material.opacity = 1.0;
954
- }
955
- else if (this.axis.split('').some(function (a) {
956
- return handle.name === a;
957
- })) {
958
- handle.material.color.setHex(0xffff00);
959
- handle.material.opacity = 1.0;
960
- }
961
- }
962
- }
963
- super.updateMatrixWorld(force);
964
- }
965
- }
966
- exports.TransformControlsGizmo = TransformControlsGizmo;
967
- //
968
- class TransformControlsPlane extends three_1.Mesh {
969
- constructor() {
970
- super(new three_1.PlaneGeometry(100000, 100000, 2, 2), new three_1.MeshBasicMaterial({ visible: false, wireframe: true, side: three_1.DoubleSide, transparent: true, opacity: 0.1, toneMapped: false }));
971
- this.isTransformControlsPlane = true;
972
- this.type = 'TransformControlsPlane';
973
- }
974
- updateMatrixWorld(force) {
975
- let space = this.space;
976
- this.position.copy(this.worldPosition);
977
- if (this.mode === 'scale')
978
- space = 'local'; // scale always oriented to local rotation
979
- _v1.copy(_unitX).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion);
980
- _v2.copy(_unitY).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion);
981
- _v3.copy(_unitZ).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion);
982
- // Align the plane for current transform mode, axis and space.
983
- _alignVector.copy(_v2);
984
- switch (this.mode) {
985
- case 'translate':
986
- case 'scale':
987
- switch (this.axis) {
988
- case 'X':
989
- _alignVector.copy(this.eye).cross(_v1);
990
- _dirVector.copy(_v1).cross(_alignVector);
991
- break;
992
- case 'Y':
993
- _alignVector.copy(this.eye).cross(_v2);
994
- _dirVector.copy(_v2).cross(_alignVector);
995
- break;
996
- case 'Z':
997
- _alignVector.copy(this.eye).cross(_v3);
998
- _dirVector.copy(_v3).cross(_alignVector);
999
- break;
1000
- case 'XY':
1001
- _dirVector.copy(_v3);
1002
- break;
1003
- case 'YZ':
1004
- _dirVector.copy(_v1);
1005
- break;
1006
- case 'XZ':
1007
- _alignVector.copy(_v3);
1008
- _dirVector.copy(_v2);
1009
- break;
1010
- case 'XYZ':
1011
- case 'E':
1012
- _dirVector.set(0, 0, 0);
1013
- break;
1014
- }
1015
- break;
1016
- case 'rotate':
1017
- default:
1018
- // special case for rotate
1019
- _dirVector.set(0, 0, 0);
1020
- }
1021
- if (_dirVector.length() === 0) {
1022
- // If in rotate mode, make the plane parallel to camera
1023
- this.quaternion.copy(this.cameraQuaternion);
1024
- }
1025
- else {
1026
- _tempMatrix.lookAt(_tempVector.set(0, 0, 0), _dirVector, _alignVector);
1027
- this.quaternion.setFromRotationMatrix(_tempMatrix);
1028
- }
1029
- super.updateMatrixWorld(force);
1030
- }
1031
- }
1032
- exports.TransformControlsPlane = TransformControlsPlane;
1033
- //# sourceMappingURL=transform-control.js.map