看着这图是不是很眼熟。没错,这是前段时间在Javaeye上风风雨雨的用Swing实现的四层网元拓扑图。看后深有感触,用Swing能做出这样的效果确实不易,何时我用.NET的也能用实现出这种的拓扑结构图。
看看TWaver早已出了.NET的版本,借助于TWaver强大的功能以及之前Swing的例子,我想实现起来应该也不是很难。今天就来分享一下我的思路。
首先我们先来看看整个系统的结构
很典型的四层拓扑,这四个层,我首先想到的也是用Group来实现,仿照之前Swing的例子,设置了group对应的属性
group.IsExpanded = true;
group.SetStyle(Styles.BODY_ALPHA, 0.8);
group.SetStyle(Styles.GROUP_FILL_COLOR, color);
group.SetStyle(Styles.GROUP_GRADIENT, Consts.GRADIENT_LINEAR_NORTHEAST);
group.SetStyle(Styles.LABEL_POSITION, Consts.POSITION_RIGHT);
group.SetStyle(Styles.LABEL_XOFFSET, 100);
group.SetStyle(Styles.LABEL_SIZE, 14);
group.SetStyle(Styles.LABEL_BOLD, true);
group.SetStyle(Styles.LABEL_FONT, new FontFamily("微软雅黑"));
效果不太理想,矩形图形,翻阅TWaver相关文档,发现group上没有设置平行四边形的属性。这就比较麻烦了,我看可能是需要采取定制的功能了,还好TWaver在这方面比较人性化,留了相应的接口,可以重新绘制。
我显示3D的平行四边形的效果图,我想需要给3Dgroup设置两个属性,一个是偏移(angle),也就是group相对于矩形的下方两个点的偏移位置;第二个是深度(deep),也就是3D的厚度。有了这两个参数我们就可以进行定制了。我们需要重写group的DrawContent()方法,在该方法中先取出Group自身的bound,根据angle绘制出平行四边形的四个点
double angle = group.Angle;
double deep = group.Deep;
double gap = bounds.Height / Math.Tan(angle * Math.PI / 180);
PointCollection points = new PointCollection();
Point p1 = new Point(bounds.X - gap, bounds.Y + bounds.Height);
points.Add(p1);
Point p2 = new Point(bounds.X + bounds.Width, bounds.Y + bounds.Height);
points.Add(p2);
Point p3 = new Point(bounds.X + bounds.Width + gap, bounds.Y);
points.Add(p3);
points.Add(new Point(bounds.X, bounds.Y));
// Add
path.Data = this.CreateGeometry(points);
this.AddComponent(path);
this.AddBodyBounds(path.Data.Bounds);
接下来我们就需要绘制下面和右边那种3D的效果了,下方画一个小的平行四边形,这个我们只要计算好这个四边形的四个点就很容易绘制。这四个点可以通过大的大的平行四边形的下面两个点和高度得到:
// Add Bottom Rectangle
path = new Path();
// Set Fill
path.Fill = Utils.CreateSolidColorBrush(fillColor);
// Set Outline
this.SetStroke(path);
// Set Data
RectangleGeometry rectangleGeometry = new RectangleGeometry();
rectangleGeometry.Rect = new Rect(p1.X, p1.Y, p2.X-p1.X, deep);
// Add
path.Data = rectangleGeometry;
this.AddComponent(path);
this.AddBodyBounds(path.Data.Bounds);
右边的平行四边形也类似,这里就不详解了。看看运行后的效果
哈哈,感觉还不错,可以达到预期的效果了。平行四边形准备好了,接下来我们在四边形加上一些节点试试。
继续,用通用的方法创建四个group
接下来我们就要实现这个Demo中的亮点:穿透效果。就是上层节点和下层节点有关联时,不同层之间的连线怎么去穿越group,这个就涉及到TWaver中层的概念
了,上面的四层结构网元之间的覆盖关系就是通过层来实现的,软件业务层是最上层的元素,可以通过设置这个层为最上一层,那么这层上的元素就会覆盖下面所有层的元素。连线的穿透也是这样的道理,我们可以将连线分为上下两部分,上半部分和from节点处于一层,下半部分和to节点处于一层,中间用一个虚拟的节点相连。
private void CreateCrossLayerLink(object fromID, object toID, bool left)
{
Node from = (Node)this.box.GetDataByID(fromID);
Node to = (Node)this.box.GetDataByID(toID);
if (from == null || to == null)
{
return;
}
ConnectPoint point = new ConnectPoint();
point.LayerID = from.LayerID;
double xOffset = -from.Width / 2 - 15;
if (left)
{
xOffset = from.Width / 2 + 15;
}
double yOffset = from.Height / 2 + 20;
double x = from.CenterLocation.X + xOffset;
double y = from.CenterLocation.Y + yOffset;
point.SetCenterLocation(x, y);
point.Parent = from.Parent;
this.box.Add(point);
LayerLink upLink = new LayerLink(from, point, true);
upLink.LayerID = from.LayerID;
upLink.Parent = from.Parent;
this.box.Add(upLink);
LayerLink downLink = new LayerLink(point, to, false);
downLink.LayerID = to.LayerID;
downLink.Parent = to.Parent;
this.box.Add(downLink);
}
效果很快就出来了,我们多创建几个连线试试
下面附上工程的源码,有兴趣的朋友可以继续实现连接的弯曲和告警效果。 LayerDemo
- 大小: 155.4 KB
- 大小: 24.9 KB
- 大小: 51.4 KB
- 大小: 54.6 KB
- 大小: 155.4 KB
- 大小: 173.8 KB
- 大小: 55.1 KB
- 大小: 4.7 KB
- 大小: 128.6 KB
分享到:
相关推荐
它们发送请求到网络上的各个节点,收集返回的信息,如设备类型、IP地址、MAC地址、端口信息等,然后根据这些信息构建拓扑结构。 四、使用场景 1. 网络规划:在设计新网络或改造现有网络时,可以快速可视化网络布局...
- **拓扑结构**:采用B/S架构,即浏览器/服务器模式。这种模式下,用户通过浏览器即可访问系统,无需安装特定的客户端软件。 - **服务器配置**: - **Web服务器**:使用Windows 2003 Server + IIS 6.0作为基础平台...
1. 源代码结构:ASP.NET项目通常包含多个层次,如表示层、业务逻辑层和数据访问层,确保代码的可维护性和可扩展性。 2. 安全性:确保信息传输的安全性,可以使用HTTPS协议加密数据,防止中间人攻击。同时,对敏感...
它通过创建虚拟主机、交换机以及控制器等组件来模拟真实的网络拓扑结构,并允许用户对这些组件进行编程控制。 在实际应用中,Mininet不仅可以用来构建简单的两节点或三节点网络模型,还可以构建复杂的多层网络拓扑...
六、C#、.NET与Java中的数据结构实现 1. C#中的System.Collections.Generic命名空间提供了各种数据结构的实现,如List、Dictionary, TValue>等。 2. .NET框架还提供了System.Collections.Concurrent命名空间,为多...
#### 1.3 BACnet网络的拓扑结构 BACnet支持多种网络拓扑,如环形、星形、总线型和网状结构。这些拓扑为不同环境和需求提供了灵活性。 #### 1.4 BACnet的协议栈和数据流 BACnet协议栈包括物理层、数据链路层(包含...
- 系统组成:包括PC端和手机端APP,结构和通信方式与无线巡检系统相似。 - 定位技术:同样采用GPS和基站定位,GIS功能也依赖于百度地图API。 3. **老人关爱系统** - 监控功能:侧重于老人的位置信息监控,通过...
移相全桥是一种常见的电力电子拓扑结构,它由四个开关元件(通常是MOSFET或IGBT)组成,通过改变这些开关的导通和截止时间,可以控制输出电压的相位和幅度。这种电路在电机驱动、音频放大器、电源转换等领域有着广泛...
该算法是目前最常用的学习方法之一,能够有效地处理大型学习问题,特别是对于那些具有复杂拓扑结构的多层网络。反向传播算法通过梯度下降的方式寻找权重空间中的误差函数最小值点,进而实现网络权重的有效调整。 ##...
- **解析**:TCP/IP模型由四层组成,自下而上分别为网络接口层、网际层、传输层和应用层。其中,传输层的TCP协议确保数据包在网络中的可靠传输,通过三次握手建立连接,四次挥手断开连接,以及滑动窗口机制来控制...
在实验二中,学生会接触到网络通信的基本概念,如OSI七层模型和TCP/IP四层模型。这部分内容要求学生理解每一层模型的功能和作用,以及它们如何协同工作以实现数据的传输。例如,物理层负责数据的物理传输,数据链路...
五、平台拓扑结构 * 支持 10000 个以上传感设备并发连接,每 1 秒一个心跳业务处理 * 支持中间层高性能分布式部署,支持多个 Web 前端站点,支持跨域访问 * 支持 Http 及 https 协议数据访问 * 支持服务接口令牌 ...
4. **DNS服务器位置与拓扑结构查询**:获取目标网站的DNS服务器信息及网络拓扑结构,通过专门的在线工具实现。 5. **Web挖掘与搜索**:利用Google hacking技巧,搜索特定网站的关键信息,如登录页面、管理后台等。 6...
首先,我们需要理解TCP/IP模型的四层结构:应用层、传输层、网络层和数据链路层。应用层是最高层,包括HTTP、FTP、SMTP等协议,它们定义了应用程序如何通过网络发送和接收数据。传输层主要由TCP(传输控制协议)和...
- 计算机网络可以是广播式或点对点式,按照规模和拓扑结构可分为星型、总线型、环型、树型和混合型等。 - 按照使用范围,网络可以是公用网或专用网,如局域网(LAN)、城域网(MAN)和广域网(WAN)。 3. 网络的...
这包括合理的网络拓扑结构、有效的负载均衡策略以及可靠的数据传输机制等。 总之,供电公司工程管理系统的设计与实施对于提升工程管理效率、优化工作流程以及增强企业的市场竞争力具有重要意义。通过科学合理的设计...
系统支持移动办公,如通过PSTN、PDA手机无线上网、ADSL/ISDN等方式接入,适用于总部、子公司、分公司、直营店等多层级机构的管理,形成异地管理网络拓扑结构,从而提高企业经营管理水平,降低成本,增强国际竞争力。...
25. 不属于网络拓扑结构形式的是分支结构。 26. 线程对象的生命周期包括新建、运行、就绪和死亡四种状态。 27. 对象间通信通常通过发送消息实现,也就是调用另一对象的方法。 这些知识点对于准备计算机二级等级...