我正在开发一个操作IFC(Industry Foundation Class)对象的小型Java API。为此,我使用外部工具,如BIMserver。
现在,我正在尝试获取作为IfcProduct实例的每个对象的坐标。但是,我只是通过IfcLocalPlacement
将相对坐标传递给另一个IfcProduct,而不是对象的绝对坐标。因此,每个对象的引用是包含它的实体。
我的目标是计算IFC对象之间的距离(只是为了向用户显示信息,我不是要渲染对象等)。例如,IfcSpace
和IfcDistributionControlElement
之间的距离。
有没有人知道如何获得每个IFC对象的绝对坐标(而不是相对坐标)?如果你知道一些可以帮助我的API或库,你也可以发送它们。
答案 0 :(得分:2)
您需要在树中应用/堆叠所有不同的IfcLocalPlacement
,直到到达IfcProject
容器。您还可以找到解释here in the docs for IFC2X3和here in the docs for IFC4 (IfcLocalPlacement
的规格在我看来没有改变):
如果使用相对位置,以下约定将作为默认相对位置应用。这些约定是针对IfcProduct,IfcSpatialStructureElement,IfcElement,IfcAnnotation,IfcGrid,IfcPort的所有五个直接子类型给出的。更详细的放置信息在所提到的这五种类型的子类别中给出。
- 对于
IfcSpatialStructureElement
的子类型,以下约定适用
- 的几何表示上下文建立的世界坐标系内
IfcSite
应完全置于由IfcProject
- 的本地展示位置
IfcBuilding
应相对于IfcSite
- 的本地展示位置
IfcBuildingStorey
应相对于IfcBuilding
- 对于
IfcGrid
和IfcAnnotation
,约定适用于将其置于相对位置
- 到其容器的本地展示位置
IfcSite
,IfcBuilding
,IfcBuildingStorey
)
- 它应该与
引用的容器元素相同IfcRelContainedInSpatialStructure
包含关系- 对于
IfcPort
,约定适用于将其置于相对位置
- 到它所属元素的本地展示位置(
IfcElement
)
- 它应该与
引用的元素相同IfcRelConnectsPortToElement
连接关系- 对于
IfcElement
,约定适用于它应相对放置:
- 到其容器的本地展示位置
IfcSite
,IfcBuilding
,IfcBuildingStorey
)
- 它应该与
引用的容器元素相同IfcRelContainedInSpatialStructure
包含关系- 到元素组成关系所绑定的
IfcElement
的本地位置
- 用于相对于主要组件定位的功能(例如开口),由
IfcRelVoidsElement
和IfcRelProjectsElement
表示,- 表示填充开口的元素(如门或窗),由
IfcRelFillsElement
表示,- 用于覆盖元素的覆盖物,由
IfcRelCoversBldgElements
表示,- 用于聚合到主要组件的子组件,由
IfcRelAggregates
和IfcRelNests
表示