@2112-lab/central-plant 0.1.4 → 0.1.6
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/bundle/index.js +33146 -1
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
- package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
- package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
- package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
- package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
- package/dist/cjs/src/analysis/analysis.js +560 -1
- package/dist/cjs/src/analysis/testing.js +958 -1
- package/dist/cjs/src/core/centralPlant.js +1149 -1
- package/dist/cjs/src/core/debugLogger.js +175 -1
- package/dist/cjs/src/core/mathUtils.js +574 -1
- package/dist/cjs/src/core/nameUtils.js +93 -1
- package/dist/cjs/src/data/export.js +716 -1
- package/dist/cjs/src/data/import.js +380 -1
- package/dist/cjs/src/data/numerics.js +522 -1
- package/dist/cjs/src/helpers/sceneHelper.js +572 -1
- package/dist/cjs/src/index.js +69 -1
- package/dist/cjs/src/managers/components/animationManager.js +123 -1
- package/dist/cjs/src/managers/components/componentManager.js +332 -1
- package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
- package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
- package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
- package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
- package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
- package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
- package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
- package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
- package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
- package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
- package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
- package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
- package/dist/cjs/src/managers/system/disposalManager.js +444 -1
- package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
- package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
- package/dist/cjs/src/rendering/modelPreloader.js +369 -1
- package/dist/cjs/src/rendering/rendering2D.js +631 -1
- package/dist/cjs/src/rendering/rendering3D.js +685 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
- package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
- package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
- package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
- package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
- package/dist/esm/src/analysis/analysis.js +536 -1
- package/dist/esm/src/analysis/testing.js +954 -1
- package/dist/esm/src/core/centralPlant.js +1144 -1
- package/dist/esm/src/core/debugLogger.js +167 -1
- package/dist/esm/src/core/mathUtils.js +570 -1
- package/dist/esm/src/core/nameUtils.js +87 -1
- package/dist/esm/src/data/export.js +712 -1
- package/dist/esm/src/data/import.js +356 -1
- package/dist/esm/src/data/numerics.js +518 -1
- package/dist/esm/src/helpers/sceneHelper.js +547 -1
- package/dist/esm/src/index.js +35 -1
- package/dist/esm/src/managers/components/animationManager.js +119 -1
- package/dist/esm/src/managers/components/componentManager.js +328 -1
- package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
- package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
- package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
- package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
- package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
- package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
- package/dist/esm/src/managers/environment/environmentManager.js +690 -1
- package/dist/esm/src/managers/environment/textureConfig.js +202 -1
- package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
- package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
- package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
- package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
- package/dist/esm/src/managers/system/disposalManager.js +440 -1
- package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
- package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
- package/dist/esm/src/rendering/modelPreloader.js +364 -1
- package/dist/esm/src/rendering/rendering2D.js +627 -1
- package/dist/esm/src/rendering/rendering3D.js +661 -1
- package/package.json +1 -1
|
@@ -1 +1,371 @@
|
|
|
1
|
-
import{createClass as
|
|
1
|
+
import { createClass as _createClass, classCallCheck as _classCallCheck } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { logger } from '../../core/debugLogger.js';
|
|
4
|
+
|
|
5
|
+
var KeyboardControlsManager = /*#__PURE__*/function () {
|
|
6
|
+
function KeyboardControlsManager(sceneViewer) {
|
|
7
|
+
_classCallCheck(this, KeyboardControlsManager);
|
|
8
|
+
this.sceneViewer = sceneViewer;
|
|
9
|
+
this.handleKeyDown = null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Setup keyboard event handlers
|
|
14
|
+
*/
|
|
15
|
+
return _createClass(KeyboardControlsManager, [{
|
|
16
|
+
key: "setupKeyboardControls",
|
|
17
|
+
value: function setupKeyboardControls() {
|
|
18
|
+
var _this = this;
|
|
19
|
+
this.handleKeyDown = function (event) {
|
|
20
|
+
// Handle Ctrl+Z for undo with high priority
|
|
21
|
+
if (event.ctrlKey && (event.key.toLowerCase() === 'z' || event.code === 'KeyZ')) {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
_this.undoTransform();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Handle Alt+R for toggling auto-repathing
|
|
29
|
+
if (event.altKey && (event.key.toLowerCase() === 'r' || event.code === 'KeyR')) {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
event.stopPropagation();
|
|
32
|
+
_this.toggleShouldUpdatePaths();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
switch (event.key.toLowerCase()) {
|
|
36
|
+
case 'p':
|
|
37
|
+
_this.togglePerformanceUI();
|
|
38
|
+
break;
|
|
39
|
+
case 'l':
|
|
40
|
+
_this.logPerformanceSummary();
|
|
41
|
+
break;
|
|
42
|
+
case 'r':
|
|
43
|
+
_this.resetPerformanceStats();
|
|
44
|
+
break;
|
|
45
|
+
case 'a':
|
|
46
|
+
_this.toggleAutoRotation();
|
|
47
|
+
break;
|
|
48
|
+
case 'e':
|
|
49
|
+
_this.cycleToneMapping();
|
|
50
|
+
break;
|
|
51
|
+
case '=':
|
|
52
|
+
case '+':
|
|
53
|
+
_this.increaseExposure();
|
|
54
|
+
break;
|
|
55
|
+
case '-':
|
|
56
|
+
_this.decreaseExposure();
|
|
57
|
+
break;
|
|
58
|
+
case 'h':
|
|
59
|
+
_this.showHelpInfo();
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Add with capture phase for higher priority
|
|
65
|
+
window.addEventListener('keydown', this.handleKeyDown, true);
|
|
66
|
+
window._performanceKeyHandler = this.handleKeyDown;
|
|
67
|
+
|
|
68
|
+
// Override transform controls keyboard handling
|
|
69
|
+
this.overrideTransformControlsKeyboard();
|
|
70
|
+
logger.info('Keyboard controls initialized with Ctrl+Z undo override');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Toggle performance UI visibility
|
|
75
|
+
*/
|
|
76
|
+
}, {
|
|
77
|
+
key: "togglePerformanceUI",
|
|
78
|
+
value: function togglePerformanceUI() {
|
|
79
|
+
var component = this.sceneViewer;
|
|
80
|
+
if (component.performanceUI) {
|
|
81
|
+
if (component.performanceUI.isVisible) {
|
|
82
|
+
component.performanceUI.hide();
|
|
83
|
+
console.log('📊 Performance UI hidden');
|
|
84
|
+
} else {
|
|
85
|
+
component.performanceUI.show();
|
|
86
|
+
console.log('📊 Performance UI shown');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Log performance summary to console
|
|
93
|
+
*/
|
|
94
|
+
}, {
|
|
95
|
+
key: "logPerformanceSummary",
|
|
96
|
+
value: function logPerformanceSummary() {
|
|
97
|
+
var component = this.sceneViewer;
|
|
98
|
+
if (component.performanceMonitor) {
|
|
99
|
+
component.performanceMonitor.logSummary();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Reset performance statistics
|
|
105
|
+
*/
|
|
106
|
+
}, {
|
|
107
|
+
key: "resetPerformanceStats",
|
|
108
|
+
value: function resetPerformanceStats() {
|
|
109
|
+
var component = this.sceneViewer;
|
|
110
|
+
if (component.performanceMonitor) {
|
|
111
|
+
component.performanceMonitor.reset();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Cycle through different tone mapping types
|
|
117
|
+
*/
|
|
118
|
+
}, {
|
|
119
|
+
key: "cycleToneMapping",
|
|
120
|
+
value: function cycleToneMapping() {
|
|
121
|
+
var component = this.sceneViewer;
|
|
122
|
+
if (!component.renderer) {
|
|
123
|
+
console.warn('⚠️ Renderer not initialized yet');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
var toneMappings = [{
|
|
127
|
+
type: THREE.NoToneMapping,
|
|
128
|
+
name: 'None'
|
|
129
|
+
}, {
|
|
130
|
+
type: THREE.LinearToneMapping,
|
|
131
|
+
name: 'Linear'
|
|
132
|
+
}, {
|
|
133
|
+
type: THREE.ReinhardToneMapping,
|
|
134
|
+
name: 'Reinhard'
|
|
135
|
+
}, {
|
|
136
|
+
type: THREE.CineonToneMapping,
|
|
137
|
+
name: 'Cineon'
|
|
138
|
+
}, {
|
|
139
|
+
type: THREE.ACESFilmicToneMapping,
|
|
140
|
+
name: 'ACES Filmic'
|
|
141
|
+
}];
|
|
142
|
+
var currentIndex = toneMappings.findIndex(function (tm) {
|
|
143
|
+
return tm.type === component.renderer.toneMapping;
|
|
144
|
+
});
|
|
145
|
+
var nextIndex = (currentIndex + 1) % toneMappings.length;
|
|
146
|
+
var previousMapping = toneMappings[currentIndex] || {
|
|
147
|
+
name: 'Unknown'
|
|
148
|
+
};
|
|
149
|
+
var newMapping = toneMappings[nextIndex];
|
|
150
|
+
component.renderer.toneMapping = newMapping.type;
|
|
151
|
+
console.group('🎨 Tone Mapping Changed');
|
|
152
|
+
console.log("Previous: ".concat(previousMapping.name));
|
|
153
|
+
console.log("Current: ".concat(newMapping.name));
|
|
154
|
+
console.log("Exposure: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
|
|
155
|
+
console.groupEnd();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Increase renderer exposure
|
|
160
|
+
*/
|
|
161
|
+
}, {
|
|
162
|
+
key: "increaseExposure",
|
|
163
|
+
value: function increaseExposure() {
|
|
164
|
+
var component = this.sceneViewer;
|
|
165
|
+
if (component.renderer) {
|
|
166
|
+
component.renderer.toneMappingExposure = Math.min(component.renderer.toneMappingExposure + 0.1, 3.0);
|
|
167
|
+
console.log("\u2600\uFE0F Exposure increased to: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Decrease renderer exposure
|
|
173
|
+
*/
|
|
174
|
+
}, {
|
|
175
|
+
key: "decreaseExposure",
|
|
176
|
+
value: function decreaseExposure() {
|
|
177
|
+
var component = this.sceneViewer;
|
|
178
|
+
if (component.renderer) {
|
|
179
|
+
component.renderer.toneMappingExposure = Math.max(component.renderer.toneMappingExposure - 0.1, 0.1);
|
|
180
|
+
console.log("\uD83C\uDF19 Exposure decreased to: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Show help information for keyboard controls
|
|
186
|
+
*/
|
|
187
|
+
}, {
|
|
188
|
+
key: "showHelpInfo",
|
|
189
|
+
value: function showHelpInfo() {
|
|
190
|
+
console.group('🎮 3D Scene Controls');
|
|
191
|
+
console.log('↩️ Ctrl+Z - Undo last transform');
|
|
192
|
+
console.log('🔄 Alt+R - Toggle auto-repathing after transforms');
|
|
193
|
+
console.log('📊 P - Toggle performance UI');
|
|
194
|
+
console.log('📝 L - Log performance summary');
|
|
195
|
+
console.log('🔄 R - Reset performance statistics');
|
|
196
|
+
console.log('🔄 A - Toggle auto-rotation');
|
|
197
|
+
console.log('🎨 E - Cycle tone mapping types');
|
|
198
|
+
console.log('☀️ + / = - Increase exposure');
|
|
199
|
+
console.log('🌙 - - Decrease exposure');
|
|
200
|
+
console.log('❓ H - Show this help');
|
|
201
|
+
console.groupEnd();
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Toggle shouldRepath setting in the scene viewer
|
|
205
|
+
*/
|
|
206
|
+
}, {
|
|
207
|
+
key: "toggleShouldUpdatePaths",
|
|
208
|
+
value: function toggleShouldUpdatePaths() {
|
|
209
|
+
var component = this.sceneViewer;
|
|
210
|
+
if (component && typeof component.toggleShouldUpdatePaths === 'function') {
|
|
211
|
+
component.toggleShouldUpdatePaths();
|
|
212
|
+
} else {
|
|
213
|
+
console.warn('⚠️ toggleShouldUpdatePaths method not available on scene viewer');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Toggle auto-rotation of the camera
|
|
219
|
+
*/
|
|
220
|
+
}, {
|
|
221
|
+
key: "toggleAutoRotation",
|
|
222
|
+
value: function toggleAutoRotation() {
|
|
223
|
+
var component = this.sceneViewer;
|
|
224
|
+
if (component.sceneInitializationManager) {
|
|
225
|
+
var isEnabled = component.sceneInitializationManager.toggleAutoRotation();
|
|
226
|
+
console.log("\uD83D\uDD04 Auto-rotation ".concat(isEnabled ? 'enabled' : 'disabled'));
|
|
227
|
+
|
|
228
|
+
// Update the component's isAutoRotating state for UI sync
|
|
229
|
+
if (component.isAutoRotating !== undefined) {
|
|
230
|
+
component.isAutoRotating = isEnabled;
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
console.warn('⚠️ Scene initialization manager not available, cannot toggle auto-rotation');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Setup resize handler for responsive design
|
|
239
|
+
*/
|
|
240
|
+
}, {
|
|
241
|
+
key: "setupResizeHandler",
|
|
242
|
+
value: function setupResizeHandler() {
|
|
243
|
+
var component = this.sceneViewer;
|
|
244
|
+
component.handleResize = function () {
|
|
245
|
+
if (!component.$refs.container || !component.camera || !component.renderer) return;
|
|
246
|
+
var containerRect = component.$refs.container.getBoundingClientRect();
|
|
247
|
+
var containerWidth = containerRect.width;
|
|
248
|
+
var containerHeight = containerRect.height;
|
|
249
|
+
component.camera.aspect = containerWidth / containerHeight;
|
|
250
|
+
component.camera.updateProjectionMatrix();
|
|
251
|
+
component.renderer.setSize(containerWidth, containerHeight);
|
|
252
|
+
if (component.composer) {
|
|
253
|
+
component.composer.setSize(containerWidth, containerHeight);
|
|
254
|
+
if (component.ssaoPass) {
|
|
255
|
+
component.ssaoPass.setSize(containerWidth, containerHeight);
|
|
256
|
+
}
|
|
257
|
+
if (component.bloomPass) {
|
|
258
|
+
component.bloomPass.resolution.set(containerWidth, containerHeight);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Update tooltip renderer if it exists
|
|
263
|
+
if (component.tooltipsManager) {
|
|
264
|
+
component.tooltipsManager.resize();
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// Set up ResizeObserver for better container size tracking
|
|
269
|
+
component.resizeObserver = new ResizeObserver(component.handleResize);
|
|
270
|
+
component.resizeObserver.observe(component.$refs.container);
|
|
271
|
+
|
|
272
|
+
// Also listen for window resize as fallback
|
|
273
|
+
window.addEventListener('resize', component.handleResize);
|
|
274
|
+
logger.info('Resize handler initialized');
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Cleanup event listeners
|
|
279
|
+
*/
|
|
280
|
+
}, {
|
|
281
|
+
key: "cleanup",
|
|
282
|
+
value: function cleanup() {
|
|
283
|
+
if (this.handleKeyDown) {
|
|
284
|
+
window.removeEventListener('keydown', this.handleKeyDown, true);
|
|
285
|
+
this.handleKeyDown = null;
|
|
286
|
+
}
|
|
287
|
+
if (window._performanceKeyHandler) {
|
|
288
|
+
window.removeEventListener('keydown', window._performanceKeyHandler, true);
|
|
289
|
+
delete window._performanceKeyHandler;
|
|
290
|
+
}
|
|
291
|
+
var component = this.sceneViewer;
|
|
292
|
+
if (component.handleResize) {
|
|
293
|
+
window.removeEventListener('resize', component.handleResize);
|
|
294
|
+
component.handleResize = null;
|
|
295
|
+
}
|
|
296
|
+
if (component.resizeObserver) {
|
|
297
|
+
component.resizeObserver.disconnect();
|
|
298
|
+
component.resizeObserver = null;
|
|
299
|
+
}
|
|
300
|
+
logger.info('Keyboard controls cleanup completed');
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Undo the last transform operation
|
|
305
|
+
*/
|
|
306
|
+
}, {
|
|
307
|
+
key: "undoTransform",
|
|
308
|
+
value: function undoTransform() {
|
|
309
|
+
var component = this.sceneViewer;
|
|
310
|
+
|
|
311
|
+
// Check if CentralPlant instance exists and has the undoTransform method
|
|
312
|
+
if (!component.centralPlant) {
|
|
313
|
+
console.warn('⚠️ CentralPlant instance not available for undo operation');
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (typeof component.centralPlant.undoTransform !== 'function') {
|
|
317
|
+
console.warn('⚠️ undoTransform method not available on CentralPlant instance');
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
var success = component.centralPlant.undoTransform();
|
|
321
|
+
if (success) {
|
|
322
|
+
console.log('✅ Transform undone via keyboard shortcut (Ctrl+Z)');
|
|
323
|
+
|
|
324
|
+
// If there's a scene helper, trigger a render update
|
|
325
|
+
if (component.sceneHelper && typeof component.sceneHelper.requestRender === 'function') {
|
|
326
|
+
component.sceneHelper.requestRender();
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// If there's a renderer, trigger a render
|
|
330
|
+
if (component.renderer) {
|
|
331
|
+
component.renderer.render(component.scene, component.camera);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Update any UI elements that might be affected
|
|
335
|
+
if (component.updateComponentPositions && typeof component.updateComponentPositions === 'function') {
|
|
336
|
+
component.updateComponentPositions();
|
|
337
|
+
}
|
|
338
|
+
} else {
|
|
339
|
+
console.log('⚠️ No transform to undo');
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Override transform controls keyboard handling to ensure Ctrl+Z undo works
|
|
345
|
+
*/
|
|
346
|
+
}, {
|
|
347
|
+
key: "overrideTransformControlsKeyboard",
|
|
348
|
+
value: function overrideTransformControlsKeyboard() {
|
|
349
|
+
var component = this.sceneViewer;
|
|
350
|
+
|
|
351
|
+
// If transform controls manager exists, ensure it doesn't interfere with Ctrl+Z
|
|
352
|
+
if (component.transformManager && component.transformManager.eventHandlers && component.transformManager.eventHandlers.keydown) {
|
|
353
|
+
var originalHandler = component.transformManager.eventHandlers.keydown;
|
|
354
|
+
|
|
355
|
+
// Create a new handler that checks for Ctrl+Z first
|
|
356
|
+
component.transformManager.eventHandlers.keydown = function (event) {
|
|
357
|
+
// If it's Ctrl+Z, don't handle it in transform controls
|
|
358
|
+
if (event.ctrlKey && (event.key.toLowerCase() === 'z' || event.code === 'KeyZ')) {
|
|
359
|
+
return; // Let our undo handler take care of it
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Otherwise, use the original handler
|
|
363
|
+
originalHandler(event);
|
|
364
|
+
};
|
|
365
|
+
console.log('✅ Transform controls keyboard handling overridden for Ctrl+Z');
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}]);
|
|
369
|
+
}();
|
|
370
|
+
|
|
371
|
+
export { KeyboardControlsManager };
|