代码之家  ›  专栏  ›  技术社区  ›  blenderfreaky

国际金融公司所需数据

  •  1
  • blenderfreaky  · 技术社区  · 6 年前

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

    到目前为止我只能找到 可以 商店,从来没有什么国际金融公司 需要 储存。

    我需要在一个IFC文件中包括什么,这样它才能正常工作?
    除了基本几何图形外,IFC文件还需要什么?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Loebl    6 年前

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

    作为购买官方标准文件的替代方案,您可以查看 official documentation 通过建造集市。(也看看 here 以获取更多的一般信息和其他/更现代版本的可用性)。

    现在假设您熟悉基本的STEP文件布局(头和数据段),让我们跳到IFC文件必须包含哪些内容才能被认为是正确的(就我所理解的文档而言;可能有解析器/加载器可以加载不正确/不完整的文件,但我们并不针对它们)。另外请注意,我正在为IFC 4.0构建这个示例。这对于当前的IFC4.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 为给定的表示类(=几何/参数描述)定义基本坐标系。所以简单的例子是在零点的一个三维右手系统。IFC正在使用Z轴指向-这可能是重要的,如果您正在使用来自3D /OpenGL应用程序的模型/文件,这些应用程序通常假定Y轴指向上。您还需要一个精度值-我在这里使用的是1.0e-5,但如果您可以少用或多用,您可能需要测试一下。在组合几何图形时(在构造实体几何图形步骤中)比较点/边时,通常应用精度。如果有错误,请尝试其他精度值。

    表示上下文的第二个属性是上下文类型。这是一个字符串,标识应用此上下文的表示形式。文档说明,值基于“实现者协议”(implementers agreement)——这意味着AFAIK“看看其他人在使用什么”。从我使用“模型”的经验来看,它适用于三维几何。对二维平面图和草图使用“平面图”也应该有效。

    #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 ). 这个 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。解析引用)。