0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HT for Web (Hightopo) 使用心得(3)- 吸附與錨點(diǎn)

圖撲-數(shù)字孿生 ? 來(lái)源:物聯(lián)網(wǎng)袋鼠 ? 作者:物聯(lián)網(wǎng)袋鼠 ? 2023-10-12 10:44 ? 次閱讀

吸附與錨點(diǎn)是 HT for Web 中兩個(gè)比較重要的概念。這兩個(gè)概念在執(zhí)行交互和動(dòng)畫(huà)時(shí)會(huì)經(jīng)常被用到。

吸附,顧名思義,是一個(gè)節(jié)點(diǎn)吸附到另一個(gè)節(jié)點(diǎn)上。就像船底的貝類(lèi)一樣,通過(guò)吸附到船身,在船移動(dòng)的時(shí)候自己也會(huì)跟著移動(dòng);而錨點(diǎn),則決定了哪個(gè)位置是該節(jié)點(diǎn)的坐標(biāo)點(diǎn)位置。這里繼續(xù)以船舶為例,錨點(diǎn)就是船舶拋錨后船錨所在點(diǎn),只不過(guò)船的錨點(diǎn)在船外面,而 HT 節(jié)點(diǎn)的錨點(diǎn)通常在其中心。并且這里的錨鏈?zhǔn)莿傂缘牟荒軓澢?/p>

吸附

HT 既支持 2D 吸附,也支持 3D 吸附。這里我們以 2D 為例說(shuō)明一下其用法。在使用之前,有幾個(gè)方法先在這里介紹一下:

getHost()和setHost(host)獲取和設(shè)置吸附宿主對(duì)象,當(dāng)節(jié)點(diǎn)吸附上宿主圖元時(shí),宿主移動(dòng)或旋轉(zhuǎn)時(shí)會(huì)帶動(dòng)所有吸附者。

getAttaches()獲取吸附到自身的所有節(jié)點(diǎn)的ht.List類(lèi)型數(shù)組。

onHostChanged(oldHost, newHost)當(dāng)吸附宿主對(duì)象發(fā)生變化時(shí)回調(diào)該函數(shù),可重載做后續(xù)處理。

handleHostPropertyChange(event)當(dāng)吸附宿主對(duì)象屬性發(fā)生變化時(shí)回調(diào)該函數(shù),可重載做后續(xù)處理。

isHostOn(node)判斷該圖元是否吸附到指定圖元對(duì)象上。

isLoopedHostOn(node)判斷是否與指定圖元形成環(huán)狀吸附,如A吸附B,B吸附C,C吸附回A,則A,B和C圖元相互環(huán)狀吸附。

wKgaomUnXsCAU5zoABYSghk-0T0334.png

在上例中,我們創(chuàng)建了4個(gè)服務(wù)器,并且在他們之間配置了連線。另外我們?cè)谶@里為它們配置了吸附關(guān)系:

Server 4 吸附到 Server 3, Server 3 吸附到 Server 2, Server 2 吸附到 Server 1。

這樣,如果 Server 1 動(dòng),那么 Server 2 便會(huì)跟著動(dòng)。由于 Server 3 吸附在 Server 2 上,Server 3 也會(huì)跟著移動(dòng)。同理,Server 4 也會(huì)跟著 Server 3 移動(dòng)。

由于前兩篇文章已經(jīng)講過(guò) 2D 圖紙及節(jié)點(diǎn),連線的創(chuàng)建。這里主要是配置吸附關(guān)系。關(guān)鍵代碼如下:

/**************** 分別創(chuàng)建 HT 節(jié)點(diǎn)并添加到圖紙中 ************************/
// 創(chuàng)建4個(gè)服務(wù)器節(jié)點(diǎn)
const server1 = createServerNode(100, 100, 'Server 1 (Host)', {'label.color': 'red'});
const server2 = createServerNode(300, 100, 'Server 2');
const server3 = createServerNode(100, 300, 'Server 3');
const server4 = createServerNode(300, 300, 'Server 4');
/****************************** 創(chuàng)建連線 *************************************/
......
/****************************** 連線動(dòng)畫(huà) *************************************/
......
/****************************** 設(shè)置吸附 *************************************/
server2.setHost(server1);
server3.setHost(server2);
server4.setHost(server3);

