行业基础课程。 简要介绍

引言


为了配合党和政府的政策,为了引入BIM技术-建筑信息模型,正在积极修改立法。 在继续开展派对活动时,我们将考虑开放式演示格式BIM-IFC(行业基础课程)。


IFC的历史始于1995年(实际上是1993年夏天[1] ),当时Autodesk Corporation与一群“同志”组织了一项卡特尔协议,以开发用于建筑设计的各种CAD系统的交换格式。 一年后,同志们了解到,这种格式应该由具有开放成员资格的组织开放和开发,因为国际互操作性联盟于1996年出现。 后来,在2008年,该组织更名为buildingSMART-更具魅力。

IFC开发人员没有丰富的想象力,也没有机会应用它-他们设定了非常短的期限,任务看起来非常全球化。 因此,他们采用了STEP格式(产品模型数据交换的标准),或者更确切地说是应用协议225:构建元素。 我必须说,围绕STEP,已经以ISO标准的状态以一堆规范的形式创建了一个丰富的基础架构。 该基础结构基于EXPRESS数据建模语言及其图形化表达EXPRESS-G;开发该语言是为了方便以各种编程语言自动生成代码。

IFC的开发始于1995年9月,IFC 1.0于1996年6月发布,最终版本于1997年1月。实际上,IFC第一版的目标是证明实现这一目标的可能性很大,各种公司都以这种格式展示了他们的进出口演示。

下一个版本于1997年11月发布,版本为1.5,但尝试实施该版本很快发现了许多错误,需要开发固定版本1.5.1,该版本与版本2.0的开发同时进行,该版本于1999年3月引入。

所有这些版本现在都已弃用。

2.1版于2000年11月发布。这是最早的文档版本。 后来以ISO / PAS 16739:2005的形式发布。

现在,最常见的版本(大多数程序可以理解)是IFC 2.3。

发布日期日期编号该文件ISO标准
4.2.0.02019年IFC4X2国际金融公司4.2
4.1.0.42018年IFC4X1国际金融公司4.1
4.0.2.12017年国际金融中心4IFC 4.0附录2 TC1ISO 16739-1:2017
4.0.2.02016年国际金融中心4IFC 4.0附录2
4.0.1.02015年国际金融中心4IFC 4.0附录1
4.0.0.52013年国际金融中心4国际金融公司4.0ISO 16739:2013
2.3.0.12007年IFC2X3_FINAL国际金融中心2x3 TC1
2.3.0.02006年IFC2X3_FINAL国际金融中心2x3
2.2.1.02004年IFC2X2_FINALIFC 2x2附录1
2.2.0.02003年IFC2X2_FINAL国际金融中心2x2
2.1.1.02001IFC2X_FINALIFC 2x附录1
2.1.0.02000IFC2X_FINAL国际金融中心2xISO / PAS 16739:2005
2.0.0.01999年国际金融公司2.0
1.5.1.01998年国际金融公司1.5.1
1.5.0.01997年国际金融公司1.5
1.0.0.01996年国际金融公司1.0

软体类


对于阅读IFC,带有语法高亮显示的文本编辑器很有用,例如,我在笨拙的IFC语法设置中使用了n ++和vs代码。

