vue 中使用 bimface

本文详细介绍如何在Vue项目中集成BIMFace SDK,包括安装Vue CLI、创建项目、引入BIMFace相关文件及实现页面渲染等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整个过程分为如下几个步骤

1、安装 vue 脚手架

2、创建项目

3、引入 bimface 响应的文件

4、修改 App.vue 文件,实现页面渲染

1. 安装 vue 脚手架

这里还是使用 Vue CLI

通过如下命令,全局安装 vue 脚手架工具

npm install -g @vue/cli

安装好之后,可以通过安装 nrm ,来切换镜像源,也可以直接进行下一步

2. 创建项目

找一个合适的目录,打开 cmd 或者 powshell,键入如下命令,创建名为 bimface-demo 的项目

 vue create bimface-demo

接下来,就是一系列选择了,通过截图的方式演示

通过上下箭头选择 Manually select features ,表示不适用默认配置,而是要自己配置 vue 项目,然后敲击回车

下面使用默认选择即可,然后敲击回车

 下面选择 vue2 版本,然后回车

 下面选择代码检查工具 Eslint 的配置,通过上下箭头选择第3项,然后回车(后面禁用 ESlint 代码检查,如果不是专业前端,就不用配置这个了)

 下面选择第1项目,表示保存代码时,会对代码进行检查(因为后面我们会禁用 ESlint,所以这里无所谓了),然后回车

 下面选择使用默认配置(使用单独的配置文件,而不是将所有配置都写到一个文件中),然后回车

 下面询问,是否将上面的选择保存为模板,下次创建 vue 项目时可以直接使用次模板,我们这里输入 n,然后回车,等待创建项目完成

 经过一段时间等待,看到大概如下的界面,就证明项目创建成功了

 3. 引入 bimface 文件

3.1 运行项目

首先运行一下项目,看看项目创建的是否成功

使用 vs cde(建议使用 vs code,而不是 webstorm 等) 打开刚刚创建的项目 bimface-demo

打开方式是,在 vs cde 的菜单栏,选择文件->打开文件夹,然后选择  bimface-demo 文件夹,然后点击 选择文件夹 即可

