Autodesk Forge Viewer 真正实现单机离线应用

本文介绍了如何将Autodesk Forge Viewer应用于离线环境,特别是针对移动设备在无网络或限制数据传输的情况。通过修改Viewer前端代码,将在线模式下服务器的请求结果存储到本地,如SQLite数据库、文件系统或LocalStorage。使用Cordova和Sencha Touch作为开发工具,实现了在离线模式下通过读取本地持久化数据来运行Viewer的功能,从而达到真正的单机离线应用效果。

Autodesk Forge Viewer 真正实现单机离线应用)

关于Autodesk Forge Viewer的离线实现,官方已经允许将SVF及相关文档导出,允许用户将SVF等文档部署到私有服务器上,但是本文讨论的是另外一种需求,我们遇见的客户需求是,用户在移动环境中,可能无法接入网络(例如在矿井、仓库等无网络环境)或者不允许大的数据传输等情况,这时我们需要考虑将SVF等文件持久化到手机Sqlite数据库、手机设备的文件系统、浏览器的储存对象(LocalStorage)中。

实现的思路是:

修改Viewer的前端代码,在线模式下,将Viewer像服务器发送的请求返回结果实现本地的持久化。
开发环境:APP是利用Cordova开发的,前端框架使用的是Sencha Touch。

wgs.js
            worker.addEventListenerWithIntercept = function (listener) {
				var me = this;
				//这里APP是利用Cordova开发的,前端框架使用的是Sencha Touch
				var forgeFileStore  = Ext.getStore('forgeFileStore');
				
                var callbackFn = function callbackFn(ew) {
                    if (worker.checkEvent(ew)) return;
					//Online时储存worker传过来的svf文件到手机。
					if(ew.data.debug == "response"){
						forgeFileStore.addFile(ew.data.ckMessage.url);
					}else if(ew.data.debug == "request"){
						forgeFileStore.addCount(ew.data.ckMessage.url);
					}
                    listener(ew);
                };
                if (!interceptListeners) interceptListeners = [];
                interceptListeners.push({ arg: listener, callback: callbackFn });
                worker.addEventListener('message', callbackFn, false);		
                return callbackFn;
            };

在离线模式下,将Web请求修改为读取持久化的数据实现离线的目标

wgs.js
					this.WORKER_FETCHING_SCRIPT = true;
					var forgeFileStore  = Ext.getStore('forgeFileStore');
					if(!forgeFileStore.deviceIsOnline){
						_this.WORKER_FETCHING_SCRIPT = false;
						window.URL = window.URL || window.webkitURL;
						var callbacks = _this.WORKER_FETCHING_CALLBACKS.concat();
						_this.WORKER_FETCHING_CALLBACKS = [];
						for (var i = 0; i < callbacks.length; ++i) {
							callbacks[i].successCB && callbacks[i].successCB();
						};
						_this.WORKER_OFFLINEDATA_URL = forgeFileStore.getStaticFiles(scriptURL);
					}else{
						xhr.send();
					}

经过上述的对Viewer的相关定制,可实现Viewer真正的单机离线应用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值