@nice2dev/ui-3d 1.0.0 → 1.0.2

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.
Files changed (204) hide show
  1. package/CHANGELOG.md +115 -1
  2. package/dist/cjs/collaborative/collaborativeScene.js +210 -0
  3. package/dist/cjs/collaborative/collaborativeScene.js.map +1 -0
  4. package/dist/cjs/core/i18n.js +3 -3
  5. package/dist/cjs/core/i18n.js.map +1 -1
  6. package/dist/cjs/dance/DanceBridge.js +162 -0
  7. package/dist/cjs/dance/DanceBridge.js.map +1 -0
  8. package/dist/cjs/dance/DanceScoreEngine.js +210 -0
  9. package/dist/cjs/dance/DanceScoreEngine.js.map +1 -0
  10. package/dist/cjs/dance/PoseDetector.js +199 -0
  11. package/dist/cjs/dance/PoseDetector.js.map +1 -0
  12. package/dist/cjs/index.js +254 -0
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/material/MaterialEditor.module.css.js +6 -0
  15. package/dist/cjs/material/MaterialEditor.module.css.js.map +1 -0
  16. package/dist/cjs/material/NiceMaterialEditor.js +737 -0
  17. package/dist/cjs/material/NiceMaterialEditor.js.map +1 -0
  18. package/dist/cjs/material/materialEditorTypes.js +73 -0
  19. package/dist/cjs/material/materialEditorTypes.js.map +1 -0
  20. package/dist/cjs/material/materialEditorUtils.js +841 -0
  21. package/dist/cjs/material/materialEditorUtils.js.map +1 -0
  22. package/dist/cjs/material/materialNodeDefinitions.js +1285 -0
  23. package/dist/cjs/material/materialNodeDefinitions.js.map +1 -0
  24. package/dist/cjs/model/ModelEditor.js +4 -1
  25. package/dist/cjs/model/ModelEditor.js.map +1 -1
  26. package/dist/cjs/model/ModelEditor.module.css.js +1 -1
  27. package/dist/cjs/model/ModelEditorLeftPanel.js +5 -4
  28. package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -1
  29. package/dist/cjs/model/ModelEditorMenuBar.js +8 -3
  30. package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -1
  31. package/dist/cjs/model/ModelEditorRightPanel.js +27 -26
  32. package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -1
  33. package/dist/cjs/model/ModelEditorSubComponents.js +20 -16
  34. package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -1
  35. package/dist/cjs/model/ModelEditorTimeline.js +5 -4
  36. package/dist/cjs/model/ModelEditorTimeline.js.map +1 -1
  37. package/dist/cjs/model/ModelEditorToolbar.js +4 -3
  38. package/dist/cjs/model/ModelEditorToolbar.js.map +1 -1
  39. package/dist/cjs/model/ModelEditorViewport.js +2 -2
  40. package/dist/cjs/model/ModelEditorViewport.js.map +1 -1
  41. package/dist/cjs/model/ModelViewer.js +68 -0
  42. package/dist/cjs/model/ModelViewer.js.map +1 -0
  43. package/dist/cjs/model/ModelViewer.module.css.js +6 -0
  44. package/dist/cjs/model/ModelViewer.module.css.js.map +1 -0
  45. package/dist/cjs/model/NiceArmatureEditor.js +255 -0
  46. package/dist/cjs/model/NiceArmatureEditor.js.map +1 -0
  47. package/dist/cjs/model/NiceMorphTargetEditor.js +206 -0
  48. package/dist/cjs/model/NiceMorphTargetEditor.js.map +1 -0
  49. package/dist/cjs/model/NiceOctree.js +339 -0
  50. package/dist/cjs/model/NiceOctree.js.map +1 -0
  51. package/dist/cjs/model/NicePhysicsSimulation.js +283 -0
  52. package/dist/cjs/model/NicePhysicsSimulation.js.map +1 -0
  53. package/dist/cjs/model/NiceProceduralGeometry.js +269 -0
  54. package/dist/cjs/model/NiceProceduralGeometry.js.map +1 -0
  55. package/dist/cjs/model/NiceTerrainEditor.js +343 -0
  56. package/dist/cjs/model/NiceTerrainEditor.js.map +1 -0
  57. package/dist/cjs/model/NiceWeightPainter.js +258 -0
  58. package/dist/cjs/model/NiceWeightPainter.js.map +1 -0
  59. package/dist/cjs/model/NiceXRPreview.js +269 -0
  60. package/dist/cjs/model/NiceXRPreview.js.map +1 -0
  61. package/dist/cjs/model/cadModeUtils.js +130 -0
  62. package/dist/cjs/model/cadModeUtils.js.map +1 -0
  63. package/dist/cjs/model/editorShortcuts.js +187 -0
  64. package/dist/cjs/model/editorShortcuts.js.map +1 -0
  65. package/dist/cjs/model/modelEditorTypes.js +11 -0
  66. package/dist/cjs/model/modelEditorTypes.js.map +1 -1
  67. package/dist/cjs/model/modelEditorUtils.js +1049 -0
  68. package/dist/cjs/model/modelEditorUtils.js.map +1 -0
  69. package/dist/cjs/model/simsModeUtils.js +358 -0
  70. package/dist/cjs/model/simsModeUtils.js.map +1 -0
  71. package/dist/cjs/model/useModelEditor.js +319 -115
  72. package/dist/cjs/model/useModelEditor.js.map +1 -1
  73. package/dist/cjs/model/useModelViewer.js +634 -0
  74. package/dist/cjs/model/useModelViewer.js.map +1 -0
  75. package/dist/cjs/nice2dev-ui-3d.css +1 -1
  76. package/dist/cjs/particle/NiceParticleEditor.js +526 -0
  77. package/dist/cjs/particle/NiceParticleEditor.js.map +1 -0
  78. package/dist/cjs/particle/ParticleEditor.module.css.js +6 -0
  79. package/dist/cjs/particle/ParticleEditor.module.css.js.map +1 -0
  80. package/dist/cjs/particle/particleEditorTypes.js +92 -0
  81. package/dist/cjs/particle/particleEditorTypes.js.map +1 -0
  82. package/dist/cjs/particle/particleEditorUtils.js +1084 -0
  83. package/dist/cjs/particle/particleEditorUtils.js.map +1 -0
  84. package/dist/cjs/rendering/NiceCascadedShadows.js +266 -0
  85. package/dist/cjs/rendering/NiceCascadedShadows.js.map +1 -0
  86. package/dist/cjs/rendering/NiceRenderExport.js +341 -0
  87. package/dist/cjs/rendering/NiceRenderExport.js.map +1 -0
  88. package/dist/cjs/rendering/NiceSSAO.js +359 -0
  89. package/dist/cjs/rendering/NiceSSAO.js.map +1 -0
  90. package/dist/cjs/rendering/NiceSSR.js +277 -0
  91. package/dist/cjs/rendering/NiceSSR.js.map +1 -0
  92. package/dist/cjs/rendering/NiceWebGPURenderer.js +215 -0
  93. package/dist/cjs/rendering/NiceWebGPURenderer.js.map +1 -0
  94. package/dist/cjs/ui/dist/index.js +50089 -0
  95. package/dist/cjs/ui/dist/index.js.map +1 -0
  96. package/dist/cjs/uv/NiceUVEditor.js +520 -0
  97. package/dist/cjs/uv/NiceUVEditor.js.map +1 -0
  98. package/dist/cjs/uv/UVEditor.module.css.js +6 -0
  99. package/dist/cjs/uv/UVEditor.module.css.js.map +1 -0
  100. package/dist/cjs/uv/uvEditorTypes.js +98 -0
  101. package/dist/cjs/uv/uvEditorTypes.js.map +1 -0
  102. package/dist/cjs/uv/uvEditorUtils.js +670 -0
  103. package/dist/cjs/uv/uvEditorUtils.js.map +1 -0
  104. package/dist/esm/collaborative/collaborativeScene.js +206 -0
  105. package/dist/esm/collaborative/collaborativeScene.js.map +1 -0
  106. package/dist/esm/dance/DanceBridge.js +158 -0
  107. package/dist/esm/dance/DanceBridge.js.map +1 -0
  108. package/dist/esm/dance/DanceScoreEngine.js +207 -0
  109. package/dist/esm/dance/DanceScoreEngine.js.map +1 -0
  110. package/dist/esm/dance/PoseDetector.js +195 -0
  111. package/dist/esm/dance/PoseDetector.js.map +1 -0
  112. package/dist/esm/index.js +35 -1
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/material/MaterialEditor.module.css.js +4 -0
  115. package/dist/esm/material/MaterialEditor.module.css.js.map +1 -0
  116. package/dist/esm/material/NiceMaterialEditor.js +734 -0
  117. package/dist/esm/material/NiceMaterialEditor.js.map +1 -0
  118. package/dist/esm/material/materialEditorTypes.js +62 -0
  119. package/dist/esm/material/materialEditorTypes.js.map +1 -0
  120. package/dist/esm/material/materialEditorUtils.js +811 -0
  121. package/dist/esm/material/materialEditorUtils.js.map +1 -0
  122. package/dist/esm/material/materialNodeDefinitions.js +1280 -0
  123. package/dist/esm/material/materialNodeDefinitions.js.map +1 -0
  124. package/dist/esm/model/ModelEditor.js +4 -2
  125. package/dist/esm/model/ModelEditor.js.map +1 -1
  126. package/dist/esm/model/ModelEditor.module.css.js +1 -1
  127. package/dist/esm/model/ModelEditorLeftPanel.js +5 -4
  128. package/dist/esm/model/ModelEditorLeftPanel.js.map +1 -1
  129. package/dist/esm/model/ModelEditorMenuBar.js +8 -3
  130. package/dist/esm/model/ModelEditorMenuBar.js.map +1 -1
  131. package/dist/esm/model/ModelEditorRightPanel.js +27 -26
  132. package/dist/esm/model/ModelEditorRightPanel.js.map +1 -1
  133. package/dist/esm/model/ModelEditorSubComponents.js +17 -13
  134. package/dist/esm/model/ModelEditorSubComponents.js.map +1 -1
  135. package/dist/esm/model/ModelEditorTimeline.js +5 -4
  136. package/dist/esm/model/ModelEditorTimeline.js.map +1 -1
  137. package/dist/esm/model/ModelEditorToolbar.js +4 -3
  138. package/dist/esm/model/ModelEditorToolbar.js.map +1 -1
  139. package/dist/esm/model/ModelEditorViewport.js +2 -2
  140. package/dist/esm/model/ModelEditorViewport.js.map +1 -1
  141. package/dist/esm/model/ModelViewer.js +65 -0
  142. package/dist/esm/model/ModelViewer.js.map +1 -0
  143. package/dist/esm/model/ModelViewer.module.css.js +4 -0
  144. package/dist/esm/model/ModelViewer.module.css.js.map +1 -0
  145. package/dist/esm/model/NiceArmatureEditor.js +233 -0
  146. package/dist/esm/model/NiceArmatureEditor.js.map +1 -0
  147. package/dist/esm/model/NiceMorphTargetEditor.js +184 -0
  148. package/dist/esm/model/NiceMorphTargetEditor.js.map +1 -0
  149. package/dist/esm/model/NiceOctree.js +317 -0
  150. package/dist/esm/model/NiceOctree.js.map +1 -0
  151. package/dist/esm/model/NicePhysicsSimulation.js +261 -0
  152. package/dist/esm/model/NicePhysicsSimulation.js.map +1 -0
  153. package/dist/esm/model/NiceProceduralGeometry.js +242 -0
  154. package/dist/esm/model/NiceProceduralGeometry.js.map +1 -0
  155. package/dist/esm/model/NiceTerrainEditor.js +321 -0
  156. package/dist/esm/model/NiceTerrainEditor.js.map +1 -0
  157. package/dist/esm/model/NiceWeightPainter.js +236 -0
  158. package/dist/esm/model/NiceWeightPainter.js.map +1 -0
  159. package/dist/esm/model/NiceXRPreview.js +247 -0
  160. package/dist/esm/model/NiceXRPreview.js.map +1 -0
  161. package/dist/esm/model/cadModeUtils.js +103 -0
  162. package/dist/esm/model/cadModeUtils.js.map +1 -0
  163. package/dist/esm/model/editorShortcuts.js +185 -0
  164. package/dist/esm/model/editorShortcuts.js.map +1 -0
  165. package/dist/esm/model/modelEditorTypes.js +11 -0
  166. package/dist/esm/model/modelEditorTypes.js.map +1 -1
  167. package/dist/esm/model/modelEditorUtils.js +997 -0
  168. package/dist/esm/model/modelEditorUtils.js.map +1 -0
  169. package/dist/esm/model/simsModeUtils.js +325 -0
  170. package/dist/esm/model/simsModeUtils.js.map +1 -0
  171. package/dist/esm/model/useModelEditor.js +204 -0
  172. package/dist/esm/model/useModelEditor.js.map +1 -1
  173. package/dist/esm/model/useModelViewer.js +613 -0
  174. package/dist/esm/model/useModelViewer.js.map +1 -0
  175. package/dist/esm/nice2dev-ui-3d.css +1 -1
  176. package/dist/esm/particle/NiceParticleEditor.js +523 -0
  177. package/dist/esm/particle/NiceParticleEditor.js.map +1 -0
  178. package/dist/esm/particle/ParticleEditor.module.css.js +4 -0
  179. package/dist/esm/particle/ParticleEditor.module.css.js.map +1 -0
  180. package/dist/esm/particle/particleEditorTypes.js +84 -0
  181. package/dist/esm/particle/particleEditorTypes.js.map +1 -0
  182. package/dist/esm/particle/particleEditorUtils.js +1054 -0
  183. package/dist/esm/particle/particleEditorUtils.js.map +1 -0
  184. package/dist/esm/rendering/NiceCascadedShadows.js +244 -0
  185. package/dist/esm/rendering/NiceCascadedShadows.js.map +1 -0
  186. package/dist/esm/rendering/NiceRenderExport.js +319 -0
  187. package/dist/esm/rendering/NiceRenderExport.js.map +1 -0
  188. package/dist/esm/rendering/NiceSSAO.js +337 -0
  189. package/dist/esm/rendering/NiceSSAO.js.map +1 -0
  190. package/dist/esm/rendering/NiceSSR.js +255 -0
  191. package/dist/esm/rendering/NiceSSR.js.map +1 -0
  192. package/dist/esm/rendering/NiceWebGPURenderer.js +193 -0
  193. package/dist/esm/rendering/NiceWebGPURenderer.js.map +1 -0
  194. package/dist/esm/ui/dist/index.js +49686 -0
  195. package/dist/esm/ui/dist/index.js.map +1 -0
  196. package/dist/esm/uv/NiceUVEditor.js +518 -0
  197. package/dist/esm/uv/NiceUVEditor.js.map +1 -0
  198. package/dist/esm/uv/UVEditor.module.css.js +4 -0
  199. package/dist/esm/uv/UVEditor.module.css.js.map +1 -0
  200. package/dist/esm/uv/uvEditorTypes.js +88 -0
  201. package/dist/esm/uv/uvEditorTypes.js.map +1 -0
  202. package/dist/esm/uv/uvEditorUtils.js +621 -0
  203. package/dist/esm/uv/uvEditorUtils.js.map +1 -0
  204. package/package.json +3 -4
