File size: 2,230 Bytes
6e204a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Unit tests for FloorGen Post-Processing and Vectorization (Stage 4).
"""

import numpy as np
import pytest
from floorgen.postprocess.vectorize import regularize_floorplan, export_svg


def test_regularize_and_svg_export():
    raw_boxes = np.array([
        [-0.8, -0.8, 0.0, 0.8],   # living room
        [0.0, -0.8, 0.8, 0.0],    # bedroom
        [0.0, 0.0, 0.8, 0.8]      # kitchen
    ])
    room_types = ["living_room", "master_bedroom", "kitchen"]
    mask = np.array([True, True, True])

    res = regularize_floorplan(raw_boxes, room_types, mask, grid_size=2.0)
    assert res["num_rooms"] == 3
    assert len(res["rooms"]) == 3
    assert len(res["boundary"]) == 4

    svg_str = export_svg(res)
    assert "<svg" in svg_str
    assert "</svg>" in svg_str
    assert "Living Room" in svg_str


def test_wall_topology_and_furniture():
    from floorgen.postprocess.walls import extract_wall_topology
    from floorgen.postprocess.furniture import place_room_furniture
    from floorgen.postprocess.export_ifc import export_ifc

    rooms = [
        {"name": "living_room", "category": "living_room", "box": [0, 0, 50, 40], "width": 50, "height": 40},
        {"name": "master_bedroom", "category": "master_bedroom", "box": [50, 0, 90, 40], "width": 40, "height": 40}
    ]
    doors = [{"from_room": "living_room", "to_room": "master_bedroom", "position": [50, 20]}]

    # Wall topology
    wall_data = extract_wall_topology(rooms, exterior_thickness=0.2, interior_thickness=0.1)
    assert "walls" in wall_data
    assert len(wall_data["walls"]) > 0
    assert any(w["is_exterior"] for w in wall_data["walls"])

    # Furniture placement
    furniture = place_room_furniture(rooms)
    assert len(furniture) > 0
    categories = [f["type"] for f in furniture]
    assert "sofa" in categories or "king_bed" in categories

    # IFC BIM Export
    plan_dict = {
        "rooms": rooms,
        "boundary": [0, 0, 90, 40],
        "doors": doors,
        "windows": [],
        "walls": wall_data,
        "furniture": furniture
    }
    ifc_str = export_ifc(plan_dict, project_name="UnitTestHouse")
    assert "ISO-10303-21;" in ifc_str
    assert "IFCWALLSTANDARDCASE" in ifc_str
    assert "IFCSPACE" in ifc_str