Add support for IfcAsymmetricIShapeProfileDef

This commit is contained in:
Thomas Krijnen
2014-11-26 14:01:31 +00:00
parent eb815120dc
commit d88d4d5951
4 changed files with 132 additions and 99 deletions
+18 -15
View File
@@ -35,7 +35,7 @@ typedef std::string S;
typedef IfcWrite::IfcGuidHelper guid; typedef IfcWrite::IfcGuidHelper guid;
boost::none_t const null = (static_cast<boost::none_t>(0)); boost::none_t const null = (static_cast<boost::none_t>(0));
void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) { void create_testcase_for(IfcSchema::IfcProfileDef::list::ptr profiles) {
IfcSchema::IfcProfileDef* profile = *profiles->begin(); IfcSchema::IfcProfileDef* profile = *profiles->begin();
const std::string profile_type = IfcSchema::Type::ToString(profile->type()); const std::string profile_type = IfcSchema::Type::ToString(profile->type());
const std::string filename = profile_type + ".ifc"; const std::string filename = profile_type + ".ifc";
@@ -44,7 +44,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) {
file.filename(filename); file.filename(filename);
int i = 0; int i = 0;
for (IfcSchema::IfcProfileDef::it it = profiles->begin(); it != profiles->end(); ++it, ++i) { for (IfcSchema::IfcProfileDef::list::it it = profiles->begin(); it != profiles->end(); ++it, ++i) {
IfcSchema::IfcProfileDef* profile = *it; IfcSchema::IfcProfileDef* profile = *it;
IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy( IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy(
guid(), 0, S("profile"), null, null, 0, 0, null, null); guid(), 0, S("profile"), null, null, 0, 0, null, null);
@@ -52,7 +52,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) {
file.getSingle<IfcSchema::IfcProject>()->setName(profile_type); file.getSingle<IfcSchema::IfcProject>()->setName(profile_type);
product->setOwnerHistory(file.getSingle<IfcSchema::IfcOwnerHistory>()); product->setOwnerHistory(file.getSingle<IfcSchema::IfcOwnerHistory>());
product->setObjectPlacement(file.addLocalPlacement(100 * i)); product->setObjectPlacement(file.addLocalPlacement(0, 100. * i));
if (profile->is(IfcSchema::Type::IfcParameterizedProfileDef)) { if (profile->is(IfcSchema::Type::IfcParameterizedProfileDef)) {
((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d()); ((IfcSchema::IfcParameterizedProfileDef*) profile)->setPosition(file.addPlacement2d());
@@ -64,8 +64,8 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) {
file.AddEntity(profile); file.AddEntity(profile);
file.AddEntity(solid); file.AddEntity(solid);
IfcSchema::IfcRepresentation::list reps (new IfcTemplatedEntityList<IfcSchema::IfcRepresentation>()); IfcSchema::IfcRepresentation::list::ptr reps (new IfcSchema::IfcRepresentation::list);
IfcSchema::IfcRepresentationItem::list items (new IfcTemplatedEntityList<IfcSchema::IfcRepresentationItem>()); IfcSchema::IfcRepresentationItem::list::ptr items (new IfcSchema::IfcRepresentationItem::list);
items->push(solid); items->push(solid);
IfcSchema::IfcShapeRepresentation* rep = new IfcSchema::IfcShapeRepresentation( IfcSchema::IfcShapeRepresentation* rep = new IfcSchema::IfcShapeRepresentation(
@@ -84,7 +84,7 @@ void create_testcase_for(IfcSchema::IfcProfileDef::list profiles) {
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcUShapeProfileDef( profiles->push(new Ifc2x3::IfcUShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null));
@@ -99,7 +99,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 6.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 1.0, 3.0, 6.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcTShapeProfileDef( profiles->push(new Ifc2x3::IfcTShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null, null, null, null, null));
@@ -114,7 +114,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 5.0, 3.0, 2.0, 1.0, 2.0, 2.0, null)); null, 0, 50.0, 25.0, 5.0, 5.0, 3.0, 2.0, 1.0, 2.0, 2.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcZShapeProfileDef( profiles->push(new Ifc2x3::IfcZShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 5.0, null, null)); null, 0, 50.0, 25.0, 5.0, 5.0, null, null));
@@ -123,7 +123,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0)); null, 0, 50.0, 25.0, 5.0, 5.0, 2.0, 2.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcEllipseProfileDef( profiles->push(new Ifc2x3::IfcEllipseProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 15.0)); null, 0, 25.0, 15.0));
@@ -132,16 +132,19 @@ int main(int argc, char** argv) {
null, 0, 15.0, 25.0)); null, 0, 15.0, 25.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcIShapeProfileDef( profiles->push(new Ifc2x3::IfcIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, null)); null, 0, 25.0, 50.0, 5.0, 5.0, null));
profiles->push(new Ifc2x3::IfcIShapeProfileDef( profiles->push(new Ifc2x3::IfcIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, 2.0)); null, 0, 25.0, 50.0, 5.0, 5.0, 2.0));
profiles->push(new Ifc2x3::IfcAsymmetricIShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0, 50.0, 5.0, 5.0, 2.0, 20.0, 10.0, 5.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcLShapeProfileDef( profiles->push(new Ifc2x3::IfcLShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, null, null, null, null, null)); null, 0, 50.0, 25.0, 5.0, null, null, null, null, null));
@@ -156,7 +159,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 2.0, null, null)); null, 0, 50.0, 25.0, 5.0, 1.0, 2.0, 2.0, null, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcCShapeProfileDef( profiles->push(new Ifc2x3::IfcCShapeProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0, 5.0, 10.0, null, null)); null, 0, 50.0, 25.0, 5.0, 10.0, null, null));
@@ -165,7 +168,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null)); null, 0, 50.0, 25.0, 5.0, 10.0, 2.0, null));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcCircleProfileDef( profiles->push(new Ifc2x3::IfcCircleProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 25.0)); null, 0, 25.0));
@@ -174,7 +177,7 @@ int main(int argc, char** argv) {
null, 0, 25.0, 5.0)); null, 0, 25.0, 5.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcRectangleProfileDef( profiles->push(new Ifc2x3::IfcRectangleProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 25.0)); null, 0, 50.0, 25.0));
@@ -189,7 +192,7 @@ int main(int argc, char** argv) {
null, 0, 50.0, 25.0, 5.0, 2.0, 4.0)); null, 0, 50.0, 25.0, 5.0, 2.0, 4.0));
create_testcase_for(profiles); } create_testcase_for(profiles); }
{ IfcSchema::IfcProfileDef::list profiles (new IfcTemplatedEntityList<IfcSchema::IfcProfileDef>()); { IfcSchema::IfcProfileDef::list::ptr profiles (new IfcSchema::IfcProfileDef::list);
profiles->push(new Ifc2x3::IfcTrapeziumProfileDef( profiles->push(new Ifc2x3::IfcTrapeziumProfileDef(
IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA,
null, 0, 50.0, 30.0, 25.0, 0.0)); null, 0, 50.0, 30.0, 25.0, 0.0));
+26 -10
View File
@@ -331,17 +331,33 @@ bool IfcGeom::convert(const IfcSchema::IfcTrapeziumProfileDef* l, TopoDS_Shape&
} }
bool IfcGeom::convert(const IfcSchema::IfcIShapeProfileDef* l, TopoDS_Shape& face) { bool IfcGeom::convert(const IfcSchema::IfcIShapeProfileDef* l, TopoDS_Shape& face) {
const double x = l->OverallWidth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT); const double x1 = l->OverallWidth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
const double y = l->OverallDepth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT); const double y = l->OverallDepth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
const double d1 = l->WebThickness() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT); const double d1 = l->WebThickness() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
const double d2 = l->FlangeThickness() * IfcGeom::GetValue(GV_LENGTH_UNIT); const double dy1 = l->FlangeThickness() * IfcGeom::GetValue(GV_LENGTH_UNIT);
bool doFillet = l->hasFilletRadius();
double f = 0.; bool doFillet1 = l->hasFilletRadius();
if ( doFillet ) { double f1 = 0.;
f = l->FilletRadius() * IfcGeom::GetValue(GV_LENGTH_UNIT); if ( doFillet1 ) {
f1 = l->FilletRadius() * IfcGeom::GetValue(GV_LENGTH_UNIT);
} }
if ( x == 0.0f || y == 0.0f || d1 == 0.0f || d2 == 0.0f ) { bool doFillet2 = doFillet1;
double x2 = x1, dy2 = dy1, f2 = f1;
if (l->is(IfcSchema::Type::IfcAsymmetricIShapeProfileDef)) {
IfcSchema::IfcAsymmetricIShapeProfileDef* assym = (IfcSchema::IfcAsymmetricIShapeProfileDef*) l;
x2 = assym->TopFlangeWidth() / 2. * IfcGeom::GetValue(GV_LENGTH_UNIT);
doFillet2 = assym->hasTopFlangeFilletRadius();
if (doFillet2) {
f2 = assym->TopFlangeFilletRadius() * IfcGeom::GetValue(GV_LENGTH_UNIT);
}
if (assym->hasTopFlangeThickness()) {
dy2 = assym->TopFlangeThickness() * IfcGeom::GetValue(GV_LENGTH_UNIT);
}
}
if ( x1 < ALMOST_ZERO || x2 < ALMOST_ZERO || y < ALMOST_ZERO || d1 < ALMOST_ZERO || dy1 < ALMOST_ZERO || dy2 < ALMOST_ZERO ) {
Logger::Message(Logger::LOG_NOTICE,"Skipping zero sized profile:",l->entity); Logger::Message(Logger::LOG_NOTICE,"Skipping zero sized profile:",l->entity);
return false; return false;
} }
@@ -349,10 +365,10 @@ bool IfcGeom::convert(const IfcSchema::IfcIShapeProfileDef* l, TopoDS_Shape& fac
gp_Trsf2d trsf2d; gp_Trsf2d trsf2d;
IfcGeom::convert(l->Position(),trsf2d); IfcGeom::convert(l->Position(),trsf2d);
double coords[24] = {-x,-y,x,-y,x,-y+d2,d1,-y+d2,d1,y-d2,x,y-d2,x,y,-x,y,-x,y-d2,-d1,y-d2,-d1,-y+d2,-x,-y+d2}; double coords[24] = {-x1,-y, x1,-y, x1,-y+dy1, d1,-y+dy1, d1,y-dy2, x2,y-dy2, x2,y, -x2,y, -x2,y-dy2, -d1,y-dy2, -d1,-y+dy1, -x1,-y+dy1};
int fillets[4] = {3,4,9,10}; int fillets[4] = {3,4,9,10};
double radii[4] = {f,f,f,f}; double radii[4] = {f1,f1,f2,f2};
return IfcGeom::profile_helper(12,coords,doFillet ? 4 : 0,fillets,radii,trsf2d,face); return IfcGeom::profile_helper(12,coords,(doFillet1||doFillet2) ? 4 : 0,fillets,radii,trsf2d,face);
} }
bool IfcGeom::convert(const IfcSchema::IfcZShapeProfileDef* l, TopoDS_Shape& face) { bool IfcGeom::convert(const IfcSchema::IfcZShapeProfileDef* l, TopoDS_Shape& face) {
+1
View File
@@ -83,6 +83,7 @@ FACE(IfcRectangleHollowProfileDef);
FACE(IfcRectangleProfileDef); FACE(IfcRectangleProfileDef);
FACE(IfcTrapeziumProfileDef) FACE(IfcTrapeziumProfileDef)
FACE(IfcCShapeProfileDef); FACE(IfcCShapeProfileDef);
// IfcAsymmetricIShapeProfileDef included
FACE(IfcIShapeProfileDef); FACE(IfcIShapeProfileDef);
FACE(IfcLShapeProfileDef); FACE(IfcLShapeProfileDef);
FACE(IfcTShapeProfileDef); FACE(IfcTShapeProfileDef);
+87 -74
View File
@@ -1,7 +1,7 @@
ISO-10303-21; ISO-10303-21;
HEADER; HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); 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_NAME('IfcIShapeProfileDef.ifc','2014-11-26T14:27:17',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
FILE_SCHEMA(('IFC2X3')); FILE_SCHEMA(('IFC2X3'));
ENDSEC; ENDSEC;
DATA; DATA;
@@ -9,78 +9,91 @@ DATA;
#2=IFCORGANIZATION($,'IfcOpenShell',$,$,$); #2=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
#3=IFCPERSONANDORGANIZATION(#1,#2,$); #3=IFCPERSONANDORGANIZATION(#1,#2,$);
#4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell'); #4=IFCAPPLICATION(#2,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1393154246); #5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,1417008437,#3,#4,1417008437);
#6=IFCDIRECTION((0.,1.,0.)); #6=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#7=IFCDIRECTION((1.,0.,0.)); #7=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#8=IFCDIRECTION((0.,0.,1.)); #8=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#9=IFCCARTESIANPOINT((0.,0.,0.)); #9=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293),#8);
#10=IFCAXIS2PLACEMENT3D(#9,#8,#7); #10=IFCCONVERSIONBASEDUNIT(#6,.PLANEANGLEUNIT.,'Degrees',#9);
#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#10,#6); #11=IFCUNITASSIGNMENT((#7,#10));
#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); #12=IFCPROJECT('3m4yn5_O962PjTcijfzks3',#5,'IfcIShapeProfileDef',$,$,$,$,(),#11);
#13=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #13=IFCDIRECTION((1.,0.,0.));
#14=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); #14=IFCDIRECTION((0.,0.,1.));
#15=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#14); #15=IFCCARTESIANPOINT((0.,0.,0.));
#16=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'Degrees',#15); #16=IFCAXIS2PLACEMENT3D(#15,#14,#13);
#17=IFCUNITASSIGNMENT((#13,#16)); #17=IFCLOCALPLACEMENT($,#16);
#18=IFCPROJECT('2KOHs4nSD9uuIi7enj9fr0',#5,'IfcIShapeProfileDef',$,$,$,$,(#11),#17); #18=IFCSITE('24$986K_926AmY4iydFtGH',#5,$,$,$,#17,$,$,.ELEMENT.,$,$,$,$,$);
#19=IFCDIRECTION((1.,0.,0.)); #19=IFCRELAGGREGATES('1yoPiTUUb9xfZLREFmq4Z$',#5,$,$,#12,(#18));
#20=IFCDIRECTION((0.,0.,1.)); #20=IFCDIRECTION((1.,0.,0.));
#21=IFCCARTESIANPOINT((0.,0.,0.)); #21=IFCDIRECTION((0.,0.,1.));
#22=IFCAXIS2PLACEMENT3D(#21,#20,#19); #22=IFCCARTESIANPOINT((0.,0.,0.));
#23=IFCLOCALPLACEMENT($,#22); #23=IFCAXIS2PLACEMENT3D(#22,#21,#20);
#24=IFCSITE('1lruVjkubEmBeYjtZqCZu2',#5,$,$,$,#23,$,$,.ELEMENT.,$,$,$,$,$); #24=IFCLOCALPLACEMENT(#17,#23);
#25=IFCRELAGGREGATES('3OPScms790MwrpNEEp6Pme',#5,$,$,#18,(#24)); #25=IFCBUILDING('0ea_c1tET2ahOErGgHglqm',#5,$,$,$,#24,$,$,.ELEMENT.,$,$,$);
#26=IFCDIRECTION((1.,0.,0.)); #26=IFCRELAGGREGATES('3V7Akfyjr30heVaFOS8XR5',#5,$,$,#18,(#25));
#27=IFCDIRECTION((0.,0.,1.)); #27=IFCDIRECTION((1.,0.,0.));
#28=IFCCARTESIANPOINT((0.,0.,0.)); #28=IFCDIRECTION((0.,0.,1.));
#29=IFCAXIS2PLACEMENT3D(#28,#27,#26); #29=IFCCARTESIANPOINT((0.,0.,0.));
#30=IFCLOCALPLACEMENT(#23,#29); #30=IFCAXIS2PLACEMENT3D(#29,#28,#27);
#31=IFCBUILDING('06eFSA_tHCPvcQhhGyujw8',#5,$,$,$,#30,$,$,.ELEMENT.,$,$,$); #31=IFCLOCALPLACEMENT(#24,#30);
#32=IFCRELAGGREGATES('3piPcRpsj4kufJS6uIUYEX',#5,$,$,#24,(#31)); #32=IFCBUILDINGSTOREY('2MQ$o6sLD6hQTkVd4N5O$N',#5,$,$,$,#31,$,$,.ELEMENT.,$);
#33=IFCDIRECTION((1.,0.,0.)); #33=IFCRELAGGREGATES('28wPobaAHEn9E70QY2qB8Z',#5,$,$,#25,(#32));
#34=IFCDIRECTION((0.,0.,1.)); #34=IFCBUILDINGELEMENTPROXY('25O9yPEmn6yRVqMHMWnLzO',#5,'profile',$,$,#40,#52,$,$);
#35=IFCCARTESIANPOINT((0.,0.,0.)); #35=IFCRELCONTAINEDINSPATIALSTRUCTURE('20MhO8tBn67RjJNbxaBp0O',#5,$,$,(#34),#32);
#36=IFCAXIS2PLACEMENT3D(#35,#34,#33); #36=IFCDIRECTION((1.,0.,0.));
#37=IFCLOCALPLACEMENT(#30,#36); #37=IFCDIRECTION((0.,0.,1.));
#38=IFCBUILDINGSTOREY('3wk8ZJ1Zf1LecGq5wib$UM',#5,$,$,$,#37,$,$,.ELEMENT.,$); #38=IFCCARTESIANPOINT((0.,0.,0.));
#39=IFCRELAGGREGATES('26SvotDGb7Fe8d$wvMyX3W',#5,$,$,#31,(#38)); #39=IFCAXIS2PLACEMENT3D(#38,#37,#36);
#40=IFCBUILDINGELEMENTPROXY('3Y4tF1eJnEBwlGlOJt151k',#5,'profile',$,$,#46,#58,$,$); #40=IFCLOCALPLACEMENT($,#39);
#41=IFCRELCONTAINEDINSPATIALSTRUCTURE('2IMXhEgbn6jP_MmewiOwkc',#5,$,$,(#40),#38); #41=IFCDIRECTION((1.,0.));
#42=IFCDIRECTION((1.,0.,0.)); #42=IFCCARTESIANPOINT((0.,0.));
#43=IFCDIRECTION((0.,0.,1.)); #43=IFCAXIS2PLACEMENT2D(#42,#41);
#44=IFCCARTESIANPOINT((0.,0.,0.)); #44=IFCDIRECTION((0.,0.,1.));
#45=IFCAXIS2PLACEMENT3D(#44,#43,#42); #45=IFCDIRECTION((1.,0.,0.));
#46=IFCLOCALPLACEMENT($,#45); #46=IFCDIRECTION((0.,0.,1.));
#47=IFCDIRECTION((1.,0.)); #47=IFCCARTESIANPOINT((0.,0.,0.));
#48=IFCCARTESIANPOINT((0.,0.)); #48=IFCAXIS2PLACEMENT3D(#47,#46,#45);
#49=IFCAXIS2PLACEMENT2D(#48,#47); #49=IFCISHAPEPROFILEDEF(.AREA.,$,#43,25.,50.,5.,5.,$);
#50=IFCDIRECTION((0.,0.,1.)); #50=IFCEXTRUDEDAREASOLID(#49,#48,#44,20.);
#51=IFCDIRECTION((1.,0.,0.)); #51=IFCSHAPEREPRESENTATION($,'Body','SweptSolid',(#50));
#52=IFCDIRECTION((0.,0.,1.)); #52=IFCPRODUCTDEFINITIONSHAPE($,$,(#51));
#53=IFCCARTESIANPOINT((0.,0.,0.)); #53=IFCBUILDINGELEMENTPROXY('2loPfmiir3EQ4GkWdTZtUT',#5,'profile',$,$,#59,#71,$,$);
#54=IFCAXIS2PLACEMENT3D(#53,#52,#51); #54=IFCRELCONTAINEDINSPATIALSTRUCTURE('00o_PIW_fCYBRtHNmvHPuC',#5,$,$,(#53),#32);
#55=IFCISHAPEPROFILEDEF(.AREA.,$,#49,25.,50.,5.,5.,$); #55=IFCDIRECTION((1.,0.,0.));
#56=IFCEXTRUDEDAREASOLID(#55,#54,#50,20.); #56=IFCDIRECTION((0.,0.,1.));
#57=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#56)); #57=IFCCARTESIANPOINT((100.,0.,0.));
#58=IFCPRODUCTDEFINITIONSHAPE($,$,(#57)); #58=IFCAXIS2PLACEMENT3D(#57,#56,#55);
#59=IFCBUILDINGELEMENTPROXY('1MUiX0$sbEwxx8E0uTLtPY',#5,'profile',$,$,#65,#77,$,$); #59=IFCLOCALPLACEMENT($,#58);
#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('3QRrMzj0bCK8iRu0Ec3$Ft',#5,$,$,(#59),#38); #60=IFCDIRECTION((1.,0.));
#61=IFCDIRECTION((1.,0.,0.)); #61=IFCCARTESIANPOINT((0.,0.));
#62=IFCDIRECTION((0.,0.,1.)); #62=IFCAXIS2PLACEMENT2D(#61,#60);
#63=IFCCARTESIANPOINT((100.,0.,0.)); #63=IFCDIRECTION((0.,0.,1.));
#64=IFCAXIS2PLACEMENT3D(#63,#62,#61); #64=IFCDIRECTION((1.,0.,0.));
#65=IFCLOCALPLACEMENT($,#64); #65=IFCDIRECTION((0.,0.,1.));
#66=IFCDIRECTION((1.,0.)); #66=IFCCARTESIANPOINT((0.,0.,0.));
#67=IFCCARTESIANPOINT((0.,0.)); #67=IFCAXIS2PLACEMENT3D(#66,#65,#64);
#68=IFCAXIS2PLACEMENT2D(#67,#66); #68=IFCISHAPEPROFILEDEF(.AREA.,$,#62,25.,50.,5.,5.,2.);
#69=IFCDIRECTION((0.,0.,1.)); #69=IFCEXTRUDEDAREASOLID(#68,#67,#63,20.);
#70=IFCDIRECTION((1.,0.,0.)); #70=IFCSHAPEREPRESENTATION($,'Body','SweptSolid',(#69));
#71=IFCDIRECTION((0.,0.,1.)); #71=IFCPRODUCTDEFINITIONSHAPE($,$,(#70));
#72=IFCCARTESIANPOINT((0.,0.,0.)); #72=IFCBUILDINGELEMENTPROXY('2UNbwWn6HDU9y9qy2HK0BH',#5,'profile',$,$,#78,#90,$,$);
#73=IFCAXIS2PLACEMENT3D(#72,#71,#70); #73=IFCRELCONTAINEDINSPATIALSTRUCTURE('0epcVcwyXCFelG9nIXNUA0',#5,$,$,(#72),#32);
#74=IFCISHAPEPROFILEDEF(.AREA.,$,#68,25.,50.,5.,5.,2.); #74=IFCDIRECTION((1.,0.,0.));
#75=IFCEXTRUDEDAREASOLID(#74,#73,#69,20.); #75=IFCDIRECTION((0.,0.,1.));
#76=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#75)); #76=IFCCARTESIANPOINT((200.,0.,0.));
#77=IFCPRODUCTDEFINITIONSHAPE($,$,(#76)); #77=IFCAXIS2PLACEMENT3D(#76,#75,#74);
#78=IFCLOCALPLACEMENT($,#77);
#79=IFCDIRECTION((1.,0.));
#80=IFCCARTESIANPOINT((0.,0.));
#81=IFCAXIS2PLACEMENT2D(#80,#79);
#82=IFCDIRECTION((0.,0.,1.));
#83=IFCDIRECTION((1.,0.,0.));
#84=IFCDIRECTION((0.,0.,1.));
#85=IFCCARTESIANPOINT((0.,0.,0.));
#86=IFCAXIS2PLACEMENT3D(#85,#84,#83);
#87=IFCASYMMETRICISHAPEPROFILEDEF(.AREA.,$,#81,25.,50.,5.,5.,2.,20.,10.,5.,$);
#88=IFCEXTRUDEDAREASOLID(#87,#86,#82,20.);
#89=IFCSHAPEREPRESENTATION($,'Body','SweptSolid',(#88));
#90=IFCPRODUCTDEFINITIONSHAPE($,$,(#89));
ENDSEC; ENDSEC;
END-ISO-10303-21; END-ISO-10303-21;