Three.js: threejs用のIFCインポーター

作成日 2016年09月24日  ·  62コメント  ·  ソース: mrdoob/three.js

threejs用のifc2x3インポーターを作成しました。 これは非常に実験的ですが、ほとんどのオブジェクトがレンダリングされます。

これはディストリビューションに含めることができるものですか? 私の希望は、誰かがそれをさらに発展させ、最終的にはifc4のサポートも追加することです

インポートされたifcの例:
ifc-imported

最も参考になるコメント

私はPRに投票します😊。 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はIndustry Foundation Classesの略で、ビルディングインフォメーションモデル/管理(BIM)プロジェクトの標準的な交換形式となることを目的としています。 通常これに関連するソフトウェアパッケージは、 RevitArchiCADVisualARQ 、およびその他のかなりの数です。 一般化すると、BIMソフトウェアは、壁、スラブ、屋根、階段、窓などの標準のオブジェクトタイプを提供します。これらはすべて、オペレーターがオブジェクトのパラメーターを定義するファミリ/スタイル定義によって駆動されます。 したがって、CMU、石膏ボード、およびタイルのレイヤーがある壁がある場合は、すべてのレイヤーの厚さを定義できます。 私は何かが変わり、家族/スタイルの定義が変わり、すべてが自動的に更新されます! 現実はそれほど魔法ではありません! 各ソフトウェアベンダーは、インポート/エクスポートhttp://buildingsmart.org/compliance/certified-software/で壁が構成する可能性のあるものの定義を自由に試すことができるため、これは論争の的となる形式です
これはサポートするのに最適な形式であり、設定してくれた@kdilayerに感謝します。 @ johnney88は、

はい、ビューアはThreejsを使用しています。
保存されたファイル 'ifcquery.min.js'はThree.jsによって書き込まれますが、エンコードされています。

ConSciでifcが使用されていることを確認できます。 私は実際にifcコンバーターアプリを使用して、会社のファイルを.mtlファイルを含む.objに変換しましたが、非常によく読み取れます。 とにかく私たちの顧客はifcファイルをアップロードする傾向があるので、仲介者を連れ出すことは本当に役に立ちます

@rhairston ifcコンバーターアプリ?Threejsがうまくロードできるようにifcファイルをobjファイルに変換できます。
私は正しいですか?

これがifcコンバーターアプリですか?

チャイムをしてくれてありがとう!

@kdilayerPRは素晴らしいでしょう。 ThreeCSGも含めてください😊

ここで何か進歩はありますか? 現在、three.jsで使用するためにIFCをDAEに変換しています。これは、three.jsがIFCを直接サポートしている場合に役立ちます。

こんにちはkdilayer、

私は見て、それをさらに進めることに非常に興味があります。

みなさん、こんにちは。

私もそれを見ましたhttps://www.npmjs.com/package/ifc-convert
これにより、IFCをDAE、OBJ、STP、およびIGSに変換できます。

@kdilayer何か進歩はありますか?

@kdilayerここで何か進歩はありますか? three.jsがIFC形式を直接サポートできれば、多くのことを節約できます。

誰もニュースを持っていませんか?

ifcファイルをサポートするようにエディターを微調整しました。
いくつかのスクリーンショットが添付されています。 私はこれにかなり長い間取り組んできました...現在、レンダリングできないIFC2x3ファイルは見ていません...私が試した最大のファイルは180MBです...
素晴らしい。
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

私はPRに投票します😊。 THREE.IFCLoaderは素晴らしい貢献になるでしょう!

この機能も気に入っています。今のところ、 https://github.com/IfcOpenShell/IfcOpenShellを使用してIFCファイルをobjに変換してい

こんにちは。ビューアとローダーにウィンドウを読み込んで、ドアやOHPフィルムなどの複雑なものを入手できるかどうか疑問に思いました。 これまでのところすごいですね! 近い将来、これのバージョンを出す予定があるかどうか知りたいです。

