bim应用二次开发 (bim应用怎么画图)

直接就开始了,从最基础的在线环境使用开始,现在假设大家都有一个bimface账号了,之后会用到。

1、搭建一个入门级别的webpack环境

搭建一个基本的开发环境,这个不是重点哈,我简单介绍下就过了。

1.1、新建项目文件夹

新建一个文件夹作为我们项目的根目录,命名为online_bimface。

mkdir online_bimface
cd online_bimface

1.2、初始化npm

初始化npm,初学者这里参数全部选择默认就好,注意啊,这里默认你的node环境都是安装好的啊。

npm init

1.3、项目配置

在根目录下新建文件夹【src】,其中包含index.html文件、assets文件夹、配置文件webpack.config.js。文件目录截图如下:

bim应用二次开发,bim应用与建模技巧

我把webpack.config.js的内容贴一下:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode:'development', 
    entry:{
        index:path.join(__dirname,'./src/assets/js/index.js'),
    },
    output:{
        path:path.join(__dirname,'./dist'),
        filename:'js/[name].[chunkhash:10].js',
    },
    plugins:[
        new HtmlWebpackPlugin({
            title: 'threeJS',
            template:'./src/index.html',
            filename:'index.html',
            chunks: ['index']
        })
    ],
    module:{
        rules:[
            {
                test:/\.css/,
                use:[
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.html$/,
                loader:'html-loader'
            },
            {
                test:/\.(jpg|png|gif|svg)$/,
                loader:'url-loader',
                options:{
                    name:'[name].[ext]',
                    esModule:false,
                    outputPath:'img'
                }
            }
        ]
    },
    devServer: {
        contentBase: './dist',
        historyApiFallback: true,
        open:true,
        hot: true,
        inline: true,
        port: 8080
    }
}

这里涉及到一些库依赖的安装,我把package.json的内容也贴一下,后期的话,会把代码开源。

{
  "name": "online_bimface",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --watch"
  },
  "keywords": [],
  "author": "taoxiang",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^5.2.6",
    "file-loader": "^6.2.0",
    "html-loader": "^2.1.2",
    "html-webpack-plugin": "^5.3.2",
    "style-loader": "^3.0.0",
    "url-loader": "^4.1.1",
    "webpack": "^5.41.1",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.2"
  }
}

1.4、安装启动

npm install
npm run dev

我们这里设置一下背景色,查看一下运行效果。

#view{
    width:100%;
    height:100%;
    margin:0px;
    padding:0px;
    background-color: black;
}

bim应用二次开发,bim应用与建模技巧

2. 上传模型和转换

大概是这样一个逻辑,我们拿到项目中的bim模型,通过bimface的控制台,把这个模型上传到后台,bimface针对模型做一个轻量化的处理,这时候我们使用这个处理的结果来做bim的应用开发。

bim应用二次开发,bim应用与建模技巧

2.1、上传转换

1、使用注册的账号密码登录到控制台。(没账号的可以免费注册下)

2、创建一个新项目,命名为temp,之后的文章案例都使用这个项目中的资源。

bim应用二次开发,bim应用与建模技巧

3、进入temp项目,上传我们的bim文件,这里我们选用的是情报板这样一个rvt格式的文件。

bim应用二次开发,bim应用与建模技巧

4、上传成功后,我们开始使用转换功能,初学者可以直接选择默认选项即可。

bim应用二次开发,bim应用与建模技巧

5、等待完成后,我们可以在预览窗口查看下详情。

bim应用二次开发,bim应用与建模技巧

2.2、获取viewToken

我们可以在控制台获取到viewtoken,这个作为我们下一步加载模型的唯一依据。

bim应用二次开发,bim应用与建模技巧

3. 场景初始化

3.1、引用组件库

index.html页面引用引用BIMFACE的JavaScript显示组件库。

<script src="https://static.bimface.com/api/BimfaceSDKLoader/BimfaceSDKLoader@latest-release.js" charset="utf-8"></script>

3.2、场景封装

/*
 * @Descripttion: 三维场景
 * @version: 
 * @Author: taoxiang
 * @Date: 2026-03-18T15:59:37+00:00
 * @LastEditors: taoxiang
 * @LastEditTime: 2026-03-18T15:59:37+00:00
 */