但是,另一个必要的工具将是能够在IFC中可视化图形的程序。 现在有很多观众甚至免费观众;就我个人而言,我更喜欢xBIM项目中的XbimXplorer 。 我也使用过Revit,但是我必须说,纯Revit对IFC并不是很友好-它甚至无法读取其创建的文件(是的,Autodesk的Revit不知道如何使用Autodesk发明的格式-这是Autodesk的名片“好吧,他们只是没有拿出Revit,而是像往常一样买了它,但是它没有一个不好的插件-IFC for Revit (在撰写本文时,发现了一些错误,有时间的话就需要修复...)

我必须说,IFC格式是如此混乱,以至于没有程序能够正确处理它-每个都以自己的方式进行处理。 因此,XbimXplorer会忽略2D图形和某些语法错误。

内容描述


IFC格式以三种形式存在:IFC-SPF(.ifc),IFC-XML(.ifcXML),IFC-ZIP(.ifcZIP)
IFC-SPF是ISO 10303-21中定义的文本格式-实际上,这是一个STEP文件
IFC-XML是ISO 10303-28中定义的XML格式(“ STEP-XML”)
IFC- ZIP-可能包含.ifc或.ifcXML的zip存档

IFC-SPF文件的结构在Wirth表示法的ISO 10303-21 (存在GOST ISO 10303-21-2002)中进行了描述。 这是一个文本文件,仅使用代码范围在32-126之间的字符(第三版允许使用代码范围为127-255的字符,但不建议使用-为了兼容)
多行注释用成对的字符/ * * /

有几种方法可以用不同的编码方式写字符

记录ISO 8859
指令\ S \-指令后的字符代码表示表ISO 8859-1中的字符代码
指令\ P * \-在这里,必须使用大写拉丁字母而不是*,它表示用于\ S \指令的ISO 8859表的编号,A表示ISO 8859-1,B表示ISO 8859-2等。

记录ISO 10646
指令\ X \-指令后跟两位数字的十六进制数字,指示范围从U + 0000到U + 00FF的字符
指令\ X2 \ * \ X0 \和\ X4 \ * \ X0 \-此处不是*,而是一个两位数字(X2)或四位(X4)十六进制数字的序列,它们表示相应的字符

世界您好! => \ X2 \ 041F04400438043204350442 \ X0 \,\ X2 \ 041C04380440 \ X0 \!

最大原始字符串长度-32769字节

文件结构 -文件以ISO-10303-21行开头; 并以END-ISO-10303-21行结尾; 尽管可能仍然有SIGNATURE_SECTION签名部分,但我不会考虑此选项。
在这两行之间应有一个HEADER_SECTION标头部分,之后可以有ANCHOR_SECTION和/或REFERENCE_SECTION部分,以及一个或多个DATA_SECTION(在IFC中只有一个)

HEADER_SECTION-IFC标头部分的结构仅允许该部分中的三个元素:FILE_DESCRIPTION,FILE_NAME,FILE_SCHEMA

ENTITY file_description;
description : LIST [1:?] OF STRING (256) ;
implementation_level : STRING (256) ;
END_ENTITY;


最小选项:
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2; 1');
描述内容对于IFC非常重要-它列出了使用的ViewDefinition加载项,ExchangeRequirement内容和Option [2]选项,但仅需要ViewDefinition元素
Implementation_level由两位数字组成,第一位表示ISO-10303-21的修订版(其中三位),第二位-兼容模式(其中两位),如ISO-10303-21第4.3节所述。 对于IFC来说,Implementation_level总是很重要-2; 1

另一种选择:
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0,QuantityTakeOffAddOnView]','ExchangeRequirement [Structural]'),'2; 1');

ENTITY file_name;
name : STRING (256) ;
time_stamp : time_stamp_text ;
author : LIST [ 1 : ? ] OF STRING (256) ;
organization : LIST [ 1 : ? ] OF STRING (256) ;
preprocessor_version : STRING (256) ;
originating_system : STRING (256) ;
authorization : STRING (256) ;
END_ENTITY;


所有值都可以留为空白。 文件名,时间戳,作者,组织,预处理程序版本,创作程序,授权。

ENTITY file_schema;
schema_identifiers : LIST [1:?] OF UNIQUE schema_name;
END_ENTITY;


描述数据部分内容的架构名称(请参阅上表中的“标识符”列)

数据部分以DATA关键字开头; 并以ENDSEC;。结尾。 本节的内容是具有以下语法的一系列实体:
#<实体索引> = <实体名称>(<属性列表>);
IFC图表中描述了可能的实体及其参数。

空的IFC文件:
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;


数据部分


IFC的根元素是IfcProject 。 在这里有必要说明属性列表的形成方式,这对于创建实体是必要的。首先,实体可以拥有自己的属性,其次,它可以从祖先继承它们,指定属性的顺序-从祖先到后代。 对于IfcProject,继承链如下:IfcRoot => IfcObjectDefinition => IfcObject => IfcProject。

