连线(Link)连线的绑定与展开

分组绑定、自环绑定、绑定与展开以及展开间隙等属性

"link.bundle.id": 绑定分组编号,同一编号的连线组成一组。
"link.bundle.independent": 分组是否独立,存在多个连线分组时,是否独立绑定
"link.bundle.gap": 连线之间的间隙
"link.bundle.offset": 连线离端点的偏移量
"link.bundle.enable": 是否参与绑定
"link.bundle.expanded": 是否为展开状态,false表示状态为绑定
下面的例子中,定义了两组连线,分别设置bundlerID为”1″和”2″。



工具JS类:
const twaver = require('twaver');
// 设置每个图元name的颜色
twaver.Styles.setStyle('label.color', '#ec6c00');
// 设置每个图元name2的颜色
twaver.Styles.setStyle('label2.color', '#57ab9a');
twaver.Styles.setStyle('select.color', '#ef8200');
//TWaver内部预定义六中告警级别
twaver.AlarmSeverity.CRITICAL = twaver.AlarmSeverity.add(500, 'Critical', 'C', "#FF0000");
twaver.AlarmSeverity.MAJOR = twaver.AlarmSeverity.add(400, 'Major', 'M', "#FFA000");
twaver.AlarmSeverity.MINOR = twaver.AlarmSeverity.add(300, 'Minor', 'm', "#FFFF00");
twaver.AlarmSeverity.WARNING = twaver.AlarmSeverity.add(200, 'Warning', 'W', "#00FFFF");
twaver.AlarmSeverity.INDETERMINATE = twaver.AlarmSeverity.add(100, 'Indeterminate', 'N', "#C800FF");
twaver.AlarmSeverity.CLEARED = twaver.AlarmSeverity.add(0, 'Cleared', 'R', "#00FF00");const { CRITICAL, MAJOR, WARNING, MINOR, INDETERMINATE, CLEARED } = twaver.AlarmSeverity
export const ALARM1 = CLEARED
export const ALARM2 = INDETERMINATE
export const ALARM3 = MINOR
export const ALARM4 = MAJOR
export const ALARM5 = CRITICAL/*** 创建一个dataBox容器* 容器中可以add图元*/
export const returnElementBoxFun = () => new twaver.ElementBox()/*** 创建一个画布 network对象* @param {ElementBox} box  创建一个画布 network对象*/
export const returnNetworkFun = (box) => new twaver.vector.Network(box)/*** 创建一个Group* 用于包裹图元*/
export const returnGroupFun = (box, obj = {}) => {let group = new twaver.Group(obj)box.add(group)return group
}/*** 创建一个容器dataBox和一个画布* 并将容器实例化画布* @returns [box,network] box network*/
export const returnElementBoxAndNetworkFun = () => {let box = returnElementBoxFun();let network = returnNetworkFun(box);return [box, network]
}/*** 用于创建一个节点* @param {ElementBox} box dataBox * @param {String} name 当前节点的name* @param {Number} x   当前节点的x坐标* @param {Number} y 当前节点的y坐标* @returns {Node} Node*/
export const returnNodeFun = (box, Obj = {}) => {let node = new twaver.Node(Obj);// node.setName(name);// node.setLocation(x, y);box.add(node);return node
}/*** * @param {Node} node1 节点1* @param {Node} node2 节点2*/
export const returnLineFun = (node1, node2) => new twaver.Link(node1, node2)/*** 注册图片 用于设置图元的img setImage* @param {String} url 图片 url* @param {NetWork} svg  NetWork对象*/
export function returnRegisterImage(url, svg) {var image = new Image();image.src = url;var views = arguments;image.onload = function () {// getImageName 获取到的图片name用做 node节点的显示imgtwaver.Util.registerImage(getImageName(url), image, image.width, image.height, svg === true);image.onload = null;for (var i = 1; i < views.length; i++) {var view = views[i];if (view.invalidateElementUIs) {view.invalidateElementUIs();}if (view.invalidateDisplay) {view.invalidateDisplay();}}};// getImageName 获取到的图片name用做 node节点的显示imgconst getImageName = (url) => {var index = url.lastIndexOf('/');var name = url;if (index >= 0) {name = url.substring(index + 1);}index = name.lastIndexOf('.');if (index >= 0) {name = name.substring(0, index);}return name;}
}/** @param {*} 告警的Id * @param {*} 告警网元的Id * @param {*} 告警级别 * @param {*} alarmBox 网元容器.getAlarmBox()*/
export const returnAlarmFun = (alarmID, elementID, alarmSeverity, alarmBox) => {var alarm = new twaver.Alarm(alarmID, elementID, alarmSeverity);alarmBox.add(alarm);
}/*** * @param {*} box 容器dataBox* @param {*} layer layer对象* @param {*} shape 图层的形状* @param {*} x node点的坐标* @param {*} y node点的坐标* @param {*} width 图层的宽高* @param {*} height 图层的宽高* @param {*} fillColor  图层填充颜色*/
/*** * shape * circle 圆形* diamond 菱形* rectangle 长方形*/
export const createNode = (box, layer, shape, x, y, width, height, fillColor, ) => {var node = new twaver.Node();node.setLayerId(layer.getId());node.setName('layer-' + layer.getId());node.setStyle('body.type', 'vector');node.setStyle('vector.fill.alpha', 0.7);node.setStyle('vector.shape', shape);node.setSize(width, height);node.setLocation(x, y);node.setStyle('vector.fill.color', fillColor);box.add(node); return node;
}
/*** * @param {*} table * @param {*} name * @param {*} propetyName * @param {*} propertyType * @param {*} valueType */
export const returnCreateColumn = (table, name, propetyName, propertyType, valueType) => {var column = new twaver.Column(name);column.setName(name);column.setPropertyName(propetyName);column.setPropertyType(propertyType);if (valueType) {column.setValueType(valueType);}table.getColumnBox().add(column);return column;
}export const returnRandomColor = () => {var r = randomInt(255);var g = randomInt(255);var b = randomInt(255);return '#' + formatNumber((r << 16) | (g << 8) | b);
}
function randomInt(n) {return Math.floor(Math.random() * n);
}function formatNumber(value) {var result = value.toString(16);while (result.length < 6) { result = '0' + result; } return result;
}
react页面:
/** @Descripttion: * @version: * @Author: ZhangJunQing* @Date: 2022-04-18 14:44:05* @LastEditors: ZhangJunQing* @LastEditTime: 2022-04-20 14:26:11*/
import React, { useEffect, useState } from 'react'
import {returnElementBoxAndNetworkFun,returnNodeFun,returnLineFun,
} from './utils'
const twaver = require('twaver');
// const demo = require('demo');
const Demo = () => {const [network, setnetwork] = useState({})const init = () => {const [box, network] = returnElementBoxAndNetworkFun()setnetwork(_ => network)network.invalidateElementUIs();document.getElementById("testID").appendChild(network.getView());// 设置最初的大小network.adjustBounds({ x: 0, y: 0, width: 1000, height: 1000 });var from = returnNodeFun(box, { name: 'from', location: { x: 100, y: 100 } });var to = returnNodeFun(box, { name: 'to', location: { x: 300, y: 300 } });// 代理LinkreturnCreateGroupLink(from, to, 'g1_1', 1, "#57ab9a");returnCreateGroupLink(from, to, 'g1_2', 1, "#57ab9a");returnCreateGroupLink(from, to, 'g1_3', 1, "#57ab9a");// 代理LinkreturnCreateGroupLink(from, to, 'g2_1', 2, "#ec6c00");returnCreateGroupLink(from, to, 'g2_2', 2, "#ec6c00");returnCreateGroupLink(from, to, 'g2_3', 2, "#ec6c00");// 点击组内任何一条Link,都可以使组展开或者闭合function returnCreateGroupLink(from, to, name, groupID, color, type, groupIndependent, gap, offset, bundleEnable) {var link = new twaver.Link(from, to);link.setName(name);if (type) {link.setStyle('link.type', type);}if (color) {link.setStyle('link.color', color);}if (groupID >= 0) {link.setStyle('link.bundle.id', groupID);}// "link.bundle.gap": 连线之间的间隙link.setStyle('link.bundle.gap', 40);if (gap > 0) {link.setStyle('link.bundle.gap', gap);}if (offset > 0) {link.setStyle('link.bundle.offset', offset);}// "link.bundle.independent": 分组是否独立,存在多个连线分组时,是否独立绑定// 当为true的时候 两个组互不干扰 会造成重合的效果link.setStyle('link.bundle.independent', groupIndependent);// true  Link组为展开状态  false 闭合状态link.setStyle('link.bundle.expanded', true);// 是否参与绑定link.setStyle('link.bundle.enable', bundleEnable ? bundleEnable : true);box.add(link);return link;}}useEffect(init, [])return (<><p style={{ fontSize: "20px", paddingLeft: "50px", poaddingTop: "50px" }}>tips: </p><ul style={{ fontSize: "20px", paddingLeft: "50px" }}><li>连线(Link)连线的绑定与展开</li></ul>{/* 画布元素需要开启定位 不然生成的图元坐标点会偏移 */}<div id="testID" style={{ width: "800px", height: "800px", border: "1px solid #ccc", position: "relative" }}></div></>)
}
export default Demo

学习参考:TWaver Documents

Twaver-HTML5基础学习(13)连线(Link)连线的绑定与展开相关推荐

  1. HTML5基础学习——列表标签表单标签

    学习内容: 1.列表标签 表格是用来显示数据的,那么列表就是用来布局的. 列表最大的特点就是整齐.整洁.有序,它作为布局会更加自由和方便. 根据使用场景不同,列表可以分为三大类:无序列表.有序列表和自 ...

  2. 【html5基础学习速成】

    HTML5是Web中核心语言HTML的规范,用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的,在浏览器中通过一些技术处理将其转换成为了可识别的信息.HTML5在从前HTML4.01的基础 ...

  3. go语言基础学习13章节详细总结欢迎一起入门学习

    golang学习笔记 开篇: 初次学习,理解尚浅.暂且做些笔记,日后慢慢充实后,再加以更正或添加~ 全部已上传至gitee平台,观看效果更佳,欢迎点赞:https://gitee.com/huangd ...

  4. 前端(HTML5基础学习笔记)

    以下学习路线都是基于自己看的黑马程序员视频总结而来 学习路线:HTML5 -> CSS3 -> H5C3 一.HTML简介 1. 网页 2. 常用游览器 3. Web标准(重点) 二.HT ...

  5. Python基础学习(13)—面向对象2(特殊方法,分装及装饰器)

    面向对象(2) 1.1 特殊方法(魔术方法) 1 特殊方法例如__init__的都是以__开头__结尾的方法, 特殊方法会在特定的时候自动调用,init会在对象创建以后立即执行并且init会对新创建的 ...

  6. HTML5基础学习(7):登录表单制作、表单知识补充

    一.登录表单制作 有的时候用户需要填写信息,然后把填写完的信息交给服务器.把数据提交给服务器的动作就需要一个新的知识点:表单. (1)常见的表单控件 大部分的表单控件都是<input>编写 ...

  7. HTML5基础学习(5):百度云盘制作、简单表格制作

    一.百度云盘制作 (1)绝对地址与相对地址 绝对地址:在任何情况下,都可以找得到的地址.网页中下面图片所在的路径叫做绝对路径: <img src="http://1000phone.c ...

  8. CSS基础学习-13.CSS 浮动

    如果前一个元素设置浮动属性,则之后的元素也会继承float属性,我觉得这里说是继承不太对,可以理解为会影响到之后的元素,所以在设置浮动元素之后的元素要想不被影响就需要清除浮动.元素设置左浮动,则清除左 ...

  9. HTML html5基础详细笔记 第一个模块

    第01章-前端核心技术-HTML5基础 学习目标 了解什么是HTML 掌握HTML标签.元素的概念 重点 掌握HTML常用头部元素的使用 重点 掌握HTML标题.段落.文本.图片等排版 重点 难点 掌 ...

  10. HTML5 在线学习网站

    HTML5 在线学习网站 摘要: HTML5的强大,让更多的人想要系统的学习它.但面对网上五花八门的搜索结果,是否无法抉择?文章作者以自己的实践经验,筛选出来11个在线学习HTML5开发的网站,让HT ...

最新文章

  1. MTU(最大传输单元)
  2. Scala协变与Java泛型
  3. 基础篇:7.Content provider与Content Resolver实现数据共享
  4. [UWP]用Shape做动画(2):使用与扩展PointAnimation
  5. 关于ajax 1.0的一个问题?
  6. 2021年7月份学习总结,多套WebFuture的系统部署(简易版)
  7. java与python的区别和作用_python与java用途区别有哪些
  8. resources.arsc格式(包-类型-资源项)
  9. ubuntu开机报错 system program problem detected
  10. mysql导数据出指定数量_mysql导出指定数据或部份数据的方法
  11. Bootstrap 媒体对象
  12. 三个数互质 java_LeetCode 5198. 丑数 III(Java)容斥原理和二分查找
  13. tensorflow之saver
  14. 番茄花园GHOST SP3无法安装IIS 信息服务的解决方法
  15. 笔记本如何不按Fn键就能实现F键的功能
  16. Java的8 大基本类型的包装类和美女选妃案例的两种写法
  17. RGB、HSL、Hex网页色彩,看完这篇全懂了
  18. 物联网的体系结构和关键技术
  19. yandex注册验证码怎么填_注册163邮箱格式怎么填?163电子邮件注册格式
  20. 电调板维修之更换atmega8a主控芯片

热门文章

  1. MessageQueue#next() 方法图解
  2. Rtools下载与安装(win10)
  3. 最实用的Linux命令大全
  4. Jmeter性能测试报告模板
  5. 计算广告学涉及的学科与技术
  6. 各种浏览器UserAgent一览表(桌面+移动)
  7. Python做出来的数据可视化真香!!
  8. android基于xposed框架,基于Xposed框架的模块:Android EagleEye
  9. layabox位移和旋转动画
  10. Exploring Visual Relationship for Image Captioning