make: Try to build and run others examples

This commit is contained in:
Esteban DUGUEPEROUX
2025-12-12 22:44:40 +01:00
parent 3983bfa467
commit a86c333a99
13 changed files with 246 additions and 123 deletions
+11
View File
@@ -215,11 +215,22 @@ jobs:
-DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
cmake --build . cmake --build .
# To display executed command
set -x
./arbitrary_open_profile_def
./composite_profile_def
./csg_primitive
./ellipse_pies
./faces
./ifc_curve_rebar
./profiles
./IfcParseExamples "../IfcParseExamples_test.ifc" ./IfcParseExamples "../IfcParseExamples_test.ifc"
./IfcOpenHouse ./IfcOpenHouse
./IfcAdvancedHouse ./IfcAdvancedHouse
./IfcAlignment ./IfcAlignment
./IfcSimplifiedAlignment ./IfcSimplifiedAlignment
./triangulated_faceset
set +x
- name: Test ifcopenshell-python - name: Test ifcopenshell-python
run: | run: |
+1
View File
@@ -218,6 +218,7 @@ if(BUILD_IFCGEOM AND WITH_OPENCASCADE)
find_package(OpenCASCADE REQUIRED) find_package(OpenCASCADE REQUIRED)
add_definitions(-DIFOPSH_WITH_OPENCASCADE) add_definitions(-DIFOPSH_WITH_OPENCASCADE)
set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_OPENCASCADE)
# set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES})
list(APPEND GEOMETRY_KERNELS opencascade) list(APPEND GEOMETRY_KERNELS opencascade)
endif() endif()
+102
View File
@@ -35,7 +35,107 @@ else()
include_directories("${CMAKE_SOURCE_DIR}/../src") include_directories("${CMAKE_SOURCE_DIR}/../src")
endif() endif()
if(SCHEMA_VERSIONS MATCHES "4")
# arbitrary_open_profile_def
add_executable(arbitrary_open_profile_def arbitrary_open_profile_def.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(arbitrary_open_profile_def IfcOpenShell::IfcParse)
else()
target_include_directories(arbitrary_open_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(arbitrary_open_profile_def IfcParse)
set_target_properties(arbitrary_open_profile_def PROPERTIES FOLDER Examples)
endif()
install(TARGETS arbitrary_open_profile_def)
# triangulated_faceset
add_executable(triangulated_faceset triangulated_faceset.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(triangulated_faceset IfcOpenShell::IfcParse)
else()
target_include_directories(triangulated_faceset PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(triangulated_faceset IfcParse)
set_target_properties(triangulated_faceset PROPERTIES FOLDER Examples)
endif()
install(TARGETS triangulated_faceset)
endif()
if(SCHEMA_VERSIONS MATCHES "2x3") if(SCHEMA_VERSIONS MATCHES "2x3")
# composite_profile_def.cpp
add_executable(composite_profile_def composite_profile_def.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(composite_profile_def IfcOpenShell::IfcParse)
else()
target_include_directories(composite_profile_def PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(composite_profile_def IfcParse)
set_target_properties(composite_profile_def PROPERTIES FOLDER Examples)
endif()
install(TARGETS composite_profile_def)
# csg_primitive
add_executable(csg_primitive csg_primitive.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(csg_primitive IfcOpenShell::IfcParse)
else()
target_include_directories(csg_primitive PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(csg_primitive IfcParse)
set_target_properties(csg_primitive PROPERTIES FOLDER Examples)
endif()
install(TARGETS csg_primitive)
# ellipse_pies
add_executable(ellipse_pies ellipse_pies.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(ellipse_pies IfcOpenShell::IfcParse)
else()
target_include_directories(ellipse_pies PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(ellipse_pies IfcParse)
set_target_properties(ellipse_pies PROPERTIES FOLDER Examples)
endif()
install(TARGETS ellipse_pies)
# faces
add_executable(faces faces.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(faces IfcOpenShell::IfcParse)
else()
target_include_directories(faces PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(faces IfcParse)
set_target_properties(faces PROPERTIES FOLDER Examples)
endif()
install(TARGETS faces)
# ifc_curve_rebar
add_executable(ifc_curve_rebar ifc_curve_rebar.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(ifc_curve_rebar IfcOpenShell::IfcParse)
else()
target_include_directories(ifc_curve_rebar PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(ifc_curve_rebar IfcParse)
set_target_properties(ifc_curve_rebar PROPERTIES FOLDER Examples)
endif()
install(TARGETS ifc_curve_rebar)
# profiles
add_executable(profiles profiles.cpp)
if(STANDALONE_PROJECT)
target_link_libraries(profiles IfcOpenShell::IfcParse)
else()
target_include_directories(profiles PRIVATE "${CMAKE_SOURCE_DIR}/../src")
target_link_libraries(profiles IfcParse)
set_target_properties(profiles PROPERTIES FOLDER Examples)
endif()
install(TARGETS profiles)
# IfcParseExamples
add_executable(IfcParseExamples IfcParseExamples.cpp) add_executable(IfcParseExamples IfcParseExamples.cpp)
if(STANDALONE_PROJECT) if(STANDALONE_PROJECT)
@@ -48,6 +148,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3")
install(TARGETS IfcParseExamples) install(TARGETS IfcParseExamples)
if(WITH_OPENCASCADE) if(WITH_OPENCASCADE)
# IfcOpenHouse and IfcAdvancedHouse
add_executable(IfcOpenHouse IfcOpenHouse.cpp) add_executable(IfcOpenHouse IfcOpenHouse.cpp)
add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp) add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp)
add_library(IfcHouseInterface INTERFACE) add_library(IfcHouseInterface INTERFACE)
@@ -66,6 +167,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3")
endif() endif()
if(SCHEMA_VERSIONS MATCHES "4x3_add2") if(SCHEMA_VERSIONS MATCHES "4x3_add2")
# IfcAlignment and IfcSimplifiedAlignment
add_executable(IfcAlignment IfcAlignment.cpp) add_executable(IfcAlignment IfcAlignment.cpp)
add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp) add_executable(IfcSimplifiedAlignment IfcSimplifiedAlignment.cpp)
add_library(IfcAlignmentInterface INTERFACE) add_library(IfcAlignmentInterface INTERFACE)
+16 -15
View File
@@ -28,16 +28,16 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc4
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc4.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
boost::none_t const null = boost::none; boost::none_t const null = boost::none;
static int i = 0; static int i = 0;
void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresentationItem* item, const std::string& s) { void create_product_from_item(IfcHierarchyHelper<IfcSchema>& file, IfcSchema::IfcRepresentationItem* item, const std::string& s) {
IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy( IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy(
guid(), 0, S("product"), null, null, 0, 0, null, null); guid(), 0, S("product"), null, null, 0, 0, null, null);
file.addBuildingProduct(product); file.addBuildingProduct(product);
@@ -50,7 +50,7 @@ void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresenta
items->push(item); items->push(item);
if (s == "GeometricSet") { if (s == "GeometricSet") {
IfcSchema::IfcGeometricSet* set = new IfcSchema::IfcGeometricSet(items->generalize()); IfcSchema::IfcGeometricSet* set = new IfcSchema::IfcGeometricSet(items->as<IfcSchema::IfcGeometricSetSelect>());
file.addEntity(set); file.addEntity(set);
items = IfcSchema::IfcRepresentationItem::list::ptr(new IfcSchema::IfcRepresentationItem::list()); items = IfcSchema::IfcRepresentationItem::list::ptr(new IfcSchema::IfcRepresentationItem::list());
items->push(set); items->push(set);
@@ -67,7 +67,7 @@ void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresenta
product->setRepresentation(shape); product->setRepresentation(shape);
} }
void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { void create_surfaces_from_profile(IfcHierarchyHelper<IfcSchema>& file, IfcSchema::IfcProfileDef* profile) {
IfcSchema::IfcSurfaceOfLinearExtrusion* extrusion = new IfcSchema::IfcSurfaceOfLinearExtrusion(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.); IfcSchema::IfcSurfaceOfLinearExtrusion* extrusion = new IfcSchema::IfcSurfaceOfLinearExtrusion(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.);
file.addEntity(extrusion); file.addEntity(extrusion);
@@ -80,7 +80,7 @@ void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfil
create_product_from_item(file, revolution, "GeometricSet"); create_product_from_item(file, revolution, "GeometricSet");
} }
void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) { void create_solids_from_profile(IfcHierarchyHelper<IfcSchema>& file, IfcSchema::IfcProfileDef* profile) {
IfcSchema::IfcExtrudedAreaSolid* extrusion = new IfcSchema::IfcExtrudedAreaSolid(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.); IfcSchema::IfcExtrudedAreaSolid* extrusion = new IfcSchema::IfcExtrudedAreaSolid(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.);
file.addEntity(extrusion); file.addEntity(extrusion);
@@ -96,7 +96,7 @@ void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileD
create_product_from_item(file, revolution2, "SweptSolid"); create_product_from_item(file, revolution2, "SweptSolid");
} }
void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedCurve* curve) { void create_products_from_curve(IfcHierarchyHelper<IfcSchema>& file, IfcSchema::IfcBoundedCurve* curve) {
IfcSchema::IfcArbitraryOpenProfileDef* open = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, null, curve); IfcSchema::IfcArbitraryOpenProfileDef* open = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, null, curve);
IfcSchema::IfcCenterLineProfileDef* center_line = new IfcSchema::IfcCenterLineProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, curve, 10.); IfcSchema::IfcCenterLineProfileDef* center_line = new IfcSchema::IfcCenterLineProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, curve, 10.);
file.addEntity(open); file.addEntity(open);
@@ -108,8 +108,8 @@ void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedC
int main(int argc, char** argv) { int main(int argc, char** argv) {
const char filename[] = "IfcArbitraryOpenProfileDef.ifc"; const char filename[] = "IfcArbitraryOpenProfileDef.ifc";
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
file.header().file_name().name(filename); file.header().file_name()->setname(filename);
double coords1[] = {-50.0, 0.0}; double coords1[] = {-50.0, 0.0};
double coords2[] = { 50.0, 0.0}; double coords2[] = { 50.0, 0.0};
@@ -124,17 +124,18 @@ int main(int argc, char** argv) {
IfcSchema::IfcEllipse* ellipse = new IfcSchema::IfcEllipse(file.addPlacement2d(), 50., 25.); IfcSchema::IfcEllipse* ellipse = new IfcSchema::IfcEllipse(file.addPlacement2d(), 50., 25.);
file.addEntity(ellipse); file.addEntity(ellipse);
IfcEntityList::ptr trim1(new IfcEntityList); aggregate_of_instance::ptr trim1(new aggregate_of_instance);
IfcEntityList::ptr trim2(new IfcEntityList); aggregate_of_instance::ptr trim2(new aggregate_of_instance);
trim1->push(new IfcSchema::IfcParameterValue( 0.)); trim1->push(new IfcSchema::IfcParameterValue( 0.));
trim2->push(new IfcSchema::IfcParameterValue(180.)); trim2->push(new IfcSchema::IfcParameterValue(180.));
IfcSchema::IfcTrimmedCurve* trim = new IfcSchema::IfcTrimmedCurve(ellipse, trim1, trim2, true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); IfcSchema::IfcTrimmedCurve* trim = new IfcSchema::IfcTrimmedCurve(ellipse, trim1->as<IfcSchema::IfcTrimmingSelect>(), trim2->as<IfcSchema::IfcTrimmingSelect>(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
file.addEntity(trim); file.addEntity(trim);
create_products_from_curve(file, trim); create_products_from_curve(file, trim);
file.getSingle<Ifc2x3::IfcProject>()->setName("IfcArbitraryOpenProfileDef"); using namespace std::string_literals;
file.getSingle<IfcSchema::IfcProject>()->setName("IfcArbitraryOpenProfileDef"s);
std::ofstream f(filename); std::ofstream f(filename);
f << file; f << file;
} }
+7 -6
View File
@@ -27,9 +27,9 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc2x3
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
@@ -37,8 +37,8 @@ boost::none_t const null = boost::none;
int main(int argc, char** argv) { int main(int argc, char** argv) {
const char filename[] = "IfcCompositeProfileDef.ifc"; const char filename[] = "IfcCompositeProfileDef.ifc";
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
file.header().file_name().name(filename); file.header().file_name()->setname(filename);
double coords1[] = {100.0, 0.0}; double coords1[] = {100.0, 0.0};
double coords2[] = {200.0, 0.0}; double coords2[] = {200.0, 0.0};
@@ -112,7 +112,8 @@ int main(int argc, char** argv) {
product->setRepresentation(shape); product->setRepresentation(shape);
file.getSingle<IfcSchema::IfcProject>()->setName("IfcCompositeProfileDef"); using namespace std::string_literals;
file.getSingle<IfcSchema::IfcProject>()->setName("IfcCompositeProfileDef"s);
std::ofstream f(filename); std::ofstream f(filename);
f << file; f << file;
+10 -9
View File
@@ -27,9 +27,9 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc2x3
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
@@ -101,7 +101,7 @@ public:
return operate(OP_INTERSECT, p); return operate(OP_INTERSECT, p);
} }
IfcSchema::IfcRepresentationItem* serialize(IfcHierarchyHelper& file) const { IfcSchema::IfcRepresentationItem* serialize(IfcHierarchyHelper<IfcSchema>& file) const {
IfcSchema::IfcRepresentationItem* my; IfcSchema::IfcRepresentationItem* my;
if (op == OP_TERMINAL) { if (op == OP_TERMINAL) {
IfcSchema::IfcAxis2Placement3D* place = file.addPlacement3d(x,y,z,zx,zy,zz,xx,xy,xz); IfcSchema::IfcAxis2Placement3D* place = file.addPlacement3d(x,y,z,zx,zy,zz,xx,xy,xz);
@@ -117,7 +117,7 @@ public:
my = new IfcSchema::IfcRightCircularCone(place, b, a); my = new IfcSchema::IfcRightCircularCone(place, b, a);
} }
} else { } else {
IfcSchema::IfcBooleanOperator::IfcBooleanOperator o; IfcSchema::IfcBooleanOperator o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION;
if (op == OP_ADD) { if (op == OP_ADD) {
o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION; o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION;
} else if (op == OP_SUBTRACT) { } else if (op == OP_SUBTRACT) {
@@ -125,7 +125,7 @@ public:
} else if (op == OP_INTERSECT) { } else if (op == OP_INTERSECT) {
o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION; o = IfcSchema::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION;
} }
my = new IfcSchema::IfcBooleanResult(o, left->serialize(file), right->serialize(file)); my = new IfcSchema::IfcBooleanResult(o, left->serialize(file)->as<IfcSchema::IfcBooleanOperand>(), right->serialize(file)->as<IfcSchema::IfcBooleanOperand>());
} }
file.addEntity(my); file.addEntity(my);
return my; return my;
@@ -134,8 +134,8 @@ public:
int main(int argc, char** argv) { int main(int argc, char** argv) {
const char filename[] = "IfcCsgPrimitive.ifc"; const char filename[] = "IfcCsgPrimitive.ifc";
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
file.header().file_name().name(filename); file.header().file_name()->setname(filename);
IfcSchema::IfcRepresentationItem* csg1 = Node::Box(8000.,6000.,3000.).subtract( IfcSchema::IfcRepresentationItem* csg1 = Node::Box(8000.,6000.,3000.).subtract(
Node::Box(7600.,5600.,2800.).move(200.,200.,200.) Node::Box(7600.,5600.,2800.).move(200.,200.,200.)
@@ -186,7 +186,8 @@ int main(int argc, char** argv) {
product->setRepresentation(shape); product->setRepresentation(shape);
file.getSingle<IfcSchema::IfcProject>()->setName("IfcCompositeProfileDef"); using namespace std::string_literals;
file.getSingle<IfcSchema::IfcProject>()->setName("IfcCompositeProfileDef"s);
std::ofstream f(filename); std::ofstream f(filename);
f << file; f << file;
+21 -21
View File
@@ -27,9 +27,9 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc2x3
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
@@ -44,7 +44,7 @@ typedef struct {
static int i = 0; static int i = 0;
void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference pref) { void create_testcase_for(IfcHierarchyHelper<IfcSchema>& file, const EllipsePie& pie, IfcSchema::IfcTrimmingPreference pref) {
const double deg = 1. / 180. * 3.141592653; const double deg = 1. / 180. * 3.141592653;
double flt1[] = {0. , 0. }; double flt1[] = {0. , 0. };
double flt2[] = {pie.r1 * cos(pie.t1*deg), pie.r2 * sin(pie.t1*deg)}; double flt2[] = {pie.r1 * cos(pie.t1*deg), pie.r2 * sin(pie.t1*deg)};
@@ -67,16 +67,16 @@ void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3
Ifc2x3::IfcEllipse* ellipse = new Ifc2x3::IfcEllipse(file.addPlacement2d(), pie.r1, pie.r2); Ifc2x3::IfcEllipse* ellipse = new Ifc2x3::IfcEllipse(file.addPlacement2d(), pie.r1, pie.r2);
file.addEntity(ellipse); file.addEntity(ellipse);
IfcEntityList::ptr trim1(new IfcEntityList); aggregate_of_instance::ptr trim1(new aggregate_of_instance);
IfcEntityList::ptr trim2(new IfcEntityList); aggregate_of_instance::ptr trim2(new aggregate_of_instance);
if (pref == Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER) { if (pref == IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER) {
trim1->push(new Ifc2x3::IfcParameterValue(pie.t1)); trim1->push(new Ifc2x3::IfcParameterValue(pie.t1));
trim2->push(new Ifc2x3::IfcParameterValue(pie.t2)); trim2->push(new Ifc2x3::IfcParameterValue(pie.t2));
} else { } else {
trim1->push(p2); trim1->push(p2);
trim2->push(p3); trim2->push(p3);
} }
Ifc2x3::IfcTrimmedCurve* trim = new Ifc2x3::IfcTrimmedCurve(ellipse, trim1, trim2, true, pref); Ifc2x3::IfcTrimmedCurve* trim = new Ifc2x3::IfcTrimmedCurve(ellipse, trim1->as<IfcSchema::IfcTrimmingSelect>(), trim2->as<IfcSchema::IfcTrimmingSelect>(), true, pref);
file.addEntity(trim); file.addEntity(trim);
Ifc2x3::IfcCompositeCurveSegment::list::ptr segments(new Ifc2x3::IfcCompositeCurveSegment::list()); Ifc2x3::IfcCompositeCurveSegment::list::ptr segments(new Ifc2x3::IfcCompositeCurveSegment::list());
@@ -124,25 +124,25 @@ void create_testcase_for(IfcHierarchyHelper& file, const EllipsePie& pie, Ifc2x3
int main(int argc, char** argv) { int main(int argc, char** argv) {
const std::string filename = "ellipse_pies.ifc"; const std::string filename = "ellipse_pies.ifc";
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
{ EllipsePie pie = {80., 50., 0., 150.}; { EllipsePie pie = {80., 50., 0., 150.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
{ EllipsePie pie = {80, 50., 30., 300.}; { EllipsePie pie = {80, 50., 30., 300.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
{ EllipsePie pie = {80, 50., 300., 30.}; { EllipsePie pie = {80, 50., 300., 30.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
{ EllipsePie pie = {50., 80., 0., 150.}; { EllipsePie pie = {50., 80., 0., 150.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
{ EllipsePie pie = {50, 80., 30., 300.}; { EllipsePie pie = {50, 80., 30., 300.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
{ EllipsePie pie = {50, 80., 300., 30.}; { EllipsePie pie = {50, 80., 300., 30.};
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER); create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
create_testcase_for(file, pie, Ifc2x3::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);} create_testcase_for(file, pie, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);}
std::ofstream f(filename.c_str()); std::ofstream f(filename.c_str());
f << file; f << file;
} }
+12 -11
View File
@@ -22,18 +22,19 @@
* Example that generates various forms of IfcFace * * Example that generates various forms of IfcFace *
* * * *
********************************************************************************/ ********************************************************************************/
#include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc2x3
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
boost::none_t const null = (static_cast<boost::none_t>(0)); boost::none_t const null = boost::none;
static int x = 0; static int x = 0;
void create_testcase(IfcHierarchyHelper& file, IfcSchema::IfcFace* face, const std::string& name) { void create_testcase(IfcHierarchyHelper<IfcSchema>& file, IfcSchema::IfcFace* face, const std::string& name) {
IfcSchema::IfcFace::list::ptr faces(new IfcSchema::IfcFace::list); IfcSchema::IfcFace::list::ptr faces(new IfcSchema::IfcFace::list);
faces->push(face); faces->push(face);
IfcSchema::IfcOpenShell* shell = new IfcSchema::IfcOpenShell(faces); IfcSchema::IfcOpenShell* shell = new IfcSchema::IfcOpenShell(faces);
@@ -57,14 +58,14 @@ void create_testcase(IfcHierarchyHelper& file, IfcSchema::IfcFace* face, const s
file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items); file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items);
reps->push(rep); reps->push(rep);
IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(boost::none, boost::none, reps);
file.addEntity(shape); file.addEntity(shape);
product->setRepresentation(shape); product->setRepresentation(shape);
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
{ {
IfcSchema::IfcCartesianPoint::list::ptr points (new IfcSchema::IfcCartesianPoint::list); IfcSchema::IfcCartesianPoint::list::ptr points (new IfcSchema::IfcCartesianPoint::list);
points->push(file.addTriplet<IfcSchema::IfcCartesianPoint>(-400, -400, 0)); points->push(file.addTriplet<IfcSchema::IfcCartesianPoint>(-400, -400, 0));
@@ -192,7 +193,7 @@ int main(int argc, char** argv) {
IfcSchema::IfcCartesianPoint::list::ptr trim2(new IfcSchema::IfcCartesianPoint::list); IfcSchema::IfcCartesianPoint::list::ptr trim2(new IfcSchema::IfcCartesianPoint::list);
trim1->push(point1); trim1->push(point1);
trim2->push(point2); trim2->push(point2);
IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->generalize(), trim2->generalize(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN); IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->generalize()->as<IfcSchema::IfcTrimmingSelect>(), trim2->generalize()->as<IfcSchema::IfcTrimmingSelect>(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN);
IfcSchema::IfcArbitraryOpenProfileDef* profile = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, boost::none, trimmed_curve); IfcSchema::IfcArbitraryOpenProfileDef* profile = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, boost::none, trimmed_curve);
IfcSchema::IfcAxis1Placement* place = new IfcSchema::IfcAxis1Placement(file.addTriplet<IfcSchema::IfcCartesianPoint>(0., 0., 0.), file.addTriplet<IfcSchema::IfcDirection>(1., 0., 0.)); IfcSchema::IfcAxis1Placement* place = new IfcSchema::IfcAxis1Placement(file.addTriplet<IfcSchema::IfcCartesianPoint>(0., 0., 0.), file.addTriplet<IfcSchema::IfcDirection>(1., 0., 0.));
IfcSchema::IfcSurfaceOfRevolution* surface = new IfcSchema::IfcSurfaceOfRevolution(profile, file.addPlacement3d(), place); IfcSchema::IfcSurfaceOfRevolution* surface = new IfcSchema::IfcSurfaceOfRevolution(profile, file.addPlacement3d(), place);
@@ -200,8 +201,8 @@ int main(int argc, char** argv) {
IfcSchema::IfcFace* face = new IfcSchema::IfcFaceSurface(bounds, surface, true); IfcSchema::IfcFace* face = new IfcSchema::IfcFaceSurface(bounds, surface, true);
create_testcase(file, face, "face surface"); create_testcase(file, face, "face surface");
} }
const std::string filename = "faces.ifc"; const char filename[] = "faces.ifc";
file.header().file_name().name(filename); file.header().file_name()->setname(filename);
std::ofstream f(filename.c_str()); std::ofstream f(filename);
f << file; f << file;
} }
+11 -11
View File
@@ -27,16 +27,15 @@
#include <string> #include <string>
#include <fstream> #include <fstream>
#include "ifcparse\Ifc2x3.h" #define IfcSchema Ifc2x3
#include "ifcparse\IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "ifcparse\IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
#include "ifcgeom\IfcGeom.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
boost::none_t const null = boost::none; boost::none_t const null = boost::none;
void create_curve_rebar(IfcHierarchyHelper& file) void create_curve_rebar(IfcHierarchyHelper<IfcSchema>& file)
{ {
int dia = 24; int dia = 24;
int R = 3 * dia; int R = 3 * dia;
@@ -83,15 +82,16 @@ void create_curve_rebar(IfcHierarchyHelper& file)
IfcSchema::IfcCircle* circle = new IfcSchema::IfcCircle(axis1, R); IfcSchema::IfcCircle* circle = new IfcSchema::IfcCircle(axis1, R);
file.addEntity(circle); file.addEntity(circle);
IfcEntityList::ptr trim1(new IfcEntityList); aggregate_of_instance::ptr trim1(new aggregate_of_instance);
IfcEntityList::ptr trim2(new IfcEntityList); aggregate_of_instance::ptr trim2(new aggregate_of_instance);
trim1->push(new IfcSchema::IfcParameterValue(180)); trim1->push(new IfcSchema::IfcParameterValue(180));
trim1->push(p2); trim1->push(p2);
trim2->push(new IfcSchema::IfcParameterValue(270)); trim2->push(new IfcSchema::IfcParameterValue(270));
trim2->push(p4); trim2->push(p4);
IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1, trim2, false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->as<IfcSchema::IfcTrimmingSelect>(), trim2->as<IfcSchema::IfcTrimmingSelect>(), false, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
file.addEntity(trimmed_curve); file.addEntity(trimmed_curve);
IfcSchema::IfcCompositeCurveSegment* segment2 = new IfcSchema::IfcCompositeCurveSegment(IfcSchema::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENT, false, trimmed_curve); IfcSchema::IfcCompositeCurveSegment* segment2 = new IfcSchema::IfcCompositeCurveSegment(IfcSchema::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENT, false, trimmed_curve);
@@ -133,8 +133,8 @@ void create_curve_rebar(IfcHierarchyHelper& file)
int main() int main()
{ {
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
file.header().file_name().name("ifc_curve_rebar.ifc"); file.header().file_name()->setname("ifc_curve_rebar.ifc");
create_curve_rebar(file); create_curve_rebar(file);
std::ofstream f("ifc_curve_rebar.ifc"); std::ofstream f("ifc_curve_rebar.ifc");
f << file; f << file;
+41 -40
View File
@@ -27,21 +27,21 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../ifcparse/Ifc2x3.h" #define IfcSchema Ifc2x3
#include "../ifcparse/IfcUtil.h" #include "ifcparse/Ifc2x3.h"
#include "../ifcparse/IfcHierarchyHelper.h" #include "ifcparse/IfcHierarchyHelper.h"
typedef std::string S; typedef std::string S;
typedef IfcWrite::IfcGuidHelper guid; typedef IfcParse::IfcGlobalId guid;
boost::none_t const null = (static_cast<boost::none_t>(0)); boost::none_t const null = boost::none;
void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) { void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) {
IfcSchema::IfcProfileDef* profile = *profiles->begin(); IfcSchema::IfcProfileDef* profile = *profiles->begin();
const std::string profile_type = IfcSchema::Type::ToString(profile->type()); const std::string& profile_type = profile->declaration().name();
const std::string filename = profile_type + ".ifc"; const std::string filename = profile_type + ".ifc";
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
file.filename(filename); file.header().file_name()->setname(filename);
int i = 0; int i = 0;
for (IfcSchema::IfcProfileDef::list::it it = profiles->begin(); it != profiles->end(); ++it, ++i) { for (IfcSchema::IfcProfileDef::list::it it = profiles->begin(); it != profiles->end(); ++it, ++i) {
@@ -54,7 +54,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) {
product->setObjectPlacement(file.addLocalPlacement(0, 100. * i)); product->setObjectPlacement(file.addLocalPlacement(0, 100. * i));
if (profile->is(IfcSchema::Type::IfcParameterizedProfileDef)) { if (profile->declaration().is(IfcSchema::IfcParameterizedProfileDef::Class())) {
((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d()); ((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d());
} }
@@ -72,7 +72,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) {
file.getSingle<IfcSchema::IfcRepresentationContext>(), S("Body"), S("SweptSolid"), items); file.getSingle<IfcSchema::IfcRepresentationContext>(), S("Body"), S("SweptSolid"), items);
reps->push(rep); reps->push(rep);
IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(null, null, reps);
file.addEntity(rep); file.addEntity(rep);
file.addEntity(shape); file.addEntity(shape);
@@ -84,122 +84,123 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) {
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
IfcSchema::get_schema(); // Ensure schema is initialized
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcUShapeProfileDef( profiles->push(new IfcSchema::IfcUShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null));
profiles->push(new Ifc2x3::IfcUShapeProfileDef( profiles->push(new IfcSchema::IfcUShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, null, null));
profiles->push(new Ifc2x3::IfcUShapeProfileDef( profiles->push(new IfcSchema::IfcUShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, 4.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, 4.0, null));
profiles->push(new Ifc2x3::IfcUShapeProfileDef( profiles->push(new IfcSchema::IfcUShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 6.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 6.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcTShapeProfileDef( profiles->push(new IfcSchema::IfcTShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null));
profiles->push(new Ifc2x3::IfcTShapeProfileDef( profiles->push(new IfcSchema::IfcTShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, 2.0, null, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, 2.0, null, null, null));
profiles->push(new Ifc2x3::IfcTShapeProfileDef( profiles->push(new IfcSchema::IfcTShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, 2.0, 2.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, 2.0, 2.0, null));
profiles->push(new Ifc2x3::IfcTShapeProfileDef( profiles->push(new IfcSchema::IfcTShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, 3.0, 2.0, 1.0, 2.0, 2.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 3.0, 2.0, 1.0, 2.0, 2.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcZShapeProfileDef( profiles->push(new IfcSchema::IfcZShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null));
profiles->push(new Ifc2x3::IfcZShapeProfileDef( profiles->push(new IfcSchema::IfcZShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0)); null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcEllipseProfileDef( profiles->push(new IfcSchema::IfcEllipseProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 15.0)); null, 0, 25.0, 15.0));
profiles->push(new Ifc2x3::IfcEllipseProfileDef( profiles->push(new IfcSchema::IfcEllipseProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 15.0, 25.0)); null, 0, 15.0, 25.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcIShapeProfileDef( profiles->push(new IfcSchema::IfcIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, null)); null, 0, 25.0, 50.0, 5.0, 5.0, null));
profiles->push(new Ifc2x3::IfcIShapeProfileDef( profiles->push(new IfcSchema::IfcIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, 2.0)); null, 0, 25.0, 50.0, 5.0, 5.0, 2.0));
profiles->push(new Ifc2x3::IfcAsymmetricIShapeProfileDef( profiles->push(new IfcSchema::IfcAsymmetricIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, 2.0, 20.0, 10.0, 5.0, null)); null, 0, 25.0, 50.0, 5.0, 5.0, 2.0, 20.0, 10.0, 5.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcLShapeProfileDef( profiles->push(new IfcSchema::IfcLShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, null, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, null, null, null, null, null));
profiles->push(new Ifc2x3::IfcLShapeProfileDef( profiles->push(new IfcSchema::IfcLShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 2.0, 2.0, null, null, null)); null, 0, 50.0, 25.0, 5.0, 2.0, 2.0, null, null, null));
profiles->push(new Ifc2x3::IfcLShapeProfileDef( profiles->push(new IfcSchema::IfcLShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, null, null, 2.0, null, null)); null, 0, 50.0, 25.0, 5.0, null, null, 2.0, null, null));
profiles->push(new Ifc2x3::IfcLShapeProfileDef( profiles->push(new IfcSchema::IfcLShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 2.0, null, null)); null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 2.0, null, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcCShapeProfileDef( profiles->push(new IfcSchema::IfcCShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 10.0, null, null)); null, 0, 50.0, 25.0, 5.0, 10.0, null, null));
profiles->push(new Ifc2x3::IfcCShapeProfileDef( profiles->push(new IfcSchema::IfcCShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null)); null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcCircleProfileDef( profiles->push(new IfcSchema::IfcCircleProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0)); null, 0, 25.0));
profiles->push(new Ifc2x3::IfcCircleHollowProfileDef( profiles->push(new IfcSchema::IfcCircleHollowProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 5.0)); null, 0, 25.0, 5.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcRectangleProfileDef( profiles->push(new IfcSchema::IfcRectangleProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0)); null, 0, 50.0, 25.0));
profiles->push(new Ifc2x3::IfcRoundedRectangleProfileDef( profiles->push(new IfcSchema::IfcRoundedRectangleProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0)); null, 0, 50.0, 25.0, 5.0));
profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef( profiles->push(new IfcSchema::IfcRectangleHollowProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, null, null)); null, 0, 50.0, 25.0, 5.0, null, null));
profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef( profiles->push(new IfcSchema::IfcRectangleHollowProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 2.0, 4.0)); null, 0, 50.0, 25.0, 5.0, 2.0, 4.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( profiles->push(new IfcSchema::IfcTrapeziumProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 30.0, 25.0, 0.0)); null, 0, 50.0, 30.0, 25.0, 0.0));
profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( profiles->push(new IfcSchema::IfcTrapeziumProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 60.0, 25.0, -20.0)); null, 0, 50.0, 60.0, 25.0, -20.0));
profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( profiles->push(new IfcSchema::IfcTrapeziumProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 10.0, 25.0, 30.0)); null, 0, 50.0, 10.0, 25.0, 30.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
+12 -8
View File
@@ -23,15 +23,19 @@
* * * *
********************************************************************************/ ********************************************************************************/
#include "../ifcparse/Ifc4.h" #include <iostream>
#include "../ifcparse/IfcUtil.h" #include <fstream>
#include "../ifcparse/IfcHierarchyHelper.h" #include <optional>
#define IfcSchema Ifc4
#include "ifcparse/Ifc4.h"
#include "ifcparse/IfcHierarchyHelper.h"
#include "suzanne_geometry.h" #include "suzanne_geometry.h"
typedef std::string S; typedef std::string S;
typedef IfcParse::IfcGlobalId guid; typedef IfcParse::IfcGlobalId guid;
boost::none_t const null = (static_cast<boost::none_t>(0)); boost::none_t const null = boost::none;
template <typename T> template <typename T>
std::vector< std::vector<T> > create_vector_from_array(const T* arr, unsigned size) { std::vector< std::vector<T> > create_vector_from_array(const T* arr, unsigned size) {
@@ -50,7 +54,7 @@ std::vector< std::vector<T> > create_vector_from_array(const T* arr, unsigned si
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
IfcHierarchyHelper file; IfcHierarchyHelper<IfcSchema> file;
IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy( IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy(
guid(), 0, S("Blender's Suzanne"), null, null, 0, 0, null, null); guid(), 0, S("Blender's Suzanne"), null, null, 0, 0, null, null);
@@ -73,13 +77,13 @@ int main(int argc, char** argv) {
file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items); file.getRepresentationContext("Model"), S("Body"), S("SurfaceModel"), items);
reps->push(rep); reps->push(rep);
IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps); IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(boost::none, boost::none, reps);
file.addEntity(shape); file.addEntity(shape);
product->setRepresentation(shape); product->setRepresentation(shape);
const std::string filename = "tesselated_faceset.ifc"; const std::string filename = "tesselated_faceset.ifc";
file.header().file_name().name(filename); file.header().file_name()->setname(filename);
std::ofstream f(filename.c_str()); std::ofstream f(filename);
f << file; f << file;
} }
+1 -1
View File
@@ -1,6 +1,6 @@
add_subdirectory(schema) add_subdirectory(schema)
add_library(geometry_serializer STATIC Serialization.cpp) add_library(geometry_serializer Serialization.cpp)
file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h) file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h)
set_target_properties( set_target_properties(
@@ -1,5 +1,5 @@
foreach(schema ${SCHEMA_VERSIONS}) foreach(schema ${SCHEMA_VERSIONS})
add_library(geometry_serializer_ifc${schema} STATIC Serialization.cpp) add_library(geometry_serializer_ifc${schema} OBJECT Serialization.cpp)
target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES}) target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES})
set_target_properties( set_target_properties(
geometry_serializer_ifc${schema} geometry_serializer_ifc${schema}