From b7d4eb62d5332ddbf7de82bfe82725c46307fe5b Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 21 May 2015 12:05:23 +0000 Subject: [PATCH] Add IfcFaceSurface example --- src/examples/faces.cpp | 31 ++++++++++++++++++ test/input/faces.ifc | 74 +++++++++++++++++++++++++++++++----------- 2 files changed, 86 insertions(+), 19 deletions(-) diff --git a/src/examples/faces.cpp b/src/examples/faces.cpp index 5c765b860c..985b23dd8e 100644 --- a/src/examples/faces.cpp +++ b/src/examples/faces.cpp @@ -169,6 +169,37 @@ int main(int argc, char** argv) { IfcSchema::IfcFace* face = new IfcSchema::IfcFace(bounds); create_testcase(file, face, "imprecise polyloop"); } + { + IfcSchema::IfcCartesianPoint* point1 = file.addTriplet(+400, 0., 0.); + IfcSchema::IfcCartesianPoint* point2 = file.addTriplet(-400, 0., 0.); + IfcSchema::IfcVertexPoint* vertex1 = new IfcSchema::IfcVertexPoint(point1); + IfcSchema::IfcVertexPoint* vertex2 = new IfcSchema::IfcVertexPoint(point2); + IfcSchema::IfcCircle* circle = new IfcSchema::IfcCircle(file.addPlacement2d(), 400.); + IfcSchema::IfcEdgeCurve* edge1 = new IfcSchema::IfcEdgeCurve(vertex1, vertex2, circle, true); + IfcSchema::IfcEdgeCurve* edge2 = new IfcSchema::IfcEdgeCurve(vertex2, vertex1, circle, true); + IfcSchema::IfcOrientedEdge* oriented_edge1 = new IfcSchema::IfcOrientedEdge(edge1, true); + IfcSchema::IfcOrientedEdge* oriented_edge2 = new IfcSchema::IfcOrientedEdge(edge2, true); + IfcSchema::IfcOrientedEdge::list::ptr edges(new IfcSchema::IfcOrientedEdge::list); + edges->push(oriented_edge1); + edges->push(oriented_edge2); + IfcSchema::IfcEdgeLoop* loop = new IfcSchema::IfcEdgeLoop(edges); + IfcSchema::IfcFaceOuterBound* bound = new IfcSchema::IfcFaceOuterBound(loop, true); + + IfcSchema::IfcFaceBound::list::ptr bounds (new IfcSchema::IfcFaceBound::list); + bounds->push(bound); + + IfcSchema::IfcCartesianPoint::list::ptr trim1(new IfcSchema::IfcCartesianPoint::list); + IfcSchema::IfcCartesianPoint::list::ptr trim2(new IfcSchema::IfcCartesianPoint::list); + trim1->push(point1); + trim2->push(point2); + IfcSchema::IfcTrimmedCurve* trimmed_curve = new IfcSchema::IfcTrimmedCurve(circle, trim1->generalize(), trim2->generalize(), true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN); + IfcSchema::IfcArbitraryOpenProfileDef* profile = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, boost::none, trimmed_curve); + IfcSchema::IfcAxis1Placement* place = new IfcSchema::IfcAxis1Placement(file.addTriplet(0., 0., 0.), file.addTriplet(1., 0., 0.)); + IfcSchema::IfcSurfaceOfRevolution* surface = new IfcSchema::IfcSurfaceOfRevolution(profile, file.addPlacement3d(), place); + + IfcSchema::IfcFace* face = new IfcSchema::IfcFaceSurface(bounds, surface, true); + create_testcase(file, face, "face surface"); + } const std::string filename = "faces.ifc"; file.header().file_name().name(filename); std::ofstream f(filename.c_str()); diff --git a/test/input/faces.ifc b/test/input/faces.ifc index edbe3a65ff..f38f86c9c9 100644 --- a/test/input/faces.ifc +++ b/test/input/faces.ifc @@ -1,7 +1,7 @@ ISO-10303-21; HEADER; FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); -FILE_NAME('faces.ifc','2015-05-20T10:50:06',(),(),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev',''); +FILE_NAME('faces.ifc','2015-05-21T13:39:45',(),(),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev',''); FILE_SCHEMA(('IFC2X3')); ENDSEC; DATA; @@ -13,37 +13,37 @@ DATA; #6=IFCORGANIZATION($,'IfcOpenShell',$,$,$); #7=IFCPERSONANDORGANIZATION(#5,#6,$); #8=IFCAPPLICATION(#6,'0.5.0-dev','IfcOpenShell','IfcOpenShell'); -#9=IFCOWNERHISTORY(#7,#8,$,.ADDED.,1432111806,#7,#8,1432111806); +#9=IFCOWNERHISTORY(#7,#8,$,.ADDED.,1432208385,#7,#8,1432208385); #10=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); #11=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #12=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); #14=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293),#12); #15=IFCCONVERSIONBASEDUNIT(#10,.PLANEANGLEUNIT.,'Degrees',#14); #16=IFCUNITASSIGNMENT((#11,#15)); -#17=IFCPROJECT('1HQX190X58kvRECR6voyfc',#9,$,$,$,$,$,(#51),#16); +#17=IFCPROJECT('1D905l4Br0_uc_wqTsE$SQ',#9,$,$,$,$,$,(#51),#16); #18=IFCDIRECTION((1.,0.,0.)); #19=IFCDIRECTION((0.,0.,1.)); #20=IFCCARTESIANPOINT((0.,0.,0.)); #21=IFCAXIS2PLACEMENT3D(#20,#19,#18); #22=IFCLOCALPLACEMENT($,#21); -#23=IFCSITE('0eyqmWf4z3dANo5Kaef3tu',#9,$,$,$,#22,$,$,.ELEMENT.,$,$,$,$,$); -#24=IFCRELAGGREGATES('18QNJy24z3FB9H1omtBuo_',#9,$,$,#17,(#23)); +#23=IFCSITE('1TYtkB4HH4UewrqJZf8oux',#9,$,$,$,#22,$,$,.ELEMENT.,$,$,$,$,$); +#24=IFCRELAGGREGATES('3St43w7tz9nBWtOlIiktKb',#9,$,$,#17,(#23)); #25=IFCDIRECTION((1.,0.,0.)); #26=IFCDIRECTION((0.,0.,1.)); #27=IFCCARTESIANPOINT((0.,0.,0.)); #28=IFCAXIS2PLACEMENT3D(#27,#26,#25); #29=IFCLOCALPLACEMENT(#22,#28); -#30=IFCBUILDING('3jWWZTz7n64v5lXI7dcOG2',#9,$,$,$,#29,$,$,.ELEMENT.,$,$,$); -#31=IFCRELAGGREGATES('3I_AMlVAjD7AJyIfSH193g',#9,$,$,#23,(#30)); +#30=IFCBUILDING('0qDgO8$bH1SBLKLXh5dNb$',#9,$,$,$,#29,$,$,.ELEMENT.,$,$,$); +#31=IFCRELAGGREGATES('0UWVtbmTH3TfqORMdAOh47',#9,$,$,#23,(#30)); #32=IFCDIRECTION((1.,0.,0.)); #33=IFCDIRECTION((0.,0.,1.)); #34=IFCCARTESIANPOINT((0.,0.,0.)); #35=IFCAXIS2PLACEMENT3D(#34,#33,#32); #36=IFCLOCALPLACEMENT(#29,#35); -#37=IFCBUILDINGSTOREY('1_ImA5b7HELAI8raWFYphY',#9,$,$,$,#36,$,$,.ELEMENT.,$); -#38=IFCRELAGGREGATES('29hL9yBXj6lvk6BXb$wnMF',#9,$,$,#30,(#37)); -#39=IFCBUILDINGELEMENTPROXY('344_rTMFT6RuKWcRH19W6g',#9,'polyloop',$,$,#45,#58,$,$); -#40=IFCRELCONTAINEDINSPATIALSTRUCTURE('2RQ$SfpKfBYuSRATxRwC0V',#9,$,$,(#39),#37); +#37=IFCBUILDINGSTOREY('1VxMQnAtTAXQR2UcTfUIHM',#9,$,$,$,#36,$,$,.ELEMENT.,$); +#38=IFCRELAGGREGATES('1PUOIH_6HB5Qjx5NPLWd9Z',#9,$,$,#30,(#37)); +#39=IFCBUILDINGELEMENTPROXY('0FDjw35CL6LwLNpj9yQtbC',#9,'polyloop',$,$,#45,#58,$,$); +#40=IFCRELCONTAINEDINSPATIALSTRUCTURE('0HUZ_YDbz11wRnci6q82vO',#9,$,$,(#39),#37); #41=IFCDIRECTION((1.,0.,0.)); #42=IFCDIRECTION((0.,0.,1.)); #43=IFCCARTESIANPOINT((0.,0.,0.)); @@ -67,8 +67,8 @@ DATA; #61=IFCDIRECTION((1.,0.)); #62=IFCCARTESIANPOINT((0.,0.)); #63=IFCAXIS2PLACEMENT2D(#62,#61); -#64=IFCBUILDINGELEMENTPROXY('35crzRJnnE9Akf8211DDa3',#9,'circle',$,$,#70,#84,$,$); -#65=IFCRELCONTAINEDINSPATIALSTRUCTURE('3gBsuCqwb3me5EkC8o3Mpn',#9,$,$,(#64),#37); +#64=IFCBUILDINGELEMENTPROXY('1zqQpq4u5AquAWdex2ZCij',#9,'circle',$,$,#70,#84,$,$); +#65=IFCRELCONTAINEDINSPATIALSTRUCTURE('1bern8Pdr5GuS1XXorDBKi',#9,$,$,(#64),#37); #66=IFCDIRECTION((1.,0.,0.)); #67=IFCDIRECTION((0.,0.,1.)); #68=IFCCARTESIANPOINT((1000.,0.,0.)); @@ -100,8 +100,8 @@ DATA; #94=IFCCARTESIANPOINT((300.,300.,0.)); #95=IFCCARTESIANPOINT((300.,-300.,0.)); #96=IFCCARTESIANPOINT((100.,-300.,0.)); -#97=IFCBUILDINGELEMENTPROXY('3w09rKcILCYAnKVxlLSjOP',#9,'polyloop with holes',$,$,#103,#114,$,$); -#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('2QRyhTXwH8WPAUUlchhb7x',#9,$,$,(#97),#37); +#97=IFCBUILDINGELEMENTPROXY('2Bbrp8MXPEO82FjtiQdS0b',#9,'polyloop with holes',$,$,#103,#114,$,$); +#98=IFCRELCONTAINEDINSPATIALSTRUCTURE('2g5RymeJj3vBfzT3vUH2Hc',#9,$,$,(#97),#37); #99=IFCDIRECTION((1.,0.,0.)); #100=IFCDIRECTION((0.,0.,1.)); #101=IFCCARTESIANPOINT((2000.,0.,0.)); @@ -126,8 +126,8 @@ DATA; #120=IFCCARTESIANPOINT((400.,400.,0.)); #121=IFCCARTESIANPOINT((400.,-400.,0.)); #122=IFCCARTESIANPOINT((100.,-400.,0.)); -#123=IFCBUILDINGELEMENTPROXY('0cxEkTWf97T8imCiw2hTqD',#9,'multiple outer boundaries (invalid)',$,$,#129,#138,$,$); -#124=IFCRELCONTAINEDINSPATIALSTRUCTURE('0$orfSvG18vfnhm9zOB5l5',#9,$,$,(#123),#37); +#123=IFCBUILDINGELEMENTPROXY('2bQQEiQcn1ovuDTsdKTnBY',#9,'multiple outer boundaries (invalid)',$,$,#129,#138,$,$); +#124=IFCRELCONTAINEDINSPATIALSTRUCTURE('2GJUdWCqP1UQCVLD27KrOc',#9,$,$,(#123),#37); #125=IFCDIRECTION((1.,0.,0.)); #126=IFCDIRECTION((0.,0.,1.)); #127=IFCCARTESIANPOINT((3000.,0.,0.)); @@ -146,8 +146,8 @@ DATA; #140=IFCCARTESIANPOINT((400.,-400.,0.)); #141=IFCCARTESIANPOINT((400.,400.,0.)); #142=IFCCARTESIANPOINT((-400.,400.,0.)); -#143=IFCBUILDINGELEMENTPROXY('1u73lgHiH3IesmFCYzbd$l',#9,'imprecise polyloop',$,$,#149,#156,$,$); -#144=IFCRELCONTAINEDINSPATIALSTRUCTURE('0AV1k6Kl19x9ot0jkkQV8h',#9,$,$,(#143),#37); +#143=IFCBUILDINGELEMENTPROXY('1443FjPtnE8Plvz55A4Mvl',#9,'imprecise polyloop',$,$,#149,#156,$,$); +#144=IFCRELCONTAINEDINSPATIALSTRUCTURE('12oaoN7EL4LuIW9qLWz5lS',#9,$,$,(#143),#37); #145=IFCDIRECTION((1.,0.,0.)); #146=IFCDIRECTION((0.,0.,1.)); #147=IFCCARTESIANPOINT((4000.,0.,0.)); @@ -160,5 +160,41 @@ DATA; #154=IFCFACEBASEDSURFACEMODEL((#153)); #155=IFCSHAPEREPRESENTATION(#51,'Body','SurfaceModel',(#154)); #156=IFCPRODUCTDEFINITIONSHAPE($,$,(#155)); +#157=IFCCARTESIANPOINT((400.,0.,0.)); +#158=IFCCARTESIANPOINT((-400.,0.,0.)); +#159=IFCDIRECTION((1.,0.)); +#160=IFCCARTESIANPOINT((0.,0.)); +#161=IFCAXIS2PLACEMENT2D(#160,#159); +#162=IFCDIRECTION((1.,0.,0.)); +#163=IFCCARTESIANPOINT((0.,0.,0.)); +#164=IFCDIRECTION((1.,0.,0.)); +#165=IFCDIRECTION((0.,0.,1.)); +#166=IFCCARTESIANPOINT((0.,0.,0.)); +#167=IFCAXIS2PLACEMENT3D(#166,#165,#164); +#168=IFCBUILDINGELEMENTPROXY('1lw_Itcy90MuQm4IvMmHh7',#9,'face surface',$,$,#174,#192,$,$); +#169=IFCRELCONTAINEDINSPATIALSTRUCTURE('1h83KReB12S8GfCIblJIVI',#9,$,$,(#168),#37); +#170=IFCDIRECTION((1.,0.,0.)); +#171=IFCDIRECTION((0.,0.,1.)); +#172=IFCCARTESIANPOINT((5000.,0.,0.)); +#173=IFCAXIS2PLACEMENT3D(#172,#171,#170); +#174=IFCLOCALPLACEMENT($,#173); +#175=IFCVERTEXPOINT(#157); +#176=IFCVERTEXPOINT(#158); +#177=IFCCIRCLE(#161,400.); +#178=IFCEDGECURVE(#175,#176,#177,.T.); +#179=IFCORIENTEDEDGE(*,*,#178,.T.); +#180=IFCEDGECURVE(#176,#175,#177,.T.); +#181=IFCORIENTEDEDGE(*,*,#180,.T.); +#182=IFCEDGELOOP((#179,#181)); +#183=IFCFACEOUTERBOUND(#182,.T.); +#184=IFCTRIMMEDCURVE(#177,(#157),(#158),.T.,.CARTESIAN.); +#185=IFCARBITRARYOPENPROFILEDEF(.CURVE.,$,#184); +#186=IFCAXIS1PLACEMENT(#163,#162); +#187=IFCSURFACEOFREVOLUTION(#185,#167,#186); +#188=IFCFACESURFACE((#183),#187,.T.); +#189=IFCOPENSHELL((#188)); +#190=IFCFACEBASEDSURFACEMODEL((#189)); +#191=IFCSHAPEREPRESENTATION(#51,'Body','SurfaceModel',(#190)); +#192=IFCPRODUCTDEFINITIONSHAPE($,$,(#191)); ENDSEC; END-ISO-10303-21;