阅读:6264回复:2
GEF中自定义锚点的使用
在一个典型的GEF程序中,我们通常会在画板上放上一些图形,然后用一些线连接这些图形。这些线的两个端点就是Anchor(锚点),而锚点所在的图形叫做锚点的Owner。更细化的说,一条线的起点叫做Source Anchor(源锚点),终结点叫做Target Anchor(目标锚点)。
锚点的具体位置和两个图形的位置以及连线的方式有关,这两个前提确定之后,锚点可以通过一定的方法计算得出。Draw2D缺省为我们提供了一些Anchor的实现,常用的有ChopboxAnchor以及EllipseAnchor,对于简单的应用来说,这些draw2D自带的锚点就可以满足我们的需要,但是对于一些不规则的形状,若还是使用这些锚点就无法达到想要的效果了,例如下图这个参与者与用例的连线,若是使用ChopboxAnchor就会出现下图所示的连线只连接在图形的矩形边界的情况,我们想要的功能是矩形可以连接到参与者的小人上,这时就需要使用我们自己定义的锚点了。下面将会详细介绍在GEF中如何使用自定义的锚点。 图片:QQ图片20190523142548.png |
|
沙发#
发布于:2019-05-23 16:07
我们的参与者模型的EditPart实现了了gef的NodeEditPart接口,该接口中有4个方法,分别用来返回连线连接中及连接完成后连线与模型figure之间的锚点。
图片:a.png 上图中的方法是参与者editpart中的原有的锚点方法实现,都是直接用了draw2d中自带额ChopboxAnchor锚点,该锚点会取两个图形的中心线和图形边界的交点做为锚点,因此会出现之前图中的效果。 要实现正确的连线连接效果,我们要做的是在这4个方法中返回我们针对参与者图形的自定义的锚点。 |
|
板凳#
发布于:2019-05-23 17:13
我们需要建一个锚点类,该锚点类继承于ChopboxAnchor类,我们需要做的是重写类中的用来确定锚点位置的getLocation方法。
图片:b.png 在getLocation方法中,我们根据参考点的位置与图形的位置确定了8个不同的锚点,分别是上、下、左、右、左上、左下、右上、右下,返回的位置是从锚点的Owner(锚点所在的图形即参与者图形)图形中获取的小人的头部及手部脚部的位置。 最终的效果如下图所示: 图片:QQ图片20190523171159.png |
|