xBIM 实战01 在浏览器中加载IFC模型文件

一、创建Web项目

  打开VS,新建Web项目,选择 .NET Framework 4.5

选择一个空的项目

新建完成后,项目结构如下:

二、添加webServer访问文件类型

  由于WexXplorer 加载的是 .wexBIM格式的文件或者文件流,所以需要在Web.config文件中添加如下配置

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="100000000" /><!--100MB-->
      </requestFiltering>
    </security>
    <staticContent>
      <mimeMap fileExtension=".wexbim" mimeType="application/octet-stream" />
    </staticContent>
</system.webServer>

如果将应用程序发布到IIS,则在IIS中添加MIME类型,

扩展名为 .wexbim,类型为 application/octet-stream

三、添加js文件与测试模型文件

  从xBIM官方提供的地址中下载 XbimWebUI 项目,项目结构如下

将下列目录添加到项目中

四、添加测试页面

添加一个静态页面 001.html,打开文件,添加以下引用

 <script src="Content/Libs/gl-matrix.js"></script>
    <script src="Content/Libs/webgl-utils.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-product-type.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-state.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-shaders.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-model-geometry.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-model-handle.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-binary-reader.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-triangulated-shape.debug.js"></script>
    <script type="text/javascript" src="Content/Viewer/xbim-viewer.debug.js"></script>

    <script src="Content/Plugins/NavigationCube/xbim-navigation-cube-shaders.debug.js"></script>
    <script src="Content/Plugins/NavigationCube/xbim-navigation-cube.debug.js"></script>
    <script src="Content/Plugins/NavigationCube/xbim-navigation-cube-textures.debug.js"></script>

    <script src="Content/Plugins/NavigationHome/xbim-navigation-home-textures.debug.js"></script>
    <script src="Content/Plugins/NavigationHome/xbim-navigation-home.debug.js"></script>

xbim-viewer.debug.js 依赖 gl-matrix.js 与 webgl-utils.js 2个文件。其他文件根据功能需要再添加引用即可。

在页面的<body></body>中添加

<canvas id="xBIM-viewer" width="600" height="500"></canvas>

canvas 是HTML5中的新标签元素,使用 JavaScript 在网页上绘制图像。

xbim-viewer.js中封装了 xViewer 对象用于绘制呈现模型文件。

完整的代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>xViewer</title>
 5     <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
 6
 7     <script src="Content/Libs/gl-matrix.js"></script>
 8     <script src="Content/Libs/webgl-utils.js"></script>
 9     <script type="text/javascript" src="Content/Viewer/xbim-product-type.debug.js"></script>
