熟悉TWaver的用户都知道Group的概念,如果是Group,那必然会出现一个网元在多组的情况,最近有客户遇到这个问题,给写了Demo,这些也跟大家分享一下如何实现,先让我们看看共享网元的效果。
熟悉TWaver的用户知道添加到Group中的网元,这些网元的父亲都是这个Group,既然称之为父亲,那当然一个网元只能有一个父亲,那么实现Group共享网元的效果就不能用Parent的属性来实现了。我们来分析一下在TWaver里体现一个网元属于某个Group,就是这个网元画在Group内,而Group的范围是由它的children的位置决定的,上面说了实现Group共享网元的效果是不能通过父子关系来实现的,那么我们就要从计算Group范围的地方入手,只要让Group不仅仅考虑它children的位置,也考虑需要共享的网元位置,就可以了,那么这个思路是否可行,让我们试试。
在TWaver中network在获取Group范围的方法是调用groupChildrenRectsFunction方法,这个方法默认只计算Group的children,那么根据上面的分析我们就重写这个方法,也添加上需要共享的网元。DataBox中网元很多,那么哪些网元需要共享呢,我们就给需要共享的网元添加一个自定义属性shared,如果需要共享值为TRUE,参考下面代码
1 |
network.groupChildrenRectsFunction = function(group:Group, network:twaver.network.Network):ICollection { |
2 |
var rects:ICollection = new Collection();
|
3 |
for (var i: int = 0 ; i < group.childrenCount; i++){
|
4 |
var child:IElement = group.children.getItemAt(i);
|
6 |
var ui:twaver.network.ui.ElementUI = network.getElementUI(child);
|
8 |
rects.addItem( new Rectangle(ui.x, ui.y, ui.measuredWidth, ui.measuredHeight));
|
12 |
var box:ElementBox = network.elementBox;
|
13 |
box.forEach(function(e:Element){
|
14 |
if (e.getClient( 'shared' )){
|
15 |
var ui:twaver.network.ui.ElementUI = network.getElementUI(e);
|
17 |
rects.addItem( new Rectangle(ui.x, ui.y, ui.measuredWidth, ui.measuredHeight));
|
然后看看实现效果
上下点击,貌似实现了,看来我们的思路是正确的,刚进入页面共享的网元是现实的,但选中Group后,共享网元被覆盖了,TWaver老用户知道了,我们该用Layer了,还有一个问题截图中我们看到上面的Group总是覆盖下面的Group,那如何解呢?好解,我们设置Group的透明度吧,见下面代码
1 |
var group:Group = new Group();
|
2 |
group.addChild(HAProxy1); |
3 |
group.addChild(HAProxy2); |
5 |
group.setStyle(Styles.GROUP_SHAPE, Consts.SHAPE_OVAL); |
6 |
group.setStyle(Styles.GROUP_FILL_ALPHA, 0.5 );
|
9 |
var group1:Group = new Group();
|
10 |
group1.addChild(HAProxy3); |
11 |
group1.addChild(HAProxy4); |
12 |
group1.expanded = true ;
|
13 |
group1.setStyle(Styles.GROUP_SHAPE, Consts.SHAPE_OVAL); |
14 |
group1.setStyle(Styles.GROUP_FILL_ALPHA, 0.5 );
|
15 |
elementBox.add(group1); |
17 |
var layer:Layer = new Layer( 100 );
|
18 |
var HAProxy5:Node = createNode( "HAProxy5" , "HAProxyIcon" , new Point( 180 , 280 ), Consts.POSITION_BOTTOMLEFT);
|
19 |
HAProxy5.setClient( 'shared' , true );
|
20 |
HAProxy5.layerID = layer.id; |
21 |
var HAProxy6:Node = createNode( "HAProxy6" , "HAProxyIcon" , new Point( 400 , 280 ), Consts.POSITION_BOTTOMRIGHT);
|
22 |
HAProxy6.setClient( 'shared' , true );
|
23 |
HAProxy6.layerID = layer.id; |
24 |
elementBox.layerBox.add(layer); |
再看看效果:
暮然回首,效果实现了,但是不要高兴太早,如果移动网元,你会发现移动Group的孩子Group的大小会随之改变,但是移动共享的网元,只有选择了Group后,Group才回改变,如果你有需求的话,那就要添加上监听当网元的location变化后重绘network,参考代码
1 |
elementBox.addDataPropertyChangeListener(function(e:PropertyChangeEvent): void {
|
2 |
if (e.property == "location" ){
|
3 |
network.invalidateElementUIs();
|
这下完成了,各位看官可以下载附近中Demo,拖拖拽拽试试效果,附件下载后放在TWaver Demo中,替换原来的文件可运行。
分享到:
相关推荐
Sync your Xcode iOS ...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
组图 一个地图和消息共享 Android 应用程序
),提出了一种基于领域共享的群体稀疏准则——字典学习模型,用于学习具有对齐联合分布的领域共享表示。实验结果表明,该方法在方差较大的数据集上也表现良好。 我们的结果进行了定量和定性分析,并进行了参数灵敏...
根据共享特征将JSON数据拆分为多个文件。 Groupby是一个命令行实用程序,但也可以从。 groupby staff.json ' staff/{department}.json ' 在上面的示例中,每个部门的结果输出将是一个文件,每个文件都包含该部门...
而第二个版本,使用万网主机作为单个节点,SiteGroup 对所有网站进行集群化管理,充分实现数据的整合以及实现网站间数据通信,数据推送与接收等。站群管理系统是网站集群的“交换机”,集群中各站点的数据直接与站群...
域環境下自動將windows目錄設置成隱藏的admin默認共享 把此命令放在c:\windows\system32\grouppolicy\user\scripts\logon\ (首先打開隱藏文件)
组内资料分享 读书小组列出我们小组中的共享论文日期扬声器纸张来源标题代码2019.10.16郭栋CVPR20192019.10.16刘保森CVPR20192019.10.23梅昊陈迈凯2019.10.23雷文辉MICCAI20192019.10.30王璐MICCAI20192019.10.30...
如果你不是很明白系统日志里面的内容就用这个脚本吧,可以记录每次开机和关机的时间,把开机和关机分别复制到C:WINDOWSSystem32GroupPolicyMachineScriptsStartup和C:\WINDOWS\System32\GroupPolicy\Machine\Scripts...
701 Group 2项目的共享仓库 React App Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将...
# Silic Group - 技术自由 技术创新 技术共享 技术原创 技术进步 # BlackBap.Org # Win7_x64_sp1/Win_xp_sp3 bug修正 添加time.sleep # Silic Group Hacker Army exp好了 在cmd里 cssg.exe ip 即可
WAD-Group-15
CSCI355_Group5项目 用于共享与学生完成Web开发课程的小组项目有关的文件的存储库
CS2450_TeamProject 与CS2450组项目中的Group1成员共享的文件和源代码,用于模拟BasicML机器。
在线共享项目、日历、文件和电子邮件。 它是满足您所有在线办公需求的完整解决方案。 从客户电话到项目,最后是发票。 支持系统有助于让您的客户满意。 Group Office 快速、安全且设计隐私。 您可以通过自托管云和...
最终小组项目 最终小组项目的共享存储库
该项目部署在: : 使用的技术React节点+ Express WebRTC 套接字贡献者: 特征加入房间视频流文字聊天静音视频/音频屏幕共享安装克隆使用https://github.com/Hyunse/video-group-meeting.git将此仓库克隆到本地...
groupdata2 作者: ( ) 执照:开始时间: 2016年10月概述R包,用于将数据划分为组。 创建平衡的分区和交叉验证折叠。 执行时间序列窗口化以及数据的常规分组和拆分。 平衡现有组与上采样和下采样。 查找与前一个值...
studygroup20:通过创建要与群组共享的个人资料来进行自我介绍,或者复制并粘贴我的个人资料以填写信息!
centos 7安装Samba ...安装Samba: yum install -y samba samba-client 2.修改配置文件: vim /etc/samba/smb.conf 共享一个目录,任何人都可以访问,即不用输入密码即可...把”MY GROUP”改成”WORKGROUP” 在“securit
协作者可以快速创建博客文章和演示文稿,以彼此共享想法,中间结果和研究进展。 ##如何为自己的项目设置项目页面? 此存储库 分叉的存储库为您的新项目名称。 更新_config.yml中的指示字段 ##我如何发表新的帖子...