国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

圖撲 HT 總線式拓撲圖的可視化實現(xiàn)

圖撲-數(shù)字孿生 ? 來源:圖撲-數(shù)字孿生 ? 作者:圖撲-數(shù)字孿生 ? 2025-02-25 11:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在圖形用戶界面(GUI)設計中,自定義連線技術不僅提升了用戶體驗,還為復雜數(shù)據(jù)可視化開辟了新的可能性。該功能點允許用戶靈活地在界面元素之間創(chuàng)建視覺連接,使流程圖、思維導圖和網(wǎng)絡拓撲圖等信息呈現(xiàn)更加直觀和動態(tài)。

圖撲軟件自研 HT for Web 產(chǎn)品框架中,ht.Edge 節(jié)點用于表示節(jié)點間的連線關系。熟悉 HT 的用戶應該了解 ht.Edge 內(nèi)置了多種連線類型,能滿足一般拓撲圖需求,但在特殊情況下,這些默認類型可能無法滿足需求。為此,HT 提供了自定義連線功能,允許開發(fā)者根據(jù)具體需求創(chuàng)建特殊的連線類型,實現(xiàn)更靈活的圖形表示。

wKgZPGe9OGaAZHD5ADcgFJXcIps367.gifwKgZO2e9OGyASup4AAfhoU5E-sY641.gif

自定義連線

圖撲 HT 框架提供靈活的自定義連線功能,開發(fā)者可以通過調(diào)用 ht.Default.setEdgeType(type, func, mutual) 方法來創(chuàng)建獨特的連線類型。以下是該方法的參數(shù)詳解:

■type:自定義連線類型的名稱,與 style 中的 edge.type 屬性相對應。

■func:計算連線路徑信息的函數(shù),接收四個參數(shù):

gap:多條連線成捆時,本連線對象對應中心連線的間距。

edge:當前連線對象。

graphView:當前對應拓撲組件對象。

sameSourceWithFirstEdge:boolean 類型,該連線是否與同組的第一條連線同源。

■mutual:決定該連線類型是否會影響同一起始或結束節(jié)點上的其他連線。

接下來,我們深入分析一種常見的拓撲關系實現(xiàn)步驟,即"橫-豎-橫"的連線方式。

下面是一段定義上圖連線類型的示例代碼。代碼很簡單,首先獲取起始節(jié)點和目標節(jié)點的信息,然后根據(jù)這兩個節(jié)點的坐標,按照預定的規(guī)則計算出連線的路徑點。

ht.Default.setEdgeType('horizontal-vertical', function (edge, gap, graphView) {

const points = new ht.List();

const segments = new ht.List();

const source = edge.getSource();

const target = edge.getTarget();

const sourceP = source.p();

const targetP = target.p();

points.add(sourceP);

if (targetP.x !== sourceP.x) {

points.add({ x: sourceP.x + (targetP.x - sourceP.x) / 2, y: sourceP.y });

points.add({ x: sourceP.x + (targetP.x - sourceP.x) / 2, y: targetP.y });

}

points.add(targetP);

return { points, segments };

})

定義好連線類型后,只需通過 edge.s('edge.type', 'horizontal-vertical') 這段簡單的代碼行,就能將 edge 對象的連線設置為我們剛剛定義的類型。由此一來,即可看到令人滿意的效果,大幅提升圖形的可讀性和美觀度。

總線拓撲

總線拓撲是一種網(wǎng)絡結構,所有設備(如計算機、打印機等)都連接到一個共同的通信介質(zhì)上,通常是一根電纜,這個介質(zhì)被稱為"總線"(bus)。總線拓撲在工業(yè)控制嵌入式系統(tǒng)等特定領域中被廣泛應用。在圖撲 HT 框架中,我們可以利用 ht.Shape 組件繪制總線,并通過 ht.Edge 組件將各個設備節(jié)點連接到總線上。這些連接的視覺表現(xiàn)可通過自定義連線類型靈活定義,從而實現(xiàn)精確的總線拓撲圖表示。

上面展示的是一個總線的示例效果,可以直觀看到所有設備都連接到了總線上。在具體實現(xiàn)過程中,最具挑戰(zhàn)性的問題是:如何計算出總線上距離目標節(jié)點坐標最近的點?

計算節(jié)點到總線距離

總線通常由多條直線段組成,因此計算某一節(jié)點到總線的最短距離可按以下思路進行:

將總線分割為多段直線

