之前:通过修改线本身的位置的pointList 来实现.为连线增加拐角圆滑修饰.
这样有很多弊端.
后来发现这个方法分享给大家.
outlineShape()是根据线的pointList返回需要绘制线的pointList. 所以我们可以通过重写这个方法在不改变线数据的情况线,改变线的显示样式.
好处:1.不为连线增加额外的位置数据.(简化数据)
2. 不为创建线改变的handle增加负担
3.全局生效.
一下是代码: 限于连线时水平竖直分布的.
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
public class CustomPolylineConnection extends PolylineConnection {
private static final int OFFSET = 2;
@Override
protected void outlineShape(Graphics g) {
PointList points = getPoints();
if (points.size() <= 2) {
super.outlineShape(g);
} else if (points.size() > 2)// 存在拐点的情况
{
PointList shoulderPoints = new PointList();
shoulderPoints.addPoint(points.getFirstPoint());
for (int i = 1; i < points.size() - 1; i++)// 遍历除两端的点,添加肩膀
{
Point forwardPoint = points.getPoint(i - 1);
Point anglePoint = points.getPoint(i);
Point nextPoint = points.getPoint(i + 1);
if (forwardPoint.x == anglePoint.x) // 竖直线
{
if (forwardPoint.y < anglePoint.y) // 向下
{
shoulderPoints.addPoint(anglePoint.x, anglePoint.y
- OFFSET);
} else if (forwardPoint.y > anglePoint.y) // 向上
{
shoulderPoints.addPoint(anglePoint.x, anglePoint.y
+ OFFSET);
}
// anglePoint 和 nextPoint是水平线
if (anglePoint.x < nextPoint.x) { // 向右
shoulderPoints.addPoint(anglePoint.x + OFFSET,
anglePoint.y);
} else if (anglePoint.x > nextPoint.x) // 向左
{
shoulderPoints.addPoint(anglePoint.x - OFFSET,
anglePoint.y);
}
} else if (forwardPoint.y == anglePoint.y) // 水平线
{
if (forwardPoint.x < anglePoint.x) // 向右
{
shoulderPoints.addPoint(anglePoint.x - OFFSET,
anglePoint.y);
} else if (forwardPoint.x > anglePoint.x) // 向左
{
shoulderPoints.addPoint(anglePoint.x + OFFSET,
anglePoint.y);
}
// anglePoint 和 nextPoint是竖直线
if (anglePoint.y < nextPoint.y) { // 向下
shoulderPoints.addPoint(anglePoint.x, anglePoint.y
+ OFFSET);
} else if (anglePoint.y > nextPoint.y) { // 向上
shoulderPoints.addPoint(anglePoint.x, anglePoint.y
- OFFSET);
}
}
}
shoulderPoints.addPoint(points.getLastPoint());
g.drawPolyline(shoulderPoints);
}
}
}
效果图: 前面那条线是选中增加的handle 不会使创建handle逻辑复杂化