使用ThreeJs搭建BIM模型瀏覽器 IFC篇

前面提到的模型瀏覽器所瀏覽的文件,都是基於自己對Revit文件的進行解析,所導出的蹭文件是JSON結構的。有朋友 提到可否瀏覽IFC文件呢?

小作嘗試確認是可以的。但是IFC存在非常大的問題:

第一,沒有模型結構樹。

第二,沒有構件屬性信息,只有幾何信息。

我把IFC上傳到廣聯達的平臺上也是一樣的,沒屬性沒模型目錄,除了看個外觀,沒其他鳥用。

 

技術路線分享一下吧。:

第1步,從Revit導出IFC。它自帶有導出IFC的菜單,如果要通過代碼實現,也很簡單。

 IFCExportOptions ifcOptions = new IFCExportOptions();
                ifcOptions .FileVersion = IFCVersion.IFC2x3;
                ICollection<ElementId> views = new List<ElementId>();
                views.Add(view.Id);
                document.Export(Path.GetDirectoryName(document.PathName), Path.GetFileNameWithoutExtension(document.PathName),
                     dwgOptions);

第二步,把IFC轉成OBJ+MTL文件。這技術不是我的,我不公開發布。

第三步,參考官方示例,加載OBJ+MTL文件。好吧,這顏色跟我們自定義的JSON並無差別,而且IFC文件或者OBJ文件,遠比自定義的JSON要大許多。就像前面文章說到的,自定義可以隨便導出自己想到的屬性和數據,按自己的業務表組織結構。

核心代碼:

//             var model = mtl的文件名
            var onProgress = function ( xhr ) {
					if ( xhr.lengthComputable ) {
                        var percentComplete = xhr.loaded / xhr.total * 100;
                        progressLoad.value = percentComplete;
						console.log( Math.round( percentComplete, 2 ) + '% downloaded' );
					}
                };
                var onError = function () { };
				THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );
				new THREE.MTLLoader()
					//.setPath( '' )
					.load( model+'.mtl', function ( materials ) {
						materials.preload();
						new THREE.OBJLoader()
							.setMaterials( materials )
							//.setPath( 'models/obj/male02/' )
							.load( model+'.obj', function ( object ) {
								object.position.y = - 95;
                                _this.scene.add( object );
                                resolve('1');
							}, onProgress, onError );
					} );

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章