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

被折叠的 条评论
为什么被折叠?



