xBIM IFC 墙壁案例
目录
一、使用代码生成IFC 模型
其实使用代码的形式去生成模型一堵墙还是要做很多的工作。
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Xbim.Common; using Xbim.Common.Step21; using Xbim.Ifc; using Xbim.IO; using Xbim.Ifc4.ActorResource; using Xbim.Ifc4.DateTimeResource; using Xbim.Ifc4.ExternalReferenceResource; using Xbim.Ifc4.PresentationOrganizationResource; using Xbim.Ifc4.GeometricConstraintResource; using Xbim.Ifc4.GeometricModelResource; using Xbim.Ifc4.GeometryResource; using Xbim.Ifc4.Interfaces; using Xbim.Ifc4.Kernel; using Xbim.Ifc4.MaterialResource; using Xbim.Ifc4.MeasureResource; using Xbim.Ifc4.ProductExtension; using Xbim.Ifc4.ProfileResource; using Xbim.Ifc4.PropertyResource; using Xbim.Ifc4.QuantityResource; using Xbim.Ifc4.RepresentationResource; using Xbim.Ifc4.SharedBldgElements;
namespace HelloWall { class Program { /// <summary> /// 这个案例创建兼容IFC模型的最小步骤,创建一个标准墙 /// </summary> static int Main() { //first create and initialise a model called Hello Wall Console.WriteLine("Initialising the IFC Project...."); using (var model = CreateandInitModel("HelloWall")) { if (model != null) { IfcBuilding building = CreateBuilding(model, "Default Building"); IfcWallStandardCase wall = CreateWall(model, 4000, 300, 2400); if (wall != null) AddPropertiesToWall(model, wall); using (var txn = model.BeginTransaction("Add Wall")) { building.AddElement(wall); txn.Commit(); } if (wall != null) { try { Console.WriteLine("Standard Wall successfully created...."); //保存到文件 model.SaveAs("HelloWallIfc4.ifc", IfcStorageType.Ifc); Console.WriteLine("HelloWallIfc4.ifc has been successfully written"); } catch (Exception e) { Console.WriteLine("Failed to save HelloWall.ifc"); Console.WriteLine(e.Message); } } } else { Console.WriteLine("Failed to initialise the model"); } } Console.WriteLine("Press any key to exit to view the IFC file...."); Console.ReadKey(); LaunchNotepad("HelloWallIfc4.ifc"); return 0; } private static void LaunchNotepad(string fileName) { Process p; try { p = new Process {StartInfo = {FileName = fileName, CreateNoWindow = false}}; p.Start(); } catch (Exception ex) { Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace); } } private static IfcBuilding CreateBuilding(IfcStore model, string name) { //启动事务 using (var txn = model.BeginTransaction("Create Building")) { var building = model.Instances.New<IfcBuilding>(); building.Name = name; building.CompositionType = IfcElementCompositionEnum.ELEMENT; var localPlacement = model.Instances.New<IfcLocalPlacement>(); building.ObjectPlacement = localPlacement; var placement = model.Instances.New<IfcAxis2Placement3D>(); localPlacement.RelativePlacement = placement; placement.Location = model.Instances.New<IfcCartesianPoint>(p=>p.SetXYZ(0,0,0)); //获取项目 var project = model.Instances.OfType<IfcProject>().FirstOrDefault(); project?.AddBuilding(building); txn.Commit(); return building; } } /// <summary> /// 设置模型的基本参数、单元、所有权等 /// </summary> /// <param name="projectName">项目名称</param> /// <returns></returns> private static IfcStore CreateandInitModel(string projectName) { //首先我们需要为模型创建凭证、这个在之前的文章都有解释 var credentials = new XbimEditorCredentials { ApplicationDevelopersName = "xBimTeam", ApplicationFullName = "Hello Wall Application", ApplicationIdentifier = "HelloWall.exe", ApplicationVersion = "1.0", EditorsFamilyName = "Team", EditorsGivenName = "xBIM", EditorsOrganisationName = "xBimTeam" }; //那么先创建 IfcStore,IfcStore 是IFC4 格式存放在内存中而不是数据库 //如果模型大于50MB的Ifc或者需要强大的事务处理,数据库在性能方面通常会更好 var model = IfcStore.Create(credentials, IfcSchemaVersion.Ifc4,XbimStoreType.InMemoryModel); // 启动事务、将所有的模型更改为 ACID using (var txn = model.BeginTransaction("Initialise Model")) { //常见项目信息 var project = model.Instances.New<IfcProject>(); //设置单位 这里是英制 project.Initialize(ProjectUnits.SIUnitsUK); project.Name = projectName; //提交修改 txn.Commit(); } return model; } /// <summary> /// 创建墙 /// </summary> /// <param name="model"></param> /// <param name="length">矩形的长度 </param> /// <param name="width">矩形占地面积的宽度(墙的宽度)</param> /// <param name="height">墙高度</param> /// <returns></returns> static private IfcWallStandardCase CreateWall(IfcStore model, double length, double width, double height) { //启动事务 using (var txn = model.BeginTransaction("Create Wall")) { var wall = model.Instances.New<IfcWallStandardCase>(); wall.Name = "A Standard rectangular wall"; // 墙的矩形剖面 var rectProf = model.Instances.New<IfcRectangleProfileDef>(); rectProf.ProfileType = IfcProfileTypeEnum.AREA; rectProf.XDim = width; rectProf.YDim = length; var insertPoint = model.Instances.New<IfcCartesianPoint>(); insertPoint.SetXY(0, 400); //在任意位置插入 rectProf.Position = model.Instances.New<IfcAxis2Placement2D>(); rectProf.Position.Location = insertPoint; //模型区域实心 var body = model.Instances.New<IfcExtrudedAreaSolid>(); body.Depth = height; body.SweptArea = rectProf; body.ExtrudedDirection = model.Instances.New<IfcDirection>(); body.ExtrudedDirection.SetXYZ(0, 0, 1); //在模型中插入几何参数 var origin = model.Instances.New<IfcCartesianPoint>(); origin.SetXYZ(0, 0, 0); body.Position = model.Instances.New<IfcAxis2Placement3D>(); body.Position.Location = origin; //创建一个定义形状来保存几何 var shape = model.Instances.New<IfcShapeRepresentation>(); var modelContext = model.Instances.OfType<IfcGeometricRepresentationContext>().FirstOrDefault(); shape.ContextOfItems = modelContext; shape.RepresentationType = "SweptSolid"; shape.RepresentationIdentifier = "Body"; shape.Items.Add(body); //创建产品定义并将模型几何添加到墙上 var rep = model.Instances.New<IfcProductDefinitionShape>(); rep.Representations.Add(shape); wall.Representation = rep; //把墙放到模型中 var lp = model.Instances.New<IfcLocalPlacement>(); var ax3D = model.Instances.New<IfcAxis2Placement3D>(); ax3D.Location = origin; ax3D.RefDirection = model.Instances.New<IfcDirection>(); ax3D.RefDirection.SetXYZ(0, 1, 0); ax3D.Axis = model.Instances.New<IfcDirection>(); ax3D.Axis.SetXYZ(0, 0, 1); lp.RelativePlacement = ax3D; wall.ObjectPlacement = lp; //Where子句:IfcWallStandard依赖于提供一个IfcMaterialLayerSetUsage var ifcMaterialLayerSetUsage = model.Instances.New<IfcMaterialLayerSetUsage>(); var ifcMaterialLayerSet = model.Instances.New<IfcMaterialLayerSet>(); var ifcMaterialLayer = model.Instances.New<IfcMaterialLayer>(); ifcMaterialLayer.LayerThickness = 10; ifcMaterialLayerSet.MaterialLayers.Add(ifcMaterialLayer); ifcMaterialLayerSetUsage.ForLayerSet = ifcMaterialLayerSet; ifcMaterialLayerSetUsage.LayerSetDirection = IfcLayerSetDirectionEnum.AXIS2; ifcMaterialLayerSetUsage.DirectionSense = IfcDirectionSenseEnum.NEGATIVE; ifcMaterialLayerSetUsage.OffsetFromReferenceLine = 150; //添加材料到墙上 var material = model.Instances.New<IfcMaterial>(); material.Name = "some material"; var ifcRelAssociatesMaterial = model.Instances.New<IfcRelAssociatesMaterial>(); ifcRelAssociatesMaterial.RelatingMaterial = material; ifcRelAssociatesMaterial.RelatedObjects.Add(wall); ifcRelAssociatesMaterial.RelatingMaterial = ifcMaterialLayerSetUsage; //IfcPresentationLayerAssignment对于IfcWall或IfcWallStandardCase中的CAD演示是必需的 var ifcPresentationLayerAssignment = model.Instances.New<IfcPresentationLayerAssignment>(); ifcPresentationLayerAssignment.Name = "some ifcPresentationLayerAssignment"; ifcPresentationLayerAssignment.AssignedItems.Add(shape); // 如果IfcPolyline具有两个点,则对于IfcWall是必需的 var ifcPolyline = model.Instances.New<IfcPolyline>(); var startPoint = model.Instances.New<IfcCartesianPoint>(); startPoint.SetXY(0, 0); var endPoint = model.Instances.New<IfcCartesianPoint>(); endPoint.SetXY(4000, 0); ifcPolyline.Points.Add(startPoint); ifcPolyline.Points.Add(endPoint); var shape2D = model.Instances.New<IfcShapeRepresentation>(); shape2D.ContextOfItems = modelContext; shape2D.RepresentationIdentifier = "Axis"; shape2D.RepresentationType = "Curve2D"; shape2D.Items.Add(ifcPolyline); rep.Representations.Add(shape2D); txn.Commit(); return wall; } } /// <summary> /// 给墙添加属性 /// </summary> /// <param name="model">XbimModel</param> /// <param name="wall"></param> static private void AddPropertiesToWall(IfcStore model, IfcWallStandardCase wall) { using (var txn = model.BeginTransaction("Create Wall")) { CreateElementQuantity(model, wall); CreateSimpleProperty(model, wall); txn.Commit(); } } private static void CreateSimpleProperty(IfcStore model, IfcWallStandardCase wall) { var ifcPropertySingleValue = model.Instances.New<IfcPropertySingleValue>(psv => { psv.Name = "IfcPropertySingleValue:Time"; psv.Description = ""; psv.NominalValue = new IfcTimeMeasure(150.0); psv.Unit = model.Instances.New<IfcSIUnit>(siu => { siu.UnitType = IfcUnitEnum.TIMEUNIT; siu.Name = IfcSIUnitName.SECOND; }); }); var ifcPropertyEnumeratedValue = model.Instances.New<IfcPropertyEnumeratedValue>(pev => { pev.Name = "IfcPropertyEnumeratedValue:Music"; pev.EnumerationReference = model.Instances.New<IfcPropertyEnumeration>(pe => { pe.Name = "Notes"; pe.EnumerationValues.Add(new IfcLabel("Do")); pe.EnumerationValues.Add(new IfcLabel("Re")); pe.EnumerationValues.Add(new IfcLabel("Mi")); pe.EnumerationValues.Add(new IfcLabel("Fa")); pe.EnumerationValues.Add(new IfcLabel("So")); pe.EnumerationValues.Add(new IfcLabel("La")); pe.EnumerationValues.Add(new IfcLabel("Ti")); }); pev.EnumerationValues.Add(new IfcLabel("Do")); pev.EnumerationValues.Add(new IfcLabel("Re")); pev.EnumerationValues.Add(new IfcLabel("Mi")); }); var ifcPropertyBoundedValue = model.Instances.New<IfcPropertyBoundedValue>(pbv => { pbv.Name = "IfcPropertyBoundedValue:Mass"; pbv.Description = ""; pbv.UpperBoundValue = new IfcMassMeasure(5000.0); pbv.LowerBoundValue = new IfcMassMeasure(1000.0); pbv.Unit = model.Instances.New<IfcSIUnit>(siu => { siu.UnitType = IfcUnitEnum.MASSUNIT; siu.Name = IfcSIUnitName.GRAM; siu.Prefix = IfcSIPrefix.KILO; }); }); var definingValues = new List<IfcReal> { new IfcReal(100.0), new IfcReal(200.0), new IfcReal(400.0), new IfcReal(800.0), new IfcReal(1600.0), new IfcReal(3200.0), }; var definedValues = new List<IfcReal> { new IfcReal(20.0), new IfcReal(42.0), new IfcReal(46.0), new IfcReal(56.0), new IfcReal(60.0), new IfcReal(65.0), }; var ifcPropertyTableValue = model.Instances.New<IfcPropertyTableValue>(ptv => { ptv.Name = "IfcPropertyTableValue:Sound"; foreach (var item in definingValues) { ptv.DefiningValues.Add(item); } foreach (var item in definedValues) { ptv.DefinedValues.Add(item); } ptv.DefinedUnit = model.Instances.New<IfcContextDependentUnit>(cd => { cd.Dimensions = model.Instances.New<IfcDimensionalExponents>(de => { de.LengthExponent = 0; de.MassExponent = 0; de.TimeExponent = 0; de.ElectricCurrentExponent = 0; de.ThermodynamicTemperatureExponent = 0; de.AmountOfSubstanceExponent = 0; de.LuminousIntensityExponent = 0; }); cd.UnitType = IfcUnitEnum.FREQUENCYUNIT; cd.Name = "dB"; }); }); var listValues = new List<IfcLabel> { new IfcLabel("Red"), new IfcLabel("Green"), new IfcLabel("Blue"), new IfcLabel("Pink"), new IfcLabel("White"), new IfcLabel("Black"), }; var ifcPropertyListValue = model.Instances.New<IfcPropertyListValue>(plv => { plv.Name = "IfcPropertyListValue:Colours"; foreach (var item in listValues) { plv.ListValues.Add(item); } }); var ifcMaterial = model.Instances.New<IfcMaterial>(m => { m.Name = "Brick"; }); var ifcPrValueMaterial = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:Material"; prv.PropertyReference = ifcMaterial; }); var ifcMaterialList = model.Instances.New<IfcMaterialList>(ml => { ml.Materials.Add(ifcMaterial); ml.Materials.Add(model.Instances.New<IfcMaterial>(m =>{m.Name = "Cavity";})); ml.Materials.Add(model.Instances.New<IfcMaterial>(m => { m.Name = "Block"; })); }); var ifcMaterialLayer = model.Instances.New<IfcMaterialLayer>(ml => { ml.Material = ifcMaterial; ml.LayerThickness = 100.0; }); var ifcPrValueMatLayer = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:MaterialLayer"; prv.PropertyReference = ifcMaterialLayer; }); var ifcDocumentReference = model.Instances.New<IfcDocumentReference>(dr => { dr.Name = "Document"; dr.Location = "c://Documents//TheDoc.Txt"; }); var ifcPrValueRef = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:Document"; prv.PropertyReference = ifcDocumentReference; }); var ifcTimeSeries = model.Instances.New<IfcRegularTimeSeries>(ts => { ts.Name = "Regular Time Series"; ts.Description = "Time series of events"; ts.StartTime = new IfcDateTime("2015-02-14T12:01:01"); ts.EndTime = new IfcDateTime("2015-05-15T12:01:01"); ts.TimeSeriesDataType = IfcTimeSeriesDataTypeEnum.CONTINUOUS; ts.DataOrigin = IfcDataOriginEnum.MEASURED; ts.TimeStep = 604800; //7 days in secs }); var ifcPrValueTimeSeries = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:TimeSeries"; prv.PropertyReference = ifcTimeSeries; }); var ifcAddress = model.Instances.New<IfcPostalAddress>(a => { a.InternalLocation = "Room 101"; a.AddressLines.AddRange(new[] { new IfcLabel("12 New road"), new IfcLabel("DoxField" ) }); a.Town = "Sunderland"; a.PostalCode = "DL01 6SX"; }); var ifcPrValueAddress = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:Address"; prv.PropertyReference = ifcAddress; }); var ifcTelecomAddress = model.Instances.New<IfcTelecomAddress>(a => { a.TelephoneNumbers.Add(new IfcLabel("01325 6589965")); a.ElectronicMailAddresses.Add(new IfcLabel("bob@bobsworks.com")); }); var ifcPrValueTelecom = model.Instances.New<IfcPropertyReferenceValue>(prv => { prv.Name = "IfcPropertyReferenceValue:Telecom"; prv.PropertyReference = ifcTelecomAddress; }); //设置模型元素数量 var ifcPropertySet = model.Instances.New<IfcPropertySet>(ps => { ps.Name = "Test:IfcPropertySet"; ps.Description = "Property Set"; ps.HasProperties.Add(ifcPropertySingleValue); ps.HasProperties.Add(ifcPropertyEnumeratedValue); ps.HasProperties.Add(ifcPropertyBoundedValue); ps.HasProperties.Add(ifcPropertyTableValue); ps.HasProperties.Add(ifcPropertyListValue); ps.HasProperties.Add(ifcPrValueMaterial); ps.HasProperties.Add(ifcPrValueMatLayer); ps.HasProperties.Add(ifcPrValueRef); ps.HasProperties.Add(ifcPrValueTimeSeries); ps.HasProperties.Add(ifcPrValueAddress); ps.HasProperties.Add(ifcPrValueTelecom); }); //需建立关系 model.Instances.New<IfcRelDefinesByProperties>(rdbp => { rdbp.Name = "Property Association"; rdbp.Description = "IfcPropertySet associated to wall"; rdbp.RelatedObjects.Add(wall); rdbp.RelatingPropertyDefinition = ifcPropertySet; }); } private static void CreateElementQuantity(IfcStore model, IfcWallStandardCase wall) { //创建模型元素数量 //首先我们需模型简单物理量,首先将使用模型量长度 var ifcQuantityArea = model.Instances.New<IfcQuantityLength>(qa => { qa.Name = "IfcQuantityArea:Area"; qa.Description = ""; qa.Unit = model.Instances.New<IfcSIUnit>(siu => { siu.UnitType = IfcUnitEnum.LENGTHUNIT; siu.Prefix = IfcSIPrefix.MILLI; siu.Name = IfcSIUnitName.METRE; }); qa.LengthValue = 100.0; }); //上下文相关单元的数量计数 var ifcContextDependentUnit = model.Instances.New<IfcContextDependentUnit>(cd => { cd.Dimensions = model.Instances.New<IfcDimensionalExponents>(de => { de.LengthExponent = 1; de.MassExponent = 0; de.TimeExponent = 0; de.ElectricCurrentExponent = 0; de.ThermodynamicTemperatureExponent = 0; de.AmountOfSubstanceExponent = 0; de.LuminousIntensityExponent = 0; }); cd.UnitType = IfcUnitEnum.LENGTHUNIT; cd.Name = "Elephants"; }); var ifcQuantityCount = model.Instances.New<IfcQuantityCount>(qc => { qc.Name = "IfcQuantityCount:Elephant"; qc.CountValue = 12; qc.Unit = ifcContextDependentUnit; }); //使用转换单位 var ifcConversionBasedUnit = model.Instances.New<IfcConversionBasedUnit>(cbu => { cbu.ConversionFactor = model.Instances.New<IfcMeasureWithUnit>(mu => { mu.ValueComponent = new IfcRatioMeasure(25.4); mu.UnitComponent = model.Instances.New<IfcSIUnit>(siu => { siu.UnitType = IfcUnitEnum.LENGTHUNIT; siu.Prefix = IfcSIPrefix.MILLI; siu.Name = IfcSIUnitName.METRE; }); }); cbu.Dimensions = model.Instances.New<IfcDimensionalExponents>(de => { de.LengthExponent = 1; de.MassExponent = 0; de.TimeExponent = 0; de.ElectricCurrentExponent = 0; de.ThermodynamicTemperatureExponent = 0; de.AmountOfSubstanceExponent = 0; de.LuminousIntensityExponent = 0; }); cbu.UnitType = IfcUnitEnum.LENGTHUNIT; cbu.Name = "Inch"; }); var ifcQuantityLength = model.Instances.New<IfcQuantityLength>(qa => { qa.Name = "IfcQuantityLength:Length"; qa.Description = ""; qa.Unit = ifcConversionBasedUnit; qa.LengthValue = 24.0; }); //lets create the IfcElementQuantity var ifcElementQuantity = model.Instances.New<IfcElementQuantity>(eq => { eq.Name = "Test:IfcElementQuantity"; eq.Description = "Measurement quantity"; eq.Quantities.Add(ifcQuantityArea); eq.Quantities.Add(ifcQuantityCount); eq.Quantities.Add(ifcQuantityLength); }); //下步 建议关系 model.Instances.New<IfcRelDefinesByProperties>(rdbp => { rdbp.Name = "Area Association"; rdbp.Description = "IfcElementQuantity associated to wall"; rdbp.RelatedObjects.Add(wall); rdbp.RelatingPropertyDefinition = ifcElementQuantity; }); } } }
二、生成后的IFC文件
生成的IFC文件可以在您选择的查看器中打开:
ISO-10303-21; HEADER; FILE_DESCRIPTION ((''), '2;1'); FILE_NAME ('', '2016-10-31T10:18:08', (''), (''), 'Xbim File Processor version 4.0.0.0', 'Xbim version 4.0.0.0', ''); FILE_SCHEMA (('IFC4')); ENDSEC; DATA; #1=IFCPROJECT('2MSHGQD897wuyjYHKVxtyf',#2,'HelloWall',$,$,$,$,(#20,#23),#8); #2=IFCOWNERHISTORY(#5,#6,$,.ADDED.,$,$,$,0); #3=IFCPERSON($,'Team','xBIM',$,$,$,$,$); #4=IFCORGANIZATION($,'xBimTeam',$,$,$); #5=IFCPERSONANDORGANIZATION(#3,#4,$); #7=IFCORGANIZATION($,'xBimTeam',$,$,$); #6=IFCAPPLICATION(#7,'1.0','Hello Wall Application','HelloWall.exe'); #8=IFCUNITASSIGNMENT((#9,#10,#11,#12,#13,#14,#15,#16,#17)); #9=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #10=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); #11=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); #12=IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); #13=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); #14=IFCSIUNIT(*,.MASSUNIT.,$,.GRAM.); #15=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); #16=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.); #17=IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.); #18=IFCCARTESIANPOINT((0.,0.,0.)); #19=IFCAXIS2PLACEMENT3D(#18,$,$); #20=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Model','Model',3,1.E-05,#19,$); #21=IFCCARTESIANPOINT((0.,0.)); #22=IFCAXIS2PLACEMENT2D(#21,$); #23=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Plan View','Plan',2,1.E-05,#22,$); #24=IFCBUILDING('0jQ$yvAIv6URCwLuvWnAo0',#2,'Default Building',$,$,#25,$,$,.ELEMENT.,$,$,$); #25=IFCLOCALPLACEMENT($,#26); #26=IFCAXIS2PLACEMENT3D(#27,$,$); #27=IFCCARTESIANPOINT((0.,0.,0.)); #28=IFCRELAGGREGATES('3Qs6TKkPjASQ1ctGzUSQ7F',#2,$,$,#1,(#24)); #29=IFCWALLSTANDARDCASE('3NBPkknun6EuV9fpeE6rFh',#2,'A Standard rectangular wall',$,$,#39,#38,$,$); #30=IFCRECTANGLEPROFILEDEF(.AREA.,$,#32,300.,4000.); #31=IFCCARTESIANPOINT((0.,400.)); #32=IFCAXIS2PLACEMENT2D(#31,$); #33=IFCEXTRUDEDAREASOLID(#30,#36,#34,2400.); #34=IFCDIRECTION((0.,0.,1.)); #35=IFCCARTESIANPOINT((0.,0.,0.)); #36=IFCAXIS2PLACEMENT3D(#35,$,$); #37=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#33)); #38=IFCPRODUCTDEFINITIONSHAPE($,$,(#37,#52)); #39=IFCLOCALPLACEMENT($,#40); #40=IFCAXIS2PLACEMENT3D(#35,#42,#41); #41=IFCDIRECTION((0.,1.,0.)); #42=IFCDIRECTION((0.,0.,1.)); #43=IFCMATERIALLAYERSETUSAGE(#44,.AXIS2.,.NEGATIVE.,150.,$); #44=IFCMATERIALLAYERSET((#45),$,$); #45=IFCMATERIALLAYER($,10.,$,$,$,$,$); #46=IFCMATERIAL('some material',$,$); #47=IFCRELASSOCIATESMATERIAL('0is_vsqtn9ouErH3XVg3O8',#2,$,$,(#29),#43); #48=IFCPRESENTATIONLAYERASSIGNMENT('some ifcPresentationLayerAssignment',$,(#37),$); #49=IFCPOLYLINE((#50,#51)); #50=IFCCARTESIANPOINT((0.,0.)); #51=IFCCARTESIANPOINT((4000.,0.)); #52=IFCSHAPEREPRESENTATION(#20,'Axis','Curve2D',(#49)); #54=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #53=IFCQUANTITYLENGTH('IfcQuantityArea:Area','',#54,100.,$); #56=IFCDIMENSIONALEXPONENTS(1,0,0,0,0,0,0); #55=IFCCONTEXTDEPENDENTUNIT(#56,.LENGTHUNIT.,'Elephants'); #57=IFCQUANTITYCOUNT('IfcQuantityCount:Elephant',$,#55,12.,$); #60=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #59=IFCMEASUREWITHUNIT(IFCRATIOMEASURE(25.4),#60); #61=IFCDIMENSIONALEXPONENTS(1,0,0,0,0,0,0); #58=IFCCONVERSIONBASEDUNIT(#61,.LENGTHUNIT.,'Inch',#59); #62=IFCQUANTITYLENGTH('IfcQuantityLength:Length','',#58,24.,$); #63=IFCELEMENTQUANTITY('2NzDD6BkfDFAUH5zVe3vf0',#2,'Test:IfcElementQuantity','Measurement quantity',$,(#53,#57,#62)); #64=IFCRELDEFINESBYPROPERTIES('2rxEDLnp59XvLpgGjoNnBQ',#2,'Area Association','IfcElementQuantity associated to wall',(#29),#63); #66=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); #65=IFCPROPERTYSINGLEVALUE('IfcPropertySingleValue:Time','',IFCTIMEMEASURE(150.),#66); #68=IFCPROPERTYENUMERATION('Notes',(IFCLABEL('Do'),IFCLABEL('Re'),IFCLABEL('Mi'),IFCLABEL('Fa'),IFCLABEL('So'),IFCLABEL('La'),IFCLABEL('Ti')),$); #67=IFCPROPERTYENUMERATEDVALUE('IfcPropertyEnumeratedValue:Music',$,(IFCLABEL('Do'),IFCLABEL('Re'),IFCLABEL('Mi')),#68); #70=IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); #69=IFCPROPERTYBOUNDEDVALUE('IfcPropertyBoundedValue:Mass','',IFCMASSMEASURE(5000.),IFCMASSMEASURE(1000.),#70,$); #73=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); #72=IFCCONTEXTDEPENDENTUNIT(#73,.FREQUENCYUNIT.,'dB'); #71=IFCPROPERTYTABLEVALUE('IfcPropertyTableValue:Sound',$,(IFCREAL(100.),IFCREAL(200.),IFCREAL(400.),IFCREAL(800.),IFCREAL(1600.),IFCREAL(3200.)),(IFCREAL(20.),IFCREAL(42.),IFCREAL(46.),IFCREAL(56.),IFCREAL(60.),IFCREAL(65.)),$,$,#72,$); #74=IFCPROPERTYLISTVALUE('IfcPropertyListValue:Colours',$,(IFCLABEL('Red'),IFCLABEL('Green'),IFCLABEL('Blue'),IFCLABEL('Pink'),IFCLABEL('White'),IFCLABEL('Black')),$); #75=IFCMATERIAL('Brick',$,$); #76=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:Material',$,$,#75); #78=IFCMATERIAL('Cavity',$,$); #79=IFCMATERIAL('Block',$,$); #77=IFCMATERIALLIST((#75,#78,#79)); #80=IFCMATERIALLAYER(#75,100.,$,$,$,$,$); #81=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:MaterialLayer',$,$,#80); #82=IFCDOCUMENTREFERENCE('c://Documents//TheDoc.Txt',$,'Document',$,$); #83=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:Document',$,$,#82); #84=IFCREGULARTIMESERIES('Regular Time Series','Time series of events','2015-02-14T12:01:01','2015-05-15T12:01:01',.CONTINUOUS.,.MEASURED.,$,$,604800.,()); #85=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:TimeSeries',$,$,#84); #86=IFCPOSTALADDRESS($,$,$,'Room 101',('12 New road','DoxField'),$,'Sunderland',$,'DL01 6SX',$); #87=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:Address',$,$,#86); #88=IFCTELECOMADDRESS($,$,$,('01325 6589965'),$,$,('bob@bobsworks.com'),$,$); #89=IFCPROPERTYREFERENCEVALUE('IfcPropertyReferenceValue:Telecom',$,$,#88); #90=IFCPROPERTYSET('2qJSTdQSj0wQKmIdFVroG2',#2,'Test:IfcPropertySet','Property Set',(#65,#67,#69,#71,#74,#76,#81,#83,#85,#87,#89)); #91=IFCRELDEFINESBYPROPERTIES('3n83nuxoj0gA5F$UnucPP3',#2,'Property Association','IfcPropertySet associated to wall',(#29),#90); #92=IFCRELCONTAINEDINSPATIALSTRUCTURE('1mefbELBn5JQeF1AH4vA0$',#2,$,$,(#29),#24); ENDSEC; END-ISO-10303-21;