From 6911b48a46b97fcbf9d2b5b1adc8fc0cb10e6493 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 15:15:00 +0100 Subject: [PATCH 01/41] project() more efficiently onto planar surfaces --- src/ifcgeom/IfcGeomFunctions.cpp | 87 +++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 489a95b1d6..133338e74b 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -2748,7 +2748,19 @@ bool IfcGeom::Kernel::split_solid_by_shell(const TopoDS_Shape& input, const Topo } bool IfcGeom::Kernel::project(const Handle_Geom_Surface& srf, const TopoDS_Shape& shp, double& u1, double& v1, double& u2, double& v2, double widen) { - ShapeAnalysis_Surface sas(srf); + // @todo std::unique_ptr for C++11 + ShapeAnalysis_Surface* sas = 0; + Handle(Geom_Plane) pln; + + if (srf->DynamicType() == STANDARD_TYPE(Geom_Plane)) { + // Optimize projection for specific cases + pln = Handle(Geom_Plane)::DownCast(srf); + } else if (srf->DynamicType() == STANDARD_TYPE(Geom_OffsetSurface) && Handle(Geom_OffsetSurface)::DownCast(srf)->BasisSurface()->DynamicType() == STANDARD_TYPE(Geom_Plane)) { + // For an offset planar surface the projected UV coords are the same as the basis surface + pln = Handle(Geom_Plane)::DownCast(Handle(Geom_OffsetSurface)::DownCast(srf)->BasisSurface()); + } else { + sas = new ShapeAnalysis_Surface(srf); + } u1 = v1 = +std::numeric_limits::infinity(); u2 = v2 = -std::numeric_limits::infinity(); @@ -2759,7 +2771,14 @@ bool IfcGeom::Kernel::project(const Handle_Geom_Surface& srf, const TopoDS_Shape gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(exp.Current())); median.ChangeCoord() += p.XYZ(); - const gp_Pnt2d uv = sas.ValueOfUV(p, 1e-3); + gp_Pnt2d uv; + if (sas) { + uv = sas->ValueOfUV(p, 1e-3); + } else { + gp_Vec d = p.XYZ() - pln->Position().Location().XYZ(); + uv.SetX(d.Dot(pln->Position().XDirection())); + uv.SetY(d.Dot(pln->Position().YDirection())); + } if (uv.X() < u1) u1 = uv.X(); if (uv.Y() < v1) v1 = uv.Y(); @@ -2767,36 +2786,44 @@ bool IfcGeom::Kernel::project(const Handle_Geom_Surface& srf, const TopoDS_Shape if (uv.Y() > v2) v2 = uv.Y(); } - if (vertex_count == 0) { - return false; + if (vertex_count > 0) { + + // Add a little bit of resolution so that the median is shifted towards the mass + // of the curve. This helps to find the parameter ordering for conic surfaces. + for (TopExp_Explorer exp(shp, TopAbs_EDGE); exp.More(); exp.Next(), ++vertex_count) { + const TopoDS_Edge& e = TopoDS::Edge(exp.Current()); + + double a, b; + Handle_Geom_Curve crv = BRep_Tool::Curve(e, a, b); + gp_Pnt p; + crv->D0((a + b) / 2., p); + + median.ChangeCoord() += p.XYZ(); + } + + median.ChangeCoord().Divide(vertex_count); + gp_Pnt2d uv; + if (sas) { + uv = sas->ValueOfUV(median, 1e-3); + } else { + gp_Vec d = median.XYZ() - pln->Position().Location().XYZ(); + uv.SetX(d.Dot(pln->Position().XDirection())); + uv.SetY(d.Dot(pln->Position().YDirection())); + } + + if (uv.X() < u1 || uv.X() > u2) { + std::swap(u1, u2); + } + + u1 -= widen; + u2 += widen; + v1 -= widen; + v2 += widen; + } - // Add a little bit of resolution so that the median is shifted towards the mass - // of the curve. This helps to find the parameter ordering for conic surfaces. - for (TopExp_Explorer exp(shp, TopAbs_EDGE); exp.More(); exp.Next(), ++vertex_count) { - const TopoDS_Edge& e = TopoDS::Edge(exp.Current()); - - double a, b; - Handle_Geom_Curve crv = BRep_Tool::Curve(e, a, b); - gp_Pnt p; - crv->D0((a + b) / 2., p); - - median.ChangeCoord() += p.XYZ(); - } - - median.ChangeCoord().Divide(vertex_count); - const gp_Pnt2d uv = sas.ValueOfUV(median, 1e-3); - - if (uv.X() < u1 || uv.X() > u2) { - std::swap(u1, u2); - } - - u1 -= widen; - u2 += widen; - v1 -= widen; - v2 += widen; - - return true; + delete sas; + return vertex_count > 0; } const IfcSchema::IfcRepresentationItem* IfcGeom::Kernel::find_item_carrying_style(const IfcSchema::IfcRepresentationItem* item) { From 26282437cc080c0223c476dcf5e42d1a4804747f Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 15:15:28 +0100 Subject: [PATCH 02/41] Layerset processing error message --- src/ifcgeom/IfcGeomFunctions.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 133338e74b..839c8c3bfd 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -1429,13 +1429,23 @@ IfcGeom::BRepElement

* IfcGeom::Kernel::create_brep_for_representation_and_pro } } - if (product->as() && fold_layers(product->as(), shapes, layers, thickness, folded_layers)) { - if (apply_folded_layerset(shapes, folded_layers, styles, shapes2)) { - std::swap(shapes, shapes2); + if (styles.size() > 1) { + // If there's only a single layer there is no need to manipulate geometries. + bool success = true; + if (product->as() && fold_layers(product->as(), shapes, layers, thickness, folded_layers)) { + if (apply_folded_layerset(shapes, folded_layers, styles, shapes2)) { + std::swap(shapes, shapes2); + success = true; + } + } else { + if (apply_layerset(shapes, layers, styles, shapes2)) { + std::swap(shapes, shapes2); + success = true; + } } - } else { - if (apply_layerset(shapes, layers, styles, shapes2)) { - std::swap(shapes, shapes2); + + if (!success) { + Logger::Error("Failed processing layerset"); } } } From 39b8680f640922e4a98e459ba67946815bd1f7fa Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 16:10:33 +0100 Subject: [PATCH 03/41] Improve performance of layerset slicing --- src/ifcgeom/IfcGeomFunctions.cpp | 219 ++++++++++++++++++++++--------- 1 file changed, 155 insertions(+), 64 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 839c8c3bfd..d5654f43d1 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -90,6 +90,9 @@ #include #include #include +#if OCC_VERSION_HEX >= 0x70200 +#include +#endif #include @@ -2426,20 +2429,137 @@ bool IfcGeom::Kernel::fold_layers(const IfcSchema::IfcWall* wall, const IfcRepre return folds_made; } +namespace { + +#if OCC_VERSION_HEX >= 0x70200 + bool split(IfcGeom::Kernel&, const TopoDS_Shape& input, const TopTools_ListOfShape& operands, double eps, std::vector& slices) { + if (operands.Extent() < 2) { + // Needs to have at least two cutting surfaces for the ordering based on surface containment to work. + return false; + } + + BRepAlgoAPI_Splitter split; + TopTools_ListOfShape input_list; + input_list.Append(input); + split.SetArguments(input_list); + split.SetTools(operands); + split.SetNonDestructive(true); + split.SetFuzzyValue(eps); + split.Build(); + + if (!split.IsDone()) { + return false; + } else { + + std::map surfaces; + + // NB 1, since first surface has been excluded + int i = 1; + for (TopTools_ListIteratorOfListOfShape it(operands); it.More(); it.Next(), ++i) { + TopExp_Explorer exp(it.Value(), TopAbs_FACE); + for (; exp.More(); exp.Next()) { + surfaces.insert(std::make_pair(BRep_Tool::Surface(TopoDS::Face(exp.Current())).get(), i)); + } + } + + // Count subshapes + size_t n = 0; + TopoDS_Iterator sit(split.Shape()); + for (; sit.More(); sit.Next()) { + ++n; + } + + // Initialize storage + slices.resize(n); + + sit.Initialize(split.Shape()); + for (; sit.More(); sit.Next()) { + + // Iterate over the faces of solid to find correspondence to original + // splitting surfaces. For the outmost slices, there will be a single + // corresponding surface, because the outmost surfaces that align with + // the body geometry have not been added as operands. For intermediate + // slices, two surface indices should be find that should be next to + // each other in the array of input surfaces. + + TopExp_Explorer exp(sit.Value(), TopAbs_FACE); + int min = std::numeric_limits::max(); + int max = std::numeric_limits::min(); + for (; exp.More(); exp.Next()) { + auto ssrf = BRep_Tool::Surface(TopoDS::Face(exp.Current())); + auto it = surfaces.find(ssrf.get()); + if (it != surfaces.end()) { + if (it->second < min) { + min = it->second; + + } + if (it->second > max) { + max = it->second; + } + } + } + + int idx = std::numeric_limits::max(); + if (min != std::numeric_limits::max()) { + if (min == 1 && max == 1) { + idx = 0; + } else if (min + 1 == max || min == max) { + idx = min; + } + } + + if (idx < slices.size()) { + if (slices[idx].IsNull()) { + slices[idx] = sit.Value(); + continue; + } + } + + Logger::Error("Unable to map layer geometry to material index"); + return false; + } + } + + return true; + } +#else + bool split(IfcGeom::Kernel& k, const TopoDS_Shape& input, const TopTools_ListOfShape& operands, double, std::vector& slices) { + TopTools_ListIteratorOfListOfShape it(operands); + TopoDS_Shape i = input; + for (; it.More(); it.Next()) { + const TopoDS_Shape& s = it.Value(); + TopoDS_Shape a, b; + + Handle(Geom_Surface) surf; + if (s.ShapeType() == TopAbs_FACE) { + surf = BRep_Tool::Surface(TopoDS::Face(s)); + } + + if ((s.ShapeType() == TopAbs_FACE && k.split_solid_by_surface(i, surf, a, b)) || + (s.ShapeType() == TopAbs_SHELL && k.split_solid_by_shell(i, s, a, b))) + { + slices.push_back(b); + i = a; + } else { + return false; + } + } + slices.push_back(i); + return true; + } +#endif +} + bool IfcGeom::Kernel::apply_folded_layerset(const IfcRepresentationShapeItems& items, const std::vector< std::vector >& surfaces, const std::vector& styles, IfcRepresentationShapeItems& result) { Bnd_Box bb; TopoDS_Shape input; flatten_shape_list(items, input, false); - BRepBndLib::Add(input, bb); - std::vector bb_coords(6); - bb.Get(bb_coords[0], bb_coords[1], bb_coords[2], bb_coords[3], bb_coords[4], bb_coords[5]); typedef std::vector< std::vector > folded_surfaces_t; typedef std::vector< std::pair< TopoDS_Face, std::pair > > faces_with_mass_t; - std::vector shells; + TopTools_ListOfShape shells; - // result = items; for (folded_surfaces_t::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it) { if (it->empty()) { continue; @@ -2449,7 +2569,7 @@ bool IfcGeom::Kernel::apply_folded_layerset(const IfcRepresentationShapeItems& i if (!project(surface, input, u1, v1, u2, v2)) { continue; } - shells.push_back(BRepBuilderAPI_MakeShell(surface, u1, v1, u2, v2).Shell()); + shells.Append(BRepBuilderAPI_MakeShell(surface, u1, v1, u2, v2).Shell()); } else { faces_with_mass_t solids; for (folded_surfaces_t::value_type::const_iterator jt = it->begin(); jt != it->end(); ++jt) { @@ -2496,19 +2616,19 @@ bool IfcGeom::Kernel::apply_folded_layerset(const IfcRepresentationShapeItems& i } builder.Perform(); - shells.push_back(TopoDS::Shell(builder.SewedShape())); + shells.Append(TopoDS::Shell(builder.SewedShape())); } } - if (shells.empty()) { + if (shells.Extent() == 0) { return false; - } else if (shells.size() == 1) { + } else if (shells.Extent() == 1) { for (IfcRepresentationShapeItems::const_iterator it = items.begin(); it != items.end(); ++it) { TopoDS_Shape a,b; - if (split_solid_by_shell(it->Shape(), shells[0], a, b)) { + if (split_solid_by_shell(it->Shape(), shells.First(), a, b)) { result.push_back(IfcRepresentationShapeItem(it->Placement(), b, styles[0] ? styles[0] : &it->Style())); result.push_back(IfcRepresentationShapeItem(it->Placement(), a, styles[1] ? styles[1] : &it->Style())); } else { @@ -2520,39 +2640,19 @@ bool IfcGeom::Kernel::apply_folded_layerset(const IfcRepresentationShapeItems& i } else { - typedef std::vector< std::vector > temp_t; - temp_t temp; - for (IfcRepresentationShapeItems::const_iterator it = items.begin(); it != items.end(); ++it) { + const TopoDS_Shape& s = it->Shape(); TopoDS_Solid sld; ensure_fit_for_subtraction(s, sld); - std::vector temp2; - temp2.push_back(sld); - temp.push_back(temp2); - } - for (unsigned i = 0; i < shells.size(); ++i) { - for(temp_t::iterator it = temp.begin(); it != temp.end(); ++it) { - TopoDS_Shape a,b; - TopoDS_Shape& ab = (*it)[(*it).size() - 1]; - - if (split_solid_by_shell(ab, shells[i], a, b)) { - ab = b; - it->push_back(a); - } else { - continue; + std::vector slices; + if (split(*this, it->Shape(), shells, getValue(GV_PRECISION), slices) && slices.size() == styles.size()) { + for (size_t i = 0; i < slices.size(); ++i) { + result.push_back(IfcRepresentationShapeItem(it->Placement(), slices[i], styles[i] ? styles[i] : &it->Style())); } - } - } - - IfcRepresentationShapeItems::const_iterator it1 = items.begin(); - temp_t::const_iterator it2 = temp.begin(); - - for(; it1 != items.end(); ++it1, ++it2) { - std::vector::const_iterator it4 = styles.begin(); - for (temp_t::value_type::const_iterator it3 = it2->begin(); it3 != it2->end(); ++it3, ++it4) { - result.push_back(IfcRepresentationShapeItem(it1->Placement(), *it3, (*it4) ? (*it4) : &it1->Style())); + } else { + return false; } } @@ -2612,40 +2712,31 @@ bool IfcGeom::Kernel::apply_layerset(const IfcRepresentationShapeItems& items, c mass.ChangeCoord() += n1.XYZ(); */ - typedef std::vector< std::vector > temp_t; - temp_t temp; - for (IfcRepresentationShapeItems::const_iterator it = items.begin(); it != items.end(); ++it) { - // No transformation on purpose in order not interfere with layerset alignment + const TopoDS_Shape& s = it->Shape(); TopoDS_Solid sld; ensure_fit_for_subtraction(s, sld); - std::vector temp2; - temp2.push_back(sld); - temp.push_back(temp2); - } - for (unsigned i = 1; i < surfaces.size() - 1; ++i) { - for(temp_t::iterator it = temp.begin(); it != temp.end(); ++it) { - TopoDS_Shape a,b; - TopoDS_Shape& ab = (*it)[(*it).size() - 1]; - - if (split_solid_by_surface(ab, surfaces[i], a, b)) { - ab = b; - it->push_back(a); - } else { - continue; + TopTools_ListOfShape operands; + for (unsigned i = 1; i < surfaces.size() - 1; ++i) { + double u1, v1, u2, v2; + if (!project(surfaces[i], sld, u1, v1, u2, v2)) { + return false; } - } - } - IfcRepresentationShapeItems::const_iterator it1 = items.begin(); - temp_t::const_iterator it2 = temp.begin(); - - for(; it1 != items.end(); ++it1, ++it2) { - std::vector::const_iterator it4 = styles.begin(); - for (temp_t::value_type::const_iterator it3 = it2->begin(); it3 != it2->end(); ++it3, ++it4) { - result.push_back(IfcRepresentationShapeItem(it1->Placement(), *it3, (*it4) ? (*it4) : &it1->Style())); + TopoDS_Face face = BRepBuilderAPI_MakeFace(surfaces[i], u1, u2, v1, v2, 1.e-7).Face(); + + operands.Append(face); + } + + std::vector slices; + if (split(*this, it->Shape(), operands, getValue(GV_PRECISION), slices) && slices.size() == styles.size()) { + for (size_t i = 0; i < slices.size(); ++i) { + result.push_back(IfcRepresentationShapeItem(it->Placement(), slices[i], styles[i] ? styles[i] : &it->Style())); + } + } else { + return false; } } From 94f49af00b07f48125fda6fa525b8e1dfe10e5fd Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 16:30:05 +0100 Subject: [PATCH 04/41] Fix header order --- src/ifcgeom/IfcGeomFunctions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index d5654f43d1..e67916ad91 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -27,6 +27,8 @@ #include #include +#include + #include #include #include @@ -144,8 +146,6 @@ #include #include -#include - #include "../ifcparse/IfcSIPrefix.h" #include "../ifcparse/IfcFile.h" #include "../ifcgeom/IfcGeom.h" From f5af6ee6c0bc8e96e34da80b9bf670bc215554cc Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 16:39:54 +0100 Subject: [PATCH 05/41] speed-up min_vertex_edge_distance(). Fixes #518 --- src/ifcgeom/IfcGeomFunctions.cpp | 44 +++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index e67916ad91..9add960bde 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -196,22 +196,33 @@ namespace { return min_edge_len; } - double min_vertex_edge_distance(const TopoDS_Shape& a, double t) { - TopExp_Explorer exp(a, TopAbs_VERTEX); - + double min_vertex_edge_distance(const TopoDS_Shape& a, double min_search, double max_search) { double M = std::numeric_limits::infinity(); - for (; exp.More(); exp.Next()) { - if (exp.Current().Orientation() != TopAbs_FORWARD) { - continue; - } + TopTools_IndexedMapOfShape vertices, edges; - const TopoDS_Vertex& v = TopoDS::Vertex(exp.Current()); + TopExp::MapShapes(a, TopAbs_VERTEX, vertices); + TopExp::MapShapes(a, TopAbs_EDGE, edges); + + IfcGeom::impl::tree tree; + + // Add edges to tree + for (int i = 1; i <= edges.Extent(); ++i) { + tree.add(i, edges(i)); + } + + for (int j = 1; j <= vertices.Extent(); ++j) { + const TopoDS_Vertex& v = TopoDS::Vertex(vertices(j)); gp_Pnt p = BRep_Tool::Pnt(v); - TopExp_Explorer exp2(a, TopAbs_EDGE); - for (; exp2.More(); exp2.Next()) { - const TopoDS_Edge& e = TopoDS::Edge(exp2.Current()); + Bnd_Box b; + b.Add(p); + b.Enlarge(max_search); + + std::vector edge_idxs = tree.select_box(b, false); + std::vector::const_iterator it = edge_idxs.begin(); + for (; it != edge_idxs.end(); ++it) { + const TopoDS_Edge& e = TopoDS::Edge(edges(*it)); TopoDS_Vertex v1, v2; TopExp::Vertices(e, v1, v2); @@ -227,7 +238,7 @@ namespace { for (int i = 1; i <= ext.NbExt(); ++i) { const double m = sqrt(ext.SquareDistance(i)); - if (m < M && m > t) { + if (m < M && m > min_search) { M = m; } } @@ -3607,14 +3618,17 @@ bool IfcGeom::Kernel::boolean_operation(const TopoDS_Shape& a, const TopTools_Li fuzziness = getValue(GV_PRECISION); } - double min_len = (std::min)(min_edge_length(a), min_vertex_edge_distance(a, getValue(GV_PRECISION))); + // Find a sensible value for the fuzziness, based on precision + // and limited by edge lengths and vertex-edge distances. + const double len_a = min_edge_length(a); + double min_len = (std::min)(len_a, min_vertex_edge_distance(a, getValue(GV_PRECISION), len_a)); TopTools_ListIteratorOfListOfShape it(b); for (; it.More(); it.Next()) { double d = min_edge_length(it.Value()); if (d < min_len) { min_len = d; } - d = min_vertex_edge_distance(it.Value(), getValue(GV_PRECISION)); + d = min_vertex_edge_distance(it.Value(), getValue(GV_PRECISION), d); if (d < min_len) { min_len = d; } @@ -3656,7 +3670,7 @@ bool IfcGeom::Kernel::boolean_operation(const TopoDS_Shape& a, const TopTools_Li // when there are edges or vertex-edge distances close to the used fuzziness, the // output is not trusted and the operation is attempted with a higher fuzziness. - double min_len_check = (std::min)(min_edge_length(r), min_vertex_edge_distance(r, getValue(GV_PRECISION))); + double min_len_check = (std::min)(min_edge_length(r), min_vertex_edge_distance(r, getValue(GV_PRECISION), fuzziness * 10.)); success = min_len_check > fuzziness * 10.; if (success) { From 1a1b7e93abfb4723db8f9fbe96a4fd1f653a7522 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 19 Dec 2018 16:54:02 +0100 Subject: [PATCH 06/41] Changes to no-material message --- src/ifcgeom/IfcGeomFunctions.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 9add960bde..95174a47d5 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -1394,7 +1394,9 @@ const IfcSchema::IfcMaterial* IfcGeom::Kernel::get_single_material_association(c if (associated_materials->size() == 1) { IfcSchema::IfcMaterialSelect* associated_material = (*associated_materials->begin())->RelatingMaterial(); single_material = associated_material->as(); - // TODO: Should this check for APPLY_LAYERSETS setting? + + // NB: Single-layer layersets are also considered, regardless of --enable-layerset-slicing, this + // in accordance with other viewers. if (!single_material && associated_material->as()) { IfcSchema::IfcMaterialLayerSet* layerset = associated_material->as()->ForLayerSet(); if (layerset->MaterialLayers()->size() == 1) { @@ -1478,9 +1480,17 @@ IfcGeom::BRepElement

* IfcGeom::Kernel::create_brep_for_representation_and_pro material_style_applied = true; } } - } - else { - Logger::Warning("Object '" + product->GlobalId() + "' has no material!"); + } else { + bool some_items_without_style = false; + for (IfcGeom::IfcRepresentationShapeItems::iterator it = shapes.begin(); it != shapes.end(); ++it) { + if (!it->hasStyle()) { + some_items_without_style = true; + break; + } + } + if (some_items_without_style) { + Logger::Warning("No material and surface styles for:", product->entity); + } } if (material_style_applied) { From 99b865bbd9d5ce7e0ea180f3482ffa33ae025405 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 21 Dec 2018 14:40:58 +0100 Subject: [PATCH 07/41] Some layerset processing comments --- src/ifcgeom/IfcGeomFunctions.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 95174a47d5..c7390985ed 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -1940,8 +1940,11 @@ bool IfcGeom::Kernel::convert_layerset(const IfcSchema::IfcProduct* product, std if (true) { /**< @todo Why always true? */ if (axis_curve->DynamicType() == STANDARD_TYPE(Geom_Line)) { Handle_Geom_Line axis_line = Handle_Geom_Line::DownCast(axis_curve); + // @todo note that this creates an offset into the wrong order, the cross product arguments should be + // reversed. This causes some inversions later on, e.g. if(positive) { reverse(); } reference_surface = new Geom_Plane(axis_line->Lin().Location(), axis_line->Lin().Direction() ^ gp::DZ()); } else if (axis_curve->DynamicType() == STANDARD_TYPE(Geom_Circle)) { + // @todo note that in this branch this inversion does not seem to take place. Handle_Geom_Circle axis_line = Handle_Geom_Circle::DownCast(axis_curve); reference_surface = new Geom_CylindricalSurface(axis_line->Position(), axis_line->Radius()); } else { From 161deeb4e057279cf80645fe1a6cd88cf911fe49 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 22 Dec 2018 14:05:49 +0100 Subject: [PATCH 08/41] Fix warnings and compilation on clang --- cmake/CMakeLists.txt | 4 +++- src/ifcparse/IfcFile.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4221827b10..0b3f50d3b7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -413,9 +413,11 @@ IF(MSVC) ENDIF() ENDFOREACH() ElSE() - add_definitions(-Wall -Wextra -Wno-maybe-uninitialized) + add_definitions(-Wall -Wextra) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_definitions(-Wno-tautological-constant-out-of-range-compare) + else() + add_definitions(-Wno-maybe-uninitialized) endif() # -fPIC is not relevant on Windows and creates pointless warnings if (UNIX) diff --git a/src/ifcparse/IfcFile.h b/src/ifcparse/IfcFile.h index 86e174135b..daa31feb27 100644 --- a/src/ifcparse/IfcFile.h +++ b/src/ifcparse/IfcFile.h @@ -62,7 +62,9 @@ public: } bool operator!=(const type_iterator& other) const { - return entities_by_type_t::const_iterator::operator!=(other); + const entities_by_type_t::const_iterator& self_ = *this; + const entities_by_type_t::const_iterator& other_ = other; + return self_ != other_; } }; From a2231605a5cf22e56b8c58225c05584b79cdfdb7 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 24 Dec 2018 16:02:00 +0100 Subject: [PATCH 09/41] Take into account edge orientation; small fixes to convert(face) --- src/ifcgeom/IfcGeomFaces.cpp | 7 +++---- src/ifcgeom/IfcGeomFunctions.cpp | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/ifcgeom/IfcGeomFaces.cpp b/src/ifcgeom/IfcGeomFaces.cpp index aab57062ad..68ac0cb1b8 100644 --- a/src/ifcgeom/IfcGeomFaces.cpp +++ b/src/ifcgeom/IfcGeomFaces.cpp @@ -218,11 +218,10 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcFace* l, TopoDS_Shape& face) { process_wire: if (face_surface.IsNull()) { - if (count(wire, TopAbs_EDGE) > 128) { + gp_Pln pln; + if (count(wire, TopAbs_EDGE) > 128 && approximate_plane_through_wire(wire, pln)) { // tfk: optimization find the underlying surface ourselves since it's going // to be planar in IFC if no explicit surface is given. Should we always do this? - gp_Pln pln; - approximate_plane_through_wire(wire, pln); mf = new BRepBuilderAPI_MakeFace(pln, wire, true); } else { mf = new BRepBuilderAPI_MakeFace(wire); @@ -245,7 +244,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcFace* l, TopoDS_Shape& face) { // In case of (non-planar) face surface, p-curves need to be computed. // For planar faces, Open Cascade generates p-curves on the fly. - if (!face_surface.IsNull()) { + if (!face_surface.IsNull() && face_surface->DynamicType() != STANDARD_TYPE(Geom_Plane)) { TopExp_Explorer exp(outer_face_bound, TopAbs_EDGE); for (; exp.More(); exp.Next()) { const TopoDS_Edge& edge = TopoDS::Edge(exp.Current()); diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index c7390985ed..69f9ec5cd3 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -3362,7 +3362,7 @@ bool IfcGeom::Kernel::wire_intersections(const TopoDS_Wire& wire, TopTools_ListO TopoDS_Edge e = wd->Edge(k + 1); TopoDS_Vertex v1, v2; - TopExp::Vertices(e, v1, v2); + TopExp::Vertices(e, v1, v2, true); const TopoDS_Vertex* v = first == forward ? &v2 : &v1; // gp_Pnt p2 = points3d.Value(1); From 4936ea3ac3ad977b3e3999d937856ef1ca256ce4 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 28 Dec 2018 15:15:41 +0100 Subject: [PATCH 10/41] Document boolean operation failure reasons, correct min len check and manifoldness check. Fix #478 --- src/ifcgeom/IfcGeomFunctions.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 69f9ec5cd3..54decd9ab9 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -249,7 +249,7 @@ namespace { } bool is_manifold(const TopoDS_Shape& a) { - if (a.ShapeType() == TopAbs_COMPOUND) { + if (a.ShapeType() == TopAbs_COMPOUND || a.ShapeType() == TopAbs_SOLID) { TopoDS_Iterator it(a); for (; it.More(); it.Next()) { if (!is_manifold(it.Value())) { @@ -3634,20 +3634,20 @@ bool IfcGeom::Kernel::boolean_operation(const TopoDS_Shape& a, const TopTools_Li // Find a sensible value for the fuzziness, based on precision // and limited by edge lengths and vertex-edge distances. const double len_a = min_edge_length(a); - double min_len = (std::min)(len_a, min_vertex_edge_distance(a, getValue(GV_PRECISION), len_a)); + double min_length_orig = (std::min)(len_a, min_vertex_edge_distance(a, getValue(GV_PRECISION), len_a)); TopTools_ListIteratorOfListOfShape it(b); for (; it.More(); it.Next()) { double d = min_edge_length(it.Value()); - if (d < min_len) { - min_len = d; + if (d < min_length_orig) { + min_length_orig = d; } d = min_vertex_edge_distance(it.Value(), getValue(GV_PRECISION), d); - if (d < min_len) { - min_len = d; + if (d < min_length_orig) { + min_length_orig = d; } } - const double fuzz = (std::min)(min_len / 10., fuzziness); + const double fuzz = (std::min)(min_length_orig / 10., fuzziness); TopTools_ListOfShape s1s; s1s.Append(copy_operand(a)); @@ -3683,19 +3683,31 @@ bool IfcGeom::Kernel::boolean_operation(const TopoDS_Shape& a, const TopTools_Li // when there are edges or vertex-edge distances close to the used fuzziness, the // output is not trusted and the operation is attempted with a higher fuzziness. - double min_len_check = (std::min)(min_edge_length(r), min_vertex_edge_distance(r, getValue(GV_PRECISION), fuzziness * 10.)); - success = min_len_check > fuzziness * 10.; + double min_lengh_result = (std::min)(min_edge_length(r), min_vertex_edge_distance(r, getValue(GV_PRECISION), fuzziness * 10.)); + success = min_lengh_result <= min_length_orig || min_lengh_result > fuzziness * 10.; if (success) { result = r; + } else { + std::stringstream str; + str << "Boolean operation result failing interference check, with fuzziness " << fuzziness << " min length " << min_lengh_result << " originally " << min_length_orig; + Logger::Notice(str.str()); } + } else { + Logger::Notice("Boolean operation yields non-manifold result"); } + } else { + Logger::Notice("Boolean operation yields invalid result"); } + } else { + std::stringstream str; + builder->DumpErrors(str); + Logger::Notice(str.str()); } delete builder; if (!success) { const double new_fuzziness = fuzziness * 10.; - if (new_fuzziness + 1e-15 <= getValue(GV_PRECISION) * 1000. && new_fuzziness < min_len) { + if (new_fuzziness + 1e-15 <= getValue(GV_PRECISION) * 1000. && new_fuzziness < min_length_orig) { return boolean_operation(a, b, op, result, new_fuzziness); } } From 7022e842bf245cc4ecfe69d8c3410e95d00ef751 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 29 Dec 2018 14:18:51 +0100 Subject: [PATCH 11/41] Update subproject --- .gitmodules | 1 + test/input | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 2117c4bb49..5bb14b5c42 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "test/input"] path = test/input url = https://github.com/IfcOpenShell/files + ignore = dirty diff --git a/test/input b/test/input index 2abd02c2a3..ad80015ebf 160000 --- a/test/input +++ b/test/input @@ -1 +1 @@ -Subproject commit 2abd02c2a3078fa52601dd8d5c9630c982a0e25c +Subproject commit ad80015ebf72718bebc445d812276eef03c404e5 From bf50d0534bc297a68e5f2f285d2df7c31fe86500 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 29 Dec 2018 14:34:47 +0100 Subject: [PATCH 12/41] Fixes for edge curves and non-planar faces with inner boundaries. #338 --- src/ifcgeom/IfcGeomFaces.cpp | 11 +++++++++++ src/ifcgeom/IfcGeomWires.cpp | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ifcgeom/IfcGeomFaces.cpp b/src/ifcgeom/IfcGeomFaces.cpp index 68ac0cb1b8..9b3cbea356 100644 --- a/src/ifcgeom/IfcGeomFaces.cpp +++ b/src/ifcgeom/IfcGeomFaces.cpp @@ -320,6 +320,17 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcFace* l, TopoDS_Shape& face) { } else { mf->Add(wire); + + // Same as above: + // In case of (non-planar) face surface, p-curves need to be computed. + if (BRep_Tool::Surface(mf->Face())->DynamicType() != STANDARD_TYPE(Geom_Plane)) { + TopExp_Explorer exp(wire, TopAbs_EDGE); + for (; exp.More(); exp.Next()) { + const TopoDS_Edge& edge = TopoDS::Edge(exp.Current()); + ShapeFix_Edge fix_edge; + fix_edge.FixAddPCurve(edge, mf->Face(), false, getValue(GV_PRECISION)); + } + } } processed ++; } diff --git a/src/ifcgeom/IfcGeomWires.cpp b/src/ifcgeom/IfcGeomWires.cpp index eb99eec617..0c66cbcac5 100644 --- a/src/ifcgeom/IfcGeomWires.cpp +++ b/src/ifcgeom/IfcGeomWires.cpp @@ -715,7 +715,11 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcEdgeCurve* l, TopoDS_Wire& res const bool is_bounded = l->EdgeGeometry()->is(IfcSchema::Type::IfcBoundedCurve); if (!is_bounded && convert_curve(l->EdgeGeometry(), crv)) { - mw.Add(BRepBuilderAPI_MakeEdge(crv, p1, p2)); + BRepBuilderAPI_MakeEdge me(crv, p1, p2); + if (!me.IsDone()) { + return false; + } + mw.Add(me.Edge()); result = mw; return true; } else if (is_bounded && convert_wire(l->EdgeGeometry(), result)) { @@ -745,7 +749,11 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcEdgeCurve* l, TopoDS_Wire& res ecrv->D0(u1, a); b = p2; } else { - mw.Add(BRepBuilderAPI_MakeEdge(ecrv, u1, u2)); + BRepBuilderAPI_MakeEdge me(ecrv, u1, u2); + if (!me.IsDone()) { + return false; + } + mw.Add(me.Edge()); first = false; continue; } @@ -776,7 +784,10 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcEdgeLoop* l, TopoDS_Wire& resu mw.Add(TopoDS::Edge(TopoDS_Iterator(w).Value())); } } - result = mw; + if (!mw.IsDone()) { + return false; + } + result = mw.Wire(); return true; } From 382efc025558c169045d67690b3e4579d738fc2d Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 30 Dec 2018 12:50:04 +0100 Subject: [PATCH 13/41] Fix some warnings --- src/ifcgeom/IfcGeomFunctions.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 54decd9ab9..0dd20b2fef 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -2532,7 +2532,7 @@ namespace { } } - if (idx < slices.size()) { + if (idx < (int) slices.size()) { if (slices[idx].IsNull()) { slices[idx] = sit.Value(); continue; @@ -3223,13 +3223,13 @@ namespace { operator int() { return i; } }; - std::string format_pnt(const gp_Pnt& p) { + inline std::string format_pnt(const gp_Pnt& p) { std::stringstream ss; ss << std::fixed << std::setprecision(4) << p.X() << " " << p.Y() << " " << p.Z(); return ss.str(); } - std::string format_edge(const TopoDS_Edge& e) { + inline std::string format_edge(const TopoDS_Edge& e) { std::stringstream ss; TopoDS_Vertex v1, v2; TopExp::Vertices(e, v1, v2); From dec0c646cc942e59faf4f898ca79a084b9ba9a6d Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 31 Dec 2018 11:39:35 +0100 Subject: [PATCH 14/41] Only round corners on discontinuous spines. Fixes #358. --- src/ifcgeom/IfcGeomShapes.cpp | 50 +++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/IfcGeomShapes.cpp b/src/ifcgeom/IfcGeomShapes.cpp index 1f263cf7dd..bceec24e76 100644 --- a/src/ifcgeom/IfcGeomShapes.cpp +++ b/src/ifcgeom/IfcGeomShapes.cpp @@ -970,6 +970,45 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSurfaceCurveSweptAreaSolid* l, return true; } +namespace { + bool wire_is_c1_continuous(const TopoDS_Wire& w, double tol) { + // NB Note that c0 continuity is NOT checked! + + TopTools_IndexedDataMapOfShapeListOfShape map; + TopExp::MapShapesAndAncestors(w, TopAbs_VERTEX, TopAbs_EDGE, map); + for (int i = 1; i <= map.Extent(); ++i) { + const auto& li = map.FindFromIndex(i); + if (li.Extent() == 2) { + const TopoDS_Vertex& v = TopoDS::Vertex(map.FindKey(i)); + + const TopoDS_Edge& e0 = TopoDS::Edge(li.First()); + const TopoDS_Edge& e1 = TopoDS::Edge(li.Last()); + + double u0 = BRep_Tool::Parameter(v, e0); + double u1 = BRep_Tool::Parameter(v, e1); + + double _, __; + Handle(Geom_Curve) c0 = BRep_Tool::Curve(e0, _, __); + Handle(Geom_Curve) c1 = BRep_Tool::Curve(e1, _, __); + + gp_Pnt p; + gp_Vec v0, v1; + c0->D1(u0, p, v0); + c1->D1(u1, p, v1); + + std::cout << "v0 " << v0.X() << " " << v0.Y() << " " << v0.Z() << std::endl; + std::cout << "v1 " << v1.X() << " " << v1.Y() << " " << v1.Z() << std::endl; + std::cout << "Dot " << v0.Normalized().Dot(v1.Normalized()) << std::endl; + + if (1. - std::abs(v0.Normalized().Dot(v1.Normalized())) > tol) { + return false; + } + } + } + return true; + } +} + bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shape& shape) { TopoDS_Wire wire, section1, section2; @@ -1019,6 +1058,8 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shap } } + const bool is_continuous = wire_is_c1_continuous(wire, 1.e-3); + // NB: Note that StartParam and EndParam param are ignored and the assumption is // made that the parametric range over which to be swept matches the IfcCurve in // its entirety. @@ -1027,7 +1068,10 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shap // of directrices encountered, which do not necessarily conform to a surface. { BRepOffsetAPI_MakePipeShell builder(wire); builder.Add(section1); - builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); + if (!is_continuous) { + // Only perform round corners on wires that are not c1 continuous + builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); + } builder.Build(); builder.MakeSolid(); shape = builder.Shape(); } @@ -1035,7 +1079,9 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shap if (hasInnerRadius) { BRepOffsetAPI_MakePipeShell builder(wire); builder.Add(section2); - builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); + if (!is_continuous) { + builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); + } builder.Build(); builder.MakeSolid(); TopoDS_Shape inner = builder.Shape(); From 9048ce48574f493795ad454c1832c7d9a38901f5 Mon Sep 17 00:00:00 2001 From: Thomas Paviot Date: Wed, 2 Jan 2019 07:27:09 +0100 Subject: [PATCH 15/41] Fixed BRepAlgoAPI_BooleanOperation::DumpErrors method only available for OCC version > 7 --- src/ifcgeom/IfcGeomFunctions.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 0dd20b2fef..4b738f0963 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -3701,8 +3701,12 @@ bool IfcGeom::Kernel::boolean_operation(const TopoDS_Shape& a, const TopTools_Li } } else { std::stringstream str; +#if OCC_VERSION_HEX >= 0x70000 builder->DumpErrors(str); - Logger::Notice(str.str()); +#else + str << "Error code :" << builder->ErrorStatus(); +#endif + Logger::Notice(str.str()); } delete builder; if (!success) { From 9d6eec0f5aefa9eda3e5f8adf43a08fda158c9d7 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 5 Jan 2019 13:42:51 +0100 Subject: [PATCH 16/41] Update suprepo --- test/input | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/input b/test/input index ad80015ebf..a75c92451c 160000 --- a/test/input +++ b/test/input @@ -1 +1 @@ -Subproject commit ad80015ebf72718bebc445d812276eef03c404e5 +Subproject commit a75c92451c8e5b63641b57ed8216849b0121d33d From b1754f7b262a2a549a311a288dc46a28a2180dad Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 5 Jan 2019 13:45:54 +0100 Subject: [PATCH 17/41] Remove debug prints --- src/ifcgeom/IfcGeomShapes.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ifcgeom/IfcGeomShapes.cpp b/src/ifcgeom/IfcGeomShapes.cpp index bceec24e76..1beb4cbcc6 100644 --- a/src/ifcgeom/IfcGeomShapes.cpp +++ b/src/ifcgeom/IfcGeomShapes.cpp @@ -996,10 +996,6 @@ namespace { c0->D1(u0, p, v0); c1->D1(u1, p, v1); - std::cout << "v0 " << v0.X() << " " << v0.Y() << " " << v0.Z() << std::endl; - std::cout << "v1 " << v1.X() << " " << v1.Y() << " " << v1.Z() << std::endl; - std::cout << "Dot " << v0.Normalized().Dot(v1.Normalized()) << std::endl; - if (1. - std::abs(v0.Normalized().Dot(v1.Normalized())) > tol) { return false; } From 944813146ebb31bc7c4274b1c8316f382d7fde11 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 16 Jan 2019 12:28:58 +0100 Subject: [PATCH 18/41] Close polylines on closed profile def. Fixes #538 --- src/ifcgeom/IfcGeom.h | 3 ++- src/ifcgeom/IfcGeomFaces.cpp | 27 ++++++++++++++++++++++----- src/ifcgeom/IfcGeomFunctions.cpp | 21 +++++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/ifcgeom/IfcGeom.h b/src/ifcgeom/IfcGeom.h index 71e738f09d..a927e42efd 100644 --- a/src/ifcgeom/IfcGeom.h +++ b/src/ifcgeom/IfcGeom.h @@ -195,7 +195,8 @@ public: bool convert_face(const IfcUtil::IfcBaseClass* L, TopoDS_Shape& result); bool convert_openings(const IfcSchema::IfcProduct* entity, const IfcSchema::IfcRelVoidsElement::list::ptr& openings, const IfcRepresentationShapeItems& entity_shapes, const gp_Trsf& entity_trsf, IfcRepresentationShapeItems& cut_shapes); bool convert_openings_fast(const IfcSchema::IfcProduct* entity, const IfcSchema::IfcRelVoidsElement::list::ptr& openings, const IfcRepresentationShapeItems& entity_shapes, const gp_Trsf& entity_trsf, IfcRepresentationShapeItems& cut_shapes); - + void assert_closed_wire(TopoDS_Wire& wire); + bool convert_layerset(const IfcSchema::IfcProduct*, std::vector&, std::vector&, std::vector&); bool apply_layerset(const IfcRepresentationShapeItems&, const std::vector&, const std::vector&, IfcRepresentationShapeItems&); bool apply_folded_layerset(const IfcRepresentationShapeItems&, const std::vector< std::vector >&, const std::vector&, IfcRepresentationShapeItems&); diff --git a/src/ifcgeom/IfcGeomFaces.cpp b/src/ifcgeom/IfcGeomFaces.cpp index 9b3cbea356..103497a7b7 100644 --- a/src/ifcgeom/IfcGeomFaces.cpp +++ b/src/ifcgeom/IfcGeomFaces.cpp @@ -67,6 +67,7 @@ #include #include +#include #include #include #include @@ -396,28 +397,44 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcFace* l, TopoDS_Shape& face) { bool IfcGeom::Kernel::convert(const IfcSchema::IfcArbitraryClosedProfileDef* l, TopoDS_Shape& face) { TopoDS_Wire wire; - if ( ! convert_wire(l->OuterCurve(),wire) ) return false; + if (!convert_wire(l->OuterCurve(), wire)) { + return false; + } + + assert_closed_wire(wire); TopoDS_Face f; bool success = convert_wire_to_face(wire, f); - if (success) face = f; + if (success) { + face = f; + } return success; } bool IfcGeom::Kernel::convert(const IfcSchema::IfcArbitraryProfileDefWithVoids* l, TopoDS_Shape& face) { TopoDS_Wire profile; - if ( ! convert_wire(l->OuterCurve(),profile) ) return false; + if (!convert_wire(l->OuterCurve(), profile)) { + return false; + } + + assert_closed_wire(profile); + BRepBuilderAPI_MakeFace mf(profile); + IfcSchema::IfcCurve::list::ptr voids = l->InnerCurves(); - for( IfcSchema::IfcCurve::list::it it = voids->begin(); it != voids->end(); ++ it ) { + + for(IfcSchema::IfcCurve::list::it it = voids->begin(); it != voids->end(); ++it) { TopoDS_Wire hole; - if ( convert_wire(*it,hole) ) { + if (convert_wire(*it, hole)) { + assert_closed_wire(hole); mf.Add(hole); } } + ShapeFix_Shape sfs(mf.Face()); sfs.Perform(); face = sfs.Shape(); + return true; } diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 4b738f0963..416a5d51d0 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -876,6 +876,27 @@ bool IfcGeom::Kernel::convert_wire_to_face(const TopoDS_Wire& w, TopoDS_Face& fa return true; } +void IfcGeom::Kernel::assert_closed_wire(TopoDS_Wire& wire) { + if (wire.Closed() == 0) { + TopoDS_Vertex v0, v1; + TopExp::Vertices(wire, v0, v1); + + gp_Pnt p1 = BRep_Tool::Pnt(v0); + gp_Pnt p2 = BRep_Tool::Pnt(v1); + + if (p1.Distance(p2) > getValue(GV_PRECISION)) { + + BRepBuilderAPI_MakeWire mw; + mw.Add(wire); + mw.Add(BRepBuilderAPI_MakeEdge(v0, v1).Edge()); + wire = mw.Wire(); + + } + + Logger::Warning("Wire not closed:"); + } +} + bool IfcGeom::Kernel::convert_curve_to_wire(const Handle(Geom_Curve)& curve, TopoDS_Wire& wire) { try { wire = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(curve)); From ef7eee411b29a82b55e3eec308baa20b8d3987c6 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 20 Jan 2019 13:47:12 +0100 Subject: [PATCH 19/41] Update to IFC4Add2TC1 --- src/ifcparse/Ifc4-latebound.cpp | 41 +++++- src/ifcparse/Ifc4.cpp | 175 ++++++++++++++++++------ src/ifcparse/Ifc4.h | 227 ++++++++++++++++++++++++++------ src/ifcparse/Ifc4enum.h | 2 +- 4 files changed, 357 insertions(+), 88 deletions(-) diff --git a/src/ifcparse/Ifc4-latebound.cpp b/src/ifcparse/Ifc4-latebound.cpp index 0b4de36f01..7a6b8611d3 100644 --- a/src/ifcparse/Ifc4-latebound.cpp +++ b/src/ifcparse/Ifc4-latebound.cpp @@ -271,8 +271,6 @@ void InitDescriptorMap() { current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE); current = entity_descriptor_map[Type::IfcSpecularRoughness] = new IfcEntityDescriptor(Type::IfcSpecularRoughness,0); current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE); - current = entity_descriptor_map[Type::IfcStrippedOptional] = new IfcEntityDescriptor(Type::IfcStrippedOptional,0); - current->add("wrappedValue",false,IfcUtil::Argument_BOOL); current = entity_descriptor_map[Type::IfcTemperatureGradientMeasure] = new IfcEntityDescriptor(Type::IfcTemperatureGradientMeasure,0); current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE); current = entity_descriptor_map[Type::IfcTemperatureRateOfChangeMeasure] = new IfcEntityDescriptor(Type::IfcTemperatureRateOfChangeMeasure,0); @@ -1484,6 +1482,10 @@ void InitDescriptorMap() { current->add("FilletRadius",true,IfcUtil::Argument_DOUBLE,Type::IfcNonNegativeLengthMeasure); current->add("FlangeEdgeRadius",true,IfcUtil::Argument_DOUBLE,Type::IfcNonNegativeLengthMeasure); current->add("FlangeSlope",true,IfcUtil::Argument_DOUBLE,Type::IfcPlaneAngleMeasure); + current = entity_descriptor_map[Type::IfcIndexedPolygonalFace] = new IfcEntityDescriptor(Type::IfcIndexedPolygonalFace,entity_descriptor_map.find(Type::IfcTessellatedItem)->second); + current->add("CoordIndex",false,IfcUtil::Argument_AGGREGATE_OF_INT,Type::IfcPositiveInteger); + current = entity_descriptor_map[Type::IfcIndexedPolygonalFaceWithVoids] = new IfcEntityDescriptor(Type::IfcIndexedPolygonalFaceWithVoids,entity_descriptor_map.find(Type::IfcIndexedPolygonalFace)->second); + current->add("InnerCoordIndices",false,IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT,Type::IfcPositiveInteger); current = entity_descriptor_map[Type::IfcLShapeProfileDef] = new IfcEntityDescriptor(Type::IfcLShapeProfileDef,entity_descriptor_map.find(Type::IfcParameterizedProfileDef)->second); current->add("Depth",false,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current->add("Width",true,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); @@ -1766,6 +1768,8 @@ void InitDescriptorMap() { current->add("LongName",true,IfcUtil::Argument_STRING,Type::IfcLabel); current = entity_descriptor_map[Type::IfcSphere] = new IfcEntityDescriptor(Type::IfcSphere,entity_descriptor_map.find(Type::IfcCsgPrimitive3D)->second); current->add("Radius",false,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); + current = entity_descriptor_map[Type::IfcSphericalSurface] = new IfcEntityDescriptor(Type::IfcSphericalSurface,entity_descriptor_map.find(Type::IfcElementarySurface)->second); + current->add("Radius",false,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current = entity_descriptor_map[Type::IfcStructuralActivity] = new IfcEntityDescriptor(Type::IfcStructuralActivity,entity_descriptor_map.find(Type::IfcProduct)->second); current->add("AppliedLoad",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcStructuralLoad); current->add("GlobalOrLocal",false,IfcUtil::Argument_ENUMERATION,Type::IfcGlobalOrLocalEnum); @@ -1784,6 +1788,10 @@ void InitDescriptorMap() { current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcStructuralSurfaceActivityTypeEnum); current = entity_descriptor_map[Type::IfcSubContractResourceType] = new IfcEntityDescriptor(Type::IfcSubContractResourceType,entity_descriptor_map.find(Type::IfcConstructionResourceType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcSubContractResourceTypeEnum); + current = entity_descriptor_map[Type::IfcSurfaceCurve] = new IfcEntityDescriptor(Type::IfcSurfaceCurve,entity_descriptor_map.find(Type::IfcCurve)->second); + current->add("Curve3D",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcCurve); + current->add("AssociatedGeometry",false,IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE,Type::IfcPcurve); + current->add("MasterRepresentation",false,IfcUtil::Argument_ENUMERATION,Type::IfcPreferredSurfaceCurveRepresentation); current = entity_descriptor_map[Type::IfcSurfaceCurveSweptAreaSolid] = new IfcEntityDescriptor(Type::IfcSurfaceCurveSweptAreaSolid,entity_descriptor_map.find(Type::IfcSweptAreaSolid)->second); current->add("Directrix",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcCurve); current->add("StartParam",true,IfcUtil::Argument_DOUBLE,Type::IfcParameterValue); @@ -1808,13 +1816,16 @@ void InitDescriptorMap() { current->add("WorkMethod",true,IfcUtil::Argument_STRING,Type::IfcLabel); current = entity_descriptor_map[Type::IfcTessellatedFaceSet] = new IfcEntityDescriptor(Type::IfcTessellatedFaceSet,entity_descriptor_map.find(Type::IfcTessellatedItem)->second); current->add("Coordinates",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcCartesianPointList3D); - current->add("Normals",true,IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_DOUBLE,Type::IfcParameterValue); - current->add("Closed",true,IfcUtil::Argument_BOOL,Type::IfcBoolean); + current = entity_descriptor_map[Type::IfcToroidalSurface] = new IfcEntityDescriptor(Type::IfcToroidalSurface,entity_descriptor_map.find(Type::IfcElementarySurface)->second); + current->add("MajorRadius",false,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); + current->add("MinorRadius",false,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current = entity_descriptor_map[Type::IfcTransportElementType] = new IfcEntityDescriptor(Type::IfcTransportElementType,entity_descriptor_map.find(Type::IfcElementType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcTransportElementTypeEnum); current = entity_descriptor_map[Type::IfcTriangulatedFaceSet] = new IfcEntityDescriptor(Type::IfcTriangulatedFaceSet,entity_descriptor_map.find(Type::IfcTessellatedFaceSet)->second); + current->add("Normals",true,IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_DOUBLE,Type::IfcParameterValue); + current->add("Closed",true,IfcUtil::Argument_BOOL,Type::IfcBoolean); current->add("CoordIndex",false,IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT,Type::IfcPositiveInteger); - current->add("NormalIndex",true,IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT,Type::IfcPositiveInteger); + current->add("PnIndex",true,IfcUtil::Argument_AGGREGATE_OF_INT,Type::IfcPositiveInteger); current = entity_descriptor_map[Type::IfcWindowLiningProperties] = new IfcEntityDescriptor(Type::IfcWindowLiningProperties,entity_descriptor_map.find(Type::IfcPreDefinedPropertySet)->second); current->add("LiningDepth",true,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current->add("LiningThickness",true,IfcUtil::Argument_DOUBLE,Type::IfcNonNegativeLengthMeasure); @@ -2037,6 +2048,8 @@ void InitDescriptorMap() { current->add("SelfIntersect",true,IfcUtil::Argument_BOOL,Type::IfcBoolean); current = entity_descriptor_map[Type::IfcInterceptorType] = new IfcEntityDescriptor(Type::IfcInterceptorType,entity_descriptor_map.find(Type::IfcFlowTreatmentDeviceType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcInterceptorTypeEnum); + current = entity_descriptor_map[Type::IfcIntersectionCurve] = new IfcEntityDescriptor(Type::IfcIntersectionCurve,entity_descriptor_map.find(Type::IfcSurfaceCurve)->second); + current = entity_descriptor_map[Type::IfcInventory] = new IfcEntityDescriptor(Type::IfcInventory,entity_descriptor_map.find(Type::IfcGroup)->second); current->add("PredefinedType",true,IfcUtil::Argument_ENUMERATION,Type::IfcInventoryTypeEnum); current->add("Jurisdiction",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcActorSelect); @@ -2095,6 +2108,10 @@ void InitDescriptorMap() { current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcPipeSegmentTypeEnum); current = entity_descriptor_map[Type::IfcPlateType] = new IfcEntityDescriptor(Type::IfcPlateType,entity_descriptor_map.find(Type::IfcBuildingElementType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcPlateTypeEnum); + current = entity_descriptor_map[Type::IfcPolygonalFaceSet] = new IfcEntityDescriptor(Type::IfcPolygonalFaceSet,entity_descriptor_map.find(Type::IfcTessellatedFaceSet)->second); + current->add("Closed",true,IfcUtil::Argument_BOOL,Type::IfcBoolean); + current->add("Faces",false,IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE,Type::IfcIndexedPolygonalFace); + current->add("PnIndex",true,IfcUtil::Argument_AGGREGATE_OF_INT,Type::IfcPositiveInteger); current = entity_descriptor_map[Type::IfcPolyline] = new IfcEntityDescriptor(Type::IfcPolyline,entity_descriptor_map.find(Type::IfcBoundedCurve)->second); current->add("Points",false,IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE,Type::IfcCartesianPoint); current = entity_descriptor_map[Type::IfcPort] = new IfcEntityDescriptor(Type::IfcPort,entity_descriptor_map.find(Type::IfcProduct)->second); @@ -2152,6 +2169,8 @@ void InitDescriptorMap() { current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcRoofTypeEnum); current = entity_descriptor_map[Type::IfcSanitaryTerminalType] = new IfcEntityDescriptor(Type::IfcSanitaryTerminalType,entity_descriptor_map.find(Type::IfcFlowTerminalType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcSanitaryTerminalTypeEnum); + current = entity_descriptor_map[Type::IfcSeamCurve] = new IfcEntityDescriptor(Type::IfcSeamCurve,entity_descriptor_map.find(Type::IfcSurfaceCurve)->second); + current = entity_descriptor_map[Type::IfcShadingDeviceType] = new IfcEntityDescriptor(Type::IfcShadingDeviceType,entity_descriptor_map.find(Type::IfcBuildingElementType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcShadingDeviceTypeEnum); current = entity_descriptor_map[Type::IfcSite] = new IfcEntityDescriptor(Type::IfcSite,entity_descriptor_map.find(Type::IfcSpatialStructureElement)->second); @@ -2246,7 +2265,7 @@ void InitDescriptorMap() { current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcTendonTypeEnum); current->add("NominalDiameter",true,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current->add("CrossSectionArea",true,IfcUtil::Argument_DOUBLE,Type::IfcAreaMeasure); - current->add("SheethDiameter",true,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); + current->add("SheathDiameter",true,IfcUtil::Argument_DOUBLE,Type::IfcPositiveLengthMeasure); current = entity_descriptor_map[Type::IfcTransformerType] = new IfcEntityDescriptor(Type::IfcTransformerType,entity_descriptor_map.find(Type::IfcEnergyConversionDeviceType)->second); current->add("PredefinedType",false,IfcUtil::Argument_ENUMERATION,Type::IfcTransformerTypeEnum); current = entity_descriptor_map[Type::IfcTransportElement] = new IfcEntityDescriptor(Type::IfcTransportElement,entity_descriptor_map.find(Type::IfcElement)->second); @@ -2904,6 +2923,7 @@ void InitDescriptorMap() { values.push_back("ELEMENT"); values.push_back("PARTIAL"); values.push_back("PROVISIONFORVOID"); + values.push_back("PROVISIONFORSPACE"); values.push_back("USERDEFINED"); values.push_back("NOTDEFINED"); enumeration_descriptor_map[Type::IfcBuildingElementProxyTypeEnum] = new IfcEnumerationDescriptor(Type::IfcBuildingElementProxyTypeEnum, values); @@ -3548,7 +3568,7 @@ void InitDescriptorMap() { values.push_back("EXTERNAL_WATER"); values.push_back("EXTERNAL_FIRE"); values.push_back("USERDEFINED"); - values.push_back("NOTDEFIEND"); + values.push_back("NOTDEFINED"); enumeration_descriptor_map[Type::IfcExternalSpatialElementTypeEnum] = new IfcEnumerationDescriptor(Type::IfcExternalSpatialElementTypeEnum, values); values.clear(); values.reserve(128); values.push_back("CENTRIFUGALFORWARDCURVED"); @@ -3968,6 +3988,11 @@ void InitDescriptorMap() { values.push_back("NOTDEFINED"); enumeration_descriptor_map[Type::IfcPlateTypeEnum] = new IfcEnumerationDescriptor(Type::IfcPlateTypeEnum, values); values.clear(); values.reserve(128); + values.push_back("CURVE3D"); + values.push_back("PCURVE_S1"); + values.push_back("PCURVE_S2"); + enumeration_descriptor_map[Type::IfcPreferredSurfaceCurveRepresentation] = new IfcEnumerationDescriptor(Type::IfcPreferredSurfaceCurveRepresentation, values); + values.clear(); values.reserve(128); values.push_back("ADVICE_CAUTION"); values.push_back("ADVICE_NOTE"); values.push_back("ADVICE_WARNING"); @@ -4227,6 +4252,7 @@ void InitDescriptorMap() { values.push_back("TAPERED"); enumeration_descriptor_map[Type::IfcSectionTypeEnum] = new IfcEnumerationDescriptor(Type::IfcSectionTypeEnum, values); values.clear(); values.reserve(128); + values.push_back("COSENSOR"); values.push_back("CO2SENSOR"); values.push_back("CONDUCTANCESENSOR"); values.push_back("CONTACTSENSOR"); @@ -4804,6 +4830,7 @@ void InitInverseMap() { inverse_map[Type::IfcGridAxis].insert(std::make_pair("PartOfU", std::make_pair(Type::IfcGrid, 7))); inverse_map[Type::IfcGridAxis].insert(std::make_pair("HasIntersections", std::make_pair(Type::IfcVirtualGridIntersection, 0))); inverse_map[Type::IfcGroup].insert(std::make_pair("IsGroupedBy", std::make_pair(Type::IfcRelAssignsToGroup, 6))); + inverse_map[Type::IfcIndexedPolygonalFace].insert(std::make_pair("ToFaceSet", std::make_pair(Type::IfcPolygonalFaceSet, 2))); inverse_map[Type::IfcLibraryInformation].insert(std::make_pair("LibraryInfoForObjects", std::make_pair(Type::IfcRelAssociatesLibrary, 5))); inverse_map[Type::IfcLibraryInformation].insert(std::make_pair("HasLibraryReferences", std::make_pair(Type::IfcLibraryReference, 5))); inverse_map[Type::IfcLibraryReference].insert(std::make_pair("LibraryRefForObjects", std::make_pair(Type::IfcRelAssociatesLibrary, 5))); diff --git a/src/ifcparse/Ifc4.cpp b/src/ifcparse/Ifc4.cpp index e5ee45e9b5..5179f08926 100644 --- a/src/ifcparse/Ifc4.cpp +++ b/src/ifcparse/Ifc4.cpp @@ -145,7 +145,6 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcSpecificHeatCapacityMeasure: return new IfcSpecificHeatCapacityMeasure(e); break; case Type::IfcSpecularExponent: return new IfcSpecularExponent(e); break; case Type::IfcSpecularRoughness: return new IfcSpecularRoughness(e); break; - case Type::IfcStrippedOptional: return new IfcStrippedOptional(e); break; case Type::IfcTemperatureGradientMeasure: return new IfcTemperatureGradientMeasure(e); break; case Type::IfcTemperatureRateOfChangeMeasure: return new IfcTemperatureRateOfChangeMeasure(e); break; case Type::IfcText: return new IfcText(e); break; @@ -488,10 +487,13 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcImageTexture: return new IfcImageTexture(e); break; case Type::IfcIndexedColourMap: return new IfcIndexedColourMap(e); break; case Type::IfcIndexedPolyCurve: return new IfcIndexedPolyCurve(e); break; + case Type::IfcIndexedPolygonalFace: return new IfcIndexedPolygonalFace(e); break; + case Type::IfcIndexedPolygonalFaceWithVoids: return new IfcIndexedPolygonalFaceWithVoids(e); break; case Type::IfcIndexedTextureMap: return new IfcIndexedTextureMap(e); break; case Type::IfcIndexedTriangleTextureMap: return new IfcIndexedTriangleTextureMap(e); break; case Type::IfcInterceptor: return new IfcInterceptor(e); break; case Type::IfcInterceptorType: return new IfcInterceptorType(e); break; + case Type::IfcIntersectionCurve: return new IfcIntersectionCurve(e); break; case Type::IfcInventory: return new IfcInventory(e); break; case Type::IfcIrregularTimeSeries: return new IfcIrregularTimeSeries(e); break; case Type::IfcIrregularTimeSeriesValue: return new IfcIrregularTimeSeriesValue(e); break; @@ -601,6 +603,7 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcPointOnSurface: return new IfcPointOnSurface(e); break; case Type::IfcPolyLoop: return new IfcPolyLoop(e); break; case Type::IfcPolygonalBoundedHalfSpace: return new IfcPolygonalBoundedHalfSpace(e); break; + case Type::IfcPolygonalFaceSet: return new IfcPolygonalFaceSet(e); break; case Type::IfcPolyline: return new IfcPolyline(e); break; case Type::IfcPort: return new IfcPort(e); break; case Type::IfcPostalAddress: return new IfcPostalAddress(e); break; @@ -751,6 +754,7 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcSanitaryTerminal: return new IfcSanitaryTerminal(e); break; case Type::IfcSanitaryTerminalType: return new IfcSanitaryTerminalType(e); break; case Type::IfcSchedulingTime: return new IfcSchedulingTime(e); break; + case Type::IfcSeamCurve: return new IfcSeamCurve(e); break; case Type::IfcSectionProperties: return new IfcSectionProperties(e); break; case Type::IfcSectionReinforcementProperties: return new IfcSectionReinforcementProperties(e); break; case Type::IfcSectionedSpine: return new IfcSectionedSpine(e); break; @@ -784,6 +788,7 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcSpatialZone: return new IfcSpatialZone(e); break; case Type::IfcSpatialZoneType: return new IfcSpatialZoneType(e); break; case Type::IfcSphere: return new IfcSphere(e); break; + case Type::IfcSphericalSurface: return new IfcSphericalSurface(e); break; case Type::IfcStackTerminal: return new IfcStackTerminal(e); break; case Type::IfcStackTerminalType: return new IfcStackTerminalType(e); break; case Type::IfcStair: return new IfcStair(e); break; @@ -834,6 +839,7 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcSubContractResourceType: return new IfcSubContractResourceType(e); break; case Type::IfcSubedge: return new IfcSubedge(e); break; case Type::IfcSurface: return new IfcSurface(e); break; + case Type::IfcSurfaceCurve: return new IfcSurfaceCurve(e); break; case Type::IfcSurfaceCurveSweptAreaSolid: return new IfcSurfaceCurveSweptAreaSolid(e); break; case Type::IfcSurfaceFeature: return new IfcSurfaceFeature(e); break; case Type::IfcSurfaceOfLinearExtrusion: return new IfcSurfaceOfLinearExtrusion(e); break; @@ -888,6 +894,7 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { case Type::IfcTimeSeriesValue: return new IfcTimeSeriesValue(e); break; case Type::IfcTopologicalRepresentationItem: return new IfcTopologicalRepresentationItem(e); break; case Type::IfcTopologyRepresentation: return new IfcTopologyRepresentation(e); break; + case Type::IfcToroidalSurface: return new IfcToroidalSurface(e); break; case Type::IfcTransformer: return new IfcTransformer(e); break; case Type::IfcTransformerType: return new IfcTransformerType(e); break; case Type::IfcTransportElement: return new IfcTransportElement(e); break; @@ -942,8 +949,8 @@ IfcUtil::IfcBaseClass* Ifc4::SchemaEntity(IfcEntityInstanceData* e) { } const std::string& Type::ToString(Enum v) { - if (v < 0 || v >= 1165) throw IfcException("Unable to find find keyword in schema"); - static std::string names[] = { "IfcAbsorbedDoseMeasure", "IfcAccelerationMeasure", "IfcActionRequest", "IfcActionRequestTypeEnum", "IfcActionSourceTypeEnum", "IfcActionTypeEnum", "IfcActor", "IfcActorRole", "IfcActorSelect", "IfcActuator", "IfcActuatorType", "IfcActuatorTypeEnum", "IfcAddress", "IfcAddressTypeEnum", "IfcAdvancedBrep", "IfcAdvancedBrepWithVoids", "IfcAdvancedFace", "IfcAirTerminal", "IfcAirTerminalBox", "IfcAirTerminalBoxType", "IfcAirTerminalBoxTypeEnum", "IfcAirTerminalType", "IfcAirTerminalTypeEnum", "IfcAirToAirHeatRecovery", "IfcAirToAirHeatRecoveryType", "IfcAirToAirHeatRecoveryTypeEnum", "IfcAlarm", "IfcAlarmType", "IfcAlarmTypeEnum", "IfcAmountOfSubstanceMeasure", "IfcAnalysisModelTypeEnum", "IfcAnalysisTheoryTypeEnum", "IfcAngularVelocityMeasure", "IfcAnnotation", "IfcAnnotationFillArea", "IfcApplication", "IfcAppliedValue", "IfcAppliedValueSelect", "IfcApproval", "IfcApprovalRelationship", "IfcArbitraryClosedProfileDef", "IfcArbitraryOpenProfileDef", "IfcArbitraryProfileDefWithVoids", "IfcArcIndex", "IfcAreaDensityMeasure", "IfcAreaMeasure", "IfcArithmeticOperatorEnum", "IfcAssemblyPlaceEnum", "IfcAsset", "IfcAsymmetricIShapeProfileDef", "IfcAudioVisualAppliance", "IfcAudioVisualApplianceType", "IfcAudioVisualApplianceTypeEnum", "IfcAxis1Placement", "IfcAxis2Placement", "IfcAxis2Placement2D", "IfcAxis2Placement3D", "IfcBSplineCurve", "IfcBSplineCurveForm", "IfcBSplineCurveWithKnots", "IfcBSplineSurface", "IfcBSplineSurfaceForm", "IfcBSplineSurfaceWithKnots", "IfcBeam", "IfcBeamStandardCase", "IfcBeamType", "IfcBeamTypeEnum", "IfcBenchmarkEnum", "IfcBendingParameterSelect", "IfcBinary", "IfcBlobTexture", "IfcBlock", "IfcBoiler", "IfcBoilerType", "IfcBoilerTypeEnum", "IfcBoolean", "IfcBooleanClippingResult", "IfcBooleanOperand", "IfcBooleanOperator", "IfcBooleanResult", "IfcBoundaryCondition", "IfcBoundaryCurve", "IfcBoundaryEdgeCondition", "IfcBoundaryFaceCondition", "IfcBoundaryNodeCondition", "IfcBoundaryNodeConditionWarping", "IfcBoundedCurve", "IfcBoundedSurface", "IfcBoundingBox", "IfcBoxAlignment", "IfcBoxedHalfSpace", "IfcBuilding", "IfcBuildingElement", "IfcBuildingElementPart", "IfcBuildingElementPartType", "IfcBuildingElementPartTypeEnum", "IfcBuildingElementProxy", "IfcBuildingElementProxyType", "IfcBuildingElementProxyTypeEnum", "IfcBuildingElementType", "IfcBuildingStorey", "IfcBuildingSystem", "IfcBuildingSystemTypeEnum", "IfcBurner", "IfcBurnerType", "IfcBurnerTypeEnum", "IfcCShapeProfileDef", "IfcCableCarrierFitting", "IfcCableCarrierFittingType", "IfcCableCarrierFittingTypeEnum", "IfcCableCarrierSegment", "IfcCableCarrierSegmentType", "IfcCableCarrierSegmentTypeEnum", "IfcCableFitting", "IfcCableFittingType", "IfcCableFittingTypeEnum", "IfcCableSegment", "IfcCableSegmentType", "IfcCableSegmentTypeEnum", "IfcCardinalPointReference", "IfcCartesianPoint", "IfcCartesianPointList", "IfcCartesianPointList2D", "IfcCartesianPointList3D", "IfcCartesianTransformationOperator", "IfcCartesianTransformationOperator2D", "IfcCartesianTransformationOperator2DnonUniform", "IfcCartesianTransformationOperator3D", "IfcCartesianTransformationOperator3DnonUniform", "IfcCenterLineProfileDef", "IfcChangeActionEnum", "IfcChiller", "IfcChillerType", "IfcChillerTypeEnum", "IfcChimney", "IfcChimneyType", "IfcChimneyTypeEnum", "IfcCircle", "IfcCircleHollowProfileDef", "IfcCircleProfileDef", "IfcCivilElement", "IfcCivilElementType", "IfcClassification", "IfcClassificationReference", "IfcClassificationReferenceSelect", "IfcClassificationSelect", "IfcClosedShell", "IfcCoil", "IfcCoilType", "IfcCoilTypeEnum", "IfcColour", "IfcColourOrFactor", "IfcColourRgb", "IfcColourRgbList", "IfcColourSpecification", "IfcColumn", "IfcColumnStandardCase", "IfcColumnType", "IfcColumnTypeEnum", "IfcCommunicationsAppliance", "IfcCommunicationsApplianceType", "IfcCommunicationsApplianceTypeEnum", "IfcComplexNumber", "IfcComplexProperty", "IfcComplexPropertyTemplate", "IfcComplexPropertyTemplateTypeEnum", "IfcCompositeCurve", "IfcCompositeCurveOnSurface", "IfcCompositeCurveSegment", "IfcCompositeProfileDef", "IfcCompoundPlaneAngleMeasure", "IfcCompressor", "IfcCompressorType", "IfcCompressorTypeEnum", "IfcCondenser", "IfcCondenserType", "IfcCondenserTypeEnum", "IfcConic", "IfcConnectedFaceSet", "IfcConnectionCurveGeometry", "IfcConnectionGeometry", "IfcConnectionPointEccentricity", "IfcConnectionPointGeometry", "IfcConnectionSurfaceGeometry", "IfcConnectionTypeEnum", "IfcConnectionVolumeGeometry", "IfcConstraint", "IfcConstraintEnum", "IfcConstructionEquipmentResource", "IfcConstructionEquipmentResourceType", "IfcConstructionEquipmentResourceTypeEnum", "IfcConstructionMaterialResource", "IfcConstructionMaterialResourceType", "IfcConstructionMaterialResourceTypeEnum", "IfcConstructionProductResource", "IfcConstructionProductResourceType", "IfcConstructionProductResourceTypeEnum", "IfcConstructionResource", "IfcConstructionResourceType", "IfcContext", "IfcContextDependentMeasure", "IfcContextDependentUnit", "IfcControl", "IfcController", "IfcControllerType", "IfcControllerTypeEnum", "IfcConversionBasedUnit", "IfcConversionBasedUnitWithOffset", "IfcCooledBeam", "IfcCooledBeamType", "IfcCooledBeamTypeEnum", "IfcCoolingTower", "IfcCoolingTowerType", "IfcCoolingTowerTypeEnum", "IfcCoordinateOperation", "IfcCoordinateReferenceSystem", "IfcCoordinateReferenceSystemSelect", "IfcCostItem", "IfcCostItemTypeEnum", "IfcCostSchedule", "IfcCostScheduleTypeEnum", "IfcCostValue", "IfcCountMeasure", "IfcCovering", "IfcCoveringType", "IfcCoveringTypeEnum", "IfcCrewResource", "IfcCrewResourceType", "IfcCrewResourceTypeEnum", "IfcCsgPrimitive3D", "IfcCsgSelect", "IfcCsgSolid", "IfcCurrencyRelationship", "IfcCurtainWall", "IfcCurtainWallType", "IfcCurtainWallTypeEnum", "IfcCurvatureMeasure", "IfcCurve", "IfcCurveBoundedPlane", "IfcCurveBoundedSurface", "IfcCurveFontOrScaledCurveFontSelect", "IfcCurveInterpolationEnum", "IfcCurveOnSurface", "IfcCurveOrEdgeCurve", "IfcCurveStyle", "IfcCurveStyleFont", "IfcCurveStyleFontAndScaling", "IfcCurveStyleFontPattern", "IfcCurveStyleFontSelect", "IfcCylindricalSurface", "IfcDamper", "IfcDamperType", "IfcDamperTypeEnum", "IfcDataOriginEnum", "IfcDate", "IfcDateTime", "IfcDayInMonthNumber", "IfcDayInWeekNumber", "IfcDefinitionSelect", "IfcDerivedMeasureValue", "IfcDerivedProfileDef", "IfcDerivedUnit", "IfcDerivedUnitElement", "IfcDerivedUnitEnum", "IfcDescriptiveMeasure", "IfcDimensionCount", "IfcDimensionalExponents", "IfcDirection", "IfcDirectionSenseEnum", "IfcDiscreteAccessory", "IfcDiscreteAccessoryType", "IfcDiscreteAccessoryTypeEnum", "IfcDistributionChamberElement", "IfcDistributionChamberElementType", "IfcDistributionChamberElementTypeEnum", "IfcDistributionCircuit", "IfcDistributionControlElement", "IfcDistributionControlElementType", "IfcDistributionElement", "IfcDistributionElementType", "IfcDistributionFlowElement", "IfcDistributionFlowElementType", "IfcDistributionPort", "IfcDistributionPortTypeEnum", "IfcDistributionSystem", "IfcDistributionSystemEnum", "IfcDocumentConfidentialityEnum", "IfcDocumentInformation", "IfcDocumentInformationRelationship", "IfcDocumentReference", "IfcDocumentSelect", "IfcDocumentStatusEnum", "IfcDoor", "IfcDoorLiningProperties", "IfcDoorPanelOperationEnum", "IfcDoorPanelPositionEnum", "IfcDoorPanelProperties", "IfcDoorStandardCase", "IfcDoorStyle", "IfcDoorStyleConstructionEnum", "IfcDoorStyleOperationEnum", "IfcDoorType", "IfcDoorTypeEnum", "IfcDoorTypeOperationEnum", "IfcDoseEquivalentMeasure", "IfcDraughtingPreDefinedColour", "IfcDraughtingPreDefinedCurveFont", "IfcDuctFitting", "IfcDuctFittingType", "IfcDuctFittingTypeEnum", "IfcDuctSegment", "IfcDuctSegmentType", "IfcDuctSegmentTypeEnum", "IfcDuctSilencer", "IfcDuctSilencerType", "IfcDuctSilencerTypeEnum", "IfcDuration", "IfcDynamicViscosityMeasure", "IfcEdge", "IfcEdgeCurve", "IfcEdgeLoop", "IfcElectricAppliance", "IfcElectricApplianceType", "IfcElectricApplianceTypeEnum", "IfcElectricCapacitanceMeasure", "IfcElectricChargeMeasure", "IfcElectricConductanceMeasure", "IfcElectricCurrentMeasure", "IfcElectricDistributionBoard", "IfcElectricDistributionBoardType", "IfcElectricDistributionBoardTypeEnum", "IfcElectricFlowStorageDevice", "IfcElectricFlowStorageDeviceType", "IfcElectricFlowStorageDeviceTypeEnum", "IfcElectricGenerator", "IfcElectricGeneratorType", "IfcElectricGeneratorTypeEnum", "IfcElectricMotor", "IfcElectricMotorType", "IfcElectricMotorTypeEnum", "IfcElectricResistanceMeasure", "IfcElectricTimeControl", "IfcElectricTimeControlType", "IfcElectricTimeControlTypeEnum", "IfcElectricVoltageMeasure", "IfcElement", "IfcElementAssembly", "IfcElementAssemblyType", "IfcElementAssemblyTypeEnum", "IfcElementComponent", "IfcElementComponentType", "IfcElementCompositionEnum", "IfcElementQuantity", "IfcElementType", "IfcElementarySurface", "IfcEllipse", "IfcEllipseProfileDef", "IfcEnergyConversionDevice", "IfcEnergyConversionDeviceType", "IfcEnergyMeasure", "IfcEngine", "IfcEngineType", "IfcEngineTypeEnum", "IfcEvaporativeCooler", "IfcEvaporativeCoolerType", "IfcEvaporativeCoolerTypeEnum", "IfcEvaporator", "IfcEvaporatorType", "IfcEvaporatorTypeEnum", "IfcEvent", "IfcEventTime", "IfcEventTriggerTypeEnum", "IfcEventType", "IfcEventTypeEnum", "IfcExtendedProperties", "IfcExternalInformation", "IfcExternalReference", "IfcExternalReferenceRelationship", "IfcExternalSpatialElement", "IfcExternalSpatialElementTypeEnum", "IfcExternalSpatialStructureElement", "IfcExternallyDefinedHatchStyle", "IfcExternallyDefinedSurfaceStyle", "IfcExternallyDefinedTextFont", "IfcExtrudedAreaSolid", "IfcExtrudedAreaSolidTapered", "IfcFace", "IfcFaceBasedSurfaceModel", "IfcFaceBound", "IfcFaceOuterBound", "IfcFaceSurface", "IfcFacetedBrep", "IfcFacetedBrepWithVoids", "IfcFailureConnectionCondition", "IfcFan", "IfcFanType", "IfcFanTypeEnum", "IfcFastener", "IfcFastenerType", "IfcFastenerTypeEnum", "IfcFeatureElement", "IfcFeatureElementAddition", "IfcFeatureElementSubtraction", "IfcFillAreaStyle", "IfcFillAreaStyleHatching", "IfcFillAreaStyleTiles", "IfcFillStyleSelect", "IfcFilter", "IfcFilterType", "IfcFilterTypeEnum", "IfcFireSuppressionTerminal", "IfcFireSuppressionTerminalType", "IfcFireSuppressionTerminalTypeEnum", "IfcFixedReferenceSweptAreaSolid", "IfcFlowController", "IfcFlowControllerType", "IfcFlowDirectionEnum", "IfcFlowFitting", "IfcFlowFittingType", "IfcFlowInstrument", "IfcFlowInstrumentType", "IfcFlowInstrumentTypeEnum", "IfcFlowMeter", "IfcFlowMeterType", "IfcFlowMeterTypeEnum", "IfcFlowMovingDevice", "IfcFlowMovingDeviceType", "IfcFlowSegment", "IfcFlowSegmentType", "IfcFlowStorageDevice", "IfcFlowStorageDeviceType", "IfcFlowTerminal", "IfcFlowTerminalType", "IfcFlowTreatmentDevice", "IfcFlowTreatmentDeviceType", "IfcFontStyle", "IfcFontVariant", "IfcFontWeight", "IfcFooting", "IfcFootingType", "IfcFootingTypeEnum", "IfcForceMeasure", "IfcFrequencyMeasure", "IfcFurnishingElement", "IfcFurnishingElementType", "IfcFurniture", "IfcFurnitureType", "IfcFurnitureTypeEnum", "IfcGeographicElement", "IfcGeographicElementType", "IfcGeographicElementTypeEnum", "IfcGeometricCurveSet", "IfcGeometricProjectionEnum", "IfcGeometricRepresentationContext", "IfcGeometricRepresentationItem", "IfcGeometricRepresentationSubContext", "IfcGeometricSet", "IfcGeometricSetSelect", "IfcGlobalOrLocalEnum", "IfcGloballyUniqueId", "IfcGrid", "IfcGridAxis", "IfcGridPlacement", "IfcGridPlacementDirectionSelect", "IfcGridTypeEnum", "IfcGroup", "IfcHalfSpaceSolid", "IfcHatchLineDistanceSelect", "IfcHeatExchanger", "IfcHeatExchangerType", "IfcHeatExchangerTypeEnum", "IfcHeatFluxDensityMeasure", "IfcHeatingValueMeasure", "IfcHumidifier", "IfcHumidifierType", "IfcHumidifierTypeEnum", "IfcIShapeProfileDef", "IfcIdentifier", "IfcIlluminanceMeasure", "IfcImageTexture", "IfcIndexedColourMap", "IfcIndexedPolyCurve", "IfcIndexedTextureMap", "IfcIndexedTriangleTextureMap", "IfcInductanceMeasure", "IfcInteger", "IfcIntegerCountRateMeasure", "IfcInterceptor", "IfcInterceptorType", "IfcInterceptorTypeEnum", "IfcInternalOrExternalEnum", "IfcInventory", "IfcInventoryTypeEnum", "IfcIonConcentrationMeasure", "IfcIrregularTimeSeries", "IfcIrregularTimeSeriesValue", "IfcIsothermalMoistureCapacityMeasure", "IfcJunctionBox", "IfcJunctionBoxType", "IfcJunctionBoxTypeEnum", "IfcKinematicViscosityMeasure", "IfcKnotType", "IfcLShapeProfileDef", "IfcLabel", "IfcLaborResource", "IfcLaborResourceType", "IfcLaborResourceTypeEnum", "IfcLagTime", "IfcLamp", "IfcLampType", "IfcLampTypeEnum", "IfcLanguageId", "IfcLayerSetDirectionEnum", "IfcLayeredItem", "IfcLengthMeasure", "IfcLibraryInformation", "IfcLibraryReference", "IfcLibrarySelect", "IfcLightDistributionCurveEnum", "IfcLightDistributionData", "IfcLightDistributionDataSourceSelect", "IfcLightEmissionSourceEnum", "IfcLightFixture", "IfcLightFixtureType", "IfcLightFixtureTypeEnum", "IfcLightIntensityDistribution", "IfcLightSource", "IfcLightSourceAmbient", "IfcLightSourceDirectional", "IfcLightSourceGoniometric", "IfcLightSourcePositional", "IfcLightSourceSpot", "IfcLine", "IfcLineIndex", "IfcLinearForceMeasure", "IfcLinearMomentMeasure", "IfcLinearStiffnessMeasure", "IfcLinearVelocityMeasure", "IfcLoadGroupTypeEnum", "IfcLocalPlacement", "IfcLogical", "IfcLogicalOperatorEnum", "IfcLoop", "IfcLuminousFluxMeasure", "IfcLuminousIntensityDistributionMeasure", "IfcLuminousIntensityMeasure", "IfcMagneticFluxDensityMeasure", "IfcMagneticFluxMeasure", "IfcManifoldSolidBrep", "IfcMapConversion", "IfcMappedItem", "IfcMassDensityMeasure", "IfcMassFlowRateMeasure", "IfcMassMeasure", "IfcMassPerLengthMeasure", "IfcMaterial", "IfcMaterialClassificationRelationship", "IfcMaterialConstituent", "IfcMaterialConstituentSet", "IfcMaterialDefinition", "IfcMaterialDefinitionRepresentation", "IfcMaterialLayer", "IfcMaterialLayerSet", "IfcMaterialLayerSetUsage", "IfcMaterialLayerWithOffsets", "IfcMaterialList", "IfcMaterialProfile", "IfcMaterialProfileSet", "IfcMaterialProfileSetUsage", "IfcMaterialProfileSetUsageTapering", "IfcMaterialProfileWithOffsets", "IfcMaterialProperties", "IfcMaterialRelationship", "IfcMaterialSelect", "IfcMaterialUsageDefinition", "IfcMeasureValue", "IfcMeasureWithUnit", "IfcMechanicalFastener", "IfcMechanicalFastenerType", "IfcMechanicalFastenerTypeEnum", "IfcMedicalDevice", "IfcMedicalDeviceType", "IfcMedicalDeviceTypeEnum", "IfcMember", "IfcMemberStandardCase", "IfcMemberType", "IfcMemberTypeEnum", "IfcMetric", "IfcMetricValueSelect", "IfcMirroredProfileDef", "IfcModulusOfElasticityMeasure", "IfcModulusOfLinearSubgradeReactionMeasure", "IfcModulusOfRotationalSubgradeReactionMeasure", "IfcModulusOfRotationalSubgradeReactionSelect", "IfcModulusOfSubgradeReactionMeasure", "IfcModulusOfSubgradeReactionSelect", "IfcModulusOfTranslationalSubgradeReactionSelect", "IfcMoistureDiffusivityMeasure", "IfcMolecularWeightMeasure", "IfcMomentOfInertiaMeasure", "IfcMonetaryMeasure", "IfcMonetaryUnit", "IfcMonthInYearNumber", "IfcMotorConnection", "IfcMotorConnectionType", "IfcMotorConnectionTypeEnum", "IfcNamedUnit", "IfcNonNegativeLengthMeasure", "IfcNormalisedRatioMeasure", "IfcNullStyle", "IfcNumericMeasure", "IfcObject", "IfcObjectDefinition", "IfcObjectPlacement", "IfcObjectReferenceSelect", "IfcObjectTypeEnum", "IfcObjective", "IfcObjectiveEnum", "IfcOccupant", "IfcOccupantTypeEnum", "IfcOffsetCurve2D", "IfcOffsetCurve3D", "IfcOpenShell", "IfcOpeningElement", "IfcOpeningElementTypeEnum", "IfcOpeningStandardCase", "IfcOrganization", "IfcOrganizationRelationship", "IfcOrientedEdge", "IfcOuterBoundaryCurve", "IfcOutlet", "IfcOutletType", "IfcOutletTypeEnum", "IfcOwnerHistory", "IfcPHMeasure", "IfcParameterValue", "IfcParameterizedProfileDef", "IfcPath", "IfcPcurve", "IfcPerformanceHistory", "IfcPerformanceHistoryTypeEnum", "IfcPermeableCoveringOperationEnum", "IfcPermeableCoveringProperties", "IfcPermit", "IfcPermitTypeEnum", "IfcPerson", "IfcPersonAndOrganization", "IfcPhysicalComplexQuantity", "IfcPhysicalOrVirtualEnum", "IfcPhysicalQuantity", "IfcPhysicalSimpleQuantity", "IfcPile", "IfcPileConstructionEnum", "IfcPileType", "IfcPileTypeEnum", "IfcPipeFitting", "IfcPipeFittingType", "IfcPipeFittingTypeEnum", "IfcPipeSegment", "IfcPipeSegmentType", "IfcPipeSegmentTypeEnum", "IfcPixelTexture", "IfcPlacement", "IfcPlanarBox", "IfcPlanarExtent", "IfcPlanarForceMeasure", "IfcPlane", "IfcPlaneAngleMeasure", "IfcPlate", "IfcPlateStandardCase", "IfcPlateType", "IfcPlateTypeEnum", "IfcPoint", "IfcPointOnCurve", "IfcPointOnSurface", "IfcPointOrVertexPoint", "IfcPolyLoop", "IfcPolygonalBoundedHalfSpace", "IfcPolyline", "IfcPort", "IfcPositiveInteger", "IfcPositiveLengthMeasure", "IfcPositivePlaneAngleMeasure", "IfcPositiveRatioMeasure", "IfcPostalAddress", "IfcPowerMeasure", "IfcPreDefinedColour", "IfcPreDefinedCurveFont", "IfcPreDefinedItem", "IfcPreDefinedProperties", "IfcPreDefinedPropertySet", "IfcPreDefinedTextFont", "IfcPresentableText", "IfcPresentationItem", "IfcPresentationLayerAssignment", "IfcPresentationLayerWithStyle", "IfcPresentationStyle", "IfcPresentationStyleAssignment", "IfcPresentationStyleSelect", "IfcPressureMeasure", "IfcProcedure", "IfcProcedureType", "IfcProcedureTypeEnum", "IfcProcess", "IfcProcessSelect", "IfcProduct", "IfcProductDefinitionShape", "IfcProductRepresentation", "IfcProductRepresentationSelect", "IfcProductSelect", "IfcProfileDef", "IfcProfileProperties", "IfcProfileTypeEnum", "IfcProject", "IfcProjectLibrary", "IfcProjectOrder", "IfcProjectOrderTypeEnum", "IfcProjectedCRS", "IfcProjectedOrTrueLengthEnum", "IfcProjectionElement", "IfcProjectionElementTypeEnum", "IfcProperty", "IfcPropertyAbstraction", "IfcPropertyBoundedValue", "IfcPropertyDefinition", "IfcPropertyDependencyRelationship", "IfcPropertyEnumeratedValue", "IfcPropertyEnumeration", "IfcPropertyListValue", "IfcPropertyReferenceValue", "IfcPropertySet", "IfcPropertySetDefinition", "IfcPropertySetDefinitionSelect", "IfcPropertySetDefinitionSet", "IfcPropertySetTemplate", "IfcPropertySetTemplateTypeEnum", "IfcPropertySingleValue", "IfcPropertyTableValue", "IfcPropertyTemplate", "IfcPropertyTemplateDefinition", "IfcProtectiveDevice", "IfcProtectiveDeviceTrippingUnit", "IfcProtectiveDeviceTrippingUnitType", "IfcProtectiveDeviceTrippingUnitTypeEnum", "IfcProtectiveDeviceType", "IfcProtectiveDeviceTypeEnum", "IfcProxy", "IfcPump", "IfcPumpType", "IfcPumpTypeEnum", "IfcQuantityArea", "IfcQuantityCount", "IfcQuantityLength", "IfcQuantitySet", "IfcQuantityTime", "IfcQuantityVolume", "IfcQuantityWeight", "IfcRadioActivityMeasure", "IfcRailing", "IfcRailingType", "IfcRailingTypeEnum", "IfcRamp", "IfcRampFlight", "IfcRampFlightType", "IfcRampFlightTypeEnum", "IfcRampType", "IfcRampTypeEnum", "IfcRatioMeasure", "IfcRationalBSplineCurveWithKnots", "IfcRationalBSplineSurfaceWithKnots", "IfcReal", "IfcRectangleHollowProfileDef", "IfcRectangleProfileDef", "IfcRectangularPyramid", "IfcRectangularTrimmedSurface", "IfcRecurrencePattern", "IfcRecurrenceTypeEnum", "IfcReference", "IfcReflectanceMethodEnum", "IfcRegularTimeSeries", "IfcReinforcementBarProperties", "IfcReinforcementDefinitionProperties", "IfcReinforcingBar", "IfcReinforcingBarRoleEnum", "IfcReinforcingBarSurfaceEnum", "IfcReinforcingBarType", "IfcReinforcingBarTypeEnum", "IfcReinforcingElement", "IfcReinforcingElementType", "IfcReinforcingMesh", "IfcReinforcingMeshType", "IfcReinforcingMeshTypeEnum", "IfcRelAggregates", "IfcRelAssigns", "IfcRelAssignsToActor", "IfcRelAssignsToControl", "IfcRelAssignsToGroup", "IfcRelAssignsToGroupByFactor", "IfcRelAssignsToProcess", "IfcRelAssignsToProduct", "IfcRelAssignsToResource", "IfcRelAssociates", "IfcRelAssociatesApproval", "IfcRelAssociatesClassification", "IfcRelAssociatesConstraint", "IfcRelAssociatesDocument", "IfcRelAssociatesLibrary", "IfcRelAssociatesMaterial", "IfcRelConnects", "IfcRelConnectsElements", "IfcRelConnectsPathElements", "IfcRelConnectsPortToElement", "IfcRelConnectsPorts", "IfcRelConnectsStructuralActivity", "IfcRelConnectsStructuralMember", "IfcRelConnectsWithEccentricity", "IfcRelConnectsWithRealizingElements", "IfcRelContainedInSpatialStructure", "IfcRelCoversBldgElements", "IfcRelCoversSpaces", "IfcRelDeclares", "IfcRelDecomposes", "IfcRelDefines", "IfcRelDefinesByObject", "IfcRelDefinesByProperties", "IfcRelDefinesByTemplate", "IfcRelDefinesByType", "IfcRelFillsElement", "IfcRelFlowControlElements", "IfcRelInterferesElements", "IfcRelNests", "IfcRelProjectsElement", "IfcRelReferencedInSpatialStructure", "IfcRelSequence", "IfcRelServicesBuildings", "IfcRelSpaceBoundary", "IfcRelSpaceBoundary1stLevel", "IfcRelSpaceBoundary2ndLevel", "IfcRelVoidsElement", "IfcRelationship", "IfcReparametrisedCompositeCurveSegment", "IfcRepresentation", "IfcRepresentationContext", "IfcRepresentationItem", "IfcRepresentationMap", "IfcResource", "IfcResourceApprovalRelationship", "IfcResourceConstraintRelationship", "IfcResourceLevelRelationship", "IfcResourceObjectSelect", "IfcResourceSelect", "IfcResourceTime", "IfcRevolvedAreaSolid", "IfcRevolvedAreaSolidTapered", "IfcRightCircularCone", "IfcRightCircularCylinder", "IfcRoleEnum", "IfcRoof", "IfcRoofType", "IfcRoofTypeEnum", "IfcRoot", "IfcRotationalFrequencyMeasure", "IfcRotationalMassMeasure", "IfcRotationalStiffnessMeasure", "IfcRotationalStiffnessSelect", "IfcRoundedRectangleProfileDef", "IfcSIPrefix", "IfcSIUnit", "IfcSIUnitName", "IfcSanitaryTerminal", "IfcSanitaryTerminalType", "IfcSanitaryTerminalTypeEnum", "IfcSchedulingTime", "IfcSectionModulusMeasure", "IfcSectionProperties", "IfcSectionReinforcementProperties", "IfcSectionTypeEnum", "IfcSectionalAreaIntegralMeasure", "IfcSectionedSpine", "IfcSegmentIndexSelect", "IfcSensor", "IfcSensorType", "IfcSensorTypeEnum", "IfcSequenceEnum", "IfcShadingDevice", "IfcShadingDeviceType", "IfcShadingDeviceTypeEnum", "IfcShapeAspect", "IfcShapeModel", "IfcShapeRepresentation", "IfcShearModulusMeasure", "IfcShell", "IfcShellBasedSurfaceModel", "IfcSimpleProperty", "IfcSimplePropertyTemplate", "IfcSimplePropertyTemplateTypeEnum", "IfcSimpleValue", "IfcSite", "IfcSizeSelect", "IfcSlab", "IfcSlabElementedCase", "IfcSlabStandardCase", "IfcSlabType", "IfcSlabTypeEnum", "IfcSlippageConnectionCondition", "IfcSolarDevice", "IfcSolarDeviceType", "IfcSolarDeviceTypeEnum", "IfcSolidAngleMeasure", "IfcSolidModel", "IfcSolidOrShell", "IfcSoundPowerLevelMeasure", "IfcSoundPowerMeasure", "IfcSoundPressureLevelMeasure", "IfcSoundPressureMeasure", "IfcSpace", "IfcSpaceBoundarySelect", "IfcSpaceHeater", "IfcSpaceHeaterType", "IfcSpaceHeaterTypeEnum", "IfcSpaceType", "IfcSpaceTypeEnum", "IfcSpatialElement", "IfcSpatialElementType", "IfcSpatialStructureElement", "IfcSpatialStructureElementType", "IfcSpatialZone", "IfcSpatialZoneType", "IfcSpatialZoneTypeEnum", "IfcSpecificHeatCapacityMeasure", "IfcSpecularExponent", "IfcSpecularHighlightSelect", "IfcSpecularRoughness", "IfcSphere", "IfcStackTerminal", "IfcStackTerminalType", "IfcStackTerminalTypeEnum", "IfcStair", "IfcStairFlight", "IfcStairFlightType", "IfcStairFlightTypeEnum", "IfcStairType", "IfcStairTypeEnum", "IfcStateEnum", "IfcStrippedOptional", "IfcStructuralAction", "IfcStructuralActivity", "IfcStructuralActivityAssignmentSelect", "IfcStructuralAnalysisModel", "IfcStructuralConnection", "IfcStructuralConnectionCondition", "IfcStructuralCurveAction", "IfcStructuralCurveActivityTypeEnum", "IfcStructuralCurveConnection", "IfcStructuralCurveMember", "IfcStructuralCurveMemberTypeEnum", "IfcStructuralCurveMemberVarying", "IfcStructuralCurveReaction", "IfcStructuralItem", "IfcStructuralLinearAction", "IfcStructuralLoad", "IfcStructuralLoadCase", "IfcStructuralLoadConfiguration", "IfcStructuralLoadGroup", "IfcStructuralLoadLinearForce", "IfcStructuralLoadOrResult", "IfcStructuralLoadPlanarForce", "IfcStructuralLoadSingleDisplacement", "IfcStructuralLoadSingleDisplacementDistortion", "IfcStructuralLoadSingleForce", "IfcStructuralLoadSingleForceWarping", "IfcStructuralLoadStatic", "IfcStructuralLoadTemperature", "IfcStructuralMember", "IfcStructuralPlanarAction", "IfcStructuralPointAction", "IfcStructuralPointConnection", "IfcStructuralPointReaction", "IfcStructuralReaction", "IfcStructuralResultGroup", "IfcStructuralSurfaceAction", "IfcStructuralSurfaceActivityTypeEnum", "IfcStructuralSurfaceConnection", "IfcStructuralSurfaceMember", "IfcStructuralSurfaceMemberTypeEnum", "IfcStructuralSurfaceMemberVarying", "IfcStructuralSurfaceReaction", "IfcStyleAssignmentSelect", "IfcStyleModel", "IfcStyledItem", "IfcStyledRepresentation", "IfcSubContractResource", "IfcSubContractResourceType", "IfcSubContractResourceTypeEnum", "IfcSubedge", "IfcSurface", "IfcSurfaceCurveSweptAreaSolid", "IfcSurfaceFeature", "IfcSurfaceFeatureTypeEnum", "IfcSurfaceOfLinearExtrusion", "IfcSurfaceOfRevolution", "IfcSurfaceOrFaceSurface", "IfcSurfaceReinforcementArea", "IfcSurfaceSide", "IfcSurfaceStyle", "IfcSurfaceStyleElementSelect", "IfcSurfaceStyleLighting", "IfcSurfaceStyleRefraction", "IfcSurfaceStyleRendering", "IfcSurfaceStyleShading", "IfcSurfaceStyleWithTextures", "IfcSurfaceTexture", "IfcSweptAreaSolid", "IfcSweptDiskSolid", "IfcSweptDiskSolidPolygonal", "IfcSweptSurface", "IfcSwitchingDevice", "IfcSwitchingDeviceType", "IfcSwitchingDeviceTypeEnum", "IfcSystem", "IfcSystemFurnitureElement", "IfcSystemFurnitureElementType", "IfcSystemFurnitureElementTypeEnum", "IfcTShapeProfileDef", "IfcTable", "IfcTableColumn", "IfcTableRow", "IfcTank", "IfcTankType", "IfcTankTypeEnum", "IfcTask", "IfcTaskDurationEnum", "IfcTaskTime", "IfcTaskTimeRecurring", "IfcTaskType", "IfcTaskTypeEnum", "IfcTelecomAddress", "IfcTemperatureGradientMeasure", "IfcTemperatureRateOfChangeMeasure", "IfcTendon", "IfcTendonAnchor", "IfcTendonAnchorType", "IfcTendonAnchorTypeEnum", "IfcTendonType", "IfcTendonTypeEnum", "IfcTessellatedFaceSet", "IfcTessellatedItem", "IfcText", "IfcTextAlignment", "IfcTextDecoration", "IfcTextFontName", "IfcTextFontSelect", "IfcTextLiteral", "IfcTextLiteralWithExtent", "IfcTextPath", "IfcTextStyle", "IfcTextStyleFontModel", "IfcTextStyleForDefinedFont", "IfcTextStyleTextModel", "IfcTextTransformation", "IfcTextureCoordinate", "IfcTextureCoordinateGenerator", "IfcTextureMap", "IfcTextureVertex", "IfcTextureVertexList", "IfcThermalAdmittanceMeasure", "IfcThermalConductivityMeasure", "IfcThermalExpansionCoefficientMeasure", "IfcThermalResistanceMeasure", "IfcThermalTransmittanceMeasure", "IfcThermodynamicTemperatureMeasure", "IfcTime", "IfcTimeMeasure", "IfcTimeOrRatioSelect", "IfcTimePeriod", "IfcTimeSeries", "IfcTimeSeriesDataTypeEnum", "IfcTimeSeriesValue", "IfcTimeStamp", "IfcTopologicalRepresentationItem", "IfcTopologyRepresentation", "IfcTorqueMeasure", "IfcTransformer", "IfcTransformerType", "IfcTransformerTypeEnum", "IfcTransitionCode", "IfcTranslationalStiffnessSelect", "IfcTransportElement", "IfcTransportElementType", "IfcTransportElementTypeEnum", "IfcTrapeziumProfileDef", "IfcTriangulatedFaceSet", "IfcTrimmedCurve", "IfcTrimmingPreference", "IfcTrimmingSelect", "IfcTubeBundle", "IfcTubeBundleType", "IfcTubeBundleTypeEnum", "IfcTypeObject", "IfcTypeProcess", "IfcTypeProduct", "IfcTypeResource", "IfcURIReference", "IfcUShapeProfileDef", "IfcUnit", "IfcUnitAssignment", "IfcUnitEnum", "IfcUnitaryControlElement", "IfcUnitaryControlElementType", "IfcUnitaryControlElementTypeEnum", "IfcUnitaryEquipment", "IfcUnitaryEquipmentType", "IfcUnitaryEquipmentTypeEnum", "IfcValue", "IfcValve", "IfcValveType", "IfcValveTypeEnum", "IfcVaporPermeabilityMeasure", "IfcVector", "IfcVectorOrDirection", "IfcVertex", "IfcVertexLoop", "IfcVertexPoint", "IfcVibrationIsolator", "IfcVibrationIsolatorType", "IfcVibrationIsolatorTypeEnum", "IfcVirtualElement", "IfcVirtualGridIntersection", "IfcVoidingFeature", "IfcVoidingFeatureTypeEnum", "IfcVolumeMeasure", "IfcVolumetricFlowRateMeasure", "IfcWall", "IfcWallElementedCase", "IfcWallStandardCase", "IfcWallType", "IfcWallTypeEnum", "IfcWarpingConstantMeasure", "IfcWarpingMomentMeasure", "IfcWarpingStiffnessSelect", "IfcWasteTerminal", "IfcWasteTerminalType", "IfcWasteTerminalTypeEnum", "IfcWindow", "IfcWindowLiningProperties", "IfcWindowPanelOperationEnum", "IfcWindowPanelPositionEnum", "IfcWindowPanelProperties", "IfcWindowStandardCase", "IfcWindowStyle", "IfcWindowStyleConstructionEnum", "IfcWindowStyleOperationEnum", "IfcWindowType", "IfcWindowTypeEnum", "IfcWindowTypePartitioningEnum", "IfcWorkCalendar", "IfcWorkCalendarTypeEnum", "IfcWorkControl", "IfcWorkPlan", "IfcWorkPlanTypeEnum", "IfcWorkSchedule", "IfcWorkScheduleTypeEnum", "IfcWorkTime", "IfcZShapeProfileDef", "IfcZone" }; + if (v < 0 || v >= 1173) throw IfcException("Unable to find find keyword in schema"); + static std::string names[] = { "IfcAbsorbedDoseMeasure", "IfcAccelerationMeasure", "IfcActionRequest", "IfcActionRequestTypeEnum", "IfcActionSourceTypeEnum", "IfcActionTypeEnum", "IfcActor", "IfcActorRole", "IfcActorSelect", "IfcActuator", "IfcActuatorType", "IfcActuatorTypeEnum", "IfcAddress", "IfcAddressTypeEnum", "IfcAdvancedBrep", "IfcAdvancedBrepWithVoids", "IfcAdvancedFace", "IfcAirTerminal", "IfcAirTerminalBox", "IfcAirTerminalBoxType", "IfcAirTerminalBoxTypeEnum", "IfcAirTerminalType", "IfcAirTerminalTypeEnum", "IfcAirToAirHeatRecovery", "IfcAirToAirHeatRecoveryType", "IfcAirToAirHeatRecoveryTypeEnum", "IfcAlarm", "IfcAlarmType", "IfcAlarmTypeEnum", "IfcAmountOfSubstanceMeasure", "IfcAnalysisModelTypeEnum", "IfcAnalysisTheoryTypeEnum", "IfcAngularVelocityMeasure", "IfcAnnotation", "IfcAnnotationFillArea", "IfcApplication", "IfcAppliedValue", "IfcAppliedValueSelect", "IfcApproval", "IfcApprovalRelationship", "IfcArbitraryClosedProfileDef", "IfcArbitraryOpenProfileDef", "IfcArbitraryProfileDefWithVoids", "IfcArcIndex", "IfcAreaDensityMeasure", "IfcAreaMeasure", "IfcArithmeticOperatorEnum", "IfcAssemblyPlaceEnum", "IfcAsset", "IfcAsymmetricIShapeProfileDef", "IfcAudioVisualAppliance", "IfcAudioVisualApplianceType", "IfcAudioVisualApplianceTypeEnum", "IfcAxis1Placement", "IfcAxis2Placement", "IfcAxis2Placement2D", "IfcAxis2Placement3D", "IfcBSplineCurve", "IfcBSplineCurveForm", "IfcBSplineCurveWithKnots", "IfcBSplineSurface", "IfcBSplineSurfaceForm", "IfcBSplineSurfaceWithKnots", "IfcBeam", "IfcBeamStandardCase", "IfcBeamType", "IfcBeamTypeEnum", "IfcBenchmarkEnum", "IfcBendingParameterSelect", "IfcBinary", "IfcBlobTexture", "IfcBlock", "IfcBoiler", "IfcBoilerType", "IfcBoilerTypeEnum", "IfcBoolean", "IfcBooleanClippingResult", "IfcBooleanOperand", "IfcBooleanOperator", "IfcBooleanResult", "IfcBoundaryCondition", "IfcBoundaryCurve", "IfcBoundaryEdgeCondition", "IfcBoundaryFaceCondition", "IfcBoundaryNodeCondition", "IfcBoundaryNodeConditionWarping", "IfcBoundedCurve", "IfcBoundedSurface", "IfcBoundingBox", "IfcBoxAlignment", "IfcBoxedHalfSpace", "IfcBuilding", "IfcBuildingElement", "IfcBuildingElementPart", "IfcBuildingElementPartType", "IfcBuildingElementPartTypeEnum", "IfcBuildingElementProxy", "IfcBuildingElementProxyType", "IfcBuildingElementProxyTypeEnum", "IfcBuildingElementType", "IfcBuildingStorey", "IfcBuildingSystem", "IfcBuildingSystemTypeEnum", "IfcBurner", "IfcBurnerType", "IfcBurnerTypeEnum", "IfcCShapeProfileDef", "IfcCableCarrierFitting", "IfcCableCarrierFittingType", "IfcCableCarrierFittingTypeEnum", "IfcCableCarrierSegment", "IfcCableCarrierSegmentType", "IfcCableCarrierSegmentTypeEnum", "IfcCableFitting", "IfcCableFittingType", "IfcCableFittingTypeEnum", "IfcCableSegment", "IfcCableSegmentType", "IfcCableSegmentTypeEnum", "IfcCardinalPointReference", "IfcCartesianPoint", "IfcCartesianPointList", "IfcCartesianPointList2D", "IfcCartesianPointList3D", "IfcCartesianTransformationOperator", "IfcCartesianTransformationOperator2D", "IfcCartesianTransformationOperator2DnonUniform", "IfcCartesianTransformationOperator3D", "IfcCartesianTransformationOperator3DnonUniform", "IfcCenterLineProfileDef", "IfcChangeActionEnum", "IfcChiller", "IfcChillerType", "IfcChillerTypeEnum", "IfcChimney", "IfcChimneyType", "IfcChimneyTypeEnum", "IfcCircle", "IfcCircleHollowProfileDef", "IfcCircleProfileDef", "IfcCivilElement", "IfcCivilElementType", "IfcClassification", "IfcClassificationReference", "IfcClassificationReferenceSelect", "IfcClassificationSelect", "IfcClosedShell", "IfcCoil", "IfcCoilType", "IfcCoilTypeEnum", "IfcColour", "IfcColourOrFactor", "IfcColourRgb", "IfcColourRgbList", "IfcColourSpecification", "IfcColumn", "IfcColumnStandardCase", "IfcColumnType", "IfcColumnTypeEnum", "IfcCommunicationsAppliance", "IfcCommunicationsApplianceType", "IfcCommunicationsApplianceTypeEnum", "IfcComplexNumber", "IfcComplexProperty", "IfcComplexPropertyTemplate", "IfcComplexPropertyTemplateTypeEnum", "IfcCompositeCurve", "IfcCompositeCurveOnSurface", "IfcCompositeCurveSegment", "IfcCompositeProfileDef", "IfcCompoundPlaneAngleMeasure", "IfcCompressor", "IfcCompressorType", "IfcCompressorTypeEnum", "IfcCondenser", "IfcCondenserType", "IfcCondenserTypeEnum", "IfcConic", "IfcConnectedFaceSet", "IfcConnectionCurveGeometry", "IfcConnectionGeometry", "IfcConnectionPointEccentricity", "IfcConnectionPointGeometry", "IfcConnectionSurfaceGeometry", "IfcConnectionTypeEnum", "IfcConnectionVolumeGeometry", "IfcConstraint", "IfcConstraintEnum", "IfcConstructionEquipmentResource", "IfcConstructionEquipmentResourceType", "IfcConstructionEquipmentResourceTypeEnum", "IfcConstructionMaterialResource", "IfcConstructionMaterialResourceType", "IfcConstructionMaterialResourceTypeEnum", "IfcConstructionProductResource", "IfcConstructionProductResourceType", "IfcConstructionProductResourceTypeEnum", "IfcConstructionResource", "IfcConstructionResourceType", "IfcContext", "IfcContextDependentMeasure", "IfcContextDependentUnit", "IfcControl", "IfcController", "IfcControllerType", "IfcControllerTypeEnum", "IfcConversionBasedUnit", "IfcConversionBasedUnitWithOffset", "IfcCooledBeam", "IfcCooledBeamType", "IfcCooledBeamTypeEnum", "IfcCoolingTower", "IfcCoolingTowerType", "IfcCoolingTowerTypeEnum", "IfcCoordinateOperation", "IfcCoordinateReferenceSystem", "IfcCoordinateReferenceSystemSelect", "IfcCostItem", "IfcCostItemTypeEnum", "IfcCostSchedule", "IfcCostScheduleTypeEnum", "IfcCostValue", "IfcCountMeasure", "IfcCovering", "IfcCoveringType", "IfcCoveringTypeEnum", "IfcCrewResource", "IfcCrewResourceType", "IfcCrewResourceTypeEnum", "IfcCsgPrimitive3D", "IfcCsgSelect", "IfcCsgSolid", "IfcCurrencyRelationship", "IfcCurtainWall", "IfcCurtainWallType", "IfcCurtainWallTypeEnum", "IfcCurvatureMeasure", "IfcCurve", "IfcCurveBoundedPlane", "IfcCurveBoundedSurface", "IfcCurveFontOrScaledCurveFontSelect", "IfcCurveInterpolationEnum", "IfcCurveOnSurface", "IfcCurveOrEdgeCurve", "IfcCurveStyle", "IfcCurveStyleFont", "IfcCurveStyleFontAndScaling", "IfcCurveStyleFontPattern", "IfcCurveStyleFontSelect", "IfcCylindricalSurface", "IfcDamper", "IfcDamperType", "IfcDamperTypeEnum", "IfcDataOriginEnum", "IfcDate", "IfcDateTime", "IfcDayInMonthNumber", "IfcDayInWeekNumber", "IfcDefinitionSelect", "IfcDerivedMeasureValue", "IfcDerivedProfileDef", "IfcDerivedUnit", "IfcDerivedUnitElement", "IfcDerivedUnitEnum", "IfcDescriptiveMeasure", "IfcDimensionCount", "IfcDimensionalExponents", "IfcDirection", "IfcDirectionSenseEnum", "IfcDiscreteAccessory", "IfcDiscreteAccessoryType", "IfcDiscreteAccessoryTypeEnum", "IfcDistributionChamberElement", "IfcDistributionChamberElementType", "IfcDistributionChamberElementTypeEnum", "IfcDistributionCircuit", "IfcDistributionControlElement", "IfcDistributionControlElementType", "IfcDistributionElement", "IfcDistributionElementType", "IfcDistributionFlowElement", "IfcDistributionFlowElementType", "IfcDistributionPort", "IfcDistributionPortTypeEnum", "IfcDistributionSystem", "IfcDistributionSystemEnum", "IfcDocumentConfidentialityEnum", "IfcDocumentInformation", "IfcDocumentInformationRelationship", "IfcDocumentReference", "IfcDocumentSelect", "IfcDocumentStatusEnum", "IfcDoor", "IfcDoorLiningProperties", "IfcDoorPanelOperationEnum", "IfcDoorPanelPositionEnum", "IfcDoorPanelProperties", "IfcDoorStandardCase", "IfcDoorStyle", "IfcDoorStyleConstructionEnum", "IfcDoorStyleOperationEnum", "IfcDoorType", "IfcDoorTypeEnum", "IfcDoorTypeOperationEnum", "IfcDoseEquivalentMeasure", "IfcDraughtingPreDefinedColour", "IfcDraughtingPreDefinedCurveFont", "IfcDuctFitting", "IfcDuctFittingType", "IfcDuctFittingTypeEnum", "IfcDuctSegment", "IfcDuctSegmentType", "IfcDuctSegmentTypeEnum", "IfcDuctSilencer", "IfcDuctSilencerType", "IfcDuctSilencerTypeEnum", "IfcDuration", "IfcDynamicViscosityMeasure", "IfcEdge", "IfcEdgeCurve", "IfcEdgeLoop", "IfcElectricAppliance", "IfcElectricApplianceType", "IfcElectricApplianceTypeEnum", "IfcElectricCapacitanceMeasure", "IfcElectricChargeMeasure", "IfcElectricConductanceMeasure", "IfcElectricCurrentMeasure", "IfcElectricDistributionBoard", "IfcElectricDistributionBoardType", "IfcElectricDistributionBoardTypeEnum", "IfcElectricFlowStorageDevice", "IfcElectricFlowStorageDeviceType", "IfcElectricFlowStorageDeviceTypeEnum", "IfcElectricGenerator", "IfcElectricGeneratorType", "IfcElectricGeneratorTypeEnum", "IfcElectricMotor", "IfcElectricMotorType", "IfcElectricMotorTypeEnum", "IfcElectricResistanceMeasure", "IfcElectricTimeControl", "IfcElectricTimeControlType", "IfcElectricTimeControlTypeEnum", "IfcElectricVoltageMeasure", "IfcElement", "IfcElementAssembly", "IfcElementAssemblyType", "IfcElementAssemblyTypeEnum", "IfcElementComponent", "IfcElementComponentType", "IfcElementCompositionEnum", "IfcElementQuantity", "IfcElementType", "IfcElementarySurface", "IfcEllipse", "IfcEllipseProfileDef", "IfcEnergyConversionDevice", "IfcEnergyConversionDeviceType", "IfcEnergyMeasure", "IfcEngine", "IfcEngineType", "IfcEngineTypeEnum", "IfcEvaporativeCooler", "IfcEvaporativeCoolerType", "IfcEvaporativeCoolerTypeEnum", "IfcEvaporator", "IfcEvaporatorType", "IfcEvaporatorTypeEnum", "IfcEvent", "IfcEventTime", "IfcEventTriggerTypeEnum", "IfcEventType", "IfcEventTypeEnum", "IfcExtendedProperties", "IfcExternalInformation", "IfcExternalReference", "IfcExternalReferenceRelationship", "IfcExternalSpatialElement", "IfcExternalSpatialElementTypeEnum", "IfcExternalSpatialStructureElement", "IfcExternallyDefinedHatchStyle", "IfcExternallyDefinedSurfaceStyle", "IfcExternallyDefinedTextFont", "IfcExtrudedAreaSolid", "IfcExtrudedAreaSolidTapered", "IfcFace", "IfcFaceBasedSurfaceModel", "IfcFaceBound", "IfcFaceOuterBound", "IfcFaceSurface", "IfcFacetedBrep", "IfcFacetedBrepWithVoids", "IfcFailureConnectionCondition", "IfcFan", "IfcFanType", "IfcFanTypeEnum", "IfcFastener", "IfcFastenerType", "IfcFastenerTypeEnum", "IfcFeatureElement", "IfcFeatureElementAddition", "IfcFeatureElementSubtraction", "IfcFillAreaStyle", "IfcFillAreaStyleHatching", "IfcFillAreaStyleTiles", "IfcFillStyleSelect", "IfcFilter", "IfcFilterType", "IfcFilterTypeEnum", "IfcFireSuppressionTerminal", "IfcFireSuppressionTerminalType", "IfcFireSuppressionTerminalTypeEnum", "IfcFixedReferenceSweptAreaSolid", "IfcFlowController", "IfcFlowControllerType", "IfcFlowDirectionEnum", "IfcFlowFitting", "IfcFlowFittingType", "IfcFlowInstrument", "IfcFlowInstrumentType", "IfcFlowInstrumentTypeEnum", "IfcFlowMeter", "IfcFlowMeterType", "IfcFlowMeterTypeEnum", "IfcFlowMovingDevice", "IfcFlowMovingDeviceType", "IfcFlowSegment", "IfcFlowSegmentType", "IfcFlowStorageDevice", "IfcFlowStorageDeviceType", "IfcFlowTerminal", "IfcFlowTerminalType", "IfcFlowTreatmentDevice", "IfcFlowTreatmentDeviceType", "IfcFontStyle", "IfcFontVariant", "IfcFontWeight", "IfcFooting", "IfcFootingType", "IfcFootingTypeEnum", "IfcForceMeasure", "IfcFrequencyMeasure", "IfcFurnishingElement", "IfcFurnishingElementType", "IfcFurniture", "IfcFurnitureType", "IfcFurnitureTypeEnum", "IfcGeographicElement", "IfcGeographicElementType", "IfcGeographicElementTypeEnum", "IfcGeometricCurveSet", "IfcGeometricProjectionEnum", "IfcGeometricRepresentationContext", "IfcGeometricRepresentationItem", "IfcGeometricRepresentationSubContext", "IfcGeometricSet", "IfcGeometricSetSelect", "IfcGlobalOrLocalEnum", "IfcGloballyUniqueId", "IfcGrid", "IfcGridAxis", "IfcGridPlacement", "IfcGridPlacementDirectionSelect", "IfcGridTypeEnum", "IfcGroup", "IfcHalfSpaceSolid", "IfcHatchLineDistanceSelect", "IfcHeatExchanger", "IfcHeatExchangerType", "IfcHeatExchangerTypeEnum", "IfcHeatFluxDensityMeasure", "IfcHeatingValueMeasure", "IfcHumidifier", "IfcHumidifierType", "IfcHumidifierTypeEnum", "IfcIShapeProfileDef", "IfcIdentifier", "IfcIlluminanceMeasure", "IfcImageTexture", "IfcIndexedColourMap", "IfcIndexedPolyCurve", "IfcIndexedPolygonalFace", "IfcIndexedPolygonalFaceWithVoids", "IfcIndexedTextureMap", "IfcIndexedTriangleTextureMap", "IfcInductanceMeasure", "IfcInteger", "IfcIntegerCountRateMeasure", "IfcInterceptor", "IfcInterceptorType", "IfcInterceptorTypeEnum", "IfcInternalOrExternalEnum", "IfcIntersectionCurve", "IfcInventory", "IfcInventoryTypeEnum", "IfcIonConcentrationMeasure", "IfcIrregularTimeSeries", "IfcIrregularTimeSeriesValue", "IfcIsothermalMoistureCapacityMeasure", "IfcJunctionBox", "IfcJunctionBoxType", "IfcJunctionBoxTypeEnum", "IfcKinematicViscosityMeasure", "IfcKnotType", "IfcLShapeProfileDef", "IfcLabel", "IfcLaborResource", "IfcLaborResourceType", "IfcLaborResourceTypeEnum", "IfcLagTime", "IfcLamp", "IfcLampType", "IfcLampTypeEnum", "IfcLanguageId", "IfcLayerSetDirectionEnum", "IfcLayeredItem", "IfcLengthMeasure", "IfcLibraryInformation", "IfcLibraryReference", "IfcLibrarySelect", "IfcLightDistributionCurveEnum", "IfcLightDistributionData", "IfcLightDistributionDataSourceSelect", "IfcLightEmissionSourceEnum", "IfcLightFixture", "IfcLightFixtureType", "IfcLightFixtureTypeEnum", "IfcLightIntensityDistribution", "IfcLightSource", "IfcLightSourceAmbient", "IfcLightSourceDirectional", "IfcLightSourceGoniometric", "IfcLightSourcePositional", "IfcLightSourceSpot", "IfcLine", "IfcLineIndex", "IfcLinearForceMeasure", "IfcLinearMomentMeasure", "IfcLinearStiffnessMeasure", "IfcLinearVelocityMeasure", "IfcLoadGroupTypeEnum", "IfcLocalPlacement", "IfcLogical", "IfcLogicalOperatorEnum", "IfcLoop", "IfcLuminousFluxMeasure", "IfcLuminousIntensityDistributionMeasure", "IfcLuminousIntensityMeasure", "IfcMagneticFluxDensityMeasure", "IfcMagneticFluxMeasure", "IfcManifoldSolidBrep", "IfcMapConversion", "IfcMappedItem", "IfcMassDensityMeasure", "IfcMassFlowRateMeasure", "IfcMassMeasure", "IfcMassPerLengthMeasure", "IfcMaterial", "IfcMaterialClassificationRelationship", "IfcMaterialConstituent", "IfcMaterialConstituentSet", "IfcMaterialDefinition", "IfcMaterialDefinitionRepresentation", "IfcMaterialLayer", "IfcMaterialLayerSet", "IfcMaterialLayerSetUsage", "IfcMaterialLayerWithOffsets", "IfcMaterialList", "IfcMaterialProfile", "IfcMaterialProfileSet", "IfcMaterialProfileSetUsage", "IfcMaterialProfileSetUsageTapering", "IfcMaterialProfileWithOffsets", "IfcMaterialProperties", "IfcMaterialRelationship", "IfcMaterialSelect", "IfcMaterialUsageDefinition", "IfcMeasureValue", "IfcMeasureWithUnit", "IfcMechanicalFastener", "IfcMechanicalFastenerType", "IfcMechanicalFastenerTypeEnum", "IfcMedicalDevice", "IfcMedicalDeviceType", "IfcMedicalDeviceTypeEnum", "IfcMember", "IfcMemberStandardCase", "IfcMemberType", "IfcMemberTypeEnum", "IfcMetric", "IfcMetricValueSelect", "IfcMirroredProfileDef", "IfcModulusOfElasticityMeasure", "IfcModulusOfLinearSubgradeReactionMeasure", "IfcModulusOfRotationalSubgradeReactionMeasure", "IfcModulusOfRotationalSubgradeReactionSelect", "IfcModulusOfSubgradeReactionMeasure", "IfcModulusOfSubgradeReactionSelect", "IfcModulusOfTranslationalSubgradeReactionSelect", "IfcMoistureDiffusivityMeasure", "IfcMolecularWeightMeasure", "IfcMomentOfInertiaMeasure", "IfcMonetaryMeasure", "IfcMonetaryUnit", "IfcMonthInYearNumber", "IfcMotorConnection", "IfcMotorConnectionType", "IfcMotorConnectionTypeEnum", "IfcNamedUnit", "IfcNonNegativeLengthMeasure", "IfcNormalisedRatioMeasure", "IfcNullStyle", "IfcNumericMeasure", "IfcObject", "IfcObjectDefinition", "IfcObjectPlacement", "IfcObjectReferenceSelect", "IfcObjectTypeEnum", "IfcObjective", "IfcObjectiveEnum", "IfcOccupant", "IfcOccupantTypeEnum", "IfcOffsetCurve2D", "IfcOffsetCurve3D", "IfcOpenShell", "IfcOpeningElement", "IfcOpeningElementTypeEnum", "IfcOpeningStandardCase", "IfcOrganization", "IfcOrganizationRelationship", "IfcOrientedEdge", "IfcOuterBoundaryCurve", "IfcOutlet", "IfcOutletType", "IfcOutletTypeEnum", "IfcOwnerHistory", "IfcPHMeasure", "IfcParameterValue", "IfcParameterizedProfileDef", "IfcPath", "IfcPcurve", "IfcPerformanceHistory", "IfcPerformanceHistoryTypeEnum", "IfcPermeableCoveringOperationEnum", "IfcPermeableCoveringProperties", "IfcPermit", "IfcPermitTypeEnum", "IfcPerson", "IfcPersonAndOrganization", "IfcPhysicalComplexQuantity", "IfcPhysicalOrVirtualEnum", "IfcPhysicalQuantity", "IfcPhysicalSimpleQuantity", "IfcPile", "IfcPileConstructionEnum", "IfcPileType", "IfcPileTypeEnum", "IfcPipeFitting", "IfcPipeFittingType", "IfcPipeFittingTypeEnum", "IfcPipeSegment", "IfcPipeSegmentType", "IfcPipeSegmentTypeEnum", "IfcPixelTexture", "IfcPlacement", "IfcPlanarBox", "IfcPlanarExtent", "IfcPlanarForceMeasure", "IfcPlane", "IfcPlaneAngleMeasure", "IfcPlate", "IfcPlateStandardCase", "IfcPlateType", "IfcPlateTypeEnum", "IfcPoint", "IfcPointOnCurve", "IfcPointOnSurface", "IfcPointOrVertexPoint", "IfcPolyLoop", "IfcPolygonalBoundedHalfSpace", "IfcPolygonalFaceSet", "IfcPolyline", "IfcPort", "IfcPositiveInteger", "IfcPositiveLengthMeasure", "IfcPositivePlaneAngleMeasure", "IfcPositiveRatioMeasure", "IfcPostalAddress", "IfcPowerMeasure", "IfcPreDefinedColour", "IfcPreDefinedCurveFont", "IfcPreDefinedItem", "IfcPreDefinedProperties", "IfcPreDefinedPropertySet", "IfcPreDefinedTextFont", "IfcPreferredSurfaceCurveRepresentation", "IfcPresentableText", "IfcPresentationItem", "IfcPresentationLayerAssignment", "IfcPresentationLayerWithStyle", "IfcPresentationStyle", "IfcPresentationStyleAssignment", "IfcPresentationStyleSelect", "IfcPressureMeasure", "IfcProcedure", "IfcProcedureType", "IfcProcedureTypeEnum", "IfcProcess", "IfcProcessSelect", "IfcProduct", "IfcProductDefinitionShape", "IfcProductRepresentation", "IfcProductRepresentationSelect", "IfcProductSelect", "IfcProfileDef", "IfcProfileProperties", "IfcProfileTypeEnum", "IfcProject", "IfcProjectLibrary", "IfcProjectOrder", "IfcProjectOrderTypeEnum", "IfcProjectedCRS", "IfcProjectedOrTrueLengthEnum", "IfcProjectionElement", "IfcProjectionElementTypeEnum", "IfcProperty", "IfcPropertyAbstraction", "IfcPropertyBoundedValue", "IfcPropertyDefinition", "IfcPropertyDependencyRelationship", "IfcPropertyEnumeratedValue", "IfcPropertyEnumeration", "IfcPropertyListValue", "IfcPropertyReferenceValue", "IfcPropertySet", "IfcPropertySetDefinition", "IfcPropertySetDefinitionSelect", "IfcPropertySetDefinitionSet", "IfcPropertySetTemplate", "IfcPropertySetTemplateTypeEnum", "IfcPropertySingleValue", "IfcPropertyTableValue", "IfcPropertyTemplate", "IfcPropertyTemplateDefinition", "IfcProtectiveDevice", "IfcProtectiveDeviceTrippingUnit", "IfcProtectiveDeviceTrippingUnitType", "IfcProtectiveDeviceTrippingUnitTypeEnum", "IfcProtectiveDeviceType", "IfcProtectiveDeviceTypeEnum", "IfcProxy", "IfcPump", "IfcPumpType", "IfcPumpTypeEnum", "IfcQuantityArea", "IfcQuantityCount", "IfcQuantityLength", "IfcQuantitySet", "IfcQuantityTime", "IfcQuantityVolume", "IfcQuantityWeight", "IfcRadioActivityMeasure", "IfcRailing", "IfcRailingType", "IfcRailingTypeEnum", "IfcRamp", "IfcRampFlight", "IfcRampFlightType", "IfcRampFlightTypeEnum", "IfcRampType", "IfcRampTypeEnum", "IfcRatioMeasure", "IfcRationalBSplineCurveWithKnots", "IfcRationalBSplineSurfaceWithKnots", "IfcReal", "IfcRectangleHollowProfileDef", "IfcRectangleProfileDef", "IfcRectangularPyramid", "IfcRectangularTrimmedSurface", "IfcRecurrencePattern", "IfcRecurrenceTypeEnum", "IfcReference", "IfcReflectanceMethodEnum", "IfcRegularTimeSeries", "IfcReinforcementBarProperties", "IfcReinforcementDefinitionProperties", "IfcReinforcingBar", "IfcReinforcingBarRoleEnum", "IfcReinforcingBarSurfaceEnum", "IfcReinforcingBarType", "IfcReinforcingBarTypeEnum", "IfcReinforcingElement", "IfcReinforcingElementType", "IfcReinforcingMesh", "IfcReinforcingMeshType", "IfcReinforcingMeshTypeEnum", "IfcRelAggregates", "IfcRelAssigns", "IfcRelAssignsToActor", "IfcRelAssignsToControl", "IfcRelAssignsToGroup", "IfcRelAssignsToGroupByFactor", "IfcRelAssignsToProcess", "IfcRelAssignsToProduct", "IfcRelAssignsToResource", "IfcRelAssociates", "IfcRelAssociatesApproval", "IfcRelAssociatesClassification", "IfcRelAssociatesConstraint", "IfcRelAssociatesDocument", "IfcRelAssociatesLibrary", "IfcRelAssociatesMaterial", "IfcRelConnects", "IfcRelConnectsElements", "IfcRelConnectsPathElements", "IfcRelConnectsPortToElement", "IfcRelConnectsPorts", "IfcRelConnectsStructuralActivity", "IfcRelConnectsStructuralMember", "IfcRelConnectsWithEccentricity", "IfcRelConnectsWithRealizingElements", "IfcRelContainedInSpatialStructure", "IfcRelCoversBldgElements", "IfcRelCoversSpaces", "IfcRelDeclares", "IfcRelDecomposes", "IfcRelDefines", "IfcRelDefinesByObject", "IfcRelDefinesByProperties", "IfcRelDefinesByTemplate", "IfcRelDefinesByType", "IfcRelFillsElement", "IfcRelFlowControlElements", "IfcRelInterferesElements", "IfcRelNests", "IfcRelProjectsElement", "IfcRelReferencedInSpatialStructure", "IfcRelSequence", "IfcRelServicesBuildings", "IfcRelSpaceBoundary", "IfcRelSpaceBoundary1stLevel", "IfcRelSpaceBoundary2ndLevel", "IfcRelVoidsElement", "IfcRelationship", "IfcReparametrisedCompositeCurveSegment", "IfcRepresentation", "IfcRepresentationContext", "IfcRepresentationItem", "IfcRepresentationMap", "IfcResource", "IfcResourceApprovalRelationship", "IfcResourceConstraintRelationship", "IfcResourceLevelRelationship", "IfcResourceObjectSelect", "IfcResourceSelect", "IfcResourceTime", "IfcRevolvedAreaSolid", "IfcRevolvedAreaSolidTapered", "IfcRightCircularCone", "IfcRightCircularCylinder", "IfcRoleEnum", "IfcRoof", "IfcRoofType", "IfcRoofTypeEnum", "IfcRoot", "IfcRotationalFrequencyMeasure", "IfcRotationalMassMeasure", "IfcRotationalStiffnessMeasure", "IfcRotationalStiffnessSelect", "IfcRoundedRectangleProfileDef", "IfcSIPrefix", "IfcSIUnit", "IfcSIUnitName", "IfcSanitaryTerminal", "IfcSanitaryTerminalType", "IfcSanitaryTerminalTypeEnum", "IfcSchedulingTime", "IfcSeamCurve", "IfcSectionModulusMeasure", "IfcSectionProperties", "IfcSectionReinforcementProperties", "IfcSectionTypeEnum", "IfcSectionalAreaIntegralMeasure", "IfcSectionedSpine", "IfcSegmentIndexSelect", "IfcSensor", "IfcSensorType", "IfcSensorTypeEnum", "IfcSequenceEnum", "IfcShadingDevice", "IfcShadingDeviceType", "IfcShadingDeviceTypeEnum", "IfcShapeAspect", "IfcShapeModel", "IfcShapeRepresentation", "IfcShearModulusMeasure", "IfcShell", "IfcShellBasedSurfaceModel", "IfcSimpleProperty", "IfcSimplePropertyTemplate", "IfcSimplePropertyTemplateTypeEnum", "IfcSimpleValue", "IfcSite", "IfcSizeSelect", "IfcSlab", "IfcSlabElementedCase", "IfcSlabStandardCase", "IfcSlabType", "IfcSlabTypeEnum", "IfcSlippageConnectionCondition", "IfcSolarDevice", "IfcSolarDeviceType", "IfcSolarDeviceTypeEnum", "IfcSolidAngleMeasure", "IfcSolidModel", "IfcSolidOrShell", "IfcSoundPowerLevelMeasure", "IfcSoundPowerMeasure", "IfcSoundPressureLevelMeasure", "IfcSoundPressureMeasure", "IfcSpace", "IfcSpaceBoundarySelect", "IfcSpaceHeater", "IfcSpaceHeaterType", "IfcSpaceHeaterTypeEnum", "IfcSpaceType", "IfcSpaceTypeEnum", "IfcSpatialElement", "IfcSpatialElementType", "IfcSpatialStructureElement", "IfcSpatialStructureElementType", "IfcSpatialZone", "IfcSpatialZoneType", "IfcSpatialZoneTypeEnum", "IfcSpecificHeatCapacityMeasure", "IfcSpecularExponent", "IfcSpecularHighlightSelect", "IfcSpecularRoughness", "IfcSphere", "IfcSphericalSurface", "IfcStackTerminal", "IfcStackTerminalType", "IfcStackTerminalTypeEnum", "IfcStair", "IfcStairFlight", "IfcStairFlightType", "IfcStairFlightTypeEnum", "IfcStairType", "IfcStairTypeEnum", "IfcStateEnum", "IfcStructuralAction", "IfcStructuralActivity", "IfcStructuralActivityAssignmentSelect", "IfcStructuralAnalysisModel", "IfcStructuralConnection", "IfcStructuralConnectionCondition", "IfcStructuralCurveAction", "IfcStructuralCurveActivityTypeEnum", "IfcStructuralCurveConnection", "IfcStructuralCurveMember", "IfcStructuralCurveMemberTypeEnum", "IfcStructuralCurveMemberVarying", "IfcStructuralCurveReaction", "IfcStructuralItem", "IfcStructuralLinearAction", "IfcStructuralLoad", "IfcStructuralLoadCase", "IfcStructuralLoadConfiguration", "IfcStructuralLoadGroup", "IfcStructuralLoadLinearForce", "IfcStructuralLoadOrResult", "IfcStructuralLoadPlanarForce", "IfcStructuralLoadSingleDisplacement", "IfcStructuralLoadSingleDisplacementDistortion", "IfcStructuralLoadSingleForce", "IfcStructuralLoadSingleForceWarping", "IfcStructuralLoadStatic", "IfcStructuralLoadTemperature", "IfcStructuralMember", "IfcStructuralPlanarAction", "IfcStructuralPointAction", "IfcStructuralPointConnection", "IfcStructuralPointReaction", "IfcStructuralReaction", "IfcStructuralResultGroup", "IfcStructuralSurfaceAction", "IfcStructuralSurfaceActivityTypeEnum", "IfcStructuralSurfaceConnection", "IfcStructuralSurfaceMember", "IfcStructuralSurfaceMemberTypeEnum", "IfcStructuralSurfaceMemberVarying", "IfcStructuralSurfaceReaction", "IfcStyleAssignmentSelect", "IfcStyleModel", "IfcStyledItem", "IfcStyledRepresentation", "IfcSubContractResource", "IfcSubContractResourceType", "IfcSubContractResourceTypeEnum", "IfcSubedge", "IfcSurface", "IfcSurfaceCurve", "IfcSurfaceCurveSweptAreaSolid", "IfcSurfaceFeature", "IfcSurfaceFeatureTypeEnum", "IfcSurfaceOfLinearExtrusion", "IfcSurfaceOfRevolution", "IfcSurfaceOrFaceSurface", "IfcSurfaceReinforcementArea", "IfcSurfaceSide", "IfcSurfaceStyle", "IfcSurfaceStyleElementSelect", "IfcSurfaceStyleLighting", "IfcSurfaceStyleRefraction", "IfcSurfaceStyleRendering", "IfcSurfaceStyleShading", "IfcSurfaceStyleWithTextures", "IfcSurfaceTexture", "IfcSweptAreaSolid", "IfcSweptDiskSolid", "IfcSweptDiskSolidPolygonal", "IfcSweptSurface", "IfcSwitchingDevice", "IfcSwitchingDeviceType", "IfcSwitchingDeviceTypeEnum", "IfcSystem", "IfcSystemFurnitureElement", "IfcSystemFurnitureElementType", "IfcSystemFurnitureElementTypeEnum", "IfcTShapeProfileDef", "IfcTable", "IfcTableColumn", "IfcTableRow", "IfcTank", "IfcTankType", "IfcTankTypeEnum", "IfcTask", "IfcTaskDurationEnum", "IfcTaskTime", "IfcTaskTimeRecurring", "IfcTaskType", "IfcTaskTypeEnum", "IfcTelecomAddress", "IfcTemperatureGradientMeasure", "IfcTemperatureRateOfChangeMeasure", "IfcTendon", "IfcTendonAnchor", "IfcTendonAnchorType", "IfcTendonAnchorTypeEnum", "IfcTendonType", "IfcTendonTypeEnum", "IfcTessellatedFaceSet", "IfcTessellatedItem", "IfcText", "IfcTextAlignment", "IfcTextDecoration", "IfcTextFontName", "IfcTextFontSelect", "IfcTextLiteral", "IfcTextLiteralWithExtent", "IfcTextPath", "IfcTextStyle", "IfcTextStyleFontModel", "IfcTextStyleForDefinedFont", "IfcTextStyleTextModel", "IfcTextTransformation", "IfcTextureCoordinate", "IfcTextureCoordinateGenerator", "IfcTextureMap", "IfcTextureVertex", "IfcTextureVertexList", "IfcThermalAdmittanceMeasure", "IfcThermalConductivityMeasure", "IfcThermalExpansionCoefficientMeasure", "IfcThermalResistanceMeasure", "IfcThermalTransmittanceMeasure", "IfcThermodynamicTemperatureMeasure", "IfcTime", "IfcTimeMeasure", "IfcTimeOrRatioSelect", "IfcTimePeriod", "IfcTimeSeries", "IfcTimeSeriesDataTypeEnum", "IfcTimeSeriesValue", "IfcTimeStamp", "IfcTopologicalRepresentationItem", "IfcTopologyRepresentation", "IfcToroidalSurface", "IfcTorqueMeasure", "IfcTransformer", "IfcTransformerType", "IfcTransformerTypeEnum", "IfcTransitionCode", "IfcTranslationalStiffnessSelect", "IfcTransportElement", "IfcTransportElementType", "IfcTransportElementTypeEnum", "IfcTrapeziumProfileDef", "IfcTriangulatedFaceSet", "IfcTrimmedCurve", "IfcTrimmingPreference", "IfcTrimmingSelect", "IfcTubeBundle", "IfcTubeBundleType", "IfcTubeBundleTypeEnum", "IfcTypeObject", "IfcTypeProcess", "IfcTypeProduct", "IfcTypeResource", "IfcURIReference", "IfcUShapeProfileDef", "IfcUnit", "IfcUnitAssignment", "IfcUnitEnum", "IfcUnitaryControlElement", "IfcUnitaryControlElementType", "IfcUnitaryControlElementTypeEnum", "IfcUnitaryEquipment", "IfcUnitaryEquipmentType", "IfcUnitaryEquipmentTypeEnum", "IfcValue", "IfcValve", "IfcValveType", "IfcValveTypeEnum", "IfcVaporPermeabilityMeasure", "IfcVector", "IfcVectorOrDirection", "IfcVertex", "IfcVertexLoop", "IfcVertexPoint", "IfcVibrationIsolator", "IfcVibrationIsolatorType", "IfcVibrationIsolatorTypeEnum", "IfcVirtualElement", "IfcVirtualGridIntersection", "IfcVoidingFeature", "IfcVoidingFeatureTypeEnum", "IfcVolumeMeasure", "IfcVolumetricFlowRateMeasure", "IfcWall", "IfcWallElementedCase", "IfcWallStandardCase", "IfcWallType", "IfcWallTypeEnum", "IfcWarpingConstantMeasure", "IfcWarpingMomentMeasure", "IfcWarpingStiffnessSelect", "IfcWasteTerminal", "IfcWasteTerminalType", "IfcWasteTerminalTypeEnum", "IfcWindow", "IfcWindowLiningProperties", "IfcWindowPanelOperationEnum", "IfcWindowPanelPositionEnum", "IfcWindowPanelProperties", "IfcWindowStandardCase", "IfcWindowStyle", "IfcWindowStyleConstructionEnum", "IfcWindowStyleOperationEnum", "IfcWindowType", "IfcWindowTypeEnum", "IfcWindowTypePartitioningEnum", "IfcWorkCalendar", "IfcWorkCalendarTypeEnum", "IfcWorkControl", "IfcWorkPlan", "IfcWorkPlanTypeEnum", "IfcWorkSchedule", "IfcWorkScheduleTypeEnum", "IfcWorkTime", "IfcZShapeProfileDef", "IfcZone" }; return names[v]; } @@ -1431,6 +1438,8 @@ void Ifc4::InitStringMap() { string_map["IFCIMAGETEXTURE" ] = Type::IfcImageTexture; string_map["IFCINDEXEDCOLOURMAP" ] = Type::IfcIndexedColourMap; string_map["IFCINDEXEDPOLYCURVE" ] = Type::IfcIndexedPolyCurve; + string_map["IFCINDEXEDPOLYGONALFACE" ] = Type::IfcIndexedPolygonalFace; + string_map["IFCINDEXEDPOLYGONALFACEWITHVOIDS" ] = Type::IfcIndexedPolygonalFaceWithVoids; string_map["IFCINDEXEDTEXTUREMAP" ] = Type::IfcIndexedTextureMap; string_map["IFCINDEXEDTRIANGLETEXTUREMAP" ] = Type::IfcIndexedTriangleTextureMap; string_map["IFCINDUCTANCEMEASURE" ] = Type::IfcInductanceMeasure; @@ -1440,6 +1449,7 @@ void Ifc4::InitStringMap() { string_map["IFCINTERCEPTORTYPE" ] = Type::IfcInterceptorType; string_map["IFCINTERCEPTORTYPEENUM" ] = Type::IfcInterceptorTypeEnum; string_map["IFCINTERNALOREXTERNALENUM" ] = Type::IfcInternalOrExternalEnum; + string_map["IFCINTERSECTIONCURVE" ] = Type::IfcIntersectionCurve; string_map["IFCINVENTORY" ] = Type::IfcInventory; string_map["IFCINVENTORYTYPEENUM" ] = Type::IfcInventoryTypeEnum; string_map["IFCIONCONCENTRATIONMEASURE" ] = Type::IfcIonConcentrationMeasure; @@ -1627,6 +1637,7 @@ void Ifc4::InitStringMap() { string_map["IFCPOINTORVERTEXPOINT" ] = Type::IfcPointOrVertexPoint; string_map["IFCPOLYLOOP" ] = Type::IfcPolyLoop; string_map["IFCPOLYGONALBOUNDEDHALFSPACE" ] = Type::IfcPolygonalBoundedHalfSpace; + string_map["IFCPOLYGONALFACESET" ] = Type::IfcPolygonalFaceSet; string_map["IFCPOLYLINE" ] = Type::IfcPolyline; string_map["IFCPORT" ] = Type::IfcPort; string_map["IFCPOSITIVEINTEGER" ] = Type::IfcPositiveInteger; @@ -1641,6 +1652,7 @@ void Ifc4::InitStringMap() { string_map["IFCPREDEFINEDPROPERTIES" ] = Type::IfcPreDefinedProperties; string_map["IFCPREDEFINEDPROPERTYSET" ] = Type::IfcPreDefinedPropertySet; string_map["IFCPREDEFINEDTEXTFONT" ] = Type::IfcPreDefinedTextFont; + string_map["IFCPREFERREDSURFACECURVEREPRESENTATION" ] = Type::IfcPreferredSurfaceCurveRepresentation; string_map["IFCPRESENTABLETEXT" ] = Type::IfcPresentableText; string_map["IFCPRESENTATIONITEM" ] = Type::IfcPresentationItem; string_map["IFCPRESENTATIONLAYERASSIGNMENT" ] = Type::IfcPresentationLayerAssignment; @@ -1822,6 +1834,7 @@ void Ifc4::InitStringMap() { string_map["IFCSANITARYTERMINALTYPE" ] = Type::IfcSanitaryTerminalType; string_map["IFCSANITARYTERMINALTYPEENUM" ] = Type::IfcSanitaryTerminalTypeEnum; string_map["IFCSCHEDULINGTIME" ] = Type::IfcSchedulingTime; + string_map["IFCSEAMCURVE" ] = Type::IfcSeamCurve; string_map["IFCSECTIONMODULUSMEASURE" ] = Type::IfcSectionModulusMeasure; string_map["IFCSECTIONPROPERTIES" ] = Type::IfcSectionProperties; string_map["IFCSECTIONREINFORCEMENTPROPERTIES" ] = Type::IfcSectionReinforcementProperties; @@ -1883,6 +1896,7 @@ void Ifc4::InitStringMap() { string_map["IFCSPECULARHIGHLIGHTSELECT" ] = Type::IfcSpecularHighlightSelect; string_map["IFCSPECULARROUGHNESS" ] = Type::IfcSpecularRoughness; string_map["IFCSPHERE" ] = Type::IfcSphere; + string_map["IFCSPHERICALSURFACE" ] = Type::IfcSphericalSurface; string_map["IFCSTACKTERMINAL" ] = Type::IfcStackTerminal; string_map["IFCSTACKTERMINALTYPE" ] = Type::IfcStackTerminalType; string_map["IFCSTACKTERMINALTYPEENUM" ] = Type::IfcStackTerminalTypeEnum; @@ -1893,7 +1907,6 @@ void Ifc4::InitStringMap() { string_map["IFCSTAIRTYPE" ] = Type::IfcStairType; string_map["IFCSTAIRTYPEENUM" ] = Type::IfcStairTypeEnum; string_map["IFCSTATEENUM" ] = Type::IfcStateEnum; - string_map["IFCSTRIPPEDOPTIONAL" ] = Type::IfcStrippedOptional; string_map["IFCSTRUCTURALACTION" ] = Type::IfcStructuralAction; string_map["IFCSTRUCTURALACTIVITY" ] = Type::IfcStructuralActivity; string_map["IFCSTRUCTURALACTIVITYASSIGNMENTSELECT" ] = Type::IfcStructuralActivityAssignmentSelect; @@ -1945,6 +1958,7 @@ void Ifc4::InitStringMap() { string_map["IFCSUBCONTRACTRESOURCETYPEENUM" ] = Type::IfcSubContractResourceTypeEnum; string_map["IFCSUBEDGE" ] = Type::IfcSubedge; string_map["IFCSURFACE" ] = Type::IfcSurface; + string_map["IFCSURFACECURVE" ] = Type::IfcSurfaceCurve; string_map["IFCSURFACECURVESWEPTAREASOLID" ] = Type::IfcSurfaceCurveSweptAreaSolid; string_map["IFCSURFACEFEATURE" ] = Type::IfcSurfaceFeature; string_map["IFCSURFACEFEATURETYPEENUM" ] = Type::IfcSurfaceFeatureTypeEnum; @@ -2030,6 +2044,7 @@ void Ifc4::InitStringMap() { string_map["IFCTIMESTAMP" ] = Type::IfcTimeStamp; string_map["IFCTOPOLOGICALREPRESENTATIONITEM" ] = Type::IfcTopologicalRepresentationItem; string_map["IFCTOPOLOGYREPRESENTATION" ] = Type::IfcTopologyRepresentation; + string_map["IFCTOROIDALSURFACE" ] = Type::IfcToroidalSurface; string_map["IFCTORQUEMEASURE" ] = Type::IfcTorqueMeasure; string_map["IFCTRANSFORMER" ] = Type::IfcTransformer; string_map["IFCTRANSFORMERTYPE" ] = Type::IfcTransformerType; @@ -2123,7 +2138,7 @@ Type::Enum Type::FromString(const std::string& s) { else return it->second; } -static int parent_map[] = {-1,-1,202,-1,-1,-1,611,-1,-1,276,277,-1,-1,-1,548,14,390,431,414,415,-1,432,-1,357,358,-1,276,277,-1,-1,-1,-1,-1,705,454,-1,-1,-1,-1,848,710,710,40,-1,-1,-1,-1,-1,465,636,431,432,-1,662,-1,662,662,86,-1,57,87,-1,60,92,63,99,-1,-1,-1,-1,1011,229,357,358,-1,-1,79,-1,-1,454,-1,167,80,80,80,84,237,995,454,-1,466,924,345,349,350,-1,92,99,-1,353,924,1019,-1,357,358,-1,636,417,418,-1,427,428,-1,417,418,-1,427,428,-1,-1,672,454,121,121,454,124,125,124,127,41,-1,357,358,-1,92,99,-1,177,139,636,345,353,375,376,-1,-1,178,357,358,-1,-1,-1,154,693,693,92,155,99,-1,431,432,-1,-1,721,738,-1,86,166,454,710,-1,425,426,-1,357,358,-1,237,1079,180,-1,182,180,180,-1,180,-1,-1,197,198,-1,197,198,-1,197,198,-1,845,1101,612,-1,606,611,276,277,-1,606,206,357,358,-1,357,358,-1,-1,-1,-1,202,-1,202,-1,36,-1,92,99,-1,197,198,-1,454,-1,909,848,92,99,-1,-1,454,87,87,-1,-1,-1,-1,696,693,693,693,-1,354,414,415,-1,-1,-1,-1,-1,-1,-1,-1,710,-1,-1,-1,-1,-1,-1,454,-1,349,350,-1,280,281,-1,284,278,279,345,353,278,279,679,-1,1019,-1,-1,375,848,376,-1,-1,92,690,-1,-1,690,292,1100,-1,-1,99,-1,-1,-1,686,687,417,418,-1,427,428,-1,433,434,-1,-1,-1,1079,318,542,431,432,-1,-1,-1,-1,-1,414,415,-1,429,430,-1,357,358,-1,357,358,-1,-1,414,415,-1,-1,705,345,353,-1,345,353,-1,753,1100,995,177,636,280,281,-1,357,358,-1,357,358,-1,357,358,-1,703,872,-1,1099,-1,722,-1,-1,848,380,-1,922,376,376,376,1012,384,1079,454,1079,388,386,548,391,950,425,426,-1,349,350,-1,345,400,400,696,454,454,-1,433,434,-1,431,432,-1,1012,280,281,-1,280,281,276,277,-1,414,415,-1,280,281,280,281,280,281,280,281,280,281,-1,-1,-1,92,99,-1,-1,-1,345,353,443,444,-1,345,353,-1,456,-1,842,843,453,454,-1,-1,-1,705,-1,613,-1,-1,611,454,-1,357,358,-1,-1,-1,357,358,-1,636,-1,-1,1011,693,86,1060,482,-1,-1,-1,433,434,-1,-1,465,-1,-1,1075,-1,-1,417,418,-1,-1,-1,636,-1,197,198,-1,872,431,432,-1,-1,-1,-1,-1,375,376,-1,-1,-1,-1,-1,431,432,-1,-1,454,526,526,526,526,530,237,-1,-1,-1,-1,-1,-1,613,-1,-1,1079,-1,-1,-1,-1,-1,909,214,843,-1,-1,-1,-1,559,-1,559,559,-1,707,559,559,574,561,-1,559,559,574,568,566,374,848,-1,-1,-1,-1,349,350,-1,431,432,-1,92,583,99,-1,186,-1,260,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,357,358,-1,-1,-1,-1,-1,-1,612,860,-1,-1,-1,186,-1,6,-1,237,237,178,402,-1,623,-1,848,318,81,431,432,-1,-1,-1,-1,710,1079,237,202,-1,-1,690,202,-1,-1,-1,649,-1,-1,649,92,-1,99,-1,417,418,-1,427,428,-1,1011,454,664,454,-1,354,-1,92,668,99,-1,454,672,672,-1,542,466,86,705,-1,-1,-1,-1,12,-1,688,688,693,722,731,688,-1,-1,-1,694,-1,-1,-1,-1,703,1099,-1,611,-1,611,707,-1,-1,-1,-1,374,-1,199,199,202,-1,215,-1,401,-1,722,-1,893,860,848,893,722,893,893,731,724,-1,-1,739,-1,893,893,739,724,414,276,277,-1,415,-1,705,425,426,-1,650,650,650,731,650,650,650,-1,92,99,-1,92,92,99,-1,99,-1,-1,59,62,-1,772,636,229,87,-1,-1,-1,-1,1075,689,690,787,-1,-1,788,-1,349,350,787,788,-1,821,839,793,793,793,796,793,793,793,839,801,801,801,801,801,801,839,808,809,808,808,808,808,814,809,808,808,808,839,839,839,822,822,822,822,808,808,808,821,821,808,808,808,808,835,836,821,860,168,-1,-1,-1,-1,611,848,848,-1,-1,-1,872,1012,852,229,229,-1,92,99,-1,-1,-1,-1,-1,-1,772,-1,606,-1,431,432,-1,-1,-1,689,689,-1,-1,454,-1,276,277,-1,-1,92,99,-1,-1,841,888,-1,-1,454,721,738,-1,-1,924,-1,92,899,899,99,-1,950,357,358,-1,-1,454,-1,-1,-1,-1,-1,924,-1,431,432,-1,925,-1,705,1100,922,923,922,923,-1,-1,-1,-1,-1,229,431,432,-1,92,92,99,-1,99,-1,-1,-1,946,705,-1,1019,958,-1,945,-1,949,973,-1,954,978,705,951,-1,963,960,465,971,960,971,971,967,971,969,965,971,958,980,945,949,978,946,465,945,-1,949,973,-1,983,978,-1,841,843,988,197,198,-1,318,454,1012,400,-1,1015,1015,-1,965,-1,696,-1,693,693,1009,693,693,693,909,909,1013,995,414,415,-1,465,443,444,-1,636,-1,-1,-1,429,430,-1,703,-1,872,1032,1099,-1,12,-1,-1,787,787,788,-1,788,-1,1046,454,-1,-1,-1,-1,-1,454,1052,-1,696,691,693,693,-1,693,1060,1060,693,693,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,843,888,-1,357,358,-1,-1,-1,345,353,-1,636,1045,86,-1,-1,357,358,-1,612,1098,1098,1098,-1,636,-1,-1,-1,276,277,-1,357,358,-1,-1,414,415,-1,-1,454,-1,1079,542,1120,349,350,-1,345,-1,402,-1,-1,-1,92,1132,1132,99,-1,-1,-1,-1,431,432,-1,92,690,-1,-1,690,1143,1100,-1,-1,99,-1,-1,202,-1,202,1157,-1,1157,-1,872,636,1019}; +static int parent_map[] = {-1,-1,202,-1,-1,-1,614,-1,-1,276,277,-1,-1,-1,551,14,390,431,414,415,-1,432,-1,357,358,-1,276,277,-1,-1,-1,-1,-1,710,454,-1,-1,-1,-1,853,715,715,40,-1,-1,-1,-1,-1,465,639,431,432,-1,665,-1,665,665,86,-1,57,87,-1,60,92,63,99,-1,-1,-1,-1,1018,229,357,358,-1,-1,79,-1,-1,454,-1,167,80,80,80,84,237,1001,454,-1,466,930,345,349,350,-1,92,99,-1,353,930,1026,-1,357,358,-1,639,417,418,-1,427,428,-1,417,418,-1,427,428,-1,-1,675,454,121,121,454,124,125,124,127,41,-1,357,358,-1,92,99,-1,177,139,639,345,353,375,376,-1,-1,178,357,358,-1,-1,-1,154,698,698,92,155,99,-1,431,432,-1,-1,726,743,-1,86,166,454,715,-1,425,426,-1,357,358,-1,237,1086,180,-1,182,180,180,-1,180,-1,-1,197,198,-1,197,198,-1,197,198,-1,850,1109,615,-1,609,614,276,277,-1,609,206,357,358,-1,357,358,-1,-1,-1,-1,202,-1,202,-1,36,-1,92,99,-1,197,198,-1,454,-1,915,853,92,99,-1,-1,454,87,87,-1,-1,-1,-1,701,698,698,698,-1,354,414,415,-1,-1,-1,-1,-1,-1,-1,-1,715,-1,-1,-1,-1,-1,-1,454,-1,349,350,-1,280,281,-1,284,278,279,345,353,278,279,683,-1,1026,-1,-1,375,853,376,-1,-1,92,694,-1,-1,694,292,1108,-1,-1,99,-1,-1,-1,690,691,417,418,-1,427,428,-1,433,434,-1,-1,-1,1086,318,545,431,432,-1,-1,-1,-1,-1,414,415,-1,429,430,-1,357,358,-1,357,358,-1,-1,414,415,-1,-1,710,345,353,-1,345,353,-1,758,1108,1001,177,639,280,281,-1,357,358,-1,357,358,-1,357,358,-1,708,877,-1,1107,-1,727,-1,-1,853,380,-1,928,376,376,376,1019,384,1086,454,1086,388,386,551,391,956,425,426,-1,349,350,-1,345,400,400,701,454,454,-1,433,434,-1,431,432,-1,1019,280,281,-1,280,281,276,277,-1,414,415,-1,280,281,280,281,280,281,280,281,280,281,-1,-1,-1,92,99,-1,-1,-1,345,353,443,444,-1,345,353,-1,456,-1,847,848,453,454,-1,-1,-1,710,-1,616,-1,-1,614,454,-1,357,358,-1,-1,-1,357,358,-1,639,-1,-1,1018,698,86,1053,482,1067,484,-1,-1,-1,433,434,-1,-1,1002,465,-1,-1,1082,-1,-1,417,418,-1,-1,-1,639,-1,197,198,-1,877,431,432,-1,-1,-1,-1,-1,375,376,-1,-1,-1,-1,-1,431,432,-1,-1,454,529,529,529,529,533,237,-1,-1,-1,-1,-1,-1,616,-1,-1,1086,-1,-1,-1,-1,-1,915,214,848,-1,-1,-1,-1,562,-1,562,562,-1,712,562,562,577,564,-1,562,562,577,571,569,374,853,-1,-1,-1,-1,349,350,-1,431,432,-1,92,586,99,-1,186,-1,260,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,357,358,-1,-1,-1,-1,-1,-1,615,865,-1,-1,-1,186,-1,6,-1,237,237,178,402,-1,626,-1,853,318,81,431,432,-1,-1,-1,-1,715,1086,237,202,-1,-1,694,202,-1,-1,-1,652,-1,-1,652,92,-1,99,-1,417,418,-1,427,428,-1,1018,454,667,454,-1,354,-1,92,671,99,-1,454,675,675,-1,545,466,1052,86,710,-1,-1,-1,-1,12,-1,692,692,698,727,736,692,-1,-1,-1,-1,699,-1,-1,-1,-1,708,1107,-1,614,-1,614,712,-1,-1,-1,-1,374,-1,199,199,202,-1,215,-1,401,-1,727,-1,899,865,853,899,727,899,899,736,729,-1,-1,744,-1,899,899,744,729,414,276,277,-1,415,-1,710,425,426,-1,653,653,653,736,653,653,653,-1,92,99,-1,92,92,99,-1,99,-1,-1,59,62,-1,777,639,229,87,-1,-1,-1,-1,1082,693,694,792,-1,-1,793,-1,349,350,792,793,-1,826,844,798,798,798,801,798,798,798,844,806,806,806,806,806,806,844,813,814,813,813,813,813,819,814,813,813,813,844,844,844,827,827,827,827,813,813,813,826,826,813,813,813,813,840,841,826,865,168,-1,-1,-1,-1,614,853,853,-1,-1,-1,877,1019,857,229,229,-1,92,99,-1,-1,-1,-1,-1,-1,777,-1,609,-1,431,432,-1,-1,1002,-1,693,693,-1,-1,454,-1,276,277,-1,-1,92,99,-1,-1,846,894,-1,-1,454,726,743,-1,-1,930,-1,92,905,905,99,-1,956,357,358,-1,-1,454,-1,-1,-1,-1,-1,930,-1,431,432,-1,931,-1,710,1108,928,929,928,929,-1,-1,-1,-1,-1,229,354,431,432,-1,92,92,99,-1,99,-1,-1,952,710,-1,1026,964,-1,951,-1,955,979,-1,960,984,710,957,-1,969,966,465,977,966,977,977,973,977,975,971,977,964,986,951,955,984,952,465,951,-1,955,979,-1,989,984,-1,846,848,994,197,198,-1,318,454,237,1019,400,-1,1022,1022,-1,971,-1,701,-1,698,698,1016,698,698,698,915,915,1020,1001,414,415,-1,465,443,444,-1,639,-1,-1,-1,429,430,-1,708,-1,877,1039,1107,-1,12,-1,-1,792,792,793,-1,793,-1,1053,454,-1,-1,-1,-1,-1,454,1059,-1,701,695,698,698,-1,698,1067,1067,698,698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,848,894,354,-1,357,358,-1,-1,-1,345,353,-1,639,1052,86,-1,-1,357,358,-1,615,1106,1106,1106,-1,639,-1,-1,-1,276,277,-1,357,358,-1,-1,414,415,-1,-1,454,-1,1086,545,1128,349,350,-1,345,-1,402,-1,-1,-1,92,1140,1140,99,-1,-1,-1,-1,431,432,-1,92,694,-1,-1,694,1151,1108,-1,-1,99,-1,-1,202,-1,202,1165,-1,1165,-1,877,639,1026}; boost::optional Type::Parent(Enum v){ const int p = parent_map[static_cast(v)]; if (p >= 0) { @@ -2134,7 +2149,7 @@ boost::optional Type::Parent(Enum v){ } bool Type::IsSimple(Enum v) { - return v == Type::IfcAbsorbedDoseMeasure || v == Type::IfcAccelerationMeasure || v == Type::IfcAmountOfSubstanceMeasure || v == Type::IfcAngularVelocityMeasure || v == Type::IfcArcIndex || v == Type::IfcAreaDensityMeasure || v == Type::IfcAreaMeasure || v == Type::IfcBoolean || v == Type::IfcColour || v == Type::IfcComplexNumber || v == Type::IfcCompoundPlaneAngleMeasure || v == Type::IfcContextDependentMeasure || v == Type::IfcCountMeasure || v == Type::IfcCurvatureMeasure || v == Type::IfcCurveStyleFontSelect || v == Type::IfcDate || v == Type::IfcDateTime || v == Type::IfcDerivedMeasureValue || v == Type::IfcDescriptiveMeasure || v == Type::IfcDoseEquivalentMeasure || v == Type::IfcDuration || v == Type::IfcDynamicViscosityMeasure || v == Type::IfcElectricCapacitanceMeasure || v == Type::IfcElectricChargeMeasure || v == Type::IfcElectricConductanceMeasure || v == Type::IfcElectricCurrentMeasure || v == Type::IfcElectricResistanceMeasure || v == Type::IfcElectricVoltageMeasure || v == Type::IfcEnergyMeasure || v == Type::IfcForceMeasure || v == Type::IfcFrequencyMeasure || v == Type::IfcHeatFluxDensityMeasure || v == Type::IfcHeatingValueMeasure || v == Type::IfcIdentifier || v == Type::IfcIlluminanceMeasure || v == Type::IfcInductanceMeasure || v == Type::IfcInteger || v == Type::IfcIntegerCountRateMeasure || v == Type::IfcIonConcentrationMeasure || v == Type::IfcIsothermalMoistureCapacityMeasure || v == Type::IfcKinematicViscosityMeasure || v == Type::IfcLabel || v == Type::IfcLengthMeasure || v == Type::IfcLineIndex || v == Type::IfcLinearForceMeasure || v == Type::IfcLinearMomentMeasure || v == Type::IfcLinearStiffnessMeasure || v == Type::IfcLinearVelocityMeasure || v == Type::IfcLogical || v == Type::IfcLuminousFluxMeasure || v == Type::IfcLuminousIntensityDistributionMeasure || v == Type::IfcLuminousIntensityMeasure || v == Type::IfcMagneticFluxDensityMeasure || v == Type::IfcMagneticFluxMeasure || v == Type::IfcMassDensityMeasure || v == Type::IfcMassFlowRateMeasure || v == Type::IfcMassMeasure || v == Type::IfcMassPerLengthMeasure || v == Type::IfcMeasureValue || v == Type::IfcModulusOfElasticityMeasure || v == Type::IfcModulusOfLinearSubgradeReactionMeasure || v == Type::IfcModulusOfRotationalSubgradeReactionMeasure || v == Type::IfcModulusOfSubgradeReactionMeasure || v == Type::IfcMoistureDiffusivityMeasure || v == Type::IfcMolecularWeightMeasure || v == Type::IfcMomentOfInertiaMeasure || v == Type::IfcMonetaryMeasure || v == Type::IfcNonNegativeLengthMeasure || v == Type::IfcNormalisedRatioMeasure || v == Type::IfcNullStyle || v == Type::IfcNumericMeasure || v == Type::IfcPHMeasure || v == Type::IfcParameterValue || v == Type::IfcPlanarForceMeasure || v == Type::IfcPlaneAngleMeasure || v == Type::IfcPositiveInteger || v == Type::IfcPositiveLengthMeasure || v == Type::IfcPositivePlaneAngleMeasure || v == Type::IfcPositiveRatioMeasure || v == Type::IfcPowerMeasure || v == Type::IfcPressureMeasure || v == Type::IfcPropertySetDefinitionSet || v == Type::IfcRadioActivityMeasure || v == Type::IfcRatioMeasure || v == Type::IfcReal || v == Type::IfcRotationalFrequencyMeasure || v == Type::IfcRotationalMassMeasure || v == Type::IfcRotationalStiffnessMeasure || v == Type::IfcSectionModulusMeasure || v == Type::IfcSectionalAreaIntegralMeasure || v == Type::IfcShearModulusMeasure || v == Type::IfcSimpleValue || v == Type::IfcSolidAngleMeasure || v == Type::IfcSoundPowerLevelMeasure || v == Type::IfcSoundPowerMeasure || v == Type::IfcSoundPressureLevelMeasure || v == Type::IfcSoundPressureMeasure || v == Type::IfcSpecificHeatCapacityMeasure || v == Type::IfcSpecularExponent || v == Type::IfcSpecularRoughness || v == Type::IfcTemperatureGradientMeasure || v == Type::IfcTemperatureRateOfChangeMeasure || v == Type::IfcText || v == Type::IfcThermalAdmittanceMeasure || v == Type::IfcThermalConductivityMeasure || v == Type::IfcThermalExpansionCoefficientMeasure || v == Type::IfcThermalResistanceMeasure || v == Type::IfcThermalTransmittanceMeasure || v == Type::IfcThermodynamicTemperatureMeasure || v == Type::IfcTime || v == Type::IfcTimeMeasure || v == Type::IfcTimeStamp || v == Type::IfcTorqueMeasure || v == Type::IfcValue || v == Type::IfcVaporPermeabilityMeasure || v == Type::IfcVolumeMeasure || v == Type::IfcVolumetricFlowRateMeasure || v == Type::IfcWarpingConstantMeasure || v == Type::IfcWarpingMomentMeasure; + return v == Type::IfcAbsorbedDoseMeasure || v == Type::IfcAccelerationMeasure || v == Type::IfcAmountOfSubstanceMeasure || v == Type::IfcAngularVelocityMeasure || v == Type::IfcArcIndex || v == Type::IfcAreaDensityMeasure || v == Type::IfcAreaMeasure || v == Type::IfcBinary || v == Type::IfcBoolean || v == Type::IfcColour || v == Type::IfcComplexNumber || v == Type::IfcCompoundPlaneAngleMeasure || v == Type::IfcContextDependentMeasure || v == Type::IfcCountMeasure || v == Type::IfcCurvatureMeasure || v == Type::IfcCurveStyleFontSelect || v == Type::IfcDate || v == Type::IfcDateTime || v == Type::IfcDerivedMeasureValue || v == Type::IfcDescriptiveMeasure || v == Type::IfcDoseEquivalentMeasure || v == Type::IfcDuration || v == Type::IfcDynamicViscosityMeasure || v == Type::IfcElectricCapacitanceMeasure || v == Type::IfcElectricChargeMeasure || v == Type::IfcElectricConductanceMeasure || v == Type::IfcElectricCurrentMeasure || v == Type::IfcElectricResistanceMeasure || v == Type::IfcElectricVoltageMeasure || v == Type::IfcEnergyMeasure || v == Type::IfcForceMeasure || v == Type::IfcFrequencyMeasure || v == Type::IfcHeatFluxDensityMeasure || v == Type::IfcHeatingValueMeasure || v == Type::IfcIdentifier || v == Type::IfcIlluminanceMeasure || v == Type::IfcInductanceMeasure || v == Type::IfcInteger || v == Type::IfcIntegerCountRateMeasure || v == Type::IfcIonConcentrationMeasure || v == Type::IfcIsothermalMoistureCapacityMeasure || v == Type::IfcKinematicViscosityMeasure || v == Type::IfcLabel || v == Type::IfcLengthMeasure || v == Type::IfcLineIndex || v == Type::IfcLinearForceMeasure || v == Type::IfcLinearMomentMeasure || v == Type::IfcLinearStiffnessMeasure || v == Type::IfcLinearVelocityMeasure || v == Type::IfcLogical || v == Type::IfcLuminousFluxMeasure || v == Type::IfcLuminousIntensityDistributionMeasure || v == Type::IfcLuminousIntensityMeasure || v == Type::IfcMagneticFluxDensityMeasure || v == Type::IfcMagneticFluxMeasure || v == Type::IfcMassDensityMeasure || v == Type::IfcMassFlowRateMeasure || v == Type::IfcMassMeasure || v == Type::IfcMassPerLengthMeasure || v == Type::IfcMeasureValue || v == Type::IfcModulusOfElasticityMeasure || v == Type::IfcModulusOfLinearSubgradeReactionMeasure || v == Type::IfcModulusOfRotationalSubgradeReactionMeasure || v == Type::IfcModulusOfSubgradeReactionMeasure || v == Type::IfcMoistureDiffusivityMeasure || v == Type::IfcMolecularWeightMeasure || v == Type::IfcMomentOfInertiaMeasure || v == Type::IfcMonetaryMeasure || v == Type::IfcNonNegativeLengthMeasure || v == Type::IfcNormalisedRatioMeasure || v == Type::IfcNullStyle || v == Type::IfcNumericMeasure || v == Type::IfcPHMeasure || v == Type::IfcParameterValue || v == Type::IfcPlanarForceMeasure || v == Type::IfcPlaneAngleMeasure || v == Type::IfcPositiveInteger || v == Type::IfcPositiveLengthMeasure || v == Type::IfcPositivePlaneAngleMeasure || v == Type::IfcPositiveRatioMeasure || v == Type::IfcPowerMeasure || v == Type::IfcPressureMeasure || v == Type::IfcPropertySetDefinitionSet || v == Type::IfcRadioActivityMeasure || v == Type::IfcRatioMeasure || v == Type::IfcReal || v == Type::IfcRotationalFrequencyMeasure || v == Type::IfcRotationalMassMeasure || v == Type::IfcRotationalStiffnessMeasure || v == Type::IfcSectionModulusMeasure || v == Type::IfcSectionalAreaIntegralMeasure || v == Type::IfcShearModulusMeasure || v == Type::IfcSimpleValue || v == Type::IfcSolidAngleMeasure || v == Type::IfcSoundPowerLevelMeasure || v == Type::IfcSoundPowerMeasure || v == Type::IfcSoundPressureLevelMeasure || v == Type::IfcSoundPressureMeasure || v == Type::IfcSpecificHeatCapacityMeasure || v == Type::IfcSpecularExponent || v == Type::IfcSpecularRoughness || v == Type::IfcTemperatureGradientMeasure || v == Type::IfcTemperatureRateOfChangeMeasure || v == Type::IfcText || v == Type::IfcThermalAdmittanceMeasure || v == Type::IfcThermalConductivityMeasure || v == Type::IfcThermalExpansionCoefficientMeasure || v == Type::IfcThermalResistanceMeasure || v == Type::IfcThermalTransmittanceMeasure || v == Type::IfcThermodynamicTemperatureMeasure || v == Type::IfcTime || v == Type::IfcTimeMeasure || v == Type::IfcTimeStamp || v == Type::IfcTorqueMeasure || v == Type::IfcValue || v == Type::IfcVaporPermeabilityMeasure || v == Type::IfcVolumeMeasure || v == Type::IfcVolumetricFlowRateMeasure || v == Type::IfcWarpingConstantMeasure || v == Type::IfcWarpingMomentMeasure; } @@ -2507,8 +2522,8 @@ IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum IfcBuildingElemen } const char* IfcBuildingElementProxyTypeEnum::ToString(IfcBuildingElementProxyTypeEnum v) { - if ( v < 0 || v >= 6 ) throw IfcException("Unable to find find keyword in schema"); - const char* names[] = { "COMPLEX", "ELEMENT", "PARTIAL", "PROVISIONFORVOID", "USERDEFINED", "NOTDEFINED" }; + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find find keyword in schema"); + const char* names[] = { "COMPLEX", "ELEMENT", "PARTIAL", "PROVISIONFORVOID", "PROVISIONFORSPACE", "USERDEFINED", "NOTDEFINED" }; return names[v]; } @@ -2517,6 +2532,7 @@ IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum IfcBuildingElem if (s == "ELEMENT") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_ELEMENT; if (s == "PARTIAL") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PARTIAL; if (s == "PROVISIONFORVOID") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PROVISIONFORVOID; + if (s == "PROVISIONFORSPACE") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PROVISIONFORSPACE; if (s == "USERDEFINED") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_USERDEFINED; if (s == "NOTDEFINED") return ::Ifc4::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_NOTDEFINED; throw IfcException("Unable to find find keyword in schema"); @@ -3647,7 +3663,7 @@ IfcEventTypeEnum::IfcEventTypeEnum IfcEventTypeEnum::FromString(const std::strin const char* IfcExternalSpatialElementTypeEnum::ToString(IfcExternalSpatialElementTypeEnum v) { if ( v < 0 || v >= 6 ) throw IfcException("Unable to find find keyword in schema"); - const char* names[] = { "EXTERNAL", "EXTERNAL_EARTH", "EXTERNAL_WATER", "EXTERNAL_FIRE", "USERDEFINED", "NOTDEFIEND" }; + const char* names[] = { "EXTERNAL", "EXTERNAL_EARTH", "EXTERNAL_WATER", "EXTERNAL_FIRE", "USERDEFINED", "NOTDEFINED" }; return names[v]; } @@ -3657,7 +3673,7 @@ IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum IfcExternal if (s == "EXTERNAL_WATER") return ::Ifc4::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL_WATER; if (s == "EXTERNAL_FIRE") return ::Ifc4::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL_FIRE; if (s == "USERDEFINED") return ::Ifc4::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_USERDEFINED; - if (s == "NOTDEFIEND") return ::Ifc4::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_NOTDEFIEND; + if (s == "NOTDEFINED") return ::Ifc4::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_NOTDEFINED; throw IfcException("Unable to find find keyword in schema"); } @@ -4454,6 +4470,19 @@ IfcPlateTypeEnum::IfcPlateTypeEnum IfcPlateTypeEnum::FromString(const std::strin throw IfcException("Unable to find find keyword in schema"); } +const char* IfcPreferredSurfaceCurveRepresentation::ToString(IfcPreferredSurfaceCurveRepresentation v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find find keyword in schema"); + const char* names[] = { "CURVE3D", "PCURVE_S1", "PCURVE_S2" }; + return names[v]; +} + +IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation IfcPreferredSurfaceCurveRepresentation::FromString(const std::string& s) { + if (s == "CURVE3D") return ::Ifc4::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_CURVE3D; + if (s == "PCURVE_S1") return ::Ifc4::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_PCURVE_S1; + if (s == "PCURVE_S2") return ::Ifc4::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_PCURVE_S2; + throw IfcException("Unable to find find keyword in schema"); +} + const char* IfcProcedureTypeEnum::ToString(IfcProcedureTypeEnum v) { if ( v < 0 || v >= 9 ) throw IfcException("Unable to find find keyword in schema"); const char* names[] = { "ADVICE_CAUTION", "ADVICE_NOTE", "ADVICE_WARNING", "CALIBRATION", "DIAGNOSTIC", "SHUTDOWN", "STARTUP", "USERDEFINED", "NOTDEFINED" }; @@ -4906,12 +4935,13 @@ IfcSectionTypeEnum::IfcSectionTypeEnum IfcSectionTypeEnum::FromString(const std: } const char* IfcSensorTypeEnum::ToString(IfcSensorTypeEnum v) { - if ( v < 0 || v >= 25 ) throw IfcException("Unable to find find keyword in schema"); - const char* names[] = { "CO2SENSOR", "CONDUCTANCESENSOR", "CONTACTSENSOR", "FIRESENSOR", "FLOWSENSOR", "FROSTSENSOR", "GASSENSOR", "HEATSENSOR", "HUMIDITYSENSOR", "IDENTIFIERSENSOR", "IONCONCENTRATIONSENSOR", "LEVELSENSOR", "LIGHTSENSOR", "MOISTURESENSOR", "MOVEMENTSENSOR", "PHSENSOR", "PRESSURESENSOR", "RADIATIONSENSOR", "RADIOACTIVITYSENSOR", "SMOKESENSOR", "SOUNDSENSOR", "TEMPERATURESENSOR", "WINDSENSOR", "USERDEFINED", "NOTDEFINED" }; + if ( v < 0 || v >= 26 ) throw IfcException("Unable to find find keyword in schema"); + const char* names[] = { "COSENSOR", "CO2SENSOR", "CONDUCTANCESENSOR", "CONTACTSENSOR", "FIRESENSOR", "FLOWSENSOR", "FROSTSENSOR", "GASSENSOR", "HEATSENSOR", "HUMIDITYSENSOR", "IDENTIFIERSENSOR", "IONCONCENTRATIONSENSOR", "LEVELSENSOR", "LIGHTSENSOR", "MOISTURESENSOR", "MOVEMENTSENSOR", "PHSENSOR", "PRESSURESENSOR", "RADIATIONSENSOR", "RADIOACTIVITYSENSOR", "SMOKESENSOR", "SOUNDSENSOR", "TEMPERATURESENSOR", "WINDSENSOR", "USERDEFINED", "NOTDEFINED" }; return names[v]; } IfcSensorTypeEnum::IfcSensorTypeEnum IfcSensorTypeEnum::FromString(const std::string& s) { + if (s == "COSENSOR") return ::Ifc4::IfcSensorTypeEnum::IfcSensorType_COSENSOR; if (s == "CO2SENSOR") return ::Ifc4::IfcSensorTypeEnum::IfcSensorType_CO2SENSOR; if (s == "CONDUCTANCESENSOR") return ::Ifc4::IfcSensorTypeEnum::IfcSensorType_CONDUCTANCESENSOR; if (s == "CONTACTSENSOR") return ::Ifc4::IfcSensorTypeEnum::IfcSensorType_CONTACTSENSOR; @@ -6896,16 +6926,6 @@ IfcSpecularRoughness::IfcSpecularRoughness(IfcEntityInstanceData* e) { entity = IfcSpecularRoughness::IfcSpecularRoughness(double v) { entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); entity->setArgument(0, attr);} } IfcSpecularRoughness::operator double() const { return *entity->getArgument(0); } -// Function implementations for IfcStrippedOptional -IfcUtil::ArgumentType IfcStrippedOptional::getArgumentType(unsigned int i) const { if (i == 0) { return IfcUtil::Argument_BOOL; } else { throw IfcParse::IfcAttributeOutOfRangeException("Argument index out of range"); } } -Argument* IfcStrippedOptional::getArgument(unsigned int i) const { return entity->getArgument(i); } -bool IfcStrippedOptional::is(Type::Enum v) const { return v == IfcStrippedOptional::Class(); } -Type::Enum IfcStrippedOptional::type() const { return Type::IfcStrippedOptional; } -Type::Enum IfcStrippedOptional::Class() { return Type::IfcStrippedOptional; } -IfcStrippedOptional::IfcStrippedOptional(IfcEntityInstanceData* e) { entity = e; } -IfcStrippedOptional::IfcStrippedOptional(bool v) { entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); entity->setArgument(0, attr);} } -IfcStrippedOptional::operator bool() const { return *entity->getArgument(0); } - // Function implementations for IfcTemperatureGradientMeasure IfcUtil::ArgumentType IfcTemperatureGradientMeasure::getArgumentType(unsigned int i) const { if (i == 0) { return IfcUtil::Argument_DOUBLE; } else { throw IfcParse::IfcAttributeOutOfRangeException("Argument index out of range"); } } Argument* IfcTemperatureGradientMeasure::getArgument(unsigned int i) const { return entity->getArgument(i); } @@ -10780,6 +10800,25 @@ Type::Enum IfcIndexedPolyCurve::Class() { return Type::IfcIndexedPolyCurve; } IfcIndexedPolyCurve::IfcIndexedPolyCurve(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcIndexedPolyCurve) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcIndexedPolyCurve::IfcIndexedPolyCurve(IfcCartesianPointList* v1_Points, boost::optional< IfcEntityList::ptr > v2_Segments, boost::optional< bool > v3_SelfIntersect) : IfcBoundedCurve((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Points));entity->setArgument(0,attr);} if (v2_Segments) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Segments));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_SelfIntersect) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_SelfIntersect));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } } +// Function implementations for IfcIndexedPolygonalFace +std::vector< int > /*[3:?]*/ IfcIndexedPolygonalFace::CoordIndex() const { return *entity->getArgument(0); } +void IfcIndexedPolygonalFace::setCoordIndex(std::vector< int > /*[3:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(0,attr);} } +IfcPolygonalFaceSet::list::ptr IfcIndexedPolygonalFace::ToFaceSet() const { return entity->getInverse(Type::IfcPolygonalFaceSet, 2)->as(); } +bool IfcIndexedPolygonalFace::is(Type::Enum v) const { return v == Type::IfcIndexedPolygonalFace || IfcTessellatedItem::is(v); } +Type::Enum IfcIndexedPolygonalFace::type() const { return Type::IfcIndexedPolygonalFace; } +Type::Enum IfcIndexedPolygonalFace::Class() { return Type::IfcIndexedPolygonalFace; } +IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(IfcEntityInstanceData* e) : IfcTessellatedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcIndexedPolygonalFace) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(std::vector< int > /*[3:?]*/ v1_CoordIndex) : IfcTessellatedItem((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordIndex));entity->setArgument(0,attr);} } + +// Function implementations for IfcIndexedPolygonalFaceWithVoids +std::vector< std::vector< int > > IfcIndexedPolygonalFaceWithVoids::InnerCoordIndices() const { return *entity->getArgument(1); } +void IfcIndexedPolygonalFaceWithVoids::setInnerCoordIndices(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } +bool IfcIndexedPolygonalFaceWithVoids::is(Type::Enum v) const { return v == Type::IfcIndexedPolygonalFaceWithVoids || IfcIndexedPolygonalFace::is(v); } +Type::Enum IfcIndexedPolygonalFaceWithVoids::type() const { return Type::IfcIndexedPolygonalFaceWithVoids; } +Type::Enum IfcIndexedPolygonalFaceWithVoids::Class() { return Type::IfcIndexedPolygonalFaceWithVoids; } +IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(IfcEntityInstanceData* e) : IfcIndexedPolygonalFace((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcIndexedPolygonalFaceWithVoids) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(std::vector< int > /*[3:?]*/ v1_CoordIndex, std::vector< std::vector< int > > v2_InnerCoordIndices) : IfcIndexedPolygonalFace((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordIndex));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_InnerCoordIndices));entity->setArgument(1,attr);} } + // Function implementations for IfcIndexedTextureMap IfcTessellatedFaceSet* IfcIndexedTextureMap::MappedTo() const { return (IfcTessellatedFaceSet*)((IfcUtil::IfcBaseClass*)(*entity->getArgument(1))); } void IfcIndexedTextureMap::setMappedTo(IfcTessellatedFaceSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } @@ -10820,6 +10859,13 @@ Type::Enum IfcInterceptorType::Class() { return Type::IfcInterceptorType; } IfcInterceptorType::IfcInterceptorType(IfcEntityInstanceData* e) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcInterceptorType) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcInterceptorType::IfcInterceptorType(std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcInterceptorTypeEnum::IfcInterceptorTypeEnum v10_PredefinedType) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));entity->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));entity->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));entity->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());entity->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());entity->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));entity->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));entity->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,IfcInterceptorTypeEnum::ToString(v10_PredefinedType))));entity->setArgument(9,attr);} } +// Function implementations for IfcIntersectionCurve +bool IfcIntersectionCurve::is(Type::Enum v) const { return v == Type::IfcIntersectionCurve || IfcSurfaceCurve::is(v); } +Type::Enum IfcIntersectionCurve::type() const { return Type::IfcIntersectionCurve; } +Type::Enum IfcIntersectionCurve::Class() { return Type::IfcIntersectionCurve; } +IfcIntersectionCurve::IfcIntersectionCurve(IfcEntityInstanceData* e) : IfcSurfaceCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcIntersectionCurve) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcIntersectionCurve::IfcIntersectionCurve(IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation) : IfcSurfaceCurve((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());entity->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));entity->setArgument(2,attr);} } + // Function implementations for IfcInventory bool IfcInventory::hasPredefinedType() const { return !entity->getArgument(5)->isNull(); } IfcInventoryTypeEnum::IfcInventoryTypeEnum IfcInventory::PredefinedType() const { return IfcInventoryTypeEnum::FromString(*entity->getArgument(5)); } @@ -12200,6 +12246,21 @@ Type::Enum IfcPolygonalBoundedHalfSpace::Class() { return Type::IfcPolygonalBoun IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(IfcEntityInstanceData* e) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcPolygonalBoundedHalfSpace) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, IfcAxis2Placement3D* v3_Position, IfcBoundedCurve* v4_PolygonalBoundary) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BaseSurface));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AgreementFlag));entity->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));entity->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_PolygonalBoundary));entity->setArgument(3,attr);} } +// Function implementations for IfcPolygonalFaceSet +bool IfcPolygonalFaceSet::hasClosed() const { return !entity->getArgument(1)->isNull(); } +bool IfcPolygonalFaceSet::Closed() const { return *entity->getArgument(1); } +void IfcPolygonalFaceSet::setClosed(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } +IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr IfcPolygonalFaceSet::Faces() const { IfcEntityList::ptr es = *entity->getArgument(2); return es->as(); } +void IfcPolygonalFaceSet::setFaces(IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v->generalize());entity->setArgument(2,attr);} } +bool IfcPolygonalFaceSet::hasPnIndex() const { return !entity->getArgument(3)->isNull(); } +std::vector< int > /*[1:?]*/ IfcPolygonalFaceSet::PnIndex() const { return *entity->getArgument(3); } +void IfcPolygonalFaceSet::setPnIndex(std::vector< int > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(3,attr);} } +bool IfcPolygonalFaceSet::is(Type::Enum v) const { return v == Type::IfcPolygonalFaceSet || IfcTessellatedFaceSet::is(v); } +Type::Enum IfcPolygonalFaceSet::type() const { return Type::IfcPolygonalFaceSet; } +Type::Enum IfcPolygonalFaceSet::Class() { return Type::IfcPolygonalFaceSet; } +IfcPolygonalFaceSet::IfcPolygonalFaceSet(IfcEntityInstanceData* e) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcPolygonalFaceSet) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcPolygonalFaceSet::IfcPolygonalFaceSet(IfcCartesianPointList3D* v1_Coordinates, boost::optional< bool > v2_Closed, IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr v3_Faces, boost::optional< std::vector< int > /*[1:?]*/ > v4_PnIndex) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));entity->setArgument(0,attr);} if (v2_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Closed));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Faces)->generalize());entity->setArgument(2,attr);} if (v4_PnIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_PnIndex));entity->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(3, attr); } } + // Function implementations for IfcPolyline IfcTemplatedEntityList< IfcCartesianPoint >::ptr IfcPolyline::Points() const { IfcEntityList::ptr es = *entity->getArgument(0); return es->as(); } void IfcPolyline::setPoints(IfcTemplatedEntityList< IfcCartesianPoint >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v->generalize());entity->setArgument(0,attr);} } @@ -14071,6 +14132,13 @@ Type::Enum IfcSchedulingTime::Class() { return Type::IfcSchedulingTime; } IfcSchedulingTime::IfcSchedulingTime(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != Type::IfcSchedulingTime) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcSchedulingTime::IfcSchedulingTime(boost::optional< std::string > v1_Name, boost::optional< IfcDataOriginEnum::IfcDataOriginEnum > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin) : IfcUtil::IfcBaseEntity() {entity = new IfcEntityInstanceData(Class()); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));entity->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,IfcDataOriginEnum::ToString(*v2_DataOrigin))));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } } +// Function implementations for IfcSeamCurve +bool IfcSeamCurve::is(Type::Enum v) const { return v == Type::IfcSeamCurve || IfcSurfaceCurve::is(v); } +Type::Enum IfcSeamCurve::type() const { return Type::IfcSeamCurve; } +Type::Enum IfcSeamCurve::Class() { return Type::IfcSeamCurve; } +IfcSeamCurve::IfcSeamCurve(IfcEntityInstanceData* e) : IfcSurfaceCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcSeamCurve) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcSeamCurve::IfcSeamCurve(IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation) : IfcSurfaceCurve((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());entity->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));entity->setArgument(2,attr);} } + // Function implementations for IfcSectionProperties IfcSectionTypeEnum::IfcSectionTypeEnum IfcSectionProperties::SectionType() const { return IfcSectionTypeEnum::FromString(*entity->getArgument(0)); } void IfcSectionProperties::setSectionType(IfcSectionTypeEnum::IfcSectionTypeEnum v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,IfcSectionTypeEnum::ToString(v)));entity->setArgument(0,attr);} } @@ -14452,6 +14520,15 @@ Type::Enum IfcSphere::Class() { return Type::IfcSphere; } IfcSphere::IfcSphere(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcSphere) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcSphere::IfcSphere(IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));entity->setArgument(1,attr);} } +// Function implementations for IfcSphericalSurface +double IfcSphericalSurface::Radius() const { return *entity->getArgument(1); } +void IfcSphericalSurface::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } +bool IfcSphericalSurface::is(Type::Enum v) const { return v == Type::IfcSphericalSurface || IfcElementarySurface::is(v); } +Type::Enum IfcSphericalSurface::type() const { return Type::IfcSphericalSurface; } +Type::Enum IfcSphericalSurface::Class() { return Type::IfcSphericalSurface; } +IfcSphericalSurface::IfcSphericalSurface(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcSphericalSurface) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcSphericalSurface::IfcSphericalSurface(IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcElementarySurface((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));entity->setArgument(1,attr);} } + // Function implementations for IfcStackTerminal bool IfcStackTerminal::hasPredefinedType() const { return !entity->getArgument(8)->isNull(); } IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum IfcStackTerminal::PredefinedType() const { return IfcStackTerminalTypeEnum::FromString(*entity->getArgument(8)); } @@ -15014,6 +15091,19 @@ Type::Enum IfcSurface::Class() { return Type::IfcSurface; } IfcSurface::IfcSurface(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcSurface) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcSurface::IfcSurface() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); } +// Function implementations for IfcSurfaceCurve +IfcCurve* IfcSurfaceCurve::Curve3D() const { return (IfcCurve*)((IfcUtil::IfcBaseClass*)(*entity->getArgument(0))); } +void IfcSurfaceCurve::setCurve3D(IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(0,attr);} } +IfcTemplatedEntityList< IfcPcurve >::ptr IfcSurfaceCurve::AssociatedGeometry() const { IfcEntityList::ptr es = *entity->getArgument(1); return es->as(); } +void IfcSurfaceCurve::setAssociatedGeometry(IfcTemplatedEntityList< IfcPcurve >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v->generalize());entity->setArgument(1,attr);} } +IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation IfcSurfaceCurve::MasterRepresentation() const { return IfcPreferredSurfaceCurveRepresentation::FromString(*entity->getArgument(2)); } +void IfcSurfaceCurve::setMasterRepresentation(IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,IfcPreferredSurfaceCurveRepresentation::ToString(v)));entity->setArgument(2,attr);} } +bool IfcSurfaceCurve::is(Type::Enum v) const { return v == Type::IfcSurfaceCurve || IfcCurve::is(v); } +Type::Enum IfcSurfaceCurve::type() const { return Type::IfcSurfaceCurve; } +Type::Enum IfcSurfaceCurve::Class() { return Type::IfcSurfaceCurve; } +IfcSurfaceCurve::IfcSurfaceCurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcSurfaceCurve) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcSurfaceCurve::IfcSurfaceCurve(IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation) : IfcCurve((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());entity->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));entity->setArgument(2,attr);} } + // Function implementations for IfcSurfaceCurveSweptAreaSolid IfcCurve* IfcSurfaceCurveSweptAreaSolid::Directrix() const { return (IfcCurve*)((IfcUtil::IfcBaseClass*)(*entity->getArgument(2))); } void IfcSurfaceCurveSweptAreaSolid::setDirectrix(IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(2,attr);} } @@ -15574,31 +15664,25 @@ void IfcTendonType::setNominalDiameter(double v) { {IfcWrite::IfcWriteArgument* bool IfcTendonType::hasCrossSectionArea() const { return !entity->getArgument(11)->isNull(); } double IfcTendonType::CrossSectionArea() const { return *entity->getArgument(11); } void IfcTendonType::setCrossSectionArea(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(11,attr);} } -bool IfcTendonType::hasSheethDiameter() const { return !entity->getArgument(12)->isNull(); } -double IfcTendonType::SheethDiameter() const { return *entity->getArgument(12); } -void IfcTendonType::setSheethDiameter(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(12,attr);} } +bool IfcTendonType::hasSheathDiameter() const { return !entity->getArgument(12)->isNull(); } +double IfcTendonType::SheathDiameter() const { return *entity->getArgument(12); } +void IfcTendonType::setSheathDiameter(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(12,attr);} } bool IfcTendonType::is(Type::Enum v) const { return v == Type::IfcTendonType || IfcReinforcingElementType::is(v); } Type::Enum IfcTendonType::type() const { return Type::IfcTendonType; } Type::Enum IfcTendonType::Class() { return Type::IfcTendonType; } IfcTendonType::IfcTendonType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcTendonType) throw IfcException("Unable to find find keyword in schema"); entity = e; } -IfcTendonType::IfcTendonType(std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcTendonTypeEnum::IfcTendonTypeEnum v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheethDiameter) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));entity->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));entity->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));entity->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());entity->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());entity->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));entity->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));entity->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,IfcTendonTypeEnum::ToString(v10_PredefinedType))));entity->setArgument(9,attr);} if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));entity->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(10, attr); } if (v12_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_CrossSectionArea));entity->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(11, attr); } if (v13_SheethDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_SheethDiameter));entity->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(12, attr); } } +IfcTendonType::IfcTendonType(std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcTendonTypeEnum::IfcTendonTypeEnum v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheathDiameter) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));entity->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));entity->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));entity->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());entity->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());entity->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));entity->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));entity->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,IfcTendonTypeEnum::ToString(v10_PredefinedType))));entity->setArgument(9,attr);} if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));entity->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(10, attr); } if (v12_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_CrossSectionArea));entity->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(11, attr); } if (v13_SheathDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_SheathDiameter));entity->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(12, attr); } } // Function implementations for IfcTessellatedFaceSet IfcCartesianPointList3D* IfcTessellatedFaceSet::Coordinates() const { return (IfcCartesianPointList3D*)((IfcUtil::IfcBaseClass*)(*entity->getArgument(0))); } void IfcTessellatedFaceSet::setCoordinates(IfcCartesianPointList3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(0,attr);} } -bool IfcTessellatedFaceSet::hasNormals() const { return !entity->getArgument(1)->isNull(); } -std::vector< std::vector< double > > IfcTessellatedFaceSet::Normals() const { return *entity->getArgument(1); } -void IfcTessellatedFaceSet::setNormals(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } -bool IfcTessellatedFaceSet::hasClosed() const { return !entity->getArgument(2)->isNull(); } -bool IfcTessellatedFaceSet::Closed() const { return *entity->getArgument(2); } -void IfcTessellatedFaceSet::setClosed(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(2,attr);} } IfcIndexedColourMap::list::ptr IfcTessellatedFaceSet::HasColours() const { return entity->getInverse(Type::IfcIndexedColourMap, 0)->as(); } IfcIndexedTextureMap::list::ptr IfcTessellatedFaceSet::HasTextures() const { return entity->getInverse(Type::IfcIndexedTextureMap, 1)->as(); } bool IfcTessellatedFaceSet::is(Type::Enum v) const { return v == Type::IfcTessellatedFaceSet || IfcTessellatedItem::is(v); } Type::Enum IfcTessellatedFaceSet::type() const { return Type::IfcTessellatedFaceSet; } Type::Enum IfcTessellatedFaceSet::Class() { return Type::IfcTessellatedFaceSet; } IfcTessellatedFaceSet::IfcTessellatedFaceSet(IfcEntityInstanceData* e) : IfcTessellatedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcTessellatedFaceSet) throw IfcException("Unable to find find keyword in schema"); entity = e; } -IfcTessellatedFaceSet::IfcTessellatedFaceSet(IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed) : IfcTessellatedItem((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));entity->setArgument(0,attr);} if (v2_Normals) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Normals));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Closed));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); } } +IfcTessellatedFaceSet::IfcTessellatedFaceSet(IfcCartesianPointList3D* v1_Coordinates) : IfcTessellatedItem((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));entity->setArgument(0,attr);} } // Function implementations for IfcTessellatedItem bool IfcTessellatedItem::is(Type::Enum v) const { return v == Type::IfcTessellatedItem || IfcGeometricRepresentationItem::is(v); } @@ -15820,6 +15904,17 @@ Type::Enum IfcTopologyRepresentation::Class() { return Type::IfcTopologyRepresen IfcTopologyRepresentation::IfcTopologyRepresentation(IfcEntityInstanceData* e) : IfcShapeModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcTopologyRepresentation) throw IfcException("Unable to find find keyword in schema"); entity = e; } IfcTopologyRepresentation::IfcTopologyRepresentation(IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, IfcTemplatedEntityList< IfcRepresentationItem >::ptr v4_Items) : IfcShapeModel((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));entity->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());entity->setArgument(3,attr);} } +// Function implementations for IfcToroidalSurface +double IfcToroidalSurface::MajorRadius() const { return *entity->getArgument(1); } +void IfcToroidalSurface::setMajorRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } +double IfcToroidalSurface::MinorRadius() const { return *entity->getArgument(2); } +void IfcToroidalSurface::setMinorRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(2,attr);} } +bool IfcToroidalSurface::is(Type::Enum v) const { return v == Type::IfcToroidalSurface || IfcElementarySurface::is(v); } +Type::Enum IfcToroidalSurface::type() const { return Type::IfcToroidalSurface; } +Type::Enum IfcToroidalSurface::Class() { return Type::IfcToroidalSurface; } +IfcToroidalSurface::IfcToroidalSurface(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcToroidalSurface) throw IfcException("Unable to find find keyword in schema"); entity = e; } +IfcToroidalSurface::IfcToroidalSurface(IfcAxis2Placement3D* v1_Position, double v2_MajorRadius, double v3_MinorRadius) : IfcElementarySurface((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));entity->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MajorRadius));entity->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_MinorRadius));entity->setArgument(2,attr);} } + // Function implementations for IfcTransformer bool IfcTransformer::hasPredefinedType() const { return !entity->getArgument(8)->isNull(); } IfcTransformerTypeEnum::IfcTransformerTypeEnum IfcTransformer::PredefinedType() const { return IfcTransformerTypeEnum::FromString(*entity->getArgument(8)); } @@ -15874,16 +15969,22 @@ IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(IfcEntityInstanceData* e) : IfcPa IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(IfcProfileTypeEnum::IfcProfileTypeEnum v1_ProfileType, boost::optional< std::string > v2_ProfileName, IfcAxis2Placement2D* v3_Position, double v4_BottomXDim, double v5_TopXDim, double v6_YDim, double v7_TopXOffset) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,IfcProfileTypeEnum::ToString(v1_ProfileType))));entity->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));entity->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_BottomXDim));entity->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_TopXDim));entity->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_YDim));entity->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_TopXOffset));entity->setArgument(6,attr);} } // Function implementations for IfcTriangulatedFaceSet +bool IfcTriangulatedFaceSet::hasNormals() const { return !entity->getArgument(1)->isNull(); } +std::vector< std::vector< double > > IfcTriangulatedFaceSet::Normals() const { return *entity->getArgument(1); } +void IfcTriangulatedFaceSet::setNormals(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(1,attr);} } +bool IfcTriangulatedFaceSet::hasClosed() const { return !entity->getArgument(2)->isNull(); } +bool IfcTriangulatedFaceSet::Closed() const { return *entity->getArgument(2); } +void IfcTriangulatedFaceSet::setClosed(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(2,attr);} } std::vector< std::vector< int > > IfcTriangulatedFaceSet::CoordIndex() const { return *entity->getArgument(3); } void IfcTriangulatedFaceSet::setCoordIndex(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(3,attr);} } -bool IfcTriangulatedFaceSet::hasNormalIndex() const { return !entity->getArgument(4)->isNull(); } -std::vector< std::vector< int > > IfcTriangulatedFaceSet::NormalIndex() const { return *entity->getArgument(4); } -void IfcTriangulatedFaceSet::setNormalIndex(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(4,attr);} } +bool IfcTriangulatedFaceSet::hasPnIndex() const { return !entity->getArgument(4)->isNull(); } +std::vector< int > /*[1:?]*/ IfcTriangulatedFaceSet::PnIndex() const { return *entity->getArgument(4); } +void IfcTriangulatedFaceSet::setPnIndex(std::vector< int > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);entity->setArgument(4,attr);} } bool IfcTriangulatedFaceSet::is(Type::Enum v) const { return v == Type::IfcTriangulatedFaceSet || IfcTessellatedFaceSet::is(v); } Type::Enum IfcTriangulatedFaceSet::type() const { return Type::IfcTriangulatedFaceSet; } Type::Enum IfcTriangulatedFaceSet::Class() { return Type::IfcTriangulatedFaceSet; } IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(IfcEntityInstanceData* e) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != Type::IfcTriangulatedFaceSet) throw IfcException("Unable to find find keyword in schema"); entity = e; } -IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< std::vector< int > > > v5_NormalIndex) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));entity->setArgument(0,attr);} if (v2_Normals) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Normals));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Closed));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CoordIndex));entity->setArgument(3,attr);} if (v5_NormalIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_NormalIndex));entity->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(4, attr); } } +IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) {entity = new IfcEntityInstanceData(Class()); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));entity->setArgument(0,attr);} if (v2_Normals) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Normals));entity->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(1, attr); } if (v3_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Closed));entity->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CoordIndex));entity->setArgument(3,attr);} if (v5_PnIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_PnIndex));entity->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); entity->setArgument(4, attr); } } // Function implementations for IfcTrimmedCurve IfcCurve* IfcTrimmedCurve::BasisCurve() const { return (IfcCurve*)((IfcUtil::IfcBaseClass*)(*entity->getArgument(0))); } diff --git a/src/ifcparse/Ifc4.h b/src/ifcparse/Ifc4.h index 6363f03213..7b6f852815 100644 --- a/src/ifcparse/Ifc4.h +++ b/src/ifcparse/Ifc4.h @@ -48,7 +48,7 @@ namespace Ifc4 { const char* const Identifier = "IFC4"; // Forward definitions -class IfcActionRequest; class IfcActor; class IfcActorRole; class IfcActuator; class IfcActuatorType; class IfcAddress; class IfcAdvancedBrep; class IfcAdvancedBrepWithVoids; class IfcAdvancedFace; class IfcAirTerminal; class IfcAirTerminalBox; class IfcAirTerminalBoxType; class IfcAirTerminalType; class IfcAirToAirHeatRecovery; class IfcAirToAirHeatRecoveryType; class IfcAlarm; class IfcAlarmType; class IfcAnnotation; class IfcAnnotationFillArea; class IfcApplication; class IfcAppliedValue; class IfcApproval; class IfcApprovalRelationship; class IfcArbitraryClosedProfileDef; class IfcArbitraryOpenProfileDef; class IfcArbitraryProfileDefWithVoids; class IfcAsset; class IfcAsymmetricIShapeProfileDef; class IfcAudioVisualAppliance; class IfcAudioVisualApplianceType; class IfcAxis1Placement; class IfcAxis2Placement2D; class IfcAxis2Placement3D; class IfcBSplineCurve; class IfcBSplineCurveWithKnots; class IfcBSplineSurface; class IfcBSplineSurfaceWithKnots; class IfcBeam; class IfcBeamStandardCase; class IfcBeamType; class IfcBlobTexture; class IfcBlock; class IfcBoiler; class IfcBoilerType; class IfcBooleanClippingResult; class IfcBooleanResult; class IfcBoundaryCondition; class IfcBoundaryCurve; class IfcBoundaryEdgeCondition; class IfcBoundaryFaceCondition; class IfcBoundaryNodeCondition; class IfcBoundaryNodeConditionWarping; class IfcBoundedCurve; class IfcBoundedSurface; class IfcBoundingBox; class IfcBoxedHalfSpace; class IfcBuilding; class IfcBuildingElement; class IfcBuildingElementPart; class IfcBuildingElementPartType; class IfcBuildingElementProxy; class IfcBuildingElementProxyType; class IfcBuildingElementType; class IfcBuildingStorey; class IfcBuildingSystem; class IfcBurner; class IfcBurnerType; class IfcCShapeProfileDef; class IfcCableCarrierFitting; class IfcCableCarrierFittingType; class IfcCableCarrierSegment; class IfcCableCarrierSegmentType; class IfcCableFitting; class IfcCableFittingType; class IfcCableSegment; class IfcCableSegmentType; class IfcCartesianPoint; class IfcCartesianPointList; class IfcCartesianPointList2D; class IfcCartesianPointList3D; class IfcCartesianTransformationOperator; class IfcCartesianTransformationOperator2D; class IfcCartesianTransformationOperator2DnonUniform; class IfcCartesianTransformationOperator3D; class IfcCartesianTransformationOperator3DnonUniform; class IfcCenterLineProfileDef; class IfcChiller; class IfcChillerType; class IfcChimney; class IfcChimneyType; class IfcCircle; class IfcCircleHollowProfileDef; class IfcCircleProfileDef; class IfcCivilElement; class IfcCivilElementType; class IfcClassification; class IfcClassificationReference; class IfcClosedShell; class IfcCoil; class IfcCoilType; class IfcColourRgb; class IfcColourRgbList; class IfcColourSpecification; class IfcColumn; class IfcColumnStandardCase; class IfcColumnType; class IfcCommunicationsAppliance; class IfcCommunicationsApplianceType; class IfcComplexProperty; class IfcComplexPropertyTemplate; class IfcCompositeCurve; class IfcCompositeCurveOnSurface; class IfcCompositeCurveSegment; class IfcCompositeProfileDef; class IfcCompressor; class IfcCompressorType; class IfcCondenser; class IfcCondenserType; class IfcConic; class IfcConnectedFaceSet; class IfcConnectionCurveGeometry; class IfcConnectionGeometry; class IfcConnectionPointEccentricity; class IfcConnectionPointGeometry; class IfcConnectionSurfaceGeometry; class IfcConnectionVolumeGeometry; class IfcConstraint; class IfcConstructionEquipmentResource; class IfcConstructionEquipmentResourceType; class IfcConstructionMaterialResource; class IfcConstructionMaterialResourceType; class IfcConstructionProductResource; class IfcConstructionProductResourceType; class IfcConstructionResource; class IfcConstructionResourceType; class IfcContext; class IfcContextDependentUnit; class IfcControl; class IfcController; class IfcControllerType; class IfcConversionBasedUnit; class IfcConversionBasedUnitWithOffset; class IfcCooledBeam; class IfcCooledBeamType; class IfcCoolingTower; class IfcCoolingTowerType; class IfcCoordinateOperation; class IfcCoordinateReferenceSystem; class IfcCostItem; class IfcCostSchedule; class IfcCostValue; class IfcCovering; class IfcCoveringType; class IfcCrewResource; class IfcCrewResourceType; class IfcCsgPrimitive3D; class IfcCsgSolid; class IfcCurrencyRelationship; class IfcCurtainWall; class IfcCurtainWallType; class IfcCurve; class IfcCurveBoundedPlane; class IfcCurveBoundedSurface; class IfcCurveStyle; class IfcCurveStyleFont; class IfcCurveStyleFontAndScaling; class IfcCurveStyleFontPattern; class IfcCylindricalSurface; class IfcDamper; class IfcDamperType; class IfcDerivedProfileDef; class IfcDerivedUnit; class IfcDerivedUnitElement; class IfcDimensionalExponents; class IfcDirection; class IfcDiscreteAccessory; class IfcDiscreteAccessoryType; class IfcDistributionChamberElement; class IfcDistributionChamberElementType; class IfcDistributionCircuit; class IfcDistributionControlElement; class IfcDistributionControlElementType; class IfcDistributionElement; class IfcDistributionElementType; class IfcDistributionFlowElement; class IfcDistributionFlowElementType; class IfcDistributionPort; class IfcDistributionSystem; class IfcDocumentInformation; class IfcDocumentInformationRelationship; class IfcDocumentReference; class IfcDoor; class IfcDoorLiningProperties; class IfcDoorPanelProperties; class IfcDoorStandardCase; class IfcDoorStyle; class IfcDoorType; class IfcDraughtingPreDefinedColour; class IfcDraughtingPreDefinedCurveFont; class IfcDuctFitting; class IfcDuctFittingType; class IfcDuctSegment; class IfcDuctSegmentType; class IfcDuctSilencer; class IfcDuctSilencerType; class IfcEdge; class IfcEdgeCurve; class IfcEdgeLoop; class IfcElectricAppliance; class IfcElectricApplianceType; class IfcElectricDistributionBoard; class IfcElectricDistributionBoardType; class IfcElectricFlowStorageDevice; class IfcElectricFlowStorageDeviceType; class IfcElectricGenerator; class IfcElectricGeneratorType; class IfcElectricMotor; class IfcElectricMotorType; class IfcElectricTimeControl; class IfcElectricTimeControlType; class IfcElement; class IfcElementAssembly; class IfcElementAssemblyType; class IfcElementComponent; class IfcElementComponentType; class IfcElementQuantity; class IfcElementType; class IfcElementarySurface; class IfcEllipse; class IfcEllipseProfileDef; class IfcEnergyConversionDevice; class IfcEnergyConversionDeviceType; class IfcEngine; class IfcEngineType; class IfcEvaporativeCooler; class IfcEvaporativeCoolerType; class IfcEvaporator; class IfcEvaporatorType; class IfcEvent; class IfcEventTime; class IfcEventType; class IfcExtendedProperties; class IfcExternalInformation; class IfcExternalReference; class IfcExternalReferenceRelationship; class IfcExternalSpatialElement; class IfcExternalSpatialStructureElement; class IfcExternallyDefinedHatchStyle; class IfcExternallyDefinedSurfaceStyle; class IfcExternallyDefinedTextFont; class IfcExtrudedAreaSolid; class IfcExtrudedAreaSolidTapered; class IfcFace; class IfcFaceBasedSurfaceModel; class IfcFaceBound; class IfcFaceOuterBound; class IfcFaceSurface; class IfcFacetedBrep; class IfcFacetedBrepWithVoids; class IfcFailureConnectionCondition; class IfcFan; class IfcFanType; class IfcFastener; class IfcFastenerType; class IfcFeatureElement; class IfcFeatureElementAddition; class IfcFeatureElementSubtraction; class IfcFillAreaStyle; class IfcFillAreaStyleHatching; class IfcFillAreaStyleTiles; class IfcFilter; class IfcFilterType; class IfcFireSuppressionTerminal; class IfcFireSuppressionTerminalType; class IfcFixedReferenceSweptAreaSolid; class IfcFlowController; class IfcFlowControllerType; class IfcFlowFitting; class IfcFlowFittingType; class IfcFlowInstrument; class IfcFlowInstrumentType; class IfcFlowMeter; class IfcFlowMeterType; class IfcFlowMovingDevice; class IfcFlowMovingDeviceType; class IfcFlowSegment; class IfcFlowSegmentType; class IfcFlowStorageDevice; class IfcFlowStorageDeviceType; class IfcFlowTerminal; class IfcFlowTerminalType; class IfcFlowTreatmentDevice; class IfcFlowTreatmentDeviceType; class IfcFooting; class IfcFootingType; class IfcFurnishingElement; class IfcFurnishingElementType; class IfcFurniture; class IfcFurnitureType; class IfcGeographicElement; class IfcGeographicElementType; class IfcGeometricCurveSet; class IfcGeometricRepresentationContext; class IfcGeometricRepresentationItem; class IfcGeometricRepresentationSubContext; class IfcGeometricSet; class IfcGrid; class IfcGridAxis; class IfcGridPlacement; class IfcGroup; class IfcHalfSpaceSolid; class IfcHeatExchanger; class IfcHeatExchangerType; class IfcHumidifier; class IfcHumidifierType; class IfcIShapeProfileDef; class IfcImageTexture; class IfcIndexedColourMap; class IfcIndexedPolyCurve; class IfcIndexedTextureMap; class IfcIndexedTriangleTextureMap; class IfcInterceptor; class IfcInterceptorType; class IfcInventory; class IfcIrregularTimeSeries; class IfcIrregularTimeSeriesValue; class IfcJunctionBox; class IfcJunctionBoxType; class IfcLShapeProfileDef; class IfcLaborResource; class IfcLaborResourceType; class IfcLagTime; class IfcLamp; class IfcLampType; class IfcLibraryInformation; class IfcLibraryReference; class IfcLightDistributionData; class IfcLightFixture; class IfcLightFixtureType; class IfcLightIntensityDistribution; class IfcLightSource; class IfcLightSourceAmbient; class IfcLightSourceDirectional; class IfcLightSourceGoniometric; class IfcLightSourcePositional; class IfcLightSourceSpot; class IfcLine; class IfcLocalPlacement; class IfcLoop; class IfcManifoldSolidBrep; class IfcMapConversion; class IfcMappedItem; class IfcMaterial; class IfcMaterialClassificationRelationship; class IfcMaterialConstituent; class IfcMaterialConstituentSet; class IfcMaterialDefinition; class IfcMaterialDefinitionRepresentation; class IfcMaterialLayer; class IfcMaterialLayerSet; class IfcMaterialLayerSetUsage; class IfcMaterialLayerWithOffsets; class IfcMaterialList; class IfcMaterialProfile; class IfcMaterialProfileSet; class IfcMaterialProfileSetUsage; class IfcMaterialProfileSetUsageTapering; class IfcMaterialProfileWithOffsets; class IfcMaterialProperties; class IfcMaterialRelationship; class IfcMaterialUsageDefinition; class IfcMeasureWithUnit; class IfcMechanicalFastener; class IfcMechanicalFastenerType; class IfcMedicalDevice; class IfcMedicalDeviceType; class IfcMember; class IfcMemberStandardCase; class IfcMemberType; class IfcMetric; class IfcMirroredProfileDef; class IfcMonetaryUnit; class IfcMotorConnection; class IfcMotorConnectionType; class IfcNamedUnit; class IfcObject; class IfcObjectDefinition; class IfcObjectPlacement; class IfcObjective; class IfcOccupant; class IfcOffsetCurve2D; class IfcOffsetCurve3D; class IfcOpenShell; class IfcOpeningElement; class IfcOpeningStandardCase; class IfcOrganization; class IfcOrganizationRelationship; class IfcOrientedEdge; class IfcOuterBoundaryCurve; class IfcOutlet; class IfcOutletType; class IfcOwnerHistory; class IfcParameterizedProfileDef; class IfcPath; class IfcPcurve; class IfcPerformanceHistory; class IfcPermeableCoveringProperties; class IfcPermit; class IfcPerson; class IfcPersonAndOrganization; class IfcPhysicalComplexQuantity; class IfcPhysicalQuantity; class IfcPhysicalSimpleQuantity; class IfcPile; class IfcPileType; class IfcPipeFitting; class IfcPipeFittingType; class IfcPipeSegment; class IfcPipeSegmentType; class IfcPixelTexture; class IfcPlacement; class IfcPlanarBox; class IfcPlanarExtent; class IfcPlane; class IfcPlate; class IfcPlateStandardCase; class IfcPlateType; class IfcPoint; class IfcPointOnCurve; class IfcPointOnSurface; class IfcPolyLoop; class IfcPolygonalBoundedHalfSpace; class IfcPolyline; class IfcPort; class IfcPostalAddress; class IfcPreDefinedColour; class IfcPreDefinedCurveFont; class IfcPreDefinedItem; class IfcPreDefinedProperties; class IfcPreDefinedPropertySet; class IfcPreDefinedTextFont; class IfcPresentationItem; class IfcPresentationLayerAssignment; class IfcPresentationLayerWithStyle; class IfcPresentationStyle; class IfcPresentationStyleAssignment; class IfcProcedure; class IfcProcedureType; class IfcProcess; class IfcProduct; class IfcProductDefinitionShape; class IfcProductRepresentation; class IfcProfileDef; class IfcProfileProperties; class IfcProject; class IfcProjectLibrary; class IfcProjectOrder; class IfcProjectedCRS; class IfcProjectionElement; class IfcProperty; class IfcPropertyAbstraction; class IfcPropertyBoundedValue; class IfcPropertyDefinition; class IfcPropertyDependencyRelationship; class IfcPropertyEnumeratedValue; class IfcPropertyEnumeration; class IfcPropertyListValue; class IfcPropertyReferenceValue; class IfcPropertySet; class IfcPropertySetDefinition; class IfcPropertySetTemplate; class IfcPropertySingleValue; class IfcPropertyTableValue; class IfcPropertyTemplate; class IfcPropertyTemplateDefinition; class IfcProtectiveDevice; class IfcProtectiveDeviceTrippingUnit; class IfcProtectiveDeviceTrippingUnitType; class IfcProtectiveDeviceType; class IfcProxy; class IfcPump; class IfcPumpType; class IfcQuantityArea; class IfcQuantityCount; class IfcQuantityLength; class IfcQuantitySet; class IfcQuantityTime; class IfcQuantityVolume; class IfcQuantityWeight; class IfcRailing; class IfcRailingType; class IfcRamp; class IfcRampFlight; class IfcRampFlightType; class IfcRampType; class IfcRationalBSplineCurveWithKnots; class IfcRationalBSplineSurfaceWithKnots; class IfcRectangleHollowProfileDef; class IfcRectangleProfileDef; class IfcRectangularPyramid; class IfcRectangularTrimmedSurface; class IfcRecurrencePattern; class IfcReference; class IfcRegularTimeSeries; class IfcReinforcementBarProperties; class IfcReinforcementDefinitionProperties; class IfcReinforcingBar; class IfcReinforcingBarType; class IfcReinforcingElement; class IfcReinforcingElementType; class IfcReinforcingMesh; class IfcReinforcingMeshType; class IfcRelAggregates; class IfcRelAssigns; class IfcRelAssignsToActor; class IfcRelAssignsToControl; class IfcRelAssignsToGroup; class IfcRelAssignsToGroupByFactor; class IfcRelAssignsToProcess; class IfcRelAssignsToProduct; class IfcRelAssignsToResource; class IfcRelAssociates; class IfcRelAssociatesApproval; class IfcRelAssociatesClassification; class IfcRelAssociatesConstraint; class IfcRelAssociatesDocument; class IfcRelAssociatesLibrary; class IfcRelAssociatesMaterial; class IfcRelConnects; class IfcRelConnectsElements; class IfcRelConnectsPathElements; class IfcRelConnectsPortToElement; class IfcRelConnectsPorts; class IfcRelConnectsStructuralActivity; class IfcRelConnectsStructuralMember; class IfcRelConnectsWithEccentricity; class IfcRelConnectsWithRealizingElements; class IfcRelContainedInSpatialStructure; class IfcRelCoversBldgElements; class IfcRelCoversSpaces; class IfcRelDeclares; class IfcRelDecomposes; class IfcRelDefines; class IfcRelDefinesByObject; class IfcRelDefinesByProperties; class IfcRelDefinesByTemplate; class IfcRelDefinesByType; class IfcRelFillsElement; class IfcRelFlowControlElements; class IfcRelInterferesElements; class IfcRelNests; class IfcRelProjectsElement; class IfcRelReferencedInSpatialStructure; class IfcRelSequence; class IfcRelServicesBuildings; class IfcRelSpaceBoundary; class IfcRelSpaceBoundary1stLevel; class IfcRelSpaceBoundary2ndLevel; class IfcRelVoidsElement; class IfcRelationship; class IfcReparametrisedCompositeCurveSegment; class IfcRepresentation; class IfcRepresentationContext; class IfcRepresentationItem; class IfcRepresentationMap; class IfcResource; class IfcResourceApprovalRelationship; class IfcResourceConstraintRelationship; class IfcResourceLevelRelationship; class IfcResourceTime; class IfcRevolvedAreaSolid; class IfcRevolvedAreaSolidTapered; class IfcRightCircularCone; class IfcRightCircularCylinder; class IfcRoof; class IfcRoofType; class IfcRoot; class IfcRoundedRectangleProfileDef; class IfcSIUnit; class IfcSanitaryTerminal; class IfcSanitaryTerminalType; class IfcSchedulingTime; class IfcSectionProperties; class IfcSectionReinforcementProperties; class IfcSectionedSpine; class IfcSensor; class IfcSensorType; class IfcShadingDevice; class IfcShadingDeviceType; class IfcShapeAspect; class IfcShapeModel; class IfcShapeRepresentation; class IfcShellBasedSurfaceModel; class IfcSimpleProperty; class IfcSimplePropertyTemplate; class IfcSite; class IfcSlab; class IfcSlabElementedCase; class IfcSlabStandardCase; class IfcSlabType; class IfcSlippageConnectionCondition; class IfcSolarDevice; class IfcSolarDeviceType; class IfcSolidModel; class IfcSpace; class IfcSpaceHeater; class IfcSpaceHeaterType; class IfcSpaceType; class IfcSpatialElement; class IfcSpatialElementType; class IfcSpatialStructureElement; class IfcSpatialStructureElementType; class IfcSpatialZone; class IfcSpatialZoneType; class IfcSphere; class IfcStackTerminal; class IfcStackTerminalType; class IfcStair; class IfcStairFlight; class IfcStairFlightType; class IfcStairType; class IfcStructuralAction; class IfcStructuralActivity; class IfcStructuralAnalysisModel; class IfcStructuralConnection; class IfcStructuralConnectionCondition; class IfcStructuralCurveAction; class IfcStructuralCurveConnection; class IfcStructuralCurveMember; class IfcStructuralCurveMemberVarying; class IfcStructuralCurveReaction; class IfcStructuralItem; class IfcStructuralLinearAction; class IfcStructuralLoad; class IfcStructuralLoadCase; class IfcStructuralLoadConfiguration; class IfcStructuralLoadGroup; class IfcStructuralLoadLinearForce; class IfcStructuralLoadOrResult; class IfcStructuralLoadPlanarForce; class IfcStructuralLoadSingleDisplacement; class IfcStructuralLoadSingleDisplacementDistortion; class IfcStructuralLoadSingleForce; class IfcStructuralLoadSingleForceWarping; class IfcStructuralLoadStatic; class IfcStructuralLoadTemperature; class IfcStructuralMember; class IfcStructuralPlanarAction; class IfcStructuralPointAction; class IfcStructuralPointConnection; class IfcStructuralPointReaction; class IfcStructuralReaction; class IfcStructuralResultGroup; class IfcStructuralSurfaceAction; class IfcStructuralSurfaceConnection; class IfcStructuralSurfaceMember; class IfcStructuralSurfaceMemberVarying; class IfcStructuralSurfaceReaction; class IfcStyleModel; class IfcStyledItem; class IfcStyledRepresentation; class IfcSubContractResource; class IfcSubContractResourceType; class IfcSubedge; class IfcSurface; class IfcSurfaceCurveSweptAreaSolid; class IfcSurfaceFeature; class IfcSurfaceOfLinearExtrusion; class IfcSurfaceOfRevolution; class IfcSurfaceReinforcementArea; class IfcSurfaceStyle; class IfcSurfaceStyleLighting; class IfcSurfaceStyleRefraction; class IfcSurfaceStyleRendering; class IfcSurfaceStyleShading; class IfcSurfaceStyleWithTextures; class IfcSurfaceTexture; class IfcSweptAreaSolid; class IfcSweptDiskSolid; class IfcSweptDiskSolidPolygonal; class IfcSweptSurface; class IfcSwitchingDevice; class IfcSwitchingDeviceType; class IfcSystem; class IfcSystemFurnitureElement; class IfcSystemFurnitureElementType; class IfcTShapeProfileDef; class IfcTable; class IfcTableColumn; class IfcTableRow; class IfcTank; class IfcTankType; class IfcTask; class IfcTaskTime; class IfcTaskTimeRecurring; class IfcTaskType; class IfcTelecomAddress; class IfcTendon; class IfcTendonAnchor; class IfcTendonAnchorType; class IfcTendonType; class IfcTessellatedFaceSet; class IfcTessellatedItem; class IfcTextLiteral; class IfcTextLiteralWithExtent; class IfcTextStyle; class IfcTextStyleFontModel; class IfcTextStyleForDefinedFont; class IfcTextStyleTextModel; class IfcTextureCoordinate; class IfcTextureCoordinateGenerator; class IfcTextureMap; class IfcTextureVertex; class IfcTextureVertexList; class IfcTimePeriod; class IfcTimeSeries; class IfcTimeSeriesValue; class IfcTopologicalRepresentationItem; class IfcTopologyRepresentation; class IfcTransformer; class IfcTransformerType; class IfcTransportElement; class IfcTransportElementType; class IfcTrapeziumProfileDef; class IfcTriangulatedFaceSet; class IfcTrimmedCurve; class IfcTubeBundle; class IfcTubeBundleType; class IfcTypeObject; class IfcTypeProcess; class IfcTypeProduct; class IfcTypeResource; class IfcUShapeProfileDef; class IfcUnitAssignment; class IfcUnitaryControlElement; class IfcUnitaryControlElementType; class IfcUnitaryEquipment; class IfcUnitaryEquipmentType; class IfcValve; class IfcValveType; class IfcVector; class IfcVertex; class IfcVertexLoop; class IfcVertexPoint; class IfcVibrationIsolator; class IfcVibrationIsolatorType; class IfcVirtualElement; class IfcVirtualGridIntersection; class IfcVoidingFeature; class IfcWall; class IfcWallElementedCase; class IfcWallStandardCase; class IfcWallType; class IfcWasteTerminal; class IfcWasteTerminalType; class IfcWindow; class IfcWindowLiningProperties; class IfcWindowPanelProperties; class IfcWindowStandardCase; class IfcWindowStyle; class IfcWindowType; class IfcWorkCalendar; class IfcWorkControl; class IfcWorkPlan; class IfcWorkSchedule; class IfcWorkTime; class IfcZShapeProfileDef; class IfcZone; class IfcAbsorbedDoseMeasure; class IfcAccelerationMeasure; class IfcAmountOfSubstanceMeasure; class IfcAngularVelocityMeasure; class IfcArcIndex; class IfcAreaDensityMeasure; class IfcAreaMeasure; class IfcBinary; class IfcBoolean; class IfcBoxAlignment; class IfcCardinalPointReference; class IfcComplexNumber; class IfcCompoundPlaneAngleMeasure; class IfcContextDependentMeasure; class IfcCountMeasure; class IfcCurvatureMeasure; class IfcDate; class IfcDateTime; class IfcDayInMonthNumber; class IfcDayInWeekNumber; class IfcDescriptiveMeasure; class IfcDimensionCount; class IfcDoseEquivalentMeasure; class IfcDuration; class IfcDynamicViscosityMeasure; class IfcElectricCapacitanceMeasure; class IfcElectricChargeMeasure; class IfcElectricConductanceMeasure; class IfcElectricCurrentMeasure; class IfcElectricResistanceMeasure; class IfcElectricVoltageMeasure; class IfcEnergyMeasure; class IfcFontStyle; class IfcFontVariant; class IfcFontWeight; class IfcForceMeasure; class IfcFrequencyMeasure; class IfcGloballyUniqueId; class IfcHeatFluxDensityMeasure; class IfcHeatingValueMeasure; class IfcIdentifier; class IfcIlluminanceMeasure; class IfcInductanceMeasure; class IfcInteger; class IfcIntegerCountRateMeasure; class IfcIonConcentrationMeasure; class IfcIsothermalMoistureCapacityMeasure; class IfcKinematicViscosityMeasure; class IfcLabel; class IfcLanguageId; class IfcLengthMeasure; class IfcLineIndex; class IfcLinearForceMeasure; class IfcLinearMomentMeasure; class IfcLinearStiffnessMeasure; class IfcLinearVelocityMeasure; class IfcLogical; class IfcLuminousFluxMeasure; class IfcLuminousIntensityDistributionMeasure; class IfcLuminousIntensityMeasure; class IfcMagneticFluxDensityMeasure; class IfcMagneticFluxMeasure; class IfcMassDensityMeasure; class IfcMassFlowRateMeasure; class IfcMassMeasure; class IfcMassPerLengthMeasure; class IfcModulusOfElasticityMeasure; class IfcModulusOfLinearSubgradeReactionMeasure; class IfcModulusOfRotationalSubgradeReactionMeasure; class IfcModulusOfSubgradeReactionMeasure; class IfcMoistureDiffusivityMeasure; class IfcMolecularWeightMeasure; class IfcMomentOfInertiaMeasure; class IfcMonetaryMeasure; class IfcMonthInYearNumber; class IfcNonNegativeLengthMeasure; class IfcNormalisedRatioMeasure; class IfcNumericMeasure; class IfcPHMeasure; class IfcParameterValue; class IfcPlanarForceMeasure; class IfcPlaneAngleMeasure; class IfcPositiveInteger; class IfcPositiveLengthMeasure; class IfcPositivePlaneAngleMeasure; class IfcPositiveRatioMeasure; class IfcPowerMeasure; class IfcPresentableText; class IfcPressureMeasure; class IfcPropertySetDefinitionSet; class IfcRadioActivityMeasure; class IfcRatioMeasure; class IfcReal; class IfcRotationalFrequencyMeasure; class IfcRotationalMassMeasure; class IfcRotationalStiffnessMeasure; class IfcSectionModulusMeasure; class IfcSectionalAreaIntegralMeasure; class IfcShearModulusMeasure; class IfcSolidAngleMeasure; class IfcSoundPowerLevelMeasure; class IfcSoundPowerMeasure; class IfcSoundPressureLevelMeasure; class IfcSoundPressureMeasure; class IfcSpecificHeatCapacityMeasure; class IfcSpecularExponent; class IfcSpecularRoughness; class IfcStrippedOptional; class IfcTemperatureGradientMeasure; class IfcTemperatureRateOfChangeMeasure; class IfcText; class IfcTextAlignment; class IfcTextDecoration; class IfcTextFontName; class IfcTextTransformation; class IfcThermalAdmittanceMeasure; class IfcThermalConductivityMeasure; class IfcThermalExpansionCoefficientMeasure; class IfcThermalResistanceMeasure; class IfcThermalTransmittanceMeasure; class IfcThermodynamicTemperatureMeasure; class IfcTime; class IfcTimeMeasure; class IfcTimeStamp; class IfcTorqueMeasure; class IfcURIReference; class IfcVaporPermeabilityMeasure; class IfcVolumeMeasure; class IfcVolumetricFlowRateMeasure; class IfcWarpingConstantMeasure; class IfcWarpingMomentMeasure; +class IfcActionRequest; class IfcActor; class IfcActorRole; class IfcActuator; class IfcActuatorType; class IfcAddress; class IfcAdvancedBrep; class IfcAdvancedBrepWithVoids; class IfcAdvancedFace; class IfcAirTerminal; class IfcAirTerminalBox; class IfcAirTerminalBoxType; class IfcAirTerminalType; class IfcAirToAirHeatRecovery; class IfcAirToAirHeatRecoveryType; class IfcAlarm; class IfcAlarmType; class IfcAnnotation; class IfcAnnotationFillArea; class IfcApplication; class IfcAppliedValue; class IfcApproval; class IfcApprovalRelationship; class IfcArbitraryClosedProfileDef; class IfcArbitraryOpenProfileDef; class IfcArbitraryProfileDefWithVoids; class IfcAsset; class IfcAsymmetricIShapeProfileDef; class IfcAudioVisualAppliance; class IfcAudioVisualApplianceType; class IfcAxis1Placement; class IfcAxis2Placement2D; class IfcAxis2Placement3D; class IfcBSplineCurve; class IfcBSplineCurveWithKnots; class IfcBSplineSurface; class IfcBSplineSurfaceWithKnots; class IfcBeam; class IfcBeamStandardCase; class IfcBeamType; class IfcBlobTexture; class IfcBlock; class IfcBoiler; class IfcBoilerType; class IfcBooleanClippingResult; class IfcBooleanResult; class IfcBoundaryCondition; class IfcBoundaryCurve; class IfcBoundaryEdgeCondition; class IfcBoundaryFaceCondition; class IfcBoundaryNodeCondition; class IfcBoundaryNodeConditionWarping; class IfcBoundedCurve; class IfcBoundedSurface; class IfcBoundingBox; class IfcBoxedHalfSpace; class IfcBuilding; class IfcBuildingElement; class IfcBuildingElementPart; class IfcBuildingElementPartType; class IfcBuildingElementProxy; class IfcBuildingElementProxyType; class IfcBuildingElementType; class IfcBuildingStorey; class IfcBuildingSystem; class IfcBurner; class IfcBurnerType; class IfcCShapeProfileDef; class IfcCableCarrierFitting; class IfcCableCarrierFittingType; class IfcCableCarrierSegment; class IfcCableCarrierSegmentType; class IfcCableFitting; class IfcCableFittingType; class IfcCableSegment; class IfcCableSegmentType; class IfcCartesianPoint; class IfcCartesianPointList; class IfcCartesianPointList2D; class IfcCartesianPointList3D; class IfcCartesianTransformationOperator; class IfcCartesianTransformationOperator2D; class IfcCartesianTransformationOperator2DnonUniform; class IfcCartesianTransformationOperator3D; class IfcCartesianTransformationOperator3DnonUniform; class IfcCenterLineProfileDef; class IfcChiller; class IfcChillerType; class IfcChimney; class IfcChimneyType; class IfcCircle; class IfcCircleHollowProfileDef; class IfcCircleProfileDef; class IfcCivilElement; class IfcCivilElementType; class IfcClassification; class IfcClassificationReference; class IfcClosedShell; class IfcCoil; class IfcCoilType; class IfcColourRgb; class IfcColourRgbList; class IfcColourSpecification; class IfcColumn; class IfcColumnStandardCase; class IfcColumnType; class IfcCommunicationsAppliance; class IfcCommunicationsApplianceType; class IfcComplexProperty; class IfcComplexPropertyTemplate; class IfcCompositeCurve; class IfcCompositeCurveOnSurface; class IfcCompositeCurveSegment; class IfcCompositeProfileDef; class IfcCompressor; class IfcCompressorType; class IfcCondenser; class IfcCondenserType; class IfcConic; class IfcConnectedFaceSet; class IfcConnectionCurveGeometry; class IfcConnectionGeometry; class IfcConnectionPointEccentricity; class IfcConnectionPointGeometry; class IfcConnectionSurfaceGeometry; class IfcConnectionVolumeGeometry; class IfcConstraint; class IfcConstructionEquipmentResource; class IfcConstructionEquipmentResourceType; class IfcConstructionMaterialResource; class IfcConstructionMaterialResourceType; class IfcConstructionProductResource; class IfcConstructionProductResourceType; class IfcConstructionResource; class IfcConstructionResourceType; class IfcContext; class IfcContextDependentUnit; class IfcControl; class IfcController; class IfcControllerType; class IfcConversionBasedUnit; class IfcConversionBasedUnitWithOffset; class IfcCooledBeam; class IfcCooledBeamType; class IfcCoolingTower; class IfcCoolingTowerType; class IfcCoordinateOperation; class IfcCoordinateReferenceSystem; class IfcCostItem; class IfcCostSchedule; class IfcCostValue; class IfcCovering; class IfcCoveringType; class IfcCrewResource; class IfcCrewResourceType; class IfcCsgPrimitive3D; class IfcCsgSolid; class IfcCurrencyRelationship; class IfcCurtainWall; class IfcCurtainWallType; class IfcCurve; class IfcCurveBoundedPlane; class IfcCurveBoundedSurface; class IfcCurveStyle; class IfcCurveStyleFont; class IfcCurveStyleFontAndScaling; class IfcCurveStyleFontPattern; class IfcCylindricalSurface; class IfcDamper; class IfcDamperType; class IfcDerivedProfileDef; class IfcDerivedUnit; class IfcDerivedUnitElement; class IfcDimensionalExponents; class IfcDirection; class IfcDiscreteAccessory; class IfcDiscreteAccessoryType; class IfcDistributionChamberElement; class IfcDistributionChamberElementType; class IfcDistributionCircuit; class IfcDistributionControlElement; class IfcDistributionControlElementType; class IfcDistributionElement; class IfcDistributionElementType; class IfcDistributionFlowElement; class IfcDistributionFlowElementType; class IfcDistributionPort; class IfcDistributionSystem; class IfcDocumentInformation; class IfcDocumentInformationRelationship; class IfcDocumentReference; class IfcDoor; class IfcDoorLiningProperties; class IfcDoorPanelProperties; class IfcDoorStandardCase; class IfcDoorStyle; class IfcDoorType; class IfcDraughtingPreDefinedColour; class IfcDraughtingPreDefinedCurveFont; class IfcDuctFitting; class IfcDuctFittingType; class IfcDuctSegment; class IfcDuctSegmentType; class IfcDuctSilencer; class IfcDuctSilencerType; class IfcEdge; class IfcEdgeCurve; class IfcEdgeLoop; class IfcElectricAppliance; class IfcElectricApplianceType; class IfcElectricDistributionBoard; class IfcElectricDistributionBoardType; class IfcElectricFlowStorageDevice; class IfcElectricFlowStorageDeviceType; class IfcElectricGenerator; class IfcElectricGeneratorType; class IfcElectricMotor; class IfcElectricMotorType; class IfcElectricTimeControl; class IfcElectricTimeControlType; class IfcElement; class IfcElementAssembly; class IfcElementAssemblyType; class IfcElementComponent; class IfcElementComponentType; class IfcElementQuantity; class IfcElementType; class IfcElementarySurface; class IfcEllipse; class IfcEllipseProfileDef; class IfcEnergyConversionDevice; class IfcEnergyConversionDeviceType; class IfcEngine; class IfcEngineType; class IfcEvaporativeCooler; class IfcEvaporativeCoolerType; class IfcEvaporator; class IfcEvaporatorType; class IfcEvent; class IfcEventTime; class IfcEventType; class IfcExtendedProperties; class IfcExternalInformation; class IfcExternalReference; class IfcExternalReferenceRelationship; class IfcExternalSpatialElement; class IfcExternalSpatialStructureElement; class IfcExternallyDefinedHatchStyle; class IfcExternallyDefinedSurfaceStyle; class IfcExternallyDefinedTextFont; class IfcExtrudedAreaSolid; class IfcExtrudedAreaSolidTapered; class IfcFace; class IfcFaceBasedSurfaceModel; class IfcFaceBound; class IfcFaceOuterBound; class IfcFaceSurface; class IfcFacetedBrep; class IfcFacetedBrepWithVoids; class IfcFailureConnectionCondition; class IfcFan; class IfcFanType; class IfcFastener; class IfcFastenerType; class IfcFeatureElement; class IfcFeatureElementAddition; class IfcFeatureElementSubtraction; class IfcFillAreaStyle; class IfcFillAreaStyleHatching; class IfcFillAreaStyleTiles; class IfcFilter; class IfcFilterType; class IfcFireSuppressionTerminal; class IfcFireSuppressionTerminalType; class IfcFixedReferenceSweptAreaSolid; class IfcFlowController; class IfcFlowControllerType; class IfcFlowFitting; class IfcFlowFittingType; class IfcFlowInstrument; class IfcFlowInstrumentType; class IfcFlowMeter; class IfcFlowMeterType; class IfcFlowMovingDevice; class IfcFlowMovingDeviceType; class IfcFlowSegment; class IfcFlowSegmentType; class IfcFlowStorageDevice; class IfcFlowStorageDeviceType; class IfcFlowTerminal; class IfcFlowTerminalType; class IfcFlowTreatmentDevice; class IfcFlowTreatmentDeviceType; class IfcFooting; class IfcFootingType; class IfcFurnishingElement; class IfcFurnishingElementType; class IfcFurniture; class IfcFurnitureType; class IfcGeographicElement; class IfcGeographicElementType; class IfcGeometricCurveSet; class IfcGeometricRepresentationContext; class IfcGeometricRepresentationItem; class IfcGeometricRepresentationSubContext; class IfcGeometricSet; class IfcGrid; class IfcGridAxis; class IfcGridPlacement; class IfcGroup; class IfcHalfSpaceSolid; class IfcHeatExchanger; class IfcHeatExchangerType; class IfcHumidifier; class IfcHumidifierType; class IfcIShapeProfileDef; class IfcImageTexture; class IfcIndexedColourMap; class IfcIndexedPolyCurve; class IfcIndexedPolygonalFace; class IfcIndexedPolygonalFaceWithVoids; class IfcIndexedTextureMap; class IfcIndexedTriangleTextureMap; class IfcInterceptor; class IfcInterceptorType; class IfcIntersectionCurve; class IfcInventory; class IfcIrregularTimeSeries; class IfcIrregularTimeSeriesValue; class IfcJunctionBox; class IfcJunctionBoxType; class IfcLShapeProfileDef; class IfcLaborResource; class IfcLaborResourceType; class IfcLagTime; class IfcLamp; class IfcLampType; class IfcLibraryInformation; class IfcLibraryReference; class IfcLightDistributionData; class IfcLightFixture; class IfcLightFixtureType; class IfcLightIntensityDistribution; class IfcLightSource; class IfcLightSourceAmbient; class IfcLightSourceDirectional; class IfcLightSourceGoniometric; class IfcLightSourcePositional; class IfcLightSourceSpot; class IfcLine; class IfcLocalPlacement; class IfcLoop; class IfcManifoldSolidBrep; class IfcMapConversion; class IfcMappedItem; class IfcMaterial; class IfcMaterialClassificationRelationship; class IfcMaterialConstituent; class IfcMaterialConstituentSet; class IfcMaterialDefinition; class IfcMaterialDefinitionRepresentation; class IfcMaterialLayer; class IfcMaterialLayerSet; class IfcMaterialLayerSetUsage; class IfcMaterialLayerWithOffsets; class IfcMaterialList; class IfcMaterialProfile; class IfcMaterialProfileSet; class IfcMaterialProfileSetUsage; class IfcMaterialProfileSetUsageTapering; class IfcMaterialProfileWithOffsets; class IfcMaterialProperties; class IfcMaterialRelationship; class IfcMaterialUsageDefinition; class IfcMeasureWithUnit; class IfcMechanicalFastener; class IfcMechanicalFastenerType; class IfcMedicalDevice; class IfcMedicalDeviceType; class IfcMember; class IfcMemberStandardCase; class IfcMemberType; class IfcMetric; class IfcMirroredProfileDef; class IfcMonetaryUnit; class IfcMotorConnection; class IfcMotorConnectionType; class IfcNamedUnit; class IfcObject; class IfcObjectDefinition; class IfcObjectPlacement; class IfcObjective; class IfcOccupant; class IfcOffsetCurve2D; class IfcOffsetCurve3D; class IfcOpenShell; class IfcOpeningElement; class IfcOpeningStandardCase; class IfcOrganization; class IfcOrganizationRelationship; class IfcOrientedEdge; class IfcOuterBoundaryCurve; class IfcOutlet; class IfcOutletType; class IfcOwnerHistory; class IfcParameterizedProfileDef; class IfcPath; class IfcPcurve; class IfcPerformanceHistory; class IfcPermeableCoveringProperties; class IfcPermit; class IfcPerson; class IfcPersonAndOrganization; class IfcPhysicalComplexQuantity; class IfcPhysicalQuantity; class IfcPhysicalSimpleQuantity; class IfcPile; class IfcPileType; class IfcPipeFitting; class IfcPipeFittingType; class IfcPipeSegment; class IfcPipeSegmentType; class IfcPixelTexture; class IfcPlacement; class IfcPlanarBox; class IfcPlanarExtent; class IfcPlane; class IfcPlate; class IfcPlateStandardCase; class IfcPlateType; class IfcPoint; class IfcPointOnCurve; class IfcPointOnSurface; class IfcPolyLoop; class IfcPolygonalBoundedHalfSpace; class IfcPolygonalFaceSet; class IfcPolyline; class IfcPort; class IfcPostalAddress; class IfcPreDefinedColour; class IfcPreDefinedCurveFont; class IfcPreDefinedItem; class IfcPreDefinedProperties; class IfcPreDefinedPropertySet; class IfcPreDefinedTextFont; class IfcPresentationItem; class IfcPresentationLayerAssignment; class IfcPresentationLayerWithStyle; class IfcPresentationStyle; class IfcPresentationStyleAssignment; class IfcProcedure; class IfcProcedureType; class IfcProcess; class IfcProduct; class IfcProductDefinitionShape; class IfcProductRepresentation; class IfcProfileDef; class IfcProfileProperties; class IfcProject; class IfcProjectLibrary; class IfcProjectOrder; class IfcProjectedCRS; class IfcProjectionElement; class IfcProperty; class IfcPropertyAbstraction; class IfcPropertyBoundedValue; class IfcPropertyDefinition; class IfcPropertyDependencyRelationship; class IfcPropertyEnumeratedValue; class IfcPropertyEnumeration; class IfcPropertyListValue; class IfcPropertyReferenceValue; class IfcPropertySet; class IfcPropertySetDefinition; class IfcPropertySetTemplate; class IfcPropertySingleValue; class IfcPropertyTableValue; class IfcPropertyTemplate; class IfcPropertyTemplateDefinition; class IfcProtectiveDevice; class IfcProtectiveDeviceTrippingUnit; class IfcProtectiveDeviceTrippingUnitType; class IfcProtectiveDeviceType; class IfcProxy; class IfcPump; class IfcPumpType; class IfcQuantityArea; class IfcQuantityCount; class IfcQuantityLength; class IfcQuantitySet; class IfcQuantityTime; class IfcQuantityVolume; class IfcQuantityWeight; class IfcRailing; class IfcRailingType; class IfcRamp; class IfcRampFlight; class IfcRampFlightType; class IfcRampType; class IfcRationalBSplineCurveWithKnots; class IfcRationalBSplineSurfaceWithKnots; class IfcRectangleHollowProfileDef; class IfcRectangleProfileDef; class IfcRectangularPyramid; class IfcRectangularTrimmedSurface; class IfcRecurrencePattern; class IfcReference; class IfcRegularTimeSeries; class IfcReinforcementBarProperties; class IfcReinforcementDefinitionProperties; class IfcReinforcingBar; class IfcReinforcingBarType; class IfcReinforcingElement; class IfcReinforcingElementType; class IfcReinforcingMesh; class IfcReinforcingMeshType; class IfcRelAggregates; class IfcRelAssigns; class IfcRelAssignsToActor; class IfcRelAssignsToControl; class IfcRelAssignsToGroup; class IfcRelAssignsToGroupByFactor; class IfcRelAssignsToProcess; class IfcRelAssignsToProduct; class IfcRelAssignsToResource; class IfcRelAssociates; class IfcRelAssociatesApproval; class IfcRelAssociatesClassification; class IfcRelAssociatesConstraint; class IfcRelAssociatesDocument; class IfcRelAssociatesLibrary; class IfcRelAssociatesMaterial; class IfcRelConnects; class IfcRelConnectsElements; class IfcRelConnectsPathElements; class IfcRelConnectsPortToElement; class IfcRelConnectsPorts; class IfcRelConnectsStructuralActivity; class IfcRelConnectsStructuralMember; class IfcRelConnectsWithEccentricity; class IfcRelConnectsWithRealizingElements; class IfcRelContainedInSpatialStructure; class IfcRelCoversBldgElements; class IfcRelCoversSpaces; class IfcRelDeclares; class IfcRelDecomposes; class IfcRelDefines; class IfcRelDefinesByObject; class IfcRelDefinesByProperties; class IfcRelDefinesByTemplate; class IfcRelDefinesByType; class IfcRelFillsElement; class IfcRelFlowControlElements; class IfcRelInterferesElements; class IfcRelNests; class IfcRelProjectsElement; class IfcRelReferencedInSpatialStructure; class IfcRelSequence; class IfcRelServicesBuildings; class IfcRelSpaceBoundary; class IfcRelSpaceBoundary1stLevel; class IfcRelSpaceBoundary2ndLevel; class IfcRelVoidsElement; class IfcRelationship; class IfcReparametrisedCompositeCurveSegment; class IfcRepresentation; class IfcRepresentationContext; class IfcRepresentationItem; class IfcRepresentationMap; class IfcResource; class IfcResourceApprovalRelationship; class IfcResourceConstraintRelationship; class IfcResourceLevelRelationship; class IfcResourceTime; class IfcRevolvedAreaSolid; class IfcRevolvedAreaSolidTapered; class IfcRightCircularCone; class IfcRightCircularCylinder; class IfcRoof; class IfcRoofType; class IfcRoot; class IfcRoundedRectangleProfileDef; class IfcSIUnit; class IfcSanitaryTerminal; class IfcSanitaryTerminalType; class IfcSchedulingTime; class IfcSeamCurve; class IfcSectionProperties; class IfcSectionReinforcementProperties; class IfcSectionedSpine; class IfcSensor; class IfcSensorType; class IfcShadingDevice; class IfcShadingDeviceType; class IfcShapeAspect; class IfcShapeModel; class IfcShapeRepresentation; class IfcShellBasedSurfaceModel; class IfcSimpleProperty; class IfcSimplePropertyTemplate; class IfcSite; class IfcSlab; class IfcSlabElementedCase; class IfcSlabStandardCase; class IfcSlabType; class IfcSlippageConnectionCondition; class IfcSolarDevice; class IfcSolarDeviceType; class IfcSolidModel; class IfcSpace; class IfcSpaceHeater; class IfcSpaceHeaterType; class IfcSpaceType; class IfcSpatialElement; class IfcSpatialElementType; class IfcSpatialStructureElement; class IfcSpatialStructureElementType; class IfcSpatialZone; class IfcSpatialZoneType; class IfcSphere; class IfcSphericalSurface; class IfcStackTerminal; class IfcStackTerminalType; class IfcStair; class IfcStairFlight; class IfcStairFlightType; class IfcStairType; class IfcStructuralAction; class IfcStructuralActivity; class IfcStructuralAnalysisModel; class IfcStructuralConnection; class IfcStructuralConnectionCondition; class IfcStructuralCurveAction; class IfcStructuralCurveConnection; class IfcStructuralCurveMember; class IfcStructuralCurveMemberVarying; class IfcStructuralCurveReaction; class IfcStructuralItem; class IfcStructuralLinearAction; class IfcStructuralLoad; class IfcStructuralLoadCase; class IfcStructuralLoadConfiguration; class IfcStructuralLoadGroup; class IfcStructuralLoadLinearForce; class IfcStructuralLoadOrResult; class IfcStructuralLoadPlanarForce; class IfcStructuralLoadSingleDisplacement; class IfcStructuralLoadSingleDisplacementDistortion; class IfcStructuralLoadSingleForce; class IfcStructuralLoadSingleForceWarping; class IfcStructuralLoadStatic; class IfcStructuralLoadTemperature; class IfcStructuralMember; class IfcStructuralPlanarAction; class IfcStructuralPointAction; class IfcStructuralPointConnection; class IfcStructuralPointReaction; class IfcStructuralReaction; class IfcStructuralResultGroup; class IfcStructuralSurfaceAction; class IfcStructuralSurfaceConnection; class IfcStructuralSurfaceMember; class IfcStructuralSurfaceMemberVarying; class IfcStructuralSurfaceReaction; class IfcStyleModel; class IfcStyledItem; class IfcStyledRepresentation; class IfcSubContractResource; class IfcSubContractResourceType; class IfcSubedge; class IfcSurface; class IfcSurfaceCurve; class IfcSurfaceCurveSweptAreaSolid; class IfcSurfaceFeature; class IfcSurfaceOfLinearExtrusion; class IfcSurfaceOfRevolution; class IfcSurfaceReinforcementArea; class IfcSurfaceStyle; class IfcSurfaceStyleLighting; class IfcSurfaceStyleRefraction; class IfcSurfaceStyleRendering; class IfcSurfaceStyleShading; class IfcSurfaceStyleWithTextures; class IfcSurfaceTexture; class IfcSweptAreaSolid; class IfcSweptDiskSolid; class IfcSweptDiskSolidPolygonal; class IfcSweptSurface; class IfcSwitchingDevice; class IfcSwitchingDeviceType; class IfcSystem; class IfcSystemFurnitureElement; class IfcSystemFurnitureElementType; class IfcTShapeProfileDef; class IfcTable; class IfcTableColumn; class IfcTableRow; class IfcTank; class IfcTankType; class IfcTask; class IfcTaskTime; class IfcTaskTimeRecurring; class IfcTaskType; class IfcTelecomAddress; class IfcTendon; class IfcTendonAnchor; class IfcTendonAnchorType; class IfcTendonType; class IfcTessellatedFaceSet; class IfcTessellatedItem; class IfcTextLiteral; class IfcTextLiteralWithExtent; class IfcTextStyle; class IfcTextStyleFontModel; class IfcTextStyleForDefinedFont; class IfcTextStyleTextModel; class IfcTextureCoordinate; class IfcTextureCoordinateGenerator; class IfcTextureMap; class IfcTextureVertex; class IfcTextureVertexList; class IfcTimePeriod; class IfcTimeSeries; class IfcTimeSeriesValue; class IfcTopologicalRepresentationItem; class IfcTopologyRepresentation; class IfcToroidalSurface; class IfcTransformer; class IfcTransformerType; class IfcTransportElement; class IfcTransportElementType; class IfcTrapeziumProfileDef; class IfcTriangulatedFaceSet; class IfcTrimmedCurve; class IfcTubeBundle; class IfcTubeBundleType; class IfcTypeObject; class IfcTypeProcess; class IfcTypeProduct; class IfcTypeResource; class IfcUShapeProfileDef; class IfcUnitAssignment; class IfcUnitaryControlElement; class IfcUnitaryControlElementType; class IfcUnitaryEquipment; class IfcUnitaryEquipmentType; class IfcValve; class IfcValveType; class IfcVector; class IfcVertex; class IfcVertexLoop; class IfcVertexPoint; class IfcVibrationIsolator; class IfcVibrationIsolatorType; class IfcVirtualElement; class IfcVirtualGridIntersection; class IfcVoidingFeature; class IfcWall; class IfcWallElementedCase; class IfcWallStandardCase; class IfcWallType; class IfcWasteTerminal; class IfcWasteTerminalType; class IfcWindow; class IfcWindowLiningProperties; class IfcWindowPanelProperties; class IfcWindowStandardCase; class IfcWindowStyle; class IfcWindowType; class IfcWorkCalendar; class IfcWorkControl; class IfcWorkPlan; class IfcWorkSchedule; class IfcWorkTime; class IfcZShapeProfileDef; class IfcZone; class IfcAbsorbedDoseMeasure; class IfcAccelerationMeasure; class IfcAmountOfSubstanceMeasure; class IfcAngularVelocityMeasure; class IfcArcIndex; class IfcAreaDensityMeasure; class IfcAreaMeasure; class IfcBinary; class IfcBoolean; class IfcBoxAlignment; class IfcCardinalPointReference; class IfcComplexNumber; class IfcCompoundPlaneAngleMeasure; class IfcContextDependentMeasure; class IfcCountMeasure; class IfcCurvatureMeasure; class IfcDate; class IfcDateTime; class IfcDayInMonthNumber; class IfcDayInWeekNumber; class IfcDescriptiveMeasure; class IfcDimensionCount; class IfcDoseEquivalentMeasure; class IfcDuration; class IfcDynamicViscosityMeasure; class IfcElectricCapacitanceMeasure; class IfcElectricChargeMeasure; class IfcElectricConductanceMeasure; class IfcElectricCurrentMeasure; class IfcElectricResistanceMeasure; class IfcElectricVoltageMeasure; class IfcEnergyMeasure; class IfcFontStyle; class IfcFontVariant; class IfcFontWeight; class IfcForceMeasure; class IfcFrequencyMeasure; class IfcGloballyUniqueId; class IfcHeatFluxDensityMeasure; class IfcHeatingValueMeasure; class IfcIdentifier; class IfcIlluminanceMeasure; class IfcInductanceMeasure; class IfcInteger; class IfcIntegerCountRateMeasure; class IfcIonConcentrationMeasure; class IfcIsothermalMoistureCapacityMeasure; class IfcKinematicViscosityMeasure; class IfcLabel; class IfcLanguageId; class IfcLengthMeasure; class IfcLineIndex; class IfcLinearForceMeasure; class IfcLinearMomentMeasure; class IfcLinearStiffnessMeasure; class IfcLinearVelocityMeasure; class IfcLogical; class IfcLuminousFluxMeasure; class IfcLuminousIntensityDistributionMeasure; class IfcLuminousIntensityMeasure; class IfcMagneticFluxDensityMeasure; class IfcMagneticFluxMeasure; class IfcMassDensityMeasure; class IfcMassFlowRateMeasure; class IfcMassMeasure; class IfcMassPerLengthMeasure; class IfcModulusOfElasticityMeasure; class IfcModulusOfLinearSubgradeReactionMeasure; class IfcModulusOfRotationalSubgradeReactionMeasure; class IfcModulusOfSubgradeReactionMeasure; class IfcMoistureDiffusivityMeasure; class IfcMolecularWeightMeasure; class IfcMomentOfInertiaMeasure; class IfcMonetaryMeasure; class IfcMonthInYearNumber; class IfcNonNegativeLengthMeasure; class IfcNormalisedRatioMeasure; class IfcNumericMeasure; class IfcPHMeasure; class IfcParameterValue; class IfcPlanarForceMeasure; class IfcPlaneAngleMeasure; class IfcPositiveInteger; class IfcPositiveLengthMeasure; class IfcPositivePlaneAngleMeasure; class IfcPositiveRatioMeasure; class IfcPowerMeasure; class IfcPresentableText; class IfcPressureMeasure; class IfcPropertySetDefinitionSet; class IfcRadioActivityMeasure; class IfcRatioMeasure; class IfcReal; class IfcRotationalFrequencyMeasure; class IfcRotationalMassMeasure; class IfcRotationalStiffnessMeasure; class IfcSectionModulusMeasure; class IfcSectionalAreaIntegralMeasure; class IfcShearModulusMeasure; class IfcSolidAngleMeasure; class IfcSoundPowerLevelMeasure; class IfcSoundPowerMeasure; class IfcSoundPressureLevelMeasure; class IfcSoundPressureMeasure; class IfcSpecificHeatCapacityMeasure; class IfcSpecularExponent; class IfcSpecularRoughness; class IfcTemperatureGradientMeasure; class IfcTemperatureRateOfChangeMeasure; class IfcText; class IfcTextAlignment; class IfcTextDecoration; class IfcTextFontName; class IfcTextTransformation; class IfcThermalAdmittanceMeasure; class IfcThermalConductivityMeasure; class IfcThermalExpansionCoefficientMeasure; class IfcThermalResistanceMeasure; class IfcThermalTransmittanceMeasure; class IfcThermodynamicTemperatureMeasure; class IfcTime; class IfcTimeMeasure; class IfcTimeStamp; class IfcTorqueMeasure; class IfcURIReference; class IfcVaporPermeabilityMeasure; class IfcVolumeMeasure; class IfcVolumetricFlowRateMeasure; class IfcWarpingConstantMeasure; class IfcWarpingMomentMeasure; /// The actor select type allows a person, or an organization, or a person associated with an organization to be referenced. /// @@ -1028,7 +1028,7 @@ namespace IfcBuildingElementProxyTypeEnum { /// USERDEFINED /// /// NOTDEFINED -typedef enum {IfcBuildingElementProxyType_COMPLEX, IfcBuildingElementProxyType_ELEMENT, IfcBuildingElementProxyType_PARTIAL, IfcBuildingElementProxyType_PROVISIONFORVOID, IfcBuildingElementProxyType_USERDEFINED, IfcBuildingElementProxyType_NOTDEFINED} IfcBuildingElementProxyTypeEnum; +typedef enum {IfcBuildingElementProxyType_COMPLEX, IfcBuildingElementProxyType_ELEMENT, IfcBuildingElementProxyType_PARTIAL, IfcBuildingElementProxyType_PROVISIONFORVOID, IfcBuildingElementProxyType_PROVISIONFORSPACE, IfcBuildingElementProxyType_USERDEFINED, IfcBuildingElementProxyType_NOTDEFINED} IfcBuildingElementProxyTypeEnum; IFC_PARSE_API const char* ToString(IfcBuildingElementProxyTypeEnum v); IFC_PARSE_API IfcBuildingElementProxyTypeEnum FromString(const std::string& s); } @@ -2598,7 +2598,7 @@ namespace IfcExternalSpatialElementTypeEnum { /// /// HISTORY New enumeration /// in IFC2x4. -typedef enum {IfcExternalSpatialElementType_EXTERNAL, IfcExternalSpatialElementType_EXTERNAL_EARTH, IfcExternalSpatialElementType_EXTERNAL_WATER, IfcExternalSpatialElementType_EXTERNAL_FIRE, IfcExternalSpatialElementType_USERDEFINED, IfcExternalSpatialElementType_NOTDEFIEND} IfcExternalSpatialElementTypeEnum; +typedef enum {IfcExternalSpatialElementType_EXTERNAL, IfcExternalSpatialElementType_EXTERNAL_EARTH, IfcExternalSpatialElementType_EXTERNAL_WATER, IfcExternalSpatialElementType_EXTERNAL_FIRE, IfcExternalSpatialElementType_USERDEFINED, IfcExternalSpatialElementType_NOTDEFINED} IfcExternalSpatialElementTypeEnum; IFC_PARSE_API const char* ToString(IfcExternalSpatialElementTypeEnum v); IFC_PARSE_API IfcExternalSpatialElementTypeEnum FromString(const std::string& s); } @@ -3801,6 +3801,12 @@ typedef enum {IfcPlateType_CURTAIN_PANEL, IfcPlateType_SHEET, IfcPlateType_USERD IFC_PARSE_API const char* ToString(IfcPlateTypeEnum v); IFC_PARSE_API IfcPlateTypeEnum FromString(const std::string& s); } +namespace IfcPreferredSurfaceCurveRepresentation { + +typedef enum {IfcPreferredSurfaceCurveRepresentation_CURVE3D, IfcPreferredSurfaceCurveRepresentation_PCURVE_S1, IfcPreferredSurfaceCurveRepresentation_PCURVE_S2} IfcPreferredSurfaceCurveRepresentation; +IFC_PARSE_API const char* ToString(IfcPreferredSurfaceCurveRepresentation v); +IFC_PARSE_API IfcPreferredSurfaceCurveRepresentation FromString(const std::string& s); +} namespace IfcProcedureTypeEnum { /// The IfcProcedureTypeEnum defines the range of different types of procedure that can be specified. /// @@ -4425,7 +4431,7 @@ namespace IfcSensorTypeEnum { /// WINDSENSOR: A device that senses or detects airflow speed and direction. /// USERDEFINED: User-defined type. /// NOTDEFINED: Undefined type. -typedef enum {IfcSensorType_CO2SENSOR, IfcSensorType_CONDUCTANCESENSOR, IfcSensorType_CONTACTSENSOR, IfcSensorType_FIRESENSOR, IfcSensorType_FLOWSENSOR, IfcSensorType_FROSTSENSOR, IfcSensorType_GASSENSOR, IfcSensorType_HEATSENSOR, IfcSensorType_HUMIDITYSENSOR, IfcSensorType_IDENTIFIERSENSOR, IfcSensorType_IONCONCENTRATIONSENSOR, IfcSensorType_LEVELSENSOR, IfcSensorType_LIGHTSENSOR, IfcSensorType_MOISTURESENSOR, IfcSensorType_MOVEMENTSENSOR, IfcSensorType_PHSENSOR, IfcSensorType_PRESSURESENSOR, IfcSensorType_RADIATIONSENSOR, IfcSensorType_RADIOACTIVITYSENSOR, IfcSensorType_SMOKESENSOR, IfcSensorType_SOUNDSENSOR, IfcSensorType_TEMPERATURESENSOR, IfcSensorType_WINDSENSOR, IfcSensorType_USERDEFINED, IfcSensorType_NOTDEFINED} IfcSensorTypeEnum; +typedef enum {IfcSensorType_COSENSOR, IfcSensorType_CO2SENSOR, IfcSensorType_CONDUCTANCESENSOR, IfcSensorType_CONTACTSENSOR, IfcSensorType_FIRESENSOR, IfcSensorType_FLOWSENSOR, IfcSensorType_FROSTSENSOR, IfcSensorType_GASSENSOR, IfcSensorType_HEATSENSOR, IfcSensorType_HUMIDITYSENSOR, IfcSensorType_IDENTIFIERSENSOR, IfcSensorType_IONCONCENTRATIONSENSOR, IfcSensorType_LEVELSENSOR, IfcSensorType_LIGHTSENSOR, IfcSensorType_MOISTURESENSOR, IfcSensorType_MOVEMENTSENSOR, IfcSensorType_PHSENSOR, IfcSensorType_PRESSURESENSOR, IfcSensorType_RADIATIONSENSOR, IfcSensorType_RADIOACTIVITYSENSOR, IfcSensorType_SMOKESENSOR, IfcSensorType_SOUNDSENSOR, IfcSensorType_TEMPERATURESENSOR, IfcSensorType_WINDSENSOR, IfcSensorType_USERDEFINED, IfcSensorType_NOTDEFINED} IfcSensorTypeEnum; IFC_PARSE_API const char* ToString(IfcSensorTypeEnum v); IFC_PARSE_API IfcSensorTypeEnum FromString(const std::string& s); } @@ -7683,18 +7689,6 @@ public: IfcSpecularRoughness (double v); operator double() const; }; - -class IFC_PARSE_API IfcStrippedOptional : public IfcUtil::IfcBaseType { -public: - virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const; - virtual Argument* getArgument(unsigned int i) const; - bool is(Type::Enum v) const; - Type::Enum type() const; - static Type::Enum Class(); - explicit IfcStrippedOptional (IfcEntityInstanceData* e); - IfcStrippedOptional (bool v); - operator bool() const; -}; /// The temperature gradient measures the difference of a temperature per lenght, as for instance used in an external wall or its layers. It is usually measured in K/m. /// /// Type: REAL @@ -22026,6 +22020,41 @@ public: IfcIShapeProfileDef (IfcProfileTypeEnum::IfcProfileTypeEnum v1_ProfileType, boost::optional< std::string > v2_ProfileName, IfcAxis2Placement2D* v3_Position, double v4_OverallWidth, double v5_OverallDepth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_FlangeSlope); typedef IfcTemplatedEntityList< IfcIShapeProfileDef > list; }; + +class IFC_PARSE_API IfcIndexedPolygonalFace : public IfcTessellatedItem { +public: + std::vector< int > /*[3:?]*/ CoordIndex() const; + void setCoordIndex(std::vector< int > /*[3:?]*/ v); + virtual unsigned int getArgumentCount() const { return 1; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 0: return IfcUtil::Argument_AGGREGATE_OF_INT; } return IfcTessellatedItem::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 0: return Type::IfcPositiveInteger; } return IfcTessellatedItem::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 0: return "CoordIndex"; } return IfcTessellatedItem::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + IfcTemplatedEntityList< IfcPolygonalFaceSet >::ptr ToFaceSet() const; // INVERSE IfcPolygonalFaceSet::Faces + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcIndexedPolygonalFace (IfcEntityInstanceData* e); + IfcIndexedPolygonalFace (std::vector< int > /*[3:?]*/ v1_CoordIndex); + typedef IfcTemplatedEntityList< IfcIndexedPolygonalFace > list; +}; + +class IFC_PARSE_API IfcIndexedPolygonalFaceWithVoids : public IfcIndexedPolygonalFace { +public: + std::vector< std::vector< int > > InnerCoordIndices() const; + void setInnerCoordIndices(std::vector< std::vector< int > > v); + virtual unsigned int getArgumentCount() const { return 2; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 1: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT; } return IfcIndexedPolygonalFace::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 1: return Type::IfcPositiveInteger; } return IfcIndexedPolygonalFace::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 1: return "InnerCoordIndices"; } return IfcIndexedPolygonalFace::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcIndexedPolygonalFaceWithVoids (IfcEntityInstanceData* e); + IfcIndexedPolygonalFaceWithVoids (std::vector< int > /*[3:?]*/ v1_CoordIndex, std::vector< std::vector< int > > v2_InnerCoordIndices); + typedef IfcTemplatedEntityList< IfcIndexedPolygonalFaceWithVoids > list; +}; /// IfcLShapeProfileDef /// defines a section profile that provides the defining parameters of an /// L-shaped section (equilateral L profiles are also covered by this @@ -27238,6 +27267,23 @@ public: IfcSphere (IfcAxis2Placement3D* v1_Position, double v2_Radius); typedef IfcTemplatedEntityList< IfcSphere > list; }; + +class IFC_PARSE_API IfcSphericalSurface : public IfcElementarySurface { +public: + double Radius() const; + void setRadius(double v); + virtual unsigned int getArgumentCount() const { return 2; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 1: return IfcUtil::Argument_DOUBLE; } return IfcElementarySurface::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 1: return Type::IfcPositiveLengthMeasure; } return IfcElementarySurface::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 1: return "Radius"; } return IfcElementarySurface::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcSphericalSurface (IfcEntityInstanceData* e); + IfcSphericalSurface (IfcAxis2Placement3D* v1_Position, double v2_Radius); + typedef IfcTemplatedEntityList< IfcSphericalSurface > list; +}; /// Definition from IAI: The abstract entity IfcStructuralActivity combines the definition of actions (such as forces, displacements, etc.) and reactions (support reactions, internal forces, deflections, etc.) which are specified by using the basic load definitions from the IfcStructuralLoadResource. /// /// The differentiation between actions and reactions is realized by instantiating objects either from subclasses of IfcStructuralAction or IfcStructuralReaction respectively. They inherit commonly needed attributes from the abstract superclass IfcStructuralActivity, notably the relationship which connects actions or reactions with connections, analysis members, or elements (subtypes of IfcStructuralItem or IfcElement). @@ -27666,6 +27712,27 @@ public: IfcSubContractResourceType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< IfcTemplatedEntityList< IfcAppliedValue >::ptr > v10_BaseCosts, IfcPhysicalQuantity* v11_BaseQuantity, IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum v12_PredefinedType); typedef IfcTemplatedEntityList< IfcSubContractResourceType > list; }; + +class IFC_PARSE_API IfcSurfaceCurve : public IfcCurve { +public: + IfcCurve* Curve3D() const; + void setCurve3D(IfcCurve* v); + IfcTemplatedEntityList< IfcPcurve >::ptr AssociatedGeometry() const; + void setAssociatedGeometry(IfcTemplatedEntityList< IfcPcurve >::ptr v); + IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation MasterRepresentation() const; + void setMasterRepresentation(IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v); + virtual unsigned int getArgumentCount() const { return 3; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 0: return IfcUtil::Argument_ENTITY_INSTANCE; case 1: return IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE; case 2: return IfcUtil::Argument_ENUMERATION; } return IfcCurve::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 0: return Type::IfcCurve; case 1: return Type::IfcPcurve; case 2: return Type::IfcPreferredSurfaceCurveRepresentation; } return IfcCurve::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 0: return "Curve3D"; case 1: return "AssociatedGeometry"; case 2: return "MasterRepresentation"; } return IfcCurve::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcSurfaceCurve (IfcEntityInstanceData* e); + IfcSurfaceCurve (IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation); + typedef IfcTemplatedEntityList< IfcSurfaceCurve > list; +}; /// The IfcSurfaceCurveSweptAreaSolid is the result of /// sweeping an area along a directrix that lies on a reference /// surface. The swept area is provided by an IfcProfileDef @@ -28253,18 +28320,10 @@ class IFC_PARSE_API IfcTessellatedFaceSet : public IfcTessellatedItem { public: IfcCartesianPointList3D* Coordinates() const; void setCoordinates(IfcCartesianPointList3D* v); - /// Whether the optional attribute Normals is defined for this IfcTessellatedFaceSet - bool hasNormals() const; - std::vector< std::vector< double > > Normals() const; - void setNormals(std::vector< std::vector< double > > v); - /// Whether the optional attribute Closed is defined for this IfcTessellatedFaceSet - bool hasClosed() const; - bool Closed() const; - void setClosed(bool v); - virtual unsigned int getArgumentCount() const { return 3; } - virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 0: return IfcUtil::Argument_ENTITY_INSTANCE; case 1: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_DOUBLE; case 2: return IfcUtil::Argument_BOOL; } return IfcTessellatedItem::getArgumentType(i); } - virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 0: return Type::IfcCartesianPointList3D; case 1: return Type::IfcParameterValue; case 2: return Type::IfcBoolean; } return IfcTessellatedItem::getArgumentEntity(i); } - virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 0: return "Coordinates"; case 1: return "Normals"; case 2: return "Closed"; } return IfcTessellatedItem::getArgumentName(i); } + virtual unsigned int getArgumentCount() const { return 1; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 0: return IfcUtil::Argument_ENTITY_INSTANCE; } return IfcTessellatedItem::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 0: return Type::IfcCartesianPointList3D; } return IfcTessellatedItem::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 0: return "Coordinates"; } return IfcTessellatedItem::getArgumentName(i); } virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } IfcTemplatedEntityList< IfcIndexedColourMap >::ptr HasColours() const; // INVERSE IfcIndexedColourMap::MappedTo IfcTemplatedEntityList< IfcIndexedTextureMap >::ptr HasTextures() const; // INVERSE IfcIndexedTextureMap::MappedTo @@ -28272,9 +28331,28 @@ public: Type::Enum type() const; static Type::Enum Class(); IfcTessellatedFaceSet (IfcEntityInstanceData* e); - IfcTessellatedFaceSet (IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed); + IfcTessellatedFaceSet (IfcCartesianPointList3D* v1_Coordinates); typedef IfcTemplatedEntityList< IfcTessellatedFaceSet > list; }; + +class IFC_PARSE_API IfcToroidalSurface : public IfcElementarySurface { +public: + double MajorRadius() const; + void setMajorRadius(double v); + double MinorRadius() const; + void setMinorRadius(double v); + virtual unsigned int getArgumentCount() const { return 3; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 1: return IfcUtil::Argument_DOUBLE; case 2: return IfcUtil::Argument_DOUBLE; } return IfcElementarySurface::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 1: return Type::IfcPositiveLengthMeasure; case 2: return Type::IfcPositiveLengthMeasure; } return IfcElementarySurface::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 1: return "MajorRadius"; case 2: return "MinorRadius"; } return IfcElementarySurface::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcToroidalSurface (IfcEntityInstanceData* e); + IfcToroidalSurface (IfcAxis2Placement3D* v1_Position, double v2_MajorRadius, double v3_MinorRadius); + typedef IfcTemplatedEntityList< IfcToroidalSurface > list; +}; /// Definition from IAI: The element type /// IfcTransportElementType defines commonly shared /// information for occurrences of transport elements. The set of @@ -28358,22 +28436,30 @@ public: class IFC_PARSE_API IfcTriangulatedFaceSet : public IfcTessellatedFaceSet { public: + /// Whether the optional attribute Normals is defined for this IfcTriangulatedFaceSet + bool hasNormals() const; + std::vector< std::vector< double > > Normals() const; + void setNormals(std::vector< std::vector< double > > v); + /// Whether the optional attribute Closed is defined for this IfcTriangulatedFaceSet + bool hasClosed() const; + bool Closed() const; + void setClosed(bool v); std::vector< std::vector< int > > CoordIndex() const; void setCoordIndex(std::vector< std::vector< int > > v); - /// Whether the optional attribute NormalIndex is defined for this IfcTriangulatedFaceSet - bool hasNormalIndex() const; - std::vector< std::vector< int > > NormalIndex() const; - void setNormalIndex(std::vector< std::vector< int > > v); + /// Whether the optional attribute PnIndex is defined for this IfcTriangulatedFaceSet + bool hasPnIndex() const; + std::vector< int > /*[1:?]*/ PnIndex() const; + void setPnIndex(std::vector< int > /*[1:?]*/ v); virtual unsigned int getArgumentCount() const { return 5; } - virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 3: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT; case 4: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT; } return IfcTessellatedFaceSet::getArgumentType(i); } - virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 3: return Type::IfcPositiveInteger; case 4: return Type::IfcPositiveInteger; } return IfcTessellatedFaceSet::getArgumentEntity(i); } - virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 3: return "CoordIndex"; case 4: return "NormalIndex"; } return IfcTessellatedFaceSet::getArgumentName(i); } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 1: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_DOUBLE; case 2: return IfcUtil::Argument_BOOL; case 3: return IfcUtil::Argument_AGGREGATE_OF_AGGREGATE_OF_INT; case 4: return IfcUtil::Argument_AGGREGATE_OF_INT; } return IfcTessellatedFaceSet::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 1: return Type::IfcParameterValue; case 2: return Type::IfcBoolean; case 3: return Type::IfcPositiveInteger; case 4: return Type::IfcPositiveInteger; } return IfcTessellatedFaceSet::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 1: return "Normals"; case 2: return "Closed"; case 3: return "CoordIndex"; case 4: return "PnIndex"; } return IfcTessellatedFaceSet::getArgumentName(i); } virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } bool is(Type::Enum v) const; Type::Enum type() const; static Type::Enum Class(); IfcTriangulatedFaceSet (IfcEntityInstanceData* e); - IfcTriangulatedFaceSet (IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< std::vector< int > > > v5_NormalIndex); + IfcTriangulatedFaceSet (IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex); typedef IfcTemplatedEntityList< IfcTriangulatedFaceSet > list; }; /// The window lining is the outer @@ -33372,6 +33458,21 @@ public: IfcInterceptorType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcInterceptorTypeEnum::IfcInterceptorTypeEnum v10_PredefinedType); typedef IfcTemplatedEntityList< IfcInterceptorType > list; }; + +class IFC_PARSE_API IfcIntersectionCurve : public IfcSurfaceCurve { +public: + virtual unsigned int getArgumentCount() const { return 3; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { return IfcSurfaceCurve::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { return IfcSurfaceCurve::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { return IfcSurfaceCurve::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcIntersectionCurve (IfcEntityInstanceData* e); + IfcIntersectionCurve (IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation); + typedef IfcTemplatedEntityList< IfcIntersectionCurve > list; +}; /// An inventory is a list of items within an enterprise. /// /// Various types of inventory can be included. These are identified by the range of values within the inventory type enumeration which includes space, asset, and furniture. User defined inventories can also be defined for lists of particular types of element such as may be required in operating and maintenance instructions. Such inventories should be constrained to contain a list of elements of a restricted type.There are a number of actors that can be associated with an inventory, each actor having a role. Actors within the scope of the project are indicated using the IfcRelAssignsToActor relationship in which case roles should be defined through the IfcActorRole class; otherwise principal actors are identified as attributes of the class. In the existence of both, direct attributes take precedence.There are a number of costs that can be associated with an inventory, each cost having a role. These are specified through the CurrentValue and OriginalValue attributes.HISTORY: New entity in IFC2.0. Modified in IFC2x4 to make all attributes optional and remove Where Rule. @@ -34721,6 +34822,31 @@ public: IfcPlateType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcPlateTypeEnum::IfcPlateTypeEnum v10_PredefinedType); typedef IfcTemplatedEntityList< IfcPlateType > list; }; + +class IFC_PARSE_API IfcPolygonalFaceSet : public IfcTessellatedFaceSet { +public: + /// Whether the optional attribute Closed is defined for this IfcPolygonalFaceSet + bool hasClosed() const; + bool Closed() const; + void setClosed(bool v); + IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr Faces() const; + void setFaces(IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr v); + /// Whether the optional attribute PnIndex is defined for this IfcPolygonalFaceSet + bool hasPnIndex() const; + std::vector< int > /*[1:?]*/ PnIndex() const; + void setPnIndex(std::vector< int > /*[1:?]*/ v); + virtual unsigned int getArgumentCount() const { return 4; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 1: return IfcUtil::Argument_BOOL; case 2: return IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE; case 3: return IfcUtil::Argument_AGGREGATE_OF_INT; } return IfcTessellatedFaceSet::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 1: return Type::IfcBoolean; case 2: return Type::IfcIndexedPolygonalFace; case 3: return Type::IfcPositiveInteger; } return IfcTessellatedFaceSet::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 1: return "Closed"; case 2: return "Faces"; case 3: return "PnIndex"; } return IfcTessellatedFaceSet::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcPolygonalFaceSet (IfcEntityInstanceData* e); + IfcPolygonalFaceSet (IfcCartesianPointList3D* v1_Coordinates, boost::optional< bool > v2_Closed, IfcTemplatedEntityList< IfcIndexedPolygonalFace >::ptr v3_Faces, boost::optional< std::vector< int > /*[1:?]*/ > v4_PnIndex); + typedef IfcTemplatedEntityList< IfcPolygonalFaceSet > list; +}; /// Definition from ISO/CD 10303-42:1992: A polyline /// is a bounded curve of n - 1 linear segments, defined by a /// list of n points, P1, P2 ... Pn. @@ -35750,6 +35876,21 @@ public: IfcSanitaryTerminalType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum v10_PredefinedType); typedef IfcTemplatedEntityList< IfcSanitaryTerminalType > list; }; + +class IFC_PARSE_API IfcSeamCurve : public IfcSurfaceCurve { +public: + virtual unsigned int getArgumentCount() const { return 3; } + virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { return IfcSurfaceCurve::getArgumentType(i); } + virtual Type::Enum getArgumentEntity(unsigned int i) const { return IfcSurfaceCurve::getArgumentEntity(i); } + virtual const char* getArgumentName(unsigned int i) const { return IfcSurfaceCurve::getArgumentName(i); } + virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } + bool is(Type::Enum v) const; + Type::Enum type() const; + static Type::Enum Class(); + IfcSeamCurve (IfcEntityInstanceData* e); + IfcSeamCurve (IfcCurve* v1_Curve3D, IfcTemplatedEntityList< IfcPcurve >::ptr v2_AssociatedGeometry, IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation v3_MasterRepresentation); + typedef IfcTemplatedEntityList< IfcSeamCurve > list; +}; /// Definition from IAI: The IfcShadingDeviceType /// defines a list of commonly shared property set definitions of a /// shading device element and an optional set of product @@ -37787,20 +37928,20 @@ public: bool hasCrossSectionArea() const; double CrossSectionArea() const; void setCrossSectionArea(double v); - /// Whether the optional attribute SheethDiameter is defined for this IfcTendonType - bool hasSheethDiameter() const; - double SheethDiameter() const; - void setSheethDiameter(double v); + /// Whether the optional attribute SheathDiameter is defined for this IfcTendonType + bool hasSheathDiameter() const; + double SheathDiameter() const; + void setSheathDiameter(double v); virtual unsigned int getArgumentCount() const { return 13; } virtual IfcUtil::ArgumentType getArgumentType(unsigned int i) const { switch (i) {case 9: return IfcUtil::Argument_ENUMERATION; case 10: return IfcUtil::Argument_DOUBLE; case 11: return IfcUtil::Argument_DOUBLE; case 12: return IfcUtil::Argument_DOUBLE; } return IfcReinforcingElementType::getArgumentType(i); } virtual Type::Enum getArgumentEntity(unsigned int i) const { switch (i) {case 9: return Type::IfcTendonTypeEnum; case 10: return Type::IfcPositiveLengthMeasure; case 11: return Type::IfcAreaMeasure; case 12: return Type::IfcPositiveLengthMeasure; } return IfcReinforcingElementType::getArgumentEntity(i); } - virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 9: return "PredefinedType"; case 10: return "NominalDiameter"; case 11: return "CrossSectionArea"; case 12: return "SheethDiameter"; } return IfcReinforcingElementType::getArgumentName(i); } + virtual const char* getArgumentName(unsigned int i) const { switch (i) {case 9: return "PredefinedType"; case 10: return "NominalDiameter"; case 11: return "CrossSectionArea"; case 12: return "SheathDiameter"; } return IfcReinforcingElementType::getArgumentName(i); } virtual Argument* getArgument(unsigned int i) const { return entity->getArgument(i); } bool is(Type::Enum v) const; Type::Enum type() const; static Type::Enum Class(); IfcTendonType (IfcEntityInstanceData* e); - IfcTendonType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcTendonTypeEnum::IfcTendonTypeEnum v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheethDiameter); + IfcTendonType (std::string v1_GlobalId, IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< IfcTemplatedEntityList< IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< IfcTemplatedEntityList< IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, IfcTendonTypeEnum::IfcTendonTypeEnum v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheathDiameter); typedef IfcTemplatedEntityList< IfcTendonType > list; }; /// The energy conversion device type IfcTransformerType defines commonly shared information for occurrences of transformers. The set of shared information may include: diff --git a/src/ifcparse/Ifc4enum.h b/src/ifcparse/Ifc4enum.h index 7d257e26e8..ff4d66e71f 100644 --- a/src/ifcparse/Ifc4enum.h +++ b/src/ifcparse/Ifc4enum.h @@ -38,7 +38,7 @@ namespace Ifc4 { namespace Type { typedef enum { - IfcAbsorbedDoseMeasure, IfcAccelerationMeasure, IfcActionRequest, IfcActionRequestTypeEnum, IfcActionSourceTypeEnum, IfcActionTypeEnum, IfcActor, IfcActorRole, IfcActorSelect, IfcActuator, IfcActuatorType, IfcActuatorTypeEnum, IfcAddress, IfcAddressTypeEnum, IfcAdvancedBrep, IfcAdvancedBrepWithVoids, IfcAdvancedFace, IfcAirTerminal, IfcAirTerminalBox, IfcAirTerminalBoxType, IfcAirTerminalBoxTypeEnum, IfcAirTerminalType, IfcAirTerminalTypeEnum, IfcAirToAirHeatRecovery, IfcAirToAirHeatRecoveryType, IfcAirToAirHeatRecoveryTypeEnum, IfcAlarm, IfcAlarmType, IfcAlarmTypeEnum, IfcAmountOfSubstanceMeasure, IfcAnalysisModelTypeEnum, IfcAnalysisTheoryTypeEnum, IfcAngularVelocityMeasure, IfcAnnotation, IfcAnnotationFillArea, IfcApplication, IfcAppliedValue, IfcAppliedValueSelect, IfcApproval, IfcApprovalRelationship, IfcArbitraryClosedProfileDef, IfcArbitraryOpenProfileDef, IfcArbitraryProfileDefWithVoids, IfcArcIndex, IfcAreaDensityMeasure, IfcAreaMeasure, IfcArithmeticOperatorEnum, IfcAssemblyPlaceEnum, IfcAsset, IfcAsymmetricIShapeProfileDef, IfcAudioVisualAppliance, IfcAudioVisualApplianceType, IfcAudioVisualApplianceTypeEnum, IfcAxis1Placement, IfcAxis2Placement, IfcAxis2Placement2D, IfcAxis2Placement3D, IfcBSplineCurve, IfcBSplineCurveForm, IfcBSplineCurveWithKnots, IfcBSplineSurface, IfcBSplineSurfaceForm, IfcBSplineSurfaceWithKnots, IfcBeam, IfcBeamStandardCase, IfcBeamType, IfcBeamTypeEnum, IfcBenchmarkEnum, IfcBendingParameterSelect, IfcBinary, IfcBlobTexture, IfcBlock, IfcBoiler, IfcBoilerType, IfcBoilerTypeEnum, IfcBoolean, IfcBooleanClippingResult, IfcBooleanOperand, IfcBooleanOperator, IfcBooleanResult, IfcBoundaryCondition, IfcBoundaryCurve, IfcBoundaryEdgeCondition, IfcBoundaryFaceCondition, IfcBoundaryNodeCondition, IfcBoundaryNodeConditionWarping, IfcBoundedCurve, IfcBoundedSurface, IfcBoundingBox, IfcBoxAlignment, IfcBoxedHalfSpace, IfcBuilding, IfcBuildingElement, IfcBuildingElementPart, IfcBuildingElementPartType, IfcBuildingElementPartTypeEnum, IfcBuildingElementProxy, IfcBuildingElementProxyType, IfcBuildingElementProxyTypeEnum, IfcBuildingElementType, IfcBuildingStorey, IfcBuildingSystem, IfcBuildingSystemTypeEnum, IfcBurner, IfcBurnerType, IfcBurnerTypeEnum, IfcCShapeProfileDef, IfcCableCarrierFitting, IfcCableCarrierFittingType, IfcCableCarrierFittingTypeEnum, IfcCableCarrierSegment, IfcCableCarrierSegmentType, IfcCableCarrierSegmentTypeEnum, IfcCableFitting, IfcCableFittingType, IfcCableFittingTypeEnum, IfcCableSegment, IfcCableSegmentType, IfcCableSegmentTypeEnum, IfcCardinalPointReference, IfcCartesianPoint, IfcCartesianPointList, IfcCartesianPointList2D, IfcCartesianPointList3D, IfcCartesianTransformationOperator, IfcCartesianTransformationOperator2D, IfcCartesianTransformationOperator2DnonUniform, IfcCartesianTransformationOperator3D, IfcCartesianTransformationOperator3DnonUniform, IfcCenterLineProfileDef, IfcChangeActionEnum, IfcChiller, IfcChillerType, IfcChillerTypeEnum, IfcChimney, IfcChimneyType, IfcChimneyTypeEnum, IfcCircle, IfcCircleHollowProfileDef, IfcCircleProfileDef, IfcCivilElement, IfcCivilElementType, IfcClassification, IfcClassificationReference, IfcClassificationReferenceSelect, IfcClassificationSelect, IfcClosedShell, IfcCoil, IfcCoilType, IfcCoilTypeEnum, IfcColour, IfcColourOrFactor, IfcColourRgb, IfcColourRgbList, IfcColourSpecification, IfcColumn, IfcColumnStandardCase, IfcColumnType, IfcColumnTypeEnum, IfcCommunicationsAppliance, IfcCommunicationsApplianceType, IfcCommunicationsApplianceTypeEnum, IfcComplexNumber, IfcComplexProperty, IfcComplexPropertyTemplate, IfcComplexPropertyTemplateTypeEnum, IfcCompositeCurve, IfcCompositeCurveOnSurface, IfcCompositeCurveSegment, IfcCompositeProfileDef, IfcCompoundPlaneAngleMeasure, IfcCompressor, IfcCompressorType, IfcCompressorTypeEnum, IfcCondenser, IfcCondenserType, IfcCondenserTypeEnum, IfcConic, IfcConnectedFaceSet, IfcConnectionCurveGeometry, IfcConnectionGeometry, IfcConnectionPointEccentricity, IfcConnectionPointGeometry, IfcConnectionSurfaceGeometry, IfcConnectionTypeEnum, IfcConnectionVolumeGeometry, IfcConstraint, IfcConstraintEnum, IfcConstructionEquipmentResource, IfcConstructionEquipmentResourceType, IfcConstructionEquipmentResourceTypeEnum, IfcConstructionMaterialResource, IfcConstructionMaterialResourceType, IfcConstructionMaterialResourceTypeEnum, IfcConstructionProductResource, IfcConstructionProductResourceType, IfcConstructionProductResourceTypeEnum, IfcConstructionResource, IfcConstructionResourceType, IfcContext, IfcContextDependentMeasure, IfcContextDependentUnit, IfcControl, IfcController, IfcControllerType, IfcControllerTypeEnum, IfcConversionBasedUnit, IfcConversionBasedUnitWithOffset, IfcCooledBeam, IfcCooledBeamType, IfcCooledBeamTypeEnum, IfcCoolingTower, IfcCoolingTowerType, IfcCoolingTowerTypeEnum, IfcCoordinateOperation, IfcCoordinateReferenceSystem, IfcCoordinateReferenceSystemSelect, IfcCostItem, IfcCostItemTypeEnum, IfcCostSchedule, IfcCostScheduleTypeEnum, IfcCostValue, IfcCountMeasure, IfcCovering, IfcCoveringType, IfcCoveringTypeEnum, IfcCrewResource, IfcCrewResourceType, IfcCrewResourceTypeEnum, IfcCsgPrimitive3D, IfcCsgSelect, IfcCsgSolid, IfcCurrencyRelationship, IfcCurtainWall, IfcCurtainWallType, IfcCurtainWallTypeEnum, IfcCurvatureMeasure, IfcCurve, IfcCurveBoundedPlane, IfcCurveBoundedSurface, IfcCurveFontOrScaledCurveFontSelect, IfcCurveInterpolationEnum, IfcCurveOnSurface, IfcCurveOrEdgeCurve, IfcCurveStyle, IfcCurveStyleFont, IfcCurveStyleFontAndScaling, IfcCurveStyleFontPattern, IfcCurveStyleFontSelect, IfcCylindricalSurface, IfcDamper, IfcDamperType, IfcDamperTypeEnum, IfcDataOriginEnum, IfcDate, IfcDateTime, IfcDayInMonthNumber, IfcDayInWeekNumber, IfcDefinitionSelect, IfcDerivedMeasureValue, IfcDerivedProfileDef, IfcDerivedUnit, IfcDerivedUnitElement, IfcDerivedUnitEnum, IfcDescriptiveMeasure, IfcDimensionCount, IfcDimensionalExponents, IfcDirection, IfcDirectionSenseEnum, IfcDiscreteAccessory, IfcDiscreteAccessoryType, IfcDiscreteAccessoryTypeEnum, IfcDistributionChamberElement, IfcDistributionChamberElementType, IfcDistributionChamberElementTypeEnum, IfcDistributionCircuit, IfcDistributionControlElement, IfcDistributionControlElementType, IfcDistributionElement, IfcDistributionElementType, IfcDistributionFlowElement, IfcDistributionFlowElementType, IfcDistributionPort, IfcDistributionPortTypeEnum, IfcDistributionSystem, IfcDistributionSystemEnum, IfcDocumentConfidentialityEnum, IfcDocumentInformation, IfcDocumentInformationRelationship, IfcDocumentReference, IfcDocumentSelect, IfcDocumentStatusEnum, IfcDoor, IfcDoorLiningProperties, IfcDoorPanelOperationEnum, IfcDoorPanelPositionEnum, IfcDoorPanelProperties, IfcDoorStandardCase, IfcDoorStyle, IfcDoorStyleConstructionEnum, IfcDoorStyleOperationEnum, IfcDoorType, IfcDoorTypeEnum, IfcDoorTypeOperationEnum, IfcDoseEquivalentMeasure, IfcDraughtingPreDefinedColour, IfcDraughtingPreDefinedCurveFont, IfcDuctFitting, IfcDuctFittingType, IfcDuctFittingTypeEnum, IfcDuctSegment, IfcDuctSegmentType, IfcDuctSegmentTypeEnum, IfcDuctSilencer, IfcDuctSilencerType, IfcDuctSilencerTypeEnum, IfcDuration, IfcDynamicViscosityMeasure, IfcEdge, IfcEdgeCurve, IfcEdgeLoop, IfcElectricAppliance, IfcElectricApplianceType, IfcElectricApplianceTypeEnum, IfcElectricCapacitanceMeasure, IfcElectricChargeMeasure, IfcElectricConductanceMeasure, IfcElectricCurrentMeasure, IfcElectricDistributionBoard, IfcElectricDistributionBoardType, IfcElectricDistributionBoardTypeEnum, IfcElectricFlowStorageDevice, IfcElectricFlowStorageDeviceType, IfcElectricFlowStorageDeviceTypeEnum, IfcElectricGenerator, IfcElectricGeneratorType, IfcElectricGeneratorTypeEnum, IfcElectricMotor, IfcElectricMotorType, IfcElectricMotorTypeEnum, IfcElectricResistanceMeasure, IfcElectricTimeControl, IfcElectricTimeControlType, IfcElectricTimeControlTypeEnum, IfcElectricVoltageMeasure, IfcElement, IfcElementAssembly, IfcElementAssemblyType, IfcElementAssemblyTypeEnum, IfcElementComponent, IfcElementComponentType, IfcElementCompositionEnum, IfcElementQuantity, IfcElementType, IfcElementarySurface, IfcEllipse, IfcEllipseProfileDef, IfcEnergyConversionDevice, IfcEnergyConversionDeviceType, IfcEnergyMeasure, IfcEngine, IfcEngineType, IfcEngineTypeEnum, IfcEvaporativeCooler, IfcEvaporativeCoolerType, IfcEvaporativeCoolerTypeEnum, IfcEvaporator, IfcEvaporatorType, IfcEvaporatorTypeEnum, IfcEvent, IfcEventTime, IfcEventTriggerTypeEnum, IfcEventType, IfcEventTypeEnum, IfcExtendedProperties, IfcExternalInformation, IfcExternalReference, IfcExternalReferenceRelationship, IfcExternalSpatialElement, IfcExternalSpatialElementTypeEnum, IfcExternalSpatialStructureElement, IfcExternallyDefinedHatchStyle, IfcExternallyDefinedSurfaceStyle, IfcExternallyDefinedTextFont, IfcExtrudedAreaSolid, IfcExtrudedAreaSolidTapered, IfcFace, IfcFaceBasedSurfaceModel, IfcFaceBound, IfcFaceOuterBound, IfcFaceSurface, IfcFacetedBrep, IfcFacetedBrepWithVoids, IfcFailureConnectionCondition, IfcFan, IfcFanType, IfcFanTypeEnum, IfcFastener, IfcFastenerType, IfcFastenerTypeEnum, IfcFeatureElement, IfcFeatureElementAddition, IfcFeatureElementSubtraction, IfcFillAreaStyle, IfcFillAreaStyleHatching, IfcFillAreaStyleTiles, IfcFillStyleSelect, IfcFilter, IfcFilterType, IfcFilterTypeEnum, IfcFireSuppressionTerminal, IfcFireSuppressionTerminalType, IfcFireSuppressionTerminalTypeEnum, IfcFixedReferenceSweptAreaSolid, IfcFlowController, IfcFlowControllerType, IfcFlowDirectionEnum, IfcFlowFitting, IfcFlowFittingType, IfcFlowInstrument, IfcFlowInstrumentType, IfcFlowInstrumentTypeEnum, IfcFlowMeter, IfcFlowMeterType, IfcFlowMeterTypeEnum, IfcFlowMovingDevice, IfcFlowMovingDeviceType, IfcFlowSegment, IfcFlowSegmentType, IfcFlowStorageDevice, IfcFlowStorageDeviceType, IfcFlowTerminal, IfcFlowTerminalType, IfcFlowTreatmentDevice, IfcFlowTreatmentDeviceType, IfcFontStyle, IfcFontVariant, IfcFontWeight, IfcFooting, IfcFootingType, IfcFootingTypeEnum, IfcForceMeasure, IfcFrequencyMeasure, IfcFurnishingElement, IfcFurnishingElementType, IfcFurniture, IfcFurnitureType, IfcFurnitureTypeEnum, IfcGeographicElement, IfcGeographicElementType, IfcGeographicElementTypeEnum, IfcGeometricCurveSet, IfcGeometricProjectionEnum, IfcGeometricRepresentationContext, IfcGeometricRepresentationItem, IfcGeometricRepresentationSubContext, IfcGeometricSet, IfcGeometricSetSelect, IfcGlobalOrLocalEnum, IfcGloballyUniqueId, IfcGrid, IfcGridAxis, IfcGridPlacement, IfcGridPlacementDirectionSelect, IfcGridTypeEnum, IfcGroup, IfcHalfSpaceSolid, IfcHatchLineDistanceSelect, IfcHeatExchanger, IfcHeatExchangerType, IfcHeatExchangerTypeEnum, IfcHeatFluxDensityMeasure, IfcHeatingValueMeasure, IfcHumidifier, IfcHumidifierType, IfcHumidifierTypeEnum, IfcIShapeProfileDef, IfcIdentifier, IfcIlluminanceMeasure, IfcImageTexture, IfcIndexedColourMap, IfcIndexedPolyCurve, IfcIndexedTextureMap, IfcIndexedTriangleTextureMap, IfcInductanceMeasure, IfcInteger, IfcIntegerCountRateMeasure, IfcInterceptor, IfcInterceptorType, IfcInterceptorTypeEnum, IfcInternalOrExternalEnum, IfcInventory, IfcInventoryTypeEnum, IfcIonConcentrationMeasure, IfcIrregularTimeSeries, IfcIrregularTimeSeriesValue, IfcIsothermalMoistureCapacityMeasure, IfcJunctionBox, IfcJunctionBoxType, IfcJunctionBoxTypeEnum, IfcKinematicViscosityMeasure, IfcKnotType, IfcLShapeProfileDef, IfcLabel, IfcLaborResource, IfcLaborResourceType, IfcLaborResourceTypeEnum, IfcLagTime, IfcLamp, IfcLampType, IfcLampTypeEnum, IfcLanguageId, IfcLayerSetDirectionEnum, IfcLayeredItem, IfcLengthMeasure, IfcLibraryInformation, IfcLibraryReference, IfcLibrarySelect, IfcLightDistributionCurveEnum, IfcLightDistributionData, IfcLightDistributionDataSourceSelect, IfcLightEmissionSourceEnum, IfcLightFixture, IfcLightFixtureType, IfcLightFixtureTypeEnum, IfcLightIntensityDistribution, IfcLightSource, IfcLightSourceAmbient, IfcLightSourceDirectional, IfcLightSourceGoniometric, IfcLightSourcePositional, IfcLightSourceSpot, IfcLine, IfcLineIndex, IfcLinearForceMeasure, IfcLinearMomentMeasure, IfcLinearStiffnessMeasure, IfcLinearVelocityMeasure, IfcLoadGroupTypeEnum, IfcLocalPlacement, IfcLogical, IfcLogicalOperatorEnum, IfcLoop, IfcLuminousFluxMeasure, IfcLuminousIntensityDistributionMeasure, IfcLuminousIntensityMeasure, IfcMagneticFluxDensityMeasure, IfcMagneticFluxMeasure, IfcManifoldSolidBrep, IfcMapConversion, IfcMappedItem, IfcMassDensityMeasure, IfcMassFlowRateMeasure, IfcMassMeasure, IfcMassPerLengthMeasure, IfcMaterial, IfcMaterialClassificationRelationship, IfcMaterialConstituent, IfcMaterialConstituentSet, IfcMaterialDefinition, IfcMaterialDefinitionRepresentation, IfcMaterialLayer, IfcMaterialLayerSet, IfcMaterialLayerSetUsage, IfcMaterialLayerWithOffsets, IfcMaterialList, IfcMaterialProfile, IfcMaterialProfileSet, IfcMaterialProfileSetUsage, IfcMaterialProfileSetUsageTapering, IfcMaterialProfileWithOffsets, IfcMaterialProperties, IfcMaterialRelationship, IfcMaterialSelect, IfcMaterialUsageDefinition, IfcMeasureValue, IfcMeasureWithUnit, IfcMechanicalFastener, IfcMechanicalFastenerType, IfcMechanicalFastenerTypeEnum, IfcMedicalDevice, IfcMedicalDeviceType, IfcMedicalDeviceTypeEnum, IfcMember, IfcMemberStandardCase, IfcMemberType, IfcMemberTypeEnum, IfcMetric, IfcMetricValueSelect, IfcMirroredProfileDef, IfcModulusOfElasticityMeasure, IfcModulusOfLinearSubgradeReactionMeasure, IfcModulusOfRotationalSubgradeReactionMeasure, IfcModulusOfRotationalSubgradeReactionSelect, IfcModulusOfSubgradeReactionMeasure, IfcModulusOfSubgradeReactionSelect, IfcModulusOfTranslationalSubgradeReactionSelect, IfcMoistureDiffusivityMeasure, IfcMolecularWeightMeasure, IfcMomentOfInertiaMeasure, IfcMonetaryMeasure, IfcMonetaryUnit, IfcMonthInYearNumber, IfcMotorConnection, IfcMotorConnectionType, IfcMotorConnectionTypeEnum, IfcNamedUnit, IfcNonNegativeLengthMeasure, IfcNormalisedRatioMeasure, IfcNullStyle, IfcNumericMeasure, IfcObject, IfcObjectDefinition, IfcObjectPlacement, IfcObjectReferenceSelect, IfcObjectTypeEnum, IfcObjective, IfcObjectiveEnum, IfcOccupant, IfcOccupantTypeEnum, IfcOffsetCurve2D, IfcOffsetCurve3D, IfcOpenShell, IfcOpeningElement, IfcOpeningElementTypeEnum, IfcOpeningStandardCase, IfcOrganization, IfcOrganizationRelationship, IfcOrientedEdge, IfcOuterBoundaryCurve, IfcOutlet, IfcOutletType, IfcOutletTypeEnum, IfcOwnerHistory, IfcPHMeasure, IfcParameterValue, IfcParameterizedProfileDef, IfcPath, IfcPcurve, IfcPerformanceHistory, IfcPerformanceHistoryTypeEnum, IfcPermeableCoveringOperationEnum, IfcPermeableCoveringProperties, IfcPermit, IfcPermitTypeEnum, IfcPerson, IfcPersonAndOrganization, IfcPhysicalComplexQuantity, IfcPhysicalOrVirtualEnum, IfcPhysicalQuantity, IfcPhysicalSimpleQuantity, IfcPile, IfcPileConstructionEnum, IfcPileType, IfcPileTypeEnum, IfcPipeFitting, IfcPipeFittingType, IfcPipeFittingTypeEnum, IfcPipeSegment, IfcPipeSegmentType, IfcPipeSegmentTypeEnum, IfcPixelTexture, IfcPlacement, IfcPlanarBox, IfcPlanarExtent, IfcPlanarForceMeasure, IfcPlane, IfcPlaneAngleMeasure, IfcPlate, IfcPlateStandardCase, IfcPlateType, IfcPlateTypeEnum, IfcPoint, IfcPointOnCurve, IfcPointOnSurface, IfcPointOrVertexPoint, IfcPolyLoop, IfcPolygonalBoundedHalfSpace, IfcPolyline, IfcPort, IfcPositiveInteger, IfcPositiveLengthMeasure, IfcPositivePlaneAngleMeasure, IfcPositiveRatioMeasure, IfcPostalAddress, IfcPowerMeasure, IfcPreDefinedColour, IfcPreDefinedCurveFont, IfcPreDefinedItem, IfcPreDefinedProperties, IfcPreDefinedPropertySet, IfcPreDefinedTextFont, IfcPresentableText, IfcPresentationItem, IfcPresentationLayerAssignment, IfcPresentationLayerWithStyle, IfcPresentationStyle, IfcPresentationStyleAssignment, IfcPresentationStyleSelect, IfcPressureMeasure, IfcProcedure, IfcProcedureType, IfcProcedureTypeEnum, IfcProcess, IfcProcessSelect, IfcProduct, IfcProductDefinitionShape, IfcProductRepresentation, IfcProductRepresentationSelect, IfcProductSelect, IfcProfileDef, IfcProfileProperties, IfcProfileTypeEnum, IfcProject, IfcProjectLibrary, IfcProjectOrder, IfcProjectOrderTypeEnum, IfcProjectedCRS, IfcProjectedOrTrueLengthEnum, IfcProjectionElement, IfcProjectionElementTypeEnum, IfcProperty, IfcPropertyAbstraction, IfcPropertyBoundedValue, IfcPropertyDefinition, IfcPropertyDependencyRelationship, IfcPropertyEnumeratedValue, IfcPropertyEnumeration, IfcPropertyListValue, IfcPropertyReferenceValue, IfcPropertySet, IfcPropertySetDefinition, IfcPropertySetDefinitionSelect, IfcPropertySetDefinitionSet, IfcPropertySetTemplate, IfcPropertySetTemplateTypeEnum, IfcPropertySingleValue, IfcPropertyTableValue, IfcPropertyTemplate, IfcPropertyTemplateDefinition, IfcProtectiveDevice, IfcProtectiveDeviceTrippingUnit, IfcProtectiveDeviceTrippingUnitType, IfcProtectiveDeviceTrippingUnitTypeEnum, IfcProtectiveDeviceType, IfcProtectiveDeviceTypeEnum, IfcProxy, IfcPump, IfcPumpType, IfcPumpTypeEnum, IfcQuantityArea, IfcQuantityCount, IfcQuantityLength, IfcQuantitySet, IfcQuantityTime, IfcQuantityVolume, IfcQuantityWeight, IfcRadioActivityMeasure, IfcRailing, IfcRailingType, IfcRailingTypeEnum, IfcRamp, IfcRampFlight, IfcRampFlightType, IfcRampFlightTypeEnum, IfcRampType, IfcRampTypeEnum, IfcRatioMeasure, IfcRationalBSplineCurveWithKnots, IfcRationalBSplineSurfaceWithKnots, IfcReal, IfcRectangleHollowProfileDef, IfcRectangleProfileDef, IfcRectangularPyramid, IfcRectangularTrimmedSurface, IfcRecurrencePattern, IfcRecurrenceTypeEnum, IfcReference, IfcReflectanceMethodEnum, IfcRegularTimeSeries, IfcReinforcementBarProperties, IfcReinforcementDefinitionProperties, IfcReinforcingBar, IfcReinforcingBarRoleEnum, IfcReinforcingBarSurfaceEnum, IfcReinforcingBarType, IfcReinforcingBarTypeEnum, IfcReinforcingElement, IfcReinforcingElementType, IfcReinforcingMesh, IfcReinforcingMeshType, IfcReinforcingMeshTypeEnum, IfcRelAggregates, IfcRelAssigns, IfcRelAssignsToActor, IfcRelAssignsToControl, IfcRelAssignsToGroup, IfcRelAssignsToGroupByFactor, IfcRelAssignsToProcess, IfcRelAssignsToProduct, IfcRelAssignsToResource, IfcRelAssociates, IfcRelAssociatesApproval, IfcRelAssociatesClassification, IfcRelAssociatesConstraint, IfcRelAssociatesDocument, IfcRelAssociatesLibrary, IfcRelAssociatesMaterial, IfcRelConnects, IfcRelConnectsElements, IfcRelConnectsPathElements, IfcRelConnectsPortToElement, IfcRelConnectsPorts, IfcRelConnectsStructuralActivity, IfcRelConnectsStructuralMember, IfcRelConnectsWithEccentricity, IfcRelConnectsWithRealizingElements, IfcRelContainedInSpatialStructure, IfcRelCoversBldgElements, IfcRelCoversSpaces, IfcRelDeclares, IfcRelDecomposes, IfcRelDefines, IfcRelDefinesByObject, IfcRelDefinesByProperties, IfcRelDefinesByTemplate, IfcRelDefinesByType, IfcRelFillsElement, IfcRelFlowControlElements, IfcRelInterferesElements, IfcRelNests, IfcRelProjectsElement, IfcRelReferencedInSpatialStructure, IfcRelSequence, IfcRelServicesBuildings, IfcRelSpaceBoundary, IfcRelSpaceBoundary1stLevel, IfcRelSpaceBoundary2ndLevel, IfcRelVoidsElement, IfcRelationship, IfcReparametrisedCompositeCurveSegment, IfcRepresentation, IfcRepresentationContext, IfcRepresentationItem, IfcRepresentationMap, IfcResource, IfcResourceApprovalRelationship, IfcResourceConstraintRelationship, IfcResourceLevelRelationship, IfcResourceObjectSelect, IfcResourceSelect, IfcResourceTime, IfcRevolvedAreaSolid, IfcRevolvedAreaSolidTapered, IfcRightCircularCone, IfcRightCircularCylinder, IfcRoleEnum, IfcRoof, IfcRoofType, IfcRoofTypeEnum, IfcRoot, IfcRotationalFrequencyMeasure, IfcRotationalMassMeasure, IfcRotationalStiffnessMeasure, IfcRotationalStiffnessSelect, IfcRoundedRectangleProfileDef, IfcSIPrefix, IfcSIUnit, IfcSIUnitName, IfcSanitaryTerminal, IfcSanitaryTerminalType, IfcSanitaryTerminalTypeEnum, IfcSchedulingTime, IfcSectionModulusMeasure, IfcSectionProperties, IfcSectionReinforcementProperties, IfcSectionTypeEnum, IfcSectionalAreaIntegralMeasure, IfcSectionedSpine, IfcSegmentIndexSelect, IfcSensor, IfcSensorType, IfcSensorTypeEnum, IfcSequenceEnum, IfcShadingDevice, IfcShadingDeviceType, IfcShadingDeviceTypeEnum, IfcShapeAspect, IfcShapeModel, IfcShapeRepresentation, IfcShearModulusMeasure, IfcShell, IfcShellBasedSurfaceModel, IfcSimpleProperty, IfcSimplePropertyTemplate, IfcSimplePropertyTemplateTypeEnum, IfcSimpleValue, IfcSite, IfcSizeSelect, IfcSlab, IfcSlabElementedCase, IfcSlabStandardCase, IfcSlabType, IfcSlabTypeEnum, IfcSlippageConnectionCondition, IfcSolarDevice, IfcSolarDeviceType, IfcSolarDeviceTypeEnum, IfcSolidAngleMeasure, IfcSolidModel, IfcSolidOrShell, IfcSoundPowerLevelMeasure, IfcSoundPowerMeasure, IfcSoundPressureLevelMeasure, IfcSoundPressureMeasure, IfcSpace, IfcSpaceBoundarySelect, IfcSpaceHeater, IfcSpaceHeaterType, IfcSpaceHeaterTypeEnum, IfcSpaceType, IfcSpaceTypeEnum, IfcSpatialElement, IfcSpatialElementType, IfcSpatialStructureElement, IfcSpatialStructureElementType, IfcSpatialZone, IfcSpatialZoneType, IfcSpatialZoneTypeEnum, IfcSpecificHeatCapacityMeasure, IfcSpecularExponent, IfcSpecularHighlightSelect, IfcSpecularRoughness, IfcSphere, IfcStackTerminal, IfcStackTerminalType, IfcStackTerminalTypeEnum, IfcStair, IfcStairFlight, IfcStairFlightType, IfcStairFlightTypeEnum, IfcStairType, IfcStairTypeEnum, IfcStateEnum, IfcStrippedOptional, IfcStructuralAction, IfcStructuralActivity, IfcStructuralActivityAssignmentSelect, IfcStructuralAnalysisModel, IfcStructuralConnection, IfcStructuralConnectionCondition, IfcStructuralCurveAction, IfcStructuralCurveActivityTypeEnum, IfcStructuralCurveConnection, IfcStructuralCurveMember, IfcStructuralCurveMemberTypeEnum, IfcStructuralCurveMemberVarying, IfcStructuralCurveReaction, IfcStructuralItem, IfcStructuralLinearAction, IfcStructuralLoad, IfcStructuralLoadCase, IfcStructuralLoadConfiguration, IfcStructuralLoadGroup, IfcStructuralLoadLinearForce, IfcStructuralLoadOrResult, IfcStructuralLoadPlanarForce, IfcStructuralLoadSingleDisplacement, IfcStructuralLoadSingleDisplacementDistortion, IfcStructuralLoadSingleForce, IfcStructuralLoadSingleForceWarping, IfcStructuralLoadStatic, IfcStructuralLoadTemperature, IfcStructuralMember, IfcStructuralPlanarAction, IfcStructuralPointAction, IfcStructuralPointConnection, IfcStructuralPointReaction, IfcStructuralReaction, IfcStructuralResultGroup, IfcStructuralSurfaceAction, IfcStructuralSurfaceActivityTypeEnum, IfcStructuralSurfaceConnection, IfcStructuralSurfaceMember, IfcStructuralSurfaceMemberTypeEnum, IfcStructuralSurfaceMemberVarying, IfcStructuralSurfaceReaction, IfcStyleAssignmentSelect, IfcStyleModel, IfcStyledItem, IfcStyledRepresentation, IfcSubContractResource, IfcSubContractResourceType, IfcSubContractResourceTypeEnum, IfcSubedge, IfcSurface, IfcSurfaceCurveSweptAreaSolid, IfcSurfaceFeature, IfcSurfaceFeatureTypeEnum, IfcSurfaceOfLinearExtrusion, IfcSurfaceOfRevolution, IfcSurfaceOrFaceSurface, IfcSurfaceReinforcementArea, IfcSurfaceSide, IfcSurfaceStyle, IfcSurfaceStyleElementSelect, IfcSurfaceStyleLighting, IfcSurfaceStyleRefraction, IfcSurfaceStyleRendering, IfcSurfaceStyleShading, IfcSurfaceStyleWithTextures, IfcSurfaceTexture, IfcSweptAreaSolid, IfcSweptDiskSolid, IfcSweptDiskSolidPolygonal, IfcSweptSurface, IfcSwitchingDevice, IfcSwitchingDeviceType, IfcSwitchingDeviceTypeEnum, IfcSystem, IfcSystemFurnitureElement, IfcSystemFurnitureElementType, IfcSystemFurnitureElementTypeEnum, IfcTShapeProfileDef, IfcTable, IfcTableColumn, IfcTableRow, IfcTank, IfcTankType, IfcTankTypeEnum, IfcTask, IfcTaskDurationEnum, IfcTaskTime, IfcTaskTimeRecurring, IfcTaskType, IfcTaskTypeEnum, IfcTelecomAddress, IfcTemperatureGradientMeasure, IfcTemperatureRateOfChangeMeasure, IfcTendon, IfcTendonAnchor, IfcTendonAnchorType, IfcTendonAnchorTypeEnum, IfcTendonType, IfcTendonTypeEnum, IfcTessellatedFaceSet, IfcTessellatedItem, IfcText, IfcTextAlignment, IfcTextDecoration, IfcTextFontName, IfcTextFontSelect, IfcTextLiteral, IfcTextLiteralWithExtent, IfcTextPath, IfcTextStyle, IfcTextStyleFontModel, IfcTextStyleForDefinedFont, IfcTextStyleTextModel, IfcTextTransformation, IfcTextureCoordinate, IfcTextureCoordinateGenerator, IfcTextureMap, IfcTextureVertex, IfcTextureVertexList, IfcThermalAdmittanceMeasure, IfcThermalConductivityMeasure, IfcThermalExpansionCoefficientMeasure, IfcThermalResistanceMeasure, IfcThermalTransmittanceMeasure, IfcThermodynamicTemperatureMeasure, IfcTime, IfcTimeMeasure, IfcTimeOrRatioSelect, IfcTimePeriod, IfcTimeSeries, IfcTimeSeriesDataTypeEnum, IfcTimeSeriesValue, IfcTimeStamp, IfcTopologicalRepresentationItem, IfcTopologyRepresentation, IfcTorqueMeasure, IfcTransformer, IfcTransformerType, IfcTransformerTypeEnum, IfcTransitionCode, IfcTranslationalStiffnessSelect, IfcTransportElement, IfcTransportElementType, IfcTransportElementTypeEnum, IfcTrapeziumProfileDef, IfcTriangulatedFaceSet, IfcTrimmedCurve, IfcTrimmingPreference, IfcTrimmingSelect, IfcTubeBundle, IfcTubeBundleType, IfcTubeBundleTypeEnum, IfcTypeObject, IfcTypeProcess, IfcTypeProduct, IfcTypeResource, IfcURIReference, IfcUShapeProfileDef, IfcUnit, IfcUnitAssignment, IfcUnitEnum, IfcUnitaryControlElement, IfcUnitaryControlElementType, IfcUnitaryControlElementTypeEnum, IfcUnitaryEquipment, IfcUnitaryEquipmentType, IfcUnitaryEquipmentTypeEnum, IfcValue, IfcValve, IfcValveType, IfcValveTypeEnum, IfcVaporPermeabilityMeasure, IfcVector, IfcVectorOrDirection, IfcVertex, IfcVertexLoop, IfcVertexPoint, IfcVibrationIsolator, IfcVibrationIsolatorType, IfcVibrationIsolatorTypeEnum, IfcVirtualElement, IfcVirtualGridIntersection, IfcVoidingFeature, IfcVoidingFeatureTypeEnum, IfcVolumeMeasure, IfcVolumetricFlowRateMeasure, IfcWall, IfcWallElementedCase, IfcWallStandardCase, IfcWallType, IfcWallTypeEnum, IfcWarpingConstantMeasure, IfcWarpingMomentMeasure, IfcWarpingStiffnessSelect, IfcWasteTerminal, IfcWasteTerminalType, IfcWasteTerminalTypeEnum, IfcWindow, IfcWindowLiningProperties, IfcWindowPanelOperationEnum, IfcWindowPanelPositionEnum, IfcWindowPanelProperties, IfcWindowStandardCase, IfcWindowStyle, IfcWindowStyleConstructionEnum, IfcWindowStyleOperationEnum, IfcWindowType, IfcWindowTypeEnum, IfcWindowTypePartitioningEnum, IfcWorkCalendar, IfcWorkCalendarTypeEnum, IfcWorkControl, IfcWorkPlan, IfcWorkPlanTypeEnum, IfcWorkSchedule, IfcWorkScheduleTypeEnum, IfcWorkTime, IfcZShapeProfileDef, IfcZone, UNDEFINED + IfcAbsorbedDoseMeasure, IfcAccelerationMeasure, IfcActionRequest, IfcActionRequestTypeEnum, IfcActionSourceTypeEnum, IfcActionTypeEnum, IfcActor, IfcActorRole, IfcActorSelect, IfcActuator, IfcActuatorType, IfcActuatorTypeEnum, IfcAddress, IfcAddressTypeEnum, IfcAdvancedBrep, IfcAdvancedBrepWithVoids, IfcAdvancedFace, IfcAirTerminal, IfcAirTerminalBox, IfcAirTerminalBoxType, IfcAirTerminalBoxTypeEnum, IfcAirTerminalType, IfcAirTerminalTypeEnum, IfcAirToAirHeatRecovery, IfcAirToAirHeatRecoveryType, IfcAirToAirHeatRecoveryTypeEnum, IfcAlarm, IfcAlarmType, IfcAlarmTypeEnum, IfcAmountOfSubstanceMeasure, IfcAnalysisModelTypeEnum, IfcAnalysisTheoryTypeEnum, IfcAngularVelocityMeasure, IfcAnnotation, IfcAnnotationFillArea, IfcApplication, IfcAppliedValue, IfcAppliedValueSelect, IfcApproval, IfcApprovalRelationship, IfcArbitraryClosedProfileDef, IfcArbitraryOpenProfileDef, IfcArbitraryProfileDefWithVoids, IfcArcIndex, IfcAreaDensityMeasure, IfcAreaMeasure, IfcArithmeticOperatorEnum, IfcAssemblyPlaceEnum, IfcAsset, IfcAsymmetricIShapeProfileDef, IfcAudioVisualAppliance, IfcAudioVisualApplianceType, IfcAudioVisualApplianceTypeEnum, IfcAxis1Placement, IfcAxis2Placement, IfcAxis2Placement2D, IfcAxis2Placement3D, IfcBSplineCurve, IfcBSplineCurveForm, IfcBSplineCurveWithKnots, IfcBSplineSurface, IfcBSplineSurfaceForm, IfcBSplineSurfaceWithKnots, IfcBeam, IfcBeamStandardCase, IfcBeamType, IfcBeamTypeEnum, IfcBenchmarkEnum, IfcBendingParameterSelect, IfcBinary, IfcBlobTexture, IfcBlock, IfcBoiler, IfcBoilerType, IfcBoilerTypeEnum, IfcBoolean, IfcBooleanClippingResult, IfcBooleanOperand, IfcBooleanOperator, IfcBooleanResult, IfcBoundaryCondition, IfcBoundaryCurve, IfcBoundaryEdgeCondition, IfcBoundaryFaceCondition, IfcBoundaryNodeCondition, IfcBoundaryNodeConditionWarping, IfcBoundedCurve, IfcBoundedSurface, IfcBoundingBox, IfcBoxAlignment, IfcBoxedHalfSpace, IfcBuilding, IfcBuildingElement, IfcBuildingElementPart, IfcBuildingElementPartType, IfcBuildingElementPartTypeEnum, IfcBuildingElementProxy, IfcBuildingElementProxyType, IfcBuildingElementProxyTypeEnum, IfcBuildingElementType, IfcBuildingStorey, IfcBuildingSystem, IfcBuildingSystemTypeEnum, IfcBurner, IfcBurnerType, IfcBurnerTypeEnum, IfcCShapeProfileDef, IfcCableCarrierFitting, IfcCableCarrierFittingType, IfcCableCarrierFittingTypeEnum, IfcCableCarrierSegment, IfcCableCarrierSegmentType, IfcCableCarrierSegmentTypeEnum, IfcCableFitting, IfcCableFittingType, IfcCableFittingTypeEnum, IfcCableSegment, IfcCableSegmentType, IfcCableSegmentTypeEnum, IfcCardinalPointReference, IfcCartesianPoint, IfcCartesianPointList, IfcCartesianPointList2D, IfcCartesianPointList3D, IfcCartesianTransformationOperator, IfcCartesianTransformationOperator2D, IfcCartesianTransformationOperator2DnonUniform, IfcCartesianTransformationOperator3D, IfcCartesianTransformationOperator3DnonUniform, IfcCenterLineProfileDef, IfcChangeActionEnum, IfcChiller, IfcChillerType, IfcChillerTypeEnum, IfcChimney, IfcChimneyType, IfcChimneyTypeEnum, IfcCircle, IfcCircleHollowProfileDef, IfcCircleProfileDef, IfcCivilElement, IfcCivilElementType, IfcClassification, IfcClassificationReference, IfcClassificationReferenceSelect, IfcClassificationSelect, IfcClosedShell, IfcCoil, IfcCoilType, IfcCoilTypeEnum, IfcColour, IfcColourOrFactor, IfcColourRgb, IfcColourRgbList, IfcColourSpecification, IfcColumn, IfcColumnStandardCase, IfcColumnType, IfcColumnTypeEnum, IfcCommunicationsAppliance, IfcCommunicationsApplianceType, IfcCommunicationsApplianceTypeEnum, IfcComplexNumber, IfcComplexProperty, IfcComplexPropertyTemplate, IfcComplexPropertyTemplateTypeEnum, IfcCompositeCurve, IfcCompositeCurveOnSurface, IfcCompositeCurveSegment, IfcCompositeProfileDef, IfcCompoundPlaneAngleMeasure, IfcCompressor, IfcCompressorType, IfcCompressorTypeEnum, IfcCondenser, IfcCondenserType, IfcCondenserTypeEnum, IfcConic, IfcConnectedFaceSet, IfcConnectionCurveGeometry, IfcConnectionGeometry, IfcConnectionPointEccentricity, IfcConnectionPointGeometry, IfcConnectionSurfaceGeometry, IfcConnectionTypeEnum, IfcConnectionVolumeGeometry, IfcConstraint, IfcConstraintEnum, IfcConstructionEquipmentResource, IfcConstructionEquipmentResourceType, IfcConstructionEquipmentResourceTypeEnum, IfcConstructionMaterialResource, IfcConstructionMaterialResourceType, IfcConstructionMaterialResourceTypeEnum, IfcConstructionProductResource, IfcConstructionProductResourceType, IfcConstructionProductResourceTypeEnum, IfcConstructionResource, IfcConstructionResourceType, IfcContext, IfcContextDependentMeasure, IfcContextDependentUnit, IfcControl, IfcController, IfcControllerType, IfcControllerTypeEnum, IfcConversionBasedUnit, IfcConversionBasedUnitWithOffset, IfcCooledBeam, IfcCooledBeamType, IfcCooledBeamTypeEnum, IfcCoolingTower, IfcCoolingTowerType, IfcCoolingTowerTypeEnum, IfcCoordinateOperation, IfcCoordinateReferenceSystem, IfcCoordinateReferenceSystemSelect, IfcCostItem, IfcCostItemTypeEnum, IfcCostSchedule, IfcCostScheduleTypeEnum, IfcCostValue, IfcCountMeasure, IfcCovering, IfcCoveringType, IfcCoveringTypeEnum, IfcCrewResource, IfcCrewResourceType, IfcCrewResourceTypeEnum, IfcCsgPrimitive3D, IfcCsgSelect, IfcCsgSolid, IfcCurrencyRelationship, IfcCurtainWall, IfcCurtainWallType, IfcCurtainWallTypeEnum, IfcCurvatureMeasure, IfcCurve, IfcCurveBoundedPlane, IfcCurveBoundedSurface, IfcCurveFontOrScaledCurveFontSelect, IfcCurveInterpolationEnum, IfcCurveOnSurface, IfcCurveOrEdgeCurve, IfcCurveStyle, IfcCurveStyleFont, IfcCurveStyleFontAndScaling, IfcCurveStyleFontPattern, IfcCurveStyleFontSelect, IfcCylindricalSurface, IfcDamper, IfcDamperType, IfcDamperTypeEnum, IfcDataOriginEnum, IfcDate, IfcDateTime, IfcDayInMonthNumber, IfcDayInWeekNumber, IfcDefinitionSelect, IfcDerivedMeasureValue, IfcDerivedProfileDef, IfcDerivedUnit, IfcDerivedUnitElement, IfcDerivedUnitEnum, IfcDescriptiveMeasure, IfcDimensionCount, IfcDimensionalExponents, IfcDirection, IfcDirectionSenseEnum, IfcDiscreteAccessory, IfcDiscreteAccessoryType, IfcDiscreteAccessoryTypeEnum, IfcDistributionChamberElement, IfcDistributionChamberElementType, IfcDistributionChamberElementTypeEnum, IfcDistributionCircuit, IfcDistributionControlElement, IfcDistributionControlElementType, IfcDistributionElement, IfcDistributionElementType, IfcDistributionFlowElement, IfcDistributionFlowElementType, IfcDistributionPort, IfcDistributionPortTypeEnum, IfcDistributionSystem, IfcDistributionSystemEnum, IfcDocumentConfidentialityEnum, IfcDocumentInformation, IfcDocumentInformationRelationship, IfcDocumentReference, IfcDocumentSelect, IfcDocumentStatusEnum, IfcDoor, IfcDoorLiningProperties, IfcDoorPanelOperationEnum, IfcDoorPanelPositionEnum, IfcDoorPanelProperties, IfcDoorStandardCase, IfcDoorStyle, IfcDoorStyleConstructionEnum, IfcDoorStyleOperationEnum, IfcDoorType, IfcDoorTypeEnum, IfcDoorTypeOperationEnum, IfcDoseEquivalentMeasure, IfcDraughtingPreDefinedColour, IfcDraughtingPreDefinedCurveFont, IfcDuctFitting, IfcDuctFittingType, IfcDuctFittingTypeEnum, IfcDuctSegment, IfcDuctSegmentType, IfcDuctSegmentTypeEnum, IfcDuctSilencer, IfcDuctSilencerType, IfcDuctSilencerTypeEnum, IfcDuration, IfcDynamicViscosityMeasure, IfcEdge, IfcEdgeCurve, IfcEdgeLoop, IfcElectricAppliance, IfcElectricApplianceType, IfcElectricApplianceTypeEnum, IfcElectricCapacitanceMeasure, IfcElectricChargeMeasure, IfcElectricConductanceMeasure, IfcElectricCurrentMeasure, IfcElectricDistributionBoard, IfcElectricDistributionBoardType, IfcElectricDistributionBoardTypeEnum, IfcElectricFlowStorageDevice, IfcElectricFlowStorageDeviceType, IfcElectricFlowStorageDeviceTypeEnum, IfcElectricGenerator, IfcElectricGeneratorType, IfcElectricGeneratorTypeEnum, IfcElectricMotor, IfcElectricMotorType, IfcElectricMotorTypeEnum, IfcElectricResistanceMeasure, IfcElectricTimeControl, IfcElectricTimeControlType, IfcElectricTimeControlTypeEnum, IfcElectricVoltageMeasure, IfcElement, IfcElementAssembly, IfcElementAssemblyType, IfcElementAssemblyTypeEnum, IfcElementComponent, IfcElementComponentType, IfcElementCompositionEnum, IfcElementQuantity, IfcElementType, IfcElementarySurface, IfcEllipse, IfcEllipseProfileDef, IfcEnergyConversionDevice, IfcEnergyConversionDeviceType, IfcEnergyMeasure, IfcEngine, IfcEngineType, IfcEngineTypeEnum, IfcEvaporativeCooler, IfcEvaporativeCoolerType, IfcEvaporativeCoolerTypeEnum, IfcEvaporator, IfcEvaporatorType, IfcEvaporatorTypeEnum, IfcEvent, IfcEventTime, IfcEventTriggerTypeEnum, IfcEventType, IfcEventTypeEnum, IfcExtendedProperties, IfcExternalInformation, IfcExternalReference, IfcExternalReferenceRelationship, IfcExternalSpatialElement, IfcExternalSpatialElementTypeEnum, IfcExternalSpatialStructureElement, IfcExternallyDefinedHatchStyle, IfcExternallyDefinedSurfaceStyle, IfcExternallyDefinedTextFont, IfcExtrudedAreaSolid, IfcExtrudedAreaSolidTapered, IfcFace, IfcFaceBasedSurfaceModel, IfcFaceBound, IfcFaceOuterBound, IfcFaceSurface, IfcFacetedBrep, IfcFacetedBrepWithVoids, IfcFailureConnectionCondition, IfcFan, IfcFanType, IfcFanTypeEnum, IfcFastener, IfcFastenerType, IfcFastenerTypeEnum, IfcFeatureElement, IfcFeatureElementAddition, IfcFeatureElementSubtraction, IfcFillAreaStyle, IfcFillAreaStyleHatching, IfcFillAreaStyleTiles, IfcFillStyleSelect, IfcFilter, IfcFilterType, IfcFilterTypeEnum, IfcFireSuppressionTerminal, IfcFireSuppressionTerminalType, IfcFireSuppressionTerminalTypeEnum, IfcFixedReferenceSweptAreaSolid, IfcFlowController, IfcFlowControllerType, IfcFlowDirectionEnum, IfcFlowFitting, IfcFlowFittingType, IfcFlowInstrument, IfcFlowInstrumentType, IfcFlowInstrumentTypeEnum, IfcFlowMeter, IfcFlowMeterType, IfcFlowMeterTypeEnum, IfcFlowMovingDevice, IfcFlowMovingDeviceType, IfcFlowSegment, IfcFlowSegmentType, IfcFlowStorageDevice, IfcFlowStorageDeviceType, IfcFlowTerminal, IfcFlowTerminalType, IfcFlowTreatmentDevice, IfcFlowTreatmentDeviceType, IfcFontStyle, IfcFontVariant, IfcFontWeight, IfcFooting, IfcFootingType, IfcFootingTypeEnum, IfcForceMeasure, IfcFrequencyMeasure, IfcFurnishingElement, IfcFurnishingElementType, IfcFurniture, IfcFurnitureType, IfcFurnitureTypeEnum, IfcGeographicElement, IfcGeographicElementType, IfcGeographicElementTypeEnum, IfcGeometricCurveSet, IfcGeometricProjectionEnum, IfcGeometricRepresentationContext, IfcGeometricRepresentationItem, IfcGeometricRepresentationSubContext, IfcGeometricSet, IfcGeometricSetSelect, IfcGlobalOrLocalEnum, IfcGloballyUniqueId, IfcGrid, IfcGridAxis, IfcGridPlacement, IfcGridPlacementDirectionSelect, IfcGridTypeEnum, IfcGroup, IfcHalfSpaceSolid, IfcHatchLineDistanceSelect, IfcHeatExchanger, IfcHeatExchangerType, IfcHeatExchangerTypeEnum, IfcHeatFluxDensityMeasure, IfcHeatingValueMeasure, IfcHumidifier, IfcHumidifierType, IfcHumidifierTypeEnum, IfcIShapeProfileDef, IfcIdentifier, IfcIlluminanceMeasure, IfcImageTexture, IfcIndexedColourMap, IfcIndexedPolyCurve, IfcIndexedPolygonalFace, IfcIndexedPolygonalFaceWithVoids, IfcIndexedTextureMap, IfcIndexedTriangleTextureMap, IfcInductanceMeasure, IfcInteger, IfcIntegerCountRateMeasure, IfcInterceptor, IfcInterceptorType, IfcInterceptorTypeEnum, IfcInternalOrExternalEnum, IfcIntersectionCurve, IfcInventory, IfcInventoryTypeEnum, IfcIonConcentrationMeasure, IfcIrregularTimeSeries, IfcIrregularTimeSeriesValue, IfcIsothermalMoistureCapacityMeasure, IfcJunctionBox, IfcJunctionBoxType, IfcJunctionBoxTypeEnum, IfcKinematicViscosityMeasure, IfcKnotType, IfcLShapeProfileDef, IfcLabel, IfcLaborResource, IfcLaborResourceType, IfcLaborResourceTypeEnum, IfcLagTime, IfcLamp, IfcLampType, IfcLampTypeEnum, IfcLanguageId, IfcLayerSetDirectionEnum, IfcLayeredItem, IfcLengthMeasure, IfcLibraryInformation, IfcLibraryReference, IfcLibrarySelect, IfcLightDistributionCurveEnum, IfcLightDistributionData, IfcLightDistributionDataSourceSelect, IfcLightEmissionSourceEnum, IfcLightFixture, IfcLightFixtureType, IfcLightFixtureTypeEnum, IfcLightIntensityDistribution, IfcLightSource, IfcLightSourceAmbient, IfcLightSourceDirectional, IfcLightSourceGoniometric, IfcLightSourcePositional, IfcLightSourceSpot, IfcLine, IfcLineIndex, IfcLinearForceMeasure, IfcLinearMomentMeasure, IfcLinearStiffnessMeasure, IfcLinearVelocityMeasure, IfcLoadGroupTypeEnum, IfcLocalPlacement, IfcLogical, IfcLogicalOperatorEnum, IfcLoop, IfcLuminousFluxMeasure, IfcLuminousIntensityDistributionMeasure, IfcLuminousIntensityMeasure, IfcMagneticFluxDensityMeasure, IfcMagneticFluxMeasure, IfcManifoldSolidBrep, IfcMapConversion, IfcMappedItem, IfcMassDensityMeasure, IfcMassFlowRateMeasure, IfcMassMeasure, IfcMassPerLengthMeasure, IfcMaterial, IfcMaterialClassificationRelationship, IfcMaterialConstituent, IfcMaterialConstituentSet, IfcMaterialDefinition, IfcMaterialDefinitionRepresentation, IfcMaterialLayer, IfcMaterialLayerSet, IfcMaterialLayerSetUsage, IfcMaterialLayerWithOffsets, IfcMaterialList, IfcMaterialProfile, IfcMaterialProfileSet, IfcMaterialProfileSetUsage, IfcMaterialProfileSetUsageTapering, IfcMaterialProfileWithOffsets, IfcMaterialProperties, IfcMaterialRelationship, IfcMaterialSelect, IfcMaterialUsageDefinition, IfcMeasureValue, IfcMeasureWithUnit, IfcMechanicalFastener, IfcMechanicalFastenerType, IfcMechanicalFastenerTypeEnum, IfcMedicalDevice, IfcMedicalDeviceType, IfcMedicalDeviceTypeEnum, IfcMember, IfcMemberStandardCase, IfcMemberType, IfcMemberTypeEnum, IfcMetric, IfcMetricValueSelect, IfcMirroredProfileDef, IfcModulusOfElasticityMeasure, IfcModulusOfLinearSubgradeReactionMeasure, IfcModulusOfRotationalSubgradeReactionMeasure, IfcModulusOfRotationalSubgradeReactionSelect, IfcModulusOfSubgradeReactionMeasure, IfcModulusOfSubgradeReactionSelect, IfcModulusOfTranslationalSubgradeReactionSelect, IfcMoistureDiffusivityMeasure, IfcMolecularWeightMeasure, IfcMomentOfInertiaMeasure, IfcMonetaryMeasure, IfcMonetaryUnit, IfcMonthInYearNumber, IfcMotorConnection, IfcMotorConnectionType, IfcMotorConnectionTypeEnum, IfcNamedUnit, IfcNonNegativeLengthMeasure, IfcNormalisedRatioMeasure, IfcNullStyle, IfcNumericMeasure, IfcObject, IfcObjectDefinition, IfcObjectPlacement, IfcObjectReferenceSelect, IfcObjectTypeEnum, IfcObjective, IfcObjectiveEnum, IfcOccupant, IfcOccupantTypeEnum, IfcOffsetCurve2D, IfcOffsetCurve3D, IfcOpenShell, IfcOpeningElement, IfcOpeningElementTypeEnum, IfcOpeningStandardCase, IfcOrganization, IfcOrganizationRelationship, IfcOrientedEdge, IfcOuterBoundaryCurve, IfcOutlet, IfcOutletType, IfcOutletTypeEnum, IfcOwnerHistory, IfcPHMeasure, IfcParameterValue, IfcParameterizedProfileDef, IfcPath, IfcPcurve, IfcPerformanceHistory, IfcPerformanceHistoryTypeEnum, IfcPermeableCoveringOperationEnum, IfcPermeableCoveringProperties, IfcPermit, IfcPermitTypeEnum, IfcPerson, IfcPersonAndOrganization, IfcPhysicalComplexQuantity, IfcPhysicalOrVirtualEnum, IfcPhysicalQuantity, IfcPhysicalSimpleQuantity, IfcPile, IfcPileConstructionEnum, IfcPileType, IfcPileTypeEnum, IfcPipeFitting, IfcPipeFittingType, IfcPipeFittingTypeEnum, IfcPipeSegment, IfcPipeSegmentType, IfcPipeSegmentTypeEnum, IfcPixelTexture, IfcPlacement, IfcPlanarBox, IfcPlanarExtent, IfcPlanarForceMeasure, IfcPlane, IfcPlaneAngleMeasure, IfcPlate, IfcPlateStandardCase, IfcPlateType, IfcPlateTypeEnum, IfcPoint, IfcPointOnCurve, IfcPointOnSurface, IfcPointOrVertexPoint, IfcPolyLoop, IfcPolygonalBoundedHalfSpace, IfcPolygonalFaceSet, IfcPolyline, IfcPort, IfcPositiveInteger, IfcPositiveLengthMeasure, IfcPositivePlaneAngleMeasure, IfcPositiveRatioMeasure, IfcPostalAddress, IfcPowerMeasure, IfcPreDefinedColour, IfcPreDefinedCurveFont, IfcPreDefinedItem, IfcPreDefinedProperties, IfcPreDefinedPropertySet, IfcPreDefinedTextFont, IfcPreferredSurfaceCurveRepresentation, IfcPresentableText, IfcPresentationItem, IfcPresentationLayerAssignment, IfcPresentationLayerWithStyle, IfcPresentationStyle, IfcPresentationStyleAssignment, IfcPresentationStyleSelect, IfcPressureMeasure, IfcProcedure, IfcProcedureType, IfcProcedureTypeEnum, IfcProcess, IfcProcessSelect, IfcProduct, IfcProductDefinitionShape, IfcProductRepresentation, IfcProductRepresentationSelect, IfcProductSelect, IfcProfileDef, IfcProfileProperties, IfcProfileTypeEnum, IfcProject, IfcProjectLibrary, IfcProjectOrder, IfcProjectOrderTypeEnum, IfcProjectedCRS, IfcProjectedOrTrueLengthEnum, IfcProjectionElement, IfcProjectionElementTypeEnum, IfcProperty, IfcPropertyAbstraction, IfcPropertyBoundedValue, IfcPropertyDefinition, IfcPropertyDependencyRelationship, IfcPropertyEnumeratedValue, IfcPropertyEnumeration, IfcPropertyListValue, IfcPropertyReferenceValue, IfcPropertySet, IfcPropertySetDefinition, IfcPropertySetDefinitionSelect, IfcPropertySetDefinitionSet, IfcPropertySetTemplate, IfcPropertySetTemplateTypeEnum, IfcPropertySingleValue, IfcPropertyTableValue, IfcPropertyTemplate, IfcPropertyTemplateDefinition, IfcProtectiveDevice, IfcProtectiveDeviceTrippingUnit, IfcProtectiveDeviceTrippingUnitType, IfcProtectiveDeviceTrippingUnitTypeEnum, IfcProtectiveDeviceType, IfcProtectiveDeviceTypeEnum, IfcProxy, IfcPump, IfcPumpType, IfcPumpTypeEnum, IfcQuantityArea, IfcQuantityCount, IfcQuantityLength, IfcQuantitySet, IfcQuantityTime, IfcQuantityVolume, IfcQuantityWeight, IfcRadioActivityMeasure, IfcRailing, IfcRailingType, IfcRailingTypeEnum, IfcRamp, IfcRampFlight, IfcRampFlightType, IfcRampFlightTypeEnum, IfcRampType, IfcRampTypeEnum, IfcRatioMeasure, IfcRationalBSplineCurveWithKnots, IfcRationalBSplineSurfaceWithKnots, IfcReal, IfcRectangleHollowProfileDef, IfcRectangleProfileDef, IfcRectangularPyramid, IfcRectangularTrimmedSurface, IfcRecurrencePattern, IfcRecurrenceTypeEnum, IfcReference, IfcReflectanceMethodEnum, IfcRegularTimeSeries, IfcReinforcementBarProperties, IfcReinforcementDefinitionProperties, IfcReinforcingBar, IfcReinforcingBarRoleEnum, IfcReinforcingBarSurfaceEnum, IfcReinforcingBarType, IfcReinforcingBarTypeEnum, IfcReinforcingElement, IfcReinforcingElementType, IfcReinforcingMesh, IfcReinforcingMeshType, IfcReinforcingMeshTypeEnum, IfcRelAggregates, IfcRelAssigns, IfcRelAssignsToActor, IfcRelAssignsToControl, IfcRelAssignsToGroup, IfcRelAssignsToGroupByFactor, IfcRelAssignsToProcess, IfcRelAssignsToProduct, IfcRelAssignsToResource, IfcRelAssociates, IfcRelAssociatesApproval, IfcRelAssociatesClassification, IfcRelAssociatesConstraint, IfcRelAssociatesDocument, IfcRelAssociatesLibrary, IfcRelAssociatesMaterial, IfcRelConnects, IfcRelConnectsElements, IfcRelConnectsPathElements, IfcRelConnectsPortToElement, IfcRelConnectsPorts, IfcRelConnectsStructuralActivity, IfcRelConnectsStructuralMember, IfcRelConnectsWithEccentricity, IfcRelConnectsWithRealizingElements, IfcRelContainedInSpatialStructure, IfcRelCoversBldgElements, IfcRelCoversSpaces, IfcRelDeclares, IfcRelDecomposes, IfcRelDefines, IfcRelDefinesByObject, IfcRelDefinesByProperties, IfcRelDefinesByTemplate, IfcRelDefinesByType, IfcRelFillsElement, IfcRelFlowControlElements, IfcRelInterferesElements, IfcRelNests, IfcRelProjectsElement, IfcRelReferencedInSpatialStructure, IfcRelSequence, IfcRelServicesBuildings, IfcRelSpaceBoundary, IfcRelSpaceBoundary1stLevel, IfcRelSpaceBoundary2ndLevel, IfcRelVoidsElement, IfcRelationship, IfcReparametrisedCompositeCurveSegment, IfcRepresentation, IfcRepresentationContext, IfcRepresentationItem, IfcRepresentationMap, IfcResource, IfcResourceApprovalRelationship, IfcResourceConstraintRelationship, IfcResourceLevelRelationship, IfcResourceObjectSelect, IfcResourceSelect, IfcResourceTime, IfcRevolvedAreaSolid, IfcRevolvedAreaSolidTapered, IfcRightCircularCone, IfcRightCircularCylinder, IfcRoleEnum, IfcRoof, IfcRoofType, IfcRoofTypeEnum, IfcRoot, IfcRotationalFrequencyMeasure, IfcRotationalMassMeasure, IfcRotationalStiffnessMeasure, IfcRotationalStiffnessSelect, IfcRoundedRectangleProfileDef, IfcSIPrefix, IfcSIUnit, IfcSIUnitName, IfcSanitaryTerminal, IfcSanitaryTerminalType, IfcSanitaryTerminalTypeEnum, IfcSchedulingTime, IfcSeamCurve, IfcSectionModulusMeasure, IfcSectionProperties, IfcSectionReinforcementProperties, IfcSectionTypeEnum, IfcSectionalAreaIntegralMeasure, IfcSectionedSpine, IfcSegmentIndexSelect, IfcSensor, IfcSensorType, IfcSensorTypeEnum, IfcSequenceEnum, IfcShadingDevice, IfcShadingDeviceType, IfcShadingDeviceTypeEnum, IfcShapeAspect, IfcShapeModel, IfcShapeRepresentation, IfcShearModulusMeasure, IfcShell, IfcShellBasedSurfaceModel, IfcSimpleProperty, IfcSimplePropertyTemplate, IfcSimplePropertyTemplateTypeEnum, IfcSimpleValue, IfcSite, IfcSizeSelect, IfcSlab, IfcSlabElementedCase, IfcSlabStandardCase, IfcSlabType, IfcSlabTypeEnum, IfcSlippageConnectionCondition, IfcSolarDevice, IfcSolarDeviceType, IfcSolarDeviceTypeEnum, IfcSolidAngleMeasure, IfcSolidModel, IfcSolidOrShell, IfcSoundPowerLevelMeasure, IfcSoundPowerMeasure, IfcSoundPressureLevelMeasure, IfcSoundPressureMeasure, IfcSpace, IfcSpaceBoundarySelect, IfcSpaceHeater, IfcSpaceHeaterType, IfcSpaceHeaterTypeEnum, IfcSpaceType, IfcSpaceTypeEnum, IfcSpatialElement, IfcSpatialElementType, IfcSpatialStructureElement, IfcSpatialStructureElementType, IfcSpatialZone, IfcSpatialZoneType, IfcSpatialZoneTypeEnum, IfcSpecificHeatCapacityMeasure, IfcSpecularExponent, IfcSpecularHighlightSelect, IfcSpecularRoughness, IfcSphere, IfcSphericalSurface, IfcStackTerminal, IfcStackTerminalType, IfcStackTerminalTypeEnum, IfcStair, IfcStairFlight, IfcStairFlightType, IfcStairFlightTypeEnum, IfcStairType, IfcStairTypeEnum, IfcStateEnum, IfcStructuralAction, IfcStructuralActivity, IfcStructuralActivityAssignmentSelect, IfcStructuralAnalysisModel, IfcStructuralConnection, IfcStructuralConnectionCondition, IfcStructuralCurveAction, IfcStructuralCurveActivityTypeEnum, IfcStructuralCurveConnection, IfcStructuralCurveMember, IfcStructuralCurveMemberTypeEnum, IfcStructuralCurveMemberVarying, IfcStructuralCurveReaction, IfcStructuralItem, IfcStructuralLinearAction, IfcStructuralLoad, IfcStructuralLoadCase, IfcStructuralLoadConfiguration, IfcStructuralLoadGroup, IfcStructuralLoadLinearForce, IfcStructuralLoadOrResult, IfcStructuralLoadPlanarForce, IfcStructuralLoadSingleDisplacement, IfcStructuralLoadSingleDisplacementDistortion, IfcStructuralLoadSingleForce, IfcStructuralLoadSingleForceWarping, IfcStructuralLoadStatic, IfcStructuralLoadTemperature, IfcStructuralMember, IfcStructuralPlanarAction, IfcStructuralPointAction, IfcStructuralPointConnection, IfcStructuralPointReaction, IfcStructuralReaction, IfcStructuralResultGroup, IfcStructuralSurfaceAction, IfcStructuralSurfaceActivityTypeEnum, IfcStructuralSurfaceConnection, IfcStructuralSurfaceMember, IfcStructuralSurfaceMemberTypeEnum, IfcStructuralSurfaceMemberVarying, IfcStructuralSurfaceReaction, IfcStyleAssignmentSelect, IfcStyleModel, IfcStyledItem, IfcStyledRepresentation, IfcSubContractResource, IfcSubContractResourceType, IfcSubContractResourceTypeEnum, IfcSubedge, IfcSurface, IfcSurfaceCurve, IfcSurfaceCurveSweptAreaSolid, IfcSurfaceFeature, IfcSurfaceFeatureTypeEnum, IfcSurfaceOfLinearExtrusion, IfcSurfaceOfRevolution, IfcSurfaceOrFaceSurface, IfcSurfaceReinforcementArea, IfcSurfaceSide, IfcSurfaceStyle, IfcSurfaceStyleElementSelect, IfcSurfaceStyleLighting, IfcSurfaceStyleRefraction, IfcSurfaceStyleRendering, IfcSurfaceStyleShading, IfcSurfaceStyleWithTextures, IfcSurfaceTexture, IfcSweptAreaSolid, IfcSweptDiskSolid, IfcSweptDiskSolidPolygonal, IfcSweptSurface, IfcSwitchingDevice, IfcSwitchingDeviceType, IfcSwitchingDeviceTypeEnum, IfcSystem, IfcSystemFurnitureElement, IfcSystemFurnitureElementType, IfcSystemFurnitureElementTypeEnum, IfcTShapeProfileDef, IfcTable, IfcTableColumn, IfcTableRow, IfcTank, IfcTankType, IfcTankTypeEnum, IfcTask, IfcTaskDurationEnum, IfcTaskTime, IfcTaskTimeRecurring, IfcTaskType, IfcTaskTypeEnum, IfcTelecomAddress, IfcTemperatureGradientMeasure, IfcTemperatureRateOfChangeMeasure, IfcTendon, IfcTendonAnchor, IfcTendonAnchorType, IfcTendonAnchorTypeEnum, IfcTendonType, IfcTendonTypeEnum, IfcTessellatedFaceSet, IfcTessellatedItem, IfcText, IfcTextAlignment, IfcTextDecoration, IfcTextFontName, IfcTextFontSelect, IfcTextLiteral, IfcTextLiteralWithExtent, IfcTextPath, IfcTextStyle, IfcTextStyleFontModel, IfcTextStyleForDefinedFont, IfcTextStyleTextModel, IfcTextTransformation, IfcTextureCoordinate, IfcTextureCoordinateGenerator, IfcTextureMap, IfcTextureVertex, IfcTextureVertexList, IfcThermalAdmittanceMeasure, IfcThermalConductivityMeasure, IfcThermalExpansionCoefficientMeasure, IfcThermalResistanceMeasure, IfcThermalTransmittanceMeasure, IfcThermodynamicTemperatureMeasure, IfcTime, IfcTimeMeasure, IfcTimeOrRatioSelect, IfcTimePeriod, IfcTimeSeries, IfcTimeSeriesDataTypeEnum, IfcTimeSeriesValue, IfcTimeStamp, IfcTopologicalRepresentationItem, IfcTopologyRepresentation, IfcToroidalSurface, IfcTorqueMeasure, IfcTransformer, IfcTransformerType, IfcTransformerTypeEnum, IfcTransitionCode, IfcTranslationalStiffnessSelect, IfcTransportElement, IfcTransportElementType, IfcTransportElementTypeEnum, IfcTrapeziumProfileDef, IfcTriangulatedFaceSet, IfcTrimmedCurve, IfcTrimmingPreference, IfcTrimmingSelect, IfcTubeBundle, IfcTubeBundleType, IfcTubeBundleTypeEnum, IfcTypeObject, IfcTypeProcess, IfcTypeProduct, IfcTypeResource, IfcURIReference, IfcUShapeProfileDef, IfcUnit, IfcUnitAssignment, IfcUnitEnum, IfcUnitaryControlElement, IfcUnitaryControlElementType, IfcUnitaryControlElementTypeEnum, IfcUnitaryEquipment, IfcUnitaryEquipmentType, IfcUnitaryEquipmentTypeEnum, IfcValue, IfcValve, IfcValveType, IfcValveTypeEnum, IfcVaporPermeabilityMeasure, IfcVector, IfcVectorOrDirection, IfcVertex, IfcVertexLoop, IfcVertexPoint, IfcVibrationIsolator, IfcVibrationIsolatorType, IfcVibrationIsolatorTypeEnum, IfcVirtualElement, IfcVirtualGridIntersection, IfcVoidingFeature, IfcVoidingFeatureTypeEnum, IfcVolumeMeasure, IfcVolumetricFlowRateMeasure, IfcWall, IfcWallElementedCase, IfcWallStandardCase, IfcWallType, IfcWallTypeEnum, IfcWarpingConstantMeasure, IfcWarpingMomentMeasure, IfcWarpingStiffnessSelect, IfcWasteTerminal, IfcWasteTerminalType, IfcWasteTerminalTypeEnum, IfcWindow, IfcWindowLiningProperties, IfcWindowPanelOperationEnum, IfcWindowPanelPositionEnum, IfcWindowPanelProperties, IfcWindowStandardCase, IfcWindowStyle, IfcWindowStyleConstructionEnum, IfcWindowStyleOperationEnum, IfcWindowType, IfcWindowTypeEnum, IfcWindowTypePartitioningEnum, IfcWorkCalendar, IfcWorkCalendarTypeEnum, IfcWorkControl, IfcWorkPlan, IfcWorkPlanTypeEnum, IfcWorkSchedule, IfcWorkScheduleTypeEnum, IfcWorkTime, IfcZShapeProfileDef, IfcZone, UNDEFINED } Enum; IFC_PARSE_API boost::optional Parent(Enum v); IFC_PARSE_API Enum FromString(const std::string& s); From bd3118b4a3dfb79b1a4931eb1cc09d9360b06305 Mon Sep 17 00:00:00 2001 From: Xavier Lamorlette Date: Tue, 29 Jan 2019 10:35:12 +0100 Subject: [PATCH 20/41] Fix a "declaration of 'identifier' hides class member" warning --- src/ifcgeom/IfcRepresentationShapeItem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcgeom/IfcRepresentationShapeItem.h b/src/ifcgeom/IfcRepresentationShapeItem.h index 29d5ca264b..c06ecdd4b8 100644 --- a/src/ifcgeom/IfcRepresentationShapeItem.h +++ b/src/ifcgeom/IfcRepresentationShapeItem.h @@ -46,7 +46,7 @@ namespace IfcGeom { const gp_GTrsf& Placement() const { return placement; } bool hasStyle() const { return style != 0; } const SurfaceStyle& Style() const { return *style; } - void setStyle(const SurfaceStyle* style) { this->style = style; } + void setStyle(const SurfaceStyle* newStyle) { style = newStyle; } }; typedef std::vector IfcRepresentationShapeItems; } From 3e041a1fb22aadd70932d4552c1286ab1bae2b71 Mon Sep 17 00:00:00 2001 From: Xavier Lamorlette Date: Tue, 29 Jan 2019 12:02:49 +0100 Subject: [PATCH 21/41] Migrate deprecated bind1st and mem_fun to C++11 bind --- src/ifcgeom/IfcGeomFilter.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ifcgeom/IfcGeomFilter.h b/src/ifcgeom/IfcGeomFilter.h index d766f2b463..4fbeca2726 100644 --- a/src/ifcgeom/IfcGeomFilter.h +++ b/src/ifcgeom/IfcGeomFilter.h @@ -171,8 +171,7 @@ namespace IfcGeom bool operator()(IfcSchema::IfcProduct* prod) const { - // @note bind1st() and mem_fun() deprecated in C++11, use bind() and mem_fn() when migrating to C++11. - return filter::match(prod, std::bind1st(std::mem_fun(&string_arg_filter::match), this)); + return filter::match(prod, std::bind(&string_arg_filter::match, this, std::placeholders::_1)); } void update_description() @@ -219,7 +218,7 @@ namespace IfcGeom bool operator()(IfcSchema::IfcProduct* prod) const { - return filter::match(prod, std::bind1st(std::mem_fun(&layer_filter::match), this)); + return filter::match(prod, std::bind(&layer_filter::match, this, std::placeholders::_1)); } struct wildcards_match @@ -285,7 +284,7 @@ namespace IfcGeom bool operator()(IfcSchema::IfcProduct* prod) const { - return filter::match(prod, std::bind1st(std::mem_fun(&entity_filter::match), this)); + return filter::match(prod, std::bind(&entity_filter::match, this, std::placeholders::_1)); } void update_description() From 81f978f1010f7fdd779136317f21cb461daccb1d Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 6 Feb 2019 12:18:10 +0100 Subject: [PATCH 22/41] Changes to Axis with missing refDirection --- src/ifcgeom/IfcGeomHelpers.cpp | 41 ++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/ifcgeom/IfcGeomHelpers.cpp b/src/ifcgeom/IfcGeomHelpers.cpp index cf440772ab..0e772b64c2 100644 --- a/src/ifcgeom/IfcGeomHelpers.cpp +++ b/src/ifcgeom/IfcGeomHelpers.cpp @@ -158,15 +158,38 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcVector* l, gp_Vec& v) { } bool IfcGeom::Kernel::convert(const IfcSchema::IfcAxis2Placement3D* l, gp_Trsf& trsf) { - IN_CACHE(IfcAxis2Placement3D,l,gp_Trsf,trsf) - gp_Pnt o;gp_Dir axis = gp_Dir(0,0,1);gp_Dir refDirection; - IfcGeom::Kernel::convert(l->Location(),o); - bool hasRef = l->hasRefDirection(); - if ( l->hasAxis() ) IfcGeom::Kernel::convert(l->Axis(),axis); - if ( hasRef ) IfcGeom::Kernel::convert(l->RefDirection(),refDirection); - gp_Ax3 ax3; - if ( hasRef ) ax3 = gp_Ax3(o,axis,refDirection); - else ax3 = gp_Ax3(o,axis); + IN_CACHE(IfcAxis2Placement3D, l, gp_Trsf, trsf) + + gp_Pnt o; + gp_Dir axis(0, 0, 1); + gp_Dir refDirection; + + IfcGeom::Kernel::convert(l->Location(), o); + const bool hasAxis = l->hasAxis(); + const bool hasRef = l->hasRefDirection(); + + if (hasAxis != hasRef) { + Logger::Warning("Axis and RefDirection should be specified together", l); + } + + if (hasAxis) { + IfcGeom::Kernel::convert(l->Axis(), axis); + } + + if (hasRef) { + IfcGeom::Kernel::convert(l->RefDirection(), refDirection); + } else { + if (!axis.IsParallel(gp::DX(), 1.e-5)) { + refDirection = gp::DX(); + } else { + refDirection = gp::DZ(); + } + gp_Vec Xvec = axis.Dot(refDirection) * axis; + gp_Vec Xaxis = refDirection.XYZ() - Xvec.XYZ(); + refDirection = Xaxis; + } + + gp_Ax3 ax3(o, axis, refDirection); if (!axis_equal(ax3, (gp_Ax3) gp::XOY(), getValue(GV_PRECISION))) { trsf.SetTransformation(ax3, gp::XOY()); From 40c2602b0ef06abb1f49a224bfaef2468ca8cb10 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 6 Feb 2019 13:29:56 +0100 Subject: [PATCH 23/41] Fix discrepancy with v06 --- src/ifcgeom/IfcGeomHelpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcgeom/IfcGeomHelpers.cpp b/src/ifcgeom/IfcGeomHelpers.cpp index 0e772b64c2..2517be14a0 100644 --- a/src/ifcgeom/IfcGeomHelpers.cpp +++ b/src/ifcgeom/IfcGeomHelpers.cpp @@ -169,7 +169,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcAxis2Placement3D* l, gp_Trsf& const bool hasRef = l->hasRefDirection(); if (hasAxis != hasRef) { - Logger::Warning("Axis and RefDirection should be specified together", l); + Logger::Warning("Axis and RefDirection should be specified together", l->entity); } if (hasAxis) { From 38f7ccdc201e3ed61a5085a9dd8eccbd375966a6 Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Fri, 28 Sep 2018 15:00:48 +0300 Subject: [PATCH 24/41] Optimize IfcFile::entitiesByReference() by reserving capacity for IfcEntityList in advance. Around 18.4 % speed-up (avg. of first 2000 calls) when converting a somewhat large (176 MB) file to XML. --- src/ifcparse/IfcEntityList.h | 1 + src/ifcparse/IfcParse.cpp | 11 +++++------ src/ifcparse/IfcUtil.cpp | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ifcparse/IfcEntityList.h b/src/ifcparse/IfcEntityList.h index 3953a29715..d8789fee4c 100644 --- a/src/ifcparse/IfcEntityList.h +++ b/src/ifcparse/IfcEntityList.h @@ -40,6 +40,7 @@ public: it end(); IfcUtil::IfcBaseClass* operator[] (int i); unsigned int size() const; + void reserve(unsigned capacity); bool contains(IfcUtil::IfcBaseClass*) const; template typename U::list::ptr as() { diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 83b0740bdb..20d7cb53dd 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1793,17 +1793,16 @@ IfcEntityList::ptr IfcFile::entitiesByType(const std::string& t) { IfcEntityList::ptr IfcFile::entitiesByReference(int t) { entities_by_ref_t::const_iterator it = byref.find(t); - IfcEntityList::ptr return_value; + IfcEntityList::ptr ret; if (it != byref.end()) { + ret.reset(new IfcEntityList); + ret->reserve((unsigned)it->second.size()); const std::vector& ids = it->second; for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { - if (!return_value) { - return_value.reset(new IfcEntityList); - } - return_value->push(entityById(*jt)); + ret->push(entityById(*jt)); } } - return return_value; + return ret; } IfcUtil::IfcBaseClass* IfcFile::entityById(int id) { diff --git a/src/ifcparse/IfcUtil.cpp b/src/ifcparse/IfcUtil.cpp index 5c2546c5e7..fb4c48a815 100644 --- a/src/ifcparse/IfcUtil.cpp +++ b/src/ifcparse/IfcUtil.cpp @@ -48,6 +48,7 @@ void IfcEntityList::push(const IfcEntityList::ptr& l) { } } unsigned int IfcEntityList::size() const { return (unsigned int) ls.size(); } +void IfcEntityList::reserve(unsigned capacity) { ls.reserve((size_t)capacity); } IfcEntityList::it IfcEntityList::begin() { return ls.begin(); } IfcEntityList::it IfcEntityList::end() { return ls.end(); } IfcUtil::IfcBaseClass* IfcEntityList::operator[] (int i) { From 910cdb3754c00589de745944bd4e3f6ae161c83a Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Mon, 1 Oct 2018 13:19:31 +0300 Subject: [PATCH 25/41] IfcConvert: print durations of file parsing and XML conversion. --- src/ifcconvert/IfcConvert.cpp | 53 ++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 4659875800..7847f139b8 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -116,6 +116,7 @@ bool rename_file(const std::string& old_filename, const std::string& new_filenam static std::stringstream log_stream; void write_log(bool); +std::string format_duration(time_t start, time_t end); /// @todo make the filters non-global IfcGeom::entity_filter entity_filter; // Entity filter is used always by default. @@ -473,11 +474,15 @@ int main(int argc, char** argv) int exit_code = EXIT_FAILURE; try { if (init_input_file(input_filename, ifc_file, no_progress || quiet, mmap)) { + time_t start, end; + time(&start); XmlSerializer s(output_temp_filename); s.setFile(&ifc_file); Logger::Status("Writing XML output..."); s.finalize(); - Logger::Status("Done!"); + time(&end); + Logger::Status("Done! Conversion took " + format_duration(start, end)); + rename_file(output_temp_filename, output_filename); exit_code = EXIT_SUCCESS; } @@ -760,28 +765,33 @@ int main(int argc, char** argv) time(&end); - if (!quiet) { - int seconds = (int)difftime(end, start); - std::stringstream msg; - int minutes = seconds / 60; - seconds = seconds % 60; - msg << "\nConversion took"; - if (minutes > 0) { - msg << " " << minutes << " minute"; - if (minutes > 1) { - msg << "s"; - } - } - msg << " " << seconds << " second"; - if (seconds > 1) { - msg << "s"; - } - Logger::Status(msg.str()); - } + if (!quiet) { + Logger::Status("\nConversion took " + format_duration(start, end)); + } return successful ? EXIT_SUCCESS : EXIT_FAILURE; } +std::string format_duration(time_t start, time_t end) +{ + int seconds = (int)difftime(end, start); + std::stringstream ss; + int minutes = seconds / 60; + seconds = seconds % 60; + if (minutes > 0) { + ss << minutes << " minute"; + if (minutes == 0 || minutes > 1) { + ss << "s"; + } + ss << " "; + } + ss << seconds << " second"; + if (seconds == 0 || seconds > 1) { + ss << "s"; + } + return ss.str(); +} + void write_log(bool header) { std::string log = log_stream.str(); if (!log.empty()) { @@ -794,9 +804,12 @@ void write_log(bool header) { bool init_input_file(const std::string &filename, IfcParse::IfcFile &ifc_file, bool no_progress, bool mmap) { + time_t start, end; + // Prevent IfcFile::Init() prints by setting output to null temporarily if (no_progress) { Logger::SetOutput(NULL, &log_stream); } + time(&start); #ifdef USE_MMAP if (!ifc_file.Init(filename, mmap)) { #else @@ -806,8 +819,10 @@ bool init_input_file(const std::string &filename, IfcParse::IfcFile &ifc_file, b Logger::Error("Unable to parse input file '" + filename + "'"); return false; } + time(&end); if (no_progress) { Logger::SetOutput(&std::cout, &log_stream); } + else { Logger::Status("Parsing input file took " + format_duration(start, end)); } return true; } From 9211f80625ce4882b7aa08ea16390cb46001d439 Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Mon, 1 Oct 2018 15:11:34 +0300 Subject: [PATCH 26/41] IfcFile::entitiesByReference: cache loaded references. Profiling shows around 3x speed-up (avg. of first 5000 calls to this function). --- src/ifcparse/IfcFile.h | 2 ++ src/ifcparse/IfcParse.cpp | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ifcparse/IfcFile.h b/src/ifcparse/IfcFile.h index daa31feb27..1e871412fe 100644 --- a/src/ifcparse/IfcFile.h +++ b/src/ifcparse/IfcFile.h @@ -39,6 +39,7 @@ public: typedef boost::unordered_map entity_by_id_t; typedef std::map entity_by_guid_t; typedef std::map > entities_by_ref_t; + typedef std::map ref_map_t; typedef entity_by_id_t::const_iterator const_iterator; class type_iterator : private entities_by_type_t::const_iterator { @@ -77,6 +78,7 @@ private: entities_by_type_t bytype; entities_by_type_t bytype_excl; entities_by_ref_t byref; + ref_map_t by_ref_cached_; entity_by_guid_t byguid; entity_entity_map_t entity_file_map; diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 20d7cb53dd..cd904790af 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1795,12 +1795,19 @@ IfcEntityList::ptr IfcFile::entitiesByReference(int t) { entities_by_ref_t::const_iterator it = byref.find(t); IfcEntityList::ptr ret; if (it != byref.end()) { - ret.reset(new IfcEntityList); - ret->reserve((unsigned)it->second.size()); - const std::vector& ids = it->second; - for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { - ret->push(entityById(*jt)); - } + ref_map_t::const_iterator cached_it = by_ref_cached_.find(t); + if (cached_it != by_ref_cached_.end()) { + ret = cached_it->second; + } + else { + ret.reset(new IfcEntityList); + ret->reserve((unsigned)it->second.size()); + const std::vector& ids = it->second; + for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { + ret->push(entityById(*jt)); + } + by_ref_cached_[t] = ret; + } } return ret; } From 3bef32bb874b6f535164711bbefed85bdb8ac08f Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Mon, 1 Oct 2018 19:59:18 +0300 Subject: [PATCH 27/41] IfcGeom::Kernel::get_layers: remove what would appear to be unnecessary code (yields 0 layers in my tests). The LayerAssignments() calls can take up to 95 % of the function's execution time yielding no results. --- src/ifcgeom/IfcGeomFunctions.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index 416a5d51d0..dc0a98e213 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -1807,20 +1807,6 @@ std::map IfcGeom::Kerne layers[(*jt)->Name()] = *jt; } } - - IfcRepresentationItem::list::ptr items = r->as(); - for (IfcRepresentationItem::list::it it = items->begin(); it != items->end(); ++it) { - IfcPresentationLayerAssignment::list::ptr a = (*it)-> - // LayerAssignments renamed from plural to singular, LayerAssignment, so work around that -#ifdef USE_IFC4 - LayerAssignment(); -#else - LayerAssignments(); -#endif - for (IfcPresentationLayerAssignment::list::it jt = a->begin(); jt != a->end(); ++jt) { - layers[(*jt)->Name()] = *jt; - } - } } return layers; } From 000d11daab57c2a264fbc3125a982ba5cbd4d71a Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Fri, 21 Dec 2018 12:06:35 +0200 Subject: [PATCH 28/41] IfcFile: possibility to mark an entity as modified so that potential cache is invalidated. --- src/ifcparse/IfcFile.h | 4 ++++ src/ifcparse/IfcParse.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ifcparse/IfcFile.h b/src/ifcparse/IfcFile.h index 1e871412fe..66f5c86159 100644 --- a/src/ifcparse/IfcFile.h +++ b/src/ifcparse/IfcFile.h @@ -148,6 +148,10 @@ public: /// in the first function argument. IfcEntityList::ptr traverse(IfcUtil::IfcBaseClass* instance, int max_level=-1); + /// Marks entity as modified so that potential cache for it is invalidated. + /// @todo Currently the whole cache is invalidated. Implement more fine-grained invalidation. + void mark_entity_as_modified(int id); + #ifdef USE_MMAP bool Init(const std::string& fn, bool mmap=false); #else diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index cd904790af..9e2b3bb41d 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1213,7 +1213,9 @@ void IfcEntityInstanceData::setArgument(unsigned int i, Argument* a, IfcUtil::Ar if (this->file) { register_inverse_visitor visitor(*this->file, *this); apply_individual_instance_visitor(copy).apply(visitor); - } + + this->file->mark_entity_as_modified(id_); + } if (i < attributes_.size()) { attributes_[i] = copy; @@ -1429,6 +1431,11 @@ IfcEntityList::ptr IfcFile::traverse(IfcUtil::IfcBaseClass* instance, int max_le return IfcParse::traverse(instance, max_level); } +void IfcFile::mark_entity_as_modified(int /*id*/) +{ + by_ref_cached_.clear(); +} + void IfcFile::addEntities(IfcEntityList::ptr es) { for( IfcEntityList::it i = es->begin(); i != es->end(); ++ i ) { addEntity(*i); From 6bac067488c7d559371ab6d940b79f5e7c41f461 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 6 Feb 2019 13:33:38 +0100 Subject: [PATCH 29/41] Keep behaviour of returned null pointers for now --- src/ifcparse/IfcParse.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 9e2b3bb41d..0e63c88360 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -1807,11 +1807,13 @@ IfcEntityList::ptr IfcFile::entitiesByReference(int t) { ret = cached_it->second; } else { - ret.reset(new IfcEntityList); - ret->reserve((unsigned)it->second.size()); - const std::vector& ids = it->second; - for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { - ret->push(entityById(*jt)); + if (it->second.size()) { + ret.reset(new IfcEntityList); + ret->reserve((unsigned)it->second.size()); + const std::vector& ids = it->second; + for (std::vector::const_iterator jt = ids.begin(); jt != ids.end(); ++jt) { + ret->push(entityById(*jt)); + } } by_ref_cached_[t] = ret; } From 9f7a7a2c5b17ad232e0770ffde57da3791019f7c Mon Sep 17 00:00:00 2001 From: Dawid Huczynski Date: Wed, 6 Feb 2019 00:42:49 +0000 Subject: [PATCH 30/41] basic update to blender2.8, use of existing mesh if id match, --- .../io_import_scene_ifc/__init__.py | 224 ++++++++++-------- 1 file changed, 130 insertions(+), 94 deletions(-) diff --git a/src/ifcblender/io_import_scene_ifc/__init__.py b/src/ifcblender/io_import_scene_ifc/__init__.py index dee3adb560..8c6ed16d23 100644 --- a/src/ifcblender/io_import_scene_ifc/__init__.py +++ b/src/ifcblender/io_import_scene_ifc/__init__.py @@ -27,42 +27,46 @@ bl_info = { "name": "IfcBlender", - "description": "Import files in the "\ + "description": "Import files in the " "Industry Foundation Classes (.ifc) file format", "author": "Thomas Krijnen, IfcOpenShell", - "blender": (2, 73, 0), + "blender": (2, 80, 0), "location": "File > Import", - "tracker_url": "https://sourceforge.net/p/ifcopenshell/"\ + "tracker_url": "https://sourceforge.net/p/ifcopenshell/" "_list/tickets?source=navbar", "category": "Import-Export"} if "bpy" in locals(): - import imp + import importlib if "ifcopenshell" in locals(): - imp.reload(ifcopenshell) + importlib.reload(ifcopenshell) import bpy import mathutils from bpy.props import StringProperty, IntProperty, BoolProperty from bpy_extras.io_utils import ImportHelper -major,minor = bpy.app.version[0:2] +major, minor = bpy.app.version[0:2] transpose_matrices = minor >= 62 -bpy.types.Object.ifc_id = IntProperty(name="IFC Entity ID", +bpy.types.Object.ifc_id = IntProperty( + name="IFC Entity ID", description="The STEP entity instance name") -bpy.types.Object.ifc_guid = StringProperty(name="IFC Entity GUID", +bpy.types.Object.ifc_guid = StringProperty( + name="IFC Entity GUID", description="The IFC Globally Unique Identifier") -bpy.types.Object.ifc_name = StringProperty(name="IFC Entity Name", +bpy.types.Object.ifc_name = StringProperty( + name="IFC Entity Name", description="The optional name attribute") -bpy.types.Object.ifc_type = StringProperty(name="IFC Entity Type", +bpy.types.Object.ifc_type = StringProperty( + name="IFC Entity Type", description="The STEP Datatype keyword") def import_ifc(filename, use_names, process_relations, blender_booleans): from . import ifcopenshell from .ifcopenshell import geom as ifcopenshell_geom - print("Reading %s..."%bpy.path.basename(filename)) + print(f"Reading {bpy.path.basename(filename)}...") settings = ifcopenshell_geom.settings() settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, blender_booleans) iterator = ifcopenshell_geom.iterator(settings, filename) @@ -76,9 +80,14 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): openings = [] old_progress = -1 print("Creating geometry...") + collection = bpy.data.collections.new(f"{bpy.path.basename(filename)}") + bpy.context.scene.collection.children.link(collection) + if process_relations: + rel_collection = bpy.data.collections.new("Relations") + collection.children.link(rel_collection) while True: ob = iterator.get() - + f = ob.geometry.faces v = ob.geometry.verts mats = ob.geometry.materials @@ -86,54 +95,75 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): m = ob.transformation.matrix.data t = ob.type[0:21] nm = ob.name if len(ob.name) and use_names else ob.guid - - verts = [[v[i], v[i + 1], v[i + 2]] \ - for i in range(0, len(v), 3)] - faces = [[f[i], f[i + 1], f[i + 2]] \ - for i in range(0, len(f), 3)] - + # MESH CREATION # Depending on version, geometry.id will be either int or str - me = bpy.data.meshes.new('mesh-%r' % ob.geometry.id) - me.from_pydata(verts, [], faces) - me.validate() - - def add_material(mname, props): - if mname in bpy.data.materials: - mat = bpy.data.materials[mname] - mat.use_fake_user = True - else: - mat = bpy.data.materials.new(mname) - for k,v in props.items(): - setattr(mat, k, v) - me.materials.append(mat) - - needs_default = -1 in matids - if needs_default: add_material(t, {}) - - for mat in mats: - props = {} - if mat.has_diffuse: props['diffuse_color'] = mat.diffuse - if mat.has_specular: props['specular_color'] = mat.specular - if mat.has_transparency and mat.transparency > 0: - props['alpha'] = 1.0 - mat.transparency - props['use_transparency'] = True - if mat.has_specularity: props['specular_hardness'] = mat.specularity - add_material(mat.name, props) + mesh_name = 'mesh-%r' % ob.geometry.id + if mesh_name in bpy.data.meshes: + me = bpy.data.meshes[mesh_name] + else: + verts = [[v[i], v[i + 1], v[i + 2]] + for i in range(0, len(v), 3)] + faces = [[f[i], f[i + 1], f[i + 2]] + for i in range(0, len(f), 3)] + me = bpy.data.meshes.new(mesh_name) + me.from_pydata(verts, [], faces) + me.validate() + # MATERIAL CREATION + def add_material(mname, props): + if mname in bpy.data.materials: + mat = bpy.data.materials[mname] + mat.use_fake_user = True + else: + mat = bpy.data.materials.new(mname) + for k, v in props.items(): + if k == 'transparency': + mat.blend_method = 'HASHED' + mat.use_screen_refraction = True + mat.refraction_depth = 0.1 + mat.use_nodes = True + mat.node_tree.nodes["Principled BSDF"].inputs[15].default_value = v + else: + setattr(mat, k, v) + me.materials.append(mat) + + needs_default = -1 in matids + if needs_default: + add_material(t, {}) + + for mat in mats: + props = {} + if mat.has_diffuse: + props['diffuse_color'] = mat.diffuse + if mat.has_specular: + props['specular_color'] = mat.specular + if mat.has_transparency and mat.transparency > 0: + props['transparency'] = mat.transparency + if mat.has_specularity: + props['specular_intensity'] = mat.specularity + add_material(mat.name, props) + + faces = me.polygons if hasattr(me, 'polygons') else me.faces + if len(faces) == len(matids): + for face, matid in zip(faces, matids): + face.material_index = matid + (1 if needs_default else 0) + + # OBJECT CREATION bob = bpy.data.objects.new(nm, me) mat = mathutils.Matrix(([m[0], m[1], m[2], 0], - [m[3], m[4], m[5], 0], - [m[6], m[7], m[8], 0], - [m[9], m[10], m[11], 1])) - if transpose_matrices: mat.transpose() - + [m[3], m[4], m[5], 0], + [m[6], m[7], m[8], 0], + [m[9], m[10], m[11], 1])) + if transpose_matrices: + mat.transpose() + if process_relations: id_to_matrix[ob.id] = mat else: bob.matrix_world = mat - bpy.context.scene.objects.link(bob) + collection.objects.link(bob) - bpy.context.scene.objects.active = bob + bpy.context.view_layer.objects.active = bob bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.normals_make_consistent() bpy.ops.object.mode_set(mode='OBJECT') @@ -143,23 +173,19 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): if ob.type == 'IfcSpace' or ob.type == 'IfcOpeningElement': if not (ob.type == 'IfcOpeningElement' and blender_booleans): - bob.hide = bob.hide_render = True - bob.draw_type = 'WIRE' - - if ob.id not in id_to_object: id_to_object[ob.id] = [] + bob.hide_viewport = bob.hide_render = True + bob.display_type = 'WIRE' + + if ob.id not in id_to_object: + id_to_object[ob.id] = [] id_to_object[ob.id].append(bob) if ob.parent_id > 0: id_to_parent[ob.id] = ob.parent_id - + if blender_booleans and ob.type == 'IfcOpeningElement': openings.append(ob.id) - - faces = me.polygons if hasattr(me, 'polygons') else me.faces - if len(faces) == len(matids): - for face, matid in zip(faces, matids): - face.material_index = matid + (1 if needs_default else 0) - + progress = iterator.progress() // 2 if progress > old_progress: print("\r[" + "#" * progress + " " * (50 - progress) + "]", end="") @@ -170,13 +196,13 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): print("\rDone creating geometry" + " " * 30) id_to_parent_temp = dict(id_to_parent) - + if process_relations: print("Processing relations...") while len(id_to_parent_temp) and process_relations: id, parent_id = id_to_parent_temp.popitem() - + if parent_id in id_to_object: bob = id_to_object[parent_id][0] else: @@ -188,16 +214,17 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): nm = parent_ob.name if len(parent_ob.name) and use_names \ else parent_ob.guid bob = bpy.data.objects.new(nm, None) - + mat = mathutils.Matrix(( [m[0], m[1], m[2], 0], [m[3], m[4], m[5], 0], [m[6], m[7], m[8], 0], [m[9], m[10], m[11], 1])) - if transpose_matrices: mat.transpose() + if transpose_matrices: + mat.transpose() id_to_matrix[parent_ob.id] = mat - - bpy.context.scene.objects.link(bob) + + rel_collection.objects.link(bob) bob.ifc_id = parent_ob.id bob.ifc_name, bob.ifc_type, bob.ifc_guid = \ @@ -220,13 +247,13 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): parent_matrix = id_to_matrix.get(parent_id, None) for ob in id_to_object[id]: if parent_matrix: - ob.matrix_local = parent_matrix.inverted() * matrix + ob.matrix_local = parent_matrix.inverted() @ matrix else: ob.matrix_world = matrix - + if process_relations: print("Done processing relations") - + for opening_id in openings: parent_id = id_to_parent[opening_id] if parent_id in id_to_object: @@ -235,8 +262,8 @@ def import_ifc(filename, use_names, process_relations, blender_booleans): mod = parent_ob.modifiers.new("opening", "BOOLEAN") mod.operation = "DIFFERENCE" mod.object = opening_ob - - txt = bpy.data.texts.new("%s.log"%bpy.path.basename(filename)) + + txt = bpy.data.texts.new(f"{bpy.path.basename(filename)}.log") txt.from_string(iterator.getLog()) return True @@ -247,42 +274,51 @@ class ImportIFC(bpy.types.Operator, ImportHelper): bl_label = "Import .ifc file" filename_ext = ".ifc" - filter_glob = StringProperty(default="*.ifc", options={'HIDDEN'}) + filter_glob: StringProperty(default="*.ifc", options={'HIDDEN'}) - use_names = BoolProperty(name="Use entity names", - description="Use entity names rather than GlobalIds for objects", - default=True) - process_relations = BoolProperty(name="Process relations", - description="Convert containment and aggregation" \ - " relations to parenting" \ - " (warning: may be slow on large files)", - default=False) - blender_booleans = BoolProperty(name="Use Blender booleans", - description="Use Blender boolean modifiers for opening" \ - " elements", - default=False) + use_names: BoolProperty(name="Use entity names", + description="Use entity names rather than " + "GlobalIds for objects", + default=True) + process_relations: BoolProperty(name="Process relations", + description="Convert containment and " + "aggregation relations to parenting" + " (warning: may be slow on large files)", + default=False) + blender_booleans: BoolProperty(name="Use Blender booleans", + description="Use Blender boolean modifiers " + "for opening elements", + default=False) def execute(self, context): - if not import_ifc(self.filepath, self.use_names, self.process_relations, self.blender_booleans): + if not import_ifc(self.filepath, self.use_names, + self.process_relations, self.blender_booleans): self.report({'ERROR'}, - 'Unable to parse .ifc file or no geometrical entities found' - ) + 'Unable to parse .ifc file or no geometrical entities found' + ) return {'FINISHED'} def menu_func_import(self, context): self.layout.operator(ImportIFC.bl_idname, - text="Industry Foundation Classes (.ifc)") + text="Industry Foundation Classes (.ifc)") + + +classes = ( + ImportIFC, +) def register(): - bpy.utils.register_module(__name__) - bpy.types.INFO_MT_file_import.append(menu_func_import) + for cls in classes: + bpy.utils.register_class(cls) + bpy.types.TOPBAR_MT_file_import.append(menu_func_import) def unregister(): - bpy.utils.unregister_module(__name__) - bpy.types.INFO_MT_file_import.remove(menu_func_import) + for cls in reversed(classes): + bpy.utils.unregister_class(cls) + bpy.types.TOPBAR_MT_file_import.remove(menu_func_import) if __name__ == "__main__": From 3fdd92dc841d71e89d74a8a45d0fcca95972f28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Huczy=C5=84ski?= Date: Wed, 6 Feb 2019 11:45:22 +0000 Subject: [PATCH 31/41] Create intersection.py --- .../io_import_scene_ifc/intersection.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/ifcblender/io_import_scene_ifc/intersection.py diff --git a/src/ifcblender/io_import_scene_ifc/intersection.py b/src/ifcblender/io_import_scene_ifc/intersection.py new file mode 100644 index 0000000000..31195be334 --- /dev/null +++ b/src/ifcblender/io_import_scene_ifc/intersection.py @@ -0,0 +1,103 @@ +import bpy +import bmesh + +def bmesh_copy_from_object(obj, transform=True, triangulate=True, apply_modifiers=False): + """ + Returns a transformed, triangulated copy of the mesh + """ + + assert(obj.type == 'MESH') + + if apply_modifiers and obj.modifiers: + me = obj.to_mesh(bpy.context.scene, True, 'PREVIEW', calc_tessface=False) + bm = bmesh.new() + bm.from_mesh(me) + bpy.data.meshes.remove(me) + else: + me = obj.data + if obj.mode == 'EDIT': + bm_orig = bmesh.from_edit_mesh(me) + bm = bm_orig.copy() + else: + bm = bmesh.new() + bm.from_mesh(me) + + # Remove custom data layers to save memory + for elem in (bm.faces, bm.edges, bm.verts, bm.loops): + for layers_name in dir(elem.layers): + if not layers_name.startswith("_"): + layers = getattr(elem.layers, layers_name) + for layer_name, layer in layers.items(): + layers.remove(layer) + + if transform: + bm.transform(obj.matrix_world) + + if triangulate: + bmesh.ops.triangulate(bm, faces=bm.faces) + + return bm + +def bmesh_check_intersect_objects(obj, obj2): + """ + Check if any faces intersect with the other object + + returns a boolean + """ + assert(obj != obj2) + + # Triangulate + bm = bmesh_copy_from_object(obj, transform=True, triangulate=True) + bm2 = bmesh_copy_from_object(obj2, transform=True, triangulate=True) + + # If bm has more edges, use bm2 instead for looping over its edges + # (so we cast less rays from the simpler object to the more complex object) + if len(bm.edges) > len(bm2.edges): + bm2, bm = bm, bm2 + + # Create a real mesh (lame!) + scene = bpy.context.scene + me_tmp = bpy.data.meshes.new(name="~temp~") + bm2.to_mesh(me_tmp) + bm2.free() + obj_tmp = bpy.data.objects.new(name=me_tmp.name, object_data=me_tmp) + scene.objects.link(obj_tmp) + scene.update() + ray_cast = obj_tmp.ray_cast + + intersect = False + + EPS_NORMAL = 0.000001 + EPS_CENTER = 0.01 # should always be bigger + + #for ed in me_tmp.edges: + for ed in bm.edges: + v1, v2 = ed.verts + + # setup the edge with an offset + co_1 = v1.co.copy() + co_2 = v2.co.copy() + co_mid = (co_1 + co_2) * 0.5 + no_mid = (v1.normal + v2.normal).normalized() * EPS_NORMAL + co_1 = co_1.lerp(co_mid, EPS_CENTER) + no_mid + co_2 = co_2.lerp(co_mid, EPS_CENTER) + no_mid + + co, no, index = ray_cast(co_1, co_2) + if index != -1: + intersect = True + break + + scene.objects.unlink(obj_tmp) + bpy.data.objects.remove(obj_tmp) + bpy.data.meshes.remove(me_tmp) + + scene.update() + + return intersect + + +obj = bpy.context.object +obj2 = (ob for ob in bpy.context.selected_objects if ob != obj).__next__() +intersect = bmesh_check_intersect_objects(obj, obj2) + +print("There are%s intersections." % ("" if intersect else " NO")) From 9b0be0fb4ef895969d0c158526a17f62d1e46e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Huczy=C5=84ski?= Date: Wed, 6 Feb 2019 14:08:13 +0000 Subject: [PATCH 32/41] Delete intersection.py --- .../io_import_scene_ifc/intersection.py | 103 ------------------ 1 file changed, 103 deletions(-) delete mode 100644 src/ifcblender/io_import_scene_ifc/intersection.py diff --git a/src/ifcblender/io_import_scene_ifc/intersection.py b/src/ifcblender/io_import_scene_ifc/intersection.py deleted file mode 100644 index 31195be334..0000000000 --- a/src/ifcblender/io_import_scene_ifc/intersection.py +++ /dev/null @@ -1,103 +0,0 @@ -import bpy -import bmesh - -def bmesh_copy_from_object(obj, transform=True, triangulate=True, apply_modifiers=False): - """ - Returns a transformed, triangulated copy of the mesh - """ - - assert(obj.type == 'MESH') - - if apply_modifiers and obj.modifiers: - me = obj.to_mesh(bpy.context.scene, True, 'PREVIEW', calc_tessface=False) - bm = bmesh.new() - bm.from_mesh(me) - bpy.data.meshes.remove(me) - else: - me = obj.data - if obj.mode == 'EDIT': - bm_orig = bmesh.from_edit_mesh(me) - bm = bm_orig.copy() - else: - bm = bmesh.new() - bm.from_mesh(me) - - # Remove custom data layers to save memory - for elem in (bm.faces, bm.edges, bm.verts, bm.loops): - for layers_name in dir(elem.layers): - if not layers_name.startswith("_"): - layers = getattr(elem.layers, layers_name) - for layer_name, layer in layers.items(): - layers.remove(layer) - - if transform: - bm.transform(obj.matrix_world) - - if triangulate: - bmesh.ops.triangulate(bm, faces=bm.faces) - - return bm - -def bmesh_check_intersect_objects(obj, obj2): - """ - Check if any faces intersect with the other object - - returns a boolean - """ - assert(obj != obj2) - - # Triangulate - bm = bmesh_copy_from_object(obj, transform=True, triangulate=True) - bm2 = bmesh_copy_from_object(obj2, transform=True, triangulate=True) - - # If bm has more edges, use bm2 instead for looping over its edges - # (so we cast less rays from the simpler object to the more complex object) - if len(bm.edges) > len(bm2.edges): - bm2, bm = bm, bm2 - - # Create a real mesh (lame!) - scene = bpy.context.scene - me_tmp = bpy.data.meshes.new(name="~temp~") - bm2.to_mesh(me_tmp) - bm2.free() - obj_tmp = bpy.data.objects.new(name=me_tmp.name, object_data=me_tmp) - scene.objects.link(obj_tmp) - scene.update() - ray_cast = obj_tmp.ray_cast - - intersect = False - - EPS_NORMAL = 0.000001 - EPS_CENTER = 0.01 # should always be bigger - - #for ed in me_tmp.edges: - for ed in bm.edges: - v1, v2 = ed.verts - - # setup the edge with an offset - co_1 = v1.co.copy() - co_2 = v2.co.copy() - co_mid = (co_1 + co_2) * 0.5 - no_mid = (v1.normal + v2.normal).normalized() * EPS_NORMAL - co_1 = co_1.lerp(co_mid, EPS_CENTER) + no_mid - co_2 = co_2.lerp(co_mid, EPS_CENTER) + no_mid - - co, no, index = ray_cast(co_1, co_2) - if index != -1: - intersect = True - break - - scene.objects.unlink(obj_tmp) - bpy.data.objects.remove(obj_tmp) - bpy.data.meshes.remove(me_tmp) - - scene.update() - - return intersect - - -obj = bpy.context.object -obj2 = (ob for ob in bpy.context.selected_objects if ob != obj).__next__() -intersect = bmesh_check_intersect_objects(obj, obj2) - -print("There are%s intersections." % ("" if intersect else " NO")) From a4c2aa8f4222e1072f66fdf71bb4ac3510c30899 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 8 Feb 2019 15:18:55 +0100 Subject: [PATCH 33/41] IfcConvert Windows unicode support (#258) --- src/ifcconvert/ColladaSerializer.cpp | 2 + src/ifcconvert/ColladaSerializer.h | 2 +- src/ifcconvert/IfcConvert.cpp | 399 ++++++++++-------- src/ifcconvert/OpenCascadeBasedSerializer.cpp | 10 +- src/ifcconvert/SvgSerializer.h | 4 +- src/ifcconvert/WavefrontObjSerializer.cpp | 13 + src/ifcconvert/WavefrontObjSerializer.h | 12 +- src/ifcconvert/XmlSerializer.cpp | 12 +- src/ifcgeom/IfcGeomRenderStyles.cpp | 1 + src/ifcparse/Argument.h | 4 - src/ifcparse/IfcLogger.cpp | 113 +++-- src/ifcparse/IfcLogger.h | 15 + src/ifcparse/IfcParse.cpp | 11 +- src/ifcparse/IfcUtil.cpp | 84 ++++ src/ifcparse/utils.h | 59 +++ 15 files changed, 506 insertions(+), 235 deletions(-) create mode 100644 src/ifcparse/utils.h diff --git a/src/ifcconvert/ColladaSerializer.cpp b/src/ifcconvert/ColladaSerializer.cpp index e0c3eb169c..8d5ed42ab1 100644 --- a/src/ifcconvert/ColladaSerializer.cpp +++ b/src/ifcconvert/ColladaSerializer.cpp @@ -32,6 +32,8 @@ #include #include +#include "../ifcparse/utils.h" + using namespace IfcSchema; static std::string& collada_id(std::string& s) diff --git a/src/ifcconvert/ColladaSerializer.h b/src/ifcconvert/ColladaSerializer.h index 8c435f81a0..043ea3584a 100644 --- a/src/ifcconvert/ColladaSerializer.h +++ b/src/ifcconvert/ColladaSerializer.h @@ -198,7 +198,7 @@ private: ColladaExporter(const std::string& scene_name, const std::string& fn, ColladaSerializer *_serializer, bool double_precision) : filename(fn) - , stream(filename, double_precision) + , stream(COLLADASW::NativeString(filename.c_str(), COLLADASW::NativeString::ENCODING_UTF8), double_precision) , scene(scene_name, stream, _serializer) , materials(stream, _serializer) , geometries(stream, _serializer) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 7847f139b8..db984857eb 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -36,6 +36,8 @@ #include "../ifcgeom/IfcGeomIterator.h" #include "../ifcgeom/IfcGeomRenderStyles.h" +#include "../ifcparse/utils.h" + #include #include @@ -51,6 +53,23 @@ #include #endif +#ifdef _MSC_VER +#include +#include +// C++11 header: +#include +#endif + +#if defined(_MSC_VER) && defined(_UNICODE) +typedef std::wstring path_t; +static std::wostream& cout_ = std::wcout; +static std::wostream& cerr_ = std::wcerr; +#else +typedef std::string path_t; +static std::ostream& cout_ = std::cout; +static std::ostream& cerr_ = std::cerr; +#endif + const std::string DEFAULT_EXTENSION = "obj"; const std::string TEMP_FILE_EXTENSION = ".tmp"; @@ -58,12 +77,12 @@ namespace po = boost::program_options; void print_version() { - std::cout << "IfcOpenShell " << IfcSchema::Identifier << " IfcConvert " << IFCOPENSHELL_VERSION << " (OCC " << OCC_VERSION_STRING_EXT << ")\n"; + cout_ << "IfcOpenShell " << IfcSchema::Identifier << " IfcConvert " << IFCOPENSHELL_VERSION << " (OCC " << OCC_VERSION_STRING_EXT << ")\n"; } void print_usage(bool suggest_help = true) { - std::cout << "Usage: IfcConvert [options] []\n" + cout_ << "Usage: IfcConvert [options] []\n" << "\n" << "Converts the geometry in an IFC file into one of the following formats:\n" << " .obj WaveFront OBJ (a .mtl file is also created)\n" @@ -75,46 +94,43 @@ void print_usage(bool suggest_help = true) << " .xml XML Property definitions and decomposition tree\n" << " .svg SVG Scalable Vector Graphics (2D floor plan)\n" << "\n" - << "If no output filename given, ." + DEFAULT_EXTENSION + " will be used as the output file.\n"; + << "If no output filename given, ." << IfcUtil::path::from_utf8(DEFAULT_EXTENSION) << " will be used as the output file.\n"; if (suggest_help) { - std::cout << "\nRun 'IfcConvert --help' for more information."; + cout_ << "\nRun 'IfcConvert --help' for more information."; } - std::cout << std::endl; + cout_ << std::endl; } /// @todo Add help for single option void print_options(const po::options_description& options) { - std::cout << "\n" << options; - std::cout << std::endl; +#if defined(_MSC_VER) && defined(_UNICODE) + // See issue https://svn.boost.org/trac10/ticket/10952 + std::ostringstream temp; + temp << options; + cout_ << "\n" << temp.str().c_str(); +#else + cout_ << "\n" << options; +#endif + cout_ << std::endl; } -std::string change_extension(const std::string& fn, const std::string& ext) { - std::string::size_type dot = fn.find_last_of('.'); - if (dot != std::string::npos) { - return fn.substr(0,dot+1) + ext; +template +T change_extension(const T& fn, const T& ext) { + typename T::size_type dot = fn.find_last_of('.'); + if (dot != T::npos) { + return fn.substr(0, dot) + ext; } else { - return fn + "." + ext; + return fn + ext; } } -bool file_exists(const std::string& filename) -{ - /// @todo Windows Unicode support - std::ifstream file(filename.c_str()); +bool file_exists(const std::string& filename) { + std::ifstream file(IfcUtil::path::from_utf8(filename).c_str()); return file.good(); } -bool rename_file(const std::string& old_filename, const std::string& new_filename) -{ - // Whether or not rename() replaces an existing file is implementation-specific, - // so remove() possible existing file always. - /// @todo Windows Unicode support - std::remove(new_filename.c_str()); - return std::rename(old_filename.c_str(), new_filename.c_str()) == 0; -} - -static std::stringstream log_stream; +static std::basic_stringstream log_stream; void write_log(bool); std::string format_duration(time_t start, time_t end); @@ -153,9 +169,28 @@ std::vector setup_filters(const std::vector&, co bool init_input_file(const std::string& filename, IfcParse::IfcFile& ifc_file, bool no_progress, bool mmap); -int main(int argc, char** argv) -{ +#if defined(_MSC_VER) && defined(_UNICODE) +int wmain(int argc, wchar_t** argv) { + typedef po::wcommand_line_parser command_line_parser; + typedef wchar_t char_t; + + _setmode(_fileno(stdout), _O_U16TEXT); + _setmode(_fileno(stderr), _O_U16TEXT); +#else +int main(int argc, char** argv) { + typedef po::command_line_parser command_line_parser; + typedef char char_t; +#endif + + double deflection_tolerance; + inclusion_filter include_filter; + inclusion_traverse_filter include_traverse_filter; + exclusion_filter exclude_filter; + exclusion_traverse_filter exclude_traverse_filter; + path_t filter_filename; + path_t default_material_filename; std::string log_format; + po::options_description generic_options("Command line options"); generic_options.add_options() ("help,h", "display usage information") @@ -172,17 +207,8 @@ int main(int argc, char** argv) #ifdef USE_MMAP ("mmap", "use memory-mapped file for input") #endif - ("input-file", po::value(), "input IFC file") - ("output-file", po::value(), "output geometry file"); - - - double deflection_tolerance; - inclusion_filter include_filter; - inclusion_traverse_filter include_traverse_filter; - exclusion_filter exclude_filter; - exclusion_traverse_filter exclude_traverse_filter; - std::string filter_filename; - std::string default_material_filename; + ("input-file", new po::typed_value(0), "input IFC file") + ("output-file", new po::typed_value(0), "output geometry file"); po::options_description geom_options("Geometry options"); geom_options.add_options() @@ -259,12 +285,12 @@ int main(int argc, char** argv) ("generate-uvs", "Generates UVs (texture coordinates) by using simple box projection. Requires normals. " "Not guaranteed to work properly if used with --weld-vertices.") - ("filter-file", po::value(&filter_filename), + ("filter-file", new po::typed_value(&filter_filename), "Specifies a filter file that describes the used filtering criteria. Supported formats " "are '--include=arg GlobalId ...' and 'include arg GlobalId ...'. Spaces and tabs can be used as delimiters." "Multiple filters of same type with different values can be inserted on their own lines. " "See --include, --include+, --exclude, and --exclude+ for more details.") - ("default-material-file", po::value(&default_material_filename), + ("default-material-file", new po::typed_value(&default_material_filename), "Specifies a material file that describes the material object types will have" "if an object does not have any specified material in the IFC file."); @@ -327,21 +353,21 @@ int main(int argc, char** argv) po::variables_map vmap; try { - po::store(po::command_line_parser(argc, argv). + po::store(command_line_parser(argc, argv). options(cmdline_options).positional(positional_options).run(), vmap); } catch (const po::unknown_option& e) { - std::cerr << "[Error] Unknown option '" << e.get_option_name() << "'\n\n"; + cerr_ << "[Error] Unknown option '" << e.get_option_name().c_str() << "'\n\n"; print_usage(); return EXIT_FAILURE; } catch (const po::error_with_option_name& e) { - std::cerr << "[Error] Invalid usage of '" << e.get_option_name() << "': " << e.what() << "\n\n"; + cerr_ << "[Error] Invalid usage of '" << e.get_option_name().c_str() << "': " << e.what() << "\n\n"; return EXIT_FAILURE; } catch (const std::exception& e) { - std::cerr << "[Error] " << e.what() << "\n\n"; + cerr_ << "[Error] " << e.what() << "\n\n"; print_usage(); return EXIT_FAILURE; } catch (...) { - std::cerr << "[Error] Unknown error parsing command line options\n\n"; + cerr_ << "[Error] Unknown error parsing command line options\n\n"; print_usage(); return EXIT_FAILURE; } @@ -376,11 +402,11 @@ int main(int argc, char** argv) const bool building_local_placement = vmap.count("building-local-placement") != 0; const bool generate_uvs = vmap.count("generate-uvs") != 0; - if (!quiet || vmap.count("version")) { + if (!quiet || vmap.count("version")) { print_version(); } - if (vmap.count("version")) { + if (vmap.count("version")) { return EXIT_SUCCESS; } else if (vmap.count("help")) { print_usage(false); @@ -391,70 +417,7 @@ int main(int argc, char** argv) print_usage(); return EXIT_FAILURE; } - -#ifdef HAVE_ICU - if (!unicode_mode.empty()) { - if (unicode_mode == "utf8") { - IfcParse::IfcCharacterDecoder::mode = IfcParse::IfcCharacterDecoder::UTF8; - } else if (unicode_mode == "escape") { - IfcParse::IfcCharacterDecoder::mode = IfcParse::IfcCharacterDecoder::JSON; - } else { - std::cerr << "[Error] Invalid value for --unicode" << std::endl; - print_options(serializer_options); - return 1; - } - } -#endif - - boost::optional bounding_width; - boost::optional bounding_height; - if (vmap.count("bounds") == 1) { - int w, h; - if (sscanf(bounds.c_str(), "%ux%u", &w, &h) == 2 && w > 0 && h > 0) { - bounding_width = w; - bounding_height = h; - } else { - std::cerr << "[Error] Invalid use of --bounds" << std::endl; - print_options(serializer_options); - return EXIT_FAILURE; - } - } - - const std::string input_filename = vmap["input-file"].as(); - if (!file_exists(input_filename)) { - std::cerr << "[Error] Input file '" << input_filename << "' does not exist" << std::endl; - return EXIT_FAILURE; - } - - // If no output filename is specified a Wavefront OBJ file will be output - // to maintain backwards compatibility with the obsolete IfcObj executable. - const std::string output_filename = vmap.count("output-file") == 1 - ? vmap["output-file"].as() - : change_extension(input_filename, DEFAULT_EXTENSION); - - if (output_filename.size() < 5) { - std::cerr << "[Error] Invalid or unsupported output file '" << output_filename << "' given" << std::endl; - print_usage(); - return EXIT_FAILURE; - } - - if (file_exists(output_filename) && !vmap.count("yes")) { - std::string answer; - std::cout << "A file '" << output_filename << "' already exists. Overwrite the existing file?" << std::endl; - std::cin >> answer; - if (!boost::iequals(answer, "yes") && !boost::iequals(answer, "y")) { - return EXIT_SUCCESS; - } - } - - std::string output_temp_filename = output_filename + TEMP_FILE_EXTENSION; - - std::string output_extension = output_filename.substr(output_filename.size()-4); - boost::to_lower(output_extension); - - Logger::SetOutput(&std::cout, &log_stream); - Logger::Verbosity(verbose ? Logger::LOG_NOTICE : Logger::LOG_ERROR); - + if (vmap.count("log-format") == 1) { boost::to_lower(log_format); if (log_format == "plain") { @@ -467,23 +430,114 @@ int main(int argc, char** argv) return EXIT_FAILURE; } } + + if (!filter_filename.empty()) { + size_t num_filters = read_filters_from_file(IfcUtil::path::to_utf8(filter_filename), include_filter, include_traverse_filter, exclude_filter, exclude_traverse_filter); + if (num_filters) { + Logger::Notice(boost::lexical_cast(num_filters) + " filters read from specifified file."); + } else { + std::cerr << "[Error] No filters read from specifified file.\n"; + return EXIT_FAILURE; + } + } + +#ifdef HAVE_ICU + if (!unicode_mode.empty()) { + if (unicode_mode == "utf8") { + IfcParse::IfcCharacterDecoder::mode = IfcParse::IfcCharacterDecoder::UTF8; + } else if (unicode_mode == "escape") { + IfcParse::IfcCharacterDecoder::mode = IfcParse::IfcCharacterDecoder::JSON; + } else { + cerr_ << "[Error] Invalid value for --unicode" << std::endl; + print_options(serializer_options); + return 1; + } + } +#endif + + if (!default_material_filename.empty()) { + try { + IfcGeom::set_default_style_file(IfcUtil::path::to_utf8(default_material_filename)); + } catch (const std::exception& e) { + std::cerr << "[Error] Could not read default material file:" << std::endl; + std::cerr << e.what() << std::endl; + return EXIT_FAILURE; + } + } + + boost::optional bounding_width; + boost::optional bounding_height; + if (vmap.count("bounds") == 1) { + int w, h; + if (sscanf(bounds.c_str(), "%ux%u", &w, &h) == 2 && w > 0 && h > 0) { + bounding_width = w; + bounding_height = h; + } else { + cerr_ << "[Error] Invalid use of --bounds" << std::endl; + print_options(serializer_options); + return EXIT_FAILURE; + } + } + + const path_t input_filename = vmap["input-file"].as(); + if (!file_exists(IfcUtil::path::to_utf8(input_filename))) { + cerr_ << "[Error] Input file '" << input_filename << "' does not exist" << std::endl; + return EXIT_FAILURE; + } + + // If no output filename is specified a Wavefront OBJ file will be output + // to maintain backwards compatibility with the obsolete IfcObj executable. + const path_t output_filename = vmap.count("output-file") == 1 + ? vmap["output-file"].as() + : change_extension(input_filename, IfcUtil::path::from_utf8(DEFAULT_EXTENSION)); + + if (output_filename.size() < 5) { + cerr_ << "[Error] Invalid or unsupported output file '" << output_filename << "' given" << std::endl; + print_usage(); + return EXIT_FAILURE; + } + + if (file_exists(IfcUtil::path::to_utf8(output_filename)) && !vmap.count("yes")) { + std::string answer; + cout_ << "A file '" << output_filename << "' already exists. Overwrite the existing file?" << std::endl; + std::cin >> answer; + if (!boost::iequals(answer, "yes") && !boost::iequals(answer, "y")) { + return EXIT_SUCCESS; + } + } + + Logger::SetOutput(&cout_, &log_stream); + Logger::Verbosity(verbose ? Logger::LOG_NOTICE : Logger::LOG_ERROR); + + path_t output_temp_filename = output_filename + IfcUtil::path::from_utf8(TEMP_FILE_EXTENSION); + + path_t output_extension = output_filename.substr(output_filename.size()-4); + boost::to_lower(output_extension); IfcParse::IfcFile ifc_file; - if (output_extension == ".xml") { + const path_t OBJ = IfcUtil::path::from_utf8(".obj"), + MTL = IfcUtil::path::from_utf8(".mtl"), + DAE = IfcUtil::path::from_utf8(".dae"), + STP = IfcUtil::path::from_utf8(".stp"), + IGS = IfcUtil::path::from_utf8(".igs"), + SVG = IfcUtil::path::from_utf8(".svg"), + XML = IfcUtil::path::from_utf8(".xml"); + + if (output_extension == XML) { int exit_code = EXIT_FAILURE; try { - if (init_input_file(input_filename, ifc_file, no_progress || quiet, mmap)) { + if (init_input_file(IfcUtil::path::to_utf8(input_filename), ifc_file, no_progress || quiet, mmap)) { time_t start, end; time(&start); - XmlSerializer s(output_temp_filename); + XmlSerializer s(IfcUtil::path::to_utf8(output_temp_filename)); s.setFile(&ifc_file); Logger::Status("Writing XML output..."); s.finalize(); time(&end); Logger::Status("Done! Conversion took " + format_duration(start, end)); - rename_file(output_temp_filename, output_filename); + IfcUtil::path::rename_file(IfcUtil::path::to_utf8(output_temp_filename), IfcUtil::path::to_utf8(output_filename)); exit_code = EXIT_SUCCESS; } } catch (const std::exception& e) { @@ -493,26 +547,6 @@ int main(int argc, char** argv) return exit_code; } - if (!filter_filename.empty()) { - size_t num_filters = read_filters_from_file(filter_filename, include_filter, include_traverse_filter, exclude_filter, exclude_traverse_filter); - if (num_filters) { - Logger::Notice(boost::lexical_cast(num_filters) + " filters read from '" + filter_filename + "'."); - } else { - std::cerr << "[Error] No filters read from '" + filter_filename + "'.\n"; - return EXIT_FAILURE; - } - } - - if (!default_material_filename.empty()) { - try { - IfcGeom::set_default_style_file(default_material_filename); - } catch (const std::exception& e) { - std::cerr << "[Error] Could not read default material file " << default_material_filename << ":" << std::endl; - std::cerr << e.what() << std::endl; - return EXIT_FAILURE; - } - } - /// @todo Clean up this filter code further. std::vector used_filters; if (include_filter.type != geom_filter::UNUSED) { used_filters.push_back(include_filter); } @@ -520,9 +554,9 @@ int main(int argc, char** argv) if (exclude_filter.type != geom_filter::UNUSED) { used_filters.push_back(exclude_filter); } if (exclude_traverse_filter.type != geom_filter::UNUSED) { used_filters.push_back(exclude_traverse_filter); } - std::vector filter_funcs = setup_filters(used_filters, output_extension); + std::vector filter_funcs = setup_filters(used_filters, IfcUtil::path::to_utf8(output_extension)); if (filter_funcs.empty()) { - std::cerr << "[Error] Failed to set up geometry filters\n"; + cerr_ << "[Error] Failed to set up geometry filters\n"; return EXIT_FAILURE; } @@ -533,6 +567,20 @@ int main(int argc, char** argv) if (!desc_filter.values.empty()) { desc_filter.update_description(); Logger::Notice(desc_filter.description); } if (!tag_filter.values.empty()) { tag_filter.update_description(); Logger::Notice(tag_filter.description); } +#ifdef _MSC_VER + if (output_extension == DAE || output_extension == STP || output_extension == IGS) { + // These serializers do not support opening unicode paths on Windows. Therefore + // a random temp file is generated using only ASCII characters instead. + std::random_device rng; + std::uniform_int_distribution index_dist(L'A', L'Z'); + output_temp_filename = L".ifcopenshell."; + for (int i = 0; i < 8; ++i) { + output_temp_filename.push_back(static_cast(index_dist(rng))); + } + output_temp_filename += L".tmp"; + } +#endif + SerializerSettings settings; /// @todo Make APPLY_DEFAULT_MATERIALS configurable? Quickly tested setting this to false and using obj exporter caused the program to crash and burn. settings.set(IfcGeom::IteratorSettings::APPLY_DEFAULT_MATERIALS, true); @@ -563,26 +611,26 @@ int main(int argc, char** argv) settings.precision = precision; boost::shared_ptr serializer; /**< @todo use std::unique_ptr when possible */ - if (output_extension == ".obj") { + if (output_extension == OBJ) { // Do not use temp file for MTL as it's such a small file. - const std::string mtl_filename = change_extension(output_filename, "mtl"); + const path_t mtl_filename = change_extension(output_filename, MTL); if (!use_world_coords) { Logger::Notice("Using world coords when writing WaveFront OBJ files"); settings.set(IfcGeom::IteratorSettings::USE_WORLD_COORDS, true); } - serializer = boost::make_shared(output_temp_filename, mtl_filename, settings); + serializer = boost::make_shared(IfcUtil::path::to_utf8(output_temp_filename), IfcUtil::path::to_utf8(mtl_filename), settings); #ifdef WITH_OPENCOLLADA - } else if (output_extension == ".dae") { - serializer = boost::make_shared(output_temp_filename, settings); + } else if (output_extension == DAE) { + serializer = boost::make_shared(IfcUtil::path::to_utf8(output_temp_filename), settings); #endif - } else if (output_extension == ".stp") { - serializer = boost::make_shared(output_temp_filename, settings); - } else if (output_extension == ".igs") { + } else if (output_extension == STP) { + serializer = boost::make_shared(IfcUtil::path::to_utf8(output_temp_filename), settings); + } else if (output_extension == IGS) { IGESControl_Controller::Init(); // work around Open Cascade bug - serializer = boost::make_shared(output_temp_filename, settings); - } else if (output_extension == ".svg") { + serializer = boost::make_shared(IfcUtil::path::to_utf8(output_temp_filename), settings); + } else if (output_extension == SVG) { settings.set(IfcGeom::IteratorSettings::DISABLE_TRIANGULATION, true); - serializer = boost::make_shared(output_temp_filename, settings); + serializer = boost::make_shared(IfcUtil::path::to_utf8(output_temp_filename), settings); if (vmap.count("section-height") != 0) { Logger::Notice("Overriding section height"); static_cast(serializer.get())->setSectionHeight(section_height); @@ -591,18 +639,18 @@ int main(int argc, char** argv) static_cast(serializer.get())->setBoundingRectangle(bounding_width.get(), bounding_height.get()); } } else { - std::cerr << "[Error] Unknown output filename extension '" + output_extension + "'\n"; + cerr_ << "[Error] Unknown output filename extension '" << output_extension << "'\n"; write_log(!quiet); print_usage(); return EXIT_FAILURE; } - if (use_element_hierarchy && output_extension != ".dae") { - std::cerr << "[Error] --use-element-hierarchy can be used only with .dae output.\n"; + if (use_element_hierarchy && output_extension != DAE) { + cerr_ << "[Error] --use-element-hierarchy can be used only with .dae output.\n"; /// @todo Lots of duplicate error-and-exit code. write_log(!quiet); print_usage(); - std::remove(output_temp_filename.c_str()); /**< @todo Windows Unicode support */ + IfcUtil::path::delete_file(IfcUtil::path::to_utf8(output_temp_filename)); return EXIT_FAILURE; } @@ -622,7 +670,7 @@ int main(int argc, char** argv) } if (!serializer->ready()) { - std::remove(output_temp_filename.c_str()); /**< @todo Windows Unicode support */ + IfcUtil::path::delete_file(IfcUtil::path::to_utf8(output_temp_filename)); write_log(!quiet); return EXIT_FAILURE; } @@ -630,9 +678,9 @@ int main(int argc, char** argv) time_t start,end; time(&start); - if (!init_input_file(input_filename, ifc_file, no_progress || quiet, mmap)) { + if (!init_input_file(IfcUtil::path::to_utf8(input_filename), ifc_file, no_progress || quiet, mmap)) { write_log(!quiet); - std::remove(output_temp_filename.c_str()); /**< @todo Windows Unicode support */ + IfcUtil::path::delete_file(IfcUtil::path::to_utf8(output_temp_filename)); /**< @todo Windows Unicode support */ return EXIT_FAILURE; } @@ -641,7 +689,7 @@ int main(int argc, char** argv) /// @todo It would be nice to know and print separate error prints for a case where we found no entities /// and for a case we found no entities that satisfy our filtering criteria. Logger::Error("No geometrical entities found"); - std::remove(output_temp_filename.c_str()); /**< @todo Windows Unicode support */ + IfcUtil::path::delete_file(IfcUtil::path::to_utf8(output_temp_filename)); write_log(!quiet); return EXIT_FAILURE; } @@ -676,8 +724,8 @@ int main(int argc, char** argv) offset[2] = -center.Z(); } else { if (sscanf(offset_str.c_str(), "%lf;%lf;%lf", &offset[0], &offset[1], &offset[2]) != 3) { - std::cerr << "[Error] Invalid use of --model-offset\n"; - std::remove(output_temp_filename.c_str()); /**< @todo Windows Unicode support */ + cerr_ << "[Error] Invalid use of --model-offset\n"; + IfcUtil::path::delete_file(IfcUtil::path::to_utf8(output_temp_filename)); print_options(serializer_options); return EXIT_FAILURE; } @@ -755,10 +803,10 @@ int main(int argc, char** argv) // Renaming might fail (e.g. maybe the existing file was open in a viewer application) // Do not remove the temp file as user can salvage the conversion result from it. - bool successful = rename_file(output_temp_filename, output_filename); + bool successful = IfcUtil::path::rename_file(IfcUtil::path::to_utf8(output_temp_filename), IfcUtil::path::to_utf8(output_filename)); if (!successful) { - Logger::Error("Unable to write output file '" + output_filename + "', see '" + - output_temp_filename + "' for the conversion result."); + cerr_ << "Unable to write output file '" << output_filename << "', see '" << + output_temp_filename << "' for the conversion result."; } write_log(!quiet); @@ -793,12 +841,12 @@ std::string format_duration(time_t start, time_t end) } void write_log(bool header) { - std::string log = log_stream.str(); + path_t log = log_stream.str(); if (!log.empty()) { - if (header) { - std::cout << "\nLog:\n"; - } - std::cout << log << std::endl; + if (header) { + cout_ << "\nLog:\n"; + } + cout_ << log << std::endl; } } @@ -821,7 +869,7 @@ bool init_input_file(const std::string &filename, IfcParse::IfcFile &ifc_file, b } time(&end); - if (no_progress) { Logger::SetOutput(&std::cout, &log_stream); } + if (no_progress) { Logger::SetOutput(&cout_, &log_stream); } else { Logger::Status("Parsing input file took " + format_duration(start, end)); } return true; @@ -833,7 +881,7 @@ bool append_filter(const std::string& type, const std::vector& valu parse_filter(temp, values); // Merge values only if type and arg match. if ((filter.type != geom_filter::UNUSED && filter.type != temp.type) || (!filter.arg.empty() && filter.arg != temp.arg)) { - std::cerr << "[Error] Multiple '" << type << "' filters specified with different criteria\n"; + cerr_ << "[Error] Multiple '" << type.c_str() << "' filters specified with different criteria\n"; return false; } filter.type = temp.type; @@ -849,9 +897,10 @@ size_t read_filters_from_file( exclusion_filter& exclude_filter, exclusion_traverse_filter& exclude_traverse_filter) { - std::ifstream filter_file(filename.c_str()); + std::ifstream filter_file(IfcUtil::path::from_utf8(filename).c_str()); + if (!filter_file.is_open()) { - std::cerr << "[Error] Unable to open filter file '" + filename + "' or the file does not exist.\n"; + cerr_ << "[Error] Unable to open filter file '" << IfcUtil::path::from_utf8(filename) << "' or the file does not exist.\n"; return 0; } @@ -886,11 +935,11 @@ size_t read_filters_from_file( else if (type == "exclude") { if (append_filter("exclude", values, exclude_filter)) { ++num_filters; } } else if (type == "exclude+") { if (append_filter("exclude+", values, exclude_traverse_filter)) { ++num_filters; } } else { - std::cerr << "[Error] Invalid filtering type at line " + boost::lexical_cast(line_number) + "\n"; + cerr_ << "[Error] Invalid filtering type at line " << boost::lexical_cast(line_number) << "\n"; return 0; } } catch(...) { - std::cerr << "[Error] Unable to parse filter at line " + boost::lexical_cast(line_number) + ".\n"; + cerr_ << "[Error] Unable to parse filter at line " << boost::lexical_cast(line_number) << ".\n"; return 0; } } @@ -965,7 +1014,7 @@ std::vector setup_filters(const std::vector& fil try { entity_filter.populate(f.values); } catch (const IfcParse::IfcException& e) { - std::cerr << "[Error] " << e.what() << std::endl; + cerr_ << "[Error] " << e.what() << std::endl; return std::vector(); } } else if (f.type == geom_filter::LAYER_NAME) { @@ -1005,7 +1054,7 @@ std::vector setup_filters(const std::vector& fil } entity_filter.populate(entities); } catch (const IfcParse::IfcException& e) { - std::cerr << "[Error] " << e.what() << std::endl; + cerr_ << "[Error] " << e.what() << std::endl; return std::vector(); } } diff --git a/src/ifcconvert/OpenCascadeBasedSerializer.cpp b/src/ifcconvert/OpenCascadeBasedSerializer.cpp index cf5ae2df62..181d870467 100644 --- a/src/ifcconvert/OpenCascadeBasedSerializer.cpp +++ b/src/ifcconvert/OpenCascadeBasedSerializer.cpp @@ -17,19 +17,21 @@ * * ********************************************************************************/ +#include "OpenCascadeBasedSerializer.h" + +#include "../ifcparse/utils.h" + #include #include #include #include -#include "OpenCascadeBasedSerializer.h" - bool OpenCascadeBasedSerializer::ready() { - std::ofstream test_file(out_filename.c_str(), std::ios_base::binary); + std::ofstream test_file(IfcUtil::path::from_utf8(out_filename).c_str(), std::ios_base::binary); bool succeeded = test_file.is_open(); test_file.close(); - remove(out_filename.c_str()); + IfcUtil::path::delete_file(out_filename); return succeeded; } diff --git a/src/ifcconvert/SvgSerializer.h b/src/ifcconvert/SvgSerializer.h index 8b242aaca3..4f61f96446 100644 --- a/src/ifcconvert/SvgSerializer.h +++ b/src/ifcconvert/SvgSerializer.h @@ -25,6 +25,8 @@ #include "../ifcconvert/GeometrySerializer.h" #include "../ifcconvert/util.h" +#include "../ifcparse/utils.h" + #include #include #include @@ -46,7 +48,7 @@ protected: public: SvgSerializer(const std::string& out_filename, const SerializerSettings& settings) : GeometrySerializer(settings) - , svg_file(out_filename.c_str()) + , svg_file(IfcUtil::path::from_utf8(out_filename).c_str()) , xmin(+std::numeric_limits::infinity()) , ymin(+std::numeric_limits::infinity()) , xmax(-std::numeric_limits::infinity()) diff --git a/src/ifcconvert/WavefrontObjSerializer.cpp b/src/ifcconvert/WavefrontObjSerializer.cpp index 80f92c1574..216fd8a792 100644 --- a/src/ifcconvert/WavefrontObjSerializer.cpp +++ b/src/ifcconvert/WavefrontObjSerializer.cpp @@ -22,9 +22,22 @@ #include "../ifcgeom/IfcGeomRenderStyles.h" +#include "../ifcparse/utils.h" + #include #include +WaveFrontOBJSerializer::WaveFrontOBJSerializer(const std::string& obj_filename, const std::string& mtl_filename, const SerializerSettings& settings) + : GeometrySerializer(settings) + , mtl_filename(mtl_filename) + , obj_stream(IfcUtil::path::from_utf8(obj_filename).c_str()) + , mtl_stream(IfcUtil::path::from_utf8(mtl_filename).c_str()) + , vcount_total(1) +{ + obj_stream << std::setprecision(settings.precision); + mtl_stream << std::setprecision(settings.precision); +} + bool WaveFrontOBJSerializer::ready() { return obj_stream.is_open() && mtl_stream.is_open(); } diff --git a/src/ifcconvert/WavefrontObjSerializer.h b/src/ifcconvert/WavefrontObjSerializer.h index 2aa9708bdc..2acfa890d6 100644 --- a/src/ifcconvert/WavefrontObjSerializer.h +++ b/src/ifcconvert/WavefrontObjSerializer.h @@ -35,17 +35,7 @@ private: unsigned int vcount_total; std::set materials; public: - WaveFrontOBJSerializer(const std::string& obj_filename, const std::string& mtl_filename, const SerializerSettings& settings) - : GeometrySerializer(settings) - , mtl_filename(mtl_filename) - , obj_stream(obj_filename.c_str()) - , mtl_stream(mtl_filename.c_str()) - , vcount_total(1) - { - obj_stream << std::setprecision(settings.precision); - mtl_stream << std::setprecision(settings.precision); - } - + WaveFrontOBJSerializer(const std::string& obj_filename, const std::string& mtl_filename, const SerializerSettings& settings); virtual ~WaveFrontOBJSerializer() {} bool ready(); void writeHeader(); diff --git a/src/ifcconvert/XmlSerializer.cpp b/src/ifcconvert/XmlSerializer.cpp index 6bb3f54a54..6ed1780d19 100644 --- a/src/ifcconvert/XmlSerializer.cpp +++ b/src/ifcconvert/XmlSerializer.cpp @@ -17,8 +17,6 @@ * * ********************************************************************************/ -#include - #include #include #include @@ -26,10 +24,12 @@ #include "XmlSerializer.h" -#include - #include "../ifcparse/IfcSIPrefix.h" #include "../ifcgeom/IfcGeom.h" +#include "../ifcparse/utils.h" + +#include +#include using boost::property_tree::ptree; using namespace IfcSchema; @@ -528,5 +528,7 @@ void XmlSerializer::finalize() { #else boost::property_tree::xml_writer_settings settings('\t', 1); #endif - boost::property_tree::write_xml(xml_filename, root, std::locale(), settings); + + std::ofstream f(IfcUtil::path::from_utf8(xml_filename).c_str()); + boost::property_tree::write_xml(f, root, settings); } diff --git a/src/ifcgeom/IfcGeomRenderStyles.cpp b/src/ifcgeom/IfcGeomRenderStyles.cpp index 09c211a58b..27b5e2ce8a 100644 --- a/src/ifcgeom/IfcGeomRenderStyles.cpp +++ b/src/ifcgeom/IfcGeomRenderStyles.cpp @@ -200,6 +200,7 @@ void IfcGeom::set_default_style_file(const std::string& json_file) { if (!default_materials_initialized) InitDefaultMaterials(); default_materials.clear(); + // @todo this will probably need to be updated for UTF-8 paths on Windows pt::ptree root; pt::read_json(json_file, root); diff --git a/src/ifcparse/Argument.h b/src/ifcparse/Argument.h index ef7787ac52..bcb1227dd0 100644 --- a/src/ifcparse/Argument.h +++ b/src/ifcparse/Argument.h @@ -52,10 +52,6 @@ namespace IfcUtil { IFC_PARSE_API const char* ArgumentTypeToString(ArgumentType argument_type); IFC_PARSE_API bool valid_binary_string(const std::string& s); - /// Replaces spaces and potentially other problem causing characters with underscores. - IFC_PARSE_API void sanitate_material_name(std::string &str); - IFC_PARSE_API void escape_xml(std::string &str); - IFC_PARSE_API void unescape_xml(std::string &str); } class IFC_PARSE_API Argument { diff --git a/src/ifcparse/IfcLogger.cpp b/src/ifcparse/IfcLogger.cpp index a9b43907dd..d966edec53 100644 --- a/src/ifcparse/IfcLogger.cpp +++ b/src/ifcparse/IfcLogger.cpp @@ -30,35 +30,56 @@ #include #include -using boost::property_tree::ptree; - namespace { - static const char* severity_strings[] = {"Notice", "Warning", "Error"}; + + template + struct severity_strings { + static const std::array, 3> value; + }; - void plain_text_message(std::ostream& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - os << "[" << severity_strings[type] << "] "; + const std::array, 3> severity_strings::value = { "Notice", "Warning", "Error" }; + const std::array, 3> severity_strings::value = { L"Notice", L"Warning", L"Error" }; + + template + void plain_text_message(T& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { + os << "[" << severity_strings::value[type] << "] "; if (current_product) { - os << "{" << (*current_product)->GlobalId() << "} "; + os << "{" << (*current_product)->GlobalId().c_str() << "} "; } - os << message << std::endl; + os << message.c_str() << std::endl; if (entity) { std::string instance_string = entity->toString(); if (instance_string.size() > 259) { instance_string = instance_string.substr(0, 256) + "..."; } - os << instance_string << std::endl; + os << instance_string.c_str() << std::endl; } } - void json_message(std::ostream& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - ptree pt; - pt.put("level", severity_strings[type]); + template + std::basic_string string_as(const std::string& s) { + std::basic_string v; + v.assign(s.begin(), s.end()); + return v; + } + + template + void json_message(T& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { + boost::property_tree::basic_ptree, std::basic_string > pt; + + // @todo this is crazy + static const T::char_type level_string[] = { 'l', 'e', 'v', 'e', 'l', 0 }; + static const T::char_type product_string[] = { 'p', 'r', 'o', 'd', 'u', 'c', 't', 0 }; + static const T::char_type message_string[] = { 'm', 'e', 's', 's', 'a', 'g', 'e', 0 }; + static const T::char_type instance_string[] = { 'i', 'n', 's', 't', 'a', 'n', 'c', 'e', 0 }; + + pt.put(level_string, severity_strings::value[type]); if (current_product) { - pt.put("product", (**current_product).entity->toString()); + pt.put(product_string, string_as((**current_product).entity->toString())); } - pt.put("message", message); + pt.put(message_string, string_as(message)); if (entity) { - pt.put("instance", entity); + pt.put(instance_string, string_as(entity->toString())); } boost::property_tree::write_json(os, pt, false); } @@ -68,20 +89,50 @@ void Logger::SetProduct(boost::optional product) { current_product = product; } -void Logger::SetOutput(std::ostream* l1, std::ostream* l2) { +void Logger::SetOutput(std::ostream* l1, std::ostream* l2) { + wlog1 = wlog2 = 0; log1 = l1; log2 = l2; - if ( ! log2 ) { + if (!log2) { log2 = &log_stream; } } +void Logger::SetOutput(std::wostream* l1, std::wostream* l2) { + log1 = log2 = 0; + wlog1 = l1; + wlog2 = l2; + if (!wlog2) { + log2 = &log_stream; + } +} + +template +void Logger::log(T& log2, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { + log2 << "[" << severity_strings[type] << "] "; + if (current_product) { + log2 << "{" << (*current_product)->GlobalId().c_str() << "} "; + } + log2 << message.c_str() << std::endl; + if (entity) { + log2 << entity->toString().c_str() << std::endl; + } +} + void Logger::Message(Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - if (log2 && type >= verbosity) { + if ((log2 || wlog2) && type >= verbosity) { if (format == FMT_PLAIN) { - plain_text_message(*log2, current_product, type, message, entity); + if (log2) { + plain_text_message(*log2, current_product, type, message, entity); + } else if (wlog2) { + plain_text_message(*wlog2, current_product, type, message, entity); + } } else if (format == FMT_JSON) { - json_message(*log2, current_product, type, message, entity); + if (log2) { + json_message(*log2, current_product, type, message, entity); + } else if (wlog2) { + json_message(*wlog2, current_product, type, message, entity); + } } } } @@ -90,18 +141,26 @@ void Logger::Message(Logger::Severity type, const std::exception& exception, Ifc Message(type, exception.what(), entity); } +template +void status(T& log1, const std::string& message, bool new_line) { + log1 << message.c_str(); + if (new_line) { + log1 << std::endl; + } else { + log1 << std::flush; + } +} + void Logger::Status(const std::string& message, bool new_line) { if (log1) { - (*log1) << message; - if ( new_line ) (*log1) << std::endl; - else (*log1) << std::flush; + status(*log1, message, new_line); + } else if (wlog1) { + status(*wlog1, message, new_line); } } void Logger::ProgressBar(int progress) { - if (log1) { - Status("\r[" + std::string(progress,'#') + std::string(50 - progress,' ') + "]", false); - } + Status("\r[" + std::string(progress,'#') + std::string(50 - progress,' ') + "]", false); } std::string Logger::GetLog() { @@ -116,7 +175,9 @@ Logger::Format Logger::OutputFormat() { return format; } std::ostream* Logger::log1 = 0; std::ostream* Logger::log2 = 0; +std::wostream* Logger::wlog1 = 0; +std::wostream* Logger::wlog2 = 0; std::stringstream Logger::log_stream; Logger::Severity Logger::verbosity = Logger::LOG_NOTICE; Logger::Format Logger::format = Logger::FMT_PLAIN; -boost::optional Logger::current_product; \ No newline at end of file +boost::optional Logger::current_product; diff --git a/src/ifcparse/IfcLogger.h b/src/ifcparse/IfcLogger.h index ce13ee7558..4db2618782 100644 --- a/src/ifcparse/IfcLogger.h +++ b/src/ifcparse/IfcLogger.h @@ -42,14 +42,29 @@ public: typedef enum { LOG_NOTICE, LOG_WARNING, LOG_ERROR } Severity; typedef enum { FMT_PLAIN, FMT_JSON } Format; private: + + // To both stream variants need to exist at runtime or should this be a + // template argument of Logger or controlled using preprocessor directives? static std::ostream* log1; static std::ostream* log2; + + static std::wostream* wlog1; + static std::wostream* wlog2; + static std::stringstream log_stream; + static Severity verbosity; static Format format; static boost::optional current_product; + + template + static void log(T& log2, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity); public: static void SetProduct(boost::optional product); + + /// Determines to what stream respectively progress and errors are logged + static void SetOutput(std::wostream* l1, std::wostream* l2); + /// Determines to what stream respectively progress and errors are logged static void SetOutput(std::ostream* l1, std::ostream* l2); diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 0e63c88360..ec54f1ffad 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -25,10 +25,6 @@ #include #include -#ifdef _MSC_VER -#include -#endif - #include #include @@ -39,6 +35,7 @@ #include "../ifcparse/IfcSpfStream.h" #include "../ifcparse/IfcFile.h" #include "../ifcparse/IfcSIPrefix.h" +#include "../ifcparse/utils.h" #ifdef USE_IFC4 #include "../ifcparse/Ifc4-latebound.h" @@ -122,9 +119,8 @@ IfcSpfStream::IfcSpfStream(const std::string& fn) , eof(false) { #ifdef _MSC_VER - int fn_buffer_size = MultiByteToWideChar(CP_UTF8, 0, fn.c_str(), -1, 0, 0); - wchar_t* fn_wide = new wchar_t[fn_buffer_size]; - MultiByteToWideChar(CP_UTF8, 0, fn.c_str(), -1, fn_wide, fn_buffer_size); + std::wstring fn_ws = IfcUtil::path::from_utf8(fn); + const wchar_t* fn_wide = fn_ws.c_str(); #ifdef USE_MMAP if (mmap) { @@ -136,7 +132,6 @@ IfcSpfStream::IfcSpfStream(const std::string& fn) } #endif - delete[] fn_wide; #else #ifdef USE_MMAP diff --git a/src/ifcparse/IfcUtil.cpp b/src/ifcparse/IfcUtil.cpp index fb4c48a815..c4dc183f1a 100644 --- a/src/ifcparse/IfcUtil.cpp +++ b/src/ifcparse/IfcUtil.cpp @@ -17,8 +17,43 @@ * * ********************************************************************************/ +#ifdef _MSC_VER +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX +#define NOMINMAX +#endif +#ifndef NOMSG +#define NOMSG NOMSG +#endif +#ifndef NODRAWTEXT +#define NODRAWTEXT NODRAWTEXT +#endif +#ifndef NOGDI +#define NOGDI NOGDI +#endif +#ifndef NOSERVICE +#define NOSERVICE NOSERVICE +#endif +#ifndef NOKERNEL +#define NOKERNEL NOKERNEL +#endif +#ifndef NOUSER +#define NOUSER NOUSER +#endif +#ifndef NOMCX +#define NOMCX NOMCX +#endif +#ifndef NOIME +#define NOIME NOIME +#endif +#include +#endif + #include "../ifcparse/IfcBaseClass.h" #include "../ifcparse/Argument.h" +#include "../ifcparse/utils.h" #include "../ifcparse/IfcException.h" #include "../ifcparse/IfcEntityList.h" @@ -198,3 +233,52 @@ Argument* IfcUtil::IfcBaseEntity::getArgumentByName(const std::string& name) con unsigned int i = IfcSchema::Type::GetAttributeIndex(type(), name); return getArgument(i); } + +#ifdef _MSC_VER +std::string IfcUtil::path::to_utf8(const std::wstring& str) { + int buffer_size = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, 0, 0, 0, 0); + char* buffer = new char[buffer_size]; + WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, buffer, buffer_size, 0, 0); + std::string str_utf8(buffer); + delete[] buffer; + return str_utf8; +} + +std::wstring IfcUtil::path::from_utf8(const std::string& str) { + int buffer_size = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, 0, 0); + wchar_t* buffer = new wchar_t[buffer_size]; + MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, buffer, buffer_size); + std::wstring str_wide(buffer); + delete[] buffer; + return str_wide; +} + +IFC_PARSE_API bool IfcUtil::path::rename_file(const std::string& old_filename, const std::string& new_filename) { + std::wstring old_filename_w = from_utf8(old_filename); + std::wstring new_filename_w = from_utf8(new_filename); + delete_file(new_filename); + const bool success = !!MoveFileW(old_filename_w.c_str(), new_filename_w.c_str()); + return success; +} + +IFC_PARSE_API bool IfcUtil::path::delete_file(const std::string& filename) { + std::wstring filename_w = from_utf8(filename); + const bool success = !!DeleteFileW(filename_w.c_str()); + return success; +} + +#else + +IFC_PARSE_API bool IfcUtil::path::rename_file(const std::string& old_filename, const std::string& new_filename) { + // Whether or not rename() replaces an existing file is implementation-specific, + // so remove() possible existing file always. + delete_file(new_filename); + return std::rename(old_filename.c_str(), new_filename.c_str()) == 0; +} + +IFC_PARSE_API bool IfcUtil::path::delete_file(const std::string& filename) { + return std::remove(filename.c_str()); +} + +#endif + diff --git a/src/ifcparse/utils.h b/src/ifcparse/utils.h new file mode 100644 index 0000000000..ea60de4689 --- /dev/null +++ b/src/ifcparse/utils.h @@ -0,0 +1,59 @@ +/******************************************************************************** +* * +* This file is part of IfcOpenShell. * +* * +* IfcOpenShell is free software: you can redistribute it and/or modify * +* it under the terms of the Lesser GNU General Public License as published by * +* the Free Software Foundation, either version 3.0 of the License, or * +* (at your option) any later version. * +* * +* IfcOpenShell is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* Lesser GNU General Public License for more details. * +* * +* You should have received a copy of the Lesser GNU General Public License * +* along with this program. If not, see . * +* * +********************************************************************************/ + +#include "../ifcparse/ifc_parse_api.h" + +#include + +#ifndef IFCPARSE_UTILS_H +#define IFCPARSE_UTILS_H + +namespace IfcUtil { + + /// Replaces spaces and potentially other problem causing characters with underscores. + IFC_PARSE_API void sanitate_material_name(std::string &str); + + IFC_PARSE_API void escape_xml(std::string &str); + IFC_PARSE_API void unescape_xml(std::string &str); + + namespace path { + + IFC_PARSE_API bool delete_file(const std::string& filename); + IFC_PARSE_API bool rename_file(const std::string& old_filename, const std::string& new_filename); + +#ifdef _MSC_VER + + /// Uses windows.h string conversion functions + IFC_PARSE_API std::string to_utf8(const std::wstring& str); + + /// Uses windows.h string conversion functions + IFC_PARSE_API std::wstring from_utf8(const std::string& str); +#else + /// Identity operation + IFC_PARSE_API inline std::string to_utf8(const std::string& str) { return str; } + + /// Identity operation + IFC_PARSE_API inline std::string from_utf8(const std::string& str) { return str; } +#endif + + } + +} + +#endif From 5db91e52daeb8b7667ded744134554111834a422 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 12 Feb 2019 14:55:03 +0100 Subject: [PATCH 34/41] Fixes to logger templates --- src/ifcparse/IfcLogger.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/ifcparse/IfcLogger.cpp b/src/ifcparse/IfcLogger.cpp index d966edec53..a105e5bcf4 100644 --- a/src/ifcparse/IfcLogger.cpp +++ b/src/ifcparse/IfcLogger.cpp @@ -37,12 +37,15 @@ namespace { static const std::array, 3> value; }; + template <> const std::array, 3> severity_strings::value = { "Notice", "Warning", "Error" }; + + template <> const std::array, 3> severity_strings::value = { L"Notice", L"Warning", L"Error" }; template void plain_text_message(T& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - os << "[" << severity_strings::value[type] << "] "; + os << "[" << severity_strings::value[type] << "] "; if (current_product) { os << "{" << (*current_product)->GlobalId().c_str() << "} "; } @@ -65,21 +68,21 @@ namespace { template void json_message(T& os, const boost::optional& current_product, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - boost::property_tree::basic_ptree, std::basic_string > pt; + boost::property_tree::basic_ptree, std::basic_string > pt; // @todo this is crazy - static const T::char_type level_string[] = { 'l', 'e', 'v', 'e', 'l', 0 }; - static const T::char_type product_string[] = { 'p', 'r', 'o', 'd', 'u', 'c', 't', 0 }; - static const T::char_type message_string[] = { 'm', 'e', 's', 's', 'a', 'g', 'e', 0 }; - static const T::char_type instance_string[] = { 'i', 'n', 's', 't', 'a', 'n', 'c', 'e', 0 }; + static const typename T::char_type level_string[] = { 'l', 'e', 'v', 'e', 'l', 0 }; + static const typename T::char_type product_string[] = { 'p', 'r', 'o', 'd', 'u', 'c', 't', 0 }; + static const typename T::char_type message_string[] = { 'm', 'e', 's', 's', 'a', 'g', 'e', 0 }; + static const typename T::char_type instance_string[] = { 'i', 'n', 's', 't', 'a', 'n', 'c', 'e', 0 }; - pt.put(level_string, severity_strings::value[type]); + pt.put(level_string, severity_strings::value[type]); if (current_product) { - pt.put(product_string, string_as((**current_product).entity->toString())); + pt.put(product_string, string_as((**current_product).entity->toString())); } - pt.put(message_string, string_as(message)); + pt.put(message_string, string_as(message)); if (entity) { - pt.put(instance_string, string_as(entity->toString())); + pt.put(instance_string, string_as(entity->toString())); } boost::property_tree::write_json(os, pt, false); } @@ -109,7 +112,7 @@ void Logger::SetOutput(std::wostream* l1, std::wostream* l2) { template void Logger::log(T& log2, Logger::Severity type, const std::string& message, IfcEntityInstanceData* entity) { - log2 << "[" << severity_strings[type] << "] "; + log2 << "[" << severity_strings::value[type] << "] "; if (current_product) { log2 << "{" << (*current_product)->GlobalId().c_str() << "} "; } From d12cacbd2ed9143cd79339caec417438f3ee8d43 Mon Sep 17 00:00:00 2001 From: David Leverton Date: Wed, 13 Feb 2019 15:34:50 +0000 Subject: [PATCH 35/41] Fix Position handling for IfcSurfaceCurveSweptAreaSolid --- src/ifcgeom/IfcGeomShapes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/IfcGeomShapes.cpp b/src/ifcgeom/IfcGeomShapes.cpp index 1beb4cbcc6..c4ba25ce9b 100644 --- a/src/ifcgeom/IfcGeomShapes.cpp +++ b/src/ifcgeom/IfcGeomShapes.cpp @@ -885,7 +885,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcRectangularTrimmedSurface* l, } bool IfcGeom::Kernel::convert(const IfcSchema::IfcSurfaceCurveSweptAreaSolid* l, TopoDS_Shape& shape) { - gp_Trsf directrix, position; + gp_Trsf directrix; TopoDS_Shape face; TopoDS_Wire wire, section; @@ -964,7 +964,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSurfaceCurveSweptAreaSolid* l, if (has_position) { // IfcSweptAreaSolid.Position (trsf) is an IfcAxis2Placement3D // and therefore has a unit scale factor - shape.Move(position); + shape.Move(trsf); } return true; From acde878946ff789efe94d2e948ed37e2337b5476 Mon Sep 17 00:00:00 2001 From: hlg Date: Thu, 14 Feb 2019 03:05:38 +0800 Subject: [PATCH 36/41] process IfcIndexedPolyCurve without segments #549 --- src/ifcgeom/IfcGeomWires.cpp | 76 ++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/src/ifcgeom/IfcGeomWires.cpp b/src/ifcgeom/IfcGeomWires.cpp index 0c66cbcac5..7c1a93a7f0 100644 --- a/src/ifcgeom/IfcGeomWires.cpp +++ b/src/ifcgeom/IfcGeomWires.cpp @@ -873,45 +873,53 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcIndexedPolyCurve* l, TopoDS_Wi BRepBuilderAPI_MakeWire w; - IfcEntityList::ptr segments = l->Segments(); - for (IfcEntityList::it it = segments->begin(); it != segments->end(); ++it) { - IfcUtil::IfcBaseClass* segment = *it; - if (segment->is(IfcSchema::Type::IfcLineIndex)) { - IfcSchema::IfcLineIndex* line = (IfcSchema::IfcLineIndex*) segment; - std::vector indices = *line; - gp_Pnt previous; - for (std::vector::const_iterator jt = indices.begin(); jt != indices.end(); ++jt) { - if (*jt < 1 || *jt > max_index) { - throw IfcParse::IfcException("IfcIndexedPolyCurve index out of bounds for index " + boost::lexical_cast(*jt)); + if(l->hasSegments()) { + IfcEntityList::ptr segments = l->Segments(); + for (IfcEntityList::it it = segments->begin(); it != segments->end(); ++it) { + IfcUtil::IfcBaseClass* segment = *it; + if (segment->is(IfcSchema::Type::IfcLineIndex)) { + IfcSchema::IfcLineIndex* line = (IfcSchema::IfcLineIndex*) segment; + std::vector indices = *line; + gp_Pnt previous; + for (std::vector::const_iterator jt = indices.begin(); jt != indices.end(); ++jt) { + if (*jt < 1 || *jt > max_index) { + throw IfcParse::IfcException("IfcIndexedPolyCurve index out of bounds for index " + boost::lexical_cast(*jt)); + } + const gp_Pnt& current = points[*jt - 1]; + if (jt != indices.begin()) { + w.Add(BRepBuilderAPI_MakeEdge(previous, current)); + } + previous = current; } - const gp_Pnt& current = points[*jt - 1]; - if (jt != indices.begin()) { - w.Add(BRepBuilderAPI_MakeEdge(previous, current)); + } else if (segment->is(IfcSchema::Type::IfcArcIndex)) { + IfcSchema::IfcArcIndex* arc = (IfcSchema::IfcArcIndex*) segment; + std::vector indices = *arc; + if (indices.size() != 3) { + throw IfcParse::IfcException("Invalid IfcArcIndex encountered"); } - previous = current; - } - } else if (segment->is(IfcSchema::Type::IfcArcIndex)) { - IfcSchema::IfcArcIndex* arc = (IfcSchema::IfcArcIndex*) segment; - std::vector indices = *arc; - if (indices.size() != 3) { - throw IfcParse::IfcException("Invalid IfcArcIndex encountered"); - } - for (int i = 0; i < 3; ++i) { - const int& idx = indices[i]; - if (idx < 1 || idx > max_index) { - throw IfcParse::IfcException("IfcIndexedPolyCurve index out of bounds for index " + boost::lexical_cast(idx)); + for (int i = 0; i < 3; ++i) { + const int& idx = indices[i]; + if (idx < 1 || idx > max_index) { + throw IfcParse::IfcException("IfcIndexedPolyCurve index out of bounds for index " + boost::lexical_cast(idx)); + } } + const gp_Pnt& a = points[indices[0] - 1]; + const gp_Pnt& b = points[indices[1] - 1]; + const gp_Pnt& c = points[indices[2] - 1]; + Handle(Geom_Circle) circ = GC_MakeCircle(a, b, c).Value(); + w.Add(BRepBuilderAPI_MakeEdge(circ, a, c)); + } else { + throw IfcParse::IfcException("Unexpected IfcIndexedPolyCurve segment of type " + IfcSchema::Type::ToString(segment->type())); } - const gp_Pnt& a = points[indices[0] - 1]; - const gp_Pnt& b = points[indices[1] - 1]; - const gp_Pnt& c = points[indices[2] - 1]; - Handle(Geom_Circle) circ = GC_MakeCircle(a, b, c).Value(); - w.Add(BRepBuilderAPI_MakeEdge(circ, a, c)); - } else { - throw IfcParse::IfcException("Unexpected IfcIndexedPolyCurve segment of type " + IfcSchema::Type::ToString(segment->type())); } - } - + } else { + std::vector::const_iterator previous = points.begin(); + for (std::vector::const_iterator current = previous+1; current < points.end(); ++current){ + w.Add(BRepBuilderAPI_MakeEdge(*previous, *current)); + previous = current; + } + } + result = w.Wire(); return true; } From df49f1bc1bfa4495ddb5a94968ce036693d259a6 Mon Sep 17 00:00:00 2001 From: hlg Date: Thu, 14 Feb 2019 03:16:03 +0800 Subject: [PATCH 37/41] prevent index out of bound in case of a single point --- src/ifcgeom/IfcGeomWires.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcgeom/IfcGeomWires.cpp b/src/ifcgeom/IfcGeomWires.cpp index 7c1a93a7f0..46e9e72117 100644 --- a/src/ifcgeom/IfcGeomWires.cpp +++ b/src/ifcgeom/IfcGeomWires.cpp @@ -912,7 +912,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcIndexedPolyCurve* l, TopoDS_Wi throw IfcParse::IfcException("Unexpected IfcIndexedPolyCurve segment of type " + IfcSchema::Type::ToString(segment->type())); } } - } else { + } else if (points.begin() < points.end()) { std::vector::const_iterator previous = points.begin(); for (std::vector::const_iterator current = previous+1; current < points.end(); ++current){ w.Add(BRepBuilderAPI_MakeEdge(*previous, *current)); From e4fdfd2eb38048523ba5be99430fe7772f2dc2ed Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 4 Mar 2019 17:23:15 +0100 Subject: [PATCH 38/41] Apply length unit to IfcCylindricalSurface Radius. Fixes #553 --- src/ifcgeom/IfcGeomShapes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/IfcGeomShapes.cpp b/src/ifcgeom/IfcGeomShapes.cpp index c4ba25ce9b..a8b777bed5 100644 --- a/src/ifcgeom/IfcGeomShapes.cpp +++ b/src/ifcgeom/IfcGeomShapes.cpp @@ -1113,9 +1113,9 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcCylindricalSurface* l, TopoDS_ // IfcElementarySurface.Position has unit scale factor #if OCC_VERSION_HEX < 0x60502 - face = BRepBuilderAPI_MakeFace(new Geom_CylindricalSurface(gp::XOY(), l->Radius())).Face().Moved(trsf); + face = BRepBuilderAPI_MakeFace(new Geom_CylindricalSurface(gp::XOY(), l->Radius() * getValue(GV_LENGTH_UNIT))).Face().Moved(trsf); #else - face = BRepBuilderAPI_MakeFace(new Geom_CylindricalSurface(gp::XOY(), l->Radius()), getValue(GV_PRECISION)).Face().Moved(trsf); + face = BRepBuilderAPI_MakeFace(new Geom_CylindricalSurface(gp::XOY(), l->Radius() * getValue(GV_LENGTH_UNIT)), getValue(GV_PRECISION)).Face().Moved(trsf); #endif return true; } From dafa30493635941edff0b2a5014803c8383bcfed Mon Sep 17 00:00:00 2001 From: paul <40677073+paullee0@users.noreply.github.com> Date: Fri, 8 Mar 2019 22:00:15 +0800 Subject: [PATCH 39/41] Update Python to 2.7.16 - So Fedora 29 Compile --- nix/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/build-all.py b/nix/build-all.py index b97e003d24..811c1cb765 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -61,7 +61,7 @@ PROJECT_NAME="IfcOpenShell" OCE_VERSION="0.18" # OCCT_VERSION="7.1.0" # OCCT_HASH="89aebde" -PYTHON_VERSIONS=["2.7.12", "3.2.6", "3.3.6", "3.4.6", "3.5.3", "3.6.2"] +PYTHON_VERSIONS=["2.7.16", "3.2.6", "3.3.6", "3.4.6", "3.5.3", "3.6.2"] # OCCT_VERSION="7.2.0" # OCCT_HASH="88af392" OCCT_VERSION="7.3.0" From 8c1924084ac45c61952bead2215e782211a121fd Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 24 Mar 2019 12:36:33 +0100 Subject: [PATCH 40/41] Don't consider openings as children in geom filters --- src/ifcgeom/IfcGeom.h | 2 +- src/ifcgeom/IfcGeomFilter.h | 16 ++++++++-------- src/ifcgeom/IfcGeomFunctions.cpp | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ifcgeom/IfcGeom.h b/src/ifcgeom/IfcGeom.h index a927e42efd..13dc5acba8 100644 --- a/src/ifcgeom/IfcGeom.h +++ b/src/ifcgeom/IfcGeom.h @@ -268,7 +268,7 @@ public: std::pair initializeUnits(IfcSchema::IfcUnitAssignment*); - static IfcSchema::IfcObjectDefinition* get_decomposing_entity(IfcSchema::IfcProduct*); + static IfcSchema::IfcObjectDefinition* get_decomposing_entity(IfcSchema::IfcProduct*, bool include_openings=true); static std::map get_layers(IfcSchema::IfcProduct* prod); diff --git a/src/ifcgeom/IfcGeomFilter.h b/src/ifcgeom/IfcGeomFilter.h index 4fbeca2726..3d0c431430 100644 --- a/src/ifcgeom/IfcGeomFilter.h +++ b/src/ifcgeom/IfcGeomFilter.h @@ -42,13 +42,15 @@ namespace IfcGeom struct filter { - filter() : include(false), traverse(false) {} - filter(bool incl, bool trav) : include(incl), traverse(trav) {} + filter() : include(false), traverse(false), traverse_openings(false) {} + filter(bool incl, bool trav, bool trav_openings = false) : include(incl), traverse(trav), traverse_openings(trav_openings) {} /// Should the product be included (true) or excluded (false). bool include; /// If traversal requested, traverse to the parents to see if they satisfy the criteria. E.g. we might be looking for /// children of a storey named "Level 20", or children of entities that have no representation, e.g. IfcCurtainWall. bool traverse; + /// Include opening relationships as part of traversal. + bool traverse_openings; /// Optional description for the filtering criteria of this filter. std::string description; @@ -61,10 +63,10 @@ namespace IfcGeom return is_match == include; } - static bool traverse_match(IfcSchema::IfcProduct* prod, const filter_t& pred) + bool traverse_match(IfcSchema::IfcProduct* prod, const filter_t& pred) const { IfcSchema::IfcProduct* parent, *current = prod; - while ((parent = dynamic_cast(IfcGeom::Kernel::get_decomposing_entity(current))) != 0) { + while ((parent = dynamic_cast(IfcGeom::Kernel::get_decomposing_entity(current, traverse_openings))) != 0) { if (pred(parent)) { return true; } @@ -248,11 +250,9 @@ namespace IfcGeom struct entity_filter : public filter { entity_filter() {} - entity_filter(bool include, bool traverse/*, const std::set& types*/) + entity_filter(bool include, bool traverse) : filter(include, traverse) - { - //populate(types); - } + {} std::set values; diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index dc0a98e213..d84052b2a6 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -1739,33 +1739,33 @@ IfcGeom::BRepElement

* IfcGeom::Kernel::create_brep_for_processed_representati ); } -IfcSchema::IfcObjectDefinition* IfcGeom::Kernel::get_decomposing_entity(IfcSchema::IfcProduct* product) { +IfcSchema::IfcObjectDefinition* IfcGeom::Kernel::get_decomposing_entity(IfcSchema::IfcProduct* product, bool include_openings) { IfcSchema::IfcObjectDefinition* parent = 0; // In case of an opening element, parent to the RelatingBuildingElement - if ( product->is(IfcSchema::Type::IfcOpeningElement ) ) { + if (include_openings && product->is(IfcSchema::Type::IfcOpeningElement)) { IfcSchema::IfcOpeningElement* opening = (IfcSchema::IfcOpeningElement*)product; IfcSchema::IfcRelVoidsElement::list::ptr voids = opening->VoidsElements(); - if ( voids->size() ) { + if (voids->size()) { IfcSchema::IfcRelVoidsElement* ifc_void = *voids->begin(); parent = ifc_void->RelatingBuildingElement(); } - } else if ( product->is(IfcSchema::Type::IfcElement ) ) { + } else if (product->is(IfcSchema::Type::IfcElement)) { IfcSchema::IfcElement* element = (IfcSchema::IfcElement*)product; IfcSchema::IfcRelFillsElement::list::ptr fills = element->FillsVoids(); // In case of a RelatedBuildingElement parent to the opening element - if ( fills->size() ) { - for ( IfcSchema::IfcRelFillsElement::list::it it = fills->begin(); it != fills->end(); ++ it ) { + if (fills->size() && include_openings) { + for (IfcSchema::IfcRelFillsElement::list::it it = fills->begin(); it != fills->end(); ++ it) { IfcSchema::IfcRelFillsElement* fill = *it; IfcSchema::IfcObjectDefinition* ifc_objectdef = fill->RelatingOpeningElement(); - if ( product == ifc_objectdef ) continue; + if (product == ifc_objectdef) continue; parent = ifc_objectdef; } } // Else simply parent to the containing structure if (!parent) { IfcSchema::IfcRelContainedInSpatialStructure::list::ptr parents = element->ContainedInStructure(); - if ( parents->size() ) { + if (parents->size()) { IfcSchema::IfcRelContainedInSpatialStructure* container = *parents->begin(); parent = container->RelatingStructure(); } From 0ae1c907970312c71f81c8656e3023772078ccba Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 29 Mar 2019 09:31:39 +0100 Subject: [PATCH 41/41] --ignore-whitespace in patch Fixes #565 --- win/build-deps.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index afc47cb8f5..b691332345 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -290,7 +290,7 @@ if not %ERRORLEVEL%==0 goto :Error findstr IfcOpenShell "%DEPENDENCY_DIR%\CMakeLists.txt">NUL if not %ERRORLEVEL%==0 ( pushd "%DEPENDENCY_DIR%" - git apply ""%~dp0patches\%OCCT_VER%.patch" + git apply --ignore-whitespace ""%~dp0patches\%OCCT_VER%.patch" popd ) findstr IfcOpenShell "%DEPENDENCY_DIR%\CMakeLists.txt">NUL