總線由多個直線段構成,可以取總線上相鄰兩點構成一條直線。具體實現(xiàn)時,遍歷 points 數(shù)據(jù),獲取 points[index] 和 points[index+1] 作為線段的兩個端點。注意,如果設置了 segments,其中 1 代表新路徑的起點,所以當 segments[index+1] 為 1 時應跳過。

計算點到每條直線的距離

獲取每條直線段后,計算節(jié)點坐標到各線段的距離,并將距離值存入一個集合中

獲取最短距離

從距離集合中找出最小值,即為節(jié)點到總線的最短距離。

基于上述思路,我們可以實現(xiàn)一個總線連線類型。以下是具體的實現(xiàn)代碼:

// 計算點到直線的距離,返回結果是個對象結構

var pointToInsideLine = function (p1, p2, p) {

var x1 = p1.x,

y1 = p1.y,

x2 = p2.x,

y2 = p2.y,

x = p.x,

y = p.y,

result = {},

dx = x2 - x1,

dy = y2 - y1,

d = Math.sqrt(dx * dx + dy * dy),

ca = dx / d, // cosine

sa = dy / d, // sine

mX = (-x1 + x) * ca + (-y1 + y) * sa;

result.x = x1 + mX * ca;

result.y = y1 + mX * sa;

if (!isPointInLine(result, p1, p2)) {

result.x = Math.abs(result.x - p1.x) < Math.abs(result.x - p2.x) ? p1.x : p2.x;

result.y = Math.abs(result.y - p1.y) < Math.abs(result.y - p2.y) ? p1.y : p2.y;

}

dx = x - result.x;

dy = y - result.y;

result.z = Math.sqrt(dx * dx + dy * dy);

return result;

};

// 判斷點是否在線上

var isPointInLine = function (p, p1, p2) {

return p.x >= Math.min(p1.x, p2.x) &&

p.x <= Math.max(p1.x, p2.x) &&

p.y >= Math.min(p1.y, p2.y) &&

p.y <= Math.max(p1.y, p2.y);

};

// 注冊連線類型

ht.Default.setEdgeType('bus', function (edge) {

var source = edge.getSourceAgent(),

target = edge.getTargetAgent();

var targetP = target.p();

var points = source.getPoints().toArray();

var segments = source.getSegments();

var beginPoint;

for (let i = 0; i < points.length - 1; i++) {

if (segments) {

if (segments[i + 1] === 1) continue;

}

const point1 = points[i];

const point2 = points[i + 1];

const minPosition = pointToInsideLine(point1, point2, targetP);

if (!beginPoint || minPosition.z < beginPoint.z) {

beginPoint = minPosition;

}

}

return {

points: new ht.List([ beginPoint, targetP ]),

segments: new ht.List([1, 2])

};

});

執(zhí)行上述代碼后,我們將得到如下效果:

從上圖可以清楚看出,示例成功獲取了節(jié)點到總線的最近點,并繪制了相應的連線節(jié)點。值得注意的是,對于直線段而言,節(jié)點在直線上的投影點即為其距總線最近的點。

視覺美感優(yōu)化

雖然示例已實現(xiàn)了基礎總線效果,但由于拓撲圖采用 2.5D 效果,僅計算投影點可能無法呈現(xiàn)理想的視覺效果。為了增強視覺表現(xiàn),我們可以考慮讓連線旋轉(zhuǎn)一定角度。為此,我們可以在現(xiàn)有功能的基礎上添加旋轉(zhuǎn)代碼,使連線與整體圖形更加協(xié)調(diào),提升視覺美感。

ht.Default.setEdgeType('bus', function (edge) {

var source = edge.getSourceAgent(),

target = edge.getTargetAgent();

var targetP = target.p();

var points = source.getPoints().toArray();

var segments = source.getSegments();

var beginPoint, linePoints;

for (let i = 0; i < points.length - 1; i++) {

if (segments) {

if (segments[i + 1] === 1) continue;

}

const point1 = points[i];

const point2 = points[i + 1];

const minPosition = pointToInsideLine(point1, point2, targetP);

if (!beginPoint || minPosition.z < beginPoint.z) {

beginPoint = minPosition;

linePoints = [point1, point2]

}

}

var rotation = angleBetweenLineAndHorizontal(linePoints[0], linePoints[1]);

var rotatePoint = findIntersection([rotatePointAroundAnotherPoint(beginPoint, targetP, rotation), targetP], linePoints);

if(isPointInLine(rotatePoint, linePoints[0], linePoints[1])){

beginPoint = rotatePoint;

}

return {

points: new ht.List([

beginPoint, targetP

]),

segments: new ht.List([1, 2])

};

});

