@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,522 @@
1
+ /**
2
+ * Export Module — Export spatial documents to various formats.
3
+ *
4
+ * Supports:
5
+ * - .nsp.json (NiceToDev Spatial Plan) — native format
6
+ * - SVG — Scalable Vector Graphics
7
+ * - DXF — AutoCAD Drawing Exchange Format (basic)
8
+ * - PNG/PDF — requires rendering context (provided by React component)
9
+ *
10
+ * @module @nice2dev/spatial-core/export
11
+ */
12
+ import { serialize } from '../serialization';
13
+ /* ================================================================
14
+ NSP JSON EXPORT
15
+ ================================================================ */
16
+ /**
17
+ * Export document to .nsp.json format.
18
+ */
19
+ export function exportToNSP(document, options = {}) {
20
+ const filteredDoc = filterDocument(document, options);
21
+ const json = serialize(filteredDoc);
22
+ const blob = new Blob([json], { type: 'application/json' });
23
+ const docName = document.metadata?.name || 'document';
24
+ return {
25
+ format: 'nsp',
26
+ filename: `${docName}.nsp.json`,
27
+ mimeType: 'application/json',
28
+ data: blob,
29
+ size: blob.size,
30
+ };
31
+ }
32
+ /* ================================================================
33
+ SVG EXPORT
34
+ ================================================================ */
35
+ /**
36
+ * SVG namespace.
37
+ */
38
+ const SVG_NS = 'http://www.w3.org/2000/svg';
39
+ /**
40
+ * Export document to SVG format.
41
+ */
42
+ export function exportToSVG(document, options = {}) {
43
+ const { floorIds, includeGrid = false, scale = 1, backgroundColor } = options;
44
+ // Get floors to export
45
+ const floors = floorIds
46
+ ? document.floors.filter((f) => floorIds.includes(f.id))
47
+ : document.floors;
48
+ if (floors.length === 0) {
49
+ throw new Error('No floors to export');
50
+ }
51
+ // Calculate bounds
52
+ const bounds = calculateDocumentBounds(floors);
53
+ const width = (bounds.maxX - bounds.minX) * scale;
54
+ const height = (bounds.maxY - bounds.minY) * scale;
55
+ const docName = document.metadata?.name || 'Floor Plan';
56
+ // Build SVG
57
+ let svg = `<?xml version="1.0" encoding="UTF-8"?>
58
+ <svg xmlns="${SVG_NS}"
59
+ viewBox="${bounds.minX} ${bounds.minY} ${bounds.maxX - bounds.minX} ${bounds.maxY - bounds.minY}"
60
+ width="${width}"
61
+ height="${height}"
62
+ style="background: ${backgroundColor || 'transparent'}">
63
+ <title>${docName}</title>
64
+ <desc>Exported from NiceToDev Spatial Editor</desc>
65
+ <defs>
66
+ <style>
67
+ .wall { stroke: #1e293b; stroke-width: 3; fill: none; }
68
+ .zone { fill-opacity: 0.3; stroke-width: 1; }
69
+ .device { fill: #3b82f6; }
70
+ .furniture { fill: #a3e635; stroke: #84cc16; }
71
+ .grid { stroke: #e2e8f0; stroke-width: 0.5; }
72
+ .dimension { stroke: #64748b; stroke-width: 1; fill: none; }
73
+ .dimension-text { font-family: sans-serif; font-size: 10px; fill: #64748b; }
74
+ .annotation { font-family: sans-serif; font-size: 12px; fill: #334155; }
75
+ </style>
76
+ </defs>
77
+ `;
78
+ // Render each floor
79
+ for (const floor of floors) {
80
+ svg += ` <g id="${floor.id}" class="floor" data-name="${floor.name}">
81
+ `;
82
+ // Grid
83
+ if (includeGrid) {
84
+ svg += renderGridSVG(bounds);
85
+ }
86
+ // Render layers
87
+ for (const layer of floor.layers) {
88
+ if (!shouldIncludeLayer(layer.name, options)) {
89
+ continue;
90
+ }
91
+ svg += ` <g id="${layer.id}" class="layer-${layer.name}">
92
+ `;
93
+ for (const obj of layer.objects) {
94
+ svg += renderObjectSVG(obj);
95
+ }
96
+ svg += ` </g>
97
+ `;
98
+ }
99
+ svg += ` </g>
100
+ `;
101
+ }
102
+ svg += `</svg>`;
103
+ const blob = new Blob([svg], { type: 'image/svg+xml' });
104
+ const filename = document.metadata?.name || 'document';
105
+ return {
106
+ format: 'svg',
107
+ filename: `${filename}.svg`,
108
+ mimeType: 'image/svg+xml',
109
+ data: blob,
110
+ size: blob.size,
111
+ };
112
+ }
113
+ /**
114
+ * Render grid lines as SVG.
115
+ */
116
+ function renderGridSVG(bounds) {
117
+ const gridSize = 20;
118
+ let svg = ' <g class="grid">\n';
119
+ for (let x = Math.floor(bounds.minX / gridSize) * gridSize; x <= bounds.maxX; x += gridSize) {
120
+ svg += ` <line x1="${x}" y1="${bounds.minY}" x2="${x}" y2="${bounds.maxY}" />\n`;
121
+ }
122
+ for (let y = Math.floor(bounds.minY / gridSize) * gridSize; y <= bounds.maxY; y += gridSize) {
123
+ svg += ` <line x1="${bounds.minX}" y1="${y}" x2="${bounds.maxX}" y2="${y}" />\n`;
124
+ }
125
+ svg += ' </g>\n';
126
+ return svg;
127
+ }
128
+ /**
129
+ * Render a single object as SVG.
130
+ */
131
+ function renderObjectSVG(obj) {
132
+ const typedObj = obj;
133
+ // Zone (has boundary polygon)
134
+ if (typedObj.boundary && Array.isArray(typedObj.boundary) && typedObj.boundary.length >= 3) {
135
+ const pathData = typedObj.boundary
136
+ .map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`)
137
+ .join(' ') + ' Z';
138
+ return ` <path d="${pathData}" class="zone" fill="${typedObj.color || '#dbeafe'}" stroke="${typedObj.color || '#3b82f6'}" />\n`;
139
+ }
140
+ // Wall (has start/end points)
141
+ if (typedObj.start && typedObj.end) {
142
+ return ` <line x1="${typedObj.start.x}" y1="${typedObj.start.y}" x2="${typedObj.end.x}" y2="${typedObj.end.y}" class="wall" stroke-width="${typedObj.thickness || 3}" />\n`;
143
+ }
144
+ // Device / Furniture (render as rectangle/circle based on bounds)
145
+ if (obj.bounds) {
146
+ const { x, y, width, height } = obj.bounds;
147
+ const cx = x + width / 2;
148
+ const cy = y + height / 2;
149
+ if (obj.category === 'smart-home') {
150
+ return ` <circle cx="${cx}" cy="${cy}" r="${Math.min(width, height) / 2}" class="device" />\n`;
151
+ }
152
+ return ` <rect x="${x}" y="${y}" width="${width}" height="${height}" class="${obj.category || 'object'}" />\n`;
153
+ }
154
+ return '';
155
+ }
156
+ /* ================================================================
157
+ DXF EXPORT
158
+ ================================================================ */
159
+ /**
160
+ * Export document to DXF format (basic AutoCAD compatibility).
161
+ */
162
+ export function exportToDXF(document, options = {}) {
163
+ const { floorIds, scale = 1 } = options;
164
+ const floors = floorIds
165
+ ? document.floors.filter((f) => floorIds.includes(f.id))
166
+ : document.floors;
167
+ if (floors.length === 0) {
168
+ throw new Error('No floors to export');
169
+ }
170
+ let dxf = '';
171
+ // DXF Header
172
+ dxf += `0
173
+ SECTION
174
+ 2
175
+ HEADER
176
+ 9
177
+ $ACADVER
178
+ 1
179
+ AC1015
180
+ 9
181
+ $INSUNITS
182
+ 70
183
+ 4
184
+ 0
185
+ ENDSEC
186
+ `;
187
+ // DXF Tables (layers)
188
+ dxf += `0
189
+ SECTION
190
+ 2
191
+ TABLES
192
+ 0
193
+ TABLE
194
+ 2
195
+ LAYER
196
+ `;
197
+ // Create layer entries
198
+ const layerNames = new Set();
199
+ for (const floor of floors) {
200
+ for (const layer of floor.layers) {
201
+ layerNames.add(layer.name);
202
+ }
203
+ }
204
+ for (const layerName of layerNames) {
205
+ dxf += `0
206
+ LAYER
207
+ 2
208
+ ${layerName.toUpperCase()}
209
+ 70
210
+ 0
211
+ 62
212
+ 7
213
+ 6
214
+ CONTINUOUS
215
+ `;
216
+ }
217
+ dxf += `0
218
+ ENDTAB
219
+ 0
220
+ ENDSEC
221
+ `;
222
+ // DXF Entities
223
+ dxf += `0
224
+ SECTION
225
+ 2
226
+ ENTITIES
227
+ `;
228
+ for (const floor of floors) {
229
+ for (const layer of floor.layers) {
230
+ if (!shouldIncludeLayer(layer.name, options)) {
231
+ continue;
232
+ }
233
+ const dxfLayerName = layer.name.toUpperCase();
234
+ for (const obj of layer.objects) {
235
+ dxf += renderObjectDXF(obj, dxfLayerName, scale);
236
+ }
237
+ }
238
+ }
239
+ dxf += `0
240
+ ENDSEC
241
+ 0
242
+ EOF
243
+ `;
244
+ const blob = new Blob([dxf], { type: 'application/dxf' });
245
+ const filename = document.metadata?.name || 'document';
246
+ return {
247
+ format: 'dxf',
248
+ filename: `${filename}.dxf`,
249
+ mimeType: 'application/dxf',
250
+ data: blob,
251
+ size: blob.size,
252
+ };
253
+ }
254
+ /**
255
+ * Render a single object as DXF entities.
256
+ */
257
+ function renderObjectDXF(obj, layerName, scale) {
258
+ const typedObj = obj;
259
+ // Zone (polyline from boundary)
260
+ if (typedObj.boundary && Array.isArray(typedObj.boundary) && typedObj.boundary.length >= 3) {
261
+ let dxf = `0
262
+ LWPOLYLINE
263
+ 8
264
+ ${layerName}
265
+ 90
266
+ ${typedObj.boundary.length}
267
+ 70
268
+ 1
269
+ `;
270
+ for (const p of typedObj.boundary) {
271
+ dxf += `10
272
+ ${p.x * scale}
273
+ 20
274
+ ${p.y * scale}
275
+ `;
276
+ }
277
+ return dxf;
278
+ }
279
+ // Wall (line)
280
+ if (typedObj.start && typedObj.end) {
281
+ return `0
282
+ LINE
283
+ 8
284
+ ${layerName}
285
+ 10
286
+ ${typedObj.start.x * scale}
287
+ 20
288
+ ${typedObj.start.y * scale}
289
+ 11
290
+ ${typedObj.end.x * scale}
291
+ 21
292
+ ${typedObj.end.y * scale}
293
+ `;
294
+ }
295
+ // Device / Object (circle or rectangle)
296
+ if (obj.bounds) {
297
+ const { x, y, width, height } = obj.bounds;
298
+ const cx = (x + width / 2) * scale;
299
+ const cy = (y + height / 2) * scale;
300
+ if (obj.category === 'smart-home') {
301
+ const radius = (Math.min(width, height) / 2) * scale;
302
+ return `0
303
+ CIRCLE
304
+ 8
305
+ ${layerName}
306
+ 10
307
+ ${cx}
308
+ 20
309
+ ${cy}
310
+ 40
311
+ ${radius}
312
+ `;
313
+ }
314
+ // Rectangle as polyline
315
+ return `0
316
+ LWPOLYLINE
317
+ 8
318
+ ${layerName}
319
+ 90
320
+ 4
321
+ 70
322
+ 1
323
+ 10
324
+ ${x * scale}
325
+ 20
326
+ ${y * scale}
327
+ 10
328
+ ${(x + width) * scale}
329
+ 20
330
+ ${y * scale}
331
+ 10
332
+ ${(x + width) * scale}
333
+ 20
334
+ ${(y + height) * scale}
335
+ 10
336
+ ${x * scale}
337
+ 20
338
+ ${(y + height) * scale}
339
+ `;
340
+ }
341
+ return '';
342
+ }
343
+ /**
344
+ * Calculate document bounds.
345
+ */
346
+ function calculateDocumentBounds(floors) {
347
+ let minX = Infinity;
348
+ let minY = Infinity;
349
+ let maxX = -Infinity;
350
+ let maxY = -Infinity;
351
+ for (const floor of floors) {
352
+ // Use floor bounds if available
353
+ if (floor.bounds) {
354
+ minX = Math.min(minX, floor.bounds.x);
355
+ minY = Math.min(minY, floor.bounds.y);
356
+ maxX = Math.max(maxX, floor.bounds.x + floor.bounds.width);
357
+ maxY = Math.max(maxY, floor.bounds.y + floor.bounds.height);
358
+ }
359
+ // Also check object bounds
360
+ for (const layer of floor.layers) {
361
+ for (const obj of layer.objects) {
362
+ if (obj.bounds) {
363
+ minX = Math.min(minX, obj.bounds.x);
364
+ minY = Math.min(minY, obj.bounds.y);
365
+ maxX = Math.max(maxX, obj.bounds.x + obj.bounds.width);
366
+ maxY = Math.max(maxY, obj.bounds.y + obj.bounds.height);
367
+ }
368
+ // Check for boundary polygon
369
+ const typedObj = obj;
370
+ if (typedObj.boundary) {
371
+ for (const p of typedObj.boundary) {
372
+ minX = Math.min(minX, p.x);
373
+ minY = Math.min(minY, p.y);
374
+ maxX = Math.max(maxX, p.x);
375
+ maxY = Math.max(maxY, p.y);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ }
381
+ // Fallback to default size
382
+ if (!isFinite(minX)) {
383
+ minX = 0;
384
+ }
385
+ if (!isFinite(minY)) {
386
+ minY = 0;
387
+ }
388
+ if (!isFinite(maxX)) {
389
+ maxX = 1000;
390
+ }
391
+ if (!isFinite(maxY)) {
392
+ maxY = 800;
393
+ }
394
+ return { minX, minY, maxX, maxY };
395
+ }
396
+ /**
397
+ * Filter document based on export options.
398
+ */
399
+ function filterDocument(document, options) {
400
+ const { floorIds, layerNames } = options;
401
+ let floors = document.floors;
402
+ if (floorIds && floorIds.length > 0) {
403
+ floors = floors.filter((f) => floorIds.includes(f.id));
404
+ }
405
+ if (layerNames && layerNames.length > 0) {
406
+ floors = floors.map((floor) => ({
407
+ ...floor,
408
+ layers: floor.layers.filter((l) => layerNames.includes(l.name)),
409
+ }));
410
+ }
411
+ return { ...document, floors };
412
+ }
413
+ /**
414
+ * Check if layer should be included in export.
415
+ */
416
+ function shouldIncludeLayer(layerName, options) {
417
+ const { layerNames, includeGrid, includeDimensions } = options;
418
+ // Skip grid layer unless explicitly included
419
+ if (layerName === 'grid' && !includeGrid) {
420
+ return false;
421
+ }
422
+ // Skip dimensions unless explicitly included
423
+ if ((layerName === 'dimensions' || layerName === 'annotations') && includeDimensions === false) {
424
+ return false;
425
+ }
426
+ // If layerNames specified, only include those
427
+ if (layerNames && layerNames.length > 0) {
428
+ return layerNames.includes(layerName);
429
+ }
430
+ return true;
431
+ }
432
+ /* ================================================================
433
+ DOWNLOAD HELPER
434
+ ================================================================ */
435
+ /**
436
+ * Trigger download of export result in browser.
437
+ */
438
+ export function downloadExport(result) {
439
+ const blob = result.data instanceof Blob ? result.data : new Blob([result.data], { type: result.mimeType });
440
+ const url = URL.createObjectURL(blob);
441
+ const link = document.createElement('a');
442
+ link.href = url;
443
+ link.download = result.filename;
444
+ document.body.appendChild(link);
445
+ link.click();
446
+ document.body.removeChild(link);
447
+ URL.revokeObjectURL(url);
448
+ }
449
+ /**
450
+ * Export document to specified format and trigger download.
451
+ */
452
+ export function exportAndDownload(doc, format, options = {}) {
453
+ let result;
454
+ switch (format) {
455
+ case 'nsp':
456
+ result = exportToNSP(doc, options);
457
+ break;
458
+ case 'svg':
459
+ result = exportToSVG(doc, options);
460
+ break;
461
+ case 'dxf':
462
+ result = exportToDXF(doc, options);
463
+ break;
464
+ case 'png':
465
+ case 'pdf':
466
+ throw new Error(`${format.toUpperCase()} export requires rendering context. Use exportFromCanvas() instead.`);
467
+ default:
468
+ throw new Error(`Unsupported export format: ${format}`);
469
+ }
470
+ downloadExport(result);
471
+ return result;
472
+ }
473
+ /**
474
+ * Export SVG element to PNG using canvas.
475
+ * Call this from React component with access to DOM.
476
+ */
477
+ export async function exportSVGToPNG(svgElement, filename, options = {}) {
478
+ const { dpi = 96, backgroundColor = '#ffffff' } = options;
479
+ const svgData = new XMLSerializer().serializeToString(svgElement);
480
+ const svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' });
481
+ const svgUrl = URL.createObjectURL(svgBlob);
482
+ return new Promise((resolve, reject) => {
483
+ const img = new Image();
484
+ img.onload = () => {
485
+ const scale = dpi / 96;
486
+ const canvas = document.createElement('canvas');
487
+ canvas.width = img.width * scale;
488
+ canvas.height = img.height * scale;
489
+ const ctx = canvas.getContext('2d');
490
+ if (!ctx) {
491
+ reject(new Error('Could not get canvas context'));
492
+ return;
493
+ }
494
+ // Fill background
495
+ ctx.fillStyle = backgroundColor;
496
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
497
+ // Draw SVG
498
+ ctx.scale(scale, scale);
499
+ ctx.drawImage(img, 0, 0);
500
+ canvas.toBlob((blob) => {
501
+ URL.revokeObjectURL(svgUrl);
502
+ if (!blob) {
503
+ reject(new Error('Could not create PNG blob'));
504
+ return;
505
+ }
506
+ resolve({
507
+ format: 'png',
508
+ filename: filename.endsWith('.png') ? filename : `${filename}.png`,
509
+ mimeType: 'image/png',
510
+ data: blob,
511
+ size: blob.size,
512
+ });
513
+ }, 'image/png');
514
+ };
515
+ img.onerror = () => {
516
+ URL.revokeObjectURL(svgUrl);
517
+ reject(new Error('Failed to load SVG for PNG export'));
518
+ };
519
+ img.src = svgUrl;
520
+ });
521
+ }
522
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/export/index.ts"],"names":[],"mappings":"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"}