2

我正在做一个项目,我需要生成一个 IFC 文件,并且得到的信息并不多于几何(我可以访问材料的密度和导热性,以及对象的基本标签)。

到目前为止,我只能找到 IFC可以存储的内容,而不是 IFC需要存储的内容。

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

4

1 回答 1

4

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

作为购买官方标准文件的替代方法,您可以查看buildingsmart 的官方文档。(也可以在这里查看更多一般信息和其他/更现代版本的可用性)。

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

国际金融工程

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

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

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

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

表示上下文为给定的表示类别(=几何/参数描述)定义了基本坐标系。因此,简单的情况是零点处的 3 维右手系统。IFC 使用指向向上的 z 轴 - 如果您使用源自通常假定 y 轴指向向上的 3D/OpenGl 应用程序的模型/文件,这可能很重要。您还需要一个精度值 - 我在这里使用 1.0e-5,但您可能想测试是否可以使用更少或需要更多。在组合几何时(在构造实体几何步骤期间)比较点/边时,通常会应用精度。如果您有错误,请尝试不同的精度值。

表示上下文的第二个属性是上下文类型。这是一个字符串,标识该上下文应应用于哪些表示。该文档指出,值基于“实施者协议​​”——这意味着 AFAIK“看看其他人在使用什么”。根据我使用“模型”的经验,它适用于 3D 几何。对 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 页面上的空间分解部分)。IfcSpatialZone被定义为非分层空间元素 - 它的用法与其他两个略有不同(元素使用不同的关系添加)。

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

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

元素

实际上,这就是作为绝对最小结构所需要的一切。现在您可以添加您的元素 - 从IfcProduct派生的某种类型的实体。由于所有这些元素都附加了某种含义,因此您要么需要选择那些与您拥有的对象密切匹配的元素,要么您可能想要使用IfcBuildingElementProxy这是最“无意义”(或更好:没有专门的语义含义)的对象类型。以下代码放置了一个没有几何图形的代理。放置引用了相同的坐标系定义,该定义用于创建坐标系,因为它不会变换或移动任何东西。您的几何图形将通过具有形状方面和最后一些几何项目的产品定义形状添加。建筑智能文档有一些带有指定几何图形的示例。

#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,它可以检查您的文件在语法上是否正确 -它不会检查构建智能文档中提到的概念的语义或执行。)

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

于 2018-08-08T21:27:22.703 回答