class Scene {
  constructor() {
    // 从bimface控制台获取的全局变量
    this.viewToken = '07dc481616c5449d9dda54ecf2c86b78';
    // 操作三维场景的类
    this.viewer3D = null;
    // 存放试图的DOM容器ID
    this.viewContainerID = 'view';
  }
  init () {
    const options = new BimfaceSDKLoaderConfig();
    options.viewToken = this.viewToken;
    BimfaceSDKLoader.load(options, (viewMetaData) => {
      this.successCallback(viewMetaData);
    }, (error) => {
      this.failureCallback(error);
    });
  }
  /**
   * @description 成功回调
   * @param {*} viewMetaData 
   */
  successCallback (viewMetaData) {
    if (viewMetaData.viewType == "3DView") {
      const webAppConfig = new Glodon.Bimface.Application.WebApplication3DConfig();
      const viewContainer = document.getElementById(this.viewContainerID);
      viewContainer && (webAppConfig.domElement = viewContainer);
      const app = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);
      this.viewer3D = app.getViewer();
      this.viewer3D && this.viewer3D.loadModel({
        viewToken: this.viewToken
      });
      this.viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded, () => {
        this.onViewAdded();
      })
    }
  }
  /**
   * @description 失败回调
   * @param {*} error 
   */
  failureCallback (error) {
    console.log(error);
  }
  /**
   * @descripttion: 场景初始化完成
   * @param {*}
   * @return {*}
   */
  onViewAdded () {
    window.onresize = function () {
      this.viewer3D.resize(document.documentElement.clientWidth, document.documentElement.clientHeight);
    }
    this.viewer3D.render();
  }
}
export default new Scene();

3.3、实例化

import scene from './scene.js';
scene.init();

4. 调用接口获取viewToken

在上文中,有些人可能注意到了,这个viewToken是通过bimface控制台去获取的,而且有效期只有12小时,实际项目中这样肯定是不能满足要求的,这需要我们调用bimface的后端接口,获取viewToken的值,并进行更新。接下来介绍怎么通过获取viewToken。

1、打开控制台,获取自己的App证书。在【我的应用】中选择【应用概览】,复制APPKey和AppSecrt。

bim应用二次开发,bim应用与建模技巧

2、新建一个ViewToken类,用于获取viewToken和accessToken。

/*
 * @Descripttion: 
 * @version: 
 * @Author: taoxiang
 * @Date: 2026-03-18T15:59:37+00:00
 * @LastEditors: taoxiang
 * @LastEditTime: 2026-03-18T15:59:37+00:00
 */
import * as $ from 'jquery';
class ViewToken {
    constructor(appKey,appSecret ){
        this.appKey = appKey || '';
        this.appSecret = appSecret || '';
    }
    /**
     * @description 获取字符串appKey:appSecret BASE64编码
     * @returns 
     */
    base64(){
        return window.btoa(this.appKey + ':' + this.appSecret);
    }
    getAccessToken(){
        const url = '/bimface/oauth2/token';
        const method = 'POST';
        const base64 = this.base64();
        const headers = {
            Authorization:'Basic' + ' ' + base64
        }
        let accessToken = '';
        $.ajax({
            url:url,
            method:method,
            headers:headers,
            async:false,
            error:(err)=>{
                console.log(err);
            },
            success:(res)=>{
                console.log(res);
                if(res){
                    if(res.data){
                        if(res.data.token){
                            accessToken = res.data.token;
                        }
                    }
                }
            }
        });
        return accessToken;
    }
    getViewToken(){
        const accessToken = this.getAccessToken();
        const url = '/bimface/view/token';
        const method = 'GET';
        const headers = {
            Authorization:'bearer ' + accessToken
        }
        const fileId = '2165566248569280';
        let viewToken = '';
        $.ajax({
            url:url,
            method:method,
            headers:headers,
            async:false,
            data:{
                fileId : fileId
            },
            error:(err)=>{
                console.log(err);
            },
            success:(res)=>{
                if(res){
                    if(res.data){
                        viewToken = res.data;
                    }
                }
            }
        });
        return viewToken;
    }
}
export default ViewToken;

在scene.js中调用。

bim应用二次开发,bim应用与建模技巧

bim应用二次开发,bim应用与建模技巧

5. 总结一下

1、其实文章有很多细节的东西没有提了,像上文中的模型转换,是有多种模式去选择的,着色、真实、线框等等。

2、viewToken的获取直接在控制台生成只能用12小时,要是用接口的方式调用,能保持7天。

3、webpack工具的使用在这里不是重点,重点是bimface的使用流程。直接把我的项目拉下来用,不用花时间去研究配置。

4、目前笔者接触到的数字孪生、智慧城市项目很多都是都是没有外网环境的,那这种在线使用的方式就不能满足要求了,接下来会去介绍怎么在离线环境下使用,将道理,离线使用也是使用最多的一种场景。