IFCPROJECT(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>, <LongName>,<Phase>, (<RepresentationContexts>),<UnitsInContext>);

现在,要创建一个IfcProject,我们需要为所有属性设置值。 从IfcRoot-GlobalId继承的第一个属性的值为IfcGloballyUniqueId。 这是一种简单的类型-长度为22个字符的字符串,您需要在其中编写一个唯一的GUID或UUID,以便将128位数字压缩为22个字符-buildingSMART网站上发布了一种特殊算法[3] 。 以下OwnerHistory属性设置为IfcOwnerHistory。 该元素回答了以下问题-谁,如何以及何时创建此IFC元素,实际上,对于IFC中的几乎每个对象,都可以通过此元素指示其作者。 要填充此属性,您可以“就地”创建一个元素,但是最好在另一个地方进行处理,而就地只需使用#<entity index>形式的记录进行引用即可。 同样,$符号表示空值,如果后代将值分配给祖先的属性,则使用*符号。 枚举类型的值写在两点之间-.ELEMENT。

创建IfcProject的示例:
#1=IFCPROJECT('abcdefghijklmnopqrs101', #2, 'sample project', $, $, '','',$,$);
#2=IFCOWNERHISTORY(#3,#6,.READWRITE.,.ADDED.,87763554,#3,#6,87763554);
#3=IFCPERSONANDORGANIZATION(#4,#5,());
#4=IFCPERSON('Public','Jane','Q.',(),(),(),(),());
#5=IFCORGANIZATION($,'Architecture by Jane Q. Public, Inc.',$,(),());
#6=IFCAPPLICATION(#7,'Version 1.0','Building Architecture Toolkit','BAT1.0');
#7=IFCORGANIZATION($,'Creating Instance Software, Inc.',$,(),());


以下元素<Name>,<Description>,<ObjectType>,<LongName>,<Phase>-可选和文本(IfcLabel,IfcText)-一个人的项目描述

RepresentationContexts是空间/上下文的列表,其想法是我们可以有多个空间/上下文,例如:草图,项目和工作文档。 并且不同的对象在不同的​​上下文中可能具有不同的表示形式。 例如,草图中的墙仅是一条线,在项目中它已经具有厚度,在工作文档中它由不同的层组成。 但是在IFC2x3中,概念已更改,“草图”,“轮廓”,“设计”,“详细信息”的上下文已被取消,或者已移至IfcGeometricRepresentationSubContext。 并且类IfcRepresentationContext本身变成了抽象,带有一个后代-IfcGeometricRepresentationContext,可以是体积ContextType ='Model',CoordinateSpaceDimension = 3,平面ContextType ='Plan',CoordinateSpaceDimension = 2并且FIG知道什么ContextType ='NotDefined'。

IFCGEOMETRICREPRESENTATIONCONTEXT(<>,<>,< >,< - >,< >,< >)

UnitsInContext-一个IfcUnitAssignment对象,该对象形成一个IfcUnit元素的列表,并带有项目单位的描述,这是正确导入所必需的,否则软件将使用其默认设置-例如,在Revit中有英尺(它将所有内容存储在英尺中)。

#2= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#3= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#4= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#5= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#6= IFCUNITASSIGNMENT((#2,#3,#4,#5));


从根IfcProject元素形成一棵元素树,这些树是IfcSpatialStructureElement类型的后代(IfcBuilding(建筑物),IfcBuildingStorey(地板),IfcSpace(空间或房间),IfcSite(站点))。 但是这些元素不是直接连接,而是通过特殊的IfcRelAggregates元素以一对多关系连接。

IFCRELAGGREGATES(<GlobalId>, <OwnerHistory>, <>, <>, < >, (< >));

这些元素只能按以下顺序连接:IfcSite => IfcBuilding => IfcBuildingStorey => IfcSpace,并且可以连接相同类型的元素,但是它们的CompositionType属性必须具有不同的值,并且必须按特定顺序排列COMPLEX => ELEMENT => PARTIAL

