@nice2dev/spatial-core 1.0.10

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 (82) hide show
  1. package/README.md +160 -0
  2. package/dist/bim/index.d.ts +366 -0
  3. package/dist/bim/index.d.ts.map +1 -0
  4. package/dist/bim/index.js +60 -0
  5. package/dist/bim/index.js.map +1 -0
  6. package/dist/cad/index.d.ts +329 -0
  7. package/dist/cad/index.d.ts.map +1 -0
  8. package/dist/cad/index.js +124 -0
  9. package/dist/cad/index.js.map +1 -0
  10. package/dist/ecad/index.d.ts +316 -0
  11. package/dist/ecad/index.d.ts.map +1 -0
  12. package/dist/ecad/index.js +11 -0
  13. package/dist/ecad/index.js.map +1 -0
  14. package/dist/export/index.d.ts +93 -0
  15. package/dist/export/index.d.ts.map +1 -0
  16. package/dist/export/index.js +522 -0
  17. package/dist/export/index.js.map +1 -0
  18. package/dist/floor-plan/index.d.ts +248 -0
  19. package/dist/floor-plan/index.d.ts.map +1 -0
  20. package/dist/floor-plan/index.js +228 -0
  21. package/dist/floor-plan/index.js.map +1 -0
  22. package/dist/grid/index.d.ts +160 -0
  23. package/dist/grid/index.d.ts.map +1 -0
  24. package/dist/grid/index.js +319 -0
  25. package/dist/grid/index.js.map +1 -0
  26. package/dist/import/import.worker.d.ts +28 -0
  27. package/dist/import/import.worker.d.ts.map +1 -0
  28. package/dist/import/import.worker.js +52 -0
  29. package/dist/import/import.worker.js.map +1 -0
  30. package/dist/import/index.d.ts +111 -0
  31. package/dist/import/index.d.ts.map +1 -0
  32. package/dist/import/index.js +1092 -0
  33. package/dist/import/index.js.map +1 -0
  34. package/dist/import/workerImport.d.ts +56 -0
  35. package/dist/import/workerImport.d.ts.map +1 -0
  36. package/dist/import/workerImport.js +207 -0
  37. package/dist/import/workerImport.js.map +1 -0
  38. package/dist/index.d.ts +29 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +86 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/interior/index.d.ts +241 -0
  43. package/dist/interior/index.d.ts.map +1 -0
  44. package/dist/interior/index.js +101 -0
  45. package/dist/interior/index.js.map +1 -0
  46. package/dist/measurement/index.d.ts +186 -0
  47. package/dist/measurement/index.d.ts.map +1 -0
  48. package/dist/measurement/index.js +400 -0
  49. package/dist/measurement/index.js.map +1 -0
  50. package/dist/objects/index.d.ts +288 -0
  51. package/dist/objects/index.d.ts.map +1 -0
  52. package/dist/objects/index.js +463 -0
  53. package/dist/objects/index.js.map +1 -0
  54. package/dist/serialization/index.d.ts +421 -0
  55. package/dist/serialization/index.d.ts.map +1 -0
  56. package/dist/serialization/index.js +412 -0
  57. package/dist/serialization/index.js.map +1 -0
  58. package/dist/topology/index.d.ts +252 -0
  59. package/dist/topology/index.d.ts.map +1 -0
  60. package/dist/topology/index.js +525 -0
  61. package/dist/topology/index.js.map +1 -0
  62. package/dist/transitions/index.d.ts +141 -0
  63. package/dist/transitions/index.d.ts.map +1 -0
  64. package/dist/transitions/index.js +160 -0
  65. package/dist/transitions/index.js.map +1 -0
  66. package/dist/unified/index.d.ts +225 -0
  67. package/dist/unified/index.d.ts.map +1 -0
  68. package/dist/unified/index.js +474 -0
  69. package/dist/unified/index.js.map +1 -0
  70. package/dist/virtualization/QuadTree.d.ts +68 -0
  71. package/dist/virtualization/QuadTree.d.ts.map +1 -0
  72. package/dist/virtualization/QuadTree.js +228 -0
  73. package/dist/virtualization/QuadTree.js.map +1 -0
  74. package/dist/virtualization/ViewportCulling.d.ts +92 -0
  75. package/dist/virtualization/ViewportCulling.d.ts.map +1 -0
  76. package/dist/virtualization/ViewportCulling.js +123 -0
  77. package/dist/virtualization/ViewportCulling.js.map +1 -0
  78. package/dist/virtualization/index.d.ts +9 -0
  79. package/dist/virtualization/index.d.ts.map +1 -0
  80. package/dist/virtualization/index.js +9 -0
  81. package/dist/virtualization/index.js.map +1 -0
  82. package/package.json +64 -0
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Measurement Utilities — Distance, angle, area calculations.
3
+ *
4
+ * Consolidates from:
5
+ * - cadModeUtils.ts (measurement functions)
6
+ * - modelEditorUtils.ts (measureDistance, measureAngle)
7
+ *
8
+ * @module @nice2dev/spatial-core/measurement
9
+ */
10
+ /* ================================================================
11
+ UNIT CONVERSION
12
+ ================================================================ */
13
+ /** Conversion factors to meters. */
14
+ const LENGTH_TO_METERS = {
15
+ m: 1,
16
+ cm: 0.01,
17
+ mm: 0.001,
18
+ ft: 0.3048,
19
+ in: 0.0254,
20
+ yd: 0.9144,
21
+ };
22
+ /** Conversion factors from meters. */
23
+ const METERS_TO_LENGTH = {
24
+ m: 1,
25
+ cm: 100,
26
+ mm: 1000,
27
+ ft: 3.28084,
28
+ in: 39.3701,
29
+ yd: 1.09361,
30
+ };
31
+ /** Conversion factors to square meters. */
32
+ const AREA_TO_SQ_METERS = {
33
+ 'm²': 1,
34
+ 'cm²': 0.0001,
35
+ 'ft²': 0.092903,
36
+ 'in²': 0.00064516,
37
+ 'yd²': 0.836127,
38
+ acre: 4046.86,
39
+ ha: 10000,
40
+ };
41
+ /**
42
+ * Convert length between units.
43
+ */
44
+ export function convertLength(value, from, to) {
45
+ const meters = value * LENGTH_TO_METERS[from];
46
+ return meters * METERS_TO_LENGTH[to];
47
+ }
48
+ /**
49
+ * Convert area between units.
50
+ */
51
+ export function convertArea(value, from, to) {
52
+ const sqMeters = value * AREA_TO_SQ_METERS[from];
53
+ return sqMeters / AREA_TO_SQ_METERS[to];
54
+ }
55
+ /**
56
+ * Convert degrees to radians.
57
+ */
58
+ export function degToRad(degrees) {
59
+ return degrees * (Math.PI / 180);
60
+ }
61
+ /**
62
+ * Convert radians to degrees.
63
+ */
64
+ export function radToDeg(radians) {
65
+ return radians * (180 / Math.PI);
66
+ }
67
+ /* ================================================================
68
+ DISTANCE MEASUREMENTS
69
+ ================================================================ */
70
+ /**
71
+ * Calculate distance between two 2D points.
72
+ */
73
+ export function distance2D(a, b) {
74
+ return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);
75
+ }
76
+ /**
77
+ * Calculate distance between two 3D points.
78
+ */
79
+ export function distance3D(a, b) {
80
+ return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2 + (b.z - a.z) ** 2);
81
+ }
82
+ /**
83
+ * Calculate Manhattan distance (taxicab distance).
84
+ */
85
+ export function manhattanDistance2D(a, b) {
86
+ return Math.abs(b.x - a.x) + Math.abs(b.y - a.y);
87
+ }
88
+ /**
89
+ * Calculate Manhattan distance in 3D.
90
+ */
91
+ export function manhattanDistance3D(a, b) {
92
+ return Math.abs(b.x - a.x) + Math.abs(b.y - a.y) + Math.abs(b.z - a.z);
93
+ }
94
+ /**
95
+ * Calculate total length of a polyline.
96
+ */
97
+ export function polylineLength(points) {
98
+ if (points.length < 2) {
99
+ return 0;
100
+ }
101
+ let total = 0;
102
+ for (let i = 1; i < points.length; i++) {
103
+ total += distance2D(points[i - 1], points[i]);
104
+ }
105
+ return total;
106
+ }
107
+ /**
108
+ * Calculate perimeter of a polygon.
109
+ */
110
+ export function polygonPerimeter(points) {
111
+ if (points.length < 3) {
112
+ return 0;
113
+ }
114
+ let perimeter = polylineLength(points);
115
+ perimeter += distance2D(points[points.length - 1], points[0]);
116
+ return perimeter;
117
+ }
118
+ /* ================================================================
119
+ ANGLE MEASUREMENTS
120
+ ================================================================ */
121
+ /**
122
+ * Calculate angle between two points (from origin).
123
+ */
124
+ export function angleBetweenPoints(a, b) {
125
+ return Math.atan2(b.y - a.y, b.x - a.x);
126
+ }
127
+ /**
128
+ * Calculate angle at vertex B in triangle ABC.
129
+ */
130
+ export function angleAtVertex(a, b, c) {
131
+ const ba = { x: a.x - b.x, y: a.y - b.y };
132
+ const bc = { x: c.x - b.x, y: c.y - b.y };
133
+ const dotProduct = ba.x * bc.x + ba.y * bc.y;
134
+ const magnitudeBA = Math.sqrt(ba.x ** 2 + ba.y ** 2);
135
+ const magnitudeBC = Math.sqrt(bc.x ** 2 + bc.y ** 2);
136
+ if (magnitudeBA === 0 || magnitudeBC === 0) {
137
+ return 0;
138
+ }
139
+ const cosAngle = dotProduct / (magnitudeBA * magnitudeBC);
140
+ return Math.acos(Math.max(-1, Math.min(1, cosAngle)));
141
+ }
142
+ /**
143
+ * Calculate angle between two vectors.
144
+ */
145
+ export function angleBetweenVectors(v1, v2) {
146
+ const dot = v1.x * v2.x + v1.y * v2.y;
147
+ const mag1 = Math.sqrt(v1.x ** 2 + v1.y ** 2);
148
+ const mag2 = Math.sqrt(v2.x ** 2 + v2.y ** 2);
149
+ if (mag1 === 0 || mag2 === 0) {
150
+ return 0;
151
+ }
152
+ const cosAngle = dot / (mag1 * mag2);
153
+ return Math.acos(Math.max(-1, Math.min(1, cosAngle)));
154
+ }
155
+ /**
156
+ * Normalize angle to 0-360 degrees.
157
+ */
158
+ export function normalizeAngle(angle) {
159
+ angle = angle % 360;
160
+ if (angle < 0) {
161
+ angle += 360;
162
+ }
163
+ return angle;
164
+ }
165
+ /**
166
+ * Snap angle to nearest increment.
167
+ */
168
+ export function snapAngle(angle, increment) {
169
+ return Math.round(angle / increment) * increment;
170
+ }
171
+ /* ================================================================
172
+ AREA MEASUREMENTS
173
+ ================================================================ */
174
+ /**
175
+ * Calculate area of a polygon (Shoelace formula).
176
+ */
177
+ export function polygonArea(points) {
178
+ if (points.length < 3) {
179
+ return 0;
180
+ }
181
+ let area = 0;
182
+ const n = points.length;
183
+ for (let i = 0; i < n; i++) {
184
+ const j = (i + 1) % n;
185
+ area += points[i].x * points[j].y;
186
+ area -= points[j].x * points[i].y;
187
+ }
188
+ return Math.abs(area) / 2;
189
+ }
190
+ /**
191
+ * Calculate area of a rectangle.
192
+ */
193
+ export function rectangleArea(width, height) {
194
+ return width * height;
195
+ }
196
+ /**
197
+ * Calculate area of a circle.
198
+ */
199
+ export function circleArea(radius) {
200
+ return Math.PI * radius ** 2;
201
+ }
202
+ /**
203
+ * Calculate area of a triangle from three points.
204
+ */
205
+ export function triangleArea(a, b, c) {
206
+ return Math.abs((a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2);
207
+ }
208
+ /* ================================================================
209
+ POINT UTILITIES
210
+ ================================================================ */
211
+ /**
212
+ * Calculate midpoint between two points.
213
+ */
214
+ export function midpoint2D(a, b) {
215
+ return {
216
+ x: (a.x + b.x) / 2,
217
+ y: (a.y + b.y) / 2,
218
+ };
219
+ }
220
+ /**
221
+ * Calculate midpoint between two 3D points.
222
+ */
223
+ export function midpoint3D(a, b) {
224
+ return {
225
+ x: (a.x + b.x) / 2,
226
+ y: (a.y + b.y) / 2,
227
+ z: (a.z + b.z) / 2,
228
+ };
229
+ }
230
+ /**
231
+ * Calculate centroid of a polygon.
232
+ */
233
+ export function polygonCentroid(points) {
234
+ if (points.length === 0) {
235
+ return { x: 0, y: 0 };
236
+ }
237
+ let cx = 0, cy = 0;
238
+ let area = 0;
239
+ const n = points.length;
240
+ for (let i = 0; i < n; i++) {
241
+ const j = (i + 1) % n;
242
+ const cross = points[i].x * points[j].y - points[j].x * points[i].y;
243
+ area += cross;
244
+ cx += (points[i].x + points[j].x) * cross;
245
+ cy += (points[i].y + points[j].y) * cross;
246
+ }
247
+ area /= 2;
248
+ const factor = 1 / (6 * area);
249
+ return { x: cx * factor, y: cy * factor };
250
+ }
251
+ /**
252
+ * Interpolate between two points.
253
+ */
254
+ export function lerp2D(a, b, t) {
255
+ return {
256
+ x: a.x + (b.x - a.x) * t,
257
+ y: a.y + (b.y - a.y) * t,
258
+ };
259
+ }
260
+ /**
261
+ * Interpolate between two 3D points.
262
+ */
263
+ export function lerp3D(a, b, t) {
264
+ return {
265
+ x: a.x + (b.x - a.x) * t,
266
+ y: a.y + (b.y - a.y) * t,
267
+ z: a.z + (b.z - a.z) * t,
268
+ };
269
+ }
270
+ /**
271
+ * Project point onto line segment.
272
+ */
273
+ export function projectPointOnLine(point, lineStart, lineEnd) {
274
+ const dx = lineEnd.x - lineStart.x;
275
+ const dy = lineEnd.y - lineStart.y;
276
+ const lengthSq = dx * dx + dy * dy;
277
+ if (lengthSq === 0) {
278
+ return { point: lineStart, t: 0 };
279
+ }
280
+ let t = ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / lengthSq;
281
+ t = Math.max(0, Math.min(1, t));
282
+ return {
283
+ point: { x: lineStart.x + t * dx, y: lineStart.y + t * dy },
284
+ t,
285
+ };
286
+ }
287
+ /**
288
+ * Calculate perpendicular distance from point to line.
289
+ */
290
+ export function pointToLineDistance(point, lineStart, lineEnd) {
291
+ const { point: projected } = projectPointOnLine(point, lineStart, lineEnd);
292
+ return distance2D(point, projected);
293
+ }
294
+ /* ================================================================
295
+ FORMATTING
296
+ ================================================================ */
297
+ /**
298
+ * Format length with unit.
299
+ */
300
+ export function formatLength(value, unit = 'm', precision = 2) {
301
+ const formatted = `${value.toFixed(precision)} ${unit}`;
302
+ return { value, unit, formatted };
303
+ }
304
+ /**
305
+ * Format area with unit.
306
+ */
307
+ export function formatArea(value, unit = 'm²', precision = 2) {
308
+ const formatted = `${value.toFixed(precision)} ${unit}`;
309
+ return { value, unit, formatted };
310
+ }
311
+ /**
312
+ * Format angle.
313
+ */
314
+ export function formatAngle(radians, unit = 'deg', precision = 1) {
315
+ const value = unit === 'deg' ? radToDeg(radians) : radians;
316
+ const unitSymbol = unit === 'deg' ? '°' : ' rad';
317
+ const formatted = `${value.toFixed(precision)}${unitSymbol}`;
318
+ return { value, unit, formatted };
319
+ }
320
+ /**
321
+ * Auto-format length with appropriate unit.
322
+ */
323
+ export function autoFormatLength(meters, system = 'metric', precision = 2) {
324
+ if (system === 'metric') {
325
+ if (meters < 0.01) {
326
+ return formatLength(meters * 1000, 'mm', precision);
327
+ }
328
+ else if (meters < 1) {
329
+ return formatLength(meters * 100, 'cm', precision);
330
+ }
331
+ else {
332
+ return formatLength(meters, 'm', precision);
333
+ }
334
+ }
335
+ else {
336
+ const feet = meters * METERS_TO_LENGTH['ft'];
337
+ if (feet < 1) {
338
+ return formatLength(meters * METERS_TO_LENGTH['in'], 'in', precision);
339
+ }
340
+ else {
341
+ return formatLength(feet, 'ft', precision);
342
+ }
343
+ }
344
+ }
345
+ /**
346
+ * Auto-format area with appropriate unit.
347
+ */
348
+ export function autoFormatArea(sqMeters, system = 'metric', precision = 2) {
349
+ if (system === 'metric') {
350
+ if (sqMeters >= 10000) {
351
+ return formatArea(sqMeters / 10000, 'ha', precision);
352
+ }
353
+ else {
354
+ return formatArea(sqMeters, 'm²', precision);
355
+ }
356
+ }
357
+ else {
358
+ const sqFeet = sqMeters / AREA_TO_SQ_METERS['ft²'];
359
+ if (sqFeet >= 43560) {
360
+ return formatArea(sqMeters / AREA_TO_SQ_METERS['acre'], 'acre', precision);
361
+ }
362
+ else {
363
+ return formatArea(sqFeet, 'ft²', precision);
364
+ }
365
+ }
366
+ }
367
+ export default {
368
+ convertLength,
369
+ convertArea,
370
+ degToRad,
371
+ radToDeg,
372
+ distance2D,
373
+ distance3D,
374
+ manhattanDistance2D,
375
+ manhattanDistance3D,
376
+ polylineLength,
377
+ polygonPerimeter,
378
+ angleBetweenPoints,
379
+ angleAtVertex,
380
+ angleBetweenVectors,
381
+ normalizeAngle,
382
+ snapAngle,
383
+ polygonArea,
384
+ rectangleArea,
385
+ circleArea,
386
+ triangleArea,
387
+ midpoint2D,
388
+ midpoint3D,
389
+ polygonCentroid,
390
+ lerp2D,
391
+ lerp3D,
392
+ projectPointOnLine,
393
+ pointToLineDistance,
394
+ formatLength,
395
+ formatArea,
396
+ formatAngle,
397
+ autoFormatLength,
398
+ autoFormatArea,
399
+ };
400
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/measurement/index.ts"],"names":[],"mappings":"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"}