Ruben Vons - 6285880 Moritz Cermann - 6562906 Artemi Kurski - 6195784
report.pdf— assignment reportsrc/main.cpp,include/structs.h,CMakeLists.txt— source codedata/2022020320211122Wellness center Sama.ifc— original IFC inputdata/WellnessCenterSama_simplified.obj— intermediate OBJ (generated by IfcConvert, see below)data/mybuilding.city.json— output CityJSON- additionally,
datahas subfolders corresponding to different voxel sizes and surface extraction methods.
- CGAL >= 6.1
- Eigen3
- C++17
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./assignment3
Note that the paths to the input and output file are hardcoded, and the expected input file is data/WellnessCenterSama_simplified.obj
The voxel size is also hardcoded, as double n = 0.25; near the top of main().
This is the value used to generate the submitted mybuilding.city.json.
To replicate the conversion, use IfcConvert, available at https://docs.ifcopenshell.org/ifcconvert/installation.html. Unzip the archive.
cd path/to/unzipped-folder
./IfcConvert --use-element-names --include entities IfcWall IfcRoof IfcFooting IfcWindow IfcDoor IfcStairFlight IfcSlab IfcMember IfcPlate --exclude attribute Name "Floor:Generic 150mm - Filled:348347" attribute Name "Floor:Street:348398" -v path/to/2022020320211122Wellness center Sama.ifc path/to/WellnessCenterSama_simplified.obj"
By default, main() runs the flood-fill + room filtering + voxel-based
surface extraction pipeline (Section 4.4.2). To instead run the mesh-based
extraction (Section 4.4.3), comment out:
ExtractedBoundaries boundaries = extract_surfaces(grid, n, origin_x, origin_y, origin_z, num_rooms);
and uncomment:
//ExtractedBoundaries boundaries = extract_boundaries(mesh);