搜尋
首頁後端開發php教程HTML5 Canvas 繪製的電信網路拓樸圖

HTML5 Canvas 繪製的電信網路拓樸圖

Feb 07, 2018 pm 03:10 PM
canvash5html5

本文主要和大家介紹基於HTML5 Canvas 繪製的電信網路拓樸圖,希望能幫助大家。

電信網結構(telecommunication network structure)是指電信網各種網路單元依技術要求和經濟原則進行組合配置的組合邏輯和配置形式。組合邏輯描述網路功能的體系結構,配置形式描述網路單元的鄰接關係,即以交換中心(或節點)和傳輸連結所組成的拓樸結構。常見的網路拓樸結構有星型結構、匯流排結構、環形結構、樹狀結構、網狀結構、混合型拓樸以及蜂巢式拓樸結構等,本文的例子主要描繪的是總線型拓撲,在顯示上相對其他的結構類型來說更清晰明了,繪製起來也非常容易。

雖然題目取的名字是電信網路拓樸圖,幾乎所有的拓樸圖都能涵蓋,例如基本網路圖,網路拓樸圖,機架圖,網路通訊圖,3D網路圖等等。

效果圖如下:

HTML5 Canvas 繪製的電信網路拓樸圖

這個圖看起來蠻簡單的,程式碼也少,但是內容不少。

首先,機櫃01、機櫃02、機櫃03 都是ht.Group 「群組」類型,ht.Group 類型用於作為父容器包含孩子圖元,在GraphView 拓撲圖(http: //www.hightopo.com)上可透過雙擊進行展開合併,合併時會自定隱藏子孫圖元節點, 若有子節點有連線連接到外部時,合併的Group 將代理程式進行連接。 Group 的移動會帶動孩子節點跟隨, 孩子的位置和大小變化也會影響 Group 的展開圖形和 position 位置。

這邊提到一個代理連線的問題,「代理」兩個字可以很好地顯示代理連線意義。實際上就是如果群組內部的節點與群組外部的節點有連線,那麼在組合併的時候,會在這個群組會「代理」與外部節點之間的連線,這就是代理連線。我們拿機櫃02來說吧,機櫃02內部有一個「電腦」與「內部網路交換器」之間有兩條連線,那麼當我們雙擊機櫃02合併時,實際上就相當於機櫃02與「內部網絡交換器」之間有兩條連線了。

那麼,我們來看看如何繪製這個群組以及群組內部的節點吧,先創建「機櫃02」的Group 節點,因為整個範例我創建了三個Group 節點,而且創建的方式都類似,因此將創建群組的程式碼封裝起來重複使用:

##            
function createGroup(name, x, y) {
    var group = new ht.Group();//组类型 实际上也是一个节点    group.setExpanded(true);//设置展开组    group.setName(name);//设置组的名字    group.s({//设置组的样式style        'group.title.background': 'rgba(14,36,117,0.80)',//组展开后的title背景颜色,仅对group.type为空的类型起作用        'group.background': 'rgba(14,36,117,0.40)',//组展开后的背景颜色        'group.title.align': 'center'//组展开后的title文字水平对齐方式,默认值为'left',可设置为center和right
    });    group.setPosition(x, y);//设置组的位置    group.setImage('images/服务器.json');//设置拓扑上展现的图片信息,在GraphView拓扑图中图片一般以position为中心绘制
    dataModel.add(group);//将创建的组节点添加进数据容器中

    return group;
}
群組是可以透過雙擊展開合併的,展開的時候顯示的是一個有標題列的框(當然這些都是可以自訂的),合併的時候就顯示上面程式碼中設定的group.setImage 中的圖片。

所有機櫃內部的節點都是ht.Node 類型的節點,所以我也封裝了:

           #
function createNode(image, parent, x, y) {
    var node = new ht.Node();//创建一个 Node 节点
    if (image) node.setImage(image);//设置节点的显示图片
    if (parent) node.setParent(parent);//设置节点的父亲
    if (x && y) node.setPosition(x, y);//设置节点的位置
    dataModel.add(node);//将节点添加进数据容器中

    return node;
}
產生機櫃02:

HTML5 Canvas 繪製的電信網路拓樸圖

#      ##      

     
cabinet = createGroup('机柜02', 146, 445);//创建机柜02createNode('images/正常.json', cabinet, 78, 440).s('label', '数据监控分析系统');//创建带有“正常”图片的节点,并设置这个节点的文字为“数据监控分析系统”
因為連線中需要的是“源節點”以及“終節點”,這邊源節點是中間的“內部網路交換器”,我們再創建這個節點:      

#      

var line = createNode();//创建一个节点line.setSize(725, 20);//设置节点大小line.setPosition(310, 325);//设置节点位置line.s({//设置节点的style属性    'shape': 'roundRect',//决定shape的形状,默认值为空,代表用image绘制。roundRect四周圆角矩形    'shape.background': 'rgba(14,36,117,0.80)',//背景填充颜色,为null代表不填充背景    'shape.border.color': '#979797',//边框颜色    'shape.corner.radius': 10,//该参数指定roundRect类型的圆角半径,默认为空系统自动调节,可设置正数值    'label': '内部网络交换机', //文字内容,默认为空    'label.position': 45,//文字内容,默认为空    'label.offset.x': 50,//文字水平偏移,对于Edge意味着沿着连线方向水平偏移    'label2': '内部网络交换机',//HT默认除了label.*的属性外,还提供了label2.*的属性,用于满足一个图元需要显示双文字的情况    'label2.position': 48,    'label2.offset.x': 50,    'label2.offset.y': 2,
});
我不知道你們有沒有註意到,有一個label2 的樣式屬性,這個是HT 為了能在一個節點上加入兩個label 文字而增加的功能,label 屬性和label2 的屬性是完全相同的,只要在設定屬性的時候用label 和label2 區分開來就可以。 源節點和終節點都具備了,可以製作連線了:##      

     

####
createEdge(line, createNode('images/电脑.json', cabinet, 185, 450), 'rgb(30,232,178)', -100, true);//参数1 源节点,参数2 终节点,参数3 连线颜色,参数4 连线起始点的水平偏移,参数5 是否创建两条连线
######的,「交換器」的部分,最左側藍色方形的節點和中間長條的節點並不是一體的,而是分離的,但是我透過setHost 進行節點與節點間的吸附,然後反吸附回來,這樣操作上就相當於這兩個節點是一體的:###            
var exchange = createNode('images/交换机.json', null, -53, 313);
exchange.setHost(line);//设置吸附line.setHost(exchange);//反吸附 又设置line的吸附为exchange

因为 HT 会按照节点添加进数据容器中的顺序来进行层次的排列,我的交换机是在 line 的添加之后的,所以默认交换机的节点会显示在 line 之下,我们将默认的层级显示关闭,并设置交换机 exchange 显示在数据容器的顶部:

           
dataModel.setAutoAdjustIndex(false);//将自动调整data在容器中索引顺序的开关关闭dataModel.sendToTop(exchange);//将data在拓扑上置顶

相关推荐:

HTML5 网络拓扑图应用实例讲解

详解HTML5网络拓扑图整合OpenLayers实现GIS地图应用(图)

HTML5网络拓扑图性能优化的图文详解

以上是HTML5 Canvas 繪製的電信網路拓樸圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP依賴注入容器:快速啟動PHP依賴注入容器:快速啟動May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入與服務定位器PHP中的依賴注入與服務定位器May 13, 2025 am 12:10 AM

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

PHP性能優化策略。PHP性能優化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP電子郵件驗證:確保正確發送電子郵件PHP電子郵件驗證:確保正確發送電子郵件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用