如何创建发光的环路

先看看发光链路的运行效果:

在这个Demo中主要包含三个技术点,一是如何在选取一条链路时,让整条回路发光;二是如何绘制带有箭头方向的曲线link;三是如何设置链路的样式,让整体可控。
1.如何获取整条回路的所有link,并使之发光
以前做客户支持,也处理过类似的问题,当时的解决方法是通过获取当前的Link,然后通过不断的遍历,不断获取link的fromNode和toNode,然后再获取Node的Link,从而获取回路中所有的Link和Node。这样实现的缺点是要通过大量的遍历,实现起来比较繁琐,本文的处理方法是,在创建link的时候,设置一个Client属性,在选择回路的时候,直接读取这个Client属性,并遍历一次即可。创建回路代码如下:

1function createCircuit(nodes, linename, flag) {
2     if (flag) {
3         var startNode = nodes[0];
4         var stopNode = nodes[nodes.length - 1];
5         var link = new CLink(stopNode, startNode);
6         link.setStyle('link.type', "extend.left");
7//        link.setName(linename);
8         link.setClient('linename', linename);
9         box.add(link);
10     }
11     for (var i = 0; i < nodes.length - 1; i++) {
12         var fromNode = nodes[i];
13         var toNode = nodes[i + 1];
14         var link = new CLink(fromNode, toNode);
15//        link.setName(linename);
16         link.setClient('linename', linename);
17         if (i == 0) {
18             link.setStyle('link.type', "orthogonal.H.V");//orthogonal\
19         } else if (i == 1) {
20             link.setStyle('link.type', "orthogonal.V.H");//orthogonal\
21         } else if (i == 2) {
22             link.setStyle('link.type', "orthogonal.V.H");//orthogonal\
23         }
24//       link.setStyle('link.type', "orthogonal");//orthogonal\
25         box.add(link);
26     }
27}

2.自定义实现带有箭头的曲线link
这个主要考察的是canvas绘制能力了,核心代码如下:

1cx = cx - Math.cos(angle) * radius;
2         cy = cy - Math.sin(angle) * radius;
3         ctx.lineWidth = 4;
4         ctx.beginPath();
5         ctx.moveTo(p1.x, p1.y - h1 / 2);
6         ctx.quadraticCurveTo(cx, cy, p2.x, p2.y - h2 / 2);
7         ctx.stroke();
8         ctx.closePath();
9        //draw arrow
10         this.drawArrow(ctx, p2.x, p2.y - h2 / 5 * 3, cx, cy+20, 1, 2, Math.PI / 8, 10);

3.设置Link的样式
TWaver的Link支持很多样式,常用的类型可参考下图,本文主要监听mousemove事件,并在拖动Node的过程中不断计算Node之间的相对位置,从而判定Link的类型,并不断刷新。

核心代码如下:

1function refreshLinkType() {
2     box.forEach(function (element) {
3         if (element instanceof  twaver.Link) {
4             var fromNode = element.getFromNode();
5             var toNode = element.getToNode();
6             var nextLinks = toNode.getLinks();
7             var nextNode;
8             nextLinks.forEach(function (element) {
9                 if (element.getToNode() !== toNode) {
10                     nextNode = element.getToNode();
11                 }
12             });
13             var fromPoint = fromNode.getCenterLocation();
14             var toPoint = toNode.getCenterLocation();
15             var nextPoint;
16             if (nextNode) {
17                 nextPoint = nextNode.getCenterLocation();
18             }
19             //compute the relationship of location between fromNode and toNode
20             if (fromPoint.x < toPoint.x && fromPoint.y < toPoint.y) {
21                 element.setStyle('link.type', "orthogonal.V.H");
22             } else if (fromPoint.x < toPoint.x && fromPoint.y > toPoint.y) {
23                 element.setStyle('link.type', "orthogonal.V.H");
24             } else if (fromPoint.x > toPoint.x && fromPoint.y < toPoint.y) {
25                 element.setStyle('link.type', "orthogonal.V.H");
26             } else if (fromPoint.x > toPoint.x && fromPoint.y > toPoint.y) {
27                 element.setStyle('link.type', "orthogonal");
28             }
29             if (nextPoint) {
30                 if (toPoint.x > fromPoint.x && toPoint.x > nextPoint.x) {
31                     if (toPoint.y > fromPoint.y && toPoint.y < nextPoint.y) {
32                         element.setStyle('link.type', "orthogonal.H.V");
33                     } else {
34                         element.setStyle('link.type', "orthogonal.V.H");
35                     }
36                 }
37             }
38 
39         }
40     });
41}
STP生成树协议实验:从环路制造到故障排查的完整指南 在计算机网络中,二层交换网络通过冗余链路提供高可用性,但物理环路会引发广播风暴,导致网络瘫痪。生成树协议(STP)通过逻辑阻塞端口消除环路,并在活动链路故障时自动启用备份路径,保障网络稳定性。其技术价值在于实现网络冗余与快速收敛,是数据中心、企业园区网等场景中防止二层环路的基石。本文聚焦STP/RSTP的选举机制与收敛过程,通过实验演示环路危害、根桥选举及故障切换,并结合广播风暴、端口状态等热词,提供从原理到实践的排错思路与优化建议。 阅读详情

