vue?中使用?bimface詳情
整個(gè)過程分為如下幾個(gè)步驟:
- 1、安裝
vue腳手架 - 2、創(chuàng)建項(xiàng)目
- 3、引入
bimface響應(yīng)的文件 - 4、修改
App.vue文件,實(shí)現(xiàn)頁面渲染
1. 安裝 vue 腳手架
這里還是使用 Vue CLI
通過如下命令,全局安裝 vue 腳手架工具
npm install -g @vue/cli
安裝好之后,可以通過安裝 nrm ,來切換鏡像源,也可以直接進(jìn)行下一步
2. 創(chuàng)建項(xiàng)目
找一個(gè)合適的目錄,打開 cmd 或者 powshell,鍵入如下命令,創(chuàng)建名為 bimface-demo 的項(xiàng)目
vue create bimface-demo
接下來,就是一系列選擇了,通過截圖的方式演示
通過上下箭頭選擇 Manually select features ,表示不適用默認(rèn)配置,而是要自己配置 vue 項(xiàng)目,然后敲擊回車


下面詢問,是否將上面的選擇保存為模板,下次創(chuàng)建 vue 項(xiàng)目時(shí)可以直接使用次模板,我們這里輸入 n,然后回車,等待創(chuàng)建項(xiàng)目完成

3.1 運(yùn)行項(xiàng)目
首先運(yùn)行一下項(xiàng)目,看看項(xiàng)目創(chuàng)建的是否成功
使用 vs cde(建議使用 vs code,而不是 webstorm 等) 打開剛剛創(chuàng)建的項(xiàng)目 bimface-demo
打開方式是,在 vs cde 的菜單欄,選擇文件->打開文件夾,然后選擇 bimface-demo 文件夾,然后點(diǎn)擊 選擇文件夾 即可

