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

Posted

技术标签:

【中文标题】如何获取 IFC 对象的绝对坐标?【英文标题】:How to get absolute coordinates of an IFC object? 【发布时间】:2016-11-19 13:46:25 【问题描述】:

我正在开发一个操作 IFC(工业基础类)对象的小型 Java API。为此,我使用了外部工具,例如BIMserver。

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

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

有谁知道如何获取每个 IFC 对象的绝对坐标(不是相对坐标)?如果您知道一些可以帮助我的 API 或库,也可以发送。

【问题讨论】:

【参考方案1】:

您需要在树中应用/堆叠所有不同的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 的本地位置放置 对于IfcGridIfcAnnotation,约定适用,它应相对放置 到其容器的本地放置(IfcSiteIfcBuildingIfcBuildingStorey) 它应该与IfcRelContainedInSpatialStructure 包含关系所引用的容器元素相同, 对于IfcPort,约定适用于它应相对放置 到它所属元素的本地放置 (IfcElement) 它应该与IfcRelConnectsPortToElement连接关系所引用的元素相同, 对于IfcElement,约定适用,它应相对放置: 到其容器的本地放置(IfcSiteIfcBuildingIfcBuildingStorey) 它应该与IfcRelContainedInSpatialStructure 包含关系所引用的容器元素相同, 到IfcElement 的本地放置,它通过元素组合关系绑定到该位置 对于相对于主要组件(例如开口)定位的特征,如IfcRelVoidsElementIfcRelProjectsElement 表示, 用于填充开口的元素(例如门或窗),由IfcRelFillsElement 表示, 用于覆盖元素的覆盖物,由IfcRelCoversBldgElements 表示, 对于聚合到主组件的子组件,用IfcRelAggregatesIfcRelNests表示)

【讨论】:

以上是关于如何获取 IFC 对象的绝对坐标?的主要内容,如果未能解决你的问题,请参考以下文章

Frame和Bounds的区别以及获取绝对坐标的办法

如何获取元素位置

unity导入fbx模型后获取其中mesh的绝对世界坐标

如何获取div相对于屏幕的坐标?

使用 Ifc2x3 获取对象的所有属性

c# Windows Phone 8.1 如何获取地理坐标对象