/**

* 計算兩點之間直線與水平線的夾角

*/

function angleBetweenLineAndHorizontal(p1, p2) {

if (new ht.Math.Vector2(p1.x, p1.y).length() > new ht.Math.Vector2(p2.x, p2.y).length()) {

var p = p2;

p2 = p1;

p1 = p;

}

var x1 = p1.x,

y1 = p1.y,

x2 = p2.x,

y2 = p2.y;

var dx = x2 - x1;

var dy = y2 - y1;

var angleRadians = Math.atan2(dy, dx); // 計算夾角(弧度)

var angleDegrees = angleRadians * (180 / Math.PI); // 弧度轉(zhuǎn)角

// 確保角度在 0 到 360 之間

if (angleDegrees < 0) {

angleDegrees += 360;

}

return angleDegrees;

}

function rotatePointAroundAnotherPoint(point, center, angleDegrees) {

var angleRadians = angleDegrees * (Math.PI / 180);

var cosTheta = Math.cos(angleRadians);

var sinTheta = Math.sin(angleRadians);

var translatedX = point.x - center.x;

var translatedY = point.y - center.y;

var rotatedX = translatedX * cosTheta - translatedY * sinTheta;

var rotatedY = translatedX * sinTheta + translatedY * cosTheta;

var finalX = rotatedX + center.x;

var finalY = rotatedY + center.y;

return { x: finalX, y: finalY };

}

/**

* 給定兩個點,計算直線的系數(shù) A, B, C

* 直線方程:Ax + By = C

*/

function getLineEquation(x1, y1, x2, y2) {

var A = y2 - y1;

var B = x1 - x2;

var C = A * x1 + B * y1;

return { A, B, C };

}

/**

* 計算兩條直線的交點

*/

function calculateIntersection(line1, line2) {

var { A: A1, B: B1, C: C1 } = line1;

var { A: A2, B: B2, C: C2 } = line2;

var determinant = A1 * B2 - A2 * B1;

if (determinant === 0) {

// 平行或重合

return null;

} else {

var x = (C1 * B2 - C2 * B1) / determinant;

var y = (A1 * C2 - A2 * C1) / determinant;

return { x, y };

}

}

/**

* 找到兩條線的交點,或者延長線的交點

*/

function findIntersection(line1Points, line2Points) {

var [p1, p2] = line1Points;

var [p3, p4] = line2Points;

var line1 = getLineEquation(p1.x, p1.y, p2.x, p2.y);

var line2 = getLineEquation(p3.x, p3.y, p4.x, p4.y);

var intersection = calculateIntersection(line1, line2);

return intersection;

}

實現(xiàn)的最終效果如下:

圖撲軟件 HT 自定義連線功能為圖形交互設計開辟了廣闊的新天地。從基本的"橫-豎-橫"連線到復雜的總線拓撲圖,不僅提升了數(shù)據(jù)可視化的靈活性,還大幅增強了用戶體驗。通過精細調(diào)整連線的旋轉(zhuǎn)角度和投影點,在 2.5D 效果中呈現(xiàn)更加美觀和直觀的拓撲關系。

