diff --git a/src/ifcgeom/IfcAdvancedBrep.cpp b/src/ifcgeom/IfcAdvancedBrep.cpp
new file mode 100644
index 0000000000..50f5ff6fe1
--- /dev/null
+++ b/src/ifcgeom/IfcAdvancedBrep.cpp
@@ -0,0 +1,99 @@
+/********************************************************************************
+ * *
+ * 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
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "../ifcgeom/IfcGeom.h"
+#include
+#include
+
+#define Kernel MAKE_TYPE_NAME(Kernel)
+
+#ifdef SCHEMA_HAS_IfcAdvancedBrep
+
+bool IfcGeom::Kernel::convert(const IfcSchema::IfcAdvancedBrep* l, TopoDS_Shape& shape) {
+ return convert(l->Outer(), shape);
+}
+
+#endif
diff --git a/src/ifcgeom/IfcAnnotationFillArea.cpp b/src/ifcgeom/IfcAnnotationFillArea.cpp
new file mode 100644
index 0000000000..1f51c569a7
--- /dev/null
+++ b/src/ifcgeom/IfcAnnotationFillArea.cpp
@@ -0,0 +1,119 @@
+/********************************************************************************
+ * *
+ * 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
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "../ifcgeom/IfcGeom.h"
+#include
+#include
+#include
+#include
+
+#define Kernel MAKE_TYPE_NAME(Kernel)
+
+bool IfcGeom::Kernel::convert(const IfcSchema::IfcAnnotationFillArea* l, TopoDS_Shape& face) {
+ TopoDS_Wire outer_boundary;
+ if (!convert_wire(l->OuterBoundary(), outer_boundary)) {
+ return false;
+ }
+
+ assert_closed_wire(outer_boundary);
+
+ BRepBuilderAPI_MakeFace mf(outer_boundary);
+
+ if (l->InnerBoundaries()) {
+ IfcSchema::IfcCurve::list::ptr inner_boundaries = *l->InnerBoundaries();
+
+ for(IfcSchema::IfcCurve::list::it it = inner_boundaries->begin(); it != inner_boundaries->end(); ++it) {
+ TopoDS_Wire 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/IfcArbitraryClosedProfileDef.cpp b/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp
new file mode 100644
index 0000000000..cdf21ae827
--- /dev/null
+++ b/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp
@@ -0,0 +1,106 @@
+/********************************************************************************
+ * *
+ * 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
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "../ifcgeom/IfcGeom.h"
+#include
+#include
+#include
+#include
+
+#define Kernel MAKE_TYPE_NAME(Kernel)
+
+bool IfcGeom::Kernel::convert(const IfcSchema::IfcArbitraryClosedProfileDef* l, TopoDS_Shape& face) {
+ TopoDS_Wire wire;
+ if (!convert_wire(l->OuterCurve(), wire)) {
+ return false;
+ }
+
+ assert_closed_wire(wire);
+
+ TopoDS_Compound f;
+ bool success = convert_wire_to_faces(wire, f);
+ if (success) {
+ face = f;
+ }
+ return success;
+}
diff --git a/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp b/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp
new file mode 100644
index 0000000000..3ee45d751e
--- /dev/null
+++ b/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp
@@ -0,0 +1,87 @@
+/********************************************************************************
+ * *
+ * 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
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include