@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,319 @@
1
+ /**
2
+ * Grid System — Unified snap-to-grid and alignment guides.
3
+ *
4
+ * Consolidates functionality from:
5
+ * - ui-diagrams/snapGrid.ts
6
+ * - ui-3d/modelEditorUtils.ts (snapToGrid)
7
+ * - game-engine/Tilemap grid logic
8
+ *
9
+ * @module @nice2dev/spatial-core/grid
10
+ */
11
+ /* ================================================================
12
+ DEFAULT CONFIG
13
+ ================================================================ */
14
+ export const DEFAULT_GRID_CONFIG = {
15
+ cellSize: 20,
16
+ majorInterval: 5,
17
+ origin: { x: 0, y: 0 },
18
+ visible: true,
19
+ color: '#e0e0e0',
20
+ majorColor: '#b0b0b0',
21
+ opacity: 0.5,
22
+ snapModes: ['grid', 'endpoint', 'center'],
23
+ snapThreshold: 10,
24
+ angleIncrement: 15,
25
+ };
26
+ /* ================================================================
27
+ GRID UTILITIES
28
+ ================================================================ */
29
+ /**
30
+ * Snap a point to grid.
31
+ */
32
+ export function snapToGrid(point, config) {
33
+ const { cellSize, origin } = config;
34
+ return {
35
+ x: Math.round((point.x - origin.x) / cellSize) * cellSize + origin.x,
36
+ y: Math.round((point.y - origin.y) / cellSize) * cellSize + origin.y,
37
+ };
38
+ }
39
+ /**
40
+ * Snap a 3D point to grid.
41
+ */
42
+ export function snapToGrid3D(point, cellSize) {
43
+ return {
44
+ x: Math.round(point.x / cellSize) * cellSize,
45
+ y: Math.round(point.y / cellSize) * cellSize,
46
+ z: Math.round(point.z / cellSize) * cellSize,
47
+ };
48
+ }
49
+ /**
50
+ * Convert world coordinates to grid cell.
51
+ */
52
+ export function worldToCell(point, config) {
53
+ const { cellSize, origin } = config;
54
+ return {
55
+ x: Math.floor((point.x - origin.x) / cellSize),
56
+ y: Math.floor((point.y - origin.y) / cellSize),
57
+ };
58
+ }
59
+ /**
60
+ * Convert grid cell to world coordinates (cell center).
61
+ */
62
+ export function cellToWorld(cell, config) {
63
+ const { cellSize, origin } = config;
64
+ return {
65
+ x: cell.x * cellSize + origin.x + cellSize / 2,
66
+ y: cell.y * cellSize + origin.y + cellSize / 2,
67
+ };
68
+ }
69
+ /**
70
+ * Check if point is on grid line.
71
+ */
72
+ export function isOnGridLine(point, config) {
73
+ const { cellSize, origin } = config;
74
+ const relX = (point.x - origin.x) % cellSize;
75
+ const relY = (point.y - origin.y) % cellSize;
76
+ const tolerance = 0.001;
77
+ return Math.abs(relX) < tolerance || Math.abs(relY) < tolerance;
78
+ }
79
+ /* ================================================================
80
+ SNAP TO OBJECTS
81
+ ================================================================ */
82
+ /**
83
+ * Get snap points for an object (corners, center, midpoints).
84
+ */
85
+ export function getObjectSnapPoints(target) {
86
+ if (target.snapPoints) {
87
+ return target.snapPoints;
88
+ }
89
+ const { x, y, width, height } = target.bounds;
90
+ return [
91
+ // Corners
92
+ { x, y },
93
+ { x: x + width, y },
94
+ { x: x + width, y: y + height },
95
+ { x, y: y + height },
96
+ // Center
97
+ { x: x + width / 2, y: y + height / 2 },
98
+ // Edge midpoints
99
+ { x: x + width / 2, y },
100
+ { x: x + width, y: y + height / 2 },
101
+ { x: x + width / 2, y: y + height },
102
+ { x, y: y + height / 2 },
103
+ ];
104
+ }
105
+ /**
106
+ * Find nearest snap point within threshold.
107
+ */
108
+ export function findNearestSnapPoint(point, targets, threshold) {
109
+ let nearest = null;
110
+ for (const target of targets) {
111
+ const snapPoints = getObjectSnapPoints(target);
112
+ for (const sp of snapPoints) {
113
+ const dist = distance2D(point, sp);
114
+ if (dist <= threshold && (!nearest || dist < nearest.distance)) {
115
+ nearest = { point: sp, targetId: target.id, distance: dist };
116
+ }
117
+ }
118
+ }
119
+ return nearest;
120
+ }
121
+ /**
122
+ * Calculate distance between two 2D points.
123
+ */
124
+ export function distance2D(a, b) {
125
+ return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);
126
+ }
127
+ /* ================================================================
128
+ ALIGNMENT GUIDES
129
+ ================================================================ */
130
+ /**
131
+ * Generate alignment guides for a dragged object.
132
+ */
133
+ export function generateAlignmentGuides(draggedBounds, otherObjects, threshold) {
134
+ const guides = [];
135
+ const draggedCenter = {
136
+ x: draggedBounds.x + draggedBounds.width / 2,
137
+ y: draggedBounds.y + draggedBounds.height / 2,
138
+ };
139
+ for (const obj of otherObjects) {
140
+ const objCenter = {
141
+ x: obj.bounds.x + obj.bounds.width / 2,
142
+ y: obj.bounds.y + obj.bounds.height / 2,
143
+ };
144
+ // Horizontal center alignment
145
+ if (Math.abs(draggedCenter.y - objCenter.y) <= threshold) {
146
+ guides.push({
147
+ type: 'horizontal',
148
+ start: { x: Math.min(draggedBounds.x, obj.bounds.x), y: objCenter.y },
149
+ end: {
150
+ x: Math.max(draggedBounds.x + draggedBounds.width, obj.bounds.x + obj.bounds.width),
151
+ y: objCenter.y,
152
+ },
153
+ distance: Math.abs(draggedCenter.y - objCenter.y),
154
+ sourceObjectId: obj.id,
155
+ });
156
+ }
157
+ // Vertical center alignment
158
+ if (Math.abs(draggedCenter.x - objCenter.x) <= threshold) {
159
+ guides.push({
160
+ type: 'vertical',
161
+ start: { x: objCenter.x, y: Math.min(draggedBounds.y, obj.bounds.y) },
162
+ end: {
163
+ x: objCenter.x,
164
+ y: Math.max(draggedBounds.y + draggedBounds.height, obj.bounds.y + obj.bounds.height),
165
+ },
166
+ distance: Math.abs(draggedCenter.x - objCenter.x),
167
+ sourceObjectId: obj.id,
168
+ });
169
+ }
170
+ // Edge alignments (top, bottom, left, right)
171
+ const edges = [
172
+ { dragged: draggedBounds.y, other: obj.bounds.y, axis: 'horizontal' },
173
+ {
174
+ dragged: draggedBounds.y + draggedBounds.height,
175
+ other: obj.bounds.y + obj.bounds.height,
176
+ axis: 'horizontal',
177
+ },
178
+ { dragged: draggedBounds.x, other: obj.bounds.x, axis: 'vertical' },
179
+ {
180
+ dragged: draggedBounds.x + draggedBounds.width,
181
+ other: obj.bounds.x + obj.bounds.width,
182
+ axis: 'vertical',
183
+ },
184
+ ];
185
+ for (const edge of edges) {
186
+ if (Math.abs(edge.dragged - edge.other) <= threshold) {
187
+ if (edge.axis === 'horizontal') {
188
+ guides.push({
189
+ type: 'horizontal',
190
+ start: { x: Math.min(draggedBounds.x, obj.bounds.x), y: edge.other },
191
+ end: {
192
+ x: Math.max(draggedBounds.x + draggedBounds.width, obj.bounds.x + obj.bounds.width),
193
+ y: edge.other,
194
+ },
195
+ distance: Math.abs(edge.dragged - edge.other),
196
+ sourceObjectId: obj.id,
197
+ });
198
+ }
199
+ else {
200
+ guides.push({
201
+ type: 'vertical',
202
+ start: { x: edge.other, y: Math.min(draggedBounds.y, obj.bounds.y) },
203
+ end: {
204
+ x: edge.other,
205
+ y: Math.max(draggedBounds.y + draggedBounds.height, obj.bounds.y + obj.bounds.height),
206
+ },
207
+ distance: Math.abs(edge.dragged - edge.other),
208
+ sourceObjectId: obj.id,
209
+ });
210
+ }
211
+ }
212
+ }
213
+ }
214
+ // Remove duplicate guides
215
+ return deduplicateGuides(guides);
216
+ }
217
+ /**
218
+ * Remove duplicate alignment guides.
219
+ */
220
+ function deduplicateGuides(guides) {
221
+ const seen = new Set();
222
+ return guides.filter((g) => {
223
+ const key = `${g.type}-${g.start.x.toFixed(1)}-${g.start.y.toFixed(1)}-${g.end.x.toFixed(1)}-${g.end.y.toFixed(1)}`;
224
+ if (seen.has(key)) {
225
+ return false;
226
+ }
227
+ seen.add(key);
228
+ return true;
229
+ });
230
+ }
231
+ /* ================================================================
232
+ UNIFIED SNAP FUNCTION
233
+ ================================================================ */
234
+ /**
235
+ * Perform intelligent snapping based on enabled modes.
236
+ */
237
+ export function performSnap(point, targets, config) {
238
+ const result = {
239
+ position: { ...point },
240
+ snapped: false,
241
+ snapMode: null,
242
+ guides: [],
243
+ };
244
+ const { snapModes, snapThreshold } = config;
245
+ // Priority: object snapping > grid snapping
246
+ if (snapModes.includes('endpoint') ||
247
+ snapModes.includes('center') ||
248
+ snapModes.includes('midpoint')) {
249
+ const nearest = findNearestSnapPoint(point, targets, snapThreshold);
250
+ if (nearest) {
251
+ result.position = nearest.point;
252
+ result.snapped = true;
253
+ result.snapMode = 'endpoint';
254
+ result.targetObjectId = nearest.targetId;
255
+ return result;
256
+ }
257
+ }
258
+ // Grid snapping
259
+ if (snapModes.includes('grid')) {
260
+ const gridSnapped = snapToGrid(point, config);
261
+ const gridDist = distance2D(point, gridSnapped);
262
+ if (gridDist <= snapThreshold) {
263
+ result.position = gridSnapped;
264
+ result.snapped = true;
265
+ result.snapMode = 'grid';
266
+ return result;
267
+ }
268
+ }
269
+ return result;
270
+ }
271
+ /* ================================================================
272
+ GRID RENDERING HELPERS
273
+ ================================================================ */
274
+ /**
275
+ * Generate grid lines for rendering.
276
+ */
277
+ export function generateGridLines(viewport, config) {
278
+ const lines = [];
279
+ const { cellSize, majorInterval, origin } = config;
280
+ // Calculate visible range
281
+ const startX = Math.floor((viewport.x - origin.x) / cellSize) * cellSize + origin.x;
282
+ const startY = Math.floor((viewport.y - origin.y) / cellSize) * cellSize + origin.y;
283
+ const endX = viewport.x + viewport.width;
284
+ const endY = viewport.y + viewport.height;
285
+ // Vertical lines
286
+ for (let x = startX; x <= endX; x += cellSize) {
287
+ const cellIndex = Math.round((x - origin.x) / cellSize);
288
+ lines.push({
289
+ start: { x, y: viewport.y },
290
+ end: { x, y: endY },
291
+ isMajor: cellIndex % majorInterval === 0,
292
+ });
293
+ }
294
+ // Horizontal lines
295
+ for (let y = startY; y <= endY; y += cellSize) {
296
+ const cellIndex = Math.round((y - origin.y) / cellSize);
297
+ lines.push({
298
+ start: { x: viewport.x, y },
299
+ end: { x: endX, y },
300
+ isMajor: cellIndex % majorInterval === 0,
301
+ });
302
+ }
303
+ return lines;
304
+ }
305
+ export default {
306
+ snapToGrid,
307
+ snapToGrid3D,
308
+ worldToCell,
309
+ cellToWorld,
310
+ isOnGridLine,
311
+ getObjectSnapPoints,
312
+ findNearestSnapPoint,
313
+ distance2D,
314
+ generateAlignmentGuides,
315
+ performSnap,
316
+ generateGridLines,
317
+ DEFAULT_GRID_CONFIG,
318
+ };
319
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/grid/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Import Worker — Dedicated Web Worker for DXF/SVG/IFC parsing.
3
+ *
4
+ * Offloads heavy file parsing to a separate thread to avoid blocking the UI.
5
+ *
6
+ * Usage:
7
+ * - Include this file as a module worker
8
+ * - Send { type: 'import', content, format, options } message
9
+ * - Receive { type: 'result', result } or { type: 'progress', progress } messages
10
+ */
11
+ import type { FileImportFormat, FileImportOptions, FileImportResult } from './index';
12
+ /** Worker input message. */
13
+ export interface ImportWorkerInput {
14
+ type: 'import';
15
+ id: string;
16
+ content: string;
17
+ format: FileImportFormat;
18
+ options?: Partial<FileImportOptions>;
19
+ }
20
+ /** Worker output message. */
21
+ export interface ImportWorkerOutput {
22
+ type: 'result' | 'progress' | 'error';
23
+ id: string;
24
+ result?: FileImportResult;
25
+ progress?: number;
26
+ error?: string;
27
+ }
28
+ //# sourceMappingURL=import.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.worker.d.ts","sourceRoot":"","sources":["../../src/import/import.worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAMrF,4BAA4B;AAC5B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxC;AAED,6BAA6B;AAC7B,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Import Worker — Dedicated Web Worker for DXF/SVG/IFC parsing.
3
+ *
4
+ * Offloads heavy file parsing to a separate thread to avoid blocking the UI.
5
+ *
6
+ * Usage:
7
+ * - Include this file as a module worker
8
+ * - Send { type: 'import', content, format, options } message
9
+ * - Receive { type: 'result', result } or { type: 'progress', progress } messages
10
+ */
11
+ import { importFile } from './index';
12
+ /* ================================================================
13
+ WORKER MESSAGE HANDLER
14
+ ================================================================ */
15
+ // Handle incoming messages
16
+ self.onmessage = function (event) {
17
+ const { type, id, content, format, options } = event.data;
18
+ if (type !== 'import') {
19
+ self.postMessage({
20
+ type: 'error',
21
+ id,
22
+ error: `Unknown message type: ${type}`,
23
+ });
24
+ return;
25
+ }
26
+ try {
27
+ // Send initial progress
28
+ self.postMessage({
29
+ type: 'progress',
30
+ id,
31
+ progress: 0,
32
+ });
33
+ // Perform the import
34
+ const result = importFile(content, format, options ?? {});
35
+ // Send result
36
+ self.postMessage({
37
+ type: 'result',
38
+ id,
39
+ result,
40
+ });
41
+ }
42
+ catch (err) {
43
+ self.postMessage({
44
+ type: 'error',
45
+ id,
46
+ error: err instanceof Error ? err.message : 'Unknown error in import worker',
47
+ });
48
+ }
49
+ };
50
+ // Report ready state
51
+ self.postMessage({ type: 'ready' });
52
+ //# sourceMappingURL=import.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.worker.js","sourceRoot":"","sources":["../../src/import/import.worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAyBrC;;sEAEsE;AAEtE,2BAA2B;AAC3B,IAAI,CAAC,SAAS,GAAG,UAAU,KAAsC;IAC7D,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAE1D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC;YACb,IAAI,EAAE,OAAO;YACb,EAAE;YACF,KAAK,EAAE,yBAAyB,IAAI,EAAE;SACnB,CAAC,CAAC;QACzB,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC;YACb,IAAI,EAAE,UAAU;YAChB,EAAE;YACF,QAAQ,EAAE,CAAC;SACQ,CAAC,CAAC;QAEzB,qBAAqB;QACrB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAE1D,cAAc;QACd,IAAI,CAAC,WAAW,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,EAAE;YACF,MAAM;SACa,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,WAAW,CAAC;YACb,IAAI,EAAE,OAAO;YACb,EAAE;YACF,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC;SACzD,CAAC,CAAC;IAC7B,CAAC;AACL,CAAC,CAAC;AAEF,qBAAqB;AACrB,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Import — Import external formats into FloorPlanDocument.
3
+ *
4
+ * Supported formats:
5
+ * - DXF (AutoCAD Drawing Exchange Format)
6
+ * - SVG (Scalable Vector Graphics)
7
+ * - GeoJSON (Geographic JSON)
8
+ * - IFC (Industry Foundation Classes) — basic support
9
+ *
10
+ * @module @nice2dev/spatial-core/import
11
+ */
12
+ import type { FloorPlanDocument } from '../floor-plan';
13
+ import type { Point2D } from '../grid';
14
+ /** Import format. */
15
+ export type FileImportFormat = 'dxf' | 'svg' | 'geojson' | 'ifc';
16
+ /** Import options. */
17
+ export interface FileImportOptions {
18
+ /** Source format. */
19
+ format: FileImportFormat;
20
+ /** Default unit if not specified in file ('metric' or 'imperial'). */
21
+ defaultUnits?: 'metric' | 'imperial';
22
+ /** Scale factor to apply during import. */
23
+ scaleFactor?: number;
24
+ /** Origin offset. */
25
+ originOffset?: Point2D;
26
+ /** Target floor ID (if importing to existing document). */
27
+ targetFloorId?: string;
28
+ /** Layer name mappings. */
29
+ layerMappings?: Record<string, string>;
30
+ /** Import specific layers only (null = all). */
31
+ includeLayers?: string[] | null;
32
+ /** Exclude specific layers. */
33
+ excludeLayers?: string[];
34
+ /** Convert closed polylines to zones. */
35
+ convertClosedPolylinesToZones?: boolean;
36
+ /** Minimum area for zone detection (sq units). */
37
+ minZoneArea?: number;
38
+ }
39
+ /** File import result. */
40
+ export interface FileImportResult {
41
+ /** Whether import was successful. */
42
+ success: boolean;
43
+ /** Resulting document (or partial on error). */
44
+ document?: FloorPlanDocument;
45
+ /** Import warnings. */
46
+ warnings: FileImportWarning[];
47
+ /** Import errors. */
48
+ errors: FileImportError[];
49
+ /** Statistics. */
50
+ stats: FileImportStats;
51
+ }
52
+ /** Import warning. */
53
+ export interface FileImportWarning {
54
+ code: string;
55
+ message: string;
56
+ context?: Record<string, unknown>;
57
+ }
58
+ /** Import error. */
59
+ export interface FileImportError {
60
+ code: string;
61
+ message: string;
62
+ fatal: boolean;
63
+ context?: Record<string, unknown>;
64
+ }
65
+ /** Import statistics. */
66
+ export interface FileImportStats {
67
+ /** Number of wall objects imported. */
68
+ wallsImported: number;
69
+ /** Number of zones imported. */
70
+ zonesImported: number;
71
+ /** Number of other objects imported. */
72
+ objectsImported: number;
73
+ /** Number of layers found. */
74
+ layersFound: number;
75
+ /** Number of entities skipped. */
76
+ entitiesSkipped: number;
77
+ /** Import time in ms. */
78
+ importTimeMs: number;
79
+ }
80
+ /**
81
+ * Import DXF file content.
82
+ */
83
+ export declare function importDXF(content: string, options?: Partial<FileImportOptions>): FileImportResult;
84
+ /**
85
+ * Import SVG file content.
86
+ */
87
+ export declare function importSVG(content: string, options?: Partial<FileImportOptions>): FileImportResult;
88
+ /**
89
+ * Import GeoJSON file content.
90
+ */
91
+ export declare function importGeoJSON(content: string, options?: Partial<FileImportOptions>): FileImportResult;
92
+ /**
93
+ * Import IFC file content.
94
+ * Note: This is a very basic implementation that handles STEP-formatted IFC.
95
+ * For full IFC support, use a dedicated IFC library like web-ifc.
96
+ */
97
+ export declare function importIFC(content: string, options?: Partial<FileImportOptions>): FileImportResult;
98
+ /**
99
+ * Import file content in specified format.
100
+ */
101
+ export declare function importFile(content: string, format: FileImportFormat, options?: Partial<FileImportOptions>): FileImportResult;
102
+ /**
103
+ * Detect import format from file extension or content.
104
+ */
105
+ export declare function detectFileImportFormat(filename: string, content?: string): FileImportFormat | null;
106
+ /**
107
+ * Import from file (browser File API).
108
+ */
109
+ export declare function importFromBrowserFile(file: File, options?: Partial<FileImportOptions>): Promise<FileImportResult>;
110
+ export { importFileInWorker, importFileAsync, isWorkerSupported, terminateImportWorker, createImportWorker, type WorkerImportOptions, } from './workerImport';
111
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"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"}