我为threejs编写了一个ifc 2x3导入器。 这是非常实验性的,但大多数对象都会渲染。
这是可以包含在发行版中的东西吗? 我希望有人能进一步开发它并最终增加对 ifc4 的支持
导入的ifc示例:
忘了说这取决于 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) 项目的标准交换格式。 通常与此相关的软件包是Revit 、 ArchiCAD 、 VisualARQ和其他一些软件包。 在我概括的过程中,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......
惊人的。
嘿,很棒的工作!
这可以直接从主分支访问还是 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最小化文件大小,我会尝试的步骤是:
如果文件无法转换为 OBJ 或其他格式,那么除了简化模型或使用 gzip 之外,您可能没有什么可以做的……“使用three.js 的纯WebGL”是一种呈现文件的方式,但是您仍然必须使用某种格式或其他格式来首先加载文件。
@donmccurdy看起来很棒,谢谢!
我会试一试,看看结果如何。
我最初放弃了 obj,因为我制作的 obj 是 34MB 文件中的 220MB。
关闭问题,因为@kdilayer显然不愿意分享他的实现。 我已将IFCLoader
作为任务添加到 #5524 中的加载程序愿望清单中。
只要没有IFCLoader
,尝试将IFC
文件转换为其他格式,如OBJ
。 看起来以下工具可以执行此转换: http :
@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"
抄送: "漏网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格式比较了解,所以如果有人有兴趣参加,我们肯定可以尽快准备好。 🙂
在对格式进行了几次绊倒和挣扎之后,已经有了一些结果。 我已经实现了解析器的第一个版本,以及一些几何实体(包括挤压和 b-reps)。 还有很多工作要做,但我对目前的结果感到满意。 下图显示了在 Chrome 中流畅运行的 Revit 生成的小型 IFC。 每个几何实例都有相关的解析 IFC 信息(事实上,在下面的场景中,每个实例都有一个取决于其类别/ifcclass 的材质),因此使用属性值(Psets 和 Qsets)创建过滤器应该不难从这一点开始归档. 欢迎任何想法或建议。 🙂
@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_(aMesh
)。可能 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 以将它们添加到测试文件中。
最有用的评论
我投票给公关😊。
THREE.IFCLoader
将是一个巨大的贡献!