当前位置: 首页 > 编程日记 > 正文

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

相关文章:

node 判断文件夹是否存在

判断文件夹是否存在 let filePath path.join(__dirname,../)/download_tmp/fs.exists(filePath, function(exists) {if(!exists){fs.mkdir(filePath,function (err) {if(err){console.log(err)}})}});生成excle文件到本地 业务要求&#xff1a;生成excle文件到本地的路径 #安装…

IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)

以下代码在IE8下运行通过&#xff0c;在IE9中出错&#xff1a;document.createElement(<iframe id"yui-history-iframe" src"../../images/defaults/transparent-pixel.gif" style"position:absolute;top:0;left:0;width:1px;height:1px;visibilit…

数字家庭开发者中心

数字家庭开发者中心 http://www.adobe.com/devnet/devices/digital_home.html转载于:https://www.cnblogs.com/kobo/archive/2010/07/06/1772136.html

LeetCode 1021:Remove Outermost Parentheses

C语言 char * removeOuterParentheses(char * S){int len strlen(S);int j 0;int sum 0;for(int i 0; i < len; i){if (S[i] (){sum 1;}else if (S[i] )){sum - 1;}if (S[i] ( && sum > 1){S[j] (;j;}else if (S[i] ) && sum > 0){S[j] );…

Koa实现下载excel

Koa实现下载excel #安装 node-xlsx npm install node-xlsx --save实现思路&#xff1a;将生成的excel文件流返回到前端 routes router.get(/mp/push_excle, async (ctx, next) > {await Push.pushGroupExcel(ctx).then(function(res) {// let path resctx.set(Content-Ty…

使用 雨林木风 Ghost XP SP3 装机版 YN9.9 安装 Win7 (SP1)

下载Win7 SP1一段时间了&#xff0c;一直没来安装&#xff0c;今天来安装&#xff0c;由于没有DVD刻录机&#xff0c;不能做成光盘安装发现还不是那么方便。后面想到用雨林木风PE光盘来安装&#xff0c;一步一步 【下面假设是将Win7 (SP1) 将要安装到 C: 盘中】 首先使用 雨林木…

2010中国大陆×××指南,满足你的欲望!

中国大陆指南&#xff0c;满足你的欲望&#xff01; 川渝--椒麻鸡,怪味鸡,棒棒鸡,口水鸡,罐罐鸡,辣子鸡 广东--太爷鸡,越秀鸡,花雕鸡,板栗焖仔鸡,客家盐局鸡,湛江鸡,清远鸡广西--桂林黄焖鸡,梧州纸包鸡,啤酒鸡,泉水鸡 山东--沂蒙光棍鸡,德州扒鸡 云南--汽锅鸡,柴把鸡 贵州-…

iframe元素內嵌页面如何去掉继承的html及body背景色/背景图片

【1】去掉背景色&#xff1a;添加如左的样式 filter:Chroma(Colorwhite); <iframe name"Conframe" id"Conframe" name"back" style"background:#2397E2filter:Chroma(Colorwhite)"></iframe> 转载于:https://www.cn…

ListView style

步骤一&#xff1a;在使用的ListView的activiey里使用android&#xff1a;theme“style/Theme的名字” 步骤二&#xff1a;创建Themes.xml 在Themes.xml里定义的使用的样式。如&#xff1a; 步骤三&#xff1a;在themes.xml使用了styles.xml定义的listView的属性&#xff0c;创…

数据结构和算法-栈

栈可以分为 顺序栈: 数组实现链式栈: 链表实现空间复杂度 栈的空间复杂度: 有一个n个元素的栈, 在入栈和出栈过程中, 只需要存储一个临时变量存储空间, 所以空间复杂度是O(1) 并不是说栈有n个元素, 空间复杂度就是O(n), 而是指除了原本的空间外, 算法需要的额外空间 栈要满足后…

nodejs 根据坐标 标记图片上的姓名列

1.安装 npm install canvas或者使用cnpm install canvas var { createCanvas, loadImage } require(canvas);function drawImageRemark(imgurl,rects,res) {loadImage(imgurl).then((image) > {console.log(image.width)const canvas createCanvas(image.width, image.h…

以太网控制芯片DM9000在2440裸机上终于能正确接收数据了(源代码工程已经上传)...

以太网控制芯片DM9000在2440裸机上终于能正确接收数据了&#xff08;源代码工程已经上传&#xff09; (411.47 K) 该附件被下载次数 168 弄了几天DM9000了&#xff0c;一直不能正确接收数据&#xff0c;郁闷了几天&#xff0c;现在终于行了&#xff0c;高兴一下。 参考了这篇…

ajax post 参数说明

转载于:https://www.cnblogs.com/LuoEast/p/8395086.html

Struts2 2.5版本新配置filter-class

在web.xml 默认代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmln…

正则表达式收集

允许为纯英文&#xff0c;数字和汉字及其组合 /^[a-z0-9A-Z\u4e00-\u9fa5]$/ 微信账号 /^(?!_;)(?!.*?_$)[a-zA-Z0-9_;-]{4,23}$/ openid由28位数字或下划线组成 /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]{28}$/

小D学blend-----如何创建自定义的Tooltip控件

运行环境&#xff1a;blend 4.0或者blend 3.0 silverlight 3.0&#xff08;其实我相信步骤应该是差不多的&#xff09; 语言&#xff1a;C# Tooltip类:它是表示一个长方形的小弹出窗口&#xff0c;该窗口在用户将指针悬停在一个控件上时显示有关该控件用途的简短说明。<p&g…

保护SNMP协议服务安全的三个步骤

在启用了SNMP协议服务 情况下&#xff0c;我们如何来确保这个协议的安全呢&#xff1f;首先我们要及时更新这个协议的补 丁&#xff0c;之后还要对这个协议的流程进行过滤。那么具体的实施情况请从下文我们来了解一下吧。 保障SNMP的安全如果某些设备确实有必要运行SNMP,则必须…

使用Python命令创建jenkins的job

目的&#xff1a;通过调用jenkins的命令&#xff0c;动态创建jenkins的job 如何使用&#xff0c;使用Python的脚本&#xff0c;更多API可以进入到官网去查看&#xff0c;http://jenkinsapi.readthedocs.io/en/latest/ 使用Python调用jenkinsAPI&#xff0c;首先需要安装包&…

sublime运行错误

这是由于没有保存文档导致说明&#xff1a;[Finished in 19.4s with exit code 1]-表示执行时间[shell_cmd: python3 -u "/Volumes/B/我的工作文档/case/superman_wap/进单/MSjindan.py"]-表示执行的shell命令[dir: /Volumes/B/我的工作文档/case/superman_wap/进单]…

js 使用filter过滤多重数组

过滤如下数据 var comment_list [{"content":"1111","status":1,"sub_comment_list":[{"content":"11111111","status":1,}] }, {"content":"2222","status":1,"…

一步一步实现自己的模拟控件(9)——消息处理

这次我们将要给Widget增加一些状态&#xff0c;并使其能够接受出消息处理扩展&#xff0c;测试工程中实现了一个按钮的消息处理扩展。 Widget状态&#xff1a; 之前的控件只是绘制了一个边框&#xff0c;并且总是会在窗口中显示。实际上我们往往会希望能够让某个控件显示或者隐…

TWAIN Specification Chapter 4 “Advanced Application Implementation”译——应用程序端的高级实现...

本文是对TWAIN规范的第四章《应用程序端的高级实现》的翻译。因工作需要了解TWAIN&#xff0c;所以顺便译了一下。这是私人工作&#xff0c;您可以参考&#xff0c;但本人不保证不存在翻译的差错或不合宜。如果您发现有不妥的地方&#xff0c;敬请告之我(yedaoq126.com)。 4.1 …

WC2018 CCF程序设计教学比赛记事

WC2018 d5 教师比赛日 亦或者称之为以“递归”为主题的同课异构课程&#xff08;25节课 有8节讲递归&#xff09; 发现强省或者弱省中名校派出的选手还是非常优秀的&#xff0c;这种优秀&#xff0c;从他的教态、自信程度、知识广度都可以看出&#xff0c;但是鉴于是CCF第一…

linux 操作系统级别监控 df 命令

df命令可以查看当前系统磁盘空间的使用情况 命令&#xff1a;df -h du -sh * 查看目录文件暂用磁盘大小 如果磁盘空间不够&#xff0c;需清理磁盘 磁盘速度测试&#xff0c;如果磁盘性能不好&#xff0c;性能测试数据会不准确&#xff08;读写速度&#xff09; 命令&#xff1a…

本地清除电脑缓存后,mongodb数据库无法连接

"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --dbpath "D:\worksoftware\MongoDB\Server\4.2\data" mongod安装的目录---dbpath mongod数据存放位置

将动态aspx页面转换成为静态html页面的几种方法

1. 模版法 该方法历史悠久&#xff0c;具体处理流程为采用一个html模版&#xff0c;将其中的关键字替换为我们希望的信息。 优点: 缺点: 所有的信息都要采取字符串批凑的方式来实现&#xff0c;比如需要一个列表&#xff0c;就需要拼凑字符串。问题是开发周期长&#x…

selenium如何操作HTML5的画布canvas上的元素

话不多少&#xff0c;上图如下&#xff0c;下图红色框内是一个html5的画布&#xff0c;我们要像操作右上角的保存和数据视图的时候是无法公共selenium的普通定位操作到的&#xff0c;那该怎么办呢&#xff1f; 我们先new一个Selenium的actions&#xff0c;然后把鼠标移动到这个…

OOP 面向对象 七大原则 (一)

OOP 面向对象 七大原则 &#xff08;一&#xff09; 大家众所周知&#xff0c;面向对象有三大特征继承封装多态的同时&#xff0c;还具有这七大原则&#xff0c;三大特征上一篇已经详细说明&#xff0c;这一篇就为大家详解一下七大原则&#xff1a; 单一职责原则&#xff0c;…

NodeJS 使用redis实现定时执行方法

NodeJS 使用redis实现定时执行任务 文章目录NodeJS 使用redis实现定时执行任务场景使用Redis定时器解决Redis定时器Redis发布订阅操作nodejs代码主意事项场景 用户下订单后&#xff0c;需要在5分钟内完成支付&#xff0c;否则订单关闭&#xff1b;用户在完成订单后&#xff0c…

Javascript获取页面、屏幕尺寸大小参数

Javascript获取获取屏幕、浏览器窗口 &#xff0c;浏览器&#xff0c;网页高度、宽度的大小网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽)…