這里面主要的代碼就是 setHost() 那三句。在設(shè)置了 Host 節(jié)點(diǎn)之后,我們可以通過(guò) host.getAttaches() 方法獲取所有吸附到 Host 上的所有節(jié)點(diǎn)。

const attaches = server1.getAttaches(); // 獲取的 ht.List 長(zhǎng)度為1,即只有 server2

需要注意的是,盡管這里獲取的吸附節(jié)點(diǎn)個(gè)數(shù)為1,但由于吸附節(jié)點(diǎn)的遞歸關(guān)系,Server 3 和 Server 4 也會(huì)被間接吸附到 Server 1 上面。

吸附旋轉(zhuǎn)

前面提過(guò),設(shè)置吸附后的節(jié)點(diǎn),不但會(huì)跟隨 Host 節(jié)點(diǎn)移動(dòng),還會(huì)根據(jù) Host 節(jié)點(diǎn)旋轉(zhuǎn),這是非常有用的一個(gè)功能。其邏輯由 HT for Web 內(nèi)部實(shí)現(xiàn),我們?cè)谶@里調(diào)用即可。

wKgZomUnXsSAEfWWABaswcjWcRg266.png

錨點(diǎn)

如上圖所示,4臺(tái)服務(wù)器都圍繞著一個(gè)中心點(diǎn)旋轉(zhuǎn),該中心點(diǎn)就是 Server 1 的錨點(diǎn)。同時(shí),它也是 Server 1 坐標(biāo)所在點(diǎn)。也就是說(shuō):錨點(diǎn)影響著節(jié)點(diǎn)的坐標(biāo)位置,錨點(diǎn)同時(shí)也是節(jié)點(diǎn)旋轉(zhuǎn)和縮放的中心點(diǎn)。

在 HT 中,錨點(diǎn)是Node上一個(gè)重要的概念。節(jié)點(diǎn)繪制的是一個(gè)矩形區(qū)域,而錨點(diǎn)是決定了矩形區(qū)域中哪個(gè)位置是節(jié)點(diǎn)的坐標(biāo)點(diǎn)位置。

錨點(diǎn)的值是一個(gè)百分比數(shù)值,{x:0,y:0}是在區(qū)域左上角,{x:1,y:1}是在區(qū)域右下角,HT 默認(rèn)以{x:0.5,y:0.5}為錨點(diǎn),也就是圖元中心點(diǎn)。如果為節(jié)點(diǎn)配置大于1或者小于0則錨點(diǎn)則該錨點(diǎn)將處于節(jié)點(diǎn)矩形區(qū)域之外??梢酝ㄟ^(guò)node.getAnchor和node.setAnchor獲取和設(shè)置錨點(diǎn),也可以通過(guò)node.getAnchorX、node.setAnchorX、node.getAnchorY、node.setAnchorY方法單獨(dú)設(shè)置獲取。

? getAnchor()和setAnchor(x, y | {x:0.5,y:0.5})獲取和設(shè)置圖元的錨點(diǎn),錨點(diǎn)影響著節(jié)點(diǎn)坐標(biāo)位置,錨點(diǎn)同時(shí)也是旋轉(zhuǎn)和縮放的中心點(diǎn)

Hightopo 的官網(wǎng)示例從多個(gè)維度展示了錨點(diǎn)的作用:

wKgaomUnXseAcvQUAAraEXreQVw342.png

在 3D 場(chǎng)景中,其錨點(diǎn)原理上與 2D 類(lèi)似,只不過(guò)這里增加了一個(gè)維度。獲取和設(shè)置錨點(diǎn)的方法如下:

? getAnchor3d()和setAnchor3d(x, y, z | [x, y, z])獲取和設(shè)置圖元的 3D 錨點(diǎn)。需要注意的是,要想單獨(dú)獲取 Z 軸方向上的錨點(diǎn),這里需要使用 node.getAnchorElevation 而不是 node.getAnchorZ

