热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用HTML5Canvas高效构建电信网络拓扑图

电信网络拓扑图在实际应用中具有很高的实用价值。本文介绍了一个基于HTML5Canvas的电信网络拓扑图项目,不仅实现了基本的图形展示功能,还加入了自动布局和属性栏功能,使项目更加完善。此Demo经过细微调整即可直接应用于实际项目中。

引言


电信网络拓扑图在通信领域有着广泛的应用,能够直观地展示网络结构和节点之间的连接关系。近期,我参与了一个基于HTML5 Canvas的电信网络拓扑图项目,除了基本的图形展示功能外,还增加了自动布局和属性栏功能,使得整个项目更加实用和完整。本文将详细介绍该项目的实现过程,希望能够为读者提供一些参考和帮助。


项目效果


图片描述


拓扑图布局


项目界面主要分为三部分:左侧的拓扑图(graphView),右上角的属性栏(propertyView),以及右下角的表格(tableView)。以下是具体的布局代码:


var gv = new ht.graph.GraphView();
var tablePane = new ht.widget.TablePane(gv.dm());
var propertyView = new ht.widget.PropertyView(gv.dm());

var rightView = new ht.widget.SplitView(propertyView, tablePane, 'v', 0.4);
rightView.getView().style.borderLeft = '1px solid #000';

var borderPane = new ht.widget.BorderPane();
borderPane.setRightView(rightView, 400);
borderPane.setCenterView(gv);
borderPane.addToDOM();

上述代码中,ht.widget.SplitView用于垂直分割属性栏和表格,ht.widget.BorderPane用于整体布局。最后,通过addToDOM()方法将布局添加到页面中。


节点初始化


为了展示不同的节点及其属性,我们在拓扑图中添加了多个节点,并设置了不同的属性。以下是节点初始化的代码:


function initModel() {
var name = "设备";
var count = 0;
var root = createNode(name + count++, name + (++count));
root.setImage('./symbols/机房/服务器.json');
root.setName('服务器');
root.s('label.position', 3);
gv.sm().ss(root);

for (var i = 0; i <2; i++) {
var iNode = createNode(name + count++, name + (++count));
createEdge(root, iNode);
for (var j = 0; j <2; j++) {
var jNode = createNode(name + count++, name + (++count));
createEdge(iNode, jNode);
}
}
}

createNode函数用于创建节点,并设置其属性和图像。每个节点还关联了属性面板和表格面板,以便于动态显示和修改节点属性。


属性面板


属性面板用于显示和编辑节点的各种属性。以下是创建属性面板的代码:


function createProperty() {
propertyView.addProperties([
{ name: 'name', displayName: '名称' },
{ name: 'hidden', displayName: '隐藏这个节点', accessType: 'attr', valueType: 'boolean', editable: true },
{ name: 'grade', displayName: '类型', accessType: 'attr', drawPropertyValue: function(g, property, value, rowIndex, x, y, w, h, data, view) {
var cb = function(v) { data.a('grade', v); }
return fillFormPane(data.formPane1, w, h, data.tablePane1, serviceType, cb);
} },
{ name: 'number', displayName: '内存', accessType: 'attr', drawPropertyValue: function(g, property, value, rowIndex, x, y, w, h, data, view) {
var cb = function(v) { data.a('number', v); }
return fillFormPane(data.formPane2, w, h, data.tablePane2, serviceSize, cb);
} },
{ name: '接口类型', accessType: 'attr', displayName: '接口类型' },
{ name: '显卡', accessType: 'attr', displayName: '显卡' },
{ name: '型号', accessType: 'attr', displayName: '型号' }
]);
}

属性面板中的drawPropertyValue方法用于自定义属性值的渲染方式,通过弹出对话框选择属性值并更新节点属性。


自动布局


自动布局功能可以根据节点和连线的关系,自动调整节点的位置,使得拓扑图更加清晰。以下是实现自动布局的代码:


var autoLayout = new ht.layout.AutoLayout(gv);
setTimeout(function() {
layout('towardsouth', true);
}, 200);

