Commit Graph

73 Commits

Author SHA1 Message Date
Avatarsia 72f6e67127 perf: time-based yield reduces background tab overhead by ~95%
Replace fixed-interval yields (every 4096 iterations) with time-based
yields (every ~100ms of wall time). In foreground tabs this means ~10
yields per second instead of ~50-200, with identical UI responsiveness.

In background tabs where setTimeout(0) is throttled to ~1s, this
reduces overhead from ~200 wasted seconds to ~10 — the export runs
nearly as fast in the background as in the foreground.

Addresses #2 (background tab resource allocation).
2026-04-06 05:23:09 +02:00
Avatarsia 689c192a89 fix: spatial index, decimation overflow, input validation, accessibility
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.
2026-04-06 05:14:23 +02:00
Avatarsia 4811b55d5c perf: add CDN preconnect, improve canvas accessibility
- Preconnect hint for jsdelivr CDN (parallelize DNS+TLS handshake).
- Add role="img" and aria-label to viewport canvas for screen readers.
2026-04-06 02:39:12 +02:00
Avatarsia 3c9bcfd75c perf: replace Three.js STLExporter with direct binary writer
Write binary STL directly from BufferGeometry typed arrays using
Uint8Array.set() bulk copies. Eliminates the Three.js STLExporter
overhead: no Mesh/Material creation, no identity matrix multiplication,
no redundant normal recomputation, no per-float DataView calls.
2026-04-06 02:38:58 +02:00
Avatarsia 9b2fb68c47 perf: optimise QEM decimation heap and init phase
- SoAHeap: hole method for bubbleUp/sinkDown (half the typed-array
  writes per heap level vs the old swap approach).
- Seed dedup: Number keys instead of BigInt when vertex count < 94M
  (10-50x faster per key). BigInt fallback for extreme meshes.
- addCreaseQuadrics: encode face pairs as negative numbers instead
  of allocating small arrays per edge.
- Guard 3 (checkFlipped): single branch for corner index instead of
  9 ternary operations per face.
- Yield interval kept at 4096 with setTimeout(0) for reliable UI updates.
2026-04-06 02:38:46 +02:00
Avatarsia d92296754f perf: on-demand rendering, dispose leaks, reduce GC pressure
- Render loop now only calls renderer.render() when the scene actually
  changed (needsRender flag + requestRender export). Idle GPU usage
  drops to near zero.
- Disabled shadow map (no receiver in scene, wasted a full render pass).
- Reuse overlay materials instead of creating new ones every paint frame.
- Dispose CanvasTexture in getEffectiveMapEntry (VRAM leak on every
  slider change).
- Dispose axes/dimension geometry on model reload.
- Reuse Vector3/Quaternion temp objects in pointer/touch/wheel handlers
  instead of allocating ~10 objects per mouse event.
