mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 13:46:54 +00:00
Make IfcParseExamples buildable outside of the main build tree
It's a very verbose version of consuming IfcOpenShell cmake package, but we'll be able to use it as a start point to build upon.
This commit is contained in:
@@ -118,6 +118,31 @@ jobs:
|
|||||||
-DCMAKE_CXX_FLAGS_INIT="-fPIC"
|
-DCMAKE_CXX_FLAGS_INIT="-fPIC"
|
||||||
sudo make -j$(nproc) install
|
sudo make -j$(nproc) install
|
||||||
|
|
||||||
|
# We need zstd and libxml2 just for cmake config files to test the examples build.
|
||||||
|
# zslibzstd-dev has cmake config only on Ubuntu 24.04+.
|
||||||
|
- name : Build zstd
|
||||||
|
run: |
|
||||||
|
git clone https://github.com/facebook/zstd --depth 1 --branch v1.5.7
|
||||||
|
cd zstd
|
||||||
|
# `build` already exists.
|
||||||
|
mkdir build_ && cd build_
|
||||||
|
cmake ../build/cmake -DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||||
|
sudo cmake --build . --target install -j $(nproc)
|
||||||
|
|
||||||
|
# libxml2-dev doesn't have cmake configs even on Ubuntu 24.04+.
|
||||||
|
- name: Build libxml2
|
||||||
|
run: |
|
||||||
|
git clone https://gitlab.gnome.org/GNOME/libxml2.git --branch v2.13.8 --depth 1
|
||||||
|
cd libxml2
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||||
|
sudo cmake --build . --target install -j $(nproc)
|
||||||
|
|
||||||
# Ubuntu has `swig` package, but we build it to match the version we use in the main build.
|
# Ubuntu has `swig` package, but we build it to match the version we use in the main build.
|
||||||
# To avoid failing tests when checking stub generation.
|
# To avoid failing tests when checking stub generation.
|
||||||
- name: build swig
|
- name: build swig
|
||||||
@@ -178,6 +203,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
IfcConvert test/input/acad2010_walls.ifc test/input/acad2010_walls.obj
|
IfcConvert test/input/acad2010_walls.ifc test/input/acad2010_walls.obj
|
||||||
|
|
||||||
|
- name: Build standalone examples to test cmake package
|
||||||
|
run: |
|
||||||
|
cd src/examples
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build .
|
||||||
|
./IfcParseExamples "../IfcParseExamples_test.ifc"
|
||||||
|
|
||||||
- name: Test ifcopenshell-python
|
- name: Test ifcopenshell-python
|
||||||
run: |
|
run: |
|
||||||
cd test
|
cd test
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
/_deps-vs*-x*-installed/
|
/_deps-vs*-x*-installed/
|
||||||
/_installed-vs*-x*/
|
/_installed-vs*-x*/
|
||||||
/build/
|
/build/
|
||||||
|
/src/examples/build/
|
||||||
|
|
||||||
# output directories
|
# output directories
|
||||||
/cmake/out/
|
/cmake/out/
|
||||||
|
|||||||
+45
-17
@@ -17,31 +17,59 @@
|
|||||||
# #
|
# #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
if(SCHEMA_VERSIONS MATCHES "2x3")
|
# Thils file can also be build standalone, outside of the IfcOpenShell build tree,
|
||||||
ADD_EXECUTABLE(IfcParseExamples IfcParseExamples.cpp)
|
# to demonstrate the usage IfcOpenShell as a cmake package.
|
||||||
TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse)
|
if(NOT BUILD_EXAMPLES)
|
||||||
set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples)
|
set(STANDALONE_PROJECT ON)
|
||||||
target_compile_features(IfcParseExamples PUBLIC cxx_std_17)
|
endif()
|
||||||
|
|
||||||
if(WITH_OPENCASCADE)
|
if(STANDALONE_PROJECT)
|
||||||
|
cmake_minimum_required(VERSION 3.21)
|
||||||
|
project(IfcOpenShellExamples)
|
||||||
|
|
||||||
ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES})
|
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||||
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
|
set(Boost_COMPONENTS system program_options regex thread date_time iostreams)
|
||||||
|
find_package(Boost CONFIG REQUIRED COMPONENTS ${Boost_COMPONENTS})
|
||||||
|
find_package(zstd CONFIG REQUIRED)
|
||||||
|
find_package(RocksDB CONFIG REQUIRED)
|
||||||
|
find_package(LibXml2 CONFIG REQUIRED)
|
||||||
|
find_package(IfcOpenShell CONFIG REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(STANDALONE_PROJECT OR SCHEMA_VERSIONS MATCHES "2x3")
|
||||||
|
add_executable(IfcParseExamples IfcParseExamples.cpp)
|
||||||
|
|
||||||
|
if(STANDALONE_PROJECT)
|
||||||
|
target_include_directories(IfcParseExamples PRIVATE ${Boost_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(IfcParseExamples ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(IfcParseExamples IfcOpenShell::IfcParse)
|
||||||
|
target_compile_features(IfcParseExamples PRIVATE cxx_std_17)
|
||||||
|
target_compile_definitions(IfcParseExamples PRIVATE "SCHEMA_SEQ=(2x3)" HAS_SCHEMA_2x3 IFOPSH_WITH_ROCKSDB)
|
||||||
|
else()
|
||||||
|
target_link_libraries(IfcParseExamples IfcParse)
|
||||||
|
set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples)
|
||||||
|
target_compile_features(IfcParseExamples PRIVATE cxx_std_17)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT STANDALONE_PROJECT AND WITH_OPENCASCADE)
|
||||||
|
add_executable(IfcOpenHouse IfcOpenHouse.cpp)
|
||||||
|
target_link_libraries(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES})
|
||||||
set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples)
|
set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples)
|
||||||
|
|
||||||
ADD_EXECUTABLE(IfcAdvancedHouse IfcAdvancedHouse.cpp)
|
add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp)
|
||||||
TARGET_LINK_LIBRARIES(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES})
|
target_link_libraries(IfcAdvancedHouse ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES})
|
||||||
set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples)
|
set_target_properties(IfcAdvancedHouse PROPERTIES FOLDER Examples)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
endif(SCHEMA_VERSIONS MATCHES "2x3")
|
endif()
|
||||||
|
|
||||||
if(SCHEMA_VERSIONS MATCHES "4x3_add2")
|
if(NOT STANDALONE_PROJECT AND SCHEMA_VERSIONS MATCHES "4x3_add2")
|
||||||
ADD_EXECUTABLE(IfcAlignment IfcAlignment.cpp)
|
add_executable(IfcAlignment IfcAlignment.cpp)
|
||||||
TARGET_LINK_LIBRARIES(IfcAlignment ${IFCOPENSHELL_LIBRARIES})
|
target_link_libraries(IfcAlignment ${IFCOPENSHELL_LIBRARIES})
|
||||||
set_target_properties(IfcAlignment PROPERTIES FOLDER Examples)
|
set_target_properties(IfcAlignment PROPERTIES FOLDER Examples)
|
||||||
|
|
||||||
ADD_EXECUTABLE(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp)
|
add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp)
|
||||||
TARGET_LINK_LIBRARIES(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES})
|
target_link_libraries(IfcSimplifiedAlignment ${IFCOPENSHELL_LIBRARIES})
|
||||||
set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples)
|
set_target_properties(IfcSimplifiedAlignment PROPERTIES FOLDER Examples)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -0,0 +1,97 @@
|
|||||||
|
ISO-10303-21;
|
||||||
|
HEADER;
|
||||||
|
FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1');
|
||||||
|
FILE_NAME('IfcParseExamples_test.ifc','2025-12-12T13:49:19+05:00',(''),(''),'IfcOpenShell 0.0.0','Bonsai 0.8.5-alpha251212-a47cbc3','Nobody');
|
||||||
|
FILE_SCHEMA(('IFC2X3'));
|
||||||
|
ENDSEC;
|
||||||
|
DATA;
|
||||||
|
#1=IFCPERSON('HSeldon','Seldon','Hari',$,$,$,$,$);
|
||||||
|
#2=IFCORGANIZATION('APTR','Aperture Science',$,$,$);
|
||||||
|
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
|
||||||
|
#4=IFCACTORROLE(.USERDEFINED.,'CONTRIBUTOR',$);
|
||||||
|
#5=IFCORGANIZATION('IfcOpenShell','IfcOpenShell','IfcOpenShell is an open source software library that helps users and software developers to work with IFC data.',(#4),(#6));
|
||||||
|
#6=IFCTELECOMADDRESS(.USERDEFINED.,$,'WEBPAGE',$,$,$,$,'https://ifcopenshell.org');
|
||||||
|
#7=IFCAPPLICATION(#5,'0.8.5','Bonsai','Bonsai-0.8.5');
|
||||||
|
#8=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605);
|
||||||
|
#9=IFCPROJECT('3GSSvm5SP5U96O5iar8uYb',#8,'My Project',$,$,$,$,(#22,#34),#17);
|
||||||
|
#10=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
|
||||||
|
#11=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
|
||||||
|
#12=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
|
||||||
|
#13=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
|
||||||
|
#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
|
||||||
|
#15=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#14);
|
||||||
|
#16=IFCCONVERSIONBASEDUNIT(#13,.PLANEANGLEUNIT.,'degree',#15);
|
||||||
|
#17=IFCUNITASSIGNMENT((#12,#10,#16,#11));
|
||||||
|
#18=IFCCARTESIANPOINT((0.,0.,0.));
|
||||||
|
#19=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#20=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#21=IFCAXIS2PLACEMENT3D(#18,#19,#20);
|
||||||
|
#22=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#21,$);
|
||||||
|
#23=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
|
||||||
|
#24=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#22,$,.GRAPH_VIEW.,$);
|
||||||
|
#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
|
||||||
|
#26=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.SECTION_VIEW.,$);
|
||||||
|
#27=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.ELEVATION_VIEW.,$);
|
||||||
|
#28=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
|
||||||
|
#29=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#22,$,.PLAN_VIEW.,$);
|
||||||
|
#30=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Profile','Model',*,*,*,*,#22,$,.ELEVATION_VIEW.,$);
|
||||||
|
#31=IFCCARTESIANPOINT((0.,0.));
|
||||||
|
#32=IFCDIRECTION((1.,0.));
|
||||||
|
#33=IFCAXIS2PLACEMENT2D(#31,#32);
|
||||||
|
#34=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#33,$);
|
||||||
|
#35=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Plan',*,*,*,*,#34,$,.GRAPH_VIEW.,$);
|
||||||
|
#36=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#34,$,.PLAN_VIEW.,$);
|
||||||
|
#37=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#34,$,.PLAN_VIEW.,$);
|
||||||
|
#38=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#34,$,.REFLECTED_PLAN_VIEW.,$);
|
||||||
|
#39=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605);
|
||||||
|
#40=IFCSITE('2Ys4j4OOf3x9UYeALDJ_g3',#39,'My Site',$,$,#66,$,$,.ELEMENT.,$,$,$,$,$);
|
||||||
|
#46=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605);
|
||||||
|
#47=IFCBUILDING('3e580MQFTCD9tCSaZWRPi9',#46,'My Building',$,$,#73,$,$,.ELEMENT.,$,$,$);
|
||||||
|
#53=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520605,#3,#7,1765520605);
|
||||||
|
#54=IFCBUILDINGSTOREY('3XFkAr6KbAsP5wR3gxi3my',#53,'My Storey',$,$,#80,$,$,.ELEMENT.,$);
|
||||||
|
#60=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605);
|
||||||
|
#61=IFCRELAGGREGATES('2OWfFyDQn0qP0Vd6NWGX7k',#60,$,$,#9,(#40));
|
||||||
|
#62=IFCCARTESIANPOINT((0.,0.,0.));
|
||||||
|
#63=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#64=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#65=IFCAXIS2PLACEMENT3D(#62,#63,#64);
|
||||||
|
#66=IFCLOCALPLACEMENT($,#65);
|
||||||
|
#67=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605);
|
||||||
|
#68=IFCRELAGGREGATES('3_X_vfPpXDaO3NODBJgmSp',#67,$,$,#40,(#47));
|
||||||
|
#69=IFCCARTESIANPOINT((0.,0.,0.));
|
||||||
|
#70=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#71=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#72=IFCAXIS2PLACEMENT3D(#69,#70,#71);
|
||||||
|
#73=IFCLOCALPLACEMENT(#66,#72);
|
||||||
|
#74=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1765520605,#3,#7,1765520605);
|
||||||
|
#75=IFCRELAGGREGATES('3ScF98CZD3pAa0SW$mhBHF',#74,$,$,#47,(#54));
|
||||||
|
#76=IFCCARTESIANPOINT((0.,0.,0.));
|
||||||
|
#77=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#78=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#79=IFCAXIS2PLACEMENT3D(#76,#77,#78);
|
||||||
|
#80=IFCLOCALPLACEMENT(#73,#79);
|
||||||
|
#110=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520632);
|
||||||
|
#111=IFCWALL('1lfiJzSCH1a8vjDuSLL4Ii',#110,'Cube',$,$,#203,$,$);
|
||||||
|
#112=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765520818,#3,#7,1765520632);
|
||||||
|
#113=IFCRELCONTAINEDINSPATIALSTRUCTURE('2Gqx6vP7jB4x_h65Tawn0f',#112,$,$,(#111,#182,#150),#54);
|
||||||
|
#149=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520810);
|
||||||
|
#150=IFCWINDOW('1eE0btB_54tBL59wLXKO1B',#149,'Cube',$,$,#208,$,$,$,$);
|
||||||
|
#181=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1765529359,#3,#7,1765520818);
|
||||||
|
#182=IFCBUILDINGELEMENTPART('0fmaoBJgz0kPBavO$EJkPn',#181,'Cube',$,$,#198,$,$);
|
||||||
|
#194=IFCCARTESIANPOINT((-3.82147288322449,-0.987768530845642,1.78445267677307));
|
||||||
|
#195=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#196=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#197=IFCAXIS2PLACEMENT3D(#194,#195,#196);
|
||||||
|
#198=IFCLOCALPLACEMENT(#80,#197);
|
||||||
|
#199=IFCCARTESIANPOINT((0.,0.,0.));
|
||||||
|
#200=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#201=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#202=IFCAXIS2PLACEMENT3D(#199,#200,#201);
|
||||||
|
#203=IFCLOCALPLACEMENT(#80,#202);
|
||||||
|
#204=IFCCARTESIANPOINT((0.,4.25822639465332,0.));
|
||||||
|
#205=IFCDIRECTION((0.,0.,1.));
|
||||||
|
#206=IFCDIRECTION((1.,0.,0.));
|
||||||
|
#207=IFCAXIS2PLACEMENT3D(#204,#205,#206);
|
||||||
|
#208=IFCLOCALPLACEMENT(#80,#207);
|
||||||
|
ENDSEC;
|
||||||
|
END-ISO-10303-21;
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
Example of building IfcParseExamples outside of the IfcOpenShell build tree.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$IFCOPENSHELL_ROOT="L:\Projects\Github\IfcOpenShell"
|
||||||
|
$PREFIX_PATH="$IFCOPENSHELL_ROOT\_deps\boost_1_86_0\stage\vs2022-x64"
|
||||||
|
$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_installed-vs2022-x64"
|
||||||
|
$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\rocksdb"
|
||||||
|
$PREFIX_PATH+=";$IFCOPENSHELL_ROOT\_deps-vs2022-x64-installed\zstd"
|
||||||
|
$PREFIX_PATH+=";L:\Software\usr\libxml2"
|
||||||
|
|
||||||
|
cmake .. -G Ninja -DCMAKE_PREFIX_PATH="$PREFIX_PATH" -DCMAKE_BUILD_TYPE=Release
|
||||||
|
ninja -v
|
||||||
|
./IfcParseExamples.exe "../IfcParseExamples_test.ifc"
|
||||||
|
# Scanning file...
|
||||||
|
# Done scanning file
|
||||||
|
# Done resolving references
|
||||||
|
# Found 3 elements in ..\IfcParseExamples_test.ifc:
|
||||||
|
# #182=IfcBuildingElementPart('0fmaoBJgz0kPBavO$EJkPn',#181,'Cube',$,$,#193,#183,$)
|
||||||
|
# #111=IfcWall('1lfiJzSCH1a8vjDuSLL4Ii',#110,'Cube',$,$,#119,#114,$)
|
||||||
|
# #150=IfcWindow('1eE0btB_54tBL59wLXKO1B',#149,'Cube',$,$,#188,#151,$,$,$)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user