完整的可能项目结构:
IfcSite.COMPLEX => IfcSite.ELEMENT => IfcSite.PARTIAL => IfcBuilding.COMPLEX => IfcBuilding.ELEMENT => IfcBuilding.PARTIAL => IfcBuildingStorey.COMPLEX => IfcBuildingStoreyCIAL = PARTIRE> = IfcSpace.ELEMENT => IfcSpace.PARTIAL

ifc文件

尽管所有元素都是可选的,但仅需要继承顺序
假设您要描述的建筑物是由楼层楼层组成,并且其中存在空间,则需要显示进入建筑物的现有场地浮雕

IFCSITE(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<LongName>,<CompositionType>,<RefLatitude>,<RefLongitude>,<RefElevation>,<LandTitleNumber>,<SiteAddress>);

从IfcProduct继承的Representation属性指向一个IfcProductRepresentation对象,具有两个IfcProductDefinitionShape后代来描述对象的形状,并且具有IfcMaterialDefinitionRepresentation来描述材料(可视化样式),它们通过Representations属性链接不同的表示。

IfcProductDefinitionShape(<>,<>,(<Representations>))
IfcMaterialDefinitionRepresentation(<>, <>,<Representations>),<RepresentedMaterial>)

表示形式的IfcMaterialDefinitionRepresentation仅接受IfcStyledRepresentation-样式描述
RepresentedMaterial属性提供了对象材质的文本描述。
用于表示的IfcProductDefinitionShape仅接受IfcShapeRepresentation或IfcTopologyRepresentation(IfcShapeModel)

IfcShapeRepresentation是IFC中最重要的类,因为它负责对象的几何表示。 可用的几何类型:Curve2D(扁平线),GeometricSet(点,线,曲面,2d和3d),SurfaceModel(曲面),SolidModel(实体),其他类型(BoundingBox,SectionedSpine,MappedRepresentation)

IFCSHAPEREPRESENTATION(<>,<RepresentationIdentifier>,< >,< >);

任何几何的核心都是IfcCartesianPoint元素-仅是一点。
#13= IFCCARTESIANPOINT((0.,0.,0.));
#16= IFCCARTESIANPOINT((1.,0.,0.));
#22= IFCPOLYLINE((#13, #16));

#510= IFCBSPLINECURVEWITHKNOTS(3,(#511,#512,#513,#514,#511,#512,#513),.UNSPECIFIED.,.T.,.T.,(1,1,1,1,1,1,1,1,1,1,1),(-7.0,-6.0,-5.0,-4.0,-3.0,-2.0,-1.0,0.0,1.0,2.0,3.0),.UNSPECIFIED.);
#511= IFCCARTESIANPOINT((239.758213537139,192.193559404919,-83.9999999999991));
#512= IFCCARTESIANPOINT((0.0,275.591853484122,-83.9999999999991));
#513= IFCCARTESIANPOINT((-239.75821353295,192.193559404918,-83.9999999999991));
#514= IFCCARTESIANPOINT((0.0,-108.13323051355,-83.9999999999991));

#34= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#35));
#35= IFCEXTRUDEDAREASOLID(#36,#8,#37,0.5);
#36= IFCRECTANGLEPROFILEDEF(.AREA.,$,#38,0.5,0.5);
#37= IFCDIRECTION((0.,0.,1.));
#38= IFCAXIS2PLACEMENT2D(#39,#9);
#7= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#8,#9);
#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#9= IFCDIRECTION((0.,1.));
#39= IFCCARTESIANPOINT((0.,0.));

几何可能仅由点列表组成,也可能具有包含一堆参数和子项的复杂结构。
考虑IfcExtrudedAreaSolid(<SweptArea>,<Position>,<ExtrudedDirection>,<Depth>)

这是通过将位于沿ExtrudedDirection方向拉伸的位置空间中的原始SweptArea平面轮廓拉伸到ExtrudedDirection的深度而获得的实体。 SweptArea属性的类型为IfcProfileDef-这是一个“在所有情况下”都有大量后代的抽象类,在这种情况下,使用的是IfcRectangleProfileDef(<ProfileType>,<ProfileName>,<Position>,<XDim>,<YDim>)