- RAF-batch mousemove for hover/cursor, keep paint events immediate.
- Reuse faceMask buffer attribute when size matches.
- Cache getEffectiveMapEntry result (skip canvas tiling+blur when
  texture and smoothing haven't changed).
- addSmoothNormals: same dedup+flat-array approach as displacement.
2026-04-06 02:38:30 +02:00
Avatarsia 51873fd5fc perf: replace string-key maps with numeric flat arrays in hot paths
Displacement, subdivision and exclusion all used template-string keys
for vertex dedup and edge lookup maps. Replaced with a single numeric
dedup pass + flat typed arrays (Float64Array / Uint8Array), cutting
displacement time by ~2.5x and subdivision by ~2.4x on a 68k tri STL.

- displacement.js: vertex dedup → flat arrays for smooth normals,
  zone areas, masked fractions, displacement cache, excluded set
- subdivision.js: numeric edge keys (a*maxV+b) instead of template strings
- exclusion.js: numeric edge keys, BFS queue.shift() → index pointer,
  adjacency Map → Array, TypedArray.set() for overlay copy
- mapping.js: Math.pow(x,4) → x²·x², cos/sin cached per computeUV call,
  applyTransform signature changed to accept precomputed cos/sin
2026-04-06 02:38:13 +02:00
CNCKitchen d99c97fb24 feat: update README and add GitHub links in header and license section 2026-04-05 13:45:16 +02:00
CNCKitchen dcbdf344ac feat: add imprint and privacy policy modal with translations 2026-04-04 13:38:15 +02:00
CNCKitchen 1c58ebcc80 feat: added a precision mode for masking 2026-04-03 14:11:40 +02:00
CNCKitchen 3c94df4504 feat: update max triangle limit to 750K and enhance triangle bounding radius calculations 2026-04-03 09:18:44 +02:00
CNCKitchen 7289c2cabc feat: add texture aspect correction for non-square textures in UV mapping 2026-04-02 17:23:24 +02:00
CNCKitchen ccf77c988a feat: increase triangle safety cap to 20M and enhance progress reporting during subdivision 2026-04-02 15:14:53 +02:00
CNCKitchen 6ad91f9707 feat: add dismiss button for store call-to-action and style updates 2026-04-02 10:28:37 +02:00
CNCKitchen 80f597141c feat: enhance pinch-to-zoom with two-finger pan support for touch devices 2026-04-01 15:04:47 +02:00
CNCKitchen fd6eae9fb5 feat: implement custom pivot marker and pinch-to-zoom support for touch devices 2026-04-01 13:46:43 +02:00
CNCKitchen 5b6049bb1e refactor: simplify canvas filter support check 2026-04-01 11:15:35 +02:00
CNCKitchen bc5c4625fc texture smoothing on mac 2026-04-01 10:59:23 +02:00
CNCKitchen f7187bc1df Add new texture images: stripes.png, stripes_02.png, woodgrain_02.jpg, and woodgrain_03.jpg
- Added stripes.png and stripes_02.png with metadata from Adobe Photoshop.
- Included two new woodgrain textures (woodgrain_02.jpg and woodgrain_03.jpg) for enhanced visual variety.
2026-03-31 20:26:25 +02:00
CNCKitchen 88ab1747e7 feat: add texture smoothing feature and update translations for UI consistency 2026-03-31 17:25:24 +02:00
CNCKitchen 668024f5c4 Merge branch 'main' of https://github.com/CNCKitchen/stlTexturizer 2026-03-29 12:08:22 +02:00
CNCKitchen 07f3a79601 feat: update README for improved clarity and add .gitignore for assets 2026-03-29 12:08:14 +02:00
CNCKitchen 64372b6c04 Create CNAME 2026-03-29 11:49:55 +02:00
CNCKitchen 76eb1c7998 feat: support loading multiple model formats (.stl, .obj, .3mf) and update UI accordingly 2026-03-28 16:30:41 +01:00
CNCKitchen a41b500bf2 feat: add cap angle control for cylindrical mapping and update UV calculations 2026-03-28 16:00:17 +01:00
CNCKitchen b0d25f4006 rebranding to BumpMesh 2026-03-27 09:38:59 +01:00
CNCKitchen fb6e4d232c feat: implement raycast-based orbit pivot for cursor-centric rotation 2026-03-26 11:05:29 +01:00
CNCKitchen b0da4d2922 Merge branch 'main' of https://github.com/CNCKitchen/stlTexturizer 2026-03-26 10:42:34 +01:00
CNCKitchen fca353a142 feat: implement cursor-centric zoom functionality in viewer 2026-03-26 10:42:29 +01:00
CNCKitchen b532c40a8e feat: enhance theme selection logic to respect OS preferences 2026-03-25 17:00:22 +01:00
CNCKitchen 558a2301db Refactor code structure for improved readability and maintainability 2026-03-25 15:34:30 +01:00
CNCKitchen 656371c3e3 Refactor code structure for improved readability and maintainability 2026-03-25 13:48:33 +01:00
CNCKitchen 475945a799 Refactor code structure for improved readability and maintainability 2026-03-25 08:03:22 +01:00
CNCKitchen 0cff3f8d10 feat: update store call-to-action with new support options and styling 2026-03-23 09:26:01 +01:00
CNCKitchen 11de141fb0 feat: add additional disclaimer and liability information to license and UI translations 2026-03-21 11:42:30 +01:00
CNCKitchen 87ad3bcecf feat: implement "Place on Face" feature with UI integration and translations 2026-03-21 11:01:49 +01:00
CNCKitchen 6723dcb7b0 Refactor surface masking and exclusion features
- 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.
2026-03-21 09:42:08 +01:00
CNCKitchen a5cb0e5671 feat: update normal handling to use area-weighted buffer normals for improved surface rendering 2026-03-20 23:30:56 +01:00
CNCKitchen b35140cd78 feat: enhance displacement preview with face normal and mask attributes for improved rendering 2026-03-20 22:47:34 +01:00
CNCKitchen 9c50ab83b1 feat: update bucket threshold and enhance mesh info display in UI 2026-03-20 19:47:04 +01:00
CNCKitchen 60e6ee9201 feat: add license popup with terms and conditions, including UI integration and translations 2026-03-20 18:05:44 +01:00
CNCKitchen 30b3e3a257 feat: enhance canvas handling with dynamic dimensions and cover-scaling for image presets 2026-03-20 17:21:16 +01:00
CNCKitchen 981a72af4d Added a 3D Preview 2026-03-19 21:00:33 +01:00
CNCKitchen 43a09e8b14 feat: add seam band width control and integrate with displacement logic for improved blending 2026-03-19 20:12:54 +01:00
CNCKitchen 14987b8587 feat: add symmetric displacement feature with UI integration and update displacement logic 2026-03-19 14:52:21 +01:00
CNCKitchen e555a479fb feat: improve cubic mapping handling for better texture consistency on seams 2026-03-19 14:04:12 +01:00
CNCKitchen 32cc538bfb feat: enhance cubic mapping with smooth normals and blending weights for improved texture transitions 2026-03-19 13:36:21 +01:00
CNCKitchen 32eddcad37 feat: add seam blend feature and amplitude overlap warning with UI updates 2026-03-19 12:08:14 +01:00
CNCKitchen 08ab85ba75 feat: update UI labels and improve scaling parameters for better user experience 2026-03-18 16:41:13 +01:00
CNCKitchen 9b0995c22d Refactor code structure for improved readability and maintainability 2026-03-18 15:33:17 +01:00