关于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;
};
123456789101112131415161718192021在离线模式下,将 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();
}
123456789101112131415经过上述的对Viewer的相关定制,可实现Viewer真正的单机离线应用。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删