IFC 所需数据

Required Data for IFC

我正在做一个项目,我需要生成一个 IFC 文件,除了几何图形之外,我得到的信息不多(我可以访问材料的密度和热导率,以及对象的基本标签) .

到目前为止,我只能找到 IFC 可以 存储的东西,从来没有找到 IFC 需要 存储的东西。

我需要在 IFC 文件中包含什么才能使其正常运行?
IFC 文件除了基本的几何图形还需要什么?

免责声明:我没有阅读(或购买)该标准。我的知识主要源于使用 IFC 文件和尝试不同的东西。并阅读 buildingSMART 文档。所以我不能给你一个硬性保证,但我很有信心我的信息是 correct/usable.

作为购买官方标准文件的替代方法,您可以查看 official documentation by buildingsmart. (Also have a look here 以获取 other/more 现代版本的更多一般信息和可用性)。

现在假设您熟悉基本的 STEP 文件布局(header 和数据段),让我们跳到 IFC 文件绝对必须包含的内容才能被认为是正确的(据我了解文档; 可能有 parsers/loaders 可以加载 incorrect/incomplete 文件,但我们的目标不是它们)。另请注意,我正在为 IFC 4.0 构建此示例。这对于当前的 IFC 4.1 标准应该是正确的,但对于旧的 IFC2X3 标准可能不正确(IFC2X3 在 IFC4 中有一些放宽)。此外,我将跳过名称和描述 - 您可以设置这些字段以进行测试以在查看器中识别您的结构(这比比较 GUID 更容易)。

Ifc项目

所有元素的根是IfcProject。它还包含所有其他元素的最基本属性和定义。该实体的每个文档所需的属性只是唯一 ID。但是对于一个工作示例,您通常还需要最小的单位分配和表示上下文。

#20= IFCPROJECT('344O7vICcwH8qAEnwJDjSU',$,$,$,$,$,$,(#19),#13);

unit assignment 中,您可以定义所需的单位,从几何单位到货币、热量等。最小值是长度、面积和角度,以有意义地定义几何项目。因此,对于我们的示例,我们仅包括那些:长度为米,面积为平方米,角度为弧度。如果您需要英尺或英寸或度数,您可以将它们定义为派生单位。

#10= IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#11= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#12= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#13= IFCUNITASSIGNMENT((#10,#11,#12));

representation context 为给定的 class 表示(=geometric/parametric 描述)定义了基本坐标系。所以简单的情况是零点处的 3 维右手系统。 IFC 正在使用 z-axis 朝上 - 如果您正在使用源自 3D/OpenGl 应用程序的 models/files,这可能很重要,这些应用程序通常假定 y-axis 朝上。您还需要一个精度值 - 我在这里使用 1.0e-5,但您可能想测试一下是否可以使用更少或需要更多。在组合几何时(在构造实体几何步骤中)比较 points/edges 时通常会应用精度。如果有错误,请尝试不同的精度值。

表示上下文的第二个属性是上下文类型。这是一个字符串,用于标识应在哪些表示上应用此上下文。文档指出值基于 "implementers agreement" - 这意味着 AFAIK "look what the others are using"。根据我使用 "Model" 的经验,它适用于 3D 几何。将 "Plan" 用于 2D 计划和草图也应该有效。

#14= IFCDIRECTION((1.,0.,0.));
#15= IFCDIRECTION((0.,0.,1.));
#16= IFCCARTESIANPOINT((0.,0.,0.));
#17= IFCAXIS2PLACEMENT3D(#16,#15,#14);
#18= IFCDIRECTION((0.,1.));
#19= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#17,#18);

元素的空间容器

不能将元素直接添加到 IfcProject - 它们需要放置到项目中包含的空间元素中。共有三个可能的选择:IfcSite、IfcBuilding 和 IfcSpatialZone(请参阅 IfcProject page). The IfcSpatialZone 上的空间分解部分定义为 non-hierarchical 空间元素 - 它的用法与其他两个略有不同(元素使用不同的方式添加关系)。