頑張ってください!、更新していただきありがとうございます。

こんにちは@kdilayer 、私たちはあなたのアプリケーションにアクセスできますか?

.ifc形式とthree.js形式のファイルサイズの違いに興味があります。

ありがとう!

@Foosballfan IFCは非常に冗長であるため、サイズとしては興味深い形式ではないと思います。 これは、AutoDeskのようなアーキテクチャソフトウェアの単なる交換フォーマットです。
これはBIMの標準です。 (この種の職業で有名なこの用語をグーグルで検索してください)

@ jean-noelp返信ありがとうございます。

34MBの建物のifcファイルがあり、このデータを可能な限り最小のダウンロードサイズでWebに表示しようとしています。

Unity WebGLを使用すると、約11MBまで下げることができますが、Three.jsを使用してより純粋なWebGLでそれが可能かどうかを確認したいと思います。 うまくいけば、私はさらに小さなダウンロードサイズを達成することができます。

同様の状況での経験はありますか?

@Foosballfanは、ファイルサイズを最小化するために、私が試みる手順は次のとおりです。

  1. OBJに変換
  2. obj-simplifyを実行します
  3. DracoでOBJを圧縮します
  4. THREE.DRACOLoaderでロードします

ファイルをOBJまたは別の形式に変換できない場合は、モデルを単純化するか、gzipを使用する以外にできることはおそらく多くありません...「three.jsを使用した純粋なWebGL」はファイルをレンダリングする方法ですが、ファイルを最初にロードするには、引き続き何らかの形式を使用する必要があります。

@donmccurdyよさそう

試してみて、どうなるか見てみましょう。

私が作ったものは34MBのファイルから220MBであるため、私はもともとobjをあきらめました。

@kdilayerは明らかに彼の実装を共有する閉じます。 #5524のローダーウィッシュリストにタスクとしてIFCLoaderを追加しました。

IFCLoaderがない限り、 IFCファイルをOBJなどの他の形式に変換してみてください。 次のツールでこの変換を実行できるようです: http

https://github.com/IfcOpenShell/IfcOpenShellも参照して

@Foosballfan :IFCは、ジオメトリを圧縮するための最も効率的な方法です。 問題は、それをレンダリングするために必要な手続き型アプローチは、実際には三角形と互換性がないということです。 34MBのIFCは、4GBのトライアングルストリームに簡単に抽出できます。 IFCは、頂点が4つしかないエルボパイプについて説明していますが、レンダリングには数百の三角形が必要です。 OPのレンダリングを一目見れば、スプーンがないことがわかります。 確かに、彼は直線と1軸のトロイダル形状を行うことができます。 ただし、IFC仕様には、2つのベジェスプラインによってスイープされるサーフェスの定義が含まれています。 つまり、実質的に無限の三角形のセットを定義する8つの3D頂点です。 建築家はそのツールを気に入っていますが、数式ではf(x) = yアプローチが許可されていないため、コンピューターで2D表現をレンダリングすることさえ問題があります。
ここで、公式のIFC仕様をご覧ください//www.buildingsmart-tech.org/ifc/IFC4/final/html/schema/ifcgeometryresource/lexical/ifcbsplinesurface.htm

@kdilayerはまだgithubでアクティブですか? 実装を共有しますか? :ok_hand:ありがとう!

私が決めたアプローチは、BimServerを使用してバイナリIFCデータをストリーミングし、それをThreeJSで構築することでした。 Webソケットを介したダウンロードサイズは十分であり、Threeのモデルを完全に制御できます。

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サーバーを使用してサーバーからジオメトリを配信し、フロントエンドでThreeを使用してレンダリングを処理することだったと思います。

少しいじりましたが、最終的には機能しました。