ProfileType-类型为IfcProfileTypeEnum的配置文件类型枚举值(值:CURVE,AREA)。 可选的ProfileName配置文件名称,位置定位和XY坐标尺寸为XDim,YDim。


或者更复杂的IfcFacetedBrep,它由一个封闭的IfcClosedShell组成,后者又由一系列IfcFace面组成,这些面由IfcFaceBound边组成,这些边由IfcLoop循环描述,该循环已经包含IfcCartesianPoint点。 边界表示(brep)决定了其结构的许多条件-在文档和相关文献中有详细描述。

#57= IFCSHAPEREPRESENTATION(#7, 'Body', 'Brep', (#58));
#58= IFCFACETEDBREP(#59);
#59= IFCCLOSEDSHELL((#80, #81, #82, #83, #84, #85));

#60 = IFCCARTESIANPOINT((0.,0.,0.));
#61 = IFCCARTESIANPOINT((1.,0.,0.));
#62 = IFCCARTESIANPOINT((1.,1.,0.));
#63 = IFCCARTESIANPOINT((0.,1.,0.));
#64 = IFCCARTESIANPOINT((0.,0.,1.));
#65 = IFCCARTESIANPOINT((1.,0.,1.));
#66 = IFCCARTESIANPOINT((1.,1.,1.));
#67 = IFCCARTESIANPOINT((0.,1.,1.));

#68= IFCPOLYLOOP((#60, #61, #62, #63));
#69= IFCPOLYLOOP((#64, #65, #66, #67));
#70= IFCPOLYLOOP((#60, #61, #65, #64));
#71= IFCPOLYLOOP((#61, #62, #66, #65));
#72= IFCPOLYLOOP((#62, #63, #67, #66));
#73= IFCPOLYLOOP((#63, #60, #64, #67));

#74= IFCFACEOUTERBOUND(#68, .T.);
#75= IFCFACEOUTERBOUND(#69, .T.);
#76= IFCFACEOUTERBOUND(#70, .T.);
#77= IFCFACEOUTERBOUND(#71, .T.);
#78= IFCFACEOUTERBOUND(#72, .T.);
#79= IFCFACEOUTERBOUND(#73, .T.);

#80= IFCFACE((#74));
#81= IFCFACE((#75));
#82= IFCFACE((#76));
#83= IFCFACE((#77));
#84= IFCFACE((#78));
#85= IFCFACE((#79));




IfcAdvancedBrep已出现在IFC4中,其边缘可以通过NURBS曲线描述



IfcSpatialStructureElement对象可以具有自己的几何形状,但是建筑物通常由其他对象组成:墙壁,地板,屋顶,窗户,门等。在IFC中,所有这些对象均由相应的对象描述:IfcWall,IfcSlab,IfcRoof,IfcWindow,IfcDoor-全部它们是IfcProduct的后代。 所有这些对象都可以通过特殊的IfcRelContainedInSpatialStructure对象与相应的IfcSpatialStructureElement对象关联。



IFCRELCONTAINEDINSPATIALSTRUCTURE(<GlobalId>,<OwnerHistory>,<>,<>, (<RelatedElements>),<RelatingStructure>)

对于恒定厚度的墙,通常使用IfcWallStandardCase(在IFC4中被视为过时的),对于其他情况,我们使用IfcWall。 如果使用IfcWallStandardCase,则需要使用SweptSolid-将墙的轮廓拉伸到给定的高度

IFCWALLSTANDARDCASE(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>);

