- Added a language dropdown selector to replace the previous button-based language toggle.
- Integrated boundary falloff settings into the preview material, allowing for smoother transitions between masked and unmasked areas.
- Updated shaders to utilize boundary falloff attributes for improved visual fidelity in bump-only previews.
- Refactored related CSS styles for the new dropdown and adjusted layout for better usability.
- Introduced new functions for computing boundary attributes and managing edge data textures.
Round 2 of performance and correctness improvements:
- Spatial grid index for brush painting: forEachTriInSphere now queries
only nearby grid cells instead of scanning all triangles. ~5.7x faster
for brush operations on 68k+ tri meshes.
- Decimation overflow fix: hasLinkViolation used a fixed 0x200000
multiplier for vertex-pair keys, overflowing at >2M vertices.
Now uses dynamic multiplier based on actual vertex count.
- Decimation determinant threshold: solveQ used absolute 1e-10 which
fails for large coordinates. Now relative to matrix element magnitude.
- 3MF triangle index validation: bounds-check all parsed indices against
vertex count, throw clear error on corrupt files instead of silent NaN.
- File size limit: reject files >500 MB before loading into memory,
prevents browser tab crash on oversized files.
- Accessibility: preset swatches now keyboard-navigable (role=button,
tabindex=0, Enter/Space to select). Modal dialogs trap focus and
close on Escape.
- Ctrl+click straight line tool: click to set start point, Ctrl+click
to paint a straight line between points. Ctrl+hover shows preview.
- Precision masking available for radius brush mode.
- Spatial grid rebuilt when entering/leaving precision mode.
- Renamed "Surface Mask" section to "Mask Angles" for clarity in index.html.
- Updated translation keys and tooltips to reflect the new terminology in i18n.js.
- Removed the erase toggle button from the exclusion panel and implemented Shift key functionality to toggle erase mode in main.js.
- Adjusted brush radius handling to improve user experience and updated related UI elements in index.html.
- Enhanced the subdivision process to track original face IDs for better masking accuracy in subdivision.js.
- Added CSS styles for new UI elements and improved layout in style.css.