# JS端调用离线数据包

当离线数据包部署到本地服务器以后,开发者可以按照以下方式集成JavaScript完成整个流程。本质上,离线数据包和在线访问相比,只是数据访问路径发生了变化,因此,进行如下四个设置即可。

# 前端设置

# 1. 下载JSSDK

控制台 (opens new window)的离线数据包页面,能够获取到针对离线数据包的最新版JSSDK,也可以访问开发指南中的JSSDK下载页面 (opens new window),获取最新或历史版本的JSSDK资源。新版的JSSDK可以兼容所有该大版本下的模型离线数据,因此只需要下载一次JSSDK,即可对应多组模型离线数据。 image

# 2. 确定离线数据包的部署路径

在线模式下,通常需要根据fileId、integrateId获取viewToken,以便于确定应该显示哪个模型或图纸。而部署离线数据包之后,该步骤已经省略。 假设,你的离线数据包部署在: http://{你的域名或IP地址}/bimface/cea1da8a380fd215b01bff8c58312839/(注:cea1da8a380fd215b01bff8c58312839是数据包解压后的根目录) 那么,上述路径就是你某个模型数据包的部署目录。

# 3. 引用离线数据包中的JSSDK

改变之前引用JS组件的方式,直接引用数据包中的JSSDK(仅支持相对路径)。由于模型数据与JSSDK分离,因此用户需要根据JSSDK的位置,自行设置路径,例如:

<script src="./jssdk/BimfaceSDKLoader@latest-release.js" charset="utf-8"></script>
# 4. 初始化Viewer的配置

改变BimfaceLoaderConfig的三个配置项:

  • BimfaceLoaderConfig.dataEnvType
  • BimfaceLoaderConfig.sdkPath
  • BimfaceLoaderConfig.path

如:

let BimfaceLoaderConfig = new BimfaceSDKLoaderConfig();
BimfaceLoaderConfig.dataEnvType = BimfaceEnvOption.Local;
BimfaceLoaderConfig.sdkPath = './jssdk';
BimfaceLoaderConfig.path = './viewToken.json';

注意:此处的sdkPath需要根据JSSDK实际的存放路径进行修改。

# 完整案例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>BimfaceApplication</title>
  <style media="screen">
    html,
    body{
      margin: 0;
      padding: 0;
      width: 100%;
      height: 100%;
    }
    #view{
      width: 100%;
      height: 100%;
    }
  </style>
  <script src="../jssdk/BimfaceSDKLoader@latest-release.js" charset="utf-8"></script>
</head>
<body>
  <div id="view"></div>
  <script type="text/javascript">
  let viewer;
  let BimfaceLoaderConfig = new BimfaceSDKLoaderConfig();

  BimfaceLoaderConfig.dataEnvType = BimfaceEnvOption.Local;
  BimfaceLoaderConfig.sdkPath = '../jssdk';
  BimfaceLoaderConfig.path = './viewToken.json';
    
  BimfaceSDKLoader.load(BimfaceLoaderConfig,onSDKLoadSucceeded,onSDKLoadFailed);

  function onSDKLoadSucceeded(viewMetaData){

    if(viewMetaData.viewType == "drawingView"){
        let view = document.getElementById('view');   
        let WebAppConfig = new Glodon.Bimface.Application.WebApplicationDrawingConfig();
        WebAppConfig.domElement = view;
        let app = new Glodon.Bimface.Application.WebApplicationDrawing(WebAppConfig);
        viewer = app.getViewer();
        viewer.loadDrawing({viewMetaData});
        
    }else if(viewMetaData.viewType == "3DView"){
      let view = document.getElementById('view')
      let config = new Glodon.Bimface.Application.WebApplication3DConfig();
      config.domElement = view;
      let eventManager = Glodon.Bimface.Application.WebApplication3DEvent;
      app = new Glodon.Bimface.Application.WebApplication3D(config);
      viewer = app.getViewer();
      viewer.loadModel({viewMetaData});
    }else if(viewMetaData.viewType =="rfaView"){
      let view = document.getElementById('view')
      let config = new Glodon.Bimface.Application.WebApplicationRfaConfig();
      config.domElement = view;
      let eventManager = Glodon.Bimface.Application.WebApplicationRfaEvent;
      app = new Glodon.Bimface.Application.WebApplicationRfa(config);
      viewer = app.getViewer();
      viewer.loadModel({viewMetaData});
    }
  };

  function onSDKLoadFailed(error){
	  console.log("Failed to load SDK!");
  };
  </script>
</body>
</html>