摘要:在官方釋出版的同時(shí)發(fā)布了新版本的,這個(gè)面版已被整個(gè)重新改寫,這次更新也加入一些新的交互行為,下面我們將會稍作解釋。
這禮拜的小技巧是關(guān)于如何以不加入太多的 JavaScript 的方式自訂義 ModelStructurePanel 的交互行為,這個(gè)小技巧受到這篇問與答的啟發(fā):Prevent zoom in Forge viewer when clicking in Model Browser。
在官方釋出 3.2.1 版 Viewer 的同時(shí)發(fā)布了新版本的 ModelStructurePanel,這個(gè)面版已被整個(gè)重新改寫,這次更新也加入一些新的交互行為,下面我們將會稍作解釋。那回到主題,如果想要自定義用戶點(diǎn)擊面板上節(jié)點(diǎn)時(shí)的行為時(shí)要怎么做呢?
但在開始自定這些交戶行為前,我們先來看看 Autodesk.Viewing.Extensions.ViewerModelStructurePanel 在 Viewer3D.js 里是如何被實(shí)作的。首先看 onClick 的部份,我們可以看到這個(gè)方法會去檢查輔助按鍵 [Ctrl, Shift, Alt] 并將其加到事件里頭,所以我們可以通過組合點(diǎn)擊(click)和這些輔助按鍵的方式來實(shí)作、處理不同的交互行為。
ViewerModelStructurePanel.prototype.onClick = function (node, event) { if (this.isMac && event.ctrlKey) { return; } var that = this; var key = "click"; if (that.ctrlDown(event)) { key += "Ctrl"; } if (event.shiftKey) { key += "Shift"; } if (event.altKey) { key += "Alt"; } if (this.clickConfig && this.clickConfig[key]) { that.handleAction(this.clickConfig[key]["onObject"], node); } else { this.viewer.select(node); } };
同時(shí),如果上頭代碼里的 key 與 clickConfig 有匹配,這個(gè)方法會去調(diào)用 handleAction 這個(gè)函數(shù);而這個(gè) clickConfig 就是用來訂義 ModelStructurePanel 點(diǎn)擊交互行為的設(shè)置對象,它會在面板初始化時(shí)被帶入。
var kDefaultDocStructureConfig = { "click": { "onObject": ["toggleLeavesSelection"] }, "clickShift": { "onObject": ["toggleMultipleLeavesSelection"] }, "clickCtrl": { "onObject": ["toggleMultipleLeavesSelection"] } }; function ViewerModelStructurePanel(viewer, title, options) { // ... skipping stuff for clarity ... this.clickConfig = (options && options.docStructureConfig) ? options.docStructureConfig : kDefaultDocStructureConfig;
這邊是 ` 這個(gè)函數(shù)的實(shí)作,我們可以從這邊看到 ModelStructurePanel` 有哪些默認(rèn)的交互行為:
ViewerModelStructurePanel.prototype.handleAction = function (actionArray, dbId) { for (var action in actionArray) { switch (actionArray[action]) { case "toggleLeavesSelection": toggleLeavesSelection(this, dbId); break; case "toggleMultipleLeavesSelection": toggleMultipleLeavesSelection(this, dbId); break; case "selectOnly": this.ignoreNextSelectionChange = true; this.viewer.select(dbId); break; case "deselectAll": this.ignoreNextSelectionChange = true; this.viewer.select([]); break; case "selectToggle": this.ignoreNextSelectionChange = true; this.viewer.toggleSelect(dbId); break; case "isolate": this.viewer.isolate(dbId); break; case "showAll": this.viewer.isolate(null); break; case "focus": this.viewer.fitToView(); break; case "hide": this.viewer.hide(dbId); break; case "show": this.viewer.show(dbId); break; case "toggleVisibility": this.viewer.toggleVisibility(dbId); break; } } };
講到這邊你可能會問,到底要怎么自訂這些點(diǎn)擊交互行為呢?這其實(shí)頗容易的~基于上面講述的內(nèi)容,你可以通過下面的代碼在 Forge Viewer 觸發(fā) Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT 事件時(shí),將產(chǎn)生一個(gè)新的 ModelStructurePanel 取代 Forge Viewer 默認(rèn)的那一個(gè)。
備注:對 Forge Viewer 有些熟悉的朋友可能知道,默認(rèn)的 ModelStructurePanel 是在這個(gè)事件觸發(fā)時(shí)被建立的。
viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, function() { var options = { docStructureConfig: { click: { onObject: ["selectOnly"] //instead of toggleOverlayedSelection }, clickShift: { onObject: ["isolate"] //instead of toggleMultipleOverlayedSelection }, clickCtrl: { onObject: ["selectToggle"] //instead of toggleMultipleOverlayedSelection } } } var customModelStructurePanel = new Autodesk.Viewing.Extensions.ViewerModelStructurePanel( viewer, "Browser", options) viewer.setModelStructurePanel(customModelStructurePanel) })
最后,當(dāng)然如果 ModelStructurePanel 自帶的交互行為不滿足你的需求時(shí),你也可以將整個(gè) ModelStructurePanel 復(fù)制出來,在 handleAction 這個(gè)方法里頭加入自個(gè)的交互內(nèi)容。如果不知道如何開始,你可以參到這篇英文博客:Supporting multiple models in the new ModelStructurePanel
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92629.html
摘要:最近有的小伙伴們都在詢問要怎么在里顯示自訂義屬性,要做到這個(gè)是挺容易的。在來我們透過繼承來創(chuàng)建自個(gè)的屬性面板使用的語法,部份代碼來自的無法從服務(wù)器獲取屬性透過撰寫括展讓自定義屬性窗取代自帶的以上希望對各為小伙伴有幫助參考 最近有 Autodesk Forge 的小伙伴們都在詢問要怎么在 Viewer 里顯示自訂義屬性,要做到這個(gè)是挺容易的。目前有兩種方式可以做到這個(gè)效果,一種是直接添加...
摘要:可能有許多原因你想在里加入自訂義的線型,例如顯示線框幾何視覺化包圍箱或者其他你想帶給使用者的視覺回饋。下面是我傳寫的一個(gè)例子,他可以在選重構(gòu)件后在場景里用自定義線型描繪它的包圍箱,在線示例可以參考這里 showImg(https://segmentfault.com/img/bVVaUx?w=1794&h=930); 這篇文章的原著是 Autodesk AND 的 Philippe L...
摘要:前陣子有些圈的朋友們都在詢問同一個(gè)問題要怎么在的自帶右鍵菜單上添加自定義項(xiàng)目或是只顯示自訂義項(xiàng)目以下將針對在自帶右鍵菜單上添加自定義項(xiàng)目和只顯示自訂義項(xiàng)目的右鍵菜單進(jìn)行說明。 前陣子有些 Autodesk Forge 圈的朋友們都在詢問同一個(gè)問題『要怎么在 Viewer 的自帶右鍵菜單上添加自定義項(xiàng)目或是只顯示自訂義項(xiàng)目』~ 以下將針對『在自帶右鍵菜單上添加自定義項(xiàng)目』和『只顯示自訂義...
摘要:對于大多數(shù)的模型文檔都可以透過服務(wù)提取轉(zhuǎn)換在里渲染構(gòu)件外觀時(shí)所需的材質(zhì)及貼圖。所以我們可以透過它遍歷所有材質(zhì),找出我們想隱藏貼圖的那些材質(zhì),將它的顏色設(shè)置為灰色,同時(shí)也可以透過它將隱藏貼圖的材質(zhì)回復(fù)。 這篇文章來自 Autodesk ADN 的梁曉冬,以下以我簡稱。 對于大多數(shù)的模型文檔都可以透過 Autodesk Forge Model Derivative 服務(wù)提取、轉(zhuǎn)換在 Vie...
摘要:前幾天釋出新版本的,自此版本開始引入優(yōu)先級機(jī)制,每個(gè)都可以各自設(shè)置自個(gè)的優(yōu)先級,而這個(gè)優(yōu)先級會被用來對那些已經(jīng)注冊在里的進(jìn)行排序,目前所有的優(yōu)先級默認(rèn)都是,并會以下面這個(gè)方式設(shè)置優(yōu)先級的數(shù)值越高者則可以更優(yōu)先處理的交互事件,如等,使用樣例 前幾天 Autodesk Forge 釋出新版本的 Viewer - v3.2,自此版本開始 Viewer Tool 引入優(yōu)先級機(jī)制,每個(gè) Tool...
閱讀 3484·2021-11-19 09:40
閱讀 1502·2021-10-13 09:41
閱讀 2677·2021-09-29 09:35
閱讀 2723·2021-09-23 11:21
閱讀 1716·2021-09-09 11:56
閱讀 845·2019-08-30 15:53
閱讀 853·2019-08-30 15:52
閱讀 606·2019-08-30 12:47