反饋已提交

網絡繁忙

FVS三維組件API

適用場景:安裝了「FineVis資料視覺化」插件的使用者,可參考本文了解 FVS 範本的相關API。

版本

報表伺服器版本插件版本功能變動
11.0V1.0.0最低版本要求
11.0.16V1.18.1

新增三維組件漫遊動畫相關API:

getRoamAnimations 、playRoamAnimations 、updateRoamAnimationAction

getDataLayers

方法getDataLayers()獲取三維組件所有的資料圖層
     參數--
  回傳值DataLayer[]

interface DataLayer {

  /**

   * 圖層是否顯示

   */

  visible: boolean;

  /**

   * 設定圖層顯示或隱藏

   */

  setVisible: (visible: boolean) => void;

}

     範例獲取某個三維組件的全部資料圖層:
duchamp.getWidgetByName("三維組件名稱").getDataLayers();


  應用範例

FVS點選隱藏/顯示資料圖層

    行動端不支援行動端

getDataLayerByName

方法getDataLayerByName()獲取某個三維組件的某個具體資料圖層
     參數name:string資料圖層名稱,字串
  回傳值DataLayer

interface DataLayer {

  /**

   * 當前圖層是否顯示

   */

  visible: boolean;

  /**

   * 設定當前圖層顯示或隱藏

   */

  setVisible: (visible: boolean) => void;

}

     範例獲取某個三維組件的「圖層1」資料圖層:
duchamp.getWidgetByName("三維組件名稱").getDataLayerByName("圖層1");


  應用範例

FVS點選隱藏/顯示資料圖層

   行動端不支援行動端

animateSceneTime

方法animateSceneTime(

{

from:number,

to:number,

duration:number,

})

設定自訂模型組件的場景時間動態變化

注:僅支援 FVS三維自訂場景組件

     參數

from:number

to:number

duration:number

from:場景變化的開始時間,整數,最小為 0 ,無上限

to:場景變化的結束時間,整數,必須大於 from 

duration:場景完成變化的時長,單位 ms

  回傳值--
     範例

自訂模型從第一天的 14:00 開始到 第二天的 14:00 結束,變化時長為 3 秒:

duchamp.getWidgetByName("自訂模型1_頁面1").animateSceneTime({
     from: 14//從預設14點開始
     to: 38//到第二天的14點結束
     duration: 3000 //變化時長為 3 秒
});

在上述場景的基礎上,開啟循環變化:

注:暫無停止場景時間變化API。

setInterval(function(){
duchamp.getWidgetByName("自訂模型1_頁面1").animateSceneTime({
     from: 14,
     to: 38,
     duration: 3000
});         
},2000)      


  應用範例

FVS自訂模型組件場景時間

   行動端不支援行動端

getMeshByName

方法getMeshByName(name)

獲取三維組件中的模型物件

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數

name:string

模型mesh物件名稱
  回傳值Object

name:模型mesh物件名稱

visible: 可見性

scaling: 縮放比例

rotation: 旋轉角度

position: 位置

focus: 聚焦模型位置

     範例

範例:獲取某個模型物件的縮放比例

duchamp.getWidgetByName("組件名稱").getMeshByName("模型名稱").scaling


  應用範例

-

   行動端不支援行動端

注:下列所述 setVisible 、setScaling 、setRotation 、setPosition 、focus API均需在獲取模型物件之後使用。

setVisible

方法setVisible(visible:boolean)設定模型物件是否可見
     參數

visible:boolean

是否可見,布林型

  • true:可見

  • false:不可見

  回傳值void

viod

     範例

範例:設定某個三維組件中某個模型物件不可見

duchamp.getWidgetByName("組件名稱").getMeshByName("模型名稱").setVisible(false);


  應用範例

-

   行動端不支援行動端

setScaling

方法setScaling(NumberArray3)設定模型物件的縮放比例
     參數

NumberArray3

縮放比例的值:[X,Y,Z]

  回傳值void

viod

     範例

範例:設定某個三維組件中某個模型物件的縮放比例

duchamp.getWidgetByName("組件名稱").getMeshByName("模型名稱").setScaling([10,10,10]);


  應用範例-
   行動端不支援行動端

setRotation

方法setRotation(NumberArray3)設定模型物件的旋轉角度
     參數

NumberArray3

旋轉角度的值:[X,Y,Z]

  回傳值void

viod

     範例

範例:設定某個三維組件中某個模型物件的縮放比例

duchamp.getWidgetByName("組件名稱").getMeshByName("模型名稱").setRotation([10,10,10]);


  應用範例-
   行動端不支援行動端