IfcConvertは、Node.jsのIfcConverterです。 .ifcから.dae、.obj、.stp、および.igsに変換します。 まだ試していませんが、説明どおりに機能する場合は、Three.jsに.ifcローダーはもう必要ないと思います。
.ifcには、3Dモデルよりもはるかに多くの情報が含まれていますが、Three.jsに関する限り、3Dモデルのみをインポートする必要があります。
エクスポーターの場合、これは異なります。実際にエクスポートされた3Dモデルと一緒に、自分のBIMライブラリを.ifcファイルでエクスポートしたい場合があるからです。
それは意味がありますか?

別の変換ツールを必要とせずに、 IFCをブラウザに直接ロードすることは依然として興味深いかもしれません。 ただし、前述のnode.jsツールは、 IfcOpenShellの単なるラッパー

IfcConverterを介したインポートワークフローは良いと思います!

それどころか、Three.jsでIfcエディターを構築しない限り、ラムダThree.jsビューアで関連するすべてのifcデータ(アーキテクチャコンポーネント、BIM利害関係者など)が失われるため、ifcエクスポートは私には意味がありません。 。

@ Mugen87ええと、私の知る限り、IfcOpenShellはオンラインのCLIツールであるため、主な付加価値はNodeパッケージです。

@ jean-noelpその通りです。 私は「マスター.ifcファイル」のエクスポートを意味するのではなく、「ライブラリ.ifcファイル」BIMの利害関係者が自分の「マスター.ifcファイル」にインポートすることができました。 たとえば、ガレージドアのメーカーの場合、Three.jsを使用してクライアント(建築家など)のインストールを計画し、BIMオブジェクト(通常はガレージドア)を含むBIMライブラリをエクスポートします。 意味がわかりますか? しかし、とにかく、それぞれの特定のユースケースは非常に具体的であるため、このエクスポーターをThree.jsに組み込む方法はありません(私は推測します)。

ツールを見つけました。IFCは解決できます。
無料ではありません、
しかし、IFC構造の解析は無料でオープンソースです
http://www.apstex.com/

挨拶は、theareは@kdilayer右から任意のニュースではないですか。 彼はソースコードをリリースしたことがありませんか?