一个站点作为空间容器就足够了。将所有元素添加到其中可能在语义上是模糊的(大多数栅栏是直接添加到其中,其他元素通常在建筑物内部)但并非不正确。 (IFC 不关心你的花园里有没有电器)。由于 IfcSite 的几乎所有属性都是可选的,我们可以跳过这些。但请注意:如果您为您的站点提供一个表示(=某种几何形状),您将需要为其添加一个展示位置。该网站将被聚合到与之相关的项目中。

#30= IFCSITE('20FpTZCqJy2vhVJYtjuIce',$,$,$,$,$,$,$,.ELEMENT.,$,$,$,$,$);
#31= IFCRELAGGREGATES('0Du7$nzQXCktKlPUTLFSAT',$,$,$,#20,(#30));

元素

实际上,这就是绝对最小结构所需要的全部。现在你可以添加你的元素——从 IfcProduct. As all those elements have some sort of meaning attached to it you either need to select those closely matching the objects you have, or you might want to use IfcBuildingElementProxy 派生的某种类型的实体,这是最 "meaningless" (或更好:没有专门的语义) object 类型。以下代码放置了一个没有几何图形的代理。该放置引用了用于创建坐标系的相同坐标系定义,因为它不会转换或移动任何东西。您的几何形状将通过产品定义形状添加,该形状具有形状方面,最后是一些几何项目。建筑智能文档有几个带有指定几何图形的示例。

#40= IFCLOCALPLACEMENT($,#17);
#41= IFCBUILDINGELEMENTPROXY('3W29Drc$H6CxK3FGIxjJNl',$,$,$,$,#40,$,$,.NOTDEFINED.);
#42= IFCRELCONTAINEDINSPATIALSTRUCTURE('04ldtj6cp2dME6CiP80Bzh',#12,$,$,(#41),#30);

结论

所以不需要太多添加元素:

  • 一个项目
  • 基本单位定义
  • 一个空间容器

完整的示例文件为:

ISO-10303-21;
HEADER;FILE_DESCRIPTION(('IFC4'),'2;1');
FILE_NAME('example.ifc','2018-08-8',(''),(''),'','','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#10= IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#11= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#12= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#13= IFCUNITASSIGNMENT((#10,#11,#12));
#14= IFCDIRECTION((1.,0.,0.));
#15= IFCDIRECTION((0.,0.,1.));
#16= IFCCARTESIANPOINT((0.,0.,0.));
#17= IFCAXIS2PLACEMENT3D(#16,#15,#14);
#18= IFCDIRECTION((0.,1.));
#19= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#17,#18);
#20= IFCPROJECT('344O7vICcwH8qAEnwJDjSU',$,$,$,$,$,$,(#19),#13);
#30= IFCSITE('20FpTZCqJy2vhVJYtjuIce',$,$,$,$,$,$,$,.ELEMENT.,$,$,$,$,$);
#31= IFCRELAGGREGATES('0Du7$nzQXCktKlPUTLFSAT',$,$,$,#20,(#30));
#40= IFCLOCALPLACEMENT($,#17);
#41= IFCBUILDINGELEMENTPROXY('3W29Drc$H6CxK3FGIxjJNl',$,$,$,$,#40,$,$,.NOTDEFINED.);
#42= IFCRELCONTAINEDINSPATIALSTRUCTURE('04ldtj6cp2dME6CiP80Bzh',$,$,$,(#41),#30);
ENDSEC;
END-ISO-10303-21;

请注意,加载这个不会显示任何内容,因为它不包含任何几何图形。也请请注意,我尚未验证它是否没有错误 - 我目前手头没有我的 IFC 工具(如果您想验证您的文件,请查看 stepcode,它可以检查您的文件是否正确语法正确 - 它不会检查构建智能文档中提到的概念的语义或执行情况。)

另外值得一提的是,references/ids(如#20)的顺序可以自由安排——您可以引用您稍后在文件中添加的元素,并且引用只需要是唯一的一个文件。这意味着示例文件的行可以打乱,它仍然是一个有效的文件——解析器通常使用 two-step 方法来创建 in-memory 表示(1. 解析为 IFC classes , 2. 解析引用).