@pascal-app/mcp 0.3.0 → 0.3.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 (40) hide show
  1. package/README.md +71 -0
  2. package/dist/bin/pascal-mcp.js +0 -0
  3. package/dist/bridge/scene-bridge.d.ts.map +1 -1
  4. package/dist/bridge/scene-bridge.js +6 -0
  5. package/dist/operations/scene-operations.js +1 -0
  6. package/dist/resources/constraints.js +1 -1
  7. package/dist/tools/construction-tools.d.ts +21 -21
  8. package/dist/tools/construction-tools.d.ts.map +1 -1
  9. package/dist/tools/construction-tools.js +45 -19
  10. package/dist/tools/create-level.d.ts +1 -1
  11. package/dist/tools/create-level.d.ts.map +1 -1
  12. package/dist/tools/create-level.js +5 -1
  13. package/dist/tools/create-wall.d.ts +2 -2
  14. package/dist/tools/create-wall.d.ts.map +1 -1
  15. package/dist/tools/create-wall.js +6 -2
  16. package/dist/tools/cut-opening.d.ts +3 -3
  17. package/dist/tools/cut-opening.d.ts.map +1 -1
  18. package/dist/tools/cut-opening.js +3 -2
  19. package/dist/tools/find-nodes.d.ts +2 -2
  20. package/dist/tools/find-nodes.js +1 -1
  21. package/dist/tools/measurement.d.ts +37 -0
  22. package/dist/tools/measurement.d.ts.map +1 -0
  23. package/dist/tools/measurement.js +94 -0
  24. package/dist/tools/photo-to-scene/photo-to-scene.d.ts +2 -2
  25. package/dist/tools/photo-to-scene/photo-to-scene.d.ts.map +1 -1
  26. package/dist/tools/photo-to-scene/photo-to-scene.js +9 -2
  27. package/dist/tools/place-item.d.ts +1 -1
  28. package/dist/tools/place-item.d.ts.map +1 -1
  29. package/dist/tools/place-item.js +2 -1
  30. package/dist/tools/room-tools.d.ts +8 -8
  31. package/dist/tools/room-tools.d.ts.map +1 -1
  32. package/dist/tools/room-tools.js +17 -7
  33. package/dist/tools/scene-query.js +2 -2
  34. package/examples/coordinate-conventions-demo.json +968 -0
  35. package/examples/coordinate-conventions-demo.md +68 -0
  36. package/examples/embed-in-agent.ts +82 -0
  37. package/examples/generate-apartment.md +242 -0
  38. package/examples/photo-to-scene.md +119 -0
  39. package/examples/renovate-from-photos.md +202 -0
  40. package/package.json +8 -6
