官方案例(十三):3D場景多線段繪製及測座標點距離 ThingJS

#前端# #CAD# #物聯網可視化開發#

  1. 創建參數構造器
  2. 繪製測量線生命週期
  3. 座標點距離計算

簡介:CAD圖紙上測量線段是常見功能,3D場景中如何測量線段呢?不需要選取、合併等手動操作,3D界面的測量自帶量角功能,實現起來更加流暢。

demo鏈接:http://www.thingjs.com/guide/?m=sample

創建參數構造器

js是基於對象的編程語言,創建對象的方式多樣,常見的有JSON格式創建、構造函數創建。ThingJS使用 Constructor () 作爲對象構造器函數,用來構造一種“對象類型”,即創建相同類型的對象框架。
在對象中使用this,指的就是新對象, 當一個新對象被創建時,this 的值會成爲這個新對象。但是this本身不是變量,而是作爲關鍵詞。對象中一切都是屬性, Constructor () 構造器爲對象的屬性賦初始值,JS中可以任意擴展構造參數option,實現動態綁定。例如繪製測量線的構造參數創建如下:

/**
 * 繪製測量線
 */
class DrawLine {
    /**
     * 構造器
     * @param {JSON} option - 構造參數
     */
    constructor(option) {
        this.opts = option;
        this.pointsArr = [this.opts.currPosition];  // 鼠標移動中座標點的集合
        this.coordinatesArr = [this.opts.currPosition];  // 存儲鼠標點擊後坐標點的集合
        this.ePosition = null;  // 存儲觸發事件後鼠標的位置
        this.lineCoor = [this.opts.currPosition];  // 存儲當前兩個座標點
        this.disArr = [];  // 存儲所有座標點與座標點間的距離
        this.numIndex = 0;  // 自增變量
        this.reSetDistance;  // 存儲兩點間的距離
        this.lastStatus = false;  // 判斷是否繪製結束值爲false爲未結束true爲結束
        this.pointsObjArr = [];
        this.rianleyDom = $('#marker');  // 跟隨鼠標的提示
        this.pointCardDom = $('#pointMarker');  // 鼠標移動至節點的提示
        this.init();  // 初始化
        this.appClick();  // 調用方法
    }

繪製測量線生命週期

在BIM系統中,繪製測量線是常見的操作,在線實現自由拖拽,並能夠實現可視化數據的動態顯示。ThingJS平臺輕量化這一測量操作,基於邏輯簡單的繪製生命週期,包括創建對象、測量可視化、展示動態信息。
在這裏插入圖片描述

首先創建節點、線段和節點頂牌這些基本元素,確定起點、各個節點的座標。其中線段屬於所有鼠標點擊後的座標點集合,即測量的總距離。
其次添加註冊事件,就可以進行實際的測量操作步驟。點擊左鍵添加節點,鼠標右鍵結束繪製。如果是多線段測量,移動鼠標可以持續繪製。點擊左鍵創建一個節點,點擊刪除圖標消除此節點。

座標點距離計算

網頁開發如何做到座標點的距離計算?JS邏輯參考ThingJS官方示例,座標點的距離計算使用函數getdistance來調用構造器參數,不僅可以測量單個線段和多線段,連續測量的方法也能輕鬆實現。
在這裏插入圖片描述

 /**
     * 計算兩個座標點間的距離
     */
    getDistance() {
        if (this.lineCoor.length < 2) return;
        if (this.coordinatesArr.length > 2) {
            this.lineCoor.shift();
        }
        this.lineDistance = THING.Math.getDistance(this.lineCoor[0], this.lineCoor[1]);
        this.lineDistance = this.lineDistance.toFixed(2);
        this.disArr.push(this.lineDistance);
        let countNum = 0;
        this.disArr.forEach(v => {
            countNum += parseFloat(v);
        });
        this.lineDistanceAll = countNum.toFixed(2);
    }

若要公開測量詳情信息,一般在2D面板實時展現,鼠標測量的同時,決策分析需求也能通過面板信息滿足。

結尾

3D模型的線測量沿用了2D圖紙的測量方式,不光直線測量,還可以加入弧線測量方式哦!快速測量連續線段是必備的物聯網3D開發技能,快來試試看吧!

關於ThingJS

ThingJS平臺提供物聯網3D可視化組件,讓3D開發更輕鬆!直接Javascript調用3D腳本,基於200個3D開發源碼示例,讓你全面瞭解物聯網可視化開發邏輯。場景搭建-3D腳本開發-數據對接-項目部署的一站式服務讓開發更高效,同20萬個開發者一起成爲數字孿生技術創新者!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章