Major improvements to ResizeGizmo rotation handling and interface: 1. **OBB (Oriented Bounding Box) Implementation** - Replace AABB with true OBB that rotates with mesh - Calculate 8 OBB corners in world space using mesh world matrix - Update bounding box wireframe to use OBB corners - Rewrite all handle generation (corner, edge, face) for OBB positioning - Handle normals now calculated from mesh center to handle position - Result: Bounding box and handles rotate with mesh, scaling follows local axes 2. **Simplify UX - Remove Edge Handles** - Remove TWO_AXIS mode from ResizeGizmoMode enum - Disable edge handles (green, two-axis) to reduce cognitive complexity - Keep only corner handles (blue, uniform) and face handles (red, single-axis) - Updated from 26 total handles to 14 handles (6 face + 8 corner) - All scaling capabilities still available through remaining handle types 3. **Fix Event Leak-Through (Hit Testing)** - Add getUtilityScene() method to ResizeGizmoManager - Configure XR pick predicate to exclude utility layer meshes (primary defense) - Filter utility layer in pointer observable (secondary defense) - Filter utility layer in click handler (tertiary defense) - Prevents gizmo handle events from leaking to main scene 4. **Documentation** - Add TODO.md documenting implementation and decisions - Document OBB implementation and edge handle removal - Track completed features and rationale Files modified: - ResizeGizmoVisuals.ts: OBB wireframe and corner calculation - HandleGeometry.ts: OBB-based handle positioning for all types - ResizeGizmoConfig.ts: Disable edge handles - ResizeGizmoManager.ts: Add utility scene access - ScalingCalculator.ts: Uniform two-axis scaling (distance-ratio) - types.ts: Remove TWO_AXIS mode - diagramMenuManager.ts: XR pick predicate filtering - abstractController.ts: Pointer and click filtering - TODO.md: Documentation of changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| api | ||
| docs | ||
| functions | ||
| netlify/functions | ||
| pages | ||
| public | ||
| server | ||
| src | ||
| .gitignore | ||
| CLAUDE.md | ||
| index.html | ||
| LICENSE.txt | ||
| package-lock.json | ||
| package.json | ||
| server.js | ||
| tsconfig.json | ||
| versionBump.js | ||
| vite.config.ts | ||