function createDirectionForm() {
var form = new ht.widget.FormPane();
form.setWidth(200);
form.setHeight(80);
document.body.appendChild(form.getView());
form.getView().style.background = '#fff';
form.getView().style.boxShadow = '4px 16px 16px rgba(0, 0, 0, 0.1)';
form.addRow([{ element: '自动布局:' }], [0.1]);
form.addRow([
{ button: { icon: '布局/南布局.json', onClicked: function() { layout('towardsouth', true); }, toolTip: '朝南布局' } }
// ... 其他布局按钮
], [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]);
return form;
}

通过点击不同的布局按钮,可以实现多种布局方式,如朝南布局、朝北布局等。这些布局方式能够有效地提高拓扑图的可读性和美观性。


以上就是基于HTML5 Canvas构建电信网络拓扑图项目的详细实现过程。希望本文能对您有所启发和帮助。如果有任何疑问或建议,欢迎留言交流。


推荐阅读
  • Struts2(六) 用Struts完成客户列表显示
    Struts完成客户列表显示所用的基础知识在之前的随笔中已经讲过。这篇是介绍如何使用Struts完成客户列表显示。下面是完成的代码执行逻辑图:抽取项目部分代码相信大家 ... [详细]
  • 本文详细介绍了如何使用JavaScript实现数据的双向绑定,包括MVVM架构的基本概念、不同框架下的实现方式以及具体的代码示例。 ... [详细]
  • 深入解析Axios与jQuery的核心差异
    本文详细对比了Axios与jQuery在Web前端开发中的应用,探讨两者在异步请求处理、数据封装及请求方式上的不同之处。 ... [详细]
  • SVG画布HTML5提供两种强有力的“画布”:SVG和Canvas。SVG的特点:SVG绘制的是矢量图,因此对图像进行放大不会失真基于XM ... [详细]
  • 本文介绍了如何使用外向烧鹅IO库来封装GET请求的具体步骤,包括库的安装与配置、请求拦截器的设置以及如何在Vue项目中调用这些封装好的请求方法。 ... [详细]
  • 本文介绍了如何在VB.NET版机房收费系统中实现数据从DataGridView导出至Excel的功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 本文将详细介绍如何在PHP中处理一维和二维数组的去重问题,以及如何有效删除数组中的特定值。通过实例代码,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 现代软件工程开发体验:结对编程
    距现代软件工程开课已经3周,按照课程安排,在最近的9天中,我们进行了极限编程模式的体验:pairwork(结对编程,具体见链接),对象是在academicsearchmap上添加一些新特性。经过选 ... [详细]
  • 本文介绍了jsoncpp,一个强大的C++库,专注于JSON数据的解析和生成。文章提供了详细的使用示例和常见问题的解决方案。 ... [详细]
  • Gradle基础概念与实践指南
    本文详细介绍了Gradle的基本概念、Groovy语言基础、Gradle的生命周期、项目管理以及任务配置等内容,旨在帮助开发者更好地理解和使用Gradle构建工具。 ... [详细]
  • Solr的安装与部署指南
    Solr作为一款独立的企业级搜索应用服务器,支持Web-service风格的API接口,允许用户通过HTTP请求提交XML文件以创建索引或执行搜索操作。本文将详细介绍Solr的安装步骤及配置方法。 ... [详细]
  • 深入探讨jQuery中的事件处理、动画效果及表单操作
    本文详细介绍了jQuery这一流行的JavaScript库在事件处理、动画效果实现以及表单操作方面的应用。通过具体的示例和代码片段,帮助开发者更好地理解和运用jQuery的强大功能。 ... [详细]
  • 这是一个基于 React 构建的掘金移动版应用,主要模仿了掘金的 UI 设计,并进行了部分自定义调整。项目专注于移动端体验,同时支持服务端渲染和渐进式网络应用(PWA)功能。 ... [详细]
  • 使用HTML5的localStorage创建在线记事本
    介绍如何通过HTML5的localStorage技术实现一个简单的在线记事本功能,该功能支持用户记录信息及其创建时间,并能在页面重新加载后恢复之前的记录。 ... [详细]
  • 本文详细介绍了在首次安装 Qt 后,创建新项目时遇到‘No valid kits found’错误的解决方案。通过调整 Qt Creator 中的配置,确保正确识别已安装的 Qt 版本。 ... [详细]
author-avatar
zhangsheng7_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有