打开之后,在编辑器左侧“资源管理器”中,右键单击空白处,选择“在继承终端中打开”,或者使用快捷键 ctrl+`(就是 TAB 键上面的那个键),也可以在编辑器中打开终端,这是一个类似于 cmd 的命令行工具,我们可以在这里键入一些命令,而不用专门开启 cmd 或者 Powshell

 在终端中键入如下命令,然后回车,启动服务

npm run serve

 当出现如下界面,表示启动成功

 此时在,浏览器中,输入上面标红的地址,出现如下界面,就万事大吉了

3.2 引入 bimface 文件

上面都是一些准备工作,下面开始真正的编写代码

因为 广联达 没有提供 bimface 的相关包,如 BimfaceSDKLoader,所以无法通过 npm 的方式在 vue 项目中安装  BimfaceSDKLoader,所以只能通过传统方式引入了

在项目目录中,找到 public 目录中的 index.html,打开

将 demo 中引入的几个 css 和 js 文件,在这里引入,别忘了保存文件

4. 实现页面渲染

首先在项目根目录下,找到 .eslintrc.js 文件,打开,将标红的文件注释,目的是取消 ESLint 对代码的检查,减少很多麻烦

 然后在项目根目录的 src 目录下找到 App.vue 文件,打开,在这个页面中编写代码,渲染 bimface 模型

4.1 修改 html

将 demo 中的项目代码,复制到 vue 文件中的 template 模板中

<template>
  <div id="app">
    <section class="wrap">
      <section class="viewer-box">
        <div class="viewer-2d" id="viewer2d"></div>
        <div class="viewer-3d" id="viewer3d"></div>
      </section>
    </section>
  </div>
</template>

4.2 修改 CSS

将文件中 style 标签中的代码全部删除

4.3 修改 JS

将 demo 中的 js 代码,修改后拷贝到 script 标签中

加入 data 函数,存储组件中需要的数据

 添加 mounted 方法,将如下代码加进来

注意在合适的位置添加 this 关键字,用以表示当前组件

 mounted() {
    let options = new BimfaceSDKLoaderConfig();
    options.viewToken = this.viewToken;
    BimfaceSDKLoader.load(options, this.successCallback, this.failureCallback);
  },

在 methods 中添加两个自定义方法 successCallback 和 failureCallback

  • 注意,方法开始的位置,声明 that 变量用于指代 this,因为在此函数中,某些情况下, this 不再指代当前 vue 组件
methods:{
     successCallback(viewMetaData) {
       let that=this
      // 获取DOM元素
      let dom3d = document.getElementById('viewer3d');
      // 配置参数
      let config = new Glodon.Bimface.Application.WebApplication3DConfig();
      config.domElement = dom3d;
      config.enableViewhouse = false;
      //取消工具条
      config.Toolbars = [];
      // 创建viewer3D对象
      let app = new Glodon.Bimface.Application.WebApplication3D(config);
      // 添加模型
      app.addView(that.viewToken);
      let viewer3D = app.getViewer();

      //模型点击监听事件
      app.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked, function (objectData) {
        componentId = objectData.objectId;
        //根据模型构件ID获取对应图纸的构件ID
        that.viewerDrawing.toDrawingId(that.componentId, getElementId);
        // 定义获取图纸对应图元ID的回调函数
        function getElementId(elementId) {
          if (elementId) {
            //如果当前图纸有对应的模型构件ID,就缩放到对应位置
            that.viewerDrawing.zoomToObject(elementId);
            that.viewerDrawing.update();
          } else {
            //如果当前图纸没有对应的模型构件ID,需进一步判断是否有包含该构件的图纸
            viewer3D.getDrawingListbyId(that.fileId, that.componentId, getDrawing);
            function getDrawing(data) {
              if (data.length) {
                // 取第一张图纸进行二三维联动
                let drawingId = data[0].viewInfo.id;
                that.viewerDrawing.destroy();
                that.viewerDrawing.load(viewToken, drawingId)
              }
            }
          }
        }
      }
      )

      // 监听添加view完成的事件
      app.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded, function () {
        // 渲染3D模型
        app.render();
        //自适应屏幕大小
        window.onresize = function () {
          viewer3D.resize(document.documentElement.clientWidth, document.documentElement.clientHeight - 40)
        }
        //隐藏右上角viewhouse
        //viewer3D.hideViewHouse();
        let options2d = new BimfaceSDKLoaderConfig();
        options2d.viewToken = that.viewToken;
        options2d.viewType = BimfaceViewTypeOption.DrawingView;
        BimfaceSDKLoader.load(options2d, successCallback2d, failureCallback2d);
        function successCallback2d(viewMetaData) {
          let dom2d = document.getElementById('viewer2d');
          let config2d = new Glodon.Bimface.Viewer.ViewerDrawingConfig();
          config2d.domElement = dom2d;
          //添加图纸
          that.viewerDrawing = new Glodon.Bimface.Viewer.ViewerDrawing(config2d);
          let drawingUrl = viewMetaData.drawingUrl;
          //如果是单模型的话,只需要传图纸id
          let _id = 582803;
          that.viewerDrawing.load(that.viewToken, _id);

          //如果是集成模型的话,需要传图纸id和单模型的fileid
          //   let _id =1287057;
          //   let _fileid =1628186476905664;
          //   viewerDrawing.load(viewToken,_id,_fileid);

          // 监听图纸加载完成的事件
          that.viewerDrawing.addEventListener(Glodon.Bimface.Viewer.ViewerDrawingEvent.Loaded, zoomToElement);

          function zoomToElement() {
            if (that.componentId) {
              that.viewerDrawing.toDrawingId(that.componentId, function (elementId) {
                //缩放到对应位置
                that.viewerDrawing.zoomToObject(elementId);
                that.viewerDrawing.update();
                console.log(elementId);
              })
            } else {
              console.log("!componentId");
            }
          }

          that.viewerDrawing.addEventListener(Glodon.Bimface.Viewer.ViewerDrawingEvent.SelectionChanged, function (objectData) {
            if (objectData.length > 0) {
              //根据图纸点击的构件ID获取对应的模型构件ID
              let componentId_2 = that.viewerDrawing.toModelId(objectData[0]);
              viewer3D.clearIsolation();
              //定位到该构件
              viewer3D.setSelectedComponentsById([componentId_2]);
              //是否存在构件
              let isExist = viewer3D.getViewer().getComponentInfoByUserId(componentId_2);
              if (isExist) {
                viewer3D.zoomToSelectedComponents();
              } else {
                viewer3D.render();
              }
            }
          })
        }
        function failureCallback2d(error) {
          console.log(error);
        }
      })
    },
    failureCallback(error) {
      console.log(error);
    }
  }

Bimface 是一种基于云计算的三维建模解决方案,而 Vue 是一个流行的 JavaScript 框架。这两者结合使用可以实现离线打包部署。 首先,我们需要创建一个 Vue 项目,在命令行中运行`vue create project-name`来创建一个新的项目。然后,在项目的根目录下创建一个`static`文件夹,用于存放 Bimface 的相关文件。 接下来,我们需要在 Vue 项目中安装 Bimface 的相关插件。可以使用命令`npm install bimface`来安装 Bimface 的 JavaScript 插件。安装完成后,可以在 Vue 的组件中引入 Bimface 插件,以便在页面中使用。 在打包部署之前,我们需要将 Bimface 的相关文件放到 `static` 文件夹中,包括 Bimface JavaScript 插件文件和 Bimface 所需要的资源文件。可以通过下载 Bimface 插件的压缩包,然后解压并将文件放到对应的文件夹中。 然后,在 Vue 项目的配置文件`vue.config.js`中,可以使用`baseUrl`选项指定 Bimface 相关文件的路径。例如:`baseUrl: '/static/'`。 最后,在命令行中运行`npm run build`来打包 Vue 项目。打包完成后,在生成的`dist`文件夹中会包含所有的项目文件。 现在,我们可以将 dist 文件夹中的所有文件部署到服务器上,即可实现 Bimface Vue 离线打包部署。用户在访问网站时会从服务器获取到离线打包的应用程序,可以在浏览器中正常运行 Bimface 的三维建模功能。 总结起来,Bimface Vue 离线打包部署的步骤包括创建 Vue 项目、安装 Bimface 插件、放置 Bimface 相关文件、配置项目路径、打包项目和部署应用。通过这种方式,我们可以将 Bimface 的功能与 Vue 的优势结合起来,实现离线的三维建模应用部署。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴山却话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值