@@ -0,0 +1,621 @@
1
+ import * as THREE from 'three';
2
+
3
+ /**
4
+ * UV Editor Utilities
5
+ *
6
+ * Core algorithms and utilities for UV mapping operations.
7
+ * @module @nice2dev/ui-3d
8
+ */
9
+ /* ═══════════════════════════════════════════
10
+ ID Generation
11
+ ═══════════════════════════════════════════ */
12
+ let idCounter = 0;
13
+ const generateId = (prefix) => `${prefix}_${Date.now()}_${++idCounter}`;
14
+ /* ═══════════════════════════════════════════
15
+ UV Math Utilities
16
+ ═══════════════════════════════════════════ */
17
+ const uvDistance = (a, b) => Math.sqrt((a.u - b.u) ** 2 + (a.v - b.v) ** 2);
18
+ const uvLerp = (a, b, t) => ({
19
+ u: a.u + (b.u - a.u) * t,
20
+ v: a.v + (b.v - a.v) * t,
21
+ });
22
+ const uvAdd = (a, b) => ({
23
+ u: a.u + b.u,
24
+ v: a.v + b.v,
25
+ });
26
+ const uvSub = (a, b) => ({
27
+ u: a.u - b.u,
28
+ v: a.v - b.v,
29
+ });
30
+ const uvScale = (p, s) => ({
31
+ u: p.u * s,
32
+ v: p.v * s,
33
+ });
34
+ const uvRotate = (p, angle, center = { u: 0.5, v: 0.5 }) => {
35
+ const cos = Math.cos(angle);
36
+ const sin = Math.sin(angle);
37
+ const du = p.u - center.u;
38
+ const dv = p.v - center.v;
39
+ return {
40
+ u: center.u + du * cos - dv * sin,
41
+ v: center.v + du * sin + dv * cos,
42
+ };
43
+ };
44
+ const uvCross = (a, b) => a.u * b.v - a.v * b.u;
45
+ /* ═══════════════════════════════════════════
46
+ Bounds Utilities
47
+ ═══════════════════════════════════════════ */
48
+ const createEmptyBounds = () => ({
49
+ minU: Infinity,
50
+ maxU: -Infinity,
51
+ minV: Infinity,
52
+ maxV: -Infinity,
53
+ });
54
+ const expandBounds = (bounds, point) => ({
55
+ minU: Math.min(bounds.minU, point.u),
56
+ maxU: Math.max(bounds.maxU, point.u),
57
+ minV: Math.min(bounds.minV, point.v),
58
+ maxV: Math.max(bounds.maxV, point.v),
59
+ });
60
+ const mergeBounds = (a, b) => ({
61
+ minU: Math.min(a.minU, b.minU),
62
+ maxU: Math.max(a.maxU, b.maxU),
63
+ minV: Math.min(a.minV, b.minV),
64
+ maxV: Math.max(a.maxV, b.maxV),
65
+ });
66
+ const getBoundsCenter = (bounds) => ({
67
+ u: (bounds.minU + bounds.maxU) / 2,
68
+ v: (bounds.minV + bounds.maxV) / 2,
69
+ });
70
+ const getBoundsSize = (bounds) => ({
71
+ u: bounds.maxU - bounds.minU,
72
+ v: bounds.maxV - bounds.minV,
73
+ });
74
+ const getBoundsArea = (bounds) => (bounds.maxU - bounds.minU) * (bounds.maxV - bounds.minV);
75
+ const boundsContains = (bounds, point) => point.u >= bounds.minU && point.u <= bounds.maxU &&
76
+ point.v >= bounds.minV && point.v <= bounds.maxV;
77
+ const boundsOverlap = (a, b) => a.minU <= b.maxU && a.maxU >= b.minU &&
78
+ a.minV <= b.maxV && a.maxV >= b.minV;
79
+ /* ═══════════════════════════════════════════
80
+ Geometry Extraction
81
+ ═══════════════════════════════════════════ */
82
+ function extractUVMeshData(geometry, channel = 'uv') {
83
+ const uvAttr = geometry.getAttribute(channel);
84
+ const posAttr = geometry.getAttribute('position');
85
+ const indexAttr = geometry.getIndex();
86
+ if (!uvAttr || !posAttr)
87
+ return null;
88
+ const vertices = new Map();
89
+ const edges = new Map();
90
+ const faces = new Map();
91
+ // Extract vertices
92
+ for (let i = 0; i < uvAttr.count; i++) {
93
+ const id = generateId('v');
94
+ vertices.set(id, {
95
+ id,
96
+ position: { u: uvAttr.getX(i), v: uvAttr.getY(i) },
97
+ index: i,
98
+ pinned: false,
99
+ selected: false,
100
+ vertexIndex: i,
101
+ });
102
+ }
103
+ // Extract faces and edges
104
+ const vertexIds = Array.from(vertices.keys());
105
+ const edgeMap = new Map(); // "v1_v2" -> edgeId
106
+ const faceCount = indexAttr ? indexAttr.count / 3 : posAttr.count / 3;
107
+ for (let i = 0; i < faceCount; i++) {
108
+ const faceVertexIds = [];
109
+ const indices = [];
110
+ for (let j = 0; j < 3; j++) {
111
+ const idx = indexAttr ? indexAttr.getX(i * 3 + j) : i * 3 + j;
112
+ indices.push(idx);
113
+ faceVertexIds.push(vertexIds[idx]);
114
+ }
115
+ // Calculate face area in UV space
116
+ const v0 = vertices.get(faceVertexIds[0]).position;
117
+ const v1 = vertices.get(faceVertexIds[1]).position;
118
+ const v2 = vertices.get(faceVertexIds[2]).position;
119
+ const uvArea = Math.abs(uvCross(uvSub(v1, v0), uvSub(v2, v0))) / 2;
120
+ // Calculate face area in 3D space
121
+ const p0 = new THREE.Vector3().fromBufferAttribute(posAttr, indices[0]);
122
+ const p1 = new THREE.Vector3().fromBufferAttribute(posAttr, indices[1]);
123
+ const p2 = new THREE.Vector3().fromBufferAttribute(posAttr, indices[2]);
124
+ const e1 = p1.clone().sub(p0);
125
+ const e2 = p2.clone().sub(p0);
126
+ const area3D = e1.cross(e2).length() / 2;
127
+ const faceId = generateId('f');
128
+ faces.set(faceId, {
129
+ id: faceId,
130
+ vertices: faceVertexIds,
131
+ area: uvArea,
132
+ area3D,
133
+ distortion: area3D > 0 ? uvArea / area3D : 1,
134
+ selected: false,
135
+ faceIndex: i,
136
+ });
137
+ // Create edges
138
+ for (let j = 0; j < 3; j++) {
139
+ const v1Id = faceVertexIds[j];
140
+ const v2Id = faceVertexIds[(j + 1) % 3];
141
+ const edgeKey = [v1Id, v2Id].sort().join('_');
142
+ if (!edgeMap.has(edgeKey)) {
143
+ const edgeId = generateId('e');
144
+ const v1Pos = vertices.get(v1Id).position;
145
+ const v2Pos = vertices.get(v2Id).position;
146
+ edges.set(edgeId, {
147
+ id: edgeId,
148
+ startVertex: v1Id,
149
+ endVertex: v2Id,
150
+ seam: false,
151
+ selected: false,
152
+ length: uvDistance(v1Pos, v2Pos),
153
+ });
154
+ edgeMap.set(edgeKey, edgeId);
155
+ }
156
+ }
157
+ }
158
+ // Compute islands
159
+ const islands = computeIslands(vertices, edges, faces);
160
+ return {
161
+ vertices,
162
+ edges,
163
+ faces,
164
+ islands,
165
+ geometryId: geometry.uuid,
166
+ dirty: false,
167
+ };
168
+ }
169
+ /* ═══════════════════════════════════════════
170
+ Island Detection
171
+ ═══════════════════════════════════════════ */
172
+ function computeIslands(vertices, edges, faces) {
173
+ const islands = new Map();
174
+ const visited = new Set();
175
+ const faceToIsland = new Map();
176
+ // Build adjacency graph (faces connected by non-seam edges)
177
+ const adjacency = new Map();
178
+ for (const face of faces.values()) {
179
+ adjacency.set(face.id, new Set());
180
+ }
181
+ // Find adjacent faces (sharing vertices)
182
+ const vertexToFaces = new Map();
183
+ for (const face of faces.values()) {
184
+ for (const vId of face.vertices) {
185
+ if (!vertexToFaces.has(vId))
186
+ vertexToFaces.set(vId, new Set());
187
+ vertexToFaces.get(vId).add(face.id);
188
+ }
189
+ }
190
+ for (const face of faces.values()) {
191
+ for (const vId of face.vertices) {
192
+ const connectedFaces = vertexToFaces.get(vId);
193
+ for (const otherFaceId of connectedFaces) {
194
+ if (otherFaceId !== face.id) {
195
+ adjacency.get(face.id).add(otherFaceId);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ // Flood fill to find islands
201
+ const floodFill = (startFaceId) => {
202
+ var _a;
203
+ const stack = [startFaceId];
204
+ const islandFaces = [];
205
+ while (stack.length > 0) {
206
+ const faceId = stack.pop();
207
+ if (visited.has(faceId))
208
+ continue;
209
+ visited.add(faceId);
210
+ islandFaces.push(faceId);
211
+ for (const neighborId of (_a = adjacency.get(faceId)) !== null && _a !== void 0 ? _a : []) {
212
+ if (!visited.has(neighborId)) {
213
+ stack.push(neighborId);
214
+ }
215
+ }
216
+ }
217
+ return islandFaces;
218
+ };
219
+ for (const face of faces.values()) {
220
+ if (visited.has(face.id))
221
+ continue;
222
+ const islandFaces = floodFill(face.id);
223
+ const islandId = generateId('i');
224
+ // Gather island vertices and edges
225
+ const islandVertices = new Set();
226
+ const islandEdges = new Set();
227
+ for (const faceId of islandFaces) {
228
+ faceToIsland.set(faceId, islandId);
229
+ const f = faces.get(faceId);
230
+ for (const vId of f.vertices) {
231
+ islandVertices.add(vId);
232
+ }
233
+ }
234
+ for (const edge of edges.values()) {
235
+ if (islandVertices.has(edge.startVertex) && islandVertices.has(edge.endVertex)) {
236
+ islandEdges.add(edge.id);
237
+ }
238
+ }
239
+ // Calculate bounds
240
+ let bounds = createEmptyBounds();
241
+ let totalArea = 0;
242
+ let centerU = 0, centerV = 0;
243
+ for (const vId of islandVertices) {
244
+ const v = vertices.get(vId);
245
+ bounds = expandBounds(bounds, v.position);
246
+ centerU += v.position.u;
247
+ centerV += v.position.v;
248
+ }
249
+ for (const faceId of islandFaces) {
250
+ totalArea += faces.get(faceId).area;
251
+ }
252
+ const vertexCount = islandVertices.size;
253
+ islands.set(islandId, {
254
+ id: islandId,
255
+ faces: islandFaces,
256
+ vertices: Array.from(islandVertices),
257
+ edges: Array.from(islandEdges),
258
+ bounds,
259
+ area: totalArea,
260
+ selected: false,
261
+ center: { u: centerU / vertexCount, v: centerV / vertexCount },
262
+ rotation: 0,
263
+ scale: { u: 1, v: 1 },
264
+ });
265
+ }
266
+ return islands;
267
+ }
268
+ /* ═══════════════════════════════════════════
269
+ Projection Functions
270
+ ═══════════════════════════════════════════ */
271
+ function applyProjection(geometry, settings, selectedFaces) {
272
+ const posAttr = geometry.getAttribute('position');
273
+ let uvAttr = geometry.getAttribute('uv');
274
+ if (!uvAttr) {
275
+ uvAttr = new THREE.BufferAttribute(new Float32Array(posAttr.count * 2), 2);
276
+ geometry.setAttribute('uv', uvAttr);
277
+ }
278
+ const indices = selectedFaces !== null && selectedFaces !== void 0 ? selectedFaces : Array.from({ length: posAttr.count }, (_, i) => i);
279
+ switch (settings.type) {
280
+ case 'planar':
281
+ applyPlanarProjection(geometry, settings, indices);
282
+ break;
283
+ case 'cylindrical':
284
+ applyCylindricalProjection(geometry, settings, indices);
285
+ break;
286
+ case 'spherical':
287
+ applySphericalProjection(geometry, settings, indices);
288
+ break;
289
+ case 'box':
290
+ applyBoxProjection(geometry, settings, indices);
291
+ break;
292
+ default:
293
+ applyPlanarProjection(geometry, { ...settings, axis: 'z'}, indices);
294
+ }
295
+ uvAttr.needsUpdate = true;
296
+ }
297
+ function applyPlanarProjection(geometry, settings, indices) {
298
+ const posAttr = geometry.getAttribute('position');
299
+ const uvAttr = geometry.getAttribute('uv');
300
+ const { scale, offset, axis } = settings;
301
+ for (const i of indices) {
302
+ const x = posAttr.getX(i);
303
+ const y = posAttr.getY(i);
304
+ const z = posAttr.getZ(i);
305
+ let u, v;
306
+ switch (axis) {
307
+ case 'x':
308
+ u = (z - offset.z) * scale.z;
309
+ v = (y - offset.y) * scale.y;
310
+ break;
311
+ case 'y':
312
+ u = (x - offset.x) * scale.x;
313
+ v = (z - offset.z) * scale.z;
314
+ break;
315
+ case 'z':
316
+ default:
317
+ u = (x - offset.x) * scale.x;
318
+ v = (y - offset.y) * scale.y;
319
+ break;
320
+ }
321
+ uvAttr.setXY(i, u, v);
322
+ }
323
+ }
324
+ function applyCylindricalProjection(geometry, settings, indices) {
325
+ const posAttr = geometry.getAttribute('position');
326
+ const uvAttr = geometry.getAttribute('uv');
327
+ const { scale, offset, axis } = settings;
328
+ for (const i of indices) {
329
+ const x = posAttr.getX(i) - offset.x;
330
+ const y = posAttr.getY(i) - offset.y;
331
+ const z = posAttr.getZ(i) - offset.z;
332
+ let u, v;
333
+ switch (axis) {
334
+ case 'x':
335
+ u = (Math.atan2(z, y) / (2 * Math.PI) + 0.5) * scale.x;
336
+ v = x * scale.y;
337
+ break;
338
+ case 'y':
339
+ u = (Math.atan2(x, z) / (2 * Math.PI) + 0.5) * scale.x;
340
+ v = y * scale.y;
341
+ break;
342
+ case 'z':
343
+ default:
344
+ u = (Math.atan2(y, x) / (2 * Math.PI) + 0.5) * scale.x;
345
+ v = z * scale.y;
346
+ break;
347
+ }
348
+ uvAttr.setXY(i, u, v);
349
+ }
350
+ }
351
+ function applySphericalProjection(geometry, settings, indices) {
352
+ const posAttr = geometry.getAttribute('position');
353
+ const uvAttr = geometry.getAttribute('uv');
354
+ const { scale, offset } = settings;
355
+ for (const i of indices) {
356
+ const x = posAttr.getX(i) - offset.x;
357
+ const y = posAttr.getY(i) - offset.y;
358
+ const z = posAttr.getZ(i) - offset.z;
359
+ const r = Math.sqrt(x * x + y * y + z * z);
360
+ const theta = Math.acos(y / r);
361
+ const phi = Math.atan2(z, x);
362
+ const u = (phi / (2 * Math.PI) + 0.5) * scale.x;
363
+ const v = (theta / Math.PI) * scale.y;
364
+ uvAttr.setXY(i, u, v);
365
+ }
366
+ }
367
+ function applyBoxProjection(geometry, settings, indices) {
368
+ var _a, _b, _c;
369
+ const posAttr = geometry.getAttribute('position');
370
+ const normalAttr = geometry.getAttribute('normal');
371
+ const uvAttr = geometry.getAttribute('uv');
372
+ if (!normalAttr) {
373
+ geometry.computeVertexNormals();
374
+ }
375
+ const { scale, offset } = settings;
376
+ for (const i of indices) {
377
+ const x = posAttr.getX(i) - offset.x;
378
+ const y = posAttr.getY(i) - offset.y;
379
+ const z = posAttr.getZ(i) - offset.z;
380
+ const nx = Math.abs((_a = normalAttr === null || normalAttr === void 0 ? void 0 : normalAttr.getX(i)) !== null && _a !== void 0 ? _a : 0);
381
+ const ny = Math.abs((_b = normalAttr === null || normalAttr === void 0 ? void 0 : normalAttr.getY(i)) !== null && _b !== void 0 ? _b : 1);
382
+ const nz = Math.abs((_c = normalAttr === null || normalAttr === void 0 ? void 0 : normalAttr.getZ(i)) !== null && _c !== void 0 ? _c : 0);
383
+ let u, v;
384
+ if (nx >= ny && nx >= nz) {
385
+ // Project on YZ plane
386
+ u = z * scale.z;
387
+ v = y * scale.y;
388
+ }
389
+ else if (ny >= nx && ny >= nz) {
390
+ // Project on XZ plane
391
+ u = x * scale.x;
392
+ v = z * scale.z;
393
+ }
394
+ else {
395
+ // Project on XY plane
396
+ u = x * scale.x;
397
+ v = y * scale.y;
398
+ }
399
+ uvAttr.setXY(i, u, v);
400
+ }
401
+ }
402
+ /* ═══════════════════════════════════════════
403
+ UV Packing
404
+ ═══════════════════════════════════════════ */
405
+ function packIslands(meshData, options) {
406
+ const transforms = new Map();
407
+ const islands = Array.from(meshData.islands.values());
408
+ if (islands.length === 0) {
409
+ return { transforms, utilization: 0, success: true, iterations: 0 };
410
+ }
411
+ // Sort islands by area (largest first) for better packing
412
+ if (options.areaPriority) {
413
+ islands.sort((a, b) => b.area - a.area);
414
+ }
415
+ // Simple shelf-based packing algorithm
416
+ const padding = options.padding / options.resolution;
417
+ const margin = options.margin;
418
+ let currentX = margin;
419
+ let currentY = margin;
420
+ let rowHeight = 0;
421
+ let maxX = 0;
422
+ let maxY = 0;
423
+ for (const island of islands) {
424
+ const size = getBoundsSize(island.bounds);
425
+ const width = size.u + padding * 2;
426
+ const height = size.v + padding * 2;
427
+ // Check if fits in current row
428
+ if (currentX + width > 1 - margin) {
429
+ // Move to next row
430
+ currentX = margin;
431
+ currentY += rowHeight + padding;
432
+ rowHeight = 0;
433
+ }
434
+ // Calculate translation to move island to current position
435
+ const translation = {
436
+ u: currentX + padding - island.bounds.minU,
437
+ v: currentY + padding - island.bounds.minV,
438
+ };
439
+ transforms.set(island.id, {
440
+ translation,
441
+ rotation: 0,
442
+ scale: 1,
443
+ });
444
+ currentX += width;
445
+ rowHeight = Math.max(rowHeight, height);
446
+ maxX = Math.max(maxX, currentX);
447
+ maxY = Math.max(maxY, currentY + height);
448
+ }
449
+ // Calculate utilization
450
+ const totalIslandArea = islands.reduce((sum, i) => sum + i.area, 0);
451
+ const usedArea = maxX * maxY;
452
+ const utilization = usedArea > 0 ? totalIslandArea / usedArea : 0;
453
+ return {
454
+ transforms,
455
+ utilization,
456
+ success: maxX <= 1 && maxY <= 1,
457
+ iterations: 1,
458
+ };
459
+ }
460
+ function applyIslandTransforms(meshData, transforms) {
461
+ for (const [islandId, transform] of transforms) {
462
+ const island = meshData.islands.get(islandId);
463
+ if (!island)
464
+ continue;
465
+ const center = island.center;
466
+ for (const vertexId of island.vertices) {
467
+ const vertex = meshData.vertices.get(vertexId);
468
+ if (!vertex)
469
+ continue;
470
+ let pos = vertex.position;
471
+ // Apply rotation around center
472
+ if (transform.rotation !== 0) {
473
+ pos = uvRotate(pos, transform.rotation, center);
474
+ }
475
+ // Apply scale from center
476
+ if (transform.scale !== 1) {
477
+ pos = {
478
+ u: center.u + (pos.u - center.u) * transform.scale,
479
+ v: center.v + (pos.v - center.v) * transform.scale,
480
+ };
481
+ }
482
+ // Apply translation
483
+ pos = uvAdd(pos, transform.translation);
484
+ vertex.position = pos;
485
+ }
486
+ // Update island bounds
487
+ let bounds = createEmptyBounds();
488
+ for (const vertexId of island.vertices) {
489
+ bounds = expandBounds(bounds, meshData.vertices.get(vertexId).position);
490
+ }
491
+ island.bounds = bounds;
492
+ island.center = getBoundsCenter(bounds);
493
+ }
494
+ meshData.dirty = true;
495
+ }
496
+ /* ═══════════════════════════════════════════
497
+ UV Relaxation
498
+ ═══════════════════════════════════════════ */
499
+ function relaxUVs(meshData, options, selectedVertices) {
500
+ const verticesToRelax = selectedVertices !== null && selectedVertices !== void 0 ? selectedVertices : new Set(meshData.vertices.keys());
501
+ const affectedVertices = [];
502
+ for (let iter = 0; iter < options.iterations; iter++) {
503
+ for (const vertexId of verticesToRelax) {
504
+ const vertex = meshData.vertices.get(vertexId);
505
+ if (!vertex || (options.preservePinned && vertex.pinned))
506
+ continue;
507
+ // Find connected vertices
508
+ const neighbors = [];
509
+ for (const edge of meshData.edges.values()) {
510
+ if (edge.startVertex === vertexId) {
511
+ neighbors.push(meshData.vertices.get(edge.endVertex).position);
512
+ }
513
+ else if (edge.endVertex === vertexId) {
514
+ neighbors.push(meshData.vertices.get(edge.startVertex).position);
515
+ }
516
+ }
517
+ if (neighbors.length === 0)
518
+ continue;
519
+ // Move towards average of neighbors (Laplacian smoothing)
520
+ const avg = {
521
+ u: neighbors.reduce((s, n) => s + n.u, 0) / neighbors.length,
522
+ v: neighbors.reduce((s, n) => s + n.v, 0) / neighbors.length,
523
+ };
524
+ const factor = 0.5; // Relaxation factor
525
+ vertex.position = uvLerp(vertex.position, avg, factor);
526
+ if (!affectedVertices.includes(vertexId)) {
527
+ affectedVertices.push(vertexId);
528
+ }
529
+ }
530
+ }
531
+ meshData.dirty = true;
532
+ return {
533
+ success: true,
534
+ affectedVertices,
535
+ };
536
+ }
537
+ /* ═══════════════════════════════════════════
538
+ Selection Utilities
539
+ ═══════════════════════════════════════════ */
540
+ function selectVerticesInRect(meshData, rect, additive = false) {
541
+ const selected = [];
542
+ for (const [id, vertex] of meshData.vertices) {
543
+ if (boundsContains(rect, vertex.position)) {
544
+ vertex.selected = true;
545
+ selected.push(id);
546
+ }
547
+ else if (!additive) {
548
+ vertex.selected = false;
549
+ }
550
+ }
551
+ return selected;
552
+ }
553
+ function selectIsland(meshData, islandId, additive = false) {
554
+ if (!additive) {
555
+ for (const v of meshData.vertices.values())
556
+ v.selected = false;
557
+ for (const e of meshData.edges.values())
558
+ e.selected = false;
559
+ for (const f of meshData.faces.values())
560
+ f.selected = false;
561
+ for (const i of meshData.islands.values())
562
+ i.selected = false;
563
+ }
564
+ const island = meshData.islands.get(islandId);
565
+ if (!island)
566
+ return;
567
+ island.selected = true;
568
+ for (const vId of island.vertices) {
569
+ const v = meshData.vertices.get(vId);
570
+ if (v)
571
+ v.selected = true;
572
+ }
573
+ for (const eId of island.edges) {
574
+ const e = meshData.edges.get(eId);
575
+ if (e)
576
+ e.selected = true;
577
+ }
578
+ for (const fId of island.faces) {
579
+ const f = meshData.faces.get(fId);
580
+ if (f)
581
+ f.selected = true;
582
+ }
583
+ }
584
+ function getSelectedVertices(meshData) {
585
+ return Array.from(meshData.vertices.values()).filter(v => v.selected);
586
+ }
587
+ function getSelectedIslands(meshData) {
588
+ return Array.from(meshData.islands.values()).filter(i => i.selected);
589
+ }
590
+ /* ═══════════════════════════════════════════
591
+ Seam Operations
592
+ ═══════════════════════════════════════════ */
593
+ function markSeam(meshData, edgeId, isSeam) {
594
+ const edge = meshData.edges.get(edgeId);
595
+ if (edge) {
596
+ edge.seam = isSeam;
597
+ meshData.dirty = true;
598
+ }
599
+ }
600
+ function clearAllSeams(meshData) {
601
+ for (const edge of meshData.edges.values()) {
602
+ edge.seam = false;
603
+ }
604
+ meshData.dirty = true;
605
+ }
606
+ /* ═══════════════════════════════════════════
607
+ Sync Back to Geometry
608
+ ═══════════════════════════════════════════ */
609
+ function syncToGeometry(meshData, geometry, channel = 'uv') {
610
+ const uvAttr = geometry.getAttribute(channel);
611
+ if (!uvAttr)
612
+ return;
613
+ for (const vertex of meshData.vertices.values()) {
614
+ uvAttr.setXY(vertex.index, vertex.position.u, vertex.position.v);
615
+ }
616
+ uvAttr.needsUpdate = true;
617
+ meshData.dirty = false;
618
+ }
619
+
620
+ export { applyIslandTransforms, applyProjection, boundsContains, boundsOverlap, clearAllSeams, computeIslands, createEmptyBounds, expandBounds, extractUVMeshData, generateId, getBoundsArea, getBoundsCenter, getBoundsSize, getSelectedIslands, getSelectedVertices, markSeam, mergeBounds, packIslands, relaxUVs, selectIsland, selectVerticesInRect, syncToGeometry, uvAdd, uvCross, uvDistance, uvLerp, uvRotate, uvScale, uvSub };
621
+ //# sourceMappingURL=uvEditorUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uvEditorUtils.js","sources":["../../../src/uv/uvEditorUtils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}