Skip to content

Commit 5b2f765

Browse files
committed
Integerate cityjson converter
1 parent f1ce5f1 commit 5b2f765

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

.gitmodules

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@
1010
url = https://github.com/IfcOpenShell/svgfill
1111
[submodule "src/ifcopenshell-python/test/Sample-BIM-Files"]
1212
path = src/ifcopenshell-python/test/Sample-BIM-Files
13-
url = https://github.com/IfcOpenShell/ids-test-files
13+
url = https://github.com/IfcOpenShell/ids-test-files
14+
[submodule "src/ifcconvert/cityjson"]
15+
path = src/ifcconvert/cityjson
16+
url = https://github.com/IfcOpenShell/ifc-to-cityjson

cmake/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,23 @@ endif()
919919

920920
if (BUILD_CONVERT)
921921

922+
if (WITH_CGAL)
923+
set(CITYJSON_CONVERT_FILES
924+
../src/ifcconvert/cityjson/geobim.cpp
925+
../src/ifcconvert/cityjson/global_execution_context.cpp
926+
../src/ifcconvert/cityjson/opening_collector.cpp
927+
../src/ifcconvert/cityjson/processing.cpp
928+
../src/ifcconvert/cityjson/radius_comparison.cpp
929+
../src/ifcconvert/cityjson/radius_execution_context.cpp
930+
../src/ifcconvert/cityjson/settings.cpp
931+
../src/ifcconvert/cityjson/writer.cpp
932+
)
933+
934+
add_library(cityjson_converter ${CITYJSON_CONVERT_FILES})
935+
target_include_directories(cityjson_converter PRIVATE ../src)
936+
set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} cityjson_converter)
937+
endif()
938+
922939
# IfcConvert
923940
file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp)
924941
file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h)
@@ -1010,6 +1027,7 @@ ENDIF()
10101027
IF(NOT MINIMAL_BUILD AND BUILD_IFCMAX)
10111028
ADD_SUBDIRECTORY(../src/ifcmax ifcmax)
10121029
ENDIF()
1030+
10131031
if (NOT MINIMAL_BUILD)
10141032
if (WITH_CGAL)
10151033
ADD_SUBDIRECTORY(../src/svgfill svgfill)

src/ifcconvert/IfcConvert.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@
4141

4242
#include "../ifcparse/utils.h"
4343

44+
#ifdef IFOPSH_WITH_CGAL
45+
#include "./cityjson/geobim.h"
46+
#endif
47+
4448
#ifdef IFOPSH_WITH_OPENCASCADE
4549

4650
#include <Standard_Version.hxx>
@@ -116,6 +120,9 @@ void print_usage(bool suggest_help = true)
116120
<< " .svg SVG Scalable Vector Graphics (2D floor plan)\n"
117121
#ifdef WITH_HDF5
118122
<< " .h5 HDF Hierarchical Data Format storing positions, normals and indices\n"
123+
#endif
124+
#ifdef IFOPSH_WITH_CGAL
125+
<< " .city.json City JSON format for geospatial data\n"
119126
#endif
120127
<< " .ifc IFC-SPF Industry Foundation Classes\n"
121128
<< "\n"
@@ -730,6 +737,7 @@ int main(int argc, char** argv) {
730737
CACHE = IfcUtil::path::from_utf8(".cache"),
731738
HDF = IfcUtil::path::from_utf8(".h5"),
732739
XML = IfcUtil::path::from_utf8(".xml"),
740+
CITY_JSON = IfcUtil::path::from_utf8(".cityjson"),
733741
IFC = IfcUtil::path::from_utf8(".ifc");
734742

735743
// @todo clean up serializer selection
@@ -779,6 +787,36 @@ int main(int argc, char** argv) {
779787
write_log(!quiet);
780788
return exit_code;
781789
}
790+
#ifdef IFOPSH_WITH_CGAL
791+
else if (output_extension == CITY_JSON) {
792+
geobim_settings settings;
793+
settings.input_filenames = { IfcUtil::path::to_utf8(input_filename) };
794+
settings.cityjson_output_filename = IfcUtil::path::to_utf8(output_filename);
795+
// @todo
796+
settings.radii = { "0.05" };
797+
settings.apply_openings = false;
798+
settings.apply_openings_posthoc = true;
799+
settings.debug = false;
800+
settings.exact_segmentation = false;
801+
settings.minkowski_triangles = false;
802+
settings.no_erosion = false;
803+
settings.spherical_padding = false;
804+
805+
settings.settings.set(IfcGeom::IteratorSettings::USE_WORLD_COORDS, false);
806+
settings.settings.set(IfcGeom::IteratorSettings::WELD_VERTICES, false);
807+
settings.settings.set(IfcGeom::IteratorSettings::SEW_SHELLS, true);
808+
settings.settings.set(IfcGeom::IteratorSettings::CONVERT_BACK_UNITS, true);
809+
settings.settings.set(IfcGeom::IteratorSettings::DISABLE_TRIANGULATION, true);
810+
settings.settings.set(IfcGeom::IteratorSettings::DISABLE_OPENING_SUBTRACTIONS, !settings.apply_openings);
811+
812+
settings.entity_names = include_filter.values;
813+
settings.entity_names_included = true;
814+
815+
perform(settings);
816+
817+
return 0;
818+
}
819+
#endif
782820

783821
/// @todo Clean up this filter code further.
784822
std::vector<geom_filter> used_filters;

src/ifcconvert/cityjson

Submodule cityjson added at 36f8678

0 commit comments

Comments
 (0)