------------------元のメッセージ------------------
差出人: "Daniel Ramos" < [email protected]>;
納期:2020年5月28日(木)午後10時8分
宛先: "mrdoob / three.js"[email protected]>;
Cc: "ネットデフィッシュを離れる" < [email protected]>;
件名:Re:[mrdoob / three.js] threejs用IFCインポーター(#9764)

挨拶は、theareは、彼がソースコードをリリースしたことがない?@kdilayer右から任意のニュースではないですか。


コメントしたのでこれを受け取っています。
このメールに直接返信するか、GitHubで表示するか、登録を解除してください。

これについてのニュースはありますか?

おい! 数日前、Three.jsに適用することを考えて、JSにIFCパーサーを実装し始めました。 これは私が暇なときに行う個人的なプロジェクトなので、どれくらいの時間がかかるかわかりません。 しかし、私は今日このスレッドを見て、あなたがそれを面白いと思うかもしれないと思いました。 ここで見つけることができます。

@agviegasはあなたがそれで何をするかを楽しみにしています! PRは本当に歓迎されるかもしれません

それはそう! @agviegasそれを使ってPRを行うと、より多くの人がそれを手伝ってくれるかもしれません😍

残念ながら、ifcimporterでの作業をリリースできませんでしたが、@ agviegasを支援できます。

@mrdoobそれは素晴らしいですね。 私はまだパーサーのコア機能に取り組んでいます。 すでにすべての空間構造要素をロードできるので、すぐにジオメトリの構築を開始します。 PRを行う前に、コードもこれに適合させる必要があると思います。 PR用のコードを準備するためにチェックするための参照はありますか? いつでもこれを行うことができます。 これに関するどんな助けも歓迎されます。

一方、IFC形式は非常に簡単に実装できますが、公式ドキュメントの厳しさのために少し威圧的になる可能性があります。 私はIFCのフォーマットを比較的よく知っていると思いますので、誰かが参加に興味を持っていれば、きっともっと早く準備することができます。 🙂

Captura

PRを行う前に、コードもこれに適合させる必要があると思います。

はい、他のローダーが使用するのと同じインターフェースを使用する必要があります。 たぶん、 MD2Loaderは今のところより単純なリファレンスです。

PRに最適なものがすべて揃っていることを心配する必要はありません。 ドラフトとして持っているものを提出することができ、コードが残りの部分に適合することを確認するのに役立ちます。

いくつかのつまずきとフォーマットとの闘いの後、すでにいくつかの結果があります。 パーサーの最初のバージョンと、いくつかの幾何学的エンティティ(押し出しと境界表現を含む)を実装しました。 まだまだやるべきことがたくさんありますが、これまでの結果には満足しています。 下の画像は、Chromeでスムーズに実行されているRevitによって生成された小さなIFCを示しています。 各ジオメトリインスタンスには、解析されたIFC情報が関連付けられています(実際、各インスタンスの下のシーンでは、そのカテゴリ/ ifcclassに応じてマテリアルがあります)。したがって、プロパティ値(PsetsおよびQsets)を使用してフィルターを作成することは、この時点からアーカイブするのは難しいことではありません。 。 任意のアイデアや提案を歓迎します。 🙂

20201124_screenshot

@agviegasすばらしい!

@agviegas非常によくやった!

プロパティマネジメントのアイデアについて。 これらを今どのように保管していますか? メッシュやジオメトリのuserData同じように?

ほとんどのお客様は、モデリングにHiCadやArchiCADなどのソフトウェアを使用しており、建設作業員にとって非常に重要な大量の情報(熱密度、耐風性、測定値、重量など)を保存しています。

また、解析/読み込みの速度についても非常に興味があります。 実装をテストしたモデルの解析には約5秒かかりますが、ジオメトリを生成するには、DAEモデルに変換するのに約2分かかります。 (時間と経験が不足しているため、サーバー側で変換しています:sweat_smile :。これが、このローダーが「ネイティブに」機能することにとても興奮している理由です)

@haroldiedemaプロパティセットはまだ実装していませんが、現在のデータ構造はJSオブジェクトで構成されており、キーはエクスプレスIDであり、値はメモリにロードされた解析済みオブジェクトです。 エクスプレスIDであった各プロパティは、そのIDを持つオブジェクトへの参照に置き換えられます。 現在の実装では、1つ以上のジオメトリ表現を持つ_IfcProduct_の各インスタンスには、シーンのジオメトリへの参照の配列である_Geometry_と呼ばれる追加のプロパティがあります。 たとえば、各_IfcWallStandardCase_には、_Path _( Line )aから_Body _( Mesh )への参照を持つプロパティ_Geometry_があります。

おそらく、Three.jsの各ジオメトリインスタンスにはエクスプレスIDを含むプロパティがあるため、メモリにロードされたifcエンティティ(および関連情報)を簡単に見つけることができます(シーン内のメッシュをクリックするとfe)。

ユーザー定義のプロパティに関しては、すべてを一緒にバインドするための1つ以上の_IfcRelDefinesByProperties_(または別の間接関係オブジェクト)があります。 おそらく、IfcProductの各インスタンスは、関連する解析済みプロパティセットの配列を含む属性_hasPropertySets_を持つことができます(他のIFCライブラリでこのパターンを確認しました。これは、_IfcRelAggregates_などの他の間接的な関係で行っていることです)。 IFCに基づいて構成されているため、プロパティの量は気になりませんが、そこに着いたらどうなるか見てみましょう。 😅

私はすべてをクライアント側で作成しています。現在、解析には1秒もかからず、最後のシーンの幾何学的な生成は約4秒で示されています。 ファイルが大きくなると、今回は増えることを私は知っています。 ただし、より多くのIFCエンティティをカバーし、実際のプロジェクトからIFCをロードできるようになったら、システムを最適化できることを望んでいます。 🙂誰かがこれのいずれかを掘り下げたい場合に備えて、私は_CONTRIBUTING_ドキュメントを拡張します。

@agviegas素晴らしいですね!

リポジトリのメインブランチのクローンを作成して、お客様のモデルの一部をテストしようとしましたが、残念ながら、すべてのモデルで_ExpressIdが未定義であるというエラーがコンソールに表示されます(レコードの参照に関して、すべてのモデルが100%一貫しているわけではありません)それは実際に存在します)。 一部のCADソフトウェアは、削除されたプロパティへの参照を適切にクリーンアップしないと思います。