@@ -0,0 +1,968 @@
1
+ {
2
+ "nodes": {
3
+ "slab_demo_a": {
4
+ "id": "slab_demo_a",
5
+ "name": "DEMO A -- 6x4 m axis-aligned (baseline)",
6
+ "type": "slab",
7
+ "holes": [],
8
+ "object": "node",
9
+ "polygon": [[18, 0], [24, 0], [24, 4], [18, 4]],
10
+ "visible": true,
11
+ "metadata": {},
12
+ "parentId": "level_conv_demo",
13
+ "elevation": 0.01,
14
+ "holeMetadata": [],
15
+ "autoFromWalls": false
16
+ },
17
+ "slab_demo_b": {
18
+ "id": "slab_demo_b",
19
+ "name": "DEMO B -- 6x4 m rotated 30 deg from +X (verbatim)",
20
+ "type": "slab",
21
+ "holes": [],
22
+ "object": "node",
23
+ "polygon": [[18, 10], [23.195999999999998, 13], [21.196, 16.464], [16, 13.464]],
24
+ "visible": true,
25
+ "metadata": {},
26
+ "parentId": "level_conv_demo",
27
+ "elevation": 0.01,
28
+ "holeMetadata": [],
29
+ "autoFromWalls": false
30
+ },
31
+ "slab_origin": {
32
+ "id": "slab_origin",
33
+ "name": "Origin",
34
+ "type": "slab",
35
+ "holes": [],
36
+ "object": "node",
37
+ "polygon": [[-0.3, -0.3], [0.3, -0.3], [0.3, 0.3], [-0.3, 0.3]],
38
+ "visible": true,
39
+ "metadata": {},
40
+ "parentId": "level_conv_demo",
41
+ "elevation": 0.01,
42
+ "holeMetadata": [],
43
+ "autoFromWalls": false
44
+ },
45
+ "site_conv_demo": {
46
+ "id": "site_conv_demo",
47
+ "name": "Coords conv demo site",
48
+ "type": "site",
49
+ "object": "node",
50
+ "polygon": {
51
+ "type": "polygon",
52
+ "points": [[-6, -12], [44, -12], [44, 40], [-6, 40]]
53
+ },
54
+ "visible": true,
55
+ "children": ["building_conv_demo"],
56
+ "metadata": {},
57
+ "parentId": null
58
+ },
59
+ "level_conv_demo": {
60
+ "id": "level_conv_demo",
61
+ "name": "Coords conv demo ground level",
62
+ "type": "level",
63
+ "level": 0,
64
+ "object": "node",
65
+ "visible": true,
66
+ "children": [
67
+ "slab_axis_x_bar",
68
+ "slab_axis_x_tip",
69
+ "slab_axis_z_bar",
70
+ "slab_axis_z_tip",
71
+ "slab_axis_neg_x",
72
+ "slab_axis_neg_z",
73
+ "slab_origin",
74
+ "zone_lbl_compass_a",
75
+ "zone_lbl_compass_b",
76
+ "zone_lbl_axis_x",
77
+ "zone_lbl_axis_z",
78
+ "zone_lbl_axis_neg_x",
79
+ "zone_lbl_axis_neg_z",
80
+ "zone_lbl_origin",
81
+ "zone_lbl_caveat_1",
82
+ "zone_lbl_caveat_2",
83
+ "zone_lbl_caveat_3",
84
+ "zone_lbl_caveat_4",
85
+ "slab_demo_a",
86
+ "zone_lbl_a_title",
87
+ "zone_lbl_a_long",
88
+ "zone_lbl_a_short",
89
+ "zone_lbl_a_origin",
90
+ "zone_lbl_a_baseline",
91
+ "slab_demo_b",
92
+ "zone_lbl_b_title_1",
93
+ "zone_lbl_b_title_2",
94
+ "zone_lbl_b_verified_1",
95
+ "zone_lbl_b_verified_2",
96
+ "zone_lbl_b_verified_3",
97
+ "zone_lbl_b_origin",
98
+ "slab_demo_c_page",
99
+ "slab_demo_c_page_ax_x",
100
+ "slab_demo_c_page_ax_y",
101
+ "zone_lbl_c_p_title",
102
+ "zone_lbl_c_p_axx",
103
+ "zone_lbl_c_p_axy",
104
+ "zone_lbl_c_p_stem",
105
+ "zone_lbl_c_p_foot",
106
+ "zone_lbl_c_arrow",
107
+ "slab_demo_c_world",
108
+ "zone_lbl_c_w_title",
109
+ "zone_lbl_c_w_stem",
110
+ "zone_lbl_c_w_foot",
111
+ "zone_lbl_c_w_screen_1",
112
+ "zone_lbl_c_w_screen_2",
113
+ "slab_demo_d_page",
114
+ "slab_demo_d_page_ax_x",
115
+ "slab_demo_d_page_ax_y",
116
+ "zone_lbl_d_p_title_1",
117
+ "zone_lbl_d_p_title_2",
118
+ "zone_lbl_d_p_axx",
119
+ "zone_lbl_d_p_axy",
120
+ "zone_lbl_d_p_hope",
121
+ "zone_lbl_d_arrow",
122
+ "slab_demo_d_world",
123
+ "zone_lbl_d_w_title",
124
+ "zone_lbl_d_w_note_1",
125
+ "zone_lbl_d_w_note_2",
126
+ "zone_lbl_d_w_note_3",
127
+ "zone_lbl_d_w_note_4",
128
+ "zone_lbl_d_w_note_5",
129
+ "zone_takeaway_band",
130
+ "zone_lbl_take_1",
131
+ "zone_lbl_take_2",
132
+ "zone_lbl_take_3",
133
+ "zone_lbl_take_4",
134
+ "zone_lbl_take_5"
135
+ ],
136
+ "metadata": {
137
+ "label": "Coords conv demo"
138
+ },
139
+ "parentId": "building_conv_demo"
140
+ },
141
+ "slab_axis_neg_x": {
142
+ "id": "slab_axis_neg_x",
143
+ "name": "-X stub",
144
+ "type": "slab",
145
+ "holes": [],
146
+ "object": "node",
147
+ "polygon": [[-2.5, -0.06], [0, -0.06], [0, 0.06], [-2.5, 0.06]],
148
+ "visible": true,
149
+ "metadata": {},
150
+ "parentId": "level_conv_demo",
151
+ "elevation": 0.01,
152
+ "holeMetadata": [],
153
+ "autoFromWalls": false
154
+ },
155
+ "slab_axis_neg_z": {
156
+ "id": "slab_axis_neg_z",
157
+ "name": "-Z stub",
158
+ "type": "slab",
159
+ "holes": [],
160
+ "object": "node",
161
+ "polygon": [[-0.06, -2.5], [0.06, -2.5], [0.06, 0], [-0.06, 0]],
162
+ "visible": true,
163
+ "metadata": {},
164
+ "parentId": "level_conv_demo",
165
+ "elevation": 0.01,
166
+ "holeMetadata": [],
167
+ "autoFromWalls": false
168
+ },
169
+ "slab_axis_x_bar": {
170
+ "id": "slab_axis_x_bar",
171
+ "name": "+X axis bar",
172
+ "type": "slab",
173
+ "holes": [],
174
+ "object": "node",
175
+ "polygon": [[0, -0.06], [12, -0.06], [12, 0.06], [0, 0.06]],
176
+ "visible": true,
177
+ "metadata": {},
178
+ "parentId": "level_conv_demo",
179
+ "elevation": 0.01,
180
+ "holeMetadata": [],
181
+ "autoFromWalls": false
182
+ },
183
+ "slab_axis_x_tip": {
184
+ "id": "slab_axis_x_tip",
185
+ "name": "+X tip",
186
+ "type": "slab",
187
+ "holes": [],
188
+ "object": "node",
189
+ "polygon": [[12, -0.4], [12.9, 0], [12, 0.4]],
190
+ "visible": true,
191
+ "metadata": {},
192
+ "parentId": "level_conv_demo",
193
+ "elevation": 0.01,
194
+ "holeMetadata": [],
195
+ "autoFromWalls": false
196
+ },
197
+ "slab_axis_z_bar": {
198
+ "id": "slab_axis_z_bar",
199
+ "name": "+Z axis bar",
200
+ "type": "slab",
201
+ "holes": [],
202
+ "object": "node",
203
+ "polygon": [[-0.06, 0], [0.06, 0], [0.06, 12], [-0.06, 12]],
204
+ "visible": true,
205
+ "metadata": {},
206
+ "parentId": "level_conv_demo",
207
+ "elevation": 0.01,
208
+ "holeMetadata": [],
209
+ "autoFromWalls": false
210
+ },
211
+ "slab_axis_z_tip": {
212
+ "id": "slab_axis_z_tip",
213
+ "name": "+Z tip",
214
+ "type": "slab",
215
+ "holes": [],
216
+ "object": "node",
217
+ "polygon": [[-0.4, 12], [0.4, 12], [0, 12.9]],
218
+ "visible": true,
219
+ "metadata": {},
220
+ "parentId": "level_conv_demo",
221
+ "elevation": 0.01,
222
+ "holeMetadata": [],
223
+ "autoFromWalls": false
224
+ },
225
+ "zone_lbl_a_long": {
226
+ "id": "zone_lbl_a_long",
227
+ "name": "Long edge: 6 m along world +X",
228
+ "type": "zone",
229
+ "color": "#f0f0f0",
230
+ "object": "node",
231
+ "polygon": [[20.7, 1.3], [21.3, 1.3], [21.3, 1.9000000000000001], [20.7, 1.9000000000000001]],
232
+ "visible": true,
233
+ "metadata": {},
234
+ "parentId": "level_conv_demo"
235
+ },
236
+ "zone_lbl_axis_x": {
237
+ "id": "zone_lbl_axis_x",
238
+ "name": "+X axis = plan first component (12 m long)",
239
+ "type": "zone",
240
+ "color": "#f0f0f0",
241
+ "object": "node",
242
+ "polygon": [
243
+ [13.299999999999999, -1.3],
244
+ [13.9, -1.3],
245
+ [13.9, -0.7],
246
+ [13.299999999999999, -0.7]
247
+ ],
248
+ "visible": true,
249
+ "metadata": {},
250
+ "parentId": "level_conv_demo"
251
+ },
252
+ "zone_lbl_axis_z": {
253
+ "id": "zone_lbl_axis_z",
254
+ "name": "+Z axis = plan second component (12 m long)",
255
+ "type": "zone",
256
+ "color": "#f0f0f0",
257
+ "object": "node",
258
+ "polygon": [
259
+ [-1.3, 13.299999999999999],
260
+ [-0.7, 13.299999999999999],
261
+ [-0.7, 13.9],
262
+ [-1.3, 13.9]
263
+ ],
264
+ "visible": true,
265
+ "metadata": {},
266
+ "parentId": "level_conv_demo"
267
+ },
268
+ "zone_lbl_origin": {
269
+ "id": "zone_lbl_origin",
270
+ "name": "Origin (0, 0) -- all demo coords are world space, metres",
271
+ "type": "zone",
272
+ "color": "#f0f0f0",
273
+ "object": "node",
274
+ "polygon": [[1.2, 1.2], [1.8, 1.2], [1.8, 1.8], [1.2, 1.8]],
275
+ "visible": true,
276
+ "metadata": {},
277
+ "parentId": "level_conv_demo"
278
+ },
279
+ "zone_lbl_take_1": {
280
+ "id": "zone_lbl_take_1",
281
+ "name": "TAKEAWAY (1/5): [x,z] -> world (x, 0, z) exactly, no sign flip",
282
+ "type": "zone",
283
+ "color": "#f0f0f0",
284
+ "object": "node",
285
+ "polygon": [[2.7, 32.7], [3.3, 32.7], [3.3, 33.3], [2.7, 33.3]],
286
+ "visible": true,
287
+ "metadata": {},
288
+ "parentId": "level_conv_demo"
289
+ },
290
+ "zone_lbl_take_2": {
291
+ "id": "zone_lbl_take_2",
292
+ "name": "(2/5): Demo B verified: 6x4 m, 30 deg, AB perp AD",
293
+ "type": "zone",
294
+ "color": "#f0f0f0",
295
+ "object": "node",
296
+ "polygon": [[2.7, 33.5], [3.3, 33.5], [3.3, 34.099999999999994], [2.7, 34.099999999999994]],
297
+ "visible": true,
298
+ "metadata": {},
299
+ "parentId": "level_conv_demo"
300
+ },
301
+ "zone_lbl_take_3": {
302
+ "id": "zone_lbl_take_3",
303
+ "name": "(3/5): On-screen orientation is viewport-dependent",
304
+ "type": "zone",
305
+ "color": "#f0f0f0",
306
+ "object": "node",
307
+ "polygon": [[2.7, 34.300000000000004], [3.3, 34.300000000000004], [3.3, 34.9], [2.7, 34.9]],
308
+ "visible": true,
309
+ "metadata": {},
310
+ "parentId": "level_conv_demo"
311
+ },
312
+ "zone_lbl_take_4": {
313
+ "id": "zone_lbl_take_4",
314
+ "name": "(4/5): 2D plan rotates +90 deg; 3D top-down ~45 deg offset",
315
+ "type": "zone",
316
+ "color": "#f0f0f0",
317
+ "object": "node",
318
+ "polygon": [[2.7, 35.1], [3.3, 35.1], [3.3, 35.699999999999996], [2.7, 35.699999999999996]],
319
+ "visible": true,
320
+ "metadata": {},
321
+ "parentId": "level_conv_demo"
322
+ },
323
+ "zone_lbl_take_5": {
324
+ "id": "zone_lbl_take_5",
325
+ "name": "(5/5): Verify with a scaled guide image at known anchors",
326
+ "type": "zone",
327
+ "color": "#f0f0f0",
328
+ "object": "node",
329
+ "polygon": [[21.7, 32.7], [22.3, 32.7], [22.3, 33.3], [21.7, 33.3]],
330
+ "visible": true,
331
+ "metadata": {},
332
+ "parentId": "level_conv_demo"
333
+ },
334
+ "slab_demo_c_page": {
335
+ "id": "slab_demo_c_page",
336
+ "name": "DEMO C -- PAGE INTENT (1/2 scale)",
337
+ "type": "slab",
338
+ "holes": [],
339
+ "object": "node",
340
+ "polygon": [[0, 22], [2, 22], [2, 22.5], [0.5, 22.5], [0.5, 24.5], [0, 24.5]],
341
+ "visible": true,
342
+ "metadata": {},
343
+ "parentId": "level_conv_demo",
344
+ "elevation": 0.01,
345
+ "holeMetadata": [],
346
+ "autoFromWalls": false
347
+ },
348
+ "slab_demo_d_page": {
349
+ "id": "slab_demo_d_page",
350
+ "name": "DEMO D -- PAGE INTENT (z reflected, 1/2 scale)",
351
+ "type": "slab",
352
+ "holes": [],
353
+ "object": "node",
354
+ "polygon": [[22, 24.5], [24, 24.5], [24, 24], [22.5, 24], [22.5, 22], [22, 22]],
355
+ "visible": true,
356
+ "metadata": {},
357
+ "parentId": "level_conv_demo",
358
+ "elevation": 0.01,
359
+ "holeMetadata": [],
360
+ "autoFromWalls": false
361
+ },
362
+ "zone_lbl_a_short": {
363
+ "id": "zone_lbl_a_short",
364
+ "name": "Short edge: 4 m along world +Z",
365
+ "type": "zone",
366
+ "color": "#f0f0f0",
367
+ "object": "node",
368
+ "polygon": [[24.5, 1.7], [25.1, 1.7], [25.1, 2.3], [24.5, 2.3]],
369
+ "visible": true,
370
+ "metadata": {},
371
+ "parentId": "level_conv_demo"
372
+ },
373
+ "zone_lbl_a_title": {
374
+ "id": "zone_lbl_a_title",
375
+ "name": "DEMO A -- axis-aligned 6x4 m rectangle",
376
+ "type": "zone",
377
+ "color": "#f0f0f0",
378
+ "object": "node",
379
+ "polygon": [[20.7, -1.3], [21.3, -1.3], [21.3, -0.7], [20.7, -0.7]],
380
+ "visible": true,
381
+ "metadata": {},
382
+ "parentId": "level_conv_demo"
383
+ },
384
+ "zone_lbl_c_arrow": {
385
+ "id": "zone_lbl_c_arrow",
386
+ "name": "pasted [x,z] UNCORRECTED -->",
387
+ "type": "zone",
388
+ "color": "#ffe9c2",
389
+ "object": "node",
390
+ "polygon": [[6.2, 24.2], [6.8, 24.2], [6.8, 24.8], [6.2, 24.8]],
391
+ "visible": true,
392
+ "metadata": {},
393
+ "parentId": "level_conv_demo"
394
+ },
395
+ "zone_lbl_c_p_axx": {
396
+ "id": "zone_lbl_c_p_axx",
397
+ "name": "page +x = author's 'east'",
398
+ "type": "zone",
399
+ "color": "#f0f0f0",
400
+ "object": "node",
401
+ "polygon": [[2.1, 21.5], [2.6999999999999997, 21.5], [2.6999999999999997, 22.1], [2.1, 22.1]],
402
+ "visible": true,
403
+ "metadata": {},
404
+ "parentId": "level_conv_demo"
405
+ },
406
+ "zone_lbl_c_p_axy": {
407
+ "id": "zone_lbl_c_p_axy",
408
+ "name": "page +y = author's 'north'",
409
+ "type": "zone",
410
+ "color": "#f0f0f0",
411
+ "object": "node",
412
+ "polygon": [
413
+ [-0.7, 24.099999999999998],
414
+ [-0.10000000000000003, 24.099999999999998],
415
+ [-0.10000000000000003, 24.7],
416
+ [-0.7, 24.7]
417
+ ],
418
+ "visible": true,
419
+ "metadata": {},
420
+ "parentId": "level_conv_demo"
421
+ },
422
+ "zone_lbl_d_arrow": {
423
+ "id": "zone_lbl_d_arrow",
424
+ "name": "pasted as [x,z] -->",
425
+ "type": "zone",
426
+ "color": "#ffe9c2",
427
+ "object": "node",
428
+ "polygon": [[28.2, 24.2], [28.8, 24.2], [28.8, 24.8], [28.2, 24.8]],
429
+ "visible": true,
430
+ "metadata": {},
431
+ "parentId": "level_conv_demo"
432
+ },
433
+ "zone_lbl_d_p_axx": {
434
+ "id": "zone_lbl_d_p_axx",
435
+ "name": "page +x",
436
+ "type": "zone",
437
+ "color": "#f0f0f0",
438
+ "object": "node",
439
+ "polygon": [
440
+ [24.099999999999998, 21.5],
441
+ [24.7, 21.5],
442
+ [24.7, 22.1],
443
+ [24.099999999999998, 22.1]
444
+ ],
445
+ "visible": true,
446
+ "metadata": {},
447
+ "parentId": "level_conv_demo"
448
+ },
449
+ "zone_lbl_d_p_axy": {
450
+ "id": "zone_lbl_d_p_axy",
451
+ "name": "page +y",
452
+ "type": "zone",
453
+ "color": "#f0f0f0",
454
+ "object": "node",
455
+ "polygon": [
456
+ [21.3, 24.099999999999998],
457
+ [21.900000000000002, 24.099999999999998],
458
+ [21.900000000000002, 24.7],
459
+ [21.3, 24.7]
460
+ ],
461
+ "visible": true,
462
+ "metadata": {},
463
+ "parentId": "level_conv_demo"
464
+ },
465
+ "slab_demo_c_world": {
466
+ "id": "slab_demo_c_world",
467
+ "name": "DEMO C -- WORLD RESULT (uncorrected)",
468
+ "type": "slab",
469
+ "holes": [],
470
+ "object": "node",
471
+ "polygon": [[10, 22], [14, 22], [14, 23], [11, 23], [11, 27], [10, 27]],
472
+ "visible": true,
473
+ "metadata": {},
474
+ "parentId": "level_conv_demo",
475
+ "elevation": 0.01,
476
+ "holeMetadata": [],
477
+ "autoFromWalls": false
478
+ },
479
+ "slab_demo_d_world": {
480
+ "id": "slab_demo_d_world",
481
+ "name": "DEMO D -- WORLD RESULT (mirror image of Demo C)",
482
+ "type": "slab",
483
+ "holes": [],
484
+ "object": "node",
485
+ "polygon": [[32, 27], [36, 27], [36, 26], [33, 26], [33, 22], [32, 22]],
486
+ "visible": true,
487
+ "metadata": {},
488
+ "parentId": "level_conv_demo",
489
+ "elevation": 0.01,
490
+ "holeMetadata": [],
491
+ "autoFromWalls": false
492
+ },
493
+ "zone_lbl_a_origin": {
494
+ "id": "zone_lbl_a_origin",
495
+ "name": "First corner at world (18, 0)",
496
+ "type": "zone",
497
+ "color": "#f0f0f0",
498
+ "object": "node",
499
+ "polygon": [[18.2, 0.2], [18.8, 0.2], [18.8, 0.8], [18.2, 0.8]],
500
+ "visible": true,
501
+ "metadata": {},
502
+ "parentId": "level_conv_demo"
503
+ },
504
+ "zone_lbl_b_origin": {
505
+ "id": "zone_lbl_b_origin",
506
+ "name": "First vertex (18, 10) -- canonical [[0,0],[5.196,3],...] + offset",
507
+ "type": "zone",
508
+ "color": "#f0f0f0",
509
+ "object": "node",
510
+ "polygon": [[18.2, 10.2], [18.8, 10.2], [18.8, 10.8], [18.2, 10.8]],
511
+ "visible": true,
512
+ "metadata": {},
513
+ "parentId": "level_conv_demo"
514
+ },
515
+ "zone_lbl_c_p_foot": {
516
+ "id": "zone_lbl_c_p_foot",
517
+ "name": "foot: 4 m along page +x",
518
+ "type": "zone",
519
+ "color": "#f0f0f0",
520
+ "object": "node",
521
+ "polygon": [[1.2, 21.2], [1.8, 21.2], [1.8, 21.8], [1.2, 21.8]],
522
+ "visible": true,
523
+ "metadata": {},
524
+ "parentId": "level_conv_demo"
525
+ },
526
+ "zone_lbl_c_p_stem": {
527
+ "id": "zone_lbl_c_p_stem",
528
+ "name": "stem: 5 m along page +y",
529
+ "type": "zone",
530
+ "color": "#f0f0f0",
531
+ "object": "node",
532
+ "polygon": [
533
+ [-1.1, 23.099999999999998],
534
+ [-0.5, 23.099999999999998],
535
+ [-0.5, 23.7],
536
+ [-1.1, 23.7]
537
+ ],
538
+ "visible": true,
539
+ "metadata": {},
540
+ "parentId": "level_conv_demo"
541
+ },
542
+ "zone_lbl_c_w_foot": {
543
+ "id": "zone_lbl_c_w_foot",
544
+ "name": "foot along world +X (was author's east)",
545
+ "type": "zone",
546
+ "color": "#f0f0f0",
547
+ "object": "node",
548
+ "polygon": [[12.2, 22.2], [12.8, 22.2], [12.8, 22.8], [12.2, 22.8]],
549
+ "visible": true,
550
+ "metadata": {},
551
+ "parentId": "level_conv_demo"
552
+ },
553
+ "zone_lbl_c_w_stem": {
554
+ "id": "zone_lbl_c_w_stem",
555
+ "name": "stem along world +Z (was author's north)",
556
+ "type": "zone",
557
+ "color": "#f0f0f0",
558
+ "object": "node",
559
+ "polygon": [[10.2, 24.2], [10.8, 24.2], [10.8, 24.8], [10.2, 24.8]],
560
+ "visible": true,
561
+ "metadata": {},
562
+ "parentId": "level_conv_demo"
563
+ },
564
+ "zone_lbl_caveat_1": {
565
+ "id": "zone_lbl_caveat_1",
566
+ "name": "Viewports may rotate world axes on screen",
567
+ "type": "zone",
568
+ "color": "#f0f0f0",
569
+ "object": "node",
570
+ "polygon": [[4.7, -6.3], [5.3, -6.3], [5.3, -5.7], [4.7, -5.7]],
571
+ "visible": true,
572
+ "metadata": {},
573
+ "parentId": "level_conv_demo"
574
+ },
575
+ "zone_lbl_caveat_2": {
576
+ "id": "zone_lbl_caveat_2",
577
+ "name": "2D plan panel applies +90 deg rotation",
578
+ "type": "zone",
579
+ "color": "#f0f0f0",
580
+ "object": "node",
581
+ "polygon": [[4.7, -7.3], [5.3, -7.3], [5.3, -6.7], [4.7, -6.7]],
582
+ "visible": true,
583
+ "metadata": {},
584
+ "parentId": "level_conv_demo"
585
+ },
586
+ "zone_lbl_caveat_3": {
587
+ "id": "zone_lbl_caveat_3",
588
+ "name": "3D 'top-down' camera defaults to ~45 deg offset",
589
+ "type": "zone",
590
+ "color": "#f0f0f0",
591
+ "object": "node",
592
+ "polygon": [[4.7, -8.3], [5.3, -8.3], [5.3, -7.7], [4.7, -7.7]],
593
+ "visible": true,
594
+ "metadata": {},
595
+ "parentId": "level_conv_demo"
596
+ },
597
+ "zone_lbl_caveat_4": {
598
+ "id": "zone_lbl_caveat_4",
599
+ "name": "World axes themselves are stable; only display rotates",
600
+ "type": "zone",
601
+ "color": "#f0f0f0",
602
+ "object": "node",
603
+ "polygon": [[4.7, -9.3], [5.3, -9.3], [5.3, -8.7], [4.7, -8.7]],
604
+ "visible": true,
605
+ "metadata": {},
606
+ "parentId": "level_conv_demo"
607
+ },
608
+ "zone_lbl_d_p_hope": {
609
+ "id": "zone_lbl_d_p_hope",
610
+ "name": "Hope: 'reflecting z will un-mirror the result'",
611
+ "type": "zone",
612
+ "color": "#f0f0f0",
613
+ "object": "node",
614
+ "polygon": [[22.7, 25.2], [23.3, 25.2], [23.3, 25.8], [22.7, 25.8]],
615
+ "visible": true,
616
+ "metadata": {},
617
+ "parentId": "level_conv_demo"
618
+ },
619
+ "building_conv_demo": {
620
+ "id": "building_conv_demo",
621
+ "name": "Demo bld",
622
+ "type": "building",
623
+ "object": "node",
624
+ "visible": true,
625
+ "children": ["level_conv_demo"],
626
+ "metadata": {},
627
+ "parentId": "site_conv_demo",
628
+ "position": [0, 0, 0],
629
+ "rotation": [0, 0, 0]
630
+ },
631
+ "zone_lbl_b_title_1": {
632
+ "id": "zone_lbl_b_title_1",
633
+ "name": "DEMO B -- 6x4 m rectangle",
634
+ "type": "zone",
635
+ "color": "#f0f0f0",
636
+ "object": "node",
637
+ "polygon": [[21.7, 8.2], [22.3, 8.2], [22.3, 8.8], [21.7, 8.8]],
638
+ "visible": true,
639
+ "metadata": {},
640
+ "parentId": "level_conv_demo"
641
+ },
642
+ "zone_lbl_b_title_2": {
643
+ "id": "zone_lbl_b_title_2",
644
+ "name": "Rotated 30 deg CCW from world +X",
645
+ "type": "zone",
646
+ "color": "#f0f0f0",
647
+ "object": "node",
648
+ "polygon": [[21.7, 9], [22.3, 9], [22.3, 9.600000000000001], [21.7, 9.600000000000001]],
649
+ "visible": true,
650
+ "metadata": {},
651
+ "parentId": "level_conv_demo"
652
+ },
653
+ "zone_lbl_c_p_title": {
654
+ "id": "zone_lbl_c_p_title",
655
+ "name": "DEMO C -- PAGE INTENT (north-up, 1/2 scale)",
656
+ "type": "zone",
657
+ "color": "#f0f0f0",
658
+ "object": "node",
659
+ "polygon": [[0.7, 20.7], [1.3, 20.7], [1.3, 21.3], [0.7, 21.3]],
660
+ "visible": true,
661
+ "metadata": {},
662
+ "parentId": "level_conv_demo"
663
+ },
664
+ "zone_lbl_c_w_title": {
665
+ "id": "zone_lbl_c_w_title",
666
+ "name": "DEMO C -- WORLD RESULT (full scale)",
667
+ "type": "zone",
668
+ "color": "#f0f0f0",
669
+ "object": "node",
670
+ "polygon": [[11.7, 20.7], [12.3, 20.7], [12.3, 21.3], [11.7, 21.3]],
671
+ "visible": true,
672
+ "metadata": {},
673
+ "parentId": "level_conv_demo"
674
+ },
675
+ "zone_lbl_compass_a": {
676
+ "id": "zone_lbl_compass_a",
677
+ "name": "WORLD AXES (authoritative)",
678
+ "type": "zone",
679
+ "color": "#f0f0f0",
680
+ "object": "node",
681
+ "polygon": [[4.7, -3.8], [5.3, -3.8], [5.3, -3.2], [4.7, -3.2]],
682
+ "visible": true,
683
+ "metadata": {},
684
+ "parentId": "level_conv_demo"
685
+ },
686
+ "zone_lbl_compass_b": {
687
+ "id": "zone_lbl_compass_b",
688
+ "name": "Plan [x,z] maps to world (x, 0, z) -- no sign flip",
689
+ "type": "zone",
690
+ "color": "#f0f0f0",
691
+ "object": "node",
692
+ "polygon": [[4.7, -4.8], [5.3, -4.8], [5.3, -4.2], [4.7, -4.2]],
693
+ "visible": true,
694
+ "metadata": {},
695
+ "parentId": "level_conv_demo"
696
+ },
697
+ "zone_lbl_d_w_title": {
698
+ "id": "zone_lbl_d_w_title",
699
+ "name": "DEMO D -- WORLD RESULT (full scale)",
700
+ "type": "zone",
701
+ "color": "#f0f0f0",
702
+ "object": "node",
703
+ "polygon": [[33.7, 20.7], [34.3, 20.7], [34.3, 21.3], [33.7, 21.3]],
704
+ "visible": true,
705
+ "metadata": {},
706
+ "parentId": "level_conv_demo"
707
+ },
708
+ "zone_takeaway_band": {
709
+ "id": "zone_takeaway_band",
710
+ "name": "TAKEAWAY band",
711
+ "type": "zone",
712
+ "color": "#fff5d6",
713
+ "object": "node",
714
+ "polygon": [[0, 32], [40, 32], [40, 36], [0, 36]],
715
+ "visible": true,
716
+ "metadata": {},
717
+ "parentId": "level_conv_demo"
718
+ },
719
+ "zone_lbl_a_baseline": {
720
+ "id": "zone_lbl_a_baseline",
721
+ "name": "Baseline -- matches generate-apartment.md style",
722
+ "type": "zone",
723
+ "color": "#f0f0f0",
724
+ "object": "node",
725
+ "polygon": [[20.7, 5.2], [21.3, 5.2], [21.3, 5.8], [20.7, 5.8]],
726
+ "visible": true,
727
+ "metadata": {},
728
+ "parentId": "level_conv_demo"
729
+ },
730
+ "zone_lbl_axis_neg_x": {
731
+ "id": "zone_lbl_axis_neg_x",
732
+ "name": "-X (negative first component)",
733
+ "type": "zone",
734
+ "color": "#f0f0f0",
735
+ "object": "node",
736
+ "polygon": [[-2.3, 0.7], [-1.7, 0.7], [-1.7, 1.3], [-2.3, 1.3]],
737
+ "visible": true,
738
+ "metadata": {},
739
+ "parentId": "level_conv_demo"
740
+ },
741
+ "zone_lbl_axis_neg_z": {
742
+ "id": "zone_lbl_axis_neg_z",
743
+ "name": "-Z (negative second component)",
744
+ "type": "zone",
745
+ "color": "#f0f0f0",
746
+ "object": "node",
747
+ "polygon": [[0.7, -2.3], [1.3, -2.3], [1.3, -1.7], [0.7, -1.7]],
748
+ "visible": true,
749
+ "metadata": {},
750
+ "parentId": "level_conv_demo"
751
+ },
752
+ "zone_lbl_d_w_note_1": {
753
+ "id": "zone_lbl_d_w_note_1",
754
+ "name": "Note: z-reflection only helps against a true MIRROR",
755
+ "type": "zone",
756
+ "color": "#f0f0f0",
757
+ "object": "node",
758
+ "polygon": [
759
+ [33.7, 27.3],
760
+ [34.3, 27.3],
761
+ [34.3, 27.900000000000002],
762
+ [33.7, 27.900000000000002]
763
+ ],
764
+ "visible": true,
765
+ "metadata": {},
766
+ "parentId": "level_conv_demo"
767
+ },
768
+ "zone_lbl_d_w_note_2": {
769
+ "id": "zone_lbl_d_w_note_2",
770
+ "name": "Pascal's view rotates, not mirrors",
771
+ "type": "zone",
772
+ "color": "#f0f0f0",
773
+ "object": "node",
774
+ "polygon": [
775
+ [33.7, 28.099999999999998],
776
+ [34.3, 28.099999999999998],
777
+ [34.3, 28.7],
778
+ [33.7, 28.7]
779
+ ],
780
+ "visible": true,
781
+ "metadata": {},
782
+ "parentId": "level_conv_demo"
783
+ },
784
+ "zone_lbl_d_w_note_3": {
785
+ "id": "zone_lbl_d_w_note_3",
786
+ "name": "So this 'fix' doesn't correct on-screen orientation",
787
+ "type": "zone",
788
+ "color": "#f0f0f0",
789
+ "object": "node",
790
+ "polygon": [[33.7, 28.9], [34.3, 28.9], [34.3, 29.5], [33.7, 29.5]],
791
+ "visible": true,
792
+ "metadata": {},
793
+ "parentId": "level_conv_demo"
794
+ },
795
+ "zone_lbl_d_w_note_4": {
796
+ "id": "zone_lbl_d_w_note_4",
797
+ "name": "Real fix: apply whatever rotation matches your viewport",
798
+ "type": "zone",
799
+ "color": "#f0f0f0",
800
+ "object": "node",
801
+ "polygon": [[33.7, 29.7], [34.3, 29.7], [34.3, 30.3], [33.7, 30.3]],
802
+ "visible": true,
803
+ "metadata": {},
804
+ "parentId": "level_conv_demo"
805
+ },
806
+ "zone_lbl_d_w_note_5": {
807
+ "id": "zone_lbl_d_w_note_5",
808
+ "name": "Or verify against a scaled guide image",
809
+ "type": "zone",
810
+ "color": "#f0f0f0",
811
+ "object": "node",
812
+ "polygon": [[33.7, 30.5], [34.3, 30.5], [34.3, 31.1], [33.7, 31.1]],
813
+ "visible": true,
814
+ "metadata": {},
815
+ "parentId": "level_conv_demo"
816
+ },
817
+ "zone_lbl_d_p_title_1": {
818
+ "id": "zone_lbl_d_p_title_1",
819
+ "name": "DEMO D -- PAGE INTENT (1/2 scale)",
820
+ "type": "zone",
821
+ "color": "#f0f0f0",
822
+ "object": "node",
823
+ "polygon": [[22.7, 20.7], [23.3, 20.7], [23.3, 21.3], [22.7, 21.3]],
824
+ "visible": true,
825
+ "metadata": {},
826
+ "parentId": "level_conv_demo"
827
+ },
828
+ "zone_lbl_d_p_title_2": {
829
+ "id": "zone_lbl_d_p_title_2",
830
+ "name": "Author applied z -> 5-z before paste",
831
+ "type": "zone",
832
+ "color": "#f0f0f0",
833
+ "object": "node",
834
+ "polygon": [[22.7, 19.9], [23.3, 19.9], [23.3, 20.5], [22.7, 20.5]],
835
+ "visible": true,
836
+ "metadata": {},
837
+ "parentId": "level_conv_demo"
838
+ },
839
+ "slab_demo_c_page_ax_x": {
840
+ "id": "slab_demo_c_page_ax_x",
841
+ "name": "C page +x stub",
842
+ "type": "slab",
843
+ "holes": [],
844
+ "object": "node",
845
+ "polygon": [[0.1, 21.95], [1.9, 21.95], [1.9, 22.05], [0.1, 22.05]],
846
+ "visible": true,
847
+ "metadata": {},
848
+ "parentId": "level_conv_demo",
849
+ "elevation": 0.01,
850
+ "holeMetadata": [],
851
+ "autoFromWalls": false
852
+ },
853
+ "slab_demo_c_page_ax_y": {
854
+ "id": "slab_demo_c_page_ax_y",
855
+ "name": "C page +y stub",
856
+ "type": "slab",
857
+ "holes": [],
858
+ "object": "node",
859
+ "polygon": [[-0.05, 22.1], [0.05, 22.1], [0.05, 23.9], [-0.05, 23.9]],
860
+ "visible": true,
861
+ "metadata": {},
862
+ "parentId": "level_conv_demo",
863
+ "elevation": 0.01,
864
+ "holeMetadata": [],
865
+ "autoFromWalls": false
866
+ },
867
+ "slab_demo_d_page_ax_x": {
868
+ "id": "slab_demo_d_page_ax_x",
869
+ "name": "D page +x stub",
870
+ "type": "slab",
871
+ "holes": [],
872
+ "object": "node",
873
+ "polygon": [[22.1, 21.95], [23.9, 21.95], [23.9, 22.05], [22.1, 22.05]],
874
+ "visible": true,
875
+ "metadata": {},
876
+ "parentId": "level_conv_demo",
877
+ "elevation": 0.01,
878
+ "holeMetadata": [],
879
+ "autoFromWalls": false
880
+ },
881
+ "slab_demo_d_page_ax_y": {
882
+ "id": "slab_demo_d_page_ax_y",
883
+ "name": "D page +y stub",
884
+ "type": "slab",
885
+ "holes": [],
886
+ "object": "node",
887
+ "polygon": [[21.95, 22.1], [22.05, 22.1], [22.05, 23.9], [21.95, 23.9]],
888
+ "visible": true,
889
+ "metadata": {},
890
+ "parentId": "level_conv_demo",
891
+ "elevation": 0.01,
892
+ "holeMetadata": [],
893
+ "autoFromWalls": false
894
+ },
895
+ "zone_lbl_b_verified_1": {
896
+ "id": "zone_lbl_b_verified_1",
897
+ "name": "Verified: side lengths 6/4/6/4 m",
898
+ "type": "zone",
899
+ "color": "#f0f0f0",
900
+ "object": "node",
901
+ "polygon": [[21.7, 16.7], [22.3, 16.7], [22.3, 17.3], [21.7, 17.3]],
902
+ "visible": true,
903
+ "metadata": {},
904
+ "parentId": "level_conv_demo"
905
+ },
906
+ "zone_lbl_b_verified_2": {
907
+ "id": "zone_lbl_b_verified_2",
908
+ "name": "Verified: AB perpendicular to AD (dot=0)",
909
+ "type": "zone",
910
+ "color": "#f0f0f0",
911
+ "object": "node",
912
+ "polygon": [[21.7, 17.5], [22.3, 17.5], [22.3, 18.1], [21.7, 18.1]],
913
+ "visible": true,
914
+ "metadata": {},
915
+ "parentId": "level_conv_demo"
916
+ },
917
+ "zone_lbl_b_verified_3": {
918
+ "id": "zone_lbl_b_verified_3",
919
+ "name": "Verified: first edge heading = 30.0 deg from +X",
920
+ "type": "zone",
921
+ "color": "#f0f0f0",
922
+ "object": "node",
923
+ "polygon": [
924
+ [21.7, 18.3],
925
+ [22.3, 18.3],
926
+ [22.3, 18.900000000000002],
927
+ [21.7, 18.900000000000002]
928
+ ],
929
+ "visible": true,
930
+ "metadata": {},
931
+ "parentId": "level_conv_demo"
932
+ },
933
+ "zone_lbl_c_w_screen_1": {
934
+ "id": "zone_lbl_c_w_screen_1",
935
+ "name": "On-screen orientation depends on viewport",
936
+ "type": "zone",
937
+ "color": "#f0f0f0",
938
+ "object": "node",
939
+ "polygon": [
940
+ [11.7, 27.3],
941
+ [12.3, 27.3],
942
+ [12.3, 27.900000000000002],
943
+ [11.7, 27.900000000000002]
944
+ ],
945
+ "visible": true,
946
+ "metadata": {},
947
+ "parentId": "level_conv_demo"
948
+ },
949
+ "zone_lbl_c_w_screen_2": {
950
+ "id": "zone_lbl_c_w_screen_2",
951
+ "name": "2D plan: rotated 90 deg; 3D top-down: ~45 deg offset",
952
+ "type": "zone",
953
+ "color": "#f0f0f0",
954
+ "object": "node",
955
+ "polygon": [
956
+ [11.7, 28.099999999999998],
957
+ [12.3, 28.099999999999998],
958
+ [12.3, 28.7],
959
+ [11.7, 28.7]
960
+ ],
961
+ "visible": true,
962
+ "metadata": {},
963
+ "parentId": "level_conv_demo"
964
+ }
965
+ },
966
+ "rootNodeIds": ["site_conv_demo"],
967
+ "collections": {}
968
+ }