#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#10= IFCCARTESIANPOINT((0.,0.,0.));
#13= IFCLOCALPLACEMENT($,#8);
#22= IFCDIRECTION((0.,0.,1.));
#23= IFCAXIS2PLACEMENT2D(#24,#25);
#24= IFCCARTESIANPOINT((0.,0.));
#25= IFCDIRECTION((1.,0.));
#26= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs107',$,'wall1',$,'',#13,#27,'');
#27= IFCPRODUCTDEFINITIONSHAPE($,$,(#28));
#28= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#29));
#29= IFCEXTRUDEDAREASOLID(#30,#32,#22,1000.);
#30= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,100.,1000.);
#31= IFCCARTESIANPOINT((500.,0.,100.));
#32= IFCAXIS2PLACEMENT3D(#31,$,$);


门由IfcDoor对象描述,可以将其添加到IfcRelContainedInSpatialStructure,但是此对象本身不会在墙壁上进行“切割”



特殊对象“ IfcOpeningElement”负责“剪切”,该剪切通过IfcRelVoidsElement与“父”对象关联。 在IfcOpeningElement中,您可以使用IfcRelFillsElement对象“插入”门。 使用IfcOpeningElement,您不仅可以制作通孔,还可以制作凹槽。





IFCDOOR(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)

IFCWINDOW(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)

IfcWindow对象的用法非常相似,ifcDoor,TotalHeight,TotalWidth-不能指定的公称尺寸-然后这些值将从几何中获取

IfcRoof对象由复杂的对象隐含-必须描述整个屋顶,才能将所有子对象与之相连-您需要使用IfcRelAggregates。 但是同时,IfcRoof可以具有自己的表示形式几何。
IFCSLAB(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<PredefinedType>);
IFCROOF(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<IfcRoofTypeEnum>);

编写IFC


现在,有了这些知识,我们将尝试描述一个简单的房子,首先,我们将获得一个空的IFC文件-我已经给出了该文件的描述。
空的IFC文件
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;


接下来,我们需要填充DATA部分的内容。 第一个必需的对象必须是IFCPROJECT(尽管可以在文件末尾,但是只是需要),如果我们确实希望程序以我们所考虑的度量单位读取模型,那么我们也需要IFCUNITASSIGNMENT。 我们还将至少需要一个IFCGEOMETRICREPRESENTATIONContext-否则我们将无法添加几何描述。

国际金融公司,国际金融公司,国际金融公司
#1=IFCPROJECT('abcdefghijklmnopqrs101', $, 'Project #1', $, $, '','', (#7), #6);

/* */
#2= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#3= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#4= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#5= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#6= IFCUNITASSIGNMENT((#2,#3,#4,#5));

/* */
#7= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#8,#9);
#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#9= IFCDIRECTION((0.,1.));
#10= IFCCARTESIANPOINT((0.,0.,0.));



房屋结构
IFCBUILDING => IFCBUILDINGSTOREY => IFCRELCONTAINEDINSPATIALSTRUCTURE
/* */
#11= IFCBUILDING('abcdefghijklmnopqrs102', $, $, $, $, #13, $, $, .ELEMENT., $, $, $);
#12= IFCRELAGGREGATES('abcdefghijklmnopqrs103', $, $, $, #1, (#11));
#13= IFCLOCALPLACEMENT($,#8);

/* */
#14= IFCBUILDINGSTOREY('abcdefghijklmnopqrs104',$,'level1',$,'',#13,$,'',.ELEMENT.,0.);
#15= IFCRELAGGREGATES('abcdefghijklmnopqrs103', $, $, $, #11, (#14));

#16= IFCRELCONTAINEDINSPATIALSTRUCTURE('abcdefghijklmnopqrs105',$,$,$,(#17, #26, #33, #39, #46, #57, #94, #101),#14);



让我们描述一下性别-IFCSLAB
#17= IFCSLAB('abcdefghijklmnopqrs106',$,'slab',$,'',#13,#18,'',.BASESLAB.);
#18= IFCPRODUCTDEFINITIONSHAPE($,$,(#19));
#19= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#20));
#20= IFCEXTRUDEDAREASOLID(#21,#8,#22,100.);
#21= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,1000.);
#22= IFCDIRECTION((0.,0.,1.));
#23= IFCAXIS2PLACEMENT2D(#24,#25);
#24= IFCCARTESIANPOINT((0.,0.));
#25= IFCDIRECTION((1.,0.));