相关推荐

隔离式USB串口桥设计指南:从地环路到电源隔离的完整方案

在工业自动化与嵌入式调试场景中,USB转串口通信常因地环路与共模干扰而出现乱码,甚至烧毁接口芯片。隔离技术的核心在于通过数字隔离器与隔离电源,切断设备间的地电流回路,同时抵御浪涌冲击,确保信号完整可靠。掌握隔离式USB串口桥的设计方法,不仅有助于提升工业现场设备调试效率,也是保障医疗、传感器采集等高可靠应用稳定运行的关键。文章围绕方案选型、电路实现、电源设计与故障排查,提供了可直接落地的参考思路,助力工程师规避接口隔离中的高频陷阱。

weixin_33754065的博客 397

echarts 地图散点发光涟漪效果

html5 echarts开发的全国地图,并带有发光效果,酷炫地图显示

DIY发光NFC标签:基于NT3H1101的能量采集与天线设计实战

NFC技术早已融入日常,但大多数标签只是被动响应,无法主动驱动外部器件。能量采集(Energy Harvesting)技术改变了这一局面,它让NFC标签能从读卡器的射频场中获取微量电能,点亮LED甚至驱动传感器,为无源物联网设备提供了新的可能性。然而,实现这类标签的关键在于PCB天线设计,13.56MHz谐振匹配、线圈匝数与铺铜处理都直接影响读卡距离和能量输出。NT3H1101作为支持能量采集与I2C接口的NFC芯片,降低了DIY门槛,让创客可以亲手制作会发光的智能钥匙卡。本文从能量采集原理出发,结合PCB

weixin_33908217的博客 467

TWaver .NET 开发指南+API(英文版)

2014年8月最新版TWaver .NET 开发指南和详细的API,辅助TWaver组件开发。

NI Multisim 14.1新手入门:5分钟搞定LED发光电路模拟(附元件库调用技巧)

本文详细介绍了如何在NI Multisim 14.1中快速搭建LED发光电路,从元件库调用到电路连接,再到仿真失败排查,提供了一系列实用技巧和底层逻辑分析。特别适合电路仿真新手快速上手,避免常见错误,提升工作效率。

weixin_29159995的博客 276

LTspice仿真TL431反馈电路:模型导入、搭建与避坑指南

在开关电源设计中,反馈环路的稳定性直接影响输出电压精度与系统可靠性。TL431作为三端可调并联稳压器,内部集成2.495V基准源与误差放大器,常用于精密稳压和隔离反馈场景。借助LTspice这一免费SPICE仿真工具,工程师可以在搭建实物前对TL431电路进行静态工作点与瞬态分析,快速验证环路补偿参数,大幅减少反复焊接和调试的时间成本。本文从模型获取与导入流程讲起,逐步演示典型TL431反馈电路搭建方法,并总结模型报错、仿真不收敛以及仿真与实测差异等高频问题的排查思路,帮助电源工程师高效掌握基于仿真的TL4

weixin_42647395的博客 210

Twaver 中link流动效果,tooltip显示/隐藏

1.设置link的流动效果有时发现单纯设置link.setStyle('link.flow', true);并没有起作用,这时需要检查之前是否设置://流动线条network.setLinkFlowEnabled(true);2.设置toolTip的显示与隐藏    network.setToolTipEnabled(true);    network.setToolTipEnabled(fals...

Keep moving on. 1656

在现实中不知道组网拓扑图,怎么处理交换机故障,交换机有哪些故障,怎么查看交换机数据(华为)

在现实中不知道组网拓扑图,怎么处理交换机故障,交换机有哪些故障,怎么查看交换机数据(华为)

2201_75459440的博客 820

Twaver-HTML5基础学习(31)Tree基本使用

Twaver-HTML5基础学习(31)Tree基本使用

见贤思齐焉,见不贤内自省 907

