planscript 1.4.0 → 2.0.0

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 (42) hide show
  1. package/LANGUAGE_REFERENCE.md +472 -4
  2. package/dist/ast/types.d.ts +84 -4
  3. package/dist/ast/types.d.ts.map +1 -1
  4. package/dist/cli.js +28 -6
  5. package/dist/cli.js.map +1 -1
  6. package/dist/exporters/svg.d.ts +3 -0
  7. package/dist/exporters/svg.d.ts.map +1 -1
  8. package/dist/exporters/svg.js +48 -2
  9. package/dist/exporters/svg.js.map +1 -1
  10. package/dist/geometry/index.d.ts.map +1 -1
  11. package/dist/geometry/index.js +7 -0
  12. package/dist/geometry/index.js.map +1 -1
  13. package/dist/geometry/types.d.ts +7 -0
  14. package/dist/geometry/types.d.ts.map +1 -1
  15. package/dist/lowering/index.d.ts +23 -1
  16. package/dist/lowering/index.d.ts.map +1 -1
  17. package/dist/lowering/index.js +374 -28
  18. package/dist/lowering/index.js.map +1 -1
  19. package/dist/parser/grammar.d.ts +52 -5
  20. package/dist/parser/grammar.d.ts.map +1 -1
  21. package/dist/parser/grammar.js +4927 -2026
  22. package/dist/parser/grammar.js.map +1 -1
  23. package/dist/validation/index.d.ts +5 -0
  24. package/dist/validation/index.d.ts.map +1 -1
  25. package/dist/validation/index.js +215 -0
  26. package/dist/validation/index.js.map +1 -1
  27. package/examples/advanced_positioning.psc +225 -0
  28. package/examples/advanced_positioning.svg +76 -0
  29. package/examples/courtyard_house.psc +141 -0
  30. package/examples/courtyard_house.svg +93 -0
  31. package/examples/orientation.psc +141 -0
  32. package/examples/orientation.svg +88 -0
  33. package/examples/zones.psc +275 -0
  34. package/examples/zones.svg +89 -0
  35. package/package.json +1 -1
  36. package/examples/casa_moderna.psc +0 -375
  37. package/examples/casa_moderna_v2.psc +0 -406
  38. package/examples/casa_moderna_v3.psc +0 -375
  39. package/examples/casa_moderna_v5.psc +0 -397
  40. package/examples/house2.psc +0 -156
  41. package/examples/house2.svg +0 -103
  42. package/examples/house3.svg +0 -139
@@ -17,6 +17,11 @@ export declare const ErrorCodes: {
17
17
  readonly ROOM_NO_ACCESS: "E420";
18
18
  readonly MIN_AREA_VIOLATION: "E501";
19
19
  readonly ZERO_AREA: "E502";
20
+ readonly ORIENTATION_NO_SITE: "E601";
21
+ readonly ORIENTATION_NO_WINDOW: "E602";
22
+ readonly ORIENTATION_ROOM_NOT_NEAR_STREET: "E603";
23
+ readonly ORIENTATION_ROOM_NOT_AWAY_FROM_STREET: "E604";
24
+ readonly ORIENTATION_NO_GARDEN_VIEW: "E605";
20
25
  };
21
26
  export declare function validate(lowered: LoweredProgram, geometry: GeometryIR): ValidationError[];
22
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAMD,eAAO,MAAM,UAAU;;;;;;;;;;;CAWb,CAAC;AAgPX,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,GAAG,eAAe,EAAE,CA+BzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAMD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAiBb,CAAC;AAifX,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,GAAG,eAAe,EAAE,CAwCzF"}
@@ -13,6 +13,12 @@ export const ErrorCodes = {
13
13
  ROOM_NO_ACCESS: 'E420',
14
14
  MIN_AREA_VIOLATION: 'E501',
15
15
  ZERO_AREA: 'E502',
16
+ // Orientation errors
17
+ ORIENTATION_NO_SITE: 'E601',
18
+ ORIENTATION_NO_WINDOW: 'E602',
19
+ ORIENTATION_ROOM_NOT_NEAR_STREET: 'E603',
20
+ ORIENTATION_ROOM_NOT_AWAY_FROM_STREET: 'E604',
21
+ ORIENTATION_NO_GARDEN_VIEW: 'E605',
16
22
  };
17
23
  // ============================================================================
18
24
  // Geometry Validation Helpers
