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.
- package/LANGUAGE_REFERENCE.md +472 -4
- package/dist/ast/types.d.ts +84 -4
- package/dist/ast/types.d.ts.map +1 -1
- package/dist/cli.js +28 -6
- package/dist/cli.js.map +1 -1
- package/dist/exporters/svg.d.ts +3 -0
- package/dist/exporters/svg.d.ts.map +1 -1
- package/dist/exporters/svg.js +48 -2
- package/dist/exporters/svg.js.map +1 -1
- package/dist/geometry/index.d.ts.map +1 -1
- package/dist/geometry/index.js +7 -0
- package/dist/geometry/index.js.map +1 -1
- package/dist/geometry/types.d.ts +7 -0
- package/dist/geometry/types.d.ts.map +1 -1
- package/dist/lowering/index.d.ts +23 -1
- package/dist/lowering/index.d.ts.map +1 -1
- package/dist/lowering/index.js +374 -28
- package/dist/lowering/index.js.map +1 -1
- package/dist/parser/grammar.d.ts +52 -5
- package/dist/parser/grammar.d.ts.map +1 -1
- package/dist/parser/grammar.js +4927 -2026
- package/dist/parser/grammar.js.map +1 -1
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +215 -0
- package/dist/validation/index.js.map +1 -1
- package/examples/advanced_positioning.psc +225 -0
- package/examples/advanced_positioning.svg +76 -0
- package/examples/courtyard_house.psc +141 -0
- package/examples/courtyard_house.svg +93 -0
- package/examples/orientation.psc +141 -0
- package/examples/orientation.svg +88 -0
- package/examples/zones.psc +275 -0
- package/examples/zones.svg +89 -0
- package/package.json +1 -1
- package/examples/casa_moderna.psc +0 -375
- package/examples/casa_moderna_v2.psc +0 -406
- package/examples/casa_moderna_v3.psc +0 -375
- package/examples/casa_moderna_v5.psc +0 -397
- package/examples/house2.psc +0 -156
- package/examples/house2.svg +0 -103
- 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,
|
|
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"}
|
package/dist/validation/index.js
CHANGED
|
@@ -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>
|