0

在 JPanel 上绘制 Path2D 时,我有一个奇怪的行为。


正如您在此屏幕截图中看到的那样,一些形状有点像尾巴:

在此处输入图像描述

当我将类型更改为 Line2D.Double 时,正如我所期望的那样:

在此处输入图像描述

这是绘制路径/线的代码:

Path2D.Double path = new Path2D.Double();
Graphics2D g = (Graphics2D)this.getGraphics();
for(int i=0; i<geom.size(); i++)
{
    double x = ddGeom.getX(geom.get(i));
    double y = ddGeom.getY(geom.get(i));
    if(i==0)
        path.moveTo(x-draw_center.x, y-draw_center.y);
    path.lineTo(x-draw_center.x, y-draw_center.y);
}
g.draw(path);


您知道 Screenshot1 中的“尾巴”来自哪里吗?我使用 SDK 版本 6。

非常感谢您的帮助




编辑:将代码段更改为

if(i==0)
     path.moveTo(x-draw_center.x, y-draw_center.y);
else
     path.lineTo(x-draw_center.x, y-draw_center.y);

大多数(可能是 75%)的尾巴消失了。知道为什么会这样吗?

4

2 回答 2

2

我终于明白了。多亏了 HovercraftFullOfEels 提示“奇怪的中风”,我玩了自己的中风。原笔画:

BasicStroke stroke = new BasicStroke(2.0f);

变成:

BasicStroke stroke = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);

有了新的 Stroke,所有的“尾巴”都消失了。我仍然不明白为什么会发生这种情况,但如果有人遇到同样的问题,这种解决方法可能会有所帮助。

我仍然对这种行为的解释非常感兴趣。

感谢您的大力帮助

于 2012-09-14T13:23:28.120 回答
2

您在第一张图片中看到的几乎就像“斜接”。斜接是一种在路径中绘制线连接的方法,连接线的两个外边界一直延伸到它们相交并且封闭区域也被填充。

您的几何图形是否可能包含具有几乎相同坐标的连续点?以下示例展示了相同的问题,因为最后两个点具有几乎相同的坐标。

JFrame frame = new JFrame();

frame.setSize(300, 300);
frame.setContentPane(new Container() {
    @Override
    public void paint(Graphics graphics) {
        Graphics2D g2 = (Graphics2D) graphics;
        g2.setStroke(new BasicStroke(5));
        g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(KEY_STROKE_CONTROL, VALUE_STROKE_PURE);

        Path2D.Double path = new Path2D.Double();
        path.moveTo(200, 100);
        path.lineTo(100, 100);
        path.lineTo(101, 100.3);

        g2.draw(path);
    }
});

frame.setVisible(true);

于 2013-05-06T12:13:43.963 回答