@@ -210,6 +216,207 @@ function validateMinRoomArea(lowered) {
210
216
  return errors;
211
217
  }
212
218
  // ============================================================================
219
+ // Orientation Validation Helpers
220
+ // ============================================================================
221
+ // Convert EdgeSide to CardinalDirection (they're the same values)
222
+ function edgeSideToCardinal(edge) {
223
+ return edge;
224
+ }
225
+ // Get all window directions for a room
226
+ function getRoomWindowDirections(roomName, geometry) {
227
+ const directions = [];
228
+ for (const opening of geometry.openings) {
229
+ if (opening.type !== 'window')
230
+ continue;
231
+ // Find the wall this window is on
232
+ const wall = geometry.walls.find(w => w.id === opening.wallId);
233
+ if (!wall || !wall.rooms.includes(roomName))
234
+ continue;
235
+ // Find the room to determine which edge this wall is on
236
+ const room = geometry.rooms.find(r => r.name === roomName);
237
+ if (!room)
238
+ continue;
239
+ // Determine wall direction based on wall orientation and room bounds
240
+ const direction = getWallDirection(wall, room);
241
+ if (direction) {
242
+ directions.push(direction);
243
+ }
244
+ }
245
+ return directions;
246
+ }
247
+ // Determine which cardinal direction a wall faces for a given room
248
+ function getWallDirection(wall, room) {
249
+ const points = room.polygon.points;
250
+ const xs = points.map(p => p.x);
251
+ const ys = points.map(p => p.y);
252
+ const minX = Math.min(...xs);
253
+ const maxX = Math.max(...xs);
254
+ const minY = Math.min(...ys);
255
+ const maxY = Math.max(...ys);
256
+ const midX = (wall.start.x + wall.end.x) / 2;
257
+ const midY = (wall.start.y + wall.end.y) / 2;
258
+ const epsilon = 0.01;
259
+ const isHorizontal = Math.abs(wall.start.y - wall.end.y) < epsilon;
260
+ const isVertical = Math.abs(wall.start.x - wall.end.x) < epsilon;
261
+ if (isHorizontal) {
262
+ if (Math.abs(midY - maxY) < epsilon)
263
+ return 'north';
264
+ if (Math.abs(midY - minY) < epsilon)
265
+ return 'south';
266
+ }
267
+ if (isVertical) {
268
+ if (Math.abs(midX - maxX) < epsilon)
269
+ return 'east';
270
+ if (Math.abs(midX - minX) < epsilon)
271
+ return 'west';
272
+ }
273
+ return null;
274
+ }
275
+ // Check if room is "near" a direction (has an edge on that side of footprint)
276
+ function isRoomNearDirection(roomName, direction, lowered) {
277
+ const room = lowered.rooms.find(r => r.name === roomName);
278
+ if (!room)
279
+ return false;
280
+ const footprint = lowered.footprint;
281
+ const fpXs = footprint.map(p => p.x);
282
+ const fpYs = footprint.map(p => p.y);
283
+ const fpMinX = Math.min(...fpXs);
284
+ const fpMaxX = Math.max(...fpXs);
285
+ const fpMinY = Math.min(...fpYs);
286
+ const fpMaxY = Math.max(...fpYs);
287
+ const roomXs = room.polygon.map(p => p.x);
288
+ const roomYs = room.polygon.map(p => p.y);
289
+ const roomMinX = Math.min(...roomXs);
290
+ const roomMaxX = Math.max(...roomXs);
291
+ const roomMinY = Math.min(...roomYs);
292
+ const roomMaxY = Math.max(...roomYs);
293
+ const tolerance = 0.5; // Allow some tolerance for "near"
294
+ switch (direction) {
295
+ case 'north':
296
+ return Math.abs(roomMaxY - fpMaxY) < tolerance;
297
+ case 'south':
298
+ return Math.abs(roomMinY - fpMinY) < tolerance;
299
+ case 'east':
300
+ return Math.abs(roomMaxX - fpMaxX) < tolerance;
301
+ case 'west':
302
+ return Math.abs(roomMinX - fpMinX) < tolerance;
303
+ }
304
+ }
305
+ // Resolve orientation target to actual cardinal direction(s)
306
+ function resolveOrientationTarget(target, site) {
307
+ switch (target) {
308
+ case 'morning_sun':
309
+ return [site.morningSun];
310
+ case 'afternoon_sun':
311
+ return [site.afternoonSun];
312
+ case 'street':
313
+ return [site.street];
314
+ case 'north':
315
+ case 'south':
316
+ case 'east':
317
+ case 'west':
318
+ return [target];
319
+ }
320
+ }
321
+ // ============================================================================
322
+ // Orientation Validation Functions
323
+ // ============================================================================
324
+ function validateOrientationHasWindow(roomName, target, site, geometry) {
325
+ const targetDirections = resolveOrientationTarget(target, site);
326
+ const windowDirections = getRoomWindowDirections(roomName, geometry);
327
+ const hasWindow = targetDirections.some(dir => windowDirections.includes(dir));
328
+ if (!hasWindow) {
329
+ const targetLabel = target === 'morning_sun' ? 'morning sun (east)' :
330
+ target === 'afternoon_sun' ? 'afternoon sun (west)' :
331
+ target === 'street' ? `street (${site.street})` :
332
+ target;
333
+ return {
334
+ code: ErrorCodes.ORIENTATION_NO_WINDOW,
335
+ message: `Room "${roomName}" does not have a window facing ${targetLabel}`,
336
+ room: roomName,
337
+ details: { target, targetDirections, actualDirections: windowDirections },
338
+ };
339
+ }
340
+ return null;
341
+ }
342
+ function validateOrientationNearStreet(roomName, site, lowered) {
343
+ if (!isRoomNearDirection(roomName, site.street, lowered)) {
344
+ return {
345
+ code: ErrorCodes.ORIENTATION_ROOM_NOT_NEAR_STREET,
346
+ message: `Room "${roomName}" is not near the street (${site.street})`,
347
+ room: roomName,
348
+ details: { streetDirection: site.street },
349
+ };
350
+ }
351
+ return null;
352
+ }
353
+ function validateOrientationAwayFromStreet(roomName, site, lowered) {
354
+ // Room should be near the back (opposite of street)
355
+ if (!isRoomNearDirection(roomName, site.back, lowered)) {
356
+ return {
357
+ code: ErrorCodes.ORIENTATION_ROOM_NOT_AWAY_FROM_STREET,
358
+ message: `Room "${roomName}" is not away from the street (should be near ${site.back})`,
359
+ room: roomName,
360
+ details: { streetDirection: site.street, backDirection: site.back },
361
+ };
362
+ }
363
+ return null;
364
+ }
365
+ function validateOrientationGardenView(roomName, site, geometry) {
366
+ // Garden view means window facing back (opposite of street)
367
+ const windowDirections = getRoomWindowDirections(roomName, geometry);
368
+ if (!windowDirections.includes(site.back)) {
369
+ return {
370
+ code: ErrorCodes.ORIENTATION_NO_GARDEN_VIEW,
371
+ message: `Room "${roomName}" does not have a window with garden view (facing ${site.back})`,
372
+ room: roomName,
373
+ details: { backDirection: site.back, actualDirections: windowDirections },
374
+ };
375
+ }
376
+ return null;
377
+ }
378
+ function validateOrientationAssertions(lowered, geometry) {
379
+ const errors = [];
380
+ for (const assertion of lowered.assertions) {
381
+ // Check if site is required but not provided
382
+ if (assertion.type.startsWith('AssertionOrientation') && !lowered.site) {
383
+ errors.push({
384
+ code: ErrorCodes.ORIENTATION_NO_SITE,
385
+ message: 'Orientation assertions require a site declaration with street direction',
386
+ });
387
+ return errors; // No point checking further
388
+ }
389
+ const site = lowered.site;
390
+ switch (assertion.type) {
391
+ case 'AssertionOrientationHasWindow': {
392
+ const error = validateOrientationHasWindow(assertion.room, assertion.target, site, geometry);
393
+ if (error)
394
+ errors.push(error);
395
+ break;
396
+ }
397
+ case 'AssertionOrientationNearStreet': {
398
+ const error = validateOrientationNearStreet(assertion.room, site, lowered);
399
+ if (error)
400
+ errors.push(error);
401
+ break;
402
+ }
403
+ case 'AssertionOrientationAwayFromStreet': {
404
+ const error = validateOrientationAwayFromStreet(assertion.room, site, lowered);
405
+ if (error)
406
+ errors.push(error);
407
+ break;
408
+ }
409
+ case 'AssertionOrientationGardenView': {
410
+ const error = validateOrientationGardenView(assertion.room, site, geometry);
411
+ if (error)
412
+ errors.push(error);
413
+ break;
414
+ }
415
+ }
416
+ }
417
+ return errors;
418
+ }
419
+ // ============================================================================
213
420
  // Main Validation Function
