[导入]Netron研究(四)----"移动和联通"之联通篇
前一篇随笔谈到了Netron中有关图形移动方面的内容,下面谈谈Netron中关于图形间联系的相关内容.
在Netron Light中,和连接有关的两个核心类是:Connection和Connentor类,前面我提到了,他们两者同样是继承自Entity类,因此他们都重写了Entity类的抽象方法:Paint,Hit,Invalidate,Move,大部分的实现都和ShapeBase类的重写类似,下面只把涉及连接的内容分析一下:
Connector对象
该对象相当一个连接点,图形四周分布着这样的点,Connection两端也有这样的点,正是通过这样的点来将图形之间进行连接.其中,两个关键域如下:
下面是Connector对象内用于连接的方法:
Connection对象
该对象用于两个图形之间的连接,说白了,他就是一条线(在他的Paint方法可以体现).在线的两头分别有一个Connector对象,用于图形间的连接.![](http://www.agilelabs.cn/aggbug.aspx?PostID=363)
文章来源:http://www.agilelabs.cn/blogs/woody/archive/2005/12/28/363.aspx
在Netron Light中,和连接有关的两个核心类是:Connection和Connentor类,前面我提到了,他们两者同样是继承自Entity类,因此他们都重写了Entity类的抽象方法:Paint,Hit,Invalidate,Move,大部分的实现都和ShapeBase类的重写类似,下面只把涉及连接的内容分析一下:
Connector对象
该对象相当一个连接点,图形四周分布着这样的点,Connection两端也有这样的点,正是通过这样的点来将图形之间进行连接.其中,两个关键域如下:
这两个attach比较难以理解,attachedTo是指该Connector连接到的Conncetor(一个Connector只能连接到一个Connector).attachedConnectors指的连接到这个Connector的所有Connector集合(一个Connector可以被多个Connector对象连接).这两者之间有一个连接"方向"的差别.刚开始特别不好理解,经常被他们搞迷糊.protected ConnectorCollection attachedConnectors; protected Connector attachedTo;
下面是Connector对象内用于连接的方法:
这个方法功能是将 c 连接到该对象(注意"方向"的问题,不然会糊涂).如果c原来已经连接到某个Connector,那么则删除他们的关系.然后,将c和该Connector建立一个连接关系.有连接的方法必然有去除连接的方法.在Connector类中,提供了DetachConnector和Release方法.比较简单不多说.public void AttachConnector(Connector c) { //remove from the previous, if any if(c.attachedTo!=null) { c.attachedTo.attachedConnectors.Remove(c); } attachedConnectors.Add(c); c.attachedTo=this; }
Connection对象
该对象用于两个图形之间的连接,说白了,他就是一条线(在他的Paint方法可以体现).在线的两头分别有一个Connector对象,用于图形间的连接.
protected Connector from; protected Connector to;
该对象没有其他什么特殊的东西.
现在图形间连接的行为和条件已经有了.剩下就是"容器"(GraphControl)来控制图形间的连接了.
目前,有两种方式添加图形间的连接.
1.直接以编程的方式,通过调用GraphControl的AddConnection(Connector from,Connector to)方法将两个Connector连接起来.
2.对Connection对象的两端进行拖动,使其两端的Connector对象与其他Connector对象连接起来.
其实这两种方法的实质都是一样的.最终都是通过Connector的AttachConnector方法将其连接起来.细节就不再详述.
----2005.12.28 12:27 星期二
文章来源:http://www.agilelabs.cn/blogs/woody/archive/2005/12/28/363.aspx