如何获取IFC对象的绝对坐标?

时间:2016-07-16 13:06:56

标签: java geometry coordinates ifc

我正在开发一个操作IFC(Industry Foundation Class)对象的小型Java API。为此,我使用外部工具,如BIMserver

现在,我正在尝试获取作为IfcProduct实例的每个对象的坐标。但是,我只是通过IfcLocalPlacement相对坐标传递给另一个IfcProduct,而不是对象的绝对坐标。因此,每个对象的引用是包含它的实体。

我的目标是计算IFC对象之间的距离(只是为了向用户显示信息,我不是要渲染对象等)。例如,IfcSpaceIfcDistributionControlElement之间的距离。

有没有人知道如何获得每个IFC对象的绝对坐标(而不是相对坐标)?如果你知道一些可以帮助我的API或库,你也可以发送它们。

1 个答案:

答案 0 :(得分:2)

您需要在树中应用/堆叠所有不同的IfcLocalPlacement,直到到达IfcProject容器。您还可以找到解释here in the docs for IFC2X3here in the docs for IFC4 IfcLocalPlacement的规格在我看来没有改变)

  

如果使用相对位置,以下约定将作为默认相对位置应用。这些约定是针对IfcProduct,IfcSpatialStructureElement,IfcElement,IfcAnnotation,IfcGrid,IfcPort的所有五个直接子类型给出的。更详细的放置信息在所提到的这五种类型的子类别中给出。

     
      
  • 对于IfcSpatialStructureElement的子类型,以下约定适用      
        
    • IfcSite应完全置于由IfcProject
    • 的几何表示上下文建立的世界坐标系内   
    • IfcBuilding应相对于IfcSite
    • 的本地展示位置   
    • IfcBuildingStorey应相对于IfcBuilding
    • 的本地展示位置   
  •   
  • 对于IfcGridIfcAnnotation,约定适用于将其置于相对位置      
        
    • 到其容器的本地展示位置IfcSiteIfcBuildingIfcBuildingStorey)      
          
      • 它应该与IfcRelContainedInSpatialStructure包含关系
      • 引用的容器元素相同   
    •   
  •   
  • 对于IfcPort,约定适用于将其置于相对位置      
        
    • 到它所属元素的本地展示位置(IfcElement)      
          
      • 它应该与IfcRelConnectsPortToElement连接关系
      • 引用的元素相同   
    •   
  •   
  • 对于IfcElement,约定适用于它应相对放置:      
        
    • 到其容器的本地展示位置IfcSiteIfcBuildingIfcBuildingStorey)      
          
      • 它应该与IfcRelContainedInSpatialStructure包含关系
      • 引用的容器元素相同   
    •   
    • 到元素组成关系所绑定的IfcElement的本地位置      
          
      • 用于相对于主要组件定位的功能(例如开口),由IfcRelVoidsElementIfcRelProjectsElement表示,
      •   
      • 表示填充开口的元素(如门或窗),由IfcRelFillsElement表示,
      •   
      • 用于覆盖元素的覆盖物,由IfcRelCoversBldgElements表示,
      •   
      • 用于聚合到主要组件的子组件,由IfcRelAggregatesIfcRelNests表示
      •   
    •   
  •