214
421
  // ============================================================================
215
422
  export function validate(lowered, geometry) {
@@ -234,10 +441,18 @@ export function validate(lowered, geometry) {
234
441
  case 'AssertionRoomsConnected':
235
442
  // TODO: Implement connectivity check
236
443
  break;
444
+ // Orientation assertions handled separately
445
+ case 'AssertionOrientationHasWindow':
446
+ case 'AssertionOrientationNearStreet':
447
+ case 'AssertionOrientationAwayFromStreet':
448
+ case 'AssertionOrientationGardenView':
449
+ break;
237
450
  }
238
451
  }
239
452
  // Validate min room areas
240
453
  errors.push(...validateMinRoomArea(lowered));
454
+ // Validate orientation assertions
455
+ errors.push(...validateOrientationAssertions(lowered, geometry));
241
456
  return errors;
242
457
  }
243
458
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ # Advanced Positioning Example
2
+ #
3
+ # This example demonstrates the advanced positioning features in PlanScript:
4
+ # - Explicit edge alignment: align my <edge> with <room>.<edge>
5
+ # - Auto dimensions: rect size (width, auto) or rect size (auto, height)
6
+ # - Extend directive: extend from <room>.<edge> to <room>.<edge>
7
+ # - Fill between rooms: fill between <room1> and <room2>
8
+ #
9
+ # Floor Plan: Small house with central hallway connecting wings
10
+ #
11
+ # NORTH
12
+ # +--------+ +--------+
13
+ # | Master | | Bed 2 |
14
+ # +--------+ +--------+
15
+ # | Bath | | Closet |
16
+ # +---+----+-----+----+---+
17
+ # | Hallway |
18
+ # +---+--------------+---+
19
+ # | Living |
20
+ # +----------------------+
21
+ # SOUTH
22
+ #
23
+
24
+ units m
25
+
26
+ defaults {
27
+ door_width 0.9
28
+ window_width 1.5
29
+ }
30
+
31
+ plan "Advanced Positioning Demo" {
32
+ footprint rect (0, 0) (14, 16)
33
+
34
+ # ============================================
35
+ # MAIN ROOMS - Define the structure
36
+ # ============================================
37
+
38
+ # Living room - large open space at south
39
+ room living {
40
+ rect (1, 1) (13, 6)
41
+ label "Living Room"
42
+ }
43
+
44
+ # Master suite - northwest corner
45
+ room master {
46
+ rect (1, 10) (5, 15)
47
+ label "Master Bedroom"
48
+ }
49
+
50
+ # Master bathroom - uses explicit edge alignment
51
+ # This demonstrates: align my <edge> with <room>.<edge>
52
+ room master_bath {
53
+ rect size (4, 3)
54
+ attach south_of master
55
+ align my left with master.left # Left edges align precisely
56
+ gap 0
57
+ label "Master Bath"
58
+ }
59
+
60
+ # Bedroom 2 - northeast corner
61
+ room bedroom2 {
62
+ rect (9, 10) (13, 15)
63
+ label "Bedroom 2"
64
+ }
65
+
66
+ # Closet for bedroom 2 - demonstrates explicit alignment
67
+ room closet2 {
68
+ rect size (4, 3)
69
+ attach south_of bedroom2
70
+ align my right with bedroom2.right # Right edges align precisely
71
+ gap 0
72
+ label "Closet"
73
+ }
74
+
75
+ # ============================================
76
+ # HALLWAY - Using fill between rooms
77
+ # ============================================
78
+
79
+ # The hallway fills the vertical gap between living and the bedrooms
80
+ # 'fill between' automatically detects the gap and fills it
81
+ room hallway {
82
+ fill between living and master_bath
83
+ label "Hallway"
84
+ }
85
+
86
+ # ============================================
87
+ # CONNECTING CORRIDOR - Using auto dimensions
88
+ # ============================================
89
+
90
+ # This corridor uses auto width - it will span the gap between
91
+ # master_bath and closet2, demonstrating the extend directive
92
+ room corridor {
93
+ rect size (auto, 3)
94
+ attach north_of hallway
95
+ align my left with master_bath.right
96
+ extend from master_bath.right to closet2.left
97
+ gap 0
98
+ label "Corridor"
99
+ }
100
+
101
+ # ============================================
102
+ # DOORS
103
+ # ============================================
104
+
105
+ # Front door (on living room south wall)
106
+ opening door d_front {
107
+ on living.edge south
108
+ at 50%
109
+ width 1.0
110
+ }
111
+
112
+ # Living to hallway
113
+ opening door d_living_hall {
114
+ between living and hallway
115
+ on shared_edge
116
+ at 50%
117
+ width 1.5
118
+ }
119
+
120
+ # Hallway to master bath
121
+ opening door d_hall_mbath {
122
+ between hallway and master_bath
123
+ on shared_edge
124
+ at 50%
125
+ width 0.8
126
+ }
127
+
128
+ # Master bath to master bedroom
129
+ opening door d_mbath_master {
130
+ between master_bath and master
131
+ on shared_edge
132
+ at 50%
133
+ width 0.8
134
+ }
135
+
136
+ # Hallway to closet2
137
+ opening door d_hall_closet {
138
+ between hallway and closet2
139
+ on shared_edge
140
+ at 50%
141
+ width 0.8
142
+ }
143
+
144
+ # Closet to bedroom2
145
+ opening door d_closet_bed2 {
146
+ between closet2 and bedroom2
147
+ on shared_edge
148
+ at 50%
149
+ width 0.8
150
+ }
151
+
152
+ # Corridor connections
153
+ opening door d_corr_mbath {
154
+ between corridor and master_bath
155
+ on shared_edge
156
+ at 50%
157
+ }
158
+
159
+ opening door d_corr_closet {
160
+ between corridor and closet2
161
+ on shared_edge
162
+ at 50%
163
+ }
164
+
165
+ # ============================================
166
+ # WINDOWS
167
+ # ============================================
168
+
169
+ # Living room - large windows
170
+ opening window w_living_s {
171
+ on living.edge south
172
+ at 3.0
173
+ width 3.0
174
+ }
175
+
176
+ opening window w_living_s2 {
177
+ on living.edge south
178
+ at 9.0
179
+ width 3.0
180
+ }
181
+
182
+ # Master bedroom
183
+ opening window w_master_n {
184
+ on master.edge north
185
+ at 2.0
186
+ width 2.5
187
+ }
188
+
189
+ opening window w_master_w {
190
+ on master.edge west
191
+ at 2.5
192
+ width 2.0
193
+ }
194
+
195
+ # Bedroom 2
196
+ opening window w_bed2_n {
197
+ on bedroom2.edge north
198
+ at 2.0
199
+ width 2.5
200
+ }
201
+
202
+ opening window w_bed2_e {
203
+ on bedroom2.edge east
204
+ at 2.5
205
+ width 2.0
206
+ }
207
+
208
+ # Master bath (small, high window)
209
+ opening window w_mbath {
210
+ on master_bath.edge west
211
+ at 2.0
212
+ width 1.0
213
+ sill 1.5
214
+ }
215
+
216
+ # ============================================
217
+ # VALIDATION
218
+ # ============================================
219
+
220
+ assert no_overlap rooms
221
+ assert inside footprint all_rooms
222
+ assert min_room_area master >= 18
223
+ assert min_room_area living >= 50
224
+ assert min_room_area bedroom2 >= 18
225
+ }
@@ -0,0 +1,76 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="800" viewBox="0 0 1000 800">
3
+ <defs>
4
+ <style>
5
+ .room-label { font-family: Arial, sans-serif; font-weight: 500; }
6
+ </style>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect width="1000" height="800" fill="#ffffff" />
11
+
12
+ <!-- Footprint (boundary) -->
13
+ <path d="M 202.50 740.00 L 797.50 740.00 L 797.50 60.00 L 202.50 60.00 Z" fill="none" stroke="#7f8c8d" stroke-width="2" stroke-dasharray="8,4" />
14
+
15
+ <!-- Rooms -->
16
+ <path d="M 245.00 697.50 L 755.00 697.50 L 755.00 485.00 L 245.00 485.00 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
17
+ <path d="M 245.00 315.00 L 415.00 315.00 L 415.00 102.50 L 245.00 102.50 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
18
+ <path d="M 245.00 442.50 L 415.00 442.50 L 415.00 315.00 L 245.00 315.00 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
19
+ <path d="M 585.00 315.00 L 755.00 315.00 L 755.00 102.50 L 585.00 102.50 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
20
+ <path d="M 585.00 442.50 L 755.00 442.50 L 755.00 315.00 L 585.00 315.00 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
21
+ <path d="M 245.00 485.00 L 415.00 485.00 L 415.00 442.50 L 245.00 442.50 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
22
+ <path d="M 415.00 442.50 L 585.00 442.50 L 585.00 315.00 L 415.00 315.00 Z" fill="#ecf0f1" stroke="#bdc3c7" stroke-width="1" />
23
+
24
+ <!-- Walls -->
25
+ <line x1="245.00" y1="485.00" x2="415.00" y2="485.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
26
+ <line x1="245.00" y1="315.00" x2="415.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
27
+ <line x1="245.00" y1="442.50" x2="415.00" y2="442.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
28
+ <line x1="415.00" y1="442.50" x2="415.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
29
+ <line x1="585.00" y1="315.00" x2="755.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
30
+ <line x1="585.00" y1="442.50" x2="585.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
31
+ <line x1="245.00" y1="697.50" x2="755.00" y2="697.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
32
+ <line x1="755.00" y1="697.50" x2="755.00" y2="485.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
33
+ <line x1="415.00" y1="485.00" x2="755.00" y2="485.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
34
+ <line x1="245.00" y1="697.50" x2="245.00" y2="485.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
35
+ <line x1="415.00" y1="315.00" x2="415.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
36
+ <line x1="245.00" y1="102.50" x2="415.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
37
+ <line x1="245.00" y1="315.00" x2="245.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
38
+ <line x1="245.00" y1="442.50" x2="245.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
39
+ <line x1="755.00" y1="315.00" x2="755.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
40
+ <line x1="585.00" y1="102.50" x2="755.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
41
+ <line x1="585.00" y1="315.00" x2="585.00" y2="102.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
42
+ <line x1="585.00" y1="442.50" x2="755.00" y2="442.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
43
+ <line x1="755.00" y1="442.50" x2="755.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
44
+ <line x1="415.00" y1="485.00" x2="415.00" y2="442.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
45
+ <line x1="245.00" y1="485.00" x2="245.00" y2="442.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
46
+ <line x1="415.00" y1="442.50" x2="585.00" y2="442.50" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
47
+ <line x1="415.00" y1="315.00" x2="585.00" y2="315.00" stroke="#2c3e50" stroke-width="3" stroke-linecap="round" />
48
+
49
+ <!-- Openings (doors/windows) -->
50
+ <line x1="478.75" y1="697.50" x2="521.25" y2="697.50" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
51
+ <line x1="298.13" y1="485.00" x2="361.88" y2="485.00" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
52
+ <line x1="313.00" y1="442.50" x2="347.00" y2="442.50" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
53
+ <line x1="313.00" y1="315.00" x2="347.00" y2="315.00" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
54
+ <line x1="653.00" y1="315.00" x2="687.00" y2="315.00" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
55
+ <line x1="415.00" y1="397.87" x2="415.00" y2="359.63" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
56
+ <line x1="585.00" y1="397.87" x2="585.00" y2="359.63" stroke="#e74c3c" stroke-width="4" stroke-linecap="round" />
57
+ <line x1="308.75" y1="697.50" x2="436.25" y2="697.50" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
58
+ <line x1="563.75" y1="697.50" x2="691.25" y2="697.50" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
59
+ <line x1="276.88" y1="102.50" x2="383.13" y2="102.50" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
60
+ <line x1="245.00" y1="251.25" x2="245.00" y2="166.25" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
61
+ <line x1="616.88" y1="102.50" x2="723.13" y2="102.50" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
62
+ <line x1="755.00" y1="251.25" x2="755.00" y2="166.25" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
63
+ <line x1="245.00" y1="378.75" x2="245.00" y2="336.25" stroke="#3498db" stroke-width="3" stroke-linecap="round" />
64
+
65
+ <!-- Labels -->
66
+ <text x="500.00" y="591.25" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Living Room</text>
67
+ <text x="330.00" y="208.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Master Bedroom</text>
68
+ <text x="330.00" y="378.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Master Bath</text>
69
+ <text x="670.00" y="208.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Bedroom 2</text>
70
+ <text x="670.00" y="378.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Closet</text>
71
+ <text x="330.00" y="463.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Hallway</text>
72
+ <text x="500.00" y="378.75" font-size="14" fill="#2c3e50" text-anchor="middle" dominant-baseline="middle" font-family="Arial, sans-serif">Corridor</text>
73
+
74
+ <!-- Dimensions -->
75
+
76
+ </svg>