打開之后,在編輯器左側(cè)“資源管理器”中,右鍵單擊空白處,選擇“在繼承終端中打開”,或者使用快捷鍵 ctrl+`(就是 TAB 鍵上面的那個(gè)鍵),也可以在編輯器中打開終端,這是一個(gè)類似于 cmd 的命令行工具,我們可以在這里鍵入一些命令,而不用專門開啟 cmd 或者 Powshell

在終端中鍵入如下命令,然后回車,啟動(dòng)服務(wù)
npm run serve
當(dāng)出現(xiàn)如下界面,表示啟動(dòng)成功

3.2 引入 bimface 文件
上面都是一些準(zhǔn)備工作,下面開始真正的編寫代碼
因?yàn)?廣聯(lián)達(dá) 沒有提供 bimface 的相關(guān)包,如 BimfaceSDKLoader,所以無法通過 npm 的方式在 vue 項(xiàng)目中安裝 BimfaceSDKLoader,所以只能通過傳統(tǒng)方式引入了
在項(xiàng)目目錄中,找到 public 目錄中的 index.html,打開
將 demo 中引入的幾個(gè) css 和 js 文件,在這里引入,別忘了保存文件

4. 實(shí)現(xiàn)頁面渲染
首先在項(xiàng)目根目錄下,找到 .eslintrc.js 文件,打開,將標(biāo)紅的文件注釋,目的是取消 ESLint 對(duì)代碼的檢查,減少很多麻煩

然后在項(xiàng)目根目錄的 src 目錄下找到 App.vue 文件,打開,在這個(gè)頁面中編寫代碼,渲染 bimface 模型
4.1 修改 html
將 demo 中的項(xiàng)目代碼,復(fù)制到 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 標(biāo)簽中的代碼全部刪除
4.3 修改 JS
將 demo 中的 js 代碼,修改后拷貝到 script 標(biāo)簽中
加入 data 函數(shù),存儲(chǔ)組件中需要的數(shù)據(jù)

添加 mounted 方法,將如下代碼加進(jìn)來
注意在合適的位置添加 this 關(guān)鍵字,用以表示當(dāng)前組件
mounted() {
let options = new BimfaceSDKLoaderConfig();
options.viewToken = this.viewToken;
BimfaceSDKLoader.load(options, this.successCallback, this.failureCallback);
},
在 methods 中添加兩個(gè)自定義方法 successCallback 和 failureCallback
注意:方法開始的位置,聲明 that 變量用于指代 this,因?yàn)樵诖撕瘮?shù)中,某些情況下, this 不再指代當(dāng)前 vue 組件
methods:{
successCallback(viewMetaData) {
let that=this
// 獲取DOM元素
let dom3d = document.getElementById('viewer3d');
// 配置參數(shù)
let config = new Glodon.Bimface.Application.WebApplication3DConfig();
config.domElement = dom3d;
config.enableViewhouse = false;
//取消工具條
config.Toolbars = [];
// 創(chuàng)建viewer3D對(duì)象
let app = new Glodon.Bimface.Application.WebApplication3D(config);
// 添加模型
app.addView(that.viewToken);
let viewer3D = app.getViewer();
//模型點(diǎn)擊監(jiān)聽事件
app.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked, function (objectData) {
componentId = objectData.objectId;
//根據(jù)模型構(gòu)件ID獲取對(duì)應(yīng)圖紙的構(gòu)件ID
that.viewerDrawing.toDrawingId(that.componentId, getElementId);
// 定義獲取圖紙對(duì)應(yīng)圖元ID的回調(diào)函數(shù)
function getElementId(elementId) {
if (elementId) {
//如果當(dāng)前圖紙有對(duì)應(yīng)的模型構(gòu)件ID,就縮放到對(duì)應(yīng)位置
that.viewerDrawing.zoomToObject(elementId);
that.viewerDrawing.update();
} else {
//如果當(dāng)前圖紙沒有對(duì)應(yīng)的模型構(gòu)件ID,需進(jìn)一步判斷是否有包含該構(gòu)件的圖紙
viewer3D.getDrawingListbyId(that.fileId, that.componentId, getDrawing);
function getDrawing(data) {
if (data.length) {
// 取第一張圖紙進(jìn)行二三維聯(lián)動(dòng)
let drawingId = data[0].viewInfo.id;
that.viewerDrawing.destroy();
that.viewerDrawing.load(viewToken, drawingId)
}
}
}
}
}
)
// 監(jiān)聽添加view完成的事件
app.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded, function () {
// 渲染3D模型
app.render();
//自適應(yīng)屏幕大小
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);
// 監(jiān)聽圖紙加載完成的事件
that.viewerDrawing.addEventListener(Glodon.Bimface.Viewer.ViewerDrawingEvent.Loaded, zoomToElement);
function zoomToElement() {
if (that.componentId) {
that.viewerDrawing.toDrawingId(that.componentId, function (elementId) {
//縮放到對(duì)應(yīng)位置
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) {
//根據(jù)圖紙點(diǎn)擊的構(gòu)件ID獲取對(duì)應(yīng)的模型構(gòu)件ID
let componentId_2 = that.viewerDrawing.toModelId(objectData[0]);
viewer3D.clearIsolation();
//定位到該構(gòu)件
viewer3D.setSelectedComponentsById([componentId_2]);
//是否存在構(gòu)件
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);
}
}
到此這篇關(guān)于vue 中使用 bimface詳情的文章就介紹到這了,更多相關(guān)vue 中使用 bimface內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3使用Element?Plus實(shí)現(xiàn)列表界面的方法步驟
寫后臺(tái)管理的時(shí)候會(huì)有很多列表以及相應(yīng)的條件查詢,下面這篇文章主要給大家介紹了關(guān)于Vue3使用Element?Plus實(shí)現(xiàn)列表界面的方法步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
淺談Vue CLI 3結(jié)合Lerna進(jìn)行UI框架設(shè)計(jì)
這篇文章主要介紹了淺談Vue CLI 3結(jié)合Lerna進(jìn)行UI框架設(shè)計(jì),在此之前先簡單介紹一下Element的構(gòu)建流程,以便對(duì)比新的UI框架設(shè)計(jì)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
基于Vue實(shí)現(xiàn)本地消息隊(duì)列MQ的示例詳解
這篇文章為大家詳細(xì)主要介紹了如何基于Vue實(shí)現(xiàn)本地消息隊(duì)列MQ, 讓消息延遲消費(fèi)或者做緩存,文中的示例代碼講解詳細(xì),需要的可以參考一下2024-02-02
element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn)
這篇文章主要介紹了element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-07-07
Vue中img的src屬性綁定與static文件夾實(shí)例
本篇文章中主要介紹了Vue中img的src屬性綁定與static文件夾實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-05-05
Vue自定義指令實(shí)現(xiàn)彈窗拖拽四邊拉伸及對(duì)角線拉伸效果
小編最近在做一個(gè)vue前端項(xiàng)目,需要實(shí)現(xiàn)彈窗的拖拽,四邊拉伸及對(duì)角線拉伸,以及彈窗邊界處理功能,本文通過實(shí)例代碼給大家分享我的實(shí)現(xiàn)過程及遇到問題解決方法,感興趣的朋友一起看看吧2021-08-08
Vue Element前端應(yīng)用開發(fā)之echarts圖表
在我們做應(yīng)用系統(tǒng)的時(shí)候,往往都會(huì)涉及圖表的展示,綜合的圖表展示能夠給客戶帶來視覺的享受和數(shù)據(jù)直觀體驗(yàn),同時(shí)也是增強(qiáng)客戶認(rèn)同感的舉措之一2021-05-05
淺談vue.js導(dǎo)入css庫(elementUi)的方法
下面小編就為大家分享一篇淺談vue.js導(dǎo)入css庫(elementUi)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03

