Three.js: Threejs的IFC进口商

创建于 2016-09-24  ·  62评论  ·  资料来源: mrdoob/three.js

我为threejs编写了一个ifc 2x3导入器。 这是非常实验性的,但大多数对象都会渲染。

这是可以包含在发行版中的东西吗? 我希望有人能进一步开发它并最终增加对 ifc4 的支持

导入的ifc示例:
ifc-imported

最有用的评论

我投票给公关😊。 THREE.IFCLoader将是一个巨大的贡献!

所有62条评论

忘了说这取决于 ThreeCSG

没听说过这种格式。 一般用在什么地方?

据我所知,它主要用于建筑业务,建筑建模。 由 Autocad、Revit、Tekla 和 Solibri 支持,仅举几例。

我看我看!
需要 ThreeCSG 做什么?

例如; Wall 对象(threejs 中的挤压形状)可能有一个开口。 我找到的最简单的解决方案是使用 ThreeCSG。 也用于其他情况,如 IfcBooleanResult。

链接到 IfcOpeningElement 规范:
http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ifcproductextension/lexical/ifcopeningelement.htm

你可以参考
http://www.ifcquery.com

@mrdoob ,IFC 代表行业基础类,旨在成为建筑信息模型/管理 (BIM) 项目的标准交换格式。 通常与此相关的软件包是RevitArchiCADVisualARQ和其他一些软件包。 在我概括的过程中,BIM 软件提供了标准对象类型,例如墙壁、楼板、屋顶、楼梯、窗户等,所有这些都由族/样式定义驱动,操作员在其中定义对象的参数。 因此,如果我有一堵带有一层 CMU、石膏板和瓷砖的墙,我可以定义所有层的厚度。 我改变了一些东西,我改变了家庭/风格的定义,一切都会自动更新! 现实没有那么神奇! 这是一种有争议的格式,因为每个软件供应商都可以自由地定义墙在导入/导出中可能构成的内容http://buildingsmart.org/compliance/certified-software/。
这是一种很好的支持格式,我感谢@kdilayer设置它。 @johnney88是那个使用 Threejs 的查看器吗?

是的,查看器使用 Threejs。
保存的文件“ifcquery.min.js”是由 Three.js 编写的,但它是经过编码的。

我可以确认在 ConSci 中使用了 ifc。 我实际上使用了一个 ifc 转换器应用程序将我的公司文件转换为 .objs 和 .mtl 文件,它们读起来非常好。 所以去掉中间人会很有帮助,因为我们的客户无论如何都倾向于上传 ifc 文件

@rhairston一个 ifc 转换器应用程序?它可以将 ifc 文件转换为 obj 文件,以便 Threejs 可以很好地加载它。
我对吗?

是一个 ifc 转换器应用程序吗?

感谢大家的参与!

@kdilayer公关会很棒。 请也包括 ThreeCSG 😊

这里有什么进展吗? 我们目前正在将 IFC 转换为 DAE 以与three.js 一起使用,如果three.js 直接支持IFC,我们会喜欢它。

嗨 kdilayer,

我非常有兴趣看一看并进一步研究它。

大家好你们好,

我也看到了https://www.npmjs.com/package/ifc-convert
有了它,您可以将 IFC 转换为 DAE、OBJ、STP 和 IGS。

@kdilayer 有什么进展吗?

@kdilayer这里有任何进展吗? 如果three.js可以直接支持IFC格式,会省很多事。

没人有消息吗?

我调整了编辑器以支持 ifc 文件。
附上几张截图。 我已经为此工作了很长时间......目前我还没有看到任何无法渲染的 IFC 2x3 文件......我尝试过的最大文件是 180 MB......
惊人的。
screen shot 2017-11-15 at 19 19 31
screen shot 2017-11-15 at 19 19 20
screen shot 2017-11-15 at 19 19 08
screen shot 2017-11-15 at 19 18 45

嘿,很棒的工作!
这可以直接从主分支访问还是 IFC 支持的调整代码位于其他地方?

耶! 真棒! 我们如何才能访问此加载程序代码? :o

我投票给公关😊。 THREE.IFCLoader将是一个巨大的贡献!

我们也很喜欢这个功能,现在,我正在使用https://github.com/IfcOpenShell/IfcOpenShell将 IFC 文件转换为 obj,但仍然没有解析一些更复杂的几何图形,所以有时是对象,而不是 100 % 完全的。

嗨,我想知道您是否能够在查看器和加载器中加载一些复杂的东西,例如门和透明胶片。 到目前为止看起来很棒! 我很好奇你是否计划在不久的将来推出任何版本。

祝你好运!感谢更新。

@kdilayer ,我们可以访问您的应用程序吗?

我很想知道 .ifc 和three.js 格式之间的文件大小差异。

谢谢!