不僅適用于網(wǎng)絡結構的展示,還可擴展到各種復雜系統(tǒng)的可視化中。為設計師和開發(fā)者提供了強大的工具,幫助他們創(chuàng)造出更加豐富、富有表現(xiàn)力的圖形界面。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    WebGIS 智慧交通——路網(wǎng)運行態(tài)勢 BI 可視化大屏

    隨著《“十四五”現(xiàn)代綜合交通運輸體系發(fā)展規(guī)劃》的深入推進,互聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等新技術與交通行業(yè)融合日益緊密。軟件依托自主研發(fā)的 HT for WebGIS 打造了遼寧高速公路數(shù)據(jù)可視
    的頭像 發(fā)表于 02-10 15:03 ?716次閱讀
    WebGIS 智慧交通——路網(wǎng)運行態(tài)勢 BI <b class='flag-5'>可視化</b>大屏

    基于 HT 引擎:數(shù)字孿生民航飛聯(lián)網(wǎng)方案

    基于 HTML5 自主研發(fā) 2D、3D 圖形渲染引擎,依托 WebGL、Canvas 技術棧打造純前端可視化插件 HT for Web。該插件支持輕量化三維模型導入加載,可完成界面
    的頭像 發(fā)表于 02-05 14:26 ?102次閱讀
    基于<b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 引擎:數(shù)字孿生民航飛聯(lián)網(wǎng)方案

    基于 HT 數(shù)字孿生 3D 風電場可視化系統(tǒng)實現(xiàn)解析

    在 “雙碳” 目標與產(chǎn)業(yè)數(shù)字升級的雙重驅(qū)動下,風力發(fā)電作為可再生能源的核心組成部分,其智能管控需求持續(xù)攀升。(Hightopo)基于自主研發(fā)的
    的頭像 發(fā)表于 01-09 15:35 ?325次閱讀
    基于<b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 數(shù)字孿生 3D 風電場<b class='flag-5'>可視化</b>系統(tǒng)<b class='flag-5'>實現(xiàn)</b>解析

    工業(yè)數(shù)字孿生:可視化技術架構與行業(yè)應用解析

    在工業(yè)互聯(lián)網(wǎng)向深度智能演進的進程中,數(shù)字孿生技術成為連接物理工業(yè)系統(tǒng)與虛擬信息空間的核心橋梁,而可視化則是實現(xiàn)數(shù)字孿生價值落地的關鍵載體。
    的頭像 發(fā)表于 12-11 16:49 ?572次閱讀
    工業(yè)數(shù)字孿生:<b class='flag-5'>圖</b><b class='flag-5'>撲</b><b class='flag-5'>可視化</b>技術架構與行業(yè)應用解析

    基于HT實現(xiàn)海上LNG終端數(shù)字孿生可視化監(jiān)控

    在能源轉(zhuǎn)型與雙碳目標的推動下,液化天然氣(LNG)終端的智能運維成為行業(yè)發(fā)展的核心需求。軟件依托自研的 HT for Web 前端插件(基于 WebGL、Canvas 技術開發(fā))
    的頭像 發(fā)表于 12-01 17:41 ?604次閱讀
    基于<b class='flag-5'>HT</b><b class='flag-5'>實現(xiàn)</b>海上LNG終端數(shù)字孿生<b class='flag-5'>可視化</b>監(jiān)控

    基于 HT 技術的園區(qū)元宇宙可視化管理平臺

    設計、核心功能實現(xiàn)及技術亮點,展現(xiàn)如何通過HT技術實現(xiàn)園區(qū)“安環(huán)能”一體管控。 HT 技術作為平臺開發(fā)的核心支撐,其基于 HTML5 標準
    的頭像 發(fā)表于 11-07 14:54 ?406次閱讀
    基于 <b class='flag-5'>HT</b> 技術的園區(qū)元宇宙<b class='flag-5'>可視化</b>管理平臺

    HT 驅(qū)動智慧社區(qū)數(shù)字轉(zhuǎn)型:多維可視化與系統(tǒng)集成實踐

    在社區(qū)管理向數(shù)字、智能升級的浪潮中,軟件(Hightopo)依托自主研發(fā)的HT for Web 前端
    的頭像 發(fā)表于 10-31 14:44 ?468次閱讀
    <b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 驅(qū)動智慧社區(qū)數(shù)字<b class='flag-5'>化</b>轉(zhuǎn)型:多維<b class='flag-5'>可視化</b>與系統(tǒng)集成實踐

    HT 數(shù)字孿生在智慧加油站中的技術實現(xiàn)與應用解析

    渲染技術,構建了智慧加油站數(shù)字孿生可視化系統(tǒng),實現(xiàn)從設備監(jiān)控到應急管理的全流程技術賦能。本文將從技術架構、核心模塊實現(xiàn)邏輯及關鍵技術特性展開分析,拆解數(shù)字孿生技術在加油站場景的落地路徑。 智慧加油站系統(tǒng)的技術底座,由
    的頭像 發(fā)表于 10-17 14:11 ?375次閱讀
    <b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 數(shù)字孿生在智慧加油站中的技術<b class='flag-5'>實現(xiàn)</b>與應用解析

    HT 自研技術架構下 AR 應用開發(fā)與行業(yè)解決方案實現(xiàn)

    在數(shù)字轉(zhuǎn)型加速推進的當下,軟件依托自主研發(fā)的 HT for Web 技術棧,構建起一套無需依賴第三方插件的 AR(增強現(xiàn)實)應用開發(fā)體系。該體系以
    的頭像 發(fā)表于 10-10 11:27 ?520次閱讀
    <b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 自研技術架構下 AR 應用開發(fā)與行業(yè)解決方案<b class='flag-5'>實現(xiàn)</b>

    HT 技術賦能智慧畜牧三維可視化:架構設計與實踐應用

    在現(xiàn)代農(nóng)業(yè)數(shù)字轉(zhuǎn)型浪潮中,智慧畜牧作為畜牧業(yè)升級的核心方向,正通過信息技術重構養(yǎng)殖管理模式。軟件(Hightopo)基于自主研發(fā)的 HT for Web 技術,以 WebGL 與
    的頭像 發(fā)表于 09-19 14:48 ?551次閱讀
    <b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 技術賦能智慧畜牧三維<b class='flag-5'>可視化</b>:架構設計與實踐應用

    基于 HT 搭建的農(nóng)林牧數(shù)據(jù)可視化監(jiān)控平臺

    HT 的農(nóng)林牧數(shù)據(jù)可視化監(jiān)控平臺,以自主研發(fā)的 2D&3D 圖形渲染引擎、HT for Web GIS 產(chǎn)品及數(shù)據(jù)孿生應用開發(fā)平臺為核
    的頭像 發(fā)表于 08-29 14:51 ?558次閱讀
    基于 <b class='flag-5'>HT</b> 搭建的農(nóng)林牧數(shù)據(jù)<b class='flag-5'>可視化</b>監(jiān)控平臺

    基于 HT 可視化實現(xiàn)三維物流園區(qū)一體管控系統(tǒng)

    隨著新基建政策的推進及物流行業(yè)精細化發(fā)展需求的提升,傳統(tǒng)物流園區(qū)的管理模式已難以滿足高效運維、成本優(yōu)化的要求。在此背景下,基于 Web 可視化技術的智慧物流園區(qū)解決方案成為行業(yè)轉(zhuǎn)型的關鍵支撐。
    的頭像 發(fā)表于 08-07 17:07 ?732次閱讀
    基于 <b class='flag-5'>HT</b> <b class='flag-5'>可視化</b><b class='flag-5'>實現(xiàn)</b>三維物流園區(qū)一體<b class='flag-5'>化</b>管控系統(tǒng)

    HT 可視化在工業(yè)產(chǎn)線看板智能應用中的技術實現(xiàn)

    看板賦予了強大的 2D/3D 可視化能力,實現(xiàn)了生產(chǎn)過程的實時監(jiān)控、數(shù)據(jù)直觀呈現(xiàn)與高效管理。本文將從技術角度,解析 HT 在工業(yè)產(chǎn)線看板中的具體技術實現(xiàn)
    的頭像 發(fā)表于 07-25 15:10 ?571次閱讀
    <b class='flag-5'>HT</b> <b class='flag-5'>可視化</b>在工業(yè)產(chǎn)線看板智能<b class='flag-5'>化</b>應用中的技術<b class='flag-5'>實現(xiàn)</b>

    基于 HT 的 3D 可視化智慧礦山開發(fā)實現(xiàn)

    軟件 Hightopo 作為基于 HTML5 標準的 2D/3D 圖形渲染引擎,為 Web 端礦山可視化提供了輕量化、高性能的技術支撐。其核心價值在于通過自主研發(fā)的渲染技術,實現(xiàn)
    的頭像 發(fā)表于 07-18 15:49 ?690次閱讀
    基于 <b class='flag-5'>HT</b> 的 3D <b class='flag-5'>可視化</b>智慧礦山開發(fā)<b class='flag-5'>實現(xiàn)</b>

    基于 HT 技術的電纜廠 3D 可視化管控系統(tǒng)深度解析

    隨著制造業(yè)數(shù)字轉(zhuǎn)型的加速,該技術將在更多領域得到應用和拓展。例如,在智慧城市、能源管理、醫(yī)療等行業(yè),HT 技術可以為企業(yè)提供更加高效、智能的可視化解決方案,推動各行業(yè)的數(shù)字發(fā)展進程
    的頭像 發(fā)表于 04-03 15:56 ?785次閱讀
    基于<b class='flag-5'>圖</b><b class='flag-5'>撲</b> <b class='flag-5'>HT</b> 技術的電纜廠 3D <b class='flag-5'>可視化</b>管控系統(tǒng)深度解析