10     <script type="text/javascript" src="Content/Viewer/xbim-state.debug.js"></script>
11     <script type="text/javascript" src="Content/Viewer/xbim-shaders.debug.js"></script>
12     <script type="text/javascript" src="Content/Viewer/xbim-model-geometry.debug.js"></script>
13     <script type="text/javascript" src="Content/Viewer/xbim-model-handle.debug.js"></script>
14     <script type="text/javascript" src="Content/Viewer/xbim-binary-reader.debug.js"></script>
15     <script type="text/javascript" src="Content/Viewer/xbim-triangulated-shape.debug.js"></script>
16     <script type="text/javascript" src="Content/Viewer/xbim-viewer.debug.js"></script>
17
18     <script src="Content/Plugins/NavigationCube/xbim-navigation-cube-shaders.debug.js"></script>
19     <script src="Content/Plugins/NavigationCube/xbim-navigation-cube.debug.js"></script>
20     <script src="Content/Plugins/NavigationCube/xbim-navigation-cube-textures.debug.js"></script>
21
22     <script src="Content/Plugins/NavigationHome/xbim-navigation-home-textures.debug.js"></script>
23     <script src="Content/Plugins/NavigationHome/xbim-navigation-home.debug.js"></script>
24     <style>
25
26         html, body {
27             height: 100%;
28             padding: 0;
29             margin: 0;
30         }
31
32         canvas {
33             display: block;
34             border: none;
35             margin-left: auto;
36             margin-right: auto;
37         }
38     </style>
39
40 </head>
41 <body>
42     <div id="msg"></div>
43     <canvas id="xBIM-viewer" width="600" height="500"></canvas>
44     <script type="text/javascript">
45         var check = xViewer.check();
46         if (check.noErrors) {
47             var viewer = new xViewer("xBIM-viewer");
48             viewer.background = [0, 0, 0];//设置模型浏览器的背景色
49
50             viewer.on("error",
51                 function (arg) {
52                     var container = viewer._canvas.parentNode;
53                     if (container) {
54                         container.innerHTML = "<pre style=‘color:red;‘>" + arg.message + "</pre>" + container.innerHTML;
55                     }
56                 });//实时监控异常发生事件
57
58             viewer.load("Content/tests/data/rac_advanced_sample_project.wexbim"); //加载模型文件
59             viewer.start(); //使用此函数可以启动模型的动画。如果在加载几何图形之前启动动画,它将等待内容呈现。此函数绑定到屏幕的浏览器帧速率,因此如果切换到其他选项卡,它将停止消耗任何资源。
60
61             var cube = new xNavigationCube();
62             viewer.addPlugin(cube);// 添加立方体导航
63
64             var home = new xNavigationHome();
65             viewer.addPlugin(home);// 添加首页导航
66
67         } else {
68             alert("您浏览器版本过低,不支持WebGL技术。请升级浏览器。");
69
70             var msg = document.getElementById("msg");
71             for (var i in check.errors) {
72                 var error = check.errors[i];
73                 msg.innerHTML += "<div style=‘color: red;‘>" + error + "</div>";
74             }
75         }
76     </script>
77 </body>
78 </html>

在浏览器中加载 IFC模型文件,使用了先进的WebGL技术,所以它无法在旧浏览器中运行,Chrome或Mozzilla,IE11及以上版本和其他支持该技术的应用程序都可以很好地展示出3D模型效果。

var check = xViewer.check(); 用于检查浏览器是否支持WebGL技术,检查结果返回一个错误信息集合check.noErrors。如果有错误,则循环遍历该错误信息并提示给用户。

viewer.load(); 用于加载目标模型文件,必须是wexbim文件的url或表示wexbim文件的二进制流。

viewer.start(); 使用此函数可以启动模型的动画。如果在加载几何图形之前启动动画,它将等待内容呈现。此函数绑定到屏幕的浏览器帧速率,因此如果切换到其他选项卡,它将停止消耗任何资源。

如果从Revit或者其他工具中导出IFC文件,则使用下面的方法转换为.wexbim格斯的文件

 const string fileName = @"rac_advanced_sample_project.ifc";
 using (var model = IfcStore.Open(fileName, null, -1))
 {
    var context = new Xbim3DModelContext(model);
    context.CreateContext();

    var wexBimFilename = Path.ChangeExtension(fileName, "wexbim");
    using (var wexBimFile = File.Create(wexBimFilename))
    {
       using (var wexBimBinaryWriter = new BinaryWriter(wexBimFile))
       {
         model.SaveAsWexBim(wexBimBinaryWriter);
         wexBimBinaryWriter.Close();
       }
       wexBimFile.Close();
    }
  }

五、在浏览器中查看

在VS中右键点击该文件,选择“在浏览器中查看”

效果如下

原文地址:https://www.cnblogs.com/SavionZhang/p/10984048.html

时间: 2024-10-28 10:19:57

xBIM 实战01 在浏览器中加载IFC模型文件的相关文章

xBIM 实战02 在浏览器中加载IFC模型文件并设置特效

系列目录    [已更新最新开发文章,点击查看详细] 在模型浏览器中加载模型后,可以对模型做一些特殊操作.下图是常用的设置. 都是通过 xbim-viewer.js 中的 API 来设置以达到一定的效果.代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>xViewer</title> 5 <meta http-equiv="content-type" content=&

如何让Chrome浏览器可以加载本地XML文件?