@Foosballfan我认为 IFC 不是一种有趣的大小格式,因为它非常冗长。 它只是 AutoDesk 等架构软件的一种交换格式。
这是BIM的一个标准。 (要求谷歌这个在这类专业中很有名的词)

@jean-noelp 感谢您的回复。

我有一个 34MB 的建筑物的 ifc 文件,我正在尝试以尽可能小的下载大小在网络上显示此数据。

使用 Unity WebGL,我可以将其减小到大约 11MB,但想看看是否可以使用 Three.js 使用更纯的 WebGL。 希望我可以实现更小的下载大小。

你有类似情况的经验吗?

@Foosballfan最小化文件大小,我会尝试的步骤是:

  1. 转换为 OBJ
  2. 通过obj-simplify运行
  3. Draco压缩 OBJ
  4. 使用 THREE.DRACOLoader 加载

如果文件无法转换为 OBJ 或其他格式,那么除了简化模型或使用 gzip 之外,您可能没有什么可以做的……“使用three.js 的纯WebGL”是一种呈现文件的方式,但是您仍然必须使用某种格式或其他格式来首先加载文件。

@donmccurdy看起来很棒,谢谢!

我会试一试,看看结果如何。

我最初放弃了 obj,因为我制作的 obj 是 34MB 文件中的 220MB。

关闭问题,因为@kdilayer显然不愿意分享他的实现。 我已将IFCLoader作为任务添加到 #5524 中的加载程序愿望清单中。

只要没有IFCLoader ,尝试将IFC文件转换为其他格式,如OBJ 。 看起来以下工具可以执行此转换: http :

另见https://github.com/IfcOpenShell/IfcOpenShell

@Foosballfan :IFC 是压缩几何的最有效方法。 问题是,渲染它所需的程序方法与三角形并不真正兼容。 一个 34MB 的 IFC 可以轻松提取到 4GB 的三角形流。 IFC 描述了一个只有 4 个顶点的弯管,但渲染它需要数百个三角形。 一看 OP 的效果图,我就知道没有勺子。 当然,他可以做直线和单轴环形。 但是,IFC 规范包括由两个贝塞尔样条扫描的曲面的定义。 因此,它是定义了一组几乎无限的三角形的 8 个 3D 顶点。 建筑师喜欢这个工具,但即使在计算机上渲染它的 2D 表示也是有问题的,因为公式不允许f(x) = y方法。
在这里,看看官方 IFC 规范: http :

@kdilayer你还在 github 上活跃吗? 你想分享你的实现吗? :ok_hand: 谢谢!

我解决的方法是使用 BimServer 来流式传输二进制 IFC 数据,然后在 ThreeJS 中构建它。 通过网络套接字的下载大小令人满意,我可以完全控制三中的模型。

您可以看看 BimViewer 的工作方式作为起点。

任何答案?

@Joao-b4 怎么样?

关于可能的 IFC 装载机

啊,我想这取决于@kdilayer...

我相信@kdilayer将一无所有,因为自发布以来已经 3 年了,没有任何回应,也没有他的个人资料上的活动。
我不明白加载器的创建是如何工作的,我在库中有一点知识,我前阵子用过它,我会有一些创建加载器的链接,我可以在其中获得足够的配置和知识未来。

