diff --git a/src/examples/profiles.cpp b/src/examples/profiles.cpp
new file mode 100644
index 0000000000..e0c2a992d5
--- /dev/null
+++ b/src/examples/profiles.cpp
@@ -0,0 +1,203 @@
+/********************************************************************************
+ * *
+ * 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 . *
+ * *
+ ********************************************************************************/
+
+/********************************************************************************
+ * *
+ * Example that generates extrusions of parameterized profiles. *
+ * *
+ ********************************************************************************/
+
+#include
+#include
+#include
+
+#include "../ifcparse/Ifc2x3.h"
+#include "../ifcparse/IfcUtil.h"
+#include "../ifcparse/IfcHierarchyHelper.h"
+
+typedef std::string S;
+typedef IfcWrite::IfcGuidHelper guid;
+boost::none_t const null = (static_cast(0));
+
+void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) {
+ IfcSchema::IfcProfileDef* profile = *profiles->begin();
+ const std::string profile_type = IfcSchema::Type::ToString(profile->type());
+ const std::string filename = profile_type + ".ifc";
+
+ IfcHierarchyHelper file;
+ file.filename(filename);
+
+ int i = 0;
+ for (IfcSchema::IfcProfileDef::it it = profiles->begin(); it != profiles->end(); ++it, ++i) {
+ IfcSchema::IfcProfileDef* profile = *it;
+ IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy(
+ guid(), 0, S("profile"), null, null, 0, 0, null, null);
+ file.addBuildingProduct(product);
+ file.getSingle()->setName(profile_type);
+ product->setOwnerHistory(file.getSingle());
+
+ product->setObjectPlacement(file.addLocalPlacement(100 * i));
+
+ if (profile->is(IfcSchema::Type::IfcParameterizedProfileDef)) {
+ ((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d());
+ }
+
+ IfcSchema::IfcExtrudedAreaSolid* solid = new IfcSchema::IfcExtrudedAreaSolid(profile,
+ file.addPlacement3d(), file.addTriplet(0, 0, 1), 20.0);
+
+ file.AddEntity(profile);
+ file.AddEntity(solid);
+
+ IfcSchema::IfcRepresentation::list reps (new IfcTemplatedEntityList());
+ IfcSchema::IfcRepresentationItem::list items (new IfcTemplatedEntityList());
+
+ items->push(solid);
+ IfcSchema::IfcShapeRepresentation* rep = new IfcSchema::IfcShapeRepresentation(
+ file.getSingle(), S("Body"), S("SweptSolid"), items);
+ reps->push(rep);
+
+ IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps);
+ file.AddEntity(rep);
+ file.AddEntity(shape);
+
+ product->setRepresentation(shape);
+ }
+
+ std::ofstream f(filename.c_str());
+ f << file;
+}
+
+int main(int argc, char** argv) {
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcUShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null));
+ profiles->push(new Ifc2x3::IfcUShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, null, null));
+ profiles->push(new Ifc2x3::IfcUShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, null, null, 0.1, null));
+ profiles->push(new Ifc2x3::IfcUShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 0.1, null));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcTShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null));
+ profiles->push(new Ifc2x3::IfcTShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0, 2.0, null, null, null));
+ profiles->push(new Ifc2x3::IfcTShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, 0.1, 0.1, null));
+ profiles->push(new Ifc2x3::IfcTShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 2.0, 3.0, 0.1, 0.2, null));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcZShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, null, null));
+ profiles->push(new Ifc2x3::IfcZShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcEllipseProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0));
+ profiles->push(new Ifc2x3::IfcEllipseProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 25.0, 50.0));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcIShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 25.0, 50.0, 5.0, 5.0, null));
+ profiles->push(new Ifc2x3::IfcIShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 25.0, 50.0, 5.0, 5.0, 2.0));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcLShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, null, null, null, null, null));
+ profiles->push(new Ifc2x3::IfcLShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 2.0, 2.0, null, null, null));
+ profiles->push(new Ifc2x3::IfcLShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, null, null, 0.1, null, null));
+ profiles->push(new Ifc2x3::IfcLShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 0.3, null, null));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcCShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 10.0, null, null));
+ profiles->push(new Ifc2x3::IfcCShapeProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcCircleProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 25.0));
+ profiles->push(new Ifc2x3::IfcCircleHollowProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 25.0, 5.0));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcRectangleProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0));
+ profiles->push(new Ifc2x3::IfcRoundedRectangleProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0));
+ profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, null, null));
+ profiles->push(new Ifc2x3::IfcRectangleHollowProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 25.0, 5.0, 2.0, 4.0));
+ create_testcase_for(profiles); }
+
+ { IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList());
+ profiles->push(new Ifc2x3::IfcTrapeziumProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 30.0, 25.0, 0.0));
+ profiles->push(new Ifc2x3::IfcTrapeziumProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 60.0, 25.0, -20.0));
+ profiles->push(new Ifc2x3::IfcTrapeziumProfileDef(
+ IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
+ null, 0, 50.0, 10.0, 25.0, 30.0));
+ create_testcase_for(profiles); }
+}
diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp
index 23438775c7..4637e87905 100644
--- a/src/ifcparse/IfcParse.cpp
+++ b/src/ifcparse/IfcParse.cpp
@@ -861,7 +861,7 @@ MapEntityById::const_iterator IfcFile::end() const {
std::ostream& operator<< (std::ostream& os, const IfcParse::IfcFile& f) {
os << "ISO-10303-21;" << std::endl;
os << "HEADER;" << std::endl;
- os << "FILE_DESCRIPTION(('ViewDefinition []'),'2;1');" << std::endl;
+ os << "FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');" << std::endl;
os << "FILE_NAME("
<< static_cast(IfcWrite::IfcCharacterEncoder(f.filename())) << ","
<< static_cast(IfcWrite::IfcCharacterEncoder(f.timestamp())) << ",("
diff --git a/test/input/IfcCShapeProfileDef.ifc b/test/input/IfcCShapeProfileDef.ifc
new file mode 100644
index 0000000000..98265bc13e
--- /dev/null
+++ b/test/input/IfcCShapeProfileDef.ifc
@@ -0,0 +1,86 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcCShapeProfileDef.ifc','2014-02-23T12:17:27',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154247);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('0dWVy0Y8vE$B13m7$YY1VX',#5,'IfcCShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('18EIqdfBHCG8dtQdgrEE7G',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('1PZDvu6jTBnOWX25s7CRQR',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('2nNmzjoEPEPA0eDThSZlum',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('2ByfxPqAz5iRLvgscS_Zcz',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('2Q8wqY1S164A1vNUz3LEIE',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('3rgDF6pw56Ov5SW7WfqsMe',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('2Wz6WQMgr51xgotG$Q9XmJ',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('37T52A1uzFS867214SlMqu',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCCSHAPEPROFILEDEF(.AREA.,$,#49,50.,25.,5.,10.,$,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('0qB16KHWrEAu_H_Yi9_gN5',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('2WW5G3oZz9uwEaQn2MHxaa',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCCSHAPEPROFILEDEF(.AREA.,$,#68,50.,25.,5.,10.,2.,$);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcCircleProfileDef.ifc b/test/input/IfcCircleProfileDef.ifc
new file mode 100644
index 0000000000..3be9461731
--- /dev/null
+++ b/test/input/IfcCircleProfileDef.ifc
@@ -0,0 +1,86 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcCircleProfileDef.ifc','2014-02-23T12:17:27',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154247);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('2QehVu89r7sBGVc65BnqIx',#5,'IfcCircleProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('1OlSQImpTDewLEbzb$U3_x',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('3DL40LKfrDkQku7IV8swA6',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('1q6K1nCsr5TQ8XggyI937I',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('1s3B1qUeH0uACbj7HVUEWS',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('2NXm3KklDB8P0_ghcPjrHX',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0RWVfnFD1FYxLKs80Elmfb',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('0VvlqPNMHFXvNiinWkSe6x',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('3vv32q5cT27AbLbpFs79$6',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCCIRCLEPROFILEDEF(.AREA.,$,#49,25.);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('3kvG86uhj1YuaKDAy6ngZO',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('3pqeZ0fbP1k9FNyVEg$Ie2',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,$,#68,25.,5.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcEllipseProfileDef.ifc b/test/input/IfcEllipseProfileDef.ifc
new file mode 100644
index 0000000000..66749ae188
--- /dev/null
+++ b/test/input/IfcEllipseProfileDef.ifc
@@ -0,0 +1,86 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcEllipseProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('0_vdRtIqnEixeorQe7fhsb',#5,'IfcEllipseProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('2hlMQd9xTAmA3QL4$jEBzU',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('2QzrjG1EfA3u6qQm0y_iXI',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('24TAoH745FCvE7NMBw7_ld',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('0vCitOI012jxCaQvNTyoQd',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('3b0h0XhlPAwBbP1wukkTAD',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0z2w6ibun3NP4uKoW3EOAr',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('0$nf4txxD5cg_t$BQXwyiP',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('3SFElqODLBmgUGSugeEc2K',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCELLIPSEPROFILEDEF(.AREA.,$,#49,50.,25.);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('3TIvzP5ij0rR_rajiqvlyC',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('0wGwRa4e9AVx9SKA1_NRA3',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCELLIPSEPROFILEDEF(.AREA.,$,#68,25.,50.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcIShapeProfileDef.ifc b/test/input/IfcIShapeProfileDef.ifc
new file mode 100644
index 0000000000..e7663e6fe0
--- /dev/null
+++ b/test/input/IfcIShapeProfileDef.ifc
@@ -0,0 +1,86 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcIShapeProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('2KOHs4nSD9uuIi7enj9fr0',#5,'IfcIShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('1lruVjkubEmBeYjtZqCZu2',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('3OPScms790MwrpNEEp6Pme',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('06eFSA_tHCPvcQhhGyujw8',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('3piPcRpsj4kufJS6uIUYEX',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('3wk8ZJ1Zf1LecGq5wib$UM',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('26SvotDGb7Fe8d$wvMyX3W',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('3Y4tF1eJnEBwlGlOJt151k',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('2IMXhEgbn6jP_MmewiOwkc',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCISHAPEPROFILEDEF(.AREA.,$,#49,25.,50.,5.,5.,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('1MUiX0$sbEwxx8E0uTLtPY',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('3QRrMzj0bCK8iRu0Ec3$Ft',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCISHAPEPROFILEDEF(.AREA.,$,#68,25.,50.,5.,5.,2.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcLShapeProfileDef.ifc b/test/input/IfcLShapeProfileDef.ifc
new file mode 100644
index 0000000000..96121ac322
--- /dev/null
+++ b/test/input/IfcLShapeProfileDef.ifc
@@ -0,0 +1,124 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcLShapeProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('0BRiATKPH3Hwm$t_VULP9z',#5,'IfcLShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('2_q1ZjXAfA3hDcEWiqQcP8',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('2jwFJRTrHA4uIEO78BJ7vf',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('203C0jfr53Zvum3lxePGZF',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('3tfFA1BpnFvfYJXuzkaGw7',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('3YsAmJCTTEuxGf$fQUTq24',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0yU5eGeC545O7vsSI5o87s',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('2k7U$sXB1Fl91zm$hgdUKw',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('1nz7J2BqzChRnBLpLBqkDT',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCLSHAPEPROFILEDEF(.AREA.,$,#49,50.,25.,5.,$,$,$,$,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('0vmXwjt5P7eO2gaREV4Dg0',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('1p6TiiVTf1Yfpzfzjb94HM',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCLSHAPEPROFILEDEF(.AREA.,$,#68,50.,25.,5.,2.,2.,$,$,$);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+#78=IFCBUILDINGELEMENTPROXY('0I7UAAt6f2je106FVaK1ni',#5,'profile',$,$,#84,#96,$,$);
+#79=IFCRELCONTAINEDINSPATIALSTRUCTURE('0ufoBajmXCRO5z3d6cPuSA',#5,$,$,(#78),#38);
+#80=IFCDIRECTION((1.,0.,0.));
+#81=IFCDIRECTION((0.,0.,1.));
+#82=IFCCARTESIANPOINT((200.,0.,0.));
+#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
+#84=IFCLOCALPLACEMENT($,#83);
+#85=IFCDIRECTION((1.,0.));
+#86=IFCCARTESIANPOINT((0.,0.));
+#87=IFCAXIS2PLACEMENT2D(#86,#85);
+#88=IFCDIRECTION((0.,0.,1.));
+#89=IFCDIRECTION((1.,0.,0.));
+#90=IFCDIRECTION((0.,0.,1.));
+#91=IFCCARTESIANPOINT((0.,0.,0.));
+#92=IFCAXIS2PLACEMENT3D(#91,#90,#89);
+#93=IFCLSHAPEPROFILEDEF(.AREA.,$,#87,50.,25.,5.,$,$,0.1,$,$);
+#94=IFCEXTRUDEDAREASOLID(#93,#92,#88,20.);
+#95=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#94));
+#96=IFCPRODUCTDEFINITIONSHAPE($,$,(#95));
+#97=IFCBUILDINGELEMENTPROXY('2CON0nfuX5Eezhkkl7bUUh',#5,'profile',$,$,#103,#115,$,$);
+#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('1j$lyjn0b22g9hJG6$comd',#5,$,$,(#97),#38);
+#99=IFCDIRECTION((1.,0.,0.));
+#100=IFCDIRECTION((0.,0.,1.));
+#101=IFCCARTESIANPOINT((300.,0.,0.));
+#102=IFCAXIS2PLACEMENT3D(#101,#100,#99);
+#103=IFCLOCALPLACEMENT($,#102);
+#104=IFCDIRECTION((1.,0.));
+#105=IFCCARTESIANPOINT((0.,0.));
+#106=IFCAXIS2PLACEMENT2D(#105,#104);
+#107=IFCDIRECTION((0.,0.,1.));
+#108=IFCDIRECTION((1.,0.,0.));
+#109=IFCDIRECTION((0.,0.,1.));
+#110=IFCCARTESIANPOINT((0.,0.,0.));
+#111=IFCAXIS2PLACEMENT3D(#110,#109,#108);
+#112=IFCLSHAPEPROFILEDEF(.AREA.,$,#106,50.,25.,5.,1.,2.,0.3,$,$);
+#113=IFCEXTRUDEDAREASOLID(#112,#111,#107,20.);
+#114=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#113));
+#115=IFCPRODUCTDEFINITIONSHAPE($,$,(#114));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcRectangleProfileDef.ifc b/test/input/IfcRectangleProfileDef.ifc
new file mode 100644
index 0000000000..e8d2d951d0
--- /dev/null
+++ b/test/input/IfcRectangleProfileDef.ifc
@@ -0,0 +1,124 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcRectangleProfileDef.ifc','2014-02-23T12:17:27',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154247);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('34NFZdlw18tQg7qe_UpWD3',#5,'IfcRectangleProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('0HQnEwtaT8og7FPJVsBNOP',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('2sIBlgRXT4y9ht_9tPEBC7',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('1z$jgYZ8jELeiBgtsj1Ywb',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('2bxfQZFzjFaBAA9rkA3BmU',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('1hExFdke124PGUUaHP477g',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0ITGmTN3j01ACXyloo9xu1',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('0l5Ho3m451kf2dKCVrqoaH',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('06NzIRXwX1vwKlImhmg9fS',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCRECTANGLEPROFILEDEF(.AREA.,$,#49,50.,25.);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('3BYiTRrsX9Kh4sUOHRMFg9',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('3AL3LxjpT1j9pXgWkoyGKa',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCROUNDEDRECTANGLEPROFILEDEF(.AREA.,$,#68,50.,25.,5.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+#78=IFCBUILDINGELEMENTPROXY('1JwSHn6uL10QulUWSwgv70',#5,'profile',$,$,#84,#96,$,$);
+#79=IFCRELCONTAINEDINSPATIALSTRUCTURE('1padVE20fDEQOS7FQjgywj',#5,$,$,(#78),#38);
+#80=IFCDIRECTION((1.,0.,0.));
+#81=IFCDIRECTION((0.,0.,1.));
+#82=IFCCARTESIANPOINT((200.,0.,0.));
+#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
+#84=IFCLOCALPLACEMENT($,#83);
+#85=IFCDIRECTION((1.,0.));
+#86=IFCCARTESIANPOINT((0.,0.));
+#87=IFCAXIS2PLACEMENT2D(#86,#85);
+#88=IFCDIRECTION((0.,0.,1.));
+#89=IFCDIRECTION((1.,0.,0.));
+#90=IFCDIRECTION((0.,0.,1.));
+#91=IFCCARTESIANPOINT((0.,0.,0.));
+#92=IFCAXIS2PLACEMENT3D(#91,#90,#89);
+#93=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,$,#87,50.,25.,5.,$,$);
+#94=IFCEXTRUDEDAREASOLID(#93,#92,#88,20.);
+#95=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#94));
+#96=IFCPRODUCTDEFINITIONSHAPE($,$,(#95));
+#97=IFCBUILDINGELEMENTPROXY('0CyzhXtfH2zgiiCjDdsUmI',#5,'profile',$,$,#103,#115,$,$);
+#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('0ltMn_dELFieiCmUExBlW5',#5,$,$,(#97),#38);
+#99=IFCDIRECTION((1.,0.,0.));
+#100=IFCDIRECTION((0.,0.,1.));
+#101=IFCCARTESIANPOINT((300.,0.,0.));
+#102=IFCAXIS2PLACEMENT3D(#101,#100,#99);
+#103=IFCLOCALPLACEMENT($,#102);
+#104=IFCDIRECTION((1.,0.));
+#105=IFCCARTESIANPOINT((0.,0.));
+#106=IFCAXIS2PLACEMENT2D(#105,#104);
+#107=IFCDIRECTION((0.,0.,1.));
+#108=IFCDIRECTION((1.,0.,0.));
+#109=IFCDIRECTION((0.,0.,1.));
+#110=IFCCARTESIANPOINT((0.,0.,0.));
+#111=IFCAXIS2PLACEMENT3D(#110,#109,#108);
+#112=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,$,#106,50.,25.,5.,2.,4.);
+#113=IFCEXTRUDEDAREASOLID(#112,#111,#107,20.);
+#114=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#113));
+#115=IFCPRODUCTDEFINITIONSHAPE($,$,(#114));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcTShapeProfileDef.ifc b/test/input/IfcTShapeProfileDef.ifc
new file mode 100644
index 0000000000..3503a51fd7
--- /dev/null
+++ b/test/input/IfcTShapeProfileDef.ifc
@@ -0,0 +1,124 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcTShapeProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('0sXMoyZUb7p9ej64Kh8SIU',#5,'IfcTShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('2_68uBtwTEOfNUeWU42Bgs',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('1pHM3hhMX3OeoaeCn_CrvQ',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('0UR50UmxXDpu3hRegxtxD$',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('1_EqpMq_LFjgar6Pv$Ka9U',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('0cV$wdoL98hhsXYLIUhtBi',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0niyQzLdbC_PsZL32R0Pcm',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('0aBmfX_X53HeqLVNd5MDTb',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('09qOBj73r6zxlSK7anG1hn',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCTSHAPEPROFILEDEF(.AREA.,$,#49,50.,25.,5.,5.,$,$,$,$,$,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('1R1GSa08z0DOeFKVAIF9T7',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('1B2HLdg$56KAHVBsshFOLs',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCTSHAPEPROFILEDEF(.AREA.,$,#68,50.,25.,5.,5.,2.,2.,2.,$,$,$);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+#78=IFCBUILDINGELEMENTPROXY('1m_T8J$TD1ZPCLsF6EyPWw',#5,'profile',$,$,#84,#96,$,$);
+#79=IFCRELCONTAINEDINSPATIALSTRUCTURE('1bPtP0CODChB0wHWE0Q7fT',#5,$,$,(#78),#38);
+#80=IFCDIRECTION((1.,0.,0.));
+#81=IFCDIRECTION((0.,0.,1.));
+#82=IFCCARTESIANPOINT((200.,0.,0.));
+#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
+#84=IFCLOCALPLACEMENT($,#83);
+#85=IFCDIRECTION((1.,0.));
+#86=IFCCARTESIANPOINT((0.,0.));
+#87=IFCAXIS2PLACEMENT2D(#86,#85);
+#88=IFCDIRECTION((0.,0.,1.));
+#89=IFCDIRECTION((1.,0.,0.));
+#90=IFCDIRECTION((0.,0.,1.));
+#91=IFCCARTESIANPOINT((0.,0.,0.));
+#92=IFCAXIS2PLACEMENT3D(#91,#90,#89);
+#93=IFCTSHAPEPROFILEDEF(.AREA.,$,#87,50.,25.,5.,5.,$,$,$,0.1,0.1,$);
+#94=IFCEXTRUDEDAREASOLID(#93,#92,#88,20.);
+#95=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#94));
+#96=IFCPRODUCTDEFINITIONSHAPE($,$,(#95));
+#97=IFCBUILDINGELEMENTPROXY('2MuEabtWr3QQt7zbdBSOd1',#5,'profile',$,$,#103,#115,$,$);
+#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('3eAewjVcT07h$ZiBofIjIk',#5,$,$,(#97),#38);
+#99=IFCDIRECTION((1.,0.,0.));
+#100=IFCDIRECTION((0.,0.,1.));
+#101=IFCCARTESIANPOINT((300.,0.,0.));
+#102=IFCAXIS2PLACEMENT3D(#101,#100,#99);
+#103=IFCLOCALPLACEMENT($,#102);
+#104=IFCDIRECTION((1.,0.));
+#105=IFCCARTESIANPOINT((0.,0.));
+#106=IFCAXIS2PLACEMENT2D(#105,#104);
+#107=IFCDIRECTION((0.,0.,1.));
+#108=IFCDIRECTION((1.,0.,0.));
+#109=IFCDIRECTION((0.,0.,1.));
+#110=IFCCARTESIANPOINT((0.,0.,0.));
+#111=IFCAXIS2PLACEMENT3D(#110,#109,#108);
+#112=IFCTSHAPEPROFILEDEF(.AREA.,$,#106,50.,25.,5.,5.,1.,2.,3.,0.1,0.2,$);
+#113=IFCEXTRUDEDAREASOLID(#112,#111,#107,20.);
+#114=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#113));
+#115=IFCPRODUCTDEFINITIONSHAPE($,$,(#114));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcTrapeziumProfileDef.ifc b/test/input/IfcTrapeziumProfileDef.ifc
new file mode 100644
index 0000000000..b36efedd58
--- /dev/null
+++ b/test/input/IfcTrapeziumProfileDef.ifc
@@ -0,0 +1,105 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcTrapeziumProfileDef.ifc','2014-02-23T12:17:27',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154247);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('3Rxkvxeyz9sudbhVrTcY4v',#5,'IfcTrapeziumProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('2$Xc0Ro5bBGecGvaiCr7zU',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('3kecitZifF3AF46fhw1yMH',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('2dTnlkDWH8bRXt1DJPG6Bu',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('379wyo3mv45OjKmZh1YBOn',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('3qu9wRQsv8Sg99kI0EC8$4',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('0mvZGnMDv5qfqxXbs6tSxx',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('2ZttRVba13vRe1zxE3i_yi',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('3B_wYdsirBjgr_wbMuowLo',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCTRAPEZIUMPROFILEDEF(.AREA.,$,#49,50.,30.,25.,0.);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('02tBX3f1f5ZgO8C8mNr153',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('2S5_HmCt53c9YsYKNzPmQd',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCTRAPEZIUMPROFILEDEF(.AREA.,$,#68,50.,60.,25.,-20.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+#78=IFCBUILDINGELEMENTPROXY('0d55mWbVXB_OJqdO9EpyfE',#5,'profile',$,$,#84,#96,$,$);
+#79=IFCRELCONTAINEDINSPATIALSTRUCTURE('0B52LsJKDA$9TK$54jlRs9',#5,$,$,(#78),#38);
+#80=IFCDIRECTION((1.,0.,0.));
+#81=IFCDIRECTION((0.,0.,1.));
+#82=IFCCARTESIANPOINT((200.,0.,0.));
+#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
+#84=IFCLOCALPLACEMENT($,#83);
+#85=IFCDIRECTION((1.,0.));
+#86=IFCCARTESIANPOINT((0.,0.));
+#87=IFCAXIS2PLACEMENT2D(#86,#85);
+#88=IFCDIRECTION((0.,0.,1.));
+#89=IFCDIRECTION((1.,0.,0.));
+#90=IFCDIRECTION((0.,0.,1.));
+#91=IFCCARTESIANPOINT((0.,0.,0.));
+#92=IFCAXIS2PLACEMENT3D(#91,#90,#89);
+#93=IFCTRAPEZIUMPROFILEDEF(.AREA.,$,#87,50.,10.,25.,30.);
+#94=IFCEXTRUDEDAREASOLID(#93,#92,#88,20.);
+#95=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#94));
+#96=IFCPRODUCTDEFINITIONSHAPE($,$,(#95));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcUShapeProfileDef.ifc b/test/input/IfcUShapeProfileDef.ifc
new file mode 100644
index 0000000000..23e64ce040
--- /dev/null
+++ b/test/input/IfcUShapeProfileDef.ifc
@@ -0,0 +1,124 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcUShapeProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('2s9Efx9Lz7lOQm_nBx5b1H',#5,'IfcUShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('3CVG6y8MX4LxRoO0tnWAxv',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('2UrdZWFB92MA7ahGq4J5TY',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('145cRBbjTC3wXrNsmW_UZ2',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('2WCriLMc17_f$jD$ISN6ZK',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('35eug6$u94IPdu9dimQveQ',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('1YhsCLTfzD3AhaVt6InRAK',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('0EV_6T_rrD3gf5earRSKyg',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('0jkkdReIn9xRbOV9DPIxju',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCUSHAPEPROFILEDEF(.AREA.,$,#49,50.,25.,5.,5.,$,$,$,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('1EqK0oFd58kPrk10CJ6WOm',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('3SEUJn8Qr2zulxMMF5F5rg',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCUSHAPEPROFILEDEF(.AREA.,$,#68,50.,25.,5.,5.,2.,2.,$,$);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+#78=IFCBUILDINGELEMENTPROXY('2VmrYAU3v8_vuK$ZHwVxqv',#5,'profile',$,$,#84,#96,$,$);
+#79=IFCRELCONTAINEDINSPATIALSTRUCTURE('08dIjaN3X0bgzJT12yIqFd',#5,$,$,(#78),#38);
+#80=IFCDIRECTION((1.,0.,0.));
+#81=IFCDIRECTION((0.,0.,1.));
+#82=IFCCARTESIANPOINT((200.,0.,0.));
+#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
+#84=IFCLOCALPLACEMENT($,#83);
+#85=IFCDIRECTION((1.,0.));
+#86=IFCCARTESIANPOINT((0.,0.));
+#87=IFCAXIS2PLACEMENT2D(#86,#85);
+#88=IFCDIRECTION((0.,0.,1.));
+#89=IFCDIRECTION((1.,0.,0.));
+#90=IFCDIRECTION((0.,0.,1.));
+#91=IFCCARTESIANPOINT((0.,0.,0.));
+#92=IFCAXIS2PLACEMENT3D(#91,#90,#89);
+#93=IFCUSHAPEPROFILEDEF(.AREA.,$,#87,50.,25.,5.,5.,$,$,0.1,$);
+#94=IFCEXTRUDEDAREASOLID(#93,#92,#88,20.);
+#95=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#94));
+#96=IFCPRODUCTDEFINITIONSHAPE($,$,(#95));
+#97=IFCBUILDINGELEMENTPROXY('11N9hVDYfCOgr$pD_60KDV',#5,'profile',$,$,#103,#115,$,$);
+#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('2ZPuncd1b5SOfhXw4iQ24j',#5,$,$,(#97),#38);
+#99=IFCDIRECTION((1.,0.,0.));
+#100=IFCDIRECTION((0.,0.,1.));
+#101=IFCCARTESIANPOINT((300.,0.,0.));
+#102=IFCAXIS2PLACEMENT3D(#101,#100,#99);
+#103=IFCLOCALPLACEMENT($,#102);
+#104=IFCDIRECTION((1.,0.));
+#105=IFCCARTESIANPOINT((0.,0.));
+#106=IFCAXIS2PLACEMENT2D(#105,#104);
+#107=IFCDIRECTION((0.,0.,1.));
+#108=IFCDIRECTION((1.,0.,0.));
+#109=IFCDIRECTION((0.,0.,1.));
+#110=IFCCARTESIANPOINT((0.,0.,0.));
+#111=IFCAXIS2PLACEMENT3D(#110,#109,#108);
+#112=IFCUSHAPEPROFILEDEF(.AREA.,$,#106,50.,25.,5.,5.,1.,3.,0.1,$);
+#113=IFCEXTRUDEDAREASOLID(#112,#111,#107,20.);
+#114=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#113));
+#115=IFCPRODUCTDEFINITIONSHAPE($,$,(#114));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/input/IfcZShapeProfileDef.ifc b/test/input/IfcZShapeProfileDef.ifc
new file mode 100644
index 0000000000..780c36dae1
--- /dev/null
+++ b/test/input/IfcZShapeProfileDef.ifc
@@ -0,0 +1,86 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('IfcZShapeProfileDef.ifc','2014-02-23T12:17:26',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
+FILE_SCHEMA(('IFC2X3'));
+ENDSEC;
+DATA;
+#1=IFCPERSON($,$,'',$,$,$,$,$);
+#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
+#3=IFCPERSONANDORGANIZATION(#1,#2,$);
+#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
+#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246);
+#6=IFCDIRECTION((0.,1.,0.));
+#7=IFCDIRECTION((1.,0.,0.));
+#8=IFCDIRECTION((0.,0.,1.));
+#9=IFCCARTESIANPOINT((0.,0.,0.));
+#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
+#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6);
+#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
+#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
+#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14);
+#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15);
+#17=IFCUNITASSIGNMENT((#13,#16));
+#18=IFCPROJECT('2xysnmCqT26vNI$aSsYXTO',#5,'IfcZShapeProfileDef',$,$,$,$,(#11),#17);
+#19=IFCDIRECTION((1.,0.,0.));
+#20=IFCDIRECTION((0.,0.,1.));
+#21=IFCCARTESIANPOINT((0.,0.,0.));
+#22=IFCAXIS2PLACEMENT3D(#21,#20,#19);
+#23=IFCLOCALPLACEMENT($,#22);
+#24=IFCSITE('1ul3e381DAqxxPikhkB6Qz',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$);
+#25=IFCRELAGGREGATES('1o7wk83jrAA9WN5dUaVi7j',#5,$,$,#18,(#24));
+#26=IFCDIRECTION((1.,0.,0.));
+#27=IFCDIRECTION((0.,0.,1.));
+#28=IFCCARTESIANPOINT((0.,0.,0.));
+#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
+#30=IFCLOCALPLACEMENT(#23,#29);
+#31=IFCBUILDING('25mGHsRtT1G9ye5DF_yWRK',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$);
+#32=IFCRELAGGREGATES('3ig$czHyn44e9z_09tJlEW',#5,$,$,#24,(#31));
+#33=IFCDIRECTION((1.,0.,0.));
+#34=IFCDIRECTION((0.,0.,1.));
+#35=IFCCARTESIANPOINT((0.,0.,0.));
+#36=IFCAXIS2PLACEMENT3D(#35,#34,#33);
+#37=IFCLOCALPLACEMENT(#30,#36);
+#38=IFCBUILDINGSTOREY('0gquwm1oXFiR48aW6D6xfh',#5,$,$,$,#37,$,$,.ELEMENT.,$);
+#39=IFCRELAGGREGATES('1OS_upnnL8BfYZodhCacHJ',#5,$,$,#31,(#38));
+#40=IFCBUILDINGELEMENTPROXY('1KGlDKo2z4shOSM583z1$Y',#5,'profile',$,$,#46,#58,$,$);
+#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('02TaRhRoX6RetW2Ux$vbeE',#5,$,$,(#40),#38);
+#42=IFCDIRECTION((1.,0.,0.));
+#43=IFCDIRECTION((0.,0.,1.));
+#44=IFCCARTESIANPOINT((0.,0.,0.));
+#45=IFCAXIS2PLACEMENT3D(#44,#43,#42);
+#46=IFCLOCALPLACEMENT($,#45);
+#47=IFCDIRECTION((1.,0.));
+#48=IFCCARTESIANPOINT((0.,0.));
+#49=IFCAXIS2PLACEMENT2D(#48,#47);
+#50=IFCDIRECTION((0.,0.,1.));
+#51=IFCDIRECTION((1.,0.,0.));
+#52=IFCDIRECTION((0.,0.,1.));
+#53=IFCCARTESIANPOINT((0.,0.,0.));
+#54=IFCAXIS2PLACEMENT3D(#53,#52,#51);
+#55=IFCZSHAPEPROFILEDEF(.AREA.,$,#49,50.,25.,5.,5.,$,$);
+#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.);
+#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56));
+#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57));
+#59=IFCBUILDINGELEMENTPROXY('2ZFfuhwN5F_vBMKpzuJtV9',#5,'profile',$,$,#65,#77,$,$);
+#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('2nT1ZSn$nFMuoqiPGvLLWx',#5,$,$,(#59),#38);
+#61=IFCDIRECTION((1.,0.,0.));
+#62=IFCDIRECTION((0.,0.,1.));
+#63=IFCCARTESIANPOINT((100.,0.,0.));
+#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
+#65=IFCLOCALPLACEMENT($,#64);
+#66=IFCDIRECTION((1.,0.));
+#67=IFCCARTESIANPOINT((0.,0.));
+#68=IFCAXIS2PLACEMENT2D(#67,#66);
+#69=IFCDIRECTION((0.,0.,1.));
+#70=IFCDIRECTION((1.,0.,0.));
+#71=IFCDIRECTION((0.,0.,1.));
+#72=IFCCARTESIANPOINT((0.,0.,0.));
+#73=IFCAXIS2PLACEMENT3D(#72,#71,#70);
+#74=IFCZSHAPEPROFILEDEF(.AREA.,$,#68,50.,25.,5.,5.,2.,2.);
+#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.);
+#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75));
+#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/run.py b/test/run.py
index efe3c13a2a..8608a785ff 100644
--- a/test/run.py
+++ b/test/run.py
@@ -209,6 +209,19 @@ TestFile("ifcopenshell_halfspaces.ifc")
# Several IfcPolygonalBoundedHalfSpaces cutting a single solid
TestFile("revit2014_multiple_bounded_halfspaces.ifc")
+# Several parameterized profile extrusions generated by one
+# of the examples from the IfcOpenShell repository
+TestFile("IfcCShapeProfileDef.ifc")
+TestFile("IfcCircleProfileDef.ifc")
+TestFile("IfcEllipseProfileDef.ifc")
+TestFile("IfcIShapeProfileDef.ifc")
+TestFile("IfcLShapeProfileDef.ifc")
+TestFile("IfcRectangleProfileDef.ifc")
+TestFile("IfcTShapeProfileDef.ifc")
+TestFile("IfcTrapeziumProfileDef.ifc")
+TestFile("IfcUShapeProfileDef.ifc")
+TestFile("IfcZShapeProfileDef.ifc")
+
for test in test_cases:
succes = test()
if not succes:
@@ -220,4 +233,4 @@ if len(failed):
print (test)
else:
print("[Notice] All cases succeeded")
-
\ No newline at end of file
+