四壁
#26= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs107',$,'wall1',$,'',#13,#27,'');
#27= IFCPRODUCTDEFINITIONSHAPE($,$,(#28));
#28= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#29));
#29= IFCEXTRUDEDAREASOLID(#30,#32,#22,1000.);
#30= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,100.,1000.);
#31= IFCCARTESIANPOINT((500.,0.,100.));
#32= IFCAXIS2PLACEMENT3D(#31,$,$);

#33= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs108',$,'wall2',$,'',#13,#34,'');
#34= IFCPRODUCTDEFINITIONSHAPE($,$,(#35));
#35= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#36));
#36= IFCEXTRUDEDAREASOLID(#30,#38,#22,1000.);
#37= IFCCARTESIANPOINT((-500.,0.,100.));
#38= IFCAXIS2PLACEMENT3D(#37,$,$);

#39= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs110',$,'wall3',$,'',#13,#40,'');
#40= IFCPRODUCTDEFINITIONSHAPE($,$,(#41));
#41= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#42));
#42= IFCEXTRUDEDAREASOLID(#43,#45,#22,1000.);
#43= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,100.);
#44= IFCCARTESIANPOINT((0.,-500.,100.));
#45= IFCAXIS2PLACEMENT3D(#44,$,$);

#46= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs109',$,'wall4',$,'',#13,#47,'');
#47= IFCPRODUCTDEFINITIONSHAPE($,$,(#48));
#48= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#49));
#49= IFCEXTRUDEDAREASOLID(#50,#52,#22,1000.);
#50= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,100.);
#51= IFCCARTESIANPOINT((0.,500.,100.));
#52= IFCAXIS2PLACEMENT3D(#51,$,$);



#57= IFCDOOR('abcdefghijklmnopqrs111',$,'door',$,'',#88,#86,'',$,$);
#86= IFCPRODUCTDEFINITIONSHAPE($,$,(#87));
#87= IFCSHAPEREPRESENTATION(#7,'Body','Brep',(#58));

#58= IFCFACETEDBREP(#59);
#59= IFCCLOSEDSHELL((#80, #81, #82, #83, #84, #85));

#60 = IFCCARTESIANPOINT((0.,0.,0.));
#61 = IFCCARTESIANPOINT((200.,0.,0.));
#62 = IFCCARTESIANPOINT((200.,200.,0.));
#63 = IFCCARTESIANPOINT((0.,200.,0.));
#64 = IFCCARTESIANPOINT((0.,0.,500.));
#65 = IFCCARTESIANPOINT((200.,0.,500.));
#66 = IFCCARTESIANPOINT((200.,200.,500.));
#67 = IFCCARTESIANPOINT((0.,200.,500.));

#68= IFCPOLYLOOP((#60, #61, #62, #63));
#69= IFCPOLYLOOP((#64, #65, #66, #67));
#70= IFCPOLYLOOP((#60, #61, #65, #64));
#71= IFCPOLYLOOP((#61, #62, #66, #65));
#72= IFCPOLYLOOP((#62, #63, #67, #66));
#73= IFCPOLYLOOP((#63, #60, #64, #67));

#74= IFCFACEOUTERBOUND(#68, .T.);
#75= IFCFACEOUTERBOUND(#69, .T.);
#76= IFCFACEOUTERBOUND(#70, .T.);
#77= IFCFACEOUTERBOUND(#71, .T.);
#78= IFCFACEOUTERBOUND(#72, .T.);
#79= IFCFACEOUTERBOUND(#73, .T.);

#80= IFCFACE((#74));
#81= IFCFACE((#75));
#82= IFCFACE((#76));
#83= IFCFACE((#77));
#84= IFCFACE((#78));
#85= IFCFACE((#79));

#88= IFCLOCALPLACEMENT($,#89);
#89= IFCAXIS2PLACEMENT3D(#90,$,$);
#90= IFCCARTESIANPOINT((-100.,400.,100.));