我在这里概述了THREE.IFCLoader的基本脚手架。 编写加载程序时最困难的部分是真正理解相应的 3D 格式。 只有这样您才能解析格式并将几何和/或材料数据转换为three.js实体(例如THREE.BufferGeometry )。 我建议研究一个或多或少简单的加载器,如THREE.PLYLoader以了解这个过程。 当然还有 IFC 标准 (https://www.iso.org/standard/51622.html)

谢谢,ifc 加载器真的很有用,我现在需要一个,我正在使用他们上面提到的转换为 OBJ,但我认为这不是最好的方法

这是 1.5 年前的事了,所以我的记忆很生疏,但我相信我们的解决方案是使用 bim 服务器从服务器提供几何图形,然后在前端使用三来处理渲染。

这花了一些时间,但最终奏效了。

IfcConvert是 Node.js 的 IfcConverter。 它从 .ifc 转换为 .dae、.obj、.stp 和 .igs。 我还没有尝试过,但如果它像描述的那样工作,我想我们将不再需要 Three.js 中的任何 .ifc 加载器,对吧?
.ifc 包含的信息远不止 3D 模型,但就 Three.js 而言,应该只导入 3D 模型。
对于出口商来说,情况会有所不同,因为人们可能希望将自己的 BIM 库与实际导出的 3D 模型一起导出到 .ifc 文件中。
是否有意义 ?

在不需要单独的转换工具的情况下直接将IFC加载到浏览器中仍然很有趣。 但是,提到的 node.js 工具只是IfcOpenShell的包装器。 所以它并没有做一些真正的新东西......

我认为通过 IfcConverter 的导入工作流程会很好!

相反,ifc 导出对我来说没有任何意义,因为您会在 lambda Three.js 查看器中丢失所有相关的 ifc 数据(架构组件、BIM 利益相关者...),除非使用 Three.js 构建 Ifc 编辑器.

@Mugen87嗯,主要的附加值是 Node 包,据我所知 IfcOpenShell 是一个在线 CLI 工具。

@jean-noelp 你是对的。 我的意思不是导出“主 .ifc 文件”,而是“库 .ifc 文件”,BIM 利益相关者可以在他们自己的“主 .ifc 文件”中导入。 例如,您是车库门制造商,使用 Three.js 为您的客户(例如建筑师)规划安装并导出包含您的 BIM 对象(通常是车库门)的 BIM 库。 你明白我的意思吗? 但无论如何,没有办法在 Three.js 中构建这个导出器,因为每个特定的用例都太具体了(我猜)。

我找了个TOOL,IFC可以解决,
不是免费的,
但是解析IFC结构是免费开源的
http://www.apstex.com/

您好,@kdilayer没有任何消息吧? 他从来没有发布过源代码?

------------------ 原始邮件 ------------------
发件人: "Daniel Ramos"<[email protected]>;
发送时间: 2020年5月28日(星期四) 晚上10:08
收件人: "mrdoob/three.js"[email protected]>;
抄送: "漏网de鱼"<[email protected]>;"Comment"<[email protected]>;
主题: Re: [mrdoob/three.js] IFC importer for threejs (#9764)

Greetings, theare aren't any news from @kdilayer right? he never released the source code?


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

有什么消息吗?

嘿! 几天前,我开始在 JS 中实现一个 IFC 解析器,并将其应用到 Three.js 的想法。 这是我在业余时间做的一个个人项目,所以我不知道需要多长时间。 但是,我今天看到了这个线程,并认为您可能会感兴趣。 你可以在这里找到它。

@agviegas期待你用它做什么! PR真的很受欢迎

的确! @agviegas如果你用它做公关,我们可能会得到更多人的帮助

不幸的是,我无法在 ifcimporter 上发布我的工作,但我可以帮助@agviegas

@mrdoob听起来不错。 我仍在研究解析器的核心功能; 它已经可以加载所有空间结构元素,我将很快开始构建几何。 我想在做 PR 之前,代码也需要适应这个。 是否有任何参考资料可供检查以准备 PR 的代码? 我们可以随时执行此操作。 任何有关这方面的帮助将受到欢迎。

另一方面,IFC 格式非常容易实现,尽管由于官方文档的严苛,它可能有点令人生畏。 我认为我对IFC格式比较了解,所以如果有人有兴趣参加,我们肯定可以尽快准备好。 🙂

Captura

我想在做 PR 之前,代码也需要适应这个

是的,它应该使用与其他加载程序相同的接口。 也许MD2Loader现在是更简单的参考。

不要担心让 PR 的一切都完美无缺。 您可以提交您拥有的草稿,我们可以帮助确保代码适合其余部分。

在对格式进行了几次绊倒和挣扎之后,已经有了一些结果。 我已经实现了解析器的第一个版本,以及一些几何实体(包括挤压和 b-reps)。 还有很多工作要做,但我对目前的结果感到满意。 下图显示了在 Chrome 中流畅运行的 Revit 生成的小型 IFC。 每个几何实例都有相关的解析 IFC 信息(事实上,在下面的场景中,每个实例都有一个取决于其类别/ifcclass 的材质),因此使用属性值(Psets 和 Qsets)创建过滤器应该不难从这一点开始归档. 欢迎任何想法或建议。 🙂

20201124_screenshot

@agviegas 太棒了

@agviegas 做得很好!

至于物业管理的想法。 你现在如何储存这些? 就像我想的网格或几何体上的userData

我们的大多数客户使用 HiCad 或 ArchiCAD 等软件进行建模,他们存储了大量对建筑工人非常重要的信息(热密度、抗风性、测量值、重量等)。

我也很好奇解析/加载速度。 我测试过的模型解析需要大约 5 秒钟,但要生成几何图形,该过程需要近 2 分钟才能转换为 DAE 模型。 (由于缺乏时间和经验,我正在服务器端转换它 :sweat_smile:,这就是为什么我对这个加载器能够“本地”工作感到如此兴奋)

@haroldiedema我还没有实现属性集,但当前的数据结构由一个 JS 对象组成,其中键是快速 ID,值是加载到内存中的解析对象。 每个作为快速 ID 的属性都替换为对具有该 ID 的对象的引用。 在当前的实现中,具有一个或多个几何表示的 _IfcProduct_ 的每个实例都有一个名为 _Geometry_ 的附加属性,它是对场景几何的引用数组。 例如,每个 _IfcWallStandardCase_ 都有一个属性 _Geometry_,其中引用了 _Path_(a Line )a 到 _Body_(a Mesh )。

可能 Three.js 的每个几何实例都有一个包含 express ID 的属性,所以找回加载在内存中的 ifc 实体(以及相关信息)会很容易(点击场景中的网格时是fe)。

至于用户定义的属性,将有一个或多个_IfcRelDefinesByProperties_(或另一个间接关系对象)将所有内容绑定在一起。 也许 IfcProduct 的每个实例都可以有一个属性 _hasPropertySets_,其中包含相关解析属性集的数组(我在其他 IFC 库中看到了这种模式,这就是我对其他间接关系(例如 _IfcRelAggregates_)所做的)。 我不担心财产的数量,因为它们将根据 IFC 进行结构化,但让我们看看当我到达那里时情况如何。 😅

我正在客户端制作所有内容,目前解析时间不到一秒,最后一个场景的几何生成显示大约 4 秒。 我知道这次文件越大,时间会越长; 但是,我希望能够在我覆盖更多 IFC 实体并且可以从实际项目中加载 IFC 时优化系统。 🙂 我将扩展 _CONTRIBUTING_ 文档,以防有人想深入了解其中的任何内容。

@agviegas听起来很棒!

我试过克隆你的 repo 的主分支来测试我们的一些客户模型,但不幸的是,他们中的每一个都会在控制台中产生一个关于 _ExpressId 未定义的错误(并非所有模型在引用记录时都是 100% 一致的实际存在)。 我认为某些 CAD 软件不能很好地清理对已删除属性的引用。

我可以与您分享其中一些模型,但我们必须私下进行。 如果您对使用 ArchiCAD 或 HiCAD 导出的模型的更多测试用例感兴趣,可以通过[email protected]与我联系。

@haroldiedema我还没有实现属性集,但当前的数据结构由一个 JS 对象组成,其中键是快速 ID,值是加载到内存中的解析对象。 每个作为快速 ID 的属性都替换为对具有该 ID 的对象的引用。 在当前的实现中,具有一个或多个几何表示的 _IfcProduct_ 的每个实例都有一个名为 _Geometry_ 的附加属性,它是对场景几何的引用数组。 例如,每个 _IfcWallStandardCase_ 都有一个属性 _Geometry_,其中引用了 _Path_(a Line )a 到 _Body_(a Mesh )。

可能 Three.js 的每个几何实例都有一个包含 express ID 的属性,所以找回加载在内存中的 ifc 实体(以及相关信息)会很容易(点击场景中的网格时是fe)。

至于用户定义的属性,将有一个或多个_IfcRelDefinesByProperties_(或另一个间接关系对象)将所有内容绑定在一起。 也许 IfcProduct 的每个实例都可以有一个属性 _hasPropertySets_,其中包含相关解析属性集的数组(我在其他 IFC 库中看到了这种模式,这就是我对其他间接关系(例如 _IfcRelAggregates_)所做的)。 我不担心财产的数量,因为它们将根据 IFC 进行结构化,但让我们看看当我到达那里时情况如何。 😅

我正在客户端制作所有内容,目前解析时间不到一秒,最后一个场景的几何生成显示大约 4 秒。 我知道这次文件越大,时间会越长; 但是,我希望能够在我覆盖更多 IFC 实体并且可以从实际项目中加载 IFC 时优化系统。 🙂 我将扩展 _CONTRIBUTING_ 文档,以防有人想深入了解其中的任何内容。

解析User Defined IFC Property Sets非常简单。 我有一个可以做到这一点的回购。 我的解析器没有你的那么复杂。

但是,我注意到某些属性往往会破坏解析器。 我没有使用chevrotain ,所以我不确定你的代码会如何。 我在这里写了更多关于这些问题的文章。 希望它对你有用。

无论如何,到目前为止做得很好! 👍

更新:我已在Github 页面中部署了该应用程序,以便在整个开发过程中更轻松地进行用户测试。 这包括支持移动和平板电脑的响应式导航。 此外,在这里您可以找到在启动时加载 IFC 模型的替代部署; 清除场景和添加多个 IFC 的逻辑尚未实现,但至少您可以看到导航的外观。 解析由客户端进行,因此加载时间取决于所使用的设备。 我的笔记本电脑在大约 5 秒内完成,而我的 Moto G5 Plus 需要大约 50 秒才能完成这个场景。 在加载完整项目之前仍有一些类需要实现,但请随时向我发送任何 IFC 以将它们添加到测试文件中。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

makc picture makc  ·  3评论

fuzihaofzh picture fuzihaofzh  ·  3评论

Horray picture Horray  ·  3评论

seep picture seep  ·  3评论

danieljack picture danieljack  ·  3评论