在prefuse中创建4个节点和弯曲边缘的圆

时间:2012-11-27 22:26:55

标签: prefuse

我正在尝试用多边形制作一个圆圈(我知道我可以使用例如形状渲染器,但我需要它像这样)。

圆圈应该由4个节点和4个弯曲边缘组成。节点由ShapeRenderer渲染,并且定位为“+”,边缘渲染器将边缘曲线化。现在我有问题,边缘进入侧面的所有节点,这对于顶部和底部节点是可以的,但是对于左侧和右侧节点不起作用,因为它们应该进入顶部和底部的节点,所以我没有得到一个完美的圆圈,但更多的是蛋形。

有人知道如何更改边缘进入节点的位置或如何将此节点旋转90度?

2 个答案:

答案 0 :(得分:0)

EdgeRenderer中设置控制点的方法看起来非常简单:

protected void getCurveControlPoints(EdgeItem eitem, Point2D[] cp, 
                double x1, double y1, double x2, double y2) 
{
    double dx = x2-x1, dy = y2-y1;      
    cp[0].setLocation(x1+2*dx/3,y1);
    cp[1].setLocation(x2-dx/8,y2-dy/8);
}

可能你必须覆盖它来设置你想要的曲线。

如果是这种情况,请在此处与他人分享您的解决方案。

答案 1 :(得分:0)

好的,我正在尝试一些东西并提出以下内容:

      protected void getCurveControlPoints(EdgeItem eitem, Point2D[] cp, 
                    double x1, double y1, double x2, double y2) 
    {
        double dx = x2-x1, dy = y2-y1;      
//        cp[0].setLocation(x1+2*dx/3,y1);
//        cp[1].setLocation(x2-dx/8,y2-dy/8);
        cp[0].setLocation(x1+2*dx/3,y1);
        cp[1].setLocation(x2,y2-dy/3);
    }

这适合我,我不确定它是否是一个完美的圆圈,但我无法发现差异。 我也不太明白它为什么会起作用,因为我向x1添加了2 * dx / 3,但是从y2减去了dy / 3。有人知道为什么会这样吗?