これらのモデルのいくつかをあなたと共有することはできますが、それは個人的に行う必要があります。 あなたはで私に達することができる[email protected]あなたはArchiCADのかHiCADでエクスポートモデルのいくつかのより多くのテストケースに興味があれば。

@haroldiedemaプロパティセットはまだ実装していませんが、現在のデータ構造はJSオブジェクトで構成されており、キーはエクスプレスIDであり、値はメモリにロードされた解析済みオブジェクトです。 エクスプレスIDであった各プロパティは、そのIDを持つオブジェクトへの参照に置き換えられます。 現在の実装では、1つ以上のジオメトリ表現を持つ_IfcProduct_の各インスタンスには、シーンのジオメトリへの参照の配列である_Geometry_と呼ばれる追加のプロパティがあります。 たとえば、各_IfcWallStandardCase_には、_Path _( Line )aから_Body _( Mesh )への参照を持つプロパティ_Geometry_があります。

おそらく、Three.jsの各ジオメトリインスタンスにはエクスプレスIDを含むプロパティがあるため、メモリにロードされたifcエンティティ(および関連情報)を簡単に見つけることができます(シーン内のメッシュをクリックするとfe)。

ユーザー定義のプロパティに関しては、すべてを一緒にバインドするための1つ以上の_IfcRelDefinesByProperties_(または別の間接関係オブジェクト)があります。 おそらく、IfcProductの各インスタンスは、関連する解析済みプロパティセットの配列を含む属性_hasPropertySets_を持つことができます(他のIFCライブラリでこのパターンを確認しました。これは、_IfcRelAggregates_などの他の間接的な関係で行っていることです)。 IFCに基づいて構成されているため、プロパティの量は気になりませんが、そこに着いたらどうなるか見てみましょう。 😅

私はすべてをクライアント側で作成しています。現在、解析には1秒もかからず、最後のシーンの幾何学的な生成は約4秒で示されています。 ファイルが大きくなると、今回は増えることを私は知っています。 ただし、より多くのIFCエンティティをカバーし、実際のプロジェクトからIFCをロードできるようになったら、システムを最適化できることを望んでいます。 🙂誰かがこれのいずれかを掘り下げたい場合に備えて、私は_CONTRIBUTING_ドキュメントを拡張します。

User Defined IFC Property Sets解析は非常に簡単です。 私はそれを行うレポを持っています。 私のパーサーはあなたのパーサーほど洗練されていません。

ただし、一部のプロパティはパーサーを壊す傾向があることに気づきました。 私はマメジカを使ったことがないので、あなたのコードがどのようにここに書いてい

とにかく、これまでのところ非常に良い仕事です! 👍

更新:開発全体でのユーザーテストを容易にするために、 Githubページにアプリをデプロイしました。 これには、モバイルおよびタブレットをサポートするためのレスポンシブナビゲーションが含まれます。 また、ここでは、起動時にIFCモデルをロードする代替デプロイを見つけることができます。 シーンをクリアして複数のIFCを追加するためのロジックはまだ実装されていませんが、少なくともナビゲーションがどのように見えるかを確認できます。 解析はクライアントによって行われるため、ロード時間は使用するデバイスによって異なります。 私のラップトップは約5秒で完了しますが、Moto G5Plusはこのシーンに約50秒かかります。 プロジェクト全体をロードする前に実装するクラスはまだありますが、テストファイルに追加するIFCを送ってください。

このページは役に立ちましたか?
0 / 5 - 0 評価