PCB设计避坑指南:光耦模块布局布线中的5个常见错误及解决方案

本文针对PCB设计中光耦模块的常见问题,详细剖析了五个关键错误,包括忽视电气间隙与爬电距离、回路布局混乱、忽略寄生电容、电源去耦随意及热管理不足,并提供了具体的解决方案与设计规范。重点强调了通过物理挖空、优化布局布线、选型匹配和降额设计来确保信号隔离与系统长期可靠性,是提升工业控制与电源管理PCB设计质量的重要指南。

weixin_29310605的博客 144

从零实现一个光耦元件并导入Multisim数据库

详细介绍如何从零开始设计一个光耦元件,并将其成功导入multisim数据库,实现电路仿真无缝对接。内容涵盖元件建模、参数设置与数据库管理技巧,助力高效电子设计。

weixin_36149538的博客 353

别再死记硬背了!用这个‘搭积木’思维,5分钟搞懂Verilog Module的写法

本文通过‘搭积木’思维,帮助读者快速掌握Verilog Module的写法。将Verilog模块比作乐高积木,详细解析模块定义、端口连接、模块实例化等核心概念,并介绍参数化和生成块等进阶技巧,让硬件设计变得直观易懂。

weixin_30251829的博客 385

光耦原理与工程设计:隔离电路参数选型与AD实战避坑指南

光耦作为电力电子系统中实现电气隔离的核心器件,其本质是利用光媒介完成输入与输出间的信号传递与安全隔离。工作原理基于LED发光—绝缘介质传输—光敏器件接收的光电转换链路,关键参数如电流传输比(CTR)、响应时间、隔离电压和反向耐压共同决定了系统在高温、噪声、高频等复杂工况下的可靠性。CTR并非固定值,而是受输入电流、温度及老化影响的动态参数;响应时间制约信号带宽,需匹配开关频率并预留余量;隔离电压则是安规设计的生命线,必须结合污染等级与过压类别降额使用。在工业控制、开关电源反馈、电机驱动等典型场景中,光耦承担

weixin_33947521的博客 425

非连续模式调光技术:实现HUD与投影仪低亮度无闪烁显示

在精密显示领域,如汽车抬头显示(HUD)和高端投影仪,实现宽范围、高精度的亮度控制是核心挑战。传统的PWM调光在低亮度下易出现闪烁和色彩不均,其根本原因在于LED的非线性特性及驱动噪声在微弱电流下难以被精确控制。为解决此问题,非连续模式调光技术应运而生,它摒弃了连续微电流驱动,转而采用离散、高精度的光脉冲序列。其原理是通过双环路控制:峰值电流限制环路为每个脉冲预存恒定能量,而光反馈环路则实时监测光输出并精确终止脉冲,从而确保每个脉冲的光能量恒定。这项技术的核心价值在于,它通过光反馈闭环控制,从根本上消除了低

weixin_34380948的博客 482

电隔离技术解析:从安全屏障到信号纯净的工程实践

电隔离(Galvanic Isolation)是电子系统中一项基础且关键的技术,其核心原理是在两个电路之间建立电气屏障,阻止直流和低频交流的直接流通,同时允许信号或能量通过光、磁等方式进行传递。这项技术的核心价值在于保障系统安全、提升信号完整性和实现不同电压域之间的可靠通信。在工程实践中,电隔离主要用于四大场景:一是安全隔离,构筑人机安全屏障,防止高压触电事故,满足医疗、工业设备的强制安全标准;二是消除接地环路噪声,解决因多点接地电位差引入的共模干扰,确保传感器数据采集和长距离通信的可靠性;三是实现电平转换

aofan9566的博客 420

锐捷交换机常用命令与排障实战手册:从登录到VLAN、环路与端口安全

网络管理员在日常运维中,交换机命令行是设备开局、配置与排障的核心工具。无论思科、华为还是锐捷,理解模式切换、接口状态查看与VLAN划分都是基本功。锐捷RGOS命令风格贴近思科,但接口命名、ACL和链路聚合等细节存在差异,直接照搬经验容易踩坑。通过掌握show命令族可以快速定位物理层与链路层故障,结合VLAN三层接口配置实现跨网段互通,再借助RLDP、端口安全等特性应对环路与终端异常。从基础登录到配置保存,系统梳理常用命令能显著提升跨品牌运维效率。以锐捷交换机为主线,汇总开局、排障与安全加固的实用命令,助力工

weixin_33811539的博客 338
上一篇: 服务器各项指标的图形化显示
下一篇: 如何创建环型、树型双层布局
subnetwork
博客等级 码龄17年 17粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值