immersive2/src/defaultScene.ts
Michael Mainguy 1ab3deae92 Add face handles and transform tracking to ResizeGizmo
- Add 6 face handles for single-axis scaling (in addition to 8 corner handles for uniform scaling)
- Implement single-axis scaling for face handles vs uniform scaling for corners
- Add automatic handle position updates when target mesh moves or rotates
- Track mesh transform changes using quaternions for accurate rotation detection
- Update handles in real-time during scaling to match new bounding box
- Add FACE_POSITIONS constant array to enums.ts
- Fix handle sizing to use consistent size calculation for all handles

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 17:06:32 -06:00

44 lines
1.4 KiB
TypeScript

import {Engine, Scene} from "@babylonjs/core";
import log from "loglevel";
export class DefaultScene {
private static _Scene: Scene;
private static _UtilityScene: Scene;
public static get UtilityScene(): Scene {
return this._UtilityScene;
}
public static get Scene(): Scene {
if (!DefaultScene._Scene) {
const logger = log.getLogger('DefaultScene');
logger.error('default scene not yet created');
if (Engine.LastCreatedScene) {
logger.warn('using last created scene, this may not be what you want, proceed with caution');
DefaultScene._Scene = Engine.LastCreatedScene;
return DefaultScene._Scene;
} else {
return null;
}
} else {
return DefaultScene._Scene;
}
}
public static set Scene(scene: Scene) {
const logger = log.getLogger('DefaultScene');
if (DefaultScene._Scene) {
logger.error('default scene already created, disposing and recreating');
if (DefaultScene._Scene.isDisposed) {
logger.warn('default scene is already disposed');
} else {
DefaultScene._Scene.dispose();
logger.info('default scene disposed');
}
DefaultScene._Scene = null;
}
DefaultScene._Scene = scene;
logger.info('default scene created');
}
}