#91= IFCRELVOIDSELEMENT('abcdefghijklmnopqrs112',$,$,$,#46,#92);
#92= IFCOPENINGELEMENT('abcdefghijklmnopqrs113',$,$,$,'Opening',#88,#86,$);
#93= IFCRELFILLSELEMENT('abcdefghijklmnopqrs114',$,$,$,#92,#57);



为了描述门,我们使用IFCFACETEDBREP并将其用于插入我们的门的IFCOPENINGELEMENT。 使用不同的IFCLOCALPLACEMENTs,我们可以在不同的位置插入相同的几何图形并表示不同的对象-例如,可以对窗口使用相同的IFCFACETEDBREP。

窗户
#94= IFCWINDOW('abcdefghijklmnopqrs115',$,$,$,$,#95,#86,$,$,$);
#95= IFCLOCALPLACEMENT($,#96);
#96= IFCAXIS2PLACEMENT3D(#97,$,$);
#97= IFCCARTESIANPOINT((-100.,-600.,400.));

#98= IFCRELVOIDSELEMENT('abcdefghijklmnopqrs116',$,$,$,#39,#99);
#99= IFCOPENINGELEMENT('abcdefghijklmnopqrs117',$,$,$,'Opening',#95,#86,$);
#100= IFCRELFILLSELEMENT('abcdefghijklmnopqrs118',$,$,$,#99,#94);



屋顶
#101= IFCROOF('abcdefghijklmnopqrs119',$,$,$,$,#105,$,$,.FLAT_ROOF.);
#102= IFCSLAB('abcdefghijklmnopqrs120',$,'roof',$,'',#105,#18,'',.ROOF.);
#103= IFCAXIS2PLACEMENT3D(#104,$,$);
#104= IFCCARTESIANPOINT((0.,0.,1100.));
#105= IFCLOCALPLACEMENT(#13,#103);
#106= IFCRELAGGREGATES('abcdefghijklmnopqrs121',$,$,$,#101,(#102));


成品文件





结论


现在,亲爱的读者,您可以写下自己的梦想家园。 不幸的是,我没有考虑因显示对象的样式而被拒绝的IfcMaterialDefinitionRepresentation,也没有考虑IfcTopologyRepresentation-我不太了解它的用途,也不知道如何对其进行可视化。 我没有考虑IFC选项和其他属性集。 否则,这将不是一个简短的介绍。

IFC格式包含大量对象,每个版本之间的对象数量只会更多。 在规范文本中,有一些注释未反映在EXPRESS方案中,但会严重影响文件处理。 因此,在没有仔细阅读所有文档的情况下很难实现这种格式,但是对于一个人来说这几乎是不可能的,因此没有程序可以完全正确地读取它,每个程序都有其独特之处。 如果使用开源程序,总是有机会纠正检测到的错误,那么对于专有程序,这将使得无法完全使用IFC格式。

IFC格式绝对不适合存储总体规划部分的信息,但是目前该部分正在进行积极的工作,该工作应在2020年4月底之前完成,并应作为IFC5的一部分。 现在,还在IFC Road,IFC Airport和IFC4precast(预制)上进行工作。 IFC Bridge出现在IFC4x2中,为此他们提出了一个特殊的几何对象-IfcSectionedSolidHorizo​​ntal

IFC的最新变化使它非常接近GML,即使IfcCoordinateReferenceSystem出现了-大地坐标系的描述。 在这种情况下,IFC专注于对象内部结构的描述,而GML则描述其外部表示。 但是,IFC之间的主要区别在于可以在不同位置引用相同的对象-在描述墙壁和窗户的几何形状时可以使用相同的点。 在GML中,每个几何对象都是完全独立的。

参考文献:
1。 www.ibpsa.org/proceedings/BS1997/BS97_P125.pdf
2。 standard.buildingsmart.org/documents/Implementation/ImplementationGuide_IFCHeaderData_Version_1.0.2.pdf
3。 technical.buildingsmart.org/resources/ifcimplementationguidance/ifc-guid

Source: https://habr.com/ru/post/zh-CN460719/


All Articles