focus

方法focus(options)

設定模型物件快速聚焦

V1.15.0 及之後版本支援控制鏡頭的距離、中心點、角度等參數

     參數

options: {

    target: "top" | "bottom" | "left" | "right" | "front" | "back" | "center";

    targetpos: (value: NumberArray3) => NumberArray3;

    viewRay: (value: NumberArray3) => NumberArray3;

    distance: (value: number) => number;

  }

1)target:相機聚焦到模型上的位置(模型物件的六個面中心和體中心),預設為 top

2)targetpos:在 focus 基礎上微調聚焦中心點的座標

3)viewRay:改變視線。

注:需滿足相機視角「垂直角度」的角度範圍

預設實現方向取決於 target,例如:

  • 當 target 為 'top', 'bottom', 'front', 'center' 時,

    視線為斜向下 沿 y-z 平面 45 度:[0, -1, 1]

  • 當 target 為 'left' 時,視線為沿 x-z 平面,斜向下

    45 度, 看向左側面:[1, -1, 0]

  • 當 target 為 'right' 時,視線為沿 x-z 平面,斜向

    下 45 度, 看向右側面:[0, -1, 1]

4)distance:改變相機與模型的距離。

注:需滿足相機視角「縮放設定」的距離範圍

預設距離取決於 target 面的大小,若 target 為 'center' ,則取決於模型物件整體的大小

  回傳值void

viod

     範例

範例1:

duchamp.getWidgetByName("組件名稱").getMeshByName("模型名稱").focus();

範例2:

const widget = duchamp.getWidgetByName("組件名稱");
const mesh = widget.getMeshByName("模型名稱");
mesh.focus({
   target: "center",
   viewRay: () => [1, -11],
   distance: (v) => v * 0.8
  });


  應用範例FVS點選切換三維自訂視角
   行動端不支援行動端

refreshData

方法refreshData()

重新整理三維組件資料,僅資料更新,組件整體不更新

注:V1.17.1 之前版本僅支援 FVS三維城市場景 和 FVS三維自訂場景 組件

     參數{para:"para"}參數名稱:參數值
  回傳值--
     範例範例1:點選重新整理「自訂模型」組件的資料並傳參:
duchamp.getWidgetByName("自訂模型").refreshData({a:"參數a"});

注:傳遞多個參數時,寫法如下

duchamp.getWidgetByName("自訂模型").refreshData({a:"參數a",b:"參數b"});

範例2:給範本新增「頁面載入結束事件」,使三維組件定時重新整理資料:

setInterval(() => {
duchamp.getWidgetByName("自訂模型").refreshData();
}, 3000); //每隔 3 秒重新整理一次資料


  應用範例

JS實現三維組件傳參僅重新整理資料

    行動端不支援行動端

subscribeMarkerData

方法subscribeMarkerData((data, observer))

訂閱監聽三維組件資料圖層中的資料更新:當資料圖層中的資料更新,或者生成新的資料,執行回呼

注1:需配合重新整理API使用

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數

subscribeMarkerData(observer: (data: { [key: string]: any }, observer: {unsubscribe: () => {}}) => void): void;

  • data 為字典類型,其資料取決於資料圖層的配置

  • key 為資料集中選擇的欄位名, value 為資料集中選擇欄位對應的值

  • unsubscribe 為函式,用於取消監聽訂閱

  回傳值--
範例

範例:根據資料庫表欄位,控制模型是否可見

