太白将进酒,共邀天下友

形位合成变动静,有无陈新映全域。 内外移思抽精明,连续离散归终果。

导航

[导入]Netron研究(四)----"移动和联通"之联通篇

    前一篇随笔谈到了Netron中有关图形移动方面的内容,下面谈谈Netron中关于图形间联系的相关内容.
    在Netron Light中,和连接有关的两个核心类是:Connection和Connentor类,前面我提到了,他们两者同样是继承自Entity类,因此他们都重写了Entity类的抽象方法:Paint,Hit,Invalidate,Move,大部分的实现都和ShapeBase类的重写类似,下面只把涉及连接的内容分析一下:
    Connector对象
    该对象相当一个连接点,图形四周分布着这样的点,Connection两端也有这样的点,正是通过这样的点来将图形之间进行连接.其中,两个关键域如下:
protected ConnectorCollection attachedConnectors; protected Connector attachedTo;
    这两个attach比较难以理解,attachedTo是指该Connector连接到的Conncetor(一个Connector只能连接到一个Connector).attachedConnectors指的连接到这个Connector的所有Connector集合(一个Connector可以被多个Connector对象连接).这两者之间有一个连接"方向"的差别.刚开始特别不好理解,经常被他们搞迷糊.
    下面是Connector对象内用于连接的方法:
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; }
    这个方法功能是将 c 连接到该对象(注意"方向"的问题,不然会糊涂).如果c原来已经连接到某个Connector,那么则删除他们的关系.然后,将c和该Connector建立一个连接关系.有连接的方法必然有去除连接的方法.在Connector类中,提供了DetachConnector和Release方法.比较简单不多说.
   
    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

posted on 2006-01-16 11:03  太白飞仙  阅读(914)  评论(0编辑  收藏  举报