下圖展示的是一個(gè)六面體在 3D 場(chǎng)景中的錨點(diǎn)位置。HT 節(jié)點(diǎn)默認(rèn)的錨點(diǎn)是 {x: 0.5, y: 0.5, z: 0.5}。這里我們將其改成了 {x: 0, y: 0, z: 0},因此,這里的坐標(biāo)軸顯示在六面體的一角而不是中心位置。

wKgZomUnXsqAfkjvAAM3JN9-OJ0584.png

小結(jié)

本節(jié)我們主要介紹了 HT 的吸附和錨點(diǎn)功能。節(jié)點(diǎn)的吸附可以讓節(jié)點(diǎn)跟隨它所吸附的宿主對(duì)象一起移動(dòng)或旋轉(zhuǎn)。使用 HT 的 setHost() 方法可以設(shè)置節(jié)點(diǎn)的宿主對(duì)象,使用 getAttaches() 方法可以獲取所有吸附到該宿主對(duì)象上的節(jié)點(diǎn)。此外,還介紹了節(jié)點(diǎn)旋轉(zhuǎn)和縮放的中心點(diǎn)——錨點(diǎn)。錨點(diǎn)的值是一個(gè)百分比數(shù)值,HT 默認(rèn)以 {x:0.5,y:0.5} 為錨點(diǎn),也就是圖元中心點(diǎn)??梢酝ㄟ^(guò) node.getAnchor() 和 node.setAnchor(x, y | {x:0.5,y:0.5}) 等方法獲取和設(shè)置錨點(diǎn)。


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HT
    HT
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    30438
  • Hightopo
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    4202
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HT for Web (Hightopo) 使用心得(1)- 基本概念

    本章主要介紹了 HT for Web 中的一些基本概念,包括:基礎(chǔ)數(shù)據(jù) ht.Data、數(shù)據(jù)模型 ht.DataModel 和選擇模型 ht
    的頭像 發(fā)表于 09-11 10:45 ?1127次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(1)- 基本概念

    HT for Web (Hightopo) 使用心得(4)- 3D 場(chǎng)景 Graph3dView 與 Obj 模型

    這里我們通過(guò)代碼建立一個(gè) 3D 場(chǎng)景并添加一個(gè) Obj 模型來(lái)介紹一下 HT for Web3D 場(chǎng)景和模型加載方面的使用。
    的頭像 發(fā)表于 11-20 11:05 ?826次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(4)- <b class='flag-5'>3</b>D 場(chǎng)景 Graph<b class='flag-5'>3</b>dView 與 Obj 模型

    MPLAB ICD 3 及PICKIT3 使用心得及注意事項(xiàng)

    `MPLAB ICD 3 及PICKIT3 使用心得及注意事項(xiàng),與發(fā)燒友們共同分享!`
    發(fā)表于 11-24 15:38

    濾波電容的使用心得

    圖說(shuō)濾波電容的使用心得,非常詳細(xì),不信你還不懂~
    發(fā)表于 07-18 15:23

    關(guān)于Spartan6板子的使用心得

    給大家分享一下關(guān)于Spartan6板子的使用心得
    發(fā)表于 04-30 07:03

    TFT LCD使用心得

    TFT LCD使用心得體會(huì)的原因是,最近一段時(shí)間工作上一直在使用TFT LCD,主要是3.5寸LCD,以SAMSUNG的LTV350QV及其一些臺(tái)灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上應(yīng)用起
    發(fā)表于 10-16 13:04 ?45次下載

    詳細(xì)談?wù)凾FT LCD 的使用心得

    深入談?wù)凾FT LCD 的使用心得最近一段時(shí)間工作上一直在使用TFT LCD,主要是3、5 寸LCD,以SAMSUNG 的LTV350QV 及其一些臺(tái)灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上
    發(fā)表于 03-18 17:49 ?3次下載

    ADXL345芯片使用心得

    ADXL345芯片使用心得,介紹使用傳感器過(guò)程的使用體會(huì)
    發(fā)表于 05-11 11:08 ?23次下載

    數(shù)字溫濕度傳感器DHT11使用心得

    點(diǎn)溫濕度傳感器DHT11使用心得
    發(fā)表于 04-14 15:35 ?7次下載

    Django教程之Django的使用心得詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Django教程之Django的使用心得詳細(xì)資料免費(fèi)下載。
    發(fā)表于 10-17 18:03 ?11次下載
    Django教程之Django的使<b class='flag-5'>用心得</b>詳細(xì)資料免費(fèi)下載

    智慧服裝工廠電子看板試用心得

    智慧服裝工廠電子看板試用心得實(shí)現(xiàn)了企業(yè)生產(chǎn)的進(jìn)度實(shí)時(shí)監(jiān)控、現(xiàn)場(chǎng)拉式生產(chǎn)、生產(chǎn)節(jié)拍平衡和異常情況的反饋功能。而接下來(lái)我們主要討論的是智慧服裝工廠電子看板試用心得在生產(chǎn)線與倉(cāng)庫(kù)之間的物料配送體系,要談到這個(gè)物料配送問(wèn)題,則要首先考慮到物料的申請(qǐng)、準(zhǔn)備、運(yùn)輸追蹤和物料接收的流程
    的頭像 發(fā)表于 02-17 18:02 ?1077次閱讀
    智慧服裝工廠電子看板試<b class='flag-5'>用心得</b>

    HT for Web (Hightopo) 使用心得(2)- 2D 圖紙、節(jié)點(diǎn)、連線 與基本動(dòng)畫(huà)

    概括來(lái)說(shuō),用 HT for Web 做可視化主要分為兩部分,也就是 2D 和 3D。這兩部分需要單獨(dú)創(chuàng)建。在它們被創(chuàng)建完成后,我們?cè)侔阉鼈兗傻揭黄稹?HT for
    的頭像 發(fā)表于 09-21 10:52 ?931次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(2)- 2D 圖紙、節(jié)點(diǎn)、連線 與基本動(dòng)畫(huà)

    圖撲 HT for Web 風(fēng)格屬性手冊(cè)教程

    圖撲軟件明星產(chǎn)品 HT for Web 是一套純國(guó)產(chǎn)化獨(dú)立自主研發(fā)的 2D 和 3D 圖形界面可視化引擎。HT for Web(以下簡(jiǎn)稱(chēng)
    的頭像 發(fā)表于 10-11 10:50 ?579次閱讀
    圖撲 <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> 風(fēng)格屬性手冊(cè)教程

    HT for Web (Hightopo) 使用心得(5)- 動(dòng)畫(huà)的實(shí)現(xiàn)

    其實(shí),在 HT for Web 中,有多種手段可以用來(lái)實(shí)現(xiàn)動(dòng)畫(huà)。我們這里仍然用直升機(jī)為例,只是更換了場(chǎng)景。增加了巡游過(guò)程。 使用 HT 開(kāi)發(fā)的一個(gè)簡(jiǎn)單網(wǎng)頁(yè)直升機(jī)巡邏動(dòng)畫(huà)(Hightopo
    的頭像 發(fā)表于 11-29 11:04 ?846次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(5)- 動(dòng)畫(huà)的實(shí)現(xiàn)

    HT for Web (Hightopo) 3D場(chǎng)景環(huán)境配置(天空球,霧化,輝光,景深)

    環(huán)形紋理作為天空背景。紋理通常是一個(gè)天空的全景圖(例如星空、日落、云層等),通過(guò)在球形網(wǎng)格的表面上將紋理映射,呈現(xiàn)出一個(gè)連續(xù)的、無(wú)縫的天空效果。 在 HT for Web中,天空球可以通過(guò)g3d.setSkybox(node)來(lái)
    的頭像 發(fā)表于 12-07 11:07 ?753次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) <b class='flag-5'>3</b>D場(chǎng)景環(huán)境配置(天空球,霧化,輝光,景深)