async function perform({
  // 等待場景載入結束,並獲取到 widget, dataLayer
  const widget = await future(() => duchamp.getWidgetByName("停車場模型"));
  const dataLayer = await future(() => widget.getDataLayerByName("車輛監視"));

  // 根據資料圖層 marker 資料,隱藏指定模型
  const processMarkerData = data => {
    const visible = data["是否有車"] === "1";
    const name = data["車輛編號"];
    const mesh = widget.getMeshByName(name);
    mesh.setVisible(visible);
  };

  // 訂閱監聽資料圖層 Marker 資料,當 Marker 更新時,執行訂閱監聽函式
  const observer = dataLayer.subscribeMarkerData(data => {
    processMarkerData(data);
  });

  // 每隔 3s,重新整理組件資料
  const refreshTimerId = setInterval(() => {
    widget.refreshData();
  }, 3000); // 循環執行
  }


  應用範例JS實現資料庫表欄位控制FVS模型顯隱
    行動端不支援行動端

updateMarkerData

方法updateMarkerData((data))

可單獨更新三維組件資料圖層中指定模型物件資料

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數

updateMarkerData(predicate: (data) => boolean, updater: (data) => void);

  • predicator 為查詢函式,用於判斷資料項是否需要更新,若回傳值為 true,表示需要更新

  • updator 為更新函式,用於更新透過 predicator 校驗,傳回為 true 的資料

  回傳值--
     範例 範例:更新「停車場模型」中「車輛監視」資料圖層指定模型物件的多個標籤值:
const widget = duchamp.getWidgetByName("停車場模型");
const dataLayer = widget.getDataLayerByName("車輛監視");
  // 使用 updateMarkerData 方法更新資料
  dataLayer.updateMarkerData((markerData) => {
    return markerData["車輛編號"] === "車輛006";
  }, (markerData) => {
    markerData["停車時長"] = 12;
  });
  應用範例

使用正文框元件,輸入對應車輛編號和停車時長,編輯結束後模型資料變化。(停車場模型設定了停車時長超過 10h 模型紅色預警)如下圖所示:

點選下載範本:JS實現更新指定模型資料.fvs

2024-11-12_20-54-42.gif


    行動端不支援行動端

getRoamAnimations

方法getRoamAnimations()

獲取三維組件的所有漫遊路徑資訊(目前僅支援傳回漫遊路徑名稱)

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數--
  回傳值RoamAnimationsData[]interface RoamAnimationsData{
  /**
   * 漫遊路徑名稱
   */
 name:string
}
     範例

範例:獲取「自訂模型」組件的漫遊路徑資訊

duchamp.getWidgetByName("自訂模型").getRoamAnimations();


  應用範例

-

    行動端不支援行動端

playRoamAnimations

方法playRoamAnimations()

播放漫遊動畫

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數

RoamAnimationOptions

type RoamAnimationOptions = {
  /**
   * 漫遊路徑名稱
   */
  names: string[];
  /**
   * 播放模式:循環播放|單次播放
   */
  playMode: "loop"|"once";
};

  回傳值-
     範例

範例1:給標題組件新增點選事件,播放「自訂模型」組件的「漫遊路徑1」動畫

duchamp.getWidgetByName("自訂模型").playRoamAnimations({
  names:["漫遊路徑1"], 
  playMode: "once"
})

範例2:在「頁面載入結束事件」中寫程式碼,實現頁面載入結束後自動播放漫遊動畫

setTimeout(() => {
  duchamp.getWidgetByName("自訂模型").playRoamAnimations({
   names:["漫遊路徑1"], 
   playMode: "once"
})
}, 5000)


  應用範例

-

    行動端不支援行動端

updateRoamAnimationAction

方法updateRoamAnimationAction()

暫停/繼續/跳出播放漫遊動畫

注:僅支援 FVS三維自訂場景 和 FVS三維城市場景 組件

     參數"pause" |"continue"|"exit"

"pause" :暫停

"continue":繼續

"exit":跳出

  回傳值--
     範例

範例1:暫停「自訂模型」組件漫遊動畫

duchamp.getWidgetByName("自訂模型").updateRoamAnimationAction("pause");

範例2:繼續「自訂模型」組件漫遊動畫

duchamp.getWidgetByName("自訂模型").updateRoamAnimationAction("continue");

範例3:跳出「自訂模型」組件漫遊動畫

duchamp.getWidgetByName("自訂模型").updateRoamAnimationAction("exit");


  應用範例

-

    行動端不支援行動端

getAnimationByName

方法
getAnimationByName("animationName")獲取三維組件的動畫物件
參數animationName

動畫名

即為 getMeshByName 裏獲取的 animations[index].name。

注:此處為具體動畫名稱,非模型名稱。如下圖所示:

回傳值--
範例

獲取「三維自訂場景1_頁面1」的「SMT貼片機爆炸歸位」模型的「1爆炸」動畫

const animation = duchamp.getWidgetByName("三維自訂場景1_頁面1").getMeshByName("SMT貼片機爆炸歸位").getAnimationByName("1爆炸")

開始播放「1爆炸」動

animation.play({
  // 是否重新開始播放
  isRestart: false,
  // 是否循環播放
  isLoop: false,
  // 播放結束是否恢復起始狀態
  isInitialOnPlayStop: false,
  // 播放結束回呼函式
  onAnimationPlayStop: () => {}
})

暫停播放「1爆炸」動

animation.pause()

結束播放「1爆炸」動

//true:動畫跳出,並恢復為動畫播放前的狀態
//false:動畫跳出,保持在當前動畫幀
animation.stop(true)
應用範例

-

行動端不支援行動端


附件列表


主題: 二次開發
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