先看看发光链路的运行效果:
在这个Demo中主要包含三个技术点,一是如何在选取一条链路时,让整条回路发光;二是如何绘制带有箭头方向的曲线link;三是如何设置链路的样式,让整体可控。
1.如何获取整条回路的所有link,并使之发光
以前做客户支持,也处理过类似的问题,当时的解决方法是通过获取当前的Link,然后通过不断的遍历,不断获取link的fromNode和toNode,然后再获取Node的Link,从而获取回路中所有的Link和Node。这样实现的缺点是要通过大量的遍历,实现起来比较繁琐,本文的处理方法是,在创建link的时候,设置一个Client属性,在选择回路的时候,直接读取这个Client属性,并遍历一次即可。创建回路代码如下:
1 |
function createCircuit(nodes, linename, 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" );
|
8 |
link.setClient( 'linename' , linename);
|
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);
|
16 |
link.setClient( 'linename' , linename);
|
18 |
link.setStyle( 'link.type' , "orthogonal.H.V" );
|
20 |
link.setStyle( 'link.type' , "orthogonal.V.H" );
|
22 |
link.setStyle( 'link.type' , "orthogonal.V.H" );
|
2.自定义实现带有箭头的曲线link
这个主要考察的是canvas绘制能力了,核心代码如下:
1 |
cx = cx - Math.cos(angle) * radius; |
2 |
cy = cy - Math.sin(angle) * radius;
|
5 |
ctx.moveTo(p1.x, p1.y - h1 / 2 );
|
6 |
ctx.quadraticCurveTo(cx, cy, p2.x, p2.y - h2 / 2 );
|
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的类型,并不断刷新。
核心代码如下:
1 |
function 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();
|
8 |
nextLinks.forEach(function (element) {
|
9 |
if (element.getToNode() !== toNode) {
|
10 |
nextNode = element.getToNode();
|
13 |
var fromPoint = fromNode.getCenterLocation();
|
14 |
var toPoint = toNode.getCenterLocation();
|
17 |
nextPoint = nextNode.getCenterLocation();
|
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" );
|
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" );
|
34 |
element.setStyle( 'link.type' , "orthogonal.V.H" );
|
分享到:
相关推荐
此外,通过优化电路设计,如增加ESD保护环路,可以在ESD事件发生时提供额外的保护。 在电子政务项目实施中,选择具有良好抗静电性能的LED产品至关重要。这不仅涉及到设备的可靠性,也关系到整个系统的稳定性。同时...
该文档介绍了一种创新的控制电路设计,用于循环点亮发光二极管(LED)。传统的LED循环点亮技术通常依赖单片机及其外围电路,还需要专门的编程代码,这使得整个控制系统较为复杂,且对硬件和软件的稳定性要求较高。...
通过调整LED的电流,控制环路可以补偿因器件老化引起的发光强度变化,确保长期保持出厂设定的光强。图1展示了这种系统的构成,通常包括一个光电二极管,用于检测光源的光强,并将光信号转化为电信号。 光电二极管是...
电源技术在工业应用中扮演着至关重要的角色,特别是在环路报警器等传感器设备中。传统的50/60Hz变压器虽然适用于许多场合,但在需要低功率(如几毫瓦)和绝缘隔离的环境下,它们显得过于庞大且效率低下。在这种情况...
电流采样电路是其中的一个关键组成部分,负责监测流经LED的电感电流,保证LED以适当的亮度和效率发光。本文介绍了一种基于BOOST环路的电流采样电路设计,并提出了利用功率开关管导通电阻进行电流采样的方法,这种...
补偿电路通常包含多个反馈环路,能够实时监测和调整每个像素的发光状态,从而提高图像质量。 接下来,我们关注显示面板的设计。在OLED显示面板中,每个像素由红、绿、蓝三种颜色的OLED子像素组成。补偿电路需要考虑...
在电源调节过程中,尽管同时控制多个环路会存在一些问题,但如果我们能了解系统的约束条件,就可以想出一种可行的策略。 在我的职业生涯中,我设计的大多数电源都具有一个固定的可调节电压,能够单路输入与单路...
电路的接地应尽可能短而直,以减小信号回路的环路面积,降低感应噪声。此外,多点接地策略可以进一步减少接地阻抗,提高抗干扰能力。 3. 滤波电路:滤波器可以去除电源线或信号线上的高频噪声,保护OLED驱动电路不...
在电源调节过程中,尽管同时控制多个环路会存在一些问题,但如果我们能了解系统的约束条件,就可以想出一种可行的策略。 在我的职业生涯中,我设计的大多数电源都具有一个固定的可调节电压,能够单路输入与单路...
在电源调节过程中,尽管同时控制多个环路会存在一些问题,但如果我们能了解系统的约束条件,就可以想出一种可行的策略。 在我的职业生涯中,我设计的大多数电源都具有一个固定的可调节电压,能够单路输入与单路...
- **组成**: 主要由发光二极管(LED)和光敏三极管(或光敏二极管)构成。 - **应用**: 常用于电气隔离、信号传输等领域。 **3. TL431与光耦结合应用** - **目的**: 在电源转换器设计中,使用TL431与光耦合器组合...
标题中的“OLED_6050_”很可能是指一种基于OLED(有机发光二极管)显示技术的硬件模块,而6050可能是该模块的特定型号或者是与其通信的微控制器(如TM4C6050)的型号。这种硬件常用于小型、低功耗的显示应用,如智能...
光电流由T3反相放大,并通过反馈电路返回到T2的基极,形成了一个直流负反馈环路,这就是AGC电路。AGC电路可以自动调整电路增益,使系统在光照强度变化时保持稳定输出。R13和C11构成的低通滤波器负责这一过程,确保...
我们认为在e + e- ation灭中产生大角度的两个光子是监视未来e + e-圆形对撞机(FCC-ee)发光度的可能过程。 我们通过对次领先的电弱校正和由于多光子辐射导致的对数QED贡献进行详细的现象学研究,来审查和评估理论...
#### 一、LED概述及其发光原理 - **定义**: LED,即Light Emitting Diode的缩写,意为发光二极管,是一种能够将电能转化为可见光的固态半导体器件。 - **优点**: - 发光效率高,一般可达50~200lm/W; - 体积小,...
光耦中的发光二极管(LED)将电信号转换为光信号,该信号再由光敏元件(如光电晶体管)接收,并转换回电信号。这样的设计能有效防止电流环路中的噪声和电压波动影响到敏感的传感器和微控制器。 3. 运放和LDO:运放...
本文将深入探讨光耦的主要电气规格定义与解释、CTR变化对设计的影响、光耦的寿命计算以及小信号特征及其对环路稳定性的影响等,旨在帮助工程师们更好地理解和应用光耦技术。 #### 二、光耦主要电气规格的定义与解释...
在PLC1发送“0”信号时,U1输出约+11V的电压,使得T1的发光二极管发光,进而使得T1的光电三极管导通。电流通过通信线路,驱动T2的发光二极管发光,T2的光电三极管也跟着导通。T2发射极输出的电压约为+11V,接收芯片...
- 通过光电耦合器的电气隔离,可以避免设备间地线电位差引起的地环路电流问题。 #### 五、结论 光电耦合器作为一种重要的隔离技术,在工业控制电子电路抗干扰中扮演着关键角色。通过采用光电耦合器,不仅可以提高...