@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.
- package/README.md +160 -0
- package/dist/bim/index.d.ts +366 -0
- package/dist/bim/index.d.ts.map +1 -0
- package/dist/bim/index.js +60 -0
- package/dist/bim/index.js.map +1 -0
- package/dist/cad/index.d.ts +329 -0
- package/dist/cad/index.d.ts.map +1 -0
- package/dist/cad/index.js +124 -0
- package/dist/cad/index.js.map +1 -0
- package/dist/ecad/index.d.ts +316 -0
- package/dist/ecad/index.d.ts.map +1 -0
- package/dist/ecad/index.js +11 -0
- package/dist/ecad/index.js.map +1 -0
- package/dist/export/index.d.ts +93 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +522 -0
- package/dist/export/index.js.map +1 -0
- package/dist/floor-plan/index.d.ts +248 -0
- package/dist/floor-plan/index.d.ts.map +1 -0
- package/dist/floor-plan/index.js +228 -0
- package/dist/floor-plan/index.js.map +1 -0
- package/dist/grid/index.d.ts +160 -0
- package/dist/grid/index.d.ts.map +1 -0
- package/dist/grid/index.js +319 -0
- package/dist/grid/index.js.map +1 -0
- package/dist/import/import.worker.d.ts +28 -0
- package/dist/import/import.worker.d.ts.map +1 -0
- package/dist/import/import.worker.js +52 -0
- package/dist/import/import.worker.js.map +1 -0
- package/dist/import/index.d.ts +111 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +1092 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/workerImport.d.ts +56 -0
- package/dist/import/workerImport.d.ts.map +1 -0
- package/dist/import/workerImport.js +207 -0
- package/dist/import/workerImport.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/interior/index.d.ts +241 -0
- package/dist/interior/index.d.ts.map +1 -0
- package/dist/interior/index.js +101 -0
- package/dist/interior/index.js.map +1 -0
- package/dist/measurement/index.d.ts +186 -0
- package/dist/measurement/index.d.ts.map +1 -0
- package/dist/measurement/index.js +400 -0
- package/dist/measurement/index.js.map +1 -0
- package/dist/objects/index.d.ts +288 -0
- package/dist/objects/index.d.ts.map +1 -0
- package/dist/objects/index.js +463 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/serialization/index.d.ts +421 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +412 -0
- package/dist/serialization/index.js.map +1 -0
- package/dist/topology/index.d.ts +252 -0
- package/dist/topology/index.d.ts.map +1 -0
- package/dist/topology/index.js +525 -0
- package/dist/topology/index.js.map +1 -0
- package/dist/transitions/index.d.ts +141 -0
- package/dist/transitions/index.d.ts.map +1 -0
- package/dist/transitions/index.js +160 -0
- package/dist/transitions/index.js.map +1 -0
- package/dist/unified/index.d.ts +225 -0
- package/dist/unified/index.d.ts.map +1 -0
- package/dist/unified/index.js +474 -0
- package/dist/unified/index.js.map +1 -0
- package/dist/virtualization/QuadTree.d.ts +68 -0
- package/dist/virtualization/QuadTree.d.ts.map +1 -0
- package/dist/virtualization/QuadTree.js +228 -0
- package/dist/virtualization/QuadTree.js.map +1 -0
- package/dist/virtualization/ViewportCulling.d.ts +92 -0
- package/dist/virtualization/ViewportCulling.d.ts.map +1 -0
- package/dist/virtualization/ViewportCulling.js +123 -0
- package/dist/virtualization/ViewportCulling.js.map +1 -0
- package/dist/virtualization/index.d.ts +9 -0
- package/dist/virtualization/index.d.ts.map +1 -0
- package/dist/virtualization/index.js +9 -0
- package/dist/virtualization/index.js.map +1 -0
- 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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"}
|