Chrome浏览器的安全限制,禁止本地加载XML等外部文件,如何设置让其可以加载呢? 有两种方法,第一种是在本地服务器环境下浏览,采用 http://localhost/ 的方式浏览你的网页和文件,就 Chrome浏览器的安全限制,禁止本地加载XML等外部文件,如何设置让其可以加载呢? 有两种方法, 第一种是在本地服务器环境下浏览,采用http://localhost/的方式浏览你的网页和文件,就不再有本地安全限制的问题了. 第二种方法,采用设置参数方式来启动Chrome浏览器. 在已安装的Ch

机器学习之保存与加载.pickle模型文件

import pickle from sklearn.externals import joblib from sklearn.svm import SVC from sklearn import datasets #定义一个分类器 svm = SVC() iris = datasets.load_iris() X = iris.data y = iris.target #训练模型 svm.fit(X,y) #1.保存成Python支持的文件格式Pickle #在当前目录下可以看到svm.pic

asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)

自从腾讯微博上线以来,基本上就开始用了,一直到现在,作为一个开发人员,也看到了腾讯微博一直在不停的改变,也不知道大家有没有发现,腾讯微博提供两种加载数据的方式,一种是分页,一种是滚动浏览器滚动条加载数据,分页功能我想大家都做得太多了,今天我与大家分享一下我用滚动条滚动加载数据,小生不才,还望各位大侠指教,呵呵~ 下面开讲: 首先说一下思路,我用的是Jquery,然后通过Jquery的ajax()方法通过 HTTP 请求加载远程数据来实现的,用到Jquery,首先要应用jquery.min.js类

Arcgis for js,Openlayers中加载GeoJSON

概述: 在前文中,讲述了在JAVA环境下如何将shp转换为GeoJSON,在本文,分别讲述在Arcgis for js,Openlayers2和Openlayers3中加载展示GeoJSON. 实现: 1.Openlayers2中加载GeoJSON 在OL2中,可以直接调用OL2的借口实现GeoJSON的加载,代码示例: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT

【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53470872 本文出自[DylanAndroid的博客] Android自定义View实战之仿百度加载动画一种优雅的Loading方式 第一个仿百度加载动画用ObjectAnimator属性动画操作ImageView的属性方法实现 第二个仿百度加载动画第二种实现方式用ValueAnimator原生的ondraw方法实现 第三个扔球动画-水平旋转动画 第四个扔球动画-垂直旋转动

浏览器的加载原理

1.  做前端的话  与浏览器一直在打交道,所以说 首先的弄明白 浏览器的加载渲染原理: —— 页面渲染是什么东西呢------个人通过学习总结为:html代码根据我们写好的css的规则规范显示在浏览器窗口中. 页面加载-直观影响: 用户界面,浏览器引擎,渲染引擎,网络,UI后端,JS解释器,数据存储 webkit渲染主流程:解析html以构件dom树,构建render树,布局render树,绘制render树. ——— 浏览器要显示html结构:首先,必须的从客户端到服务器发送请求,服务器响应

浏览器如何加载和解析CSS&mdash;&mdash;CSS样式来源与层叠规则

关于CSS样式首先得理解浏览器如何加载它们,最终的页面样式是如何呈现的? CSS层叠样式表的关键在于"层叠",会根据选择符的使用而将样式相互叠加或者覆盖. CSS样式表之所有有"层叠"的概念,因为有多个样式来源,不同样式设置来源不同权重, 优先顺序为:1到5权重依次降低 1 HTML标签头内的样式             (不建议使用,结构样式分离) 2 <style>中编写的样式代码        (适合不常更新或很少访问的页面) 3 <link

在Python的Django框架中加载模版的方法

在Python的Django框架中加载模版的方法 为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板, 要使用此模板加载API,首先你必须将模板的保存位置告诉框架. 设置的保存文件就是settings.py. 如果你是一步步跟随我们学习过来的,马上打开你的settings.py配置文件,找到TEMPLATE_DIRS这项设置吧. 它的默认设置是一个空元组(tuple),加上一